hts-1.0.1/000077500000000000000000000000001304417722000123075ustar00rootroot00000000000000hts-1.0.1/.travis.yml000066400000000000000000000003521304417722000144200ustar00rootroot00000000000000language: go go: - 1.3.3 - 1.4.3 - 1.5.4 - 1.6.3 - 1.7 - 1.8beta1 # Get deps, build, test, and ensure the code is gofmt'ed. script: - go get -d -t -v ./... - go build -v ./... - go test -v ./... - diff <(gofmt -d .) <("") hts-1.0.1/LICENSE000066400000000000000000000027751304417722000133270ustar00rootroot00000000000000Copyright ©2012 The bíogo Authors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the bíogo project nor the names of its authors and contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. hts-1.0.1/README.md000066400000000000000000000075441304417722000136000ustar00rootroot00000000000000![bíogo](https://raw.githubusercontent.com/biogo/biogo/master/biogo.png) #HTS [![Build Status](https://travis-ci.org/biogo/hts.svg?branch=master)](https://travis-ci.org/biogo/hts) [![GoDoc](https://godoc.org/github.com/biogo/hts?status.svg)](https://godoc.org/github.com/biogo/hts) ##Installation $ go get github.com/biogo/hts/... ##Overview SAM and BAM handling for the Go language. bíogo/hts provides a Go native implementation of the [SAM specification](https://samtools.github.io/hts-specs/SAMv1.pdf) for SAM and BAM alignment formats commonly used for representation of high throughput genomic data, the BAI, CSI and tabix indexing formats, and the BGZF blocked compression format. The bíogo/hts packages perform parallelized read and write operations and are able to cache recent reads according to user-specified caching methods. The bíogo/hts APIs have been constructed to provide a consistent interface to sequence alignment data and the underlying compression system in order to aid ease of use and tool development. ##Example usage The following code implements the equivalent of `samtools view -c -f n -F N file.bam`. ``` package main import ( "flag" "fmt" "io" "log" "os" "github.com/biogo/hts/bam" "github.com/biogo/hts/bgzf" "github.com/biogo/hts/sam" ) var ( require = flag.Int("f", 0, "required flags") exclude = flag.Int("F", 0, "excluded flags") file = flag.String("file", "", "input file (empty for stdin)") conc = flag.Int("threads", 0, "number of threads to use (0 = auto)") help = flag.Bool("help", false, "display help") ) const maxFlag = int(^sam.Flags(0)) func main() { flag.Parse() if *help { flag.Usage() os.Exit(0) } if *require > maxFlag { flag.Usage() log.Fatal("required flags (f) out of range") } reqFlag := sam.Flags(*require) if *exclude > maxFlag { flag.Usage() log.Fatal("excluded flags (F) out of range") } excFlag := sam.Flags(*exclude) var r io.Reader if *file == "" { r = os.Stdin } else { f, err := os.Open(*file) if err != nil { log.Fatalf("could not open file %q:", err) } defer f.Close() ok, err := bgzf.HasEOF(f) if err != nil { log.Fatalf("could not open file %q:", err) } if !ok { log.Printf("file %q has no bgzf magic block: may be truncated", *file) } r = f } b, err := bam.NewReader(r, *conc) if err != nil { log.Fatalf("could not read bam:", err) } defer b.Close() // We only need flags, so skip variable length data. b.Omit(bam.AllVariableLengthData) var n int for { rec, err := b.Read() if err == io.EOF { break } if err != nil { log.Fatalf("error reading bam: %v", err) } if rec.Flags&reqFlag == reqFlag && rec.Flags&excFlag == 0 { n++ } } fmt.Println(n) } ``` ##Getting help Help or similar requests are preferred on the biogo-user Google Group. https://groups.google.com/forum/#!forum/biogo-user ##Contributing If you find any bugs, feel free to file an issue on the github issue tracker. Pull requests are welcome, though if they involve changes to API or addition of features, please first open a discussion at the biogo-dev Google Group. https://groups.google.com/forum/#!forum/biogo-dev ##Citing If you use bíogo, please cite Kortschak and Adelson "bíogo: a simple high-performance bioinformatics toolkit for the Go language", doi:[10.1101/005033](http://biorxiv.org/content/early/2014/05/12/005033). ##Library Structure and Coding Style The coding style should be aligned with normal Go idioms as represented in the Go core libraries. ##Copyright and License Copyright ©2011-2013 The bíogo Authors except where otherwise noted. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. The bíogo logo is derived from Bitstream Charter, Copyright ©1989-1992 Bitstream Inc., Cambridge, MA. BITSTREAM CHARTER is a registered trademark of Bitstream Inc. hts-1.0.1/bam/000077500000000000000000000000001304417722000130465ustar00rootroot00000000000000hts-1.0.1/bam/HG00096_1000_test.go000066400000000000000000023332731304417722000160060ustar00rootroot00000000000000package bam import ( "net/url" "time" "github.com/biogo/hts/sam" ) var headerHG00096_1000 *sam.Header func mustReference(r *sam.Reference, err error) *sam.Reference { if err != nil { panic(err) } return r } func mustReadGroup(r *sam.ReadGroup, err error) *sam.ReadGroup { if err != nil { panic(err) } return r } func init() { var err error headerHG00096_1000, err = sam.NewHeader(nil, []*sam.Reference{ mustReference(sam.NewReference( "1", "NCBI37", "Human", 249250621, []byte{0x1b, 0x22, 0xb9, 0x8c, 0xde, 0xb4, 0xa9, 0x30, 0x4c, 0xb5, 0xd4, 0x80, 0x26, 0xa8, 0x51, 0x28}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "2", "NCBI37", "Human", 243199373, []byte{0xa0, 0xd9, 0x85, 0x1d, 0xa0, 0x4, 0x0, 0xde, 0xc1, 0x9, 0x8a, 0x92, 0x55, 0xac, 0x71, 0x2e}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "3", "NCBI37", "Human", 198022430, []byte{0xfd, 0xfd, 0x81, 0x18, 0x49, 0xcc, 0x2f, 0xad, 0xeb, 0xc9, 0x29, 0xbb, 0x92, 0x59, 0x2, 0xe5}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "4", "NCBI37", "Human", 191154276, []byte{0x23, 0xdc, 0xcd, 0x10, 0x68, 0x97, 0x54, 0x2a, 0xd8, 0x7d, 0x27, 0x65, 0xd2, 0x8a, 0x19, 0xa1}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "5", "NCBI37", "Human", 180915260, []byte{0x7, 0x40, 0x17, 0x3d, 0xb9, 0xff, 0xd2, 0x64, 0xd7, 0x28, 0xf3, 0x27, 0x84, 0x84, 0x5c, 0xd7}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "6", "NCBI37", "Human", 171115067, []byte{0x1d, 0x3a, 0x93, 0xa2, 0x48, 0xd9, 0x2a, 0x72, 0x9e, 0xe7, 0x64, 0x82, 0x3a, 0xcb, 0xbc, 0x6b}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "7", "NCBI37", "Human", 159138663, []byte{0x61, 0x83, 0x66, 0xe9, 0x53, 0xd6, 0xaa, 0xad, 0x97, 0xdb, 0xe4, 0x77, 0x7c, 0x29, 0x37, 0x5e}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "8", "NCBI37", "Human", 146364022, []byte{0x96, 0xf5, 0x14, 0xa9, 0x92, 0x9e, 0x41, 0xc, 0x66, 0x51, 0x69, 0x7b, 0xde, 0xd5, 0x9a, 0xec}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "9", "NCBI37", "Human", 141213431, []byte{0x3e, 0x27, 0x31, 0x17, 0xf1, 0x5e, 0xa, 0x40, 0xf, 0x1, 0x5, 0x5d, 0x9f, 0x39, 0x37, 0x68}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "10", "NCBI37", "Human", 135534747, []byte{0x98, 0x8c, 0x28, 0xe0, 0x0, 0xe8, 0x4c, 0x26, 0xd5, 0x52, 0x35, 0x9a, 0xf1, 0xea, 0x2e, 0x1d}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "11", "NCBI37", "Human", 135006516, []byte{0x98, 0xc5, 0x90, 0x49, 0xa2, 0xdf, 0x28, 0x5c, 0x76, 0xff, 0xb1, 0xc6, 0xdb, 0x8f, 0x8b, 0x96}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "12", "NCBI37", "Human", 133851895, []byte{0x51, 0x85, 0x1a, 0xc0, 0xe1, 0xa1, 0x15, 0x84, 0x7a, 0xd3, 0x64, 0x49, 0xb0, 0x1, 0x58, 0x64}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "13", "NCBI37", "Human", 115169878, []byte{0x28, 0x3f, 0x8d, 0x78, 0x92, 0xba, 0xa8, 0x1b, 0x51, 0xa, 0x1, 0x57, 0x19, 0xca, 0x7b, 0xb}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "14", "NCBI37", "Human", 107349540, []byte{0x98, 0xf3, 0xca, 0xe3, 0x2b, 0x2a, 0x2e, 0x95, 0x24, 0xbc, 0x19, 0x81, 0x39, 0x27, 0x54, 0x2e}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "15", "NCBI37", "Human", 102531392, []byte{0xe5, 0x64, 0x5a, 0x79, 0x4a, 0x82, 0x38, 0x21, 0x5b, 0x2c, 0xd7, 0x7a, 0xcb, 0x95, 0xa0, 0x78}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "16", "NCBI37", "Human", 90354753, []byte{0xfc, 0x9b, 0x1a, 0x7b, 0x42, 0xb9, 0x7a, 0x86, 0x4f, 0x56, 0xb3, 0x48, 0xb0, 0x60, 0x95, 0xe6}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "17", "NCBI37", "Human", 81195210, []byte{0x35, 0x1f, 0x64, 0xd4, 0xf4, 0xf9, 0xdd, 0xd4, 0x5b, 0x35, 0x33, 0x6a, 0xd9, 0x7a, 0xa6, 0xde}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "18", "NCBI37", "Human", 78077248, []byte{0xb1, 0x5d, 0x4b, 0x2d, 0x29, 0xdd, 0xe9, 0xd3, 0xe4, 0xf9, 0x3d, 0x1d, 0xf, 0x2c, 0xbc, 0x9c}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "19", "NCBI37", "Human", 59128983, []byte{0x1a, 0xac, 0xd7, 0x1f, 0x30, 0xdb, 0x8e, 0x56, 0x18, 0x10, 0x91, 0x3e, 0xb, 0x72, 0x63, 0x6d}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "20", "NCBI37", "Human", 63025520, []byte{0xd, 0xec, 0x96, 0x60, 0xec, 0x1e, 0xfa, 0xaf, 0x33, 0x28, 0x1c, 0xd, 0x5e, 0xa2, 0x56, 0xf}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "21", "NCBI37", "Human", 48129895, []byte{0x29, 0x79, 0xa6, 0x8, 0x5b, 0xfe, 0x28, 0xe3, 0xad, 0x6f, 0x55, 0x2f, 0x36, 0x1e, 0xd7, 0x4d}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "22", "NCBI37", "Human", 51304566, []byte{0xa7, 0x18, 0xac, 0xaa, 0x61, 0x35, 0xfd, 0xca, 0x83, 0x57, 0xd5, 0xbf, 0xe9, 0x42, 0x11, 0xdd}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "X", "NCBI37", "Human", 155270560, []byte{0x7e, 0xe, 0x2e, 0x58, 0x2, 0x97, 0xb7, 0x76, 0x4e, 0x31, 0xdb, 0xc8, 0xc, 0x25, 0x40, 0xdd}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "Y", "NCBI37", "Human", 59373566, []byte{0x1f, 0xa3, 0x47, 0x47, 0x50, 0xaf, 0x9, 0x48, 0xbd, 0xf9, 0x7d, 0x5a, 0xe, 0xe5, 0x2e, 0x51}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "MT", "NCBI37", "Human", 16569, []byte{0xc6, 0x8f, 0x52, 0x67, 0x4c, 0x9f, 0xb3, 0x3a, 0xef, 0x52, 0xdc, 0xf3, 0x99, 0x75, 0x55, 0x19}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000207.1", "NCBI37", "Human", 4262, []byte{0xf3, 0x81, 0x48, 0x41, 0xf1, 0x93, 0x9d, 0x3c, 0xa1, 0x90, 0x72, 0xd9, 0xe8, 0x9f, 0x3f, 0xd7}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000226.1", "NCBI37", "Human", 15008, []byte{0x1c, 0x1b, 0x2c, 0xd1, 0xfc, 0xcb, 0xc0, 0xa9, 0x9b, 0x6a, 0x44, 0x7f, 0xa2, 0x4d, 0x15, 0x4}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000229.1", "NCBI37", "Human", 19913, []byte{0xd0, 0xf4, 0xe, 0xc8, 0x7d, 0xe3, 0x11, 0xd8, 0xe7, 0x15, 0xb5, 0x2e, 0x4c, 0x70, 0x62, 0xe1}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000231.1", "NCBI37", "Human", 27386, []byte{0xba, 0x88, 0x82, 0xce, 0x3a, 0x1e, 0xfa, 0x20, 0x80, 0xe5, 0xd2, 0x9b, 0x95, 0x65, 0x68, 0xa4}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000210.1", "NCBI37", "Human", 27682, []byte{0x85, 0x11, 0x6, 0xa7, 0x42, 0x38, 0x4, 0x41, 0x26, 0x13, 0x1c, 0xe2, 0xa8, 0xe5, 0x84, 0x7c}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000239.1", "NCBI37", "Human", 33824, []byte{0x99, 0x79, 0x5f, 0x15, 0x70, 0x2c, 0xae, 0xc4, 0xfa, 0x1c, 0x4e, 0x15, 0xf8, 0xa2, 0x9c, 0x7}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000235.1", "NCBI37", "Human", 34474, []byte{0x11, 0x8a, 0x25, 0xca, 0x21, 0xc, 0xfb, 0xcd, 0xfb, 0x6c, 0x2e, 0xbb, 0x24, 0x9f, 0x96, 0x80}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000201.1", "NCBI37", "Human", 36148, []byte{0xdf, 0xb7, 0xe7, 0xec, 0x60, 0xff, 0xdc, 0xb8, 0x5c, 0xb3, 0x59, 0xea, 0x28, 0x45, 0x4e, 0xe9}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000247.1", "NCBI37", "Human", 36422, []byte{0x7d, 0xe0, 0x2, 0x26, 0xbb, 0x7d, 0xf1, 0xc5, 0x72, 0x76, 0xca, 0x6b, 0xaa, 0xba, 0xfd, 0x15}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000245.1", "NCBI37", "Human", 36651, []byte{0x89, 0xbc, 0x61, 0x96, 0xf, 0x37, 0xd9, 0x4a, 0xbf, 0xd, 0xf2, 0xd4, 0x81, 0xad, 0xa0, 0xec}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000197.1", "NCBI37", "Human", 37175, []byte{0x6f, 0x5e, 0xfd, 0xd3, 0x66, 0x43, 0xa9, 0xb8, 0xc8, 0xcc, 0xad, 0x6f, 0x2f, 0x1e, 0xdc, 0x7b}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000203.1", "NCBI37", "Human", 37498, []byte{0x96, 0x35, 0x8c, 0x32, 0x5f, 0xe0, 0xe7, 0xb, 0xee, 0x73, 0x43, 0x6e, 0x8b, 0xb1, 0x4d, 0xbd}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000246.1", "NCBI37", "Human", 38154, []byte{0xe4, 0xaf, 0xcd, 0x31, 0x91, 0x2a, 0xf9, 0xd9, 0xc2, 0x54, 0x6a, 0xcf, 0x1c, 0xb2, 0x3a, 0xf2}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000249.1", "NCBI37", "Human", 38502, []byte{0x1d, 0x78, 0xab, 0xec, 0x37, 0xc1, 0x5f, 0xe2, 0x9a, 0x27, 0x5e, 0xb0, 0x8d, 0x5a, 0xf2, 0x36}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000196.1", "NCBI37", "Human", 38914, []byte{0xd9, 0x22, 0x6, 0xd1, 0xbb, 0x4c, 0x3b, 0x40, 0x19, 0xc4, 0x3c, 0x8, 0x75, 0xc0, 0x6d, 0xc0}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000248.1", "NCBI37", "Human", 39786, []byte{0x5a, 0x8e, 0x43, 0xbe, 0xc9, 0xbe, 0x36, 0xc7, 0xb4, 0x9c, 0x84, 0xd5, 0x85, 0x10, 0x77, 0x76}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000244.1", "NCBI37", "Human", 39929, []byte{0x9, 0x96, 0xb4, 0x47, 0x5f, 0x35, 0x3c, 0xa9, 0x8b, 0xac, 0xb7, 0x56, 0xac, 0x47, 0x91, 0x40}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000238.1", "NCBI37", "Human", 39939, []byte{0x13, 0x1b, 0x1e, 0xfc, 0x32, 0x70, 0xcc, 0x83, 0x86, 0x86, 0xb5, 0x4e, 0x7c, 0x34, 0xb1, 0x7b}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000202.1", "NCBI37", "Human", 40103, []byte{0x6, 0xcb, 0xf1, 0x26, 0x24, 0x7d, 0x89, 0x66, 0x4a, 0x4f, 0xae, 0xba, 0xd1, 0x30, 0xfe, 0x9c}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000234.1", "NCBI37", "Human", 40531, []byte{0x93, 0xf9, 0x98, 0x53, 0x6b, 0x61, 0xa5, 0x6f, 0xd0, 0xff, 0x47, 0x32, 0x2a, 0x91, 0x1d, 0x4b}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000232.1", "NCBI37", "Human", 40652, []byte{0x3e, 0x6, 0xb6, 0x74, 0x10, 0x61, 0xad, 0x93, 0xa8, 0x58, 0x75, 0x31, 0x30, 0x70, 0x57, 0xd8}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000206.1", "NCBI37", "Human", 41001, []byte{0x43, 0xf6, 0x9e, 0x42, 0x35, 0x33, 0xe9, 0x48, 0xbf, 0xae, 0x5c, 0xe1, 0xd4, 0x5b, 0xd3, 0xf1}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000240.1", "NCBI37", "Human", 41933, []byte{0x44, 0x5a, 0x86, 0x17, 0x3d, 0xa9, 0xf2, 0x37, 0xd7, 0xbc, 0xf4, 0x1c, 0x6c, 0xb8, 0xcc, 0x62}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000236.1", "NCBI37", "Human", 41934, []byte{0xfd, 0xcd, 0x73, 0x99, 0x13, 0xef, 0xa1, 0xfd, 0xc6, 0x4b, 0x6c, 0xc, 0xd7, 0x1, 0x67, 0x79}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000241.1", "NCBI37", "Human", 42152, []byte{0xef, 0x42, 0x58, 0xcd, 0xc5, 0xa4, 0x5c, 0x20, 0x6c, 0xea, 0x8f, 0xc3, 0xe1, 0xd8, 0x58, 0xcf}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000243.1", "NCBI37", "Human", 43341, []byte{0xcc, 0x34, 0x27, 0x9a, 0x7e, 0x35, 0x31, 0x36, 0x74, 0x1c, 0x9f, 0xce, 0x79, 0xbc, 0x43, 0x96}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000242.1", "NCBI37", "Human", 43523, []byte{0x2f, 0x86, 0x94, 0xfc, 0x47, 0x57, 0x6b, 0xc8, 0x1b, 0x5f, 0xe9, 0xe7, 0xde, 0xb, 0xa4, 0x9e}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000230.1", "NCBI37", "Human", 43691, []byte{0xb4, 0xeb, 0x71, 0xee, 0x87, 0x8d, 0x37, 0x6, 0x24, 0x6b, 0x7c, 0x1d, 0xbe, 0xf6, 0x92, 0x99}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000237.1", "NCBI37", "Human", 45867, []byte{0xe0, 0xc8, 0x2e, 0x77, 0x51, 0xdf, 0x73, 0xf4, 0xf6, 0xd0, 0xed, 0x30, 0xcd, 0xc8, 0x53, 0xc0}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000233.1", "NCBI37", "Human", 45941, []byte{0x7f, 0xed, 0x60, 0x29, 0x8a, 0x8d, 0x62, 0xff, 0x80, 0x8b, 0x74, 0xb6, 0xce, 0x82, 0x0, 0x1}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000204.1", "NCBI37", "Human", 81310, []byte{0xef, 0xc4, 0x9c, 0x87, 0x15, 0x36, 0xfa, 0x8d, 0x79, 0xcb, 0xa, 0x6, 0xfa, 0x73, 0x97, 0x22}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000198.1", "NCBI37", "Human", 90085, []byte{0x86, 0x8e, 0x77, 0x84, 0x4, 0xd, 0xa9, 0xd, 0x90, 0xd, 0x2d, 0x1b, 0x66, 0x7a, 0x13, 0x83}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000208.1", "NCBI37", "Human", 92689, []byte{0xaa, 0x81, 0xbe, 0x49, 0xbf, 0x3f, 0xe6, 0x3a, 0x79, 0xbd, 0xc6, 0xa6, 0xf2, 0x79, 0xab, 0xf6}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000191.1", "NCBI37", "Human", 106433, []byte{0xd7, 0x5b, 0x43, 0x6f, 0x50, 0xa8, 0x21, 0x4e, 0xe9, 0xc2, 0xa5, 0x1d, 0x30, 0xb2, 0xc2, 0xcc}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000227.1", "NCBI37", "Human", 128374, []byte{0xa4, 0xae, 0xad, 0x23, 0xf8, 0x5, 0x3f, 0x26, 0x55, 0xe4, 0x68, 0xbc, 0xc6, 0xec, 0xdc, 0xeb}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000228.1", "NCBI37", "Human", 129120, []byte{0xc5, 0xa1, 0x7c, 0x97, 0xe2, 0xc1, 0xa0, 0xb6, 0xa9, 0xcc, 0x5a, 0x6b, 0x6, 0x4b, 0x71, 0x4f}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000214.1", "NCBI37", "Human", 137718, []byte{0x46, 0xc2, 0x3, 0x2c, 0x37, 0xf2, 0xed, 0x89, 0x9e, 0xb4, 0x1c, 0x4, 0x73, 0x31, 0x9a, 0x69}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000221.1", "NCBI37", "Human", 155397, []byte{0x32, 0x38, 0xfb, 0x74, 0xea, 0x87, 0xae, 0x85, 0x7f, 0x9c, 0x75, 0x8, 0xd3, 0x15, 0xba, 0xbb}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000209.1", "NCBI37", "Human", 159169, []byte{0xf4, 0x5, 0x98, 0xe2, 0xa5, 0xa6, 0xb2, 0x6e, 0x84, 0xa3, 0x77, 0x5e, 0xd, 0x1e, 0x2c, 0x81}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000218.1", "NCBI37", "Human", 161147, []byte{0x1d, 0x70, 0x8b, 0x54, 0x64, 0x4c, 0x26, 0xc7, 0xe0, 0x1c, 0x2d, 0xad, 0x54, 0x26, 0xd3, 0x8c}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000220.1", "NCBI37", "Human", 161802, []byte{0xfc, 0x35, 0xde, 0x96, 0x3c, 0x57, 0xbf, 0x76, 0x48, 0x42, 0x9e, 0x64, 0x54, 0xf1, 0xc9, 0xdb}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000213.1", "NCBI37", "Human", 164239, []byte{0x9d, 0x42, 0x4f, 0xdc, 0xc9, 0x88, 0x66, 0x65, 0xb, 0x58, 0xf0, 0x4, 0x8, 0xa, 0x99, 0x2a}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000211.1", "NCBI37", "Human", 166566, []byte{0x7d, 0xaa, 0xa4, 0x5c, 0x66, 0xb2, 0x88, 0x84, 0x7b, 0x9b, 0x32, 0xb9, 0x64, 0xe6, 0x23, 0xd3}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000199.1", "NCBI37", "Human", 169874, []byte{0x56, 0x9a, 0xf3, 0xb7, 0x35, 0x22, 0xfa, 0xb4, 0xb4, 0x9, 0x95, 0xae, 0x49, 0x44, 0xe7, 0x8e}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000217.1", "NCBI37", "Human", 172149, []byte{0x6d, 0x24, 0x3e, 0x18, 0xde, 0xa1, 0x94, 0x5f, 0xb7, 0xf2, 0x51, 0x76, 0x15, 0xb8, 0xf5, 0x2e}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000216.1", "NCBI37", "Human", 172294, []byte{0x64, 0x2a, 0x23, 0x2d, 0x91, 0xc4, 0x86, 0xac, 0x33, 0x92, 0x63, 0x82, 0xa, 0xef, 0x7f, 0xe0}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000215.1", "NCBI37", "Human", 172545, []byte{0x5e, 0xb3, 0xb4, 0x18, 0x48, 0xa, 0xe6, 0x7a, 0x99, 0x79, 0x57, 0xc9, 0x9, 0x37, 0x5a, 0x73}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000205.1", "NCBI37", "Human", 174588, []byte{0xd2, 0x24, 0x41, 0x39, 0x8d, 0x99, 0xca, 0xf6, 0x73, 0xe9, 0xaf, 0xb9, 0xa1, 0x90, 0x8e, 0xc5}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000219.1", "NCBI37", "Human", 179198, []byte{0xf9, 0x77, 0xed, 0xd1, 0x3b, 0xac, 0x45, 0x9c, 0xb2, 0xed, 0x4a, 0x54, 0x57, 0xdb, 0xa1, 0xb3}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000224.1", "NCBI37", "Human", 179693, []byte{0xd5, 0xb2, 0xfc, 0x4, 0xf6, 0xb4, 0x1b, 0x21, 0x2a, 0x41, 0x98, 0xa0, 0x7f, 0x45, 0xe, 0x20}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000223.1", "NCBI37", "Human", 180455, []byte{0x39, 0x9d, 0xfa, 0x3, 0xbf, 0x32, 0x2, 0x2a, 0xb5, 0x2a, 0x84, 0x6f, 0x7c, 0xa3, 0x5b, 0x30}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000195.1", "NCBI37", "Human", 182896, []byte{0x5d, 0x9e, 0xc0, 0x7, 0x86, 0x8d, 0x51, 0x7e, 0x73, 0x54, 0x3b, 0x0, 0x5b, 0xa4, 0x85, 0x35}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000212.1", "NCBI37", "Human", 186858, []byte{0x56, 0x35, 0x31, 0x68, 0x9f, 0x3d, 0xbd, 0x69, 0x13, 0x31, 0xfd, 0x6c, 0x57, 0x30, 0xa8, 0x8b}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000222.1", "NCBI37", "Human", 186861, []byte{0x6f, 0xe9, 0xab, 0xac, 0x45, 0x51, 0x69, 0xf5, 0x4, 0x70, 0xf5, 0xa6, 0xb0, 0x1d, 0xf, 0x59}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000200.1", "NCBI37", "Human", 187035, []byte{0x75, 0xe4, 0xc8, 0xd1, 0x7c, 0xd4, 0xad, 0xdf, 0x39, 0x17, 0xd1, 0x70, 0x3c, 0xac, 0xaf, 0x25}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000193.1", "NCBI37", "Human", 189789, []byte{0xdb, 0xb6, 0xe8, 0xec, 0xe0, 0xb5, 0xde, 0x29, 0xda, 0x56, 0x60, 0x16, 0x13, 0x0, 0x7c, 0x2a}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000194.1", "NCBI37", "Human", 191469, []byte{0x6a, 0xc8, 0xf8, 0x15, 0xbf, 0x8e, 0x84, 0x5b, 0xb3, 0x3, 0x1b, 0x73, 0xf8, 0x12, 0xc0, 0x12}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000225.1", "NCBI37", "Human", 211173, []byte{0x63, 0x94, 0x5c, 0x3e, 0x69, 0x62, 0xf2, 0x8f, 0xfd, 0x46, 0x97, 0x19, 0xa7, 0x47, 0xe7, 0x3c}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "GL000192.1", "NCBI37", "Human", 547496, []byte{0x32, 0x5b, 0xa9, 0xe8, 0x8, 0xf6, 0x69, 0xdf, 0xee, 0xe2, 0x10, 0xfd, 0xd7, 0xb4, 0x70, 0xac}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "NC_007605", "NCBI37", "Human", 171823, []byte{0x67, 0x43, 0xbd, 0x63, 0xb3, 0xff, 0x2b, 0x5b, 0x89, 0x85, 0xd8, 0x93, 0x3c, 0x53, 0x29, 0xa}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), mustReference(sam.NewReference( "hs37d5", "NCBI37", "Human", 35477943, []byte{0x5b, 0x6a, 0x4b, 0x3a, 0x81, 0xa2, 0xd3, 0xc1, 0x34, 0xb7, 0xd1, 0x4b, 0xf6, 0xad, 0x39, 0xf1}, &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, )), }) if err != nil { panic(err) } headerHG00096_1000.Version = "1.0" headerHG00096_1000.SortOrder = sam.Coordinate headerHG00096_1000.Comments = []string{ "$known_indels_file(s) = ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_mapping_resources/ALL.wgs.indels_mills_devine_hg19_leftAligned_collapsed_double_hit.indels.sites.vcf.gz", "$known_indels_file(s) .= ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_mapping_resources/ALL.wgs.low_coverage_vqsr.20101123.indels.sites.vcf.gz", "$known_sites_file(s) = ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_mapping_resources/ALL.wgs.dbsnp.build135.snps.sites.vcf.gz", } for _, rg := range []*sam.ReadGroup{ mustReadGroup(sam.NewReadGroup( "SRR062634", "WUGSC", "SRP001294", "2845856850", "", "ILLUMINA", "", "HG00096", "", "", time.Time{}, 206, )), mustReadGroup(sam.NewReadGroup( "SRR062635", "WUGSC", "SRP001294", "2845856850", "", "ILLUMINA", "", "HG00096", "", "", time.Time{}, 206, )), mustReadGroup(sam.NewReadGroup( "SRR062641", "WUGSC", "SRP001294", "2845856850", "", "ILLUMINA", "", "HG00096", "", "", time.Time{}, 206, )), } { if err := headerHG00096_1000.AddReadGroup(rg); err != nil { panic(err) } } for _, pg := range []*sam.Program{ sam.NewProgram( "bwa_index", "bwa", "bwa index -a bwtsw $reference_fasta", "", "0.5.9-r16", ), sam.NewProgram( "bwa_aln_fastq", "bwa", "bwa aln -q 15 -f $sai_file $reference_fasta $fastq_file", "bwa_index", "0.5.9-r16", ), sam.NewProgram( "bwa_sam", "bwa", "bwa sampe -a 618 -r $rg_line -f $sam_file $reference_fasta $sai_file(s) $fastq_file(s)", "bwa_aln_fastq", "0.5.9-r16", ), sam.NewProgram( "sam_to_fixed_bam", "samtools", "samtools view -bSu $sam_file | samtools sort -n -o - samtools_nsort_tmp | samtools fixmate /dev/stdin /dev/stdout | samtools sort -o - samtools_csort_tmp | samtools fillmd -u - $reference_fasta > $fixed_bam_file", "bwa_sam", "0.1.17 (r973:277)", ), sam.NewProgram( "gatk_target_interval_creator", "GenomeAnalysisTK", "java $jvm_args -jar GenomeAnalysisTK.jar -T RealignerTargetCreator -R $reference_fasta -o $intervals_file -known $known_indels_file(s)", "sam_to_fixed_bam", "1.2-29-g0acaf2d", ), sam.NewProgram( "bam_realignment_around_known_indels", "GenomeAnalysisTK", "java $jvm_args -jar GenomeAnalysisTK.jar -T IndelRealigner -R $reference_fasta -I $bam_file -o $realigned_bam_file -targetIntervals $intervals_file -known $known_indels_file(s) -LOD 0.4 -model KNOWNS_ONLY -compress 0 --disable_bam_indexing", "gatk_target_interval_creator", "1.2-29-g0acaf2d", ), sam.NewProgram( "bam_count_covariates", "GenomeAnalysisTK", "java $jvm_args -jar GenomeAnalysisTK.jar -T CountCovariates -R $reference_fasta -I $bam_file -recalFile $bam_file.recal_data.csv -knownSites $known_sites_file(s) -l INFO -L '1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;X;Y;MT' -cov ReadGroupCovariate -cov QualityScoreCovariate -cov CycleCovariate -cov DinucCovariate", "bam_realignment_around_known_indels", "1.2-29-g0acaf2d", ), sam.NewProgram( "bam_recalibrate_quality_scores", "GenomeAnalysisTK", "java $jvm_args -jar GenomeAnalysisTK.jar -T TableRecalibration -R $reference_fasta -recalFile $bam_file.recal_data.csv -I $bam_file -o $recalibrated_bam_file -l INFO -compress 0 --disable_bam_indexing", "bam_count_covariates", "1.2-29-g0acaf2d", ), sam.NewProgram( "bam_calculate_bq", "samtools", "samtools calmd -Erb $bam_file $reference_fasta > $bq_bam_file", "bam_recalibrate_quality_scores", "0.1.17 (r973:277)", ), sam.NewProgram( "bam_merge", "picard", "java $jvm_args -jar MergeSamFiles.jar INPUT=$bam_file(s) OUTPUT=$merged_bam VALIDATION_STRINGENCY=SILENT", "bam_calculate_bq", "1.53", ), sam.NewProgram( "bam_mark_duplicates", "picard", "java $jvm_args -jar MarkDuplicates.jar INPUT=$bam_file OUTPUT=$markdup_bam_file ASSUME_SORTED=TRUE METRICS_FILE=/dev/null VALIDATION_STRINGENCY=SILENT", "bam_merge", "1.53", ), sam.NewProgram( "bam_merge.1", "picard", "java $jvm_args -jar MergeSamFiles.jar INPUT=$bam_file(s) OUTPUT=$merged_bam VALIDATION_STRINGENCY=SILENT", "bam_mark_duplicates", "1.53", ), } { if err := headerHG00096_1000.AddProgram(pg); err != nil { panic(err) } } } // This is the first 1000 alignments of the file // ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/HG00096/alignment/HG00096.unmapped.ILLUMINA.bwa.GBR.low_coverage.20120522.bam // // samtools view HG00096.unmapped.ILLUMINA.bwa.GBR.low_coverage.20120522.bam -H | sed -e 's/ \{7,8\}/\t/g'> HG00096_1000.sam # The sed sub is required due to broken format in original data. // samtools view HG00096.unmapped.ILLUMINA.bwa.GBR.low_coverage.20120522.bam | head -n 1000 >> HG00096_1000.sam // samtools view -Sb HG00096_1000.sam > HG00096_1000.bam var bamHG00096_1000 = []byte{ 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x45, 0x12, 0xcd, 0x5c, 0x5b, 0x88, 0x65, 0xd9, 0x59, 0xde, 0xd3, 0x6d, 0x92, 0xa9, 0x89, 0x04, 0x05, 0x1f, 0x14, 0x54, 0x0e, 0xd2, 0x90, 0x0c, 0xa1, 0xaa, 0xd7, 0xfd, 0x52, 0x27, 0x1d, 0xa6, 0xa7, 0xba, 0xa7, 0xa7, 0x48, 0x75, 0x75, 0xa7, 0xab, 0x7a, 0x32, 0x1d, 0x08, 0xc7, 0x75, 0xad, 0xa9, 0x9e, 0x53, 0x97, 0x3e, 0xa7, 0xaa, 0x7a, 0x26, 0x06, 0x21, 0x20, 0x01, 0xc5, 0x18, 0x0c, 0xc4, 0x08, 0x23, 0xc9, 0x68, 0x24, 0x37, 0x9f, 0x44, 0x41, 0x82, 0x28, 0xce, 0x5b, 0x0c, 0xc6, 0x47, 0xf1, 0x82, 0xbe, 0x0d, 0x82, 0x32, 0xe0, 0x8b, 0x8e, 0x06, 0x09, 0x7e, 0x6b, 0xed, 0x73, 0xaa, 0xcf, 0xee, 0xee, 0xb9, 0x84, 0x99, 0xe0, 0x7e, 0xe8, 0xee, 0x75, 0xfe, 0xbd, 0xf6, 0xda, 0xdf, 0xff, 0xaf, 0xf5, 0xff, 0xff, 0xf7, 0xaf, 0xbd, 0x76, 0x3f, 0x79, 0xf1, 0xea, 0x23, 0x1f, 0xdd, 0x6c, 0x9a, 0x27, 0x9e, 0xbe, 0xb4, 0xf4, 0xcc, 0xe6, 0x2a, 0x5d, 0x21, 0x4b, 0x5b, 0xd7, 0x56, 0xc3, 0xc1, 0xc1, 0x24, 0xee, 0xee, 0xbb, 0xa3, 0xf4, 0xd8, 0x13, 0x5b, 0x1f, 0x5f, 0xda, 0xc2, 0x85, 0xa5, 0x8d, 0xcd, 0x55, 0x26, 0x2c, 0x93, 0x44, 0x31, 0xba, 0x74, 0x55, 0xae, 0x52, 0xcf, 0x98, 0xb7, 0x26, 0xc4, 0xe4, 0x85, 0xb3, 0x9c, 0x88, 0xe0, 0x65, 0x14, 0x86, 0x30, 0xe5, 0x8c, 0xa4, 0xcc, 0x2c, 0xdd, 0xbc, 0xb1, 0x9a, 0x8f, 0x0e, 0x57, 0xcf, 0x9f, 0xc7, 0xdf, 0x2b, 0x94, 0x10, 0xb2, 0x93, 0xf6, 0x0f, 0xf6, 0xd2, 0x74, 0x25, 0xf9, 0xdd, 0x15, 0x17, 0x56, 0x8e, 0x9f, 0x3f, 0x7f, 0x72, 0x30, 0xa6, 0xe5, 0xf2, 0xf9, 0xa3, 0x14, 0x9e, 0xdb, 0xdf, 0x0d, 0x6e, 0x7c, 0x7e, 0x92, 0x72, 0x9a, 0xa4, 0xfd, 0x90, 0xce, 0x1f, 0x3e, 0xe7, 0xa6, 0x89, 0x8d, 0x4e, 0x05, 0x23, 0x37, 0x9d, 0xa6, 0x3d, 0x3f, 0x7e, 0x71, 0x34, 0x4d, 0x77, 0x8e, 0x6b, 0x97, 0xe7, 0xa6, 0x5c, 0x47, 0xb9, 0x92, 0xdd, 0xca, 0xce, 0xa7, 0x97, 0x2e, 0x6e, 0xad, 0x6e, 0xae, 0x3d, 0xb9, 0xce, 0xf5, 0xd2, 0xd6, 0xf5, 0xd5, 0xa7, 0x8f, 0xf7, 0xdc, 0xfe, 0x1c, 0x3c, 0x6b, 0xc1, 0x73, 0x6a, 0x2d, 0xd7, 0xbc, 0x80, 0x77, 0x24, 0x5a, 0xa0, 0x8c, 0x8e, 0x10, 0x41, 0x48, 0x4c, 0x81, 0x12, 0x6b, 0x1c, 0xb4, 0x93, 0x2e, 0x68, 0xca, 0x52, 0x8f, 0xc0, 0xf3, 0x02, 0x9e, 0x5a, 0x18, 0x16, 0x1a, 0x90, 0x02, 0x3e, 0xc7, 0x1c, 0x0d, 0xa5, 0x46, 0xd8, 0x10, 0x58, 0x76, 0x98, 0x80, 0x60, 0x99, 0xf5, 0x1e, 0xf0, 0x2d, 0x61, 0x49, 0xf6, 0x08, 0xbc, 0x68, 0xc1, 0x53, 0x2a, 0x05, 0xd3, 0xaa, 0x80, 0x67, 0x3c, 0x86, 0x10, 0x29, 0x51, 0xc6, 0x6a, 0x08, 0x5d, 0x34, 0x3a, 0xe2, 0x92, 0x8c, 0xcc, 0x38, 0x6a, 0x1d, 0xed, 0x11, 0x78, 0x59, 0xc1, 0x1b, 0x62, 0xa9, 0x64, 0xaa, 0x5a, 0x9e, 0x68, 0x41, 0xa8, 0xe6, 0xd1, 0xdb, 0x9c, 0x23, 0x53, 0x22, 0x6a, 0x66, 0x32, 0x67, 0xda, 0x08, 0x23, 0x64, 0x88, 0xba, 0x47, 0xe0, 0x55, 0x05, 0xaf, 0x29, 0x4c, 0x4f, 0x94, 0xae, 0x0e, 0x1b, 0x39, 0xfc, 0xd4, 0x31, 0x61, 0xa2, 0x65, 0x4e, 0x33, 0x9b, 0x92, 0x56, 0xc2, 0x30, 0xee, 0x82, 0xf7, 0x41, 0xf9, 0x1e, 0x81, 0xd7, 0x15, 0xbc, 0xb4, 0x94, 0x1b, 0xa5, 0xaa, 0xc3, 0x2a, 0x6a, 0xb8, 0x52, 0xc9, 0x4a, 0x1e, 0x95, 0x73, 0x2e, 0x5a, 0x1d, 0x7d, 0x12, 0x5a, 0xeb, 0xc0, 0xe0, 0xd3, 0xb2, 0x4f, 0x0e, 0x6b, 0x2a, 0x78, 0xa1, 0xb8, 0x12, 0xf0, 0xd9, 0x02, 0xde, 0xaa, 0x2c, 0x29, 0x82, 0x24, 0xbc, 0x34, 0x09, 0x4a, 0x82, 0x52, 0x92, 0x2a, 0xab, 0x7d, 0x4c, 0x51, 0x5a, 0x97, 0x42, 0x8f, 0xc0, 0xdb, 0x16, 0x3c, 0x65, 0x94, 0x23, 0x5e, 0x16, 0xf0, 0x3c, 0x31, 0xcd, 0x29, 0xd5, 0x99, 0xca, 0x44, 0x1c, 0xa2, 0x65, 0x26, 0x94, 0x48, 0x19, 0x6d, 0xe6, 0xb0, 0xbc, 0xea, 0x53, 0x9c, 0xa7, 0xa4, 0xa2, 0xe7, 0x52, 0x72, 0xa1, 0x45, 0x5d, 0xf4, 0xd6, 0x98, 0xc0, 0x4c, 0x02, 0xaa, 0x64, 0x44, 0x60, 0x2a, 0x4a, 0xc9, 0x38, 0x8c, 0x9e, 0x69, 0x72, 0x2c, 0xd1, 0xd8, 0x27, 0xf4, 0x74, 0x86, 0x9e, 0x90, 0xb2, 0x3e, 0x5a, 0xf4, 0x01, 0x21, 0x5d, 0x58, 0xc7, 0x62, 0x66, 0x46, 0x06, 0xad, 0x72, 0xf6, 0x34, 0xa8, 0xe8, 0x4d, 0x36, 0xde, 0xaa, 0x3e, 0xa1, 0x67, 0x2d, 0x7a, 0x8e, 0xb4, 0x6a, 0xac, 0x2c, 0xe8, 0xd1, 0x90, 0xd4, 0x05, 0x92, 0xa8, 0x43, 0x14, 0x32, 0x42, 0xbb, 0x08, 0x9f, 0x10, 0xd6, 0x13, 0x82, 0x9f, 0x4a, 0xf4, 0x09, 0x7d, 0x9b, 0x65, 0x69, 0xf1, 0x4b, 0xa3, 0x4d, 0x4d, 0x54, 0x86, 0x67, 0x13, 0xb5, 0xb1, 0xcc, 0x3b, 0x67, 0xa8, 0x97, 0x94, 0x38, 0xe0, 0xd6, 0xd4, 0x06, 0xa7, 0x3d, 0xe9, 0x53, 0xb8, 0xa4, 0x6d, 0x9a, 0x25, 0x9a, 0x0b, 0x2b, 0x05, 0x69, 0x57, 0x4e, 0xe6, 0xc1, 0x25, 0xce, 0x3c, 0xc3, 0x3a, 0xb7, 0x92, 0x09, 0x1f, 0x40, 0x22, 0x28, 0xb7, 0xac, 0xa4, 0xdd, 0x3e, 0xc5, 0x4b, 0xda, 0xe6, 0x59, 0xc2, 0x24, 0x2f, 0xf0, 0x0a, 0xfa, 0x24, 0x95, 0x90, 0x4e, 0x5b, 0xe1, 0x90, 0x9e, 0x0c, 0xa3, 0xd2, 0x33, 0x64, 0x57, 0x8d, 0x44, 0x65, 0xa5, 0x23, 0xba, 0x57, 0x31, 0xa7, 0x26, 0x5a, 0x4b, 0xb8, 0x14, 0x5a, 0xd6, 0x54, 0x95, 0x83, 0xf5, 0x14, 0x4b, 0x44, 0x80, 0x1e, 0x6b, 0x87, 0x75, 0x9e, 0xa5, 0xf2, 0x5c, 0x18, 0x4f, 0x14, 0xb1, 0x32, 0xf5, 0xca, 0x69, 0x6b, 0xa2, 0x05, 0x97, 0xc4, 0x02, 0xa1, 0x75, 0xdd, 0x70, 0x49, 0x33, 0x78, 0x8d, 0xc8, 0x22, 0xdb, 0x18, 0xa3, 0x90, 0x9e, 0x4b, 0xce, 0x55, 0x49, 0xb8, 0xce, 0xa9, 0xd8, 0xab, 0x75, 0x53, 0x13, 0xad, 0x36, 0x44, 0x6b, 0x70, 0x9a, 0x02, 0xde, 0x53, 0x54, 0x20, 0x9e, 0x45, 0x06, 0xe8, 0xc9, 0x46, 0x9e, 0xa0, 0x04, 0x8f, 0x34, 0x92, 0xcc, 0x02, 0x38, 0x72, 0x9f, 0xf2, 0x2c, 0xad, 0x89, 0x16, 0x0c, 0x87, 0x19, 0x6b, 0xea, 0xb2, 0xa1, 0xce, 0x61, 0x8d, 0xd3, 0xcc, 0x09, 0xa2, 0x3b, 0x1c, 0x80, 0x1a, 0xd4, 0x24, 0x94, 0x27, 0xe2, 0x35, 0x03, 0x97, 0xe8, 0x53, 0xa6, 0x62, 0x35, 0xcf, 0x2a, 0x0e, 0x97, 0x95, 0xac, 0x25, 0xc6, 0x28, 0xa1, 0xac, 0x52, 0x04, 0x85, 0x54, 0xca, 0xce, 0x65, 0xce, 0x99, 0xa1, 0x81, 0x44, 0x89, 0x2c, 0x2b, 0x15, 0xc9, 0x7d, 0x02, 0x5f, 0xd3, 0xac, 0x30, 0x94, 0xd9, 0x59, 0x9e, 0x62, 0x56, 0x5b, 0xa7, 0x88, 0x91, 0x3e, 0x27, 0x70, 0x05, 0xee, 0x22, 0xf8, 0x9a, 0x64, 0x99, 0x2b, 0x9a, 0xa2, 0x16, 0xbd, 0xb2, 0x7c, 0xcd, 0xb2, 0x92, 0xa2, 0xdc, 0x96, 0xaa, 0x52, 0x04, 0xa7, 0xa9, 0x71, 0x01, 0xbe, 0x09, 0xe2, 0x90, 0x63, 0x70, 0x86, 0x4b, 0x0c, 0x04, 0x4d, 0xac, 0x60, 0x94, 0xc6, 0x3e, 0x81, 0x7f, 0xb6, 0x65, 0xf5, 0x92, 0x69, 0x22, 0xdb, 0x7a, 0x4a, 0x27, 0x92, 0x50, 0xb0, 0xa2, 0xb6, 0x05, 0x1b, 0xd6, 0xa8, 0x46, 0x12, 0xa7, 0xd1, 0x07, 0x43, 0x02, 0x43, 0x1e, 0xeb, 0x15, 0xf8, 0x5b, 0xad, 0xbf, 0x72, 0xcd, 0x67, 0x86, 0xa7, 0xd9, 0x55, 0x96, 0x29, 0x89, 0xcb, 0xc4, 0x22, 0xbc, 0xc7, 0x8c, 0xa2, 0x04, 0xe9, 0x29, 0x25, 0x09, 0x9d, 0xfa, 0x54, 0xc8, 0x5e, 0xdd, 0xae, 0x96, 0x57, 0x52, 0xd9, 0x82, 0x3c, 0x28, 0x93, 0x51, 0xd1, 0x6a, 0x11, 0x6c, 0xf6, 0x9c, 0xbb, 0x84, 0x5f, 0x31, 0x80, 0xce, 0xa3, 0x22, 0x97, 0x12, 0x91, 0xa9, 0x3f, 0xc8, 0xaf, 0x6c, 0xe0, 0xe9, 0x8c, 0xe8, 0x95, 0xd6, 0x69, 0x99, 0xaa, 0xf4, 0x20, 0x73, 0x43, 0x51, 0x71, 0xd3, 0x4c, 0x2d, 0x47, 0x98, 0x0f, 0x8e, 0x5a, 0xa2, 0x59, 0xb4, 0xc9, 0xa0, 0x28, 0xc9, 0xbd, 0x2a, 0xc3, 0x5b, 0x05, 0x98, 0x6a, 0x15, 0x40, 0x2d, 0x4e, 0x6a, 0xa6, 0xa2, 0x81, 0x16, 0x4a, 0x43, 0x73, 0x40, 0x62, 0x22, 0xa8, 0x0c, 0xbd, 0x72, 0x42, 0xe8, 0x8c, 0xea, 0x3c, 0xa2, 0x53, 0x9f, 0xa8, 0xf1, 0x4c, 0x03, 0x3b, 0xd3, 0xc0, 0x22, 0x27, 0x15, 0x0d, 0x90, 0x54, 0x05, 0xc2, 0xbd, 0xd1, 0x11, 0x3e, 0x4b, 0xa3, 0x49, 0x1a, 0x2c, 0x0d, 0x0b, 0x5f, 0x04, 0x4d, 0x14, 0x2a, 0xab, 0xde, 0x69, 0xc0, 0x69, 0xab, 0x01, 0xaa, 0x59, 0x53, 0x1d, 0xd8, 0x3b, 0x63, 0x0c, 0x0b, 0x88, 0xf7, 0x25, 0x67, 0x31, 0x62, 0x48, 0x92, 0xa0, 0x0e, 0xa0, 0x98, 0x70, 0x14, 0xe3, 0xfa, 0x37, 0x07, 0x94, 0xcc, 0x35, 0x50, 0xa6, 0xfa, 0x01, 0xca, 0x2b, 0x4a, 0x94, 0xd3, 0x02, 0x24, 0x99, 0x08, 0x14, 0xed, 0x48, 0x02, 0x34, 0x24, 0xe6, 0xc0, 0x1f, 0x50, 0x6e, 0xf5, 0x89, 0xef, 0xcc, 0xe6, 0x60, 0xb6, 0x8a, 0x50, 0x25, 0x32, 0x51, 0xcb, 0x14, 0xa4, 0x5e, 0x99, 0x51, 0x55, 0x11, 0x86, 0x6a, 0x25, 0x88, 0xec, 0x68, 0x10, 0x89, 0xca, 0x6c, 0x1c, 0xb3, 0x81, 0xf4, 0xcf, 0x93, 0xb9, 0x9c, 0x69, 0x00, 0x6f, 0xad, 0x1a, 0x50, 0xa4, 0x5f, 0x26, 0x83, 0xc3, 0xec, 0x84, 0xec, 0x43, 0xcc, 0x5e, 0x05, 0x96, 0xbc, 0x67, 0xc2, 0x66, 0xab, 0x0c, 0xe9, 0x9d, 0x06, 0x64, 0xe6, 0x07, 0x60, 0x37, 0x2d, 0x6b, 0x06, 0x64, 0x9d, 0x74, 0x0a, 0xa0, 0x69, 0x20, 0x10, 0xde, 0xc8, 0x00, 0xce, 0x6f, 0x41, 0xdc, 0x8c, 0x90, 0x22, 0xa5, 0xfe, 0xa5, 0x03, 0xa1, 0xe7, 0x1a, 0x88, 0x76, 0x7f, 0x0d, 0x31, 0xa8, 0x06, 0x59, 0xef, 0x75, 0xcc, 0x34, 0x48, 0x0d, 0x0f, 0x09, 0x4e, 0xa1, 0x6e, 0xf7, 0x2e, 0x23, 0x9e, 0xf6, 0x4f, 0x83, 0xf9, 0x2a, 0x2a, 0x3b, 0x81, 0xd5, 0x93, 0xad, 0x0f, 0x8a, 0x5a, 0x4c, 0x01, 0x46, 0x41, 0xd9, 0xeb, 0x33, 0x89, 0x99, 0x45, 0xb0, 0x54, 0x17, 0xc1, 0x28, 0x7a, 0xe7, 0xc9, 0xd4, 0xce, 0xe7, 0x40, 0x53, 0x5d, 0x49, 0x34, 0x28, 0x73, 0xca, 0x31, 0x42, 0x23, 0xc1, 0x9d, 0xf5, 0x26, 0x98, 0x10, 0x0a, 0x91, 0x66, 0x19, 0x24, 0x3a, 0xe8, 0x3e, 0x6d, 0x97, 0xcc, 0xfc, 0x80, 0xcf, 0x35, 0x10, 0xd6, 0xb4, 0xbb, 0xb4, 0x5c, 0x9a, 0xc0, 0x99, 0xcc, 0x60, 0xa5, 0x9a, 0xf8, 0x94, 0x34, 0x17, 0x5c, 0x25, 0xe3, 0x3d, 0x15, 0xd1, 0xf7, 0x89, 0x8c, 0xce, 0x56, 0xd1, 0x8c, 0x55, 0x80, 0x0d, 0xc9, 0x1a, 0x8b, 0x92, 0x70, 0x39, 0x44, 0x4e, 0x51, 0x55, 0x3a, 0x94, 0xef, 0xb6, 0xb0, 0x68, 0xe5, 0x02, 0x5c, 0xc2, 0x33, 0xee, 0x32, 0xeb, 0x9f, 0x06, 0xf3, 0x7c, 0x60, 0x24, 0x61, 0xed, 0x3b, 0x0a, 0x6d, 0x9c, 0x4f, 0x81, 0xeb, 0x80, 0x24, 0x90, 0x98, 0x75, 0x4c, 0xcb, 0xe4, 0x89, 0x01, 0xb1, 0xce, 0x8c, 0xf7, 0x69, 0xef, 0x64, 0xe6, 0x07, 0xa7, 0x73, 0x60, 0x69, 0x9d, 0x83, 0x68, 0x19, 0x23, 0x2a, 0x52, 0xef, 0x45, 0xe0, 0x5e, 0xa0, 0x47, 0x10, 0x3c, 0x10, 0xa3, 0x65, 0x80, 0x38, 0xf4, 0x2f, 0x1f, 0x08, 0x33, 0xd3, 0xc0, 0xea, 0x96, 0x17, 0x49, 0xd0, 0x07, 0xc1, 0x31, 0x09, 0xd6, 0x27, 0xae, 0xe0, 0xba, 0xc2, 0x06, 0x23, 0xa2, 0x04, 0xdb, 0x20, 0x1a, 0x45, 0x5a, 0xff, 0x34, 0x10, 0x73, 0x0d, 0x2c, 0xab, 0x05, 0x0e, 0xb1, 0x56, 0x79, 0x24, 0x68, 0x99, 0xb9, 0x44, 0x75, 0x60, 0x8d, 0x77, 0xc1, 0x6b, 0x09, 0x57, 0x10, 0x1a, 0xd3, 0xd4, 0xbf, 0x39, 0xe0, 0xa7, 0x73, 0x80, 0x82, 0xa6, 0xfa, 0x01, 0xa7, 0x1e, 0xac, 0x14, 0xd1, 0x48, 0x93, 0x10, 0x0c, 0x18, 0xab, 0x51, 0x1e, 0xd9, 0x58, 0x07, 0x2e, 0x3c, 0xed, 0x63, 0x34, 0x65, 0xb3, 0x12, 0x8d, 0x50, 0x52, 0xeb, 0x03, 0xa2, 0x82, 0xcf, 0x60, 0xa4, 0xc8, 0xd6, 0xd1, 0x58, 0x64, 0x05, 0x07, 0x72, 0x97, 0xbc, 0x8b, 0x94, 0x93, 0x9c, 0x7a, 0xb5, 0x17, 0x37, 0x9b, 0x03, 0x31, 0xd7, 0x40, 0xb6, 0x2f, 0xbe, 0x2c, 0xcf, 0xd6, 0x1a, 0xc9, 0x95, 0x57, 0xd4, 0x49, 0x95, 0x51, 0xf1, 0x64, 0xa1, 0x39, 0x63, 0xce, 0xa2, 0xe0, 0x11, 0xfd, 0x9b, 0x03, 0x7e, 0x3a, 0x07, 0x4a, 0xb2, 0xf6, 0xd5, 0x1d, 0x01, 0x78, 0x2d, 0x50, 0x24, 0x80, 0x47, 0x58, 0xee, 0x8c, 0x44, 0x1c, 0xe2, 0x98, 0x01, 0x4d, 0x24, 0xa6, 0xa5, 0x77, 0x1a, 0x90, 0x59, 0x34, 0x05, 0x62, 0x52, 0xe7, 0x40, 0xf0, 0xac, 0x6c, 0x42, 0x7d, 0x23, 0x39, 0x4f, 0x65, 0x93, 0x05, 0x6b, 0x48, 0x86, 0x44, 0xcb, 0xc6, 0x74, 0xe4, 0xb9, 0x7f, 0x55, 0xa6, 0x20, 0x73, 0x0d, 0x2c, 0xaf, 0x7e, 0x20, 0x04, 0xe2, 0xa9, 0x2a, 0x87, 0x06, 0x9c, 0x45, 0x06, 0xd3, 0x51, 0xfb, 0x90, 0x05, 0x0d, 0x70, 0x0f, 0x30, 0x24, 0xd5, 0xbf, 0x9c, 0xcc, 0xd5, 0x3d, 0x0d, 0x44, 0x7b, 0xdc, 0x24, 0x44, 0xcd, 0x4b, 0xdd, 0x8f, 0x32, 0x99, 0xe2, 0x97, 0x12, 0xa8, 0x71, 0x08, 0x84, 0x84, 0x2a, 0xad, 0x7b, 0x58, 0x1f, 0xd0, 0xf9, 0x76, 0x11, 0x6d, 0xfd, 0x20, 0x65, 0xc1, 0x40, 0xed, 0x62, 0x90, 0x4e, 0xc8, 0x80, 0x55, 0x16, 0x92, 0x33, 0x08, 0xae, 0x58, 0x47, 0xf0, 0x88, 0xd0, 0xa7, 0xdd, 0xe9, 0x99, 0x06, 0x33, 0x6e, 0x2a, 0x38, 0x17, 0xd5, 0x0f, 0x02, 0xe2, 0x3e, 0xd3, 0xd6, 0xe9, 0xc4, 0x8b, 0xff, 0x16, 0x9f, 0x0e, 0x36, 0x87, 0xa4, 0x51, 0x37, 0x08, 0xde, 0xab, 0x17, 0xc1, 0x33, 0x0d, 0xe6, 0xb1, 0x88, 0x4b, 0x56, 0xfd, 0x80, 0x65, 0xa3, 0xac, 0xc8, 0xc8, 0xc0, 0x52, 0x2b, 0x1f, 0xca, 0x0b, 0x55, 0xa4, 0x81, 0x54, 0x4a, 0x37, 0xef, 0x84, 0xed, 0xd3, 0x8b, 0xa5, 0x99, 0x1f, 0xcc, 0x3d, 0x99, 0x2b, 0x5b, 0xe7, 0xc0, 0x8b, 0xe4, 0x35, 0x4d, 0xc9, 0x68, 0x13, 0x79, 0xd9, 0xe4, 0x12, 0xca, 0x83, 0xa6, 0x46, 0x9f, 0x10, 0xa3, 0x98, 0xed, 0x9f, 0x1f, 0xf0, 0xf9, 0xb6, 0xa9, 0x34, 0xed, 0x09, 0xa0, 0x44, 0x82, 0x61, 0x49, 0x6b, 0x49, 0x63, 0xd6, 0x3c, 0x8b, 0xac, 0x22, 0x49, 0x91, 0xc3, 0x95, 0x03, 0xf2, 0x5c, 0x0f, 0xb9, 0x29, 0x9f, 0xfb, 0x81, 0xb4, 0xad, 0x1f, 0xe8, 0x9c, 0xa2, 0x22, 0xcc, 0x1a, 0x67, 0xa2, 0x62, 0x39, 0x1b, 0x62, 0xbc, 0x2e, 0xe1, 0x28, 0x19, 0x56, 0xe8, 0x78, 0xef, 0x34, 0x20, 0x33, 0x56, 0x61, 0xc0, 0xe8, 0x48, 0x1b, 0x8b, 0x42, 0xe1, 0xd3, 0x9a, 0x82, 0x58, 0x64, 0x68, 0xa1, 0x6d, 0xf0, 0xc4, 0x11, 0xb4, 0x11, 0x63, 0x35, 0xeb, 0x5d, 0x3e, 0xa0, 0x76, 0xc6, 0x4d, 0x2d, 0x21, 0xa6, 0x56, 0xfa, 0xe0, 0xa2, 0x58, 0x43, 0x46, 0x10, 0x41, 0x90, 0xd3, 0x48, 0xc4, 0x85, 0xc8, 0x50, 0xf0, 0x28, 0xa5, 0x1d, 0xe5, 0x86, 0xf7, 0x4d, 0x03, 0x46, 0xe6, 0x1a, 0x30, 0x65, 0x2a, 0xbb, 0xae, 0xe7, 0x39, 0x92, 0xb0, 0x3e, 0xf3, 0x9c, 0x14, 0x77, 0x88, 0xa2, 0xc8, 0x6a, 0x4e, 0xe5, 0x12, 0x62, 0x7d, 0xee, 0x5d, 0x34, 0x45, 0x41, 0x3f, 0xdb, 0x7d, 0x27, 0x4a, 0xb4, 0xb4, 0x22, 0x6a, 0xe9, 0x11, 0x99, 0xb2, 0x24, 0xce, 0x30, 0x5a, 0xb6, 0xe9, 0x02, 0x73, 0xf0, 0x6b, 0x4e, 0x3c, 0x0b, 0x2c, 0xf4, 0x8f, 0x5e, 0xb3, 0x59, 0x30, 0xa2, 0xcc, 0xf0, 0x76, 0xe7, 0xd4, 0x09, 0x97, 0x5c, 0x64, 0x1c, 0x4e, 0x2c, 0x79, 0x66, 0x4a, 0xca, 0x24, 0x94, 0xf1, 0x20, 0x45, 0x09, 0x01, 0x29, 0xf5, 0x8f, 0x5f, 0x33, 0x33, 0x57, 0xc1, 0xd2, 0xf6, 0xb5, 0x37, 0x08, 0x05, 0xd5, 0xc1, 0xea, 0xc4, 0x02, 0x75, 0xc4, 0x2b, 0x67, 0x03, 0x44, 0xca, 0x63, 0x9a, 0x90, 0x2a, 0x44, 0xff, 0x88, 0x05, 0x9d, 0x85, 0x23, 0xca, 0xb5, 0xa6, 0x75, 0xd7, 0x4b, 0x28, 0x10, 0x22, 0xce, 0x02, 0xd7, 0x99, 0x25, 0x54, 0x6a, 0x36, 0x79, 0x70, 0x0b, 0x82, 0x42, 0x87, 0x53, 0xeb, 0x54, 0xff, 0xb2, 0x1a, 0x9b, 0xfb, 0x82, 0x94, 0x08, 0x98, 0xb5, 0xcc, 0x41, 0xfd, 0x9c, 0x91, 0x06, 0x40, 0xea, 0xb4, 0x4b, 0x46, 0xea, 0x6c, 0x83, 0x96, 0x04, 0x59, 0x9a, 0x4a, 0xef, 0x7c, 0xff, 0x16, 0x12, 0x99, 0xbf, 0x4c, 0x93, 0x96, 0xb6, 0xaf, 0x64, 0x33, 0xaa, 0x4e, 0x6b, 0x12, 0x5c, 0x18, 0xab, 0x87, 0xa9, 0x64, 0x84, 0xc3, 0x0c, 0xc9, 0x44, 0x22, 0xc5, 0xda, 0x32, 0xfd, 0xcb, 0x6b, 0x74, 0xee, 0x0b, 0x8a, 0x52, 0x31, 0x3b, 0x5e, 0xac, 0x91, 0x8c, 0xa5, 0x50, 0xa2, 0x9c, 0xb3, 0x0c, 0x3a, 0x11, 0x1a, 0x58, 0x74, 0x51, 0x0a, 0xa6, 0x22, 0x37, 0x3d, 0x8c, 0x48, 0xe4, 0x54, 0x05, 0xd3, 0xee, 0x3e, 0xa2, 0x24, 0x90, 0x31, 0x59, 0xc5, 0x83, 0xd4, 0x3e, 0x97, 0xc3, 0xd1, 0x82, 0xd9, 0xa4, 0x84, 0x14, 0x19, 0x74, 0x3b, 0xf6, 0x6f, 0x21, 0x51, 0x3e, 0x57, 0x01, 0x25, 0x72, 0x5d, 0x48, 0x36, 0x0a, 0x26, 0x50, 0xa3, 0x05, 0x6b, 0x8c, 0x52, 0x4a, 0x12, 0x2f, 0x4d, 0x2e, 0x1f, 0x39, 0x98, 0xf2, 0x96, 0x99, 0xb9, 0xfe, 0xa9, 0x30, 0x77, 0x67, 0x80, 0x6d, 0x0f, 0x56, 0xe8, 0xe8, 0x5c, 0xa9, 0xd3, 0x14, 0x3c, 0xc1, 0x18, 0x23, 0xb4, 0xb7, 0x9e, 0x33, 0x6f, 0x95, 0x48, 0x8a, 0xf1, 0xd8, 0x3b, 0x7e, 0x41, 0xed, 0xdc, 0x9d, 0xcb, 0xd9, 0xd1, 0x9a, 0xda, 0xa4, 0xb2, 0x2e, 0x73, 0xaf, 0x51, 0xfc, 0xb0, 0xec, 0xbc, 0xf0, 0x82, 0x58, 0x2b, 0x1d, 0x28, 0x87, 0x10, 0x49, 0x9b, 0xfe, 0x15, 0x3b, 0x74, 0x9e, 0x9d, 0x35, 0x52, 0x44, 0x5d, 0x48, 0x2a, 0xa2, 0x0a, 0x4d, 0xd4, 0xc4, 0xe4, 0xa8, 0x15, 0x12, 0xf1, 0x35, 0x33, 0x49, 0xb5, 0x42, 0x48, 0x2d, 0xa7, 0x47, 0x7a, 0xa8, 0x82, 0x3a, 0x55, 0x81, 0xd9, 0x3a, 0x0b, 0x70, 0x0a, 0xc7, 0x38, 0x8b, 0x96, 0x06, 0x61, 0x94, 0x0b, 0x9c, 0x83, 0x01, 0x72, 0x14, 0x0a, 0x2e, 0x65, 0x14, 0x12, 0xfd, 0x2b, 0x77, 0xa8, 0x3c, 0x55, 0x41, 0x8a, 0xf6, 0x08, 0x75, 0xf2, 0x1c, 0xf9, 0xd8, 0x08, 0xb8, 0x6f, 0x02, 0xbf, 0xae, 0xef, 0xcb, 0xc1, 0x38, 0x48, 0xf9, 0xe8, 0x01, 0x15, 0x43, 0xef, 0x54, 0x20, 0xa7, 0x2a, 0xa0, 0xea, 0x6c, 0x5f, 0x2f, 0x33, 0x26, 0x04, 0xe5, 0xd6, 0x44, 0x6b, 0x83, 0xcb, 0x4a, 0xf3, 0x04, 0xe7, 0xf0, 0xb6, 0x1c, 0xda, 0x31, 0x29, 0xf4, 0xef, 0xe5, 0x2c, 0x9d, 0xbb, 0xb3, 0xb6, 0xb4, 0x7d, 0x33, 0x98, 0xad, 0xd6, 0x29, 0x46, 0xca, 0xbd, 0x0b, 0x28, 0x45, 0x83, 0x07, 0x53, 0x12, 0x0e, 0x53, 0xa4, 0xa3, 0x77, 0xd4, 0xf7, 0x6f, 0x16, 0x98, 0x38, 0x55, 0x41, 0xd9, 0xb6, 0x5e, 0x90, 0x9e, 0x65, 0xd0, 0xba, 0xac, 0xb0, 0x9c, 0x3c, 0xa3, 0xcc, 0x09, 0x28, 0xe7, 0x88, 0xce, 0x42, 0x92, 0xc4, 0xfa, 0xe7, 0x0b, 0x6c, 0x9e, 0xda, 0x0c, 0x11, 0xb2, 0xfa, 0x02, 0xb7, 0x36, 0x66, 0x47, 0x38, 0xaa, 0x36, 0x86, 0xeb, 0xce, 0x4b, 0xe6, 0x8c, 0x50, 0x59, 0x07, 0xc7, 0xa5, 0xe7, 0xbd, 0x53, 0x81, 0xda, 0xb9, 0x2f, 0x18, 0x66, 0x6c, 0xfb, 0x6a, 0x2d, 0xda, 0x14, 0x08, 0xd1, 0x28, 0xa1, 0x23, 0x82, 0x69, 0x42, 0x82, 0x10, 0xdc, 0x13, 0x02, 0x9a, 0x2a, 0x8c, 0xe4, 0x3d, 0xf4, 0x05, 0x36, 0x57, 0x41, 0x19, 0x69, 0xda, 0xd4, 0x56, 0x76, 0x20, 0x55, 0x39, 0x69, 0x17, 0x7d, 0x54, 0x96, 0xa2, 0x4e, 0xc8, 0x51, 0x81, 0x31, 0x71, 0x94, 0xa2, 0xa6, 0x7f, 0x1c, 0x89, 0x2d, 0xa8, 0xa0, 0x68, 0x7b, 0x54, 0x01, 0x11, 0xa8, 0xba, 0x72, 0xf9, 0xdc, 0x03, 0x25, 0xb4, 0xd0, 0x24, 0xd7, 0xb2, 0xad, 0x1c, 0x15, 0x97, 0xfd, 0x2b, 0x79, 0xc8, 0x9c, 0xa9, 0x1a, 0x4d, 0x78, 0xf5, 0x05, 0x94, 0x06, 0x22, 0x98, 0x88, 0xe2, 0x13, 0x81, 0x28, 0xc6, 0xcc, 0x2d, 0xd5, 0xf8, 0x45, 0x78, 0x70, 0x88, 0xb1, 0xac, 0x77, 0x0b, 0x89, 0xda, 0x53, 0x77, 0xb6, 0xba, 0xdd, 0x84, 0x89, 0xde, 0xa3, 0xce, 0x49, 0x21, 0x81, 0xa2, 0xc6, 0xc4, 0x6c, 0x74, 0xe0, 0x7f, 0x04, 0x64, 0x9c, 0xc3, 0x41, 0x42, 0xff, 0x98, 0x2a, 0x58, 0xd0, 0xfc, 0x08, 0x24, 0x15, 0x6d, 0xd5, 0x06, 0x4e, 0x61, 0xb2, 0x01, 0x23, 0xca, 0x06, 0x15, 0x9b, 0xf4, 0x08, 0x42, 0x9c, 0x82, 0xf5, 0x41, 0xc6, 0x02, 0xa1, 0xbd, 0xdb, 0xcb, 0x63, 0x6c, 0x16, 0x91, 0xc0, 0xba, 0x69, 0xfb, 0x21, 0xb4, 0xe2, 0x20, 0x77, 0x81, 0x27, 0x65, 0x15, 0xcb, 0xcc, 0xe4, 0x1c, 0xa1, 0x9b, 0x46, 0xe5, 0xaf, 0x45, 0x09, 0x4f, 0xbd, 0xab, 0xda, 0xa8, 0x9d, 0xb9, 0xb3, 0x14, 0x5a, 0xb4, 0x41, 0x95, 0x33, 0x84, 0x4f, 0x9b, 0x0c, 0x31, 0x59, 0x29, 0xa4, 0x88, 0x94, 0x12, 0xa3, 0x24, 0xc7, 0xa8, 0x3d, 0x1c, 0xdb, 0xf5, 0x49, 0x85, 0xcd, 0xb5, 0x11, 0x16, 0xb7, 0x22, 0x72, 0xf6, 0x71, 0xae, 0x69, 0xdf, 0x8d, 0x28, 0x8d, 0x2c, 0x10, 0x15, 0xf7, 0x3c, 0x67, 0xe6, 0x41, 0xb0, 0xad, 0x91, 0xd1, 0x58, 0x8e, 0x3a, 0x94, 0x33, 0x4b, 0xfa, 0xe4, 0x0a, 0x6d, 0xb7, 0x7a, 0x56, 0x01, 0x33, 0xa0, 0xad, 0xa8, 0x0a, 0xc8, 0x72, 0x7c, 0xd9, 0x73, 0x67, 0xa8, 0x63, 0x91, 0x07, 0xca, 0x85, 0x47, 0x38, 0x12, 0x3e, 0x2b, 0x17, 0xb9, 0xed, 0xc9, 0x6b, 0xda, 0x1b, 0x57, 0x96, 0xd6, 0x2f, 0xad, 0x6e, 0xdd, 0xb8, 0x41, 0x14, 0xca, 0x00, 0xb1, 0xb4, 0xf1, 0xe4, 0x6a, 0x39, 0xe2, 0x68, 0x24, 0x52, 0x1b, 0x59, 0xda, 0xba, 0xba, 0xfa, 0xf4, 0x15, 0x00, 0xc3, 0x9a, 0xba, 0xbe, 0xbe, 0xca, 0x88, 0x5a, 0x5a, 0xdb, 0x5c, 0xfd, 0xc4, 0xcd, 0x2b, 0x5b, 0x6b, 0x4b, 0xd7, 0x37, 0x56, 0xd7, 0x37, 0x36, 0x6e, 0x5e, 0x5d, 0xdf, 0xbc, 0xb8, 0x74, 0x69, 0x0b, 0x23, 0x5c, 0xc7, 0x3a, 0x44, 0x8d, 0x71, 0xff, 0x90, 0xf2, 0x5d, 0x1f, 0x52, 0xd0, 0x77, 0x63, 0xc8, 0xeb, 0x75, 0x48, 0x7f, 0xd7, 0x8d, 0x76, 0xf7, 0x63, 0x7a, 0x61, 0xe9, 0xfa, 0x66, 0xf9, 0x51, 0xfe, 0xbb, 0x07, 0xb2, 0x22, 0x57, 0xec, 0xf2, 0x84, 0x62, 0x98, 0x8d, 0x22, 0x1b, 0xd4, 0x0e, 0x83, 0x65, 0x37, 0xf0, 0x77, 0x8f, 0xa6, 0x77, 0x07, 0xe7, 0xee, 0x19, 0x3c, 0xbb, 0xe9, 0x91, 0x5b, 0x1c, 0xcb, 0x8d, 0xf7, 0xab, 0xf0, 0xce, 0x7c, 0xbc, 0xeb, 0xd7, 0x17, 0x9e, 0xf1, 0xb0, 0xc1, 0x71, 0xc7, 0x60, 0xf9, 0xce, 0x80, 0xca, 0xc1, 0x72, 0x1e, 0x9c, 0x9b, 0xba, 0xdd, 0x51, 0xde, 0x1d, 0xa7, 0x07, 0x1e, 0x32, 0x38, 0x57, 0x87, 0xad, 0x17, 0x17, 0x1f, 0x38, 0x75, 0x7b, 0xf7, 0x3d, 0xea, 0x1e, 0x84, 0x87, 0x3d, 0x0e, 0xfd, 0x0f, 0x53, 0xd1, 0x45, 0x51, 0x33, 0x58, 0x9e, 0xe0, 0x39, 0x3b, 0xa3, 0xf1, 0xee, 0x7e, 0x9a, 0x3d, 0x7d, 0xef, 0x8d, 0x9e, 0x3e, 0x07, 0xf6, 0xa1, 0xe9, 0xe3, 0x8b, 0x50, 0xf0, 0x73, 0x8e, 0xa6, 0xdc, 0x7c, 0x74, 0x00, 0xe9, 0x0b, 0x29, 0x8e, 0x7c, 0x0b, 0x0b, 0xb2, 0xa3, 0x83, 0x83, 0xf1, 0x74, 0x8e, 0xad, 0xa0, 0xad, 0xa8, 0xe8, 0x0a, 0xd5, 0x83, 0x0f, 0x4d, 0xac, 0xe6, 0xab, 0x4c, 0xeb, 0xc7, 0x0b, 0xba, 0x79, 0xdf, 0xc1, 0xc9, 0x6e, 0xba, 0x3b, 0x58, 0xf6, 0x5b, 0xc7, 0x0b, 0x80, 0x3e, 0x33, 0x38, 0xbd, 0x3c, 0x3d, 0x98, 0x1c, 0x0d, 0x96, 0x61, 0xb4, 0x83, 0xc1, 0xf2, 0xa9, 0x74, 0xb4, 0x5f, 0xc4, 0xa3, 0xa3, 0xbd, 0xc3, 0xc5, 0xae, 0xc0, 0xb2, 0xe7, 0x8e, 0xd2, 0xe0, 0x7c, 0x4c, 0x27, 0xe7, 0xa7, 0x47, 0x71, 0x77, 0xff, 0xb4, 0x79, 0x70, 0x7c, 0xf4, 0xe0, 0xa0, 0x9d, 0x11, 0xc3, 0xc3, 0x47, 0x1c, 0x8f, 0xf7, 0xe2, 0x60, 0xf9, 0x18, 0x3d, 0x1f, 0x30, 0xd2, 0x47, 0x61, 0x99, 0xb9, 0xf6, 0x9d, 0x89, 0xda, 0x71, 0x47, 0xcf, 0x8f, 0x8e, 0xdc, 0x64, 0x27, 0x1d, 0x61, 0x25, 0x1c, 0xa5, 0xc9, 0x89, 0x1b, 0x8f, 0xc2, 0x24, 0xb9, 0xa3, 0x83, 0x49, 0x31, 0xd3, 0x95, 0xea, 0xf7, 0x17, 0xf7, 0xdd, 0xf8, 0xc5, 0xe9, 0xee, 0x74, 0xfb, 0x63, 0xc5, 0x5c, 0x0f, 0x98, 0xb3, 0xfe, 0x47, 0x24, 0x6c, 0x99, 0xd9, 0xe5, 0x1d, 0x52, 0xf9, 0x4c, 0x2c, 0x56, 0xbb, 0xed, 0x4e, 0x30, 0x3b, 0xb7, 0x4f, 0xf6, 0x46, 0x18, 0x7e, 0x3a, 0x58, 0xbe, 0xed, 0x26, 0x83, 0xfb, 0x87, 0x5b, 0x29, 0xc2, 0xe5, 0xed, 0xc1, 0x8d, 0xe4, 0xc6, 0xbb, 0x3b, 0xfb, 0x69, 0xb2, 0x5d, 0xa1, 0xac, 0xb5, 0x00, 0x06, 0xcb, 0x37, 0x1e, 0x54, 0x05, 0xa6, 0x38, 0x37, 0x47, 0x3a, 0x6d, 0xa7, 0x60, 0xf9, 0xf9, 0xfd, 0x83, 0xbb, 0xfb, 0x83, 0x73, 0xf5, 0x9f, 0xba, 0xa0, 0x67, 0x57, 0x16, 0xd6, 0x40, 0x51, 0x7c, 0xd2, 0x3e, 0x65, 0x2f, 0xed, 0x1f, 0x01, 0xd3, 0xc1, 0xf1, 0x7e, 0x1c, 0x2d, 0xde, 0xf2, 0x46, 0xfa, 0xbe, 0xa9, 0x8d, 0xde, 0xb9, 0xee, 0xeb, 0xe5, 0xe1, 0xa7, 0x06, 0x78, 0xb8, 0xce, 0xeb, 0x83, 0x73, 0xf3, 0x99, 0xab, 0x06, 0x98, 0x69, 0xb2, 0x30, 0xa1, 0x83, 0xe5, 0x16, 0xe1, 0xfa, 0xdc, 0x34, 0x3f, 0x92, 0x95, 0x06, 0xcb, 0x1b, 0xd7, 0x2e, 0x0d, 0xc8, 0x8a, 0x18, 0x2c, 0xef, 0x1d, 0xe0, 0xc2, 0xe0, 0x63, 0x9b, 0xd7, 0x3e, 0xb1, 0xb9, 0x35, 0xba, 0xb6, 0xb9, 0x71, 0x6b, 0xb0, 0x1c, 0x0e, 0xf6, 0x0e, 0x27, 0x69, 0x3a, 0x1d, 0x90, 0xc1, 0xf2, 0x72, 0xdc, 0x9d, 0x3a, 0x3f, 0x4e, 0xf5, 0xc1, 0x35, 0x76, 0xec, 0xee, 0xef, 0x2c, 0x1a, 0x39, 0xc0, 0xae, 0x47, 0xf8, 0xfb, 0xc4, 0x4d, 0x76, 0xb1, 0xc2, 0xdf, 0xd0, 0xaa, 0x6f, 0x67, 0x42, 0xde, 0xb9, 0x71, 0xd7, 0x0a, 0x9a, 0xb5, 0x53, 0x30, 0x6f, 0xc3, 0xba, 0x93, 0x84, 0x54, 0xf6, 0x54, 0x0d, 0x35, 0x73, 0xe1, 0x4a, 0x95, 0x8d, 0xa2, 0x3b, 0x72, 0x2b, 0x61, 0x7a, 0x32, 0xb3, 0xe4, 0xd6, 0x6e, 0x19, 0x70, 0x66, 0xce, 0x69, 0xf9, 0x71, 0xcf, 0x9a, 0xe3, 0xc1, 0xfa, 0xe6, 0x53, 0xd7, 0x60, 0xd5, 0xc1, 0x07, 0xe9, 0x90, 0x0d, 0xf9, 0x50, 0x0c, 0xe5, 0x50, 0x0d, 0xf5, 0xd0, 0x0c, 0xed, 0x90, 0x92, 0x21, 0xa5, 0x43, 0xca, 0x86, 0x94, 0x0f, 0xa9, 0x18, 0x52, 0x39, 0xa4, 0x6a, 0x48, 0xf5, 0x90, 0x9a, 0x21, 0xb5, 0x43, 0x46, 0x86, 0x0c, 0xf7, 0xb0, 0xe1, 0xb3, 0xc3, 0x5b, 0xc3, 0xab, 0xdb, 0x1f, 0x2c, 0xe6, 0x3f, 0x29, 0x0e, 0x12, 0xaf, 0xc0, 0x42, 0x87, 0xa7, 0xba, 0xb4, 0xf2, 0x8f, 0x1f, 0xc3, 0x82, 0x47, 0x2f, 0x6e, 0x85, 0x83, 0x49, 0xba, 0xef, 0xd2, 0xda, 0x8b, 0x61, 0x7c, 0xbf, 0xec, 0xd2, 0xee, 0xfe, 0x71, 0x38, 0x95, 0x75, 0x7d, 0x03, 0x2a, 0xee, 0xfa, 0x09, 0xc4, 0xa3, 0x3b, 0xed, 0xa0, 0xa3, 0x69, 0x19, 0xf5, 0x4d, 0x27, 0xf0, 0x81, 0xc9, 0x7e, 0xe7, 0x33, 0xb6, 0x5d, 0x56, 0xd7, 0x8d, 0x53, 0x34, 0xbb, 0x07, 0xfb, 0x0f, 0x9f, 0xb4, 0xb7, 0x33, 0x4f, 0x0f, 0xba, 0xcd, 0xa9, 0x92, 0x8b, 0x9e, 0x33, 0x9f, 0xad, 0x1f, 0x6d, 0x9d, 0xbb, 0x71, 0x38, 0x1e, 0x17, 0x73, 0xf9, 0x3b, 0x0f, 0x24, 0x94, 0x37, 0x37, 0xe8, 0x5b, 0xe6, 0x19, 0xdc, 0x59, 0x42, 0xf9, 0xe5, 0x89, 0x5f, 0x50, 0xe0, 0x61, 0x41, 0xdd, 0xdf, 0x79, 0x20, 0xa2, 0x97, 0xdf, 0x7b, 0x09, 0xa1, 0xa0, 0x80, 0x3a, 0x04, 0x2f, 0x9b, 0xc4, 0xd3, 0xd9, 0x5a, 0x84, 0x5c, 0x67, 0x4a, 0xf2, 0x37, 0x9a, 0x9e, 0xab, 0x65, 0x88, 0x2d, 0xb7, 0x57, 0x2c, 0x3c, 0xad, 0x73, 0xb3, 0xbe, 0x79, 0xfd, 0xe6, 0xf6, 0x85, 0x53, 0x3c, 0x65, 0x9d, 0x5f, 0xbb, 0xb9, 0x5d, 0x65, 0xf5, 0x79, 0xd5, 0xa2, 0x83, 0x67, 0x2e, 0x6e, 0xac, 0x5f, 0xba, 0xb8, 0xbd, 0x7e, 0x6d, 0x73, 0xb4, 0xb5, 0x7d, 0x63, 0x7d, 0xf3, 0xca, 0xe5, 0xcd, 0xb5, 0x5b, 0x17, 0xb6, 0xd6, 0x37, 0x2e, 0x6f, 0x6e, 0x77, 0x20, 0xba, 0xc9, 0xf3, 0xa3, 0x78, 0x7c, 0x38, 0x06, 0xc2, 0x59, 0x94, 0xe8, 0x82, 0x6d, 0x75, 0x78, 0x2b, 0x94, 0x18, 0xe5, 0xd2, 0xe9, 0x20, 0x0f, 0x83, 0x79, 0x0f, 0x23, 0xba, 0xe2, 0x79, 0xf7, 0xa6, 0xfd, 0xe2, 0xd6, 0xd6, 0xcd, 0xab, 0x97, 0x47, 0x5b, 0xd7, 0x6e, 0x6c, 0x5f, 0xbe, 0x74, 0x61, 0xfb, 0xc6, 0xcd, 0xcb, 0x83, 0xab, 0x97, 0x01, 0x79, 0x6d, 0x6b, 0xf4, 0x14, 0xe0, 0x5e, 0xa8, 0xf9, 0x78, 0xff, 0x78, 0x3c, 0x7e, 0xfb, 0x3a, 0x15, 0xc8, 0x28, 0x77, 0x1e, 0xd4, 0xe5, 0x3e, 0x65, 0xff, 0x5f, 0x6c, 0xbf, 0x76, 0x6d, 0xe9, 0xe1, 0xb1, 0xff, 0xc2, 0xe0, 0xdd, 0xe0, 0xfa, 0x7b, 0xee, 0xf0, 0x10, 0x2e, 0x82, 0x75, 0x3f, 0x3d, 0x38, 0x9e, 0x84, 0x34, 0x3d, 0x7f, 0x71, 0x63, 0x63, 0xe5, 0xee, 0xce, 0x74, 0x65, 0xf6, 0xb8, 0x3d, 0x10, 0x94, 0xe9, 0x08, 0x46, 0x05, 0xa7, 0x1b, 0x3d, 0xb7, 0x43, 0xed, 0x68, 0x9c, 0xf2, 0xd1, 0xc5, 0x59, 0x1e, 0x0b, 0x07, 0xe3, 0xb1, 0x3b, 0x9c, 0xa2, 0x05, 0x02, 0x54, 0xfc, 0xee, 0xb9, 0xdd, 0xa3, 0xd9, 0x9d, 0x2b, 0x35, 0xb8, 0xae, 0x9c, 0x84, 0x8c, 0x52, 0xe1, 0x4d, 0xf4, 0x58, 0xf9, 0x71, 0x2b, 0x32, 0x3e, 0xb8, 0x5b, 0x62, 0x5d, 0x9a, 0xb8, 0x9d, 0x34, 0x3a, 0xb9, 0x33, 0x9d, 0xac, 0x30, 0x42, 0x09, 0xa5, 0x8c, 0xbf, 0x15, 0xd2, 0x6e, 0x7a, 0xf8, 0x71, 0xe3, 0x8c, 0x7e, 0xba, 0x7f, 0xb8, 0xe2, 0x8f, 0x77, 0xc7, 0x91, 0x72, 0xb9, 0x82, 0x1f, 0xf7, 0x21, 0x7b, 0xa6, 0x69, 0x9a, 0x33, 0xf8, 0x43, 0x9b, 0x0b, 0x6b, 0xff, 0xf4, 0x81, 0xd2, 0x62, 0xcd, 0xe7, 0x5f, 0xfb, 0xd5, 0xda, 0xe2, 0xcd, 0x2f, 0x7e, 0xe9, 0xfb, 0xef, 0x2f, 0x2d, 0xd1, 0xc4, 0xef, 0xc6, 0xda, 0x92, 0xcd, 0x47, 0x7e, 0xf3, 0xbb, 0x8f, 0x95, 0x96, 0x6a, 0x86, 0x67, 0x78, 0x6d, 0xe9, 0x66, 0x67, 0xed, 0x33, 0x4b, 0xa5, 0x65, 0x9a, 0x93, 0x67, 0xbe, 0xf3, 0x68, 0x69, 0xd9, 0xe6, 0xf5, 0xbf, 0xbc, 0xfd, 0xe8, 0xd9, 0x32, 0x32, 0x69, 0x5e, 0xfa, 0xd9, 0x9f, 0x69, 0x9b, 0xb4, 0x11, 0x4b, 0x3f, 0xd9, 0x36, 0x59, 0xf3, 0xfa, 0xed, 0x1f, 0xbc, 0xaf, 0x36, 0x79, 0xf3, 0xcc, 0x27, 0xff, 0xf9, 0xbd, 0xb5, 0x29, 0x9a, 0x73, 0xef, 0xcd, 0x6d, 0x53, 0x36, 0x4f, 0x7c, 0xf6, 0xe7, 0xdb, 0xa6, 0x6a, 0x2e, 0xfe, 0xa9, 0x7f, 0x4f, 0x6d, 0xea, 0xe6, 0x7b, 0xff, 0xf1, 0x77, 0x3f, 0x51, 0x9b, 0xa6, 0x79, 0xe2, 0x53, 0xdf, 0x68, 0x9b, 0xb6, 0xf9, 0xf2, 0x47, 0x3e, 0x77, 0xb6, 0x34, 0x19, 0x69, 0x0e, 0xff, 0xf8, 0x95, 0xb6, 0x49, 0x9b, 0x9d, 0x9d, 0x7f, 0x39, 0x53, 0x9b, 0xac, 0x39, 0xf9, 0xfb, 0x0f, 0x9c, 0x2d, 0xc0, 0x9e, 0x6d, 0x5e, 0xbe, 0x70, 0xb1, 0x82, 0xbd, 0xd5, 0xfc, 0xf0, 0xf5, 0x5f, 0xaf, 0x3d, 0xaf, 0x6e, 0x37, 0xdf, 0x79, 0xa2, 0x69, 0xde, 0x8f, 0xe6, 0xbd, 0xcf, 0x96, 0x9b, 0xaf, 0xff, 0xd4, 0xa2, 0xa8, 0x7c, 0x08, 0xdc, 0xbc, 0xbc, 0xda, 0x11, 0x59, 0x88, 0xfe, 0xfa, 0xea, 0xa2, 0xa8, 0x7c, 0xaa, 0xda, 0xfc, 0xe0, 0xf6, 0xa2, 0xa8, 0x7c, 0xfb, 0xd9, 0xfc, 0xd2, 0xb8, 0xd3, 0xab, 0xdc, 0x38, 0xf8, 0xb5, 0x8e, 0x48, 0x42, 0xf4, 0xed, 0xcf, 0x75, 0x40, 0x94, 0xb1, 0xc4, 0xe7, 0x17, 0x45, 0xe5, 0xfb, 0xb9, 0xe6, 0xa9, 0xdf, 0xea, 0x88, 0xca, 0x8d, 0x1f, 0xfe, 0xc2, 0x82, 0xa8, 0x7e, 0xe1, 0xd5, 0xe8, 0xdf, 0xee, 0x8c, 0xc5, 0x21, 0xfa, 0xf4, 0x17, 0x3b, 0x37, 0x16, 0x85, 0x1e, 0xfb, 0x52, 0x47, 0x54, 0x70, 0xe5, 0xdf, 0xe9, 0x8c, 0x55, 0x7a, 0x9d, 0xf9, 0xdd, 0x4e, 0x2f, 0x03, 0xd1, 0xed, 0x97, 0x3a, 0x22, 0x01, 0xd1, 0xff, 0x74, 0x44, 0xe5, 0xc3, 0x88, 0xe6, 0xec, 0xef, 0x75, 0x40, 0x30, 0x88, 0xbe, 0xd1, 0x11, 0x95, 0xa3, 0xfb, 0xcd, 0xd6, 0x57, 0x3a, 0xa2, 0xd2, 0xeb, 0x6f, 0x3a, 0xa2, 0x72, 0xb8, 0xbc, 0x79, 0xfc, 0xe5, 0xce, 0x13, 0x8b, 0x55, 0xbf, 0xff, 0xb5, 0xce, 0x8d, 0xa5, 0xd7, 0xdf, 0x76, 0x44, 0xe5, 0x3c, 0x71, 0xf3, 0xcd, 0x3f, 0xec, 0x88, 0x8a, 0x25, 0xae, 0x7e, 0xab, 0x23, 0x2a, 0x4f, 0x3c, 0xfb, 0xed, 0xce, 0x58, 0x65, 0xf8, 0x3f, 0xea, 0x8a, 0x8a, 0x55, 0x3f, 0xfc, 0x27, 0x1d, 0x51, 0x19, 0xeb, 0xb8, 0x23, 0x2a, 0xa7, 0x06, 0x9b, 0xaf, 0x5c, 0x78, 0x64, 0xd1, 0x84, 0xc5, 0x12, 0xaf, 0x8e, 0x1e, 0x59, 0xec, 0x55, 0x44, 0x3f, 0x7d, 0xbb, 0xd3, 0xab, 0x40, 0x7d, 0xe5, 0xab, 0x8b, 0xbd, 0xca, 0xc1, 0xab, 0xe6, 0xe4, 0x3f, 0x3b, 0xa2, 0x72, 0xe3, 0x2f, 0xff, 0xf7, 0xa2, 0xa8, 0x1c, 0x0c, 0x6a, 0xfe, 0xeb, 0xe7, 0xce, 0x2c, 0xf6, 0x2a, 0x63, 0xbd, 0x67, 0xb4, 0x28, 0x2a, 0x07, 0x57, 0x9a, 0x57, 0xf6, 0x16, 0x45, 0xe5, 0x20, 0x48, 0xf3, 0x2b, 0xc7, 0x9d, 0x1b, 0x8b, 0xda, 0x8f, 0xbd, 0xd0, 0xe9, 0x55, 0x74, 0xfc, 0xc2, 0x67, 0x3b, 0xa2, 0x32, 0xfc, 0xd7, 0x7f, 0xe3, 0xcc, 0x22, 0xfa, 0x32, 0xfc, 0x17, 0xbf, 0xdc, 0xe9, 0x55, 0xd0, 0x1f, 0xbf, 0xdc, 0x11, 0x95, 0x19, 0x7a, 0xef, 0xef, 0x77, 0x44, 0x65, 0xf9, 0x3e, 0xf2, 0x07, 0x1d, 0xa8, 0x45, 0xf4, 0xbf, 0xdf, 0xea, 0xf4, 0x2a, 0xc3, 0xff, 0xf0, 0xcf, 0x3b, 0x50, 0x8b, 0xda, 0xaf, 0xfd, 0x45, 0x47, 0x54, 0xa0, 0xfe, 0xeb, 0x5f, 0x75, 0x70, 0x95, 0xb1, 0x0e, 0xbf, 0xd7, 0x19, 0xab, 0xcc, 0xf6, 0xbf, 0xfd, 0x43, 0xe7, 0xc6, 0x22, 0x7a, 0xad, 0x23, 0x2a, 0x1b, 0xf7, 0xcd, 0x4b, 0xff, 0xd8, 0x19, 0xab, 0x0c, 0xff, 0xa9, 0x57, 0x3b, 0xa2, 0x0a, 0xe2, 0xdf, 0x3b, 0x63, 0x95, 0x27, 0xbe, 0x6a, 0xce, 0x2e, 0xf6, 0x2a, 0xc3, 0x7f, 0xf3, 0x93, 0x8f, 0x36, 0x8f, 0x41, 0x74, 0xba, 0x91, 0xd8, 0x9c, 0xff, 0xea, 0x99, 0xe6, 0x7d, 0x90, 0xb4, 0xdb, 0x5f, 0xcd, 0x9f, 0xdd, 0xfa, 0x85, 0x33, 0xff, 0x07, 0x2a, 0x25, 0xce, 0xde, 0xd4, 0x53, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x2d, 0x69, 0xc4, 0xbd, 0x5b, 0x8f, 0x24, 0x59, 0x72, 0x26, 0x16, 0xdd, 0xd3, 0x33, 0x3d, 0xdd, 0x5d, 0x5d, 0x59, 0xee, 0xe5, 0x95, 0xe9, 0x71, 0xf1, 0xcb, 0xb9, 0x1f, 0xbf, 0x85, 0x5f, 0x2a, 0xb3, 0x2a, 0x0b, 0x82, 0x00, 0x46, 0x74, 0x00, 0x0c, 0x2d, 0x76, 0x76, 0x57, 0xe4, 0x90, 0x9c, 0x19, 0x81, 0x97, 0x95, 0xf4, 0x2a, 0x80, 0x7f, 0x40, 0x0f, 0x1e, 0xf0, 0x07, 0xd7, 0x03, 0xa1, 0x7d, 0x16, 0x20, 0x40, 0xaf, 0x7a, 0xd0, 0x4f, 0x20, 0xa0, 0x9f, 0xb0, 0x80, 0x44, 0x4a, 0xd0, 0xd3, 0xfe, 0x04, 0x51, 0x80, 0x40, 0x2e, 0xb9, 0x12, 0xf5, 0xd9, 0xf1, 0xc8, 0xaa, 0xcc, 0xaa, 0xac, 0xca, 0xca, 0x8e, 0x21, 0x14, 0xd5, 0x19, 0x19, 0x11, 0x59, 0x35, 0x93, 0x76, 0xcc, 0x8e, 0xd9, 0xf7, 0xd9, 0x31, 0xb3, 0xf3, 0xd7, 0xb3, 0xd9, 0xec, 0x02, 0x5f, 0xff, 0xf7, 0xdf, 0xfe, 0x37, 0x3f, 0x79, 0x3e, 0xfb, 0xf3, 0x74, 0x36, 0xfb, 0xaf, 0x67, 0xff, 0xe5, 0xad, 0xcf, 0xf0, 0x6d, 0xf6, 0xfb, 0xbf, 0xf7, 0x7b, 0xcd, 0xab, 0xee, 0xd5, 0xcb, 0xab, 0x75, 0xfb, 0xe6, 0xd5, 0xcb, 0xd7, 0xd7, 0x5d, 0x37, 0xdb, 0x1e, 0xf8, 0x7e, 0xb3, 0xdf, 0x8d, 0x5e, 0xbf, 0xdb, 0x6f, 0xfa, 0x0d, 0x1f, 0x86, 0x90, 0x87, 0x72, 0x08, 0xf7, 0xb6, 0x1f, 0xfb, 0x60, 0xb7, 0xf1, 0xf7, 0xfb, 0xdd, 0x16, 0x2f, 0x77, 0x76, 0x0c, 0x77, 0xdc, 0x6e, 0x82, 0x9e, 0xf1, 0x34, 0x4d, 0x97, 0xd2, 0x66, 0xb9, 0xce, 0x85, 0xcd, 0x8d, 0xb0, 0xb6, 0x28, 0x4b, 0x5b, 0x14, 0xc6, 0xac, 0x6d, 0x6e, 0xed, 0xda, 0xac, 0xb5, 0xb1, 0x59, 0x65, 0x6c, 0x52, 0xb7, 0x79, 0xd1, 0x16, 0x6d, 0x53, 0xd6, 0x8d, 0xd5, 0x79, 0xd1, 0xb5, 0x6d, 0xd1, 0x14, 0xd6, 0xd4, 0x6d, 0xdd, 0xb6, 0x4d, 0xd3, 0xd6, 0x75, 0xd3, 0xd4, 0x6d, 0xd6, 0xe0, 0xb1, 0xb6, 0xcd, 0xf4, 0x58, 0x57, 0x55, 0x6e, 0xcf, 0x7e, 0xef, 0x77, 0x7f, 0xf3, 0xf6, 0x77, 0x9d, 0x3d, 0xf9, 0xe2, 0x96, 0x64, 0xea, 0xcf, 0xd3, 0x9f, 0xcc, 0xfe, 0xf2, 0x73, 0x24, 0xfb, 0x37, 0xf8, 0xd8, 0xc3, 0xd7, 0xff, 0xf0, 0xd3, 0xd9, 0x8c, 0x1d, 0xfc, 0xcd, 0xb0, 0x39, 0xf8, 0xc1, 0xde, 0x86, 0x8c, 0xdb, 0xb0, 0xf7, 0x99, 0x65, 0x72, 0x17, 0x58, 0xcb, 0xc3, 0x6d, 0x38, 0xee, 0xfa, 0x71, 0x94, 0x87, 0x61, 0xb7, 0xdb, 0x87, 0x5b, 0x7f, 0xbb, 0xe9, 0xb7, 0xe1, 0x20, 0xd2, 0x54, 0xca, 0x25, 0xe7, 0x5a, 0x4b, 0x99, 0x58, 0x65, 0xac, 0x16, 0x89, 0x48, 0x45, 0xaa, 0xf0, 0x0f, 0xad, 0x34, 0x42, 0x70, 0x5d, 0x5a, 0xa5, 0x65, 0x6b, 0x79, 0xdb, 0xe6, 0x59, 0xd3, 0x9a, 0xa6, 0x29, 0x9a, 0x1a, 0x62, 0x64, 0x4d, 0x51, 0xe4, 0x59, 0x9c, 0xe9, 0x22, 0x57, 0x4b, 0x12, 0x71, 0x92, 0x6b, 0xbd, 0xce, 0xeb, 0x7a, 0xad, 0x6b, 0x05, 0x09, 0xeb, 0x75, 0x55, 0x94, 0xc5, 0xd9, 0xaf, 0x9a, 0x1f, 0xbe, 0xf8, 0x55, 0xfb, 0xc3, 0xec, 0x17, 0xbb, 0xdf, 0xb4, 0x3f, 0x34, 0xbf, 0xdb, 0x6d, 0x9a, 0x5f, 0xbe, 0xe9, 0x66, 0x77, 0x64, 0xdf, 0xfc, 0xe2, 0x87, 0xd9, 0xbf, 0xf8, 0xc5, 0x0f, 0x3f, 0xfd, 0xfd, 0x5f, 0xfc, 0xa0, 0x7e, 0xf5, 0x2f, 0x7e, 0xf8, 0xe6, 0x57, 0xbf, 0xdc, 0xfc, 0x41, 0x71, 0x5c, 0x8f, 0xbf, 0x85, 0xec, 0xfe, 0xc5, 0x9f, 0xa7, 0x5f, 0xcd, 0xfe, 0x7b, 0xb7, 0x1e, 0x21, 0xbe, 0xfe, 0xe4, 0x77, 0x66, 0xb3, 0xdb, 0xeb, 0x71, 0xb9, 0xee, 0xb0, 0x1e, 0x4d, 0xdb, 0xb9, 0xbf, 0xf1, 0xe7, 0xc7, 0x25, 0xf9, 0x33, 0x2c, 0x89, 0xb7, 0x79, 0xec, 0xa2, 0x7c, 0x39, 0x3d, 0xf8, 0x6a, 0x95, 0x24, 0x5c, 0x2b, 0x9e, 0xe8, 0x54, 0x88, 0x78, 0x11, 0x2e, 0x22, 0x86, 0xa5, 0x52, 0x58, 0x27, 0x15, 0x0b, 0xa6, 0x14, 0x0f, 0x79, 0xc2, 0x79, 0x64, 0x8c, 0xb6, 0xa9, 0x4e, 0xb5, 0x66, 0xb4, 0x2c, 0x22, 0xa1, 0x65, 0xb1, 0x76, 0x8e, 0xb5, 0x48, 0x4c, 0x1d, 0x1f, 0xd7, 0x05, 0xc6, 0x52, 0x5b, 0x5b, 0xa9, 0xb5, 0xaa, 0xca, 0x5b, 0x4b, 0xf2, 0xc5, 0xaf, 0x36, 0xbf, 0xf9, 0x75, 0x59, 0x5d, 0xbd, 0x79, 0xf9, 0xfa, 0xe5, 0xd5, 0xd5, 0x75, 0xf9, 0xfa, 0x17, 0xed, 0xee, 0xfa, 0xf5, 0x2f, 0xca, 0xab, 0xff, 0x68, 0xf6, 0xab, 0x1f, 0x7e, 0xf8, 0x13, 0x2c, 0xd8, 0xb4, 0x5c, 0xd7, 0xd7, 0xb7, 0x97, 0xeb, 0x92, 0x96, 0xeb, 0x02, 0xcb, 0xf5, 0x15, 0x96, 0xeb, 0x02, 0xcb, 0xf5, 0x35, 0x2d, 0x97, 0xbc, 0xb5, 0x5c, 0xcf, 0x2f, 0xc8, 0x7c, 0xde, 0x6d, 0x8c, 0xbf, 0xbd, 0x6b, 0x3e, 0x97, 0xed, 0xba, 0xbd, 0xee, 0x5e, 0x37, 0x2f, 0xaf, 0xdf, 0xbc, 0x5d, 0xab, 0xff, 0x19, 0x6b, 0xf5, 0x68, 0xeb, 0x91, 0x5f, 0xb2, 0xe5, 0x3c, 0x11, 0x58, 0x13, 0xa6, 0x32, 0x9d, 0x67, 0x4f, 0xe7, 0xb1, 0x58, 0x24, 0x2b, 0x39, 0x4f, 0x98, 0x8c, 0xd3, 0x34, 0x7c, 0xf1, 0x3c, 0x15, 0x0b, 0x11, 0xcb, 0x34, 0x96, 0x52, 0xc4, 0x91, 0x59, 0x9a, 0x84, 0x5b, 0xc6, 0x8d, 0x59, 0x98, 0x28, 0x6b, 0xf3, 0x3a, 0xc1, 0xf6, 0x48, 0xa2, 0xac, 0xc9, 0x5b, 0xf7, 0xa8, 0xeb, 0x5a, 0x61, 0xab, 0x98, 0xc6, 0x18, 0xbb, 0xc6, 0x8f, 0x6c, 0x5d, 0x15, 0xec, 0x53, 0x6b, 0xf5, 0xe6, 0xa5, 0x5b, 0xab, 0xb7, 0xeb, 0xf4, 0xe6, 0xf2, 0xd6, 0x3a, 0x5d, 0xb6, 0x37, 0x66, 0x75, 0x67, 0x9d, 0xfe, 0xfa, 0xd6, 0x9a, 0x4c, 0x0e, 0xe4, 0x2f, 0x3f, 0x67, 0x9d, 0x86, 0x30, 0xf0, 0xed, 0x7e, 0x73, 0x60, 0x87, 0xfd, 0x66, 0x38, 0x8c, 0xe1, 0xe8, 0xed, 0x76, 0x9e, 0x1c, 0x86, 0x9d, 0x0d, 0xc7, 0x60, 0x3b, 0xf6, 0xc3, 0x96, 0x0f, 0xde, 0x3e, 0xd8, 0xf8, 0x0c, 0x3f, 0xde, 0x85, 0x7e, 0xd0, 0x4b, 0xc6, 0x85, 0xe6, 0x5c, 0x4a, 0xad, 0x73, 0x79, 0xae, 0x13, 0xec, 0xaf, 0xa8, 0x68, 0x15, 0x3c, 0x88, 0x15, 0x95, 0xd0, 0x16, 0x9e, 0xc3, 0x42, 0xe8, 0x46, 0xc7, 0xb6, 0x20, 0x4f, 0x61, 0x55, 0x5e, 0xe7, 0x4d, 0x9b, 0xdb, 0xb6, 0x81, 0xec, 0x71, 0x5d, 0xc0, 0x75, 0xb4, 0xd2, 0xd6, 0x75, 0x51, 0x63, 0x31, 0xea, 0x3a, 0x6b, 0xa4, 0xb2, 0xeb, 0x66, 0x5d, 0xab, 0x7a, 0xcd, 0x2b, 0x3c, 0xf2, 0xec, 0xec, 0x8e, 0xb4, 0x8f, 0xb3, 0x80, 0xae, 0x79, 0xfd, 0xaa, 0x79, 0xf9, 0xb2, 0x3b, 0xd1, 0x02, 0x52, 0x29, 0x96, 0x9c, 0xd1, 0x26, 0x30, 0x75, 0x9e, 0x17, 0x99, 0xad, 0x32, 0x0b, 0x49, 0x78, 0x96, 0xb5, 0xb6, 0xc9, 0xb4, 0xd5, 0x55, 0xa5, 0x4b, 0xd1, 0x5a, 0x03, 0x49, 0xab, 0xb6, 0x15, 0xa4, 0x67, 0xc8, 0xd5, 0xd4, 0xa5, 0x53, 0x38, 0x89, 0xda, 0x18, 0x7c, 0x7b, 0x6b, 0x01, 0xed, 0x64, 0x01, 0x35, 0x09, 0x0d, 0x61, 0xff, 0x7f, 0xb7, 0x80, 0xb7, 0xeb, 0xf4, 0x58, 0x03, 0x18, 0x19, 0xe3, 0x8a, 0x63, 0x73, 0x40, 0x53, 0xda, 0x94, 0x79, 0x6e, 0x32, 0x84, 0x84, 0xa6, 0xae, 0x20, 0xac, 0x35, 0xf0, 0x9f, 0x75, 0xd3, 0xd1, 0x62, 0x34, 0xee, 0x63, 0x27, 0x3e, 0xc2, 0x44, 0x5b, 0x77, 0xa4, 0x7f, 0xac, 0xc4, 0xf4, 0x09, 0xbd, 0xa8, 0x2d, 0xe9, 0xbf, 0x76, 0x6f, 0xb0, 0x24, 0x1a, 0x7e, 0xb5, 0xaa, 0xd6, 0x75, 0x59, 0x16, 0xc5, 0x5d, 0x0b, 0xe0, 0x47, 0x0b, 0xf8, 0xbb, 0x7b, 0x2c, 0xe0, 0xef, 0xde, 0x0b, 0x21, 0x70, 0x99, 0xdd, 0x2b, 0xfa, 0xbf, 0x7d, 0x3d, 0xfb, 0xb3, 0xa3, 0x05, 0xfc, 0x5b, 0x0a, 0x21, 0x32, 0xdc, 0x85, 0x8c, 0xed, 0x0e, 0xfd, 0xc1, 0xe7, 0xfd, 0xe8, 0x71, 0xff, 0xe0, 0xef, 0x36, 0xdb, 0xc3, 0x81, 0x0d, 0x6c, 0x1c, 0xf6, 0xe1, 0x78, 0xd8, 0xdb, 0xdd, 0x6e, 0xd7, 0x0f, 0x70, 0x86, 0x61, 0xc0, 0xc6, 0xed, 0x46, 0x88, 0x05, 0x63, 0x92, 0xa5, 0x3c, 0x81, 0x11, 0x58, 0x13, 0x2a, 0x6b, 0x6d, 0x56, 0x9a, 0x2a, 0xc3, 0x2e, 0xe6, 0x56, 0x22, 0x82, 0xa6, 0xc5, 0x85, 0xcd, 0x44, 0xd9, 0x36, 0x12, 0xbf, 0x31, 0x82, 0xa8, 0x79, 0x92, 0x15, 0x45, 0xbd, 0x6a, 0x9c, 0xbe, 0x9b, 0xc9, 0x00, 0x32, 0x8a, 0x94, 0xf8, 0x00, 0x56, 0xd4, 0x08, 0x18, 0x80, 0x90, 0x30, 0x00, 0x18, 0x41, 0x5d, 0x97, 0x3c, 0xbb, 0xdf, 0x02, 0xde, 0x94, 0xaf, 0xc8, 0x02, 0x2e, 0x7f, 0x51, 0x5e, 0x3a, 0x0b, 0x70, 0xfa, 0xbf, 0xfa, 0xc0, 0x53, 0x92, 0xfe, 0x7f, 0x72, 0xd4, 0xff, 0xcf, 0x6e, 0xeb, 0xff, 0xef, 0xee, 0xd1, 0xff, 0x27, 0x56, 0xe9, 0xf3, 0x60, 0xc3, 0xce, 0xe3, 0x41, 0xb8, 0x97, 0x9b, 0x9e, 0xed, 0x0f, 0x29, 0x4f, 0x05, 0x57, 0x4a, 0xad, 0xf3, 0x0c, 0x48, 0x01, 0xfb, 0x22, 0x8a, 0x9b, 0xbc, 0x69, 0x3a, 0xdb, 0x94, 0x6d, 0x5d, 0x20, 0xae, 0x92, 0x01, 0xe8, 0xa8, 0x26, 0xa8, 0x40, 0x2e, 0x90, 0x15, 0x75, 0x5e, 0x60, 0x25, 0xf0, 0x77, 0x34, 0xf4, 0x8c, 0x80, 0x8b, 0x97, 0x64, 0x14, 0x47, 0x03, 0xc0, 0x0a, 0x99, 0xa3, 0x03, 0x20, 0x03, 0x58, 0x23, 0xd2, 0x9c, 0xdd, 0x91, 0x56, 0xde, 0xd2, 0xbf, 0xff, 0x69, 0xfd, 0x93, 0x6f, 0x7b, 0xf5, 0xea, 0x4d, 0x77, 0xf9, 0xe6, 0x13, 0xea, 0xdf, 0x7f, 0x86, 0xfa, 0x59, 0x3a, 0x5f, 0xa5, 0x2a, 0x66, 0x42, 0x58, 0x95, 0xe5, 0x51, 0xc4, 0xd2, 0x88, 0xb3, 0xfc, 0x85, 0x36, 0x2c, 0x4e, 0xbe, 0x8f, 0x84, 0xca, 0x32, 0x59, 0xda, 0x36, 0xb3, 0x6d, 0xd9, 0x54, 0xb4, 0xe7, 0xdb, 0x8e, 0xac, 0xdc, 0x39, 0xbc, 0x16, 0xee, 0x9e, 0x36, 0x00, 0x74, 0x0e, 0xf8, 0x84, 0x87, 0x86, 0x90, 0xc5, 0xdd, 0xfd, 0x5f, 0x57, 0x0f, 0xab, 0xff, 0xea, 0xad, 0xfa, 0xbb, 0x97, 0xbf, 0x7c, 0xdd, 0x7e, 0xd2, 0x03, 0x38, 0x0b, 0xf8, 0xab, 0x5b, 0x6b, 0xe2, 0x7f, 0xda, 0x02, 0x6e, 0xad, 0xd3, 0x23, 0xc0, 0xe3, 0x64, 0x05, 0x4c, 0xf2, 0x08, 0x00, 0x4a, 0xe9, 0x2a, 0xc7, 0xa6, 0xc8, 0x6c, 0x9a, 0x48, 0x6b, 0xf3, 0x86, 0x65, 0xb4, 0x35, 0x5e, 0xc0, 0x03, 0xd8, 0xae, 0x31, 0xf0, 0xfd, 0x50, 0x6b, 0x6d, 0xba, 0xb6, 0xa4, 0x90, 0x37, 0xa1, 0x46, 0x6c, 0xf5, 0xcc, 0xa1, 0x46, 0x87, 0x1e, 0x6c, 0x3d, 0xf9, 0x4c, 0xe7, 0x0b, 0xb0, 0x2c, 0x00, 0x59, 0xf5, 0x3a, 0x87, 0x05, 0x14, 0xef, 0x3b, 0x80, 0xfc, 0x68, 0x00, 0xff, 0xfe, 0xe8, 0x00, 0xbe, 0x9a, 0xfd, 0xf1, 0x5b, 0xcc, 0xf4, 0xc7, 0x1f, 0x60, 0xa6, 0xf6, 0x15, 0x96, 0xb2, 0x41, 0x70, 0xdb, 0xe1, 0xe3, 0x7f, 0x75, 0x12, 0x8e, 0x74, 0x90, 0x69, 0x2e, 0xb8, 0x44, 0xe4, 0xe7, 0xcf, 0x84, 0xcc, 0x33, 0x9b, 0x99, 0x42, 0x8a, 0x9c, 0x21, 0x68, 0x59, 0xa3, 0x10, 0xf6, 0x55, 0x82, 0x80, 0x28, 0x62, 0x5e, 0x2a, 0xa1, 0x94, 0x10, 0xdf, 0xe9, 0x52, 0xe5, 0xf0, 0x07, 0xba, 0x28, 0x78, 0x9e, 0x65, 0x59, 0xa1, 0x74, 0x9e, 0xda, 0x3c, 0x2b, 0xf0, 0x7a, 0x95, 0xc1, 0x0f, 0xac, 0x54, 0x53, 0x86, 0x56, 0x9b, 0xf5, 0xba, 0xa9, 0xd7, 0xab, 0x22, 0x7f, 0x7a, 0x9f, 0x15, 0xbc, 0x6a, 0xca, 0x2b, 0xb2, 0x82, 0xd6, 0x39, 0x01, 0x80, 0xa6, 0x3f, 0x23, 0x94, 0xf9, 0x01, 0xc2, 0x7c, 0x0b, 0x99, 0x6e, 0x1c, 0xc1, 0x4f, 0x6f, 0x3b, 0x82, 0x7f, 0x7f, 0x0f, 0x97, 0xf8, 0xf7, 0x1f, 0x3a, 0x82, 0x97, 0x0e, 0x73, 0x37, 0x8f, 0x87, 0x02, 0xa3, 0x00, 0x99, 0x70, 0x50, 0x00, 0x41, 0xbf, 0x96, 0xba, 0xb2, 0xe4, 0xf3, 0x73, 0xe8, 0x1d, 0x3a, 0x4e, 0xa1, 0xe5, 0x6a, 0x0a, 0x80, 0x88, 0x08, 0xa6, 0xae, 0x1c, 0x18, 0xd2, 0xda, 0x18, 0x23, 0x5c, 0x78, 0x68, 0x5c, 0x4c, 0x24, 0x67, 0x40, 0xea, 0x27, 0x53, 0xc8, 0x4c, 0x9b, 0xe1, 0x55, 0x55, 0xd7, 0x1a, 0x4b, 0xb3, 0x5e, 0xb3, 0x2a, 0x7f, 0xcf, 0x11, 0xa4, 0xb7, 0xed, 0x60, 0xfe, 0xe7, 0x78, 0xfb, 0x97, 0x9f, 0x23, 0xd9, 0xef, 0xfc, 0x6c, 0x36, 0x7b, 0xb4, 0xff, 0xdf, 0xcc, 0x49, 0xaf, 0x9c, 0xc1, 0xb6, 0xad, 0xd5, 0x3a, 0x13, 0x5c, 0x7c, 0x6f, 0xa4, 0x52, 0x50, 0x7a, 0x92, 0x02, 0x1f, 0xe8, 0x84, 0x8b, 0x62, 0x09, 0x90, 0x93, 0xc3, 0xc7, 0x83, 0x48, 0x91, 0x21, 0x17, 0x39, 0xc9, 0x94, 0x93, 0x4f, 0x2b, 0x9a, 0xdc, 0x1c, 0x71, 0x00, 0x44, 0x5d, 0x2f, 0xe1, 0xfc, 0x10, 0xe1, 0xa0, 0xf6, 0x0a, 0xef, 0xe0, 0xe4, 0xd6, 0xb2, 0x2c, 0xf3, 0x7b, 0x3d, 0xc0, 0xab, 0x97, 0xe5, 0xe5, 0x2f, 0xda, 0xff, 0xe4, 0xcd, 0xd5, 0x2f, 0xca, 0x97, 0x13, 0x04, 0xd8, 0xe0, 0xcf, 0x2f, 0x9b, 0x8f, 0x87, 0x01, 0xe2, 0x17, 0xf3, 0x1f, 0xa3, 0xfd, 0x2b, 0x72, 0x02, 0x57, 0xdd, 0x55, 0xdb, 0xce, 0xfa, 0x30, 0xd8, 0x3d, 0xce, 0x02, 0x78, 0x42, 0x51, 0x40, 0x80, 0x45, 0x29, 0xa5, 0x2d, 0x17, 0x1c, 0xfc, 0x80, 0x45, 0xc0, 0xcb, 0x46, 0x26, 0x45, 0xa7, 0x6c, 0x0e, 0xae, 0x88, 0x3f, 0xd6, 0xde, 0x38, 0x81, 0x8c, 0x53, 0xac, 0xc7, 0xe6, 0xc6, 0x5e, 0x28, 0x8b, 0xac, 0x74, 0x56, 0x20, 0x6f, 0x9c, 0x40, 0xe3, 0xac, 0x60, 0x8a, 0x07, 0x58, 0x22, 0x78, 0x55, 0x9e, 0xdf, 0x65, 0x92, 0x8f, 0xd1, 0xfe, 0x2d, 0xc9, 0x7e, 0xa4, 0xf6, 0x53, 0x2e, 0x45, 0x24, 0xb5, 0xc9, 0xb0, 0x79, 0x61, 0x04, 0xc6, 0x64, 0x39, 0x62, 0x3e, 0xbe, 0x63, 0xef, 0x02, 0xf7, 0xa8, 0x92, 0x1c, 0x00, 0xbc, 0x7f, 0x5b, 0xc0, 0xa0, 0x1b, 0xd3, 0x3a, 0x84, 0x57, 0x52, 0xf0, 0x57, 0xb0, 0x5f, 0xf2, 0xfe, 0xef, 0xb4, 0xbf, 0xa6, 0x67, 0xdd, 0x10, 0xc2, 0x81, 0x80, 0x4e, 0xfb, 0xc5, 0xa9, 0xda, 0xbf, 0xba, 0x57, 0xfb, 0x1f, 0xae, 0xd1, 0x3b, 0x4f, 0xf9, 0x47, 0x77, 0x3d, 0x25, 0x85, 0x80, 0xcb, 0x57, 0xaf, 0x1a, 0xac, 0xd2, 0x8f, 0x5d, 0xa3, 0x88, 0xcb, 0x95, 0x60, 0x02, 0x00, 0x89, 0x5c, 0x9d, 0x35, 0x70, 0x90, 0x08, 0x8c, 0x08, 0x03, 0x32, 0x85, 0xe6, 0x81, 0x90, 0x55, 0x99, 0x99, 0xb2, 0x23, 0x22, 0x84, 0x40, 0x09, 0x04, 0x88, 0x50, 0xd9, 0x4c, 0x38, 0x99, 0x5c, 0xc3, 0xa7, 0x10, 0x32, 0xde, 0xa8, 0xb2, 0xbc, 0x3f, 0x46, 0x7e, 0xee, 0x1a, 0x4d, 0x61, 0x72, 0xfe, 0xfe, 0x1a, 0x55, 0x1f, 0x44, 0x93, 0x8f, 0xee, 0x10, 0x5a, 0xa3, 0xd7, 0x00, 0xca, 0xaf, 0x5e, 0xbe, 0x9a, 0xfd, 0xf2, 0x56, 0x34, 0xf9, 0x37, 0x88, 0x26, 0x7e, 0x78, 0x0b, 0x55, 0xf0, 0xcf, 0x59, 0xb2, 0x89, 0x81, 0x87, 0x17, 0x67, 0x32, 0x4d, 0xe3, 0x85, 0x8e, 0x44, 0xfa, 0x34, 0x66, 0x6c, 0x9e, 0xb2, 0xf4, 0x8b, 0x24, 0x5d, 0xc6, 0x49, 0x12, 0xc7, 0x73, 0x06, 0x1e, 0x2e, 0x8d, 0x8a, 0x95, 0xd5, 0xf0, 0x87, 0xbc, 0xc5, 0xce, 0xd1, 0xe4, 0x38, 0x1b, 0x0d, 0x70, 0x05, 0xb2, 0x04, 0x26, 0x45, 0xb0, 0xd2, 0x4c, 0xab, 0x86, 0x10, 0xda, 0x88, 0xd8, 0x90, 0x65, 0x21, 0x9c, 0x90, 0xbf, 0xfc, 0x54, 0x34, 0x69, 0x6e, 0x28, 0xf8, 0x9f, 0x1e, 0xa3, 0x49, 0xfb, 0x7a, 0xf3, 0xfa, 0xe5, 0x27, 0x71, 0xc5, 0x47, 0x5c, 0xca, 0x47, 0x37, 0xde, 0xed, 0x05, 0x7b, 0x6c, 0x6a, 0x6a, 0xe7, 0x85, 0x67, 0xcf, 0x65, 0x12, 0xc1, 0xab, 0x2c, 0xa5, 0x12, 0x89, 0x4a, 0xb2, 0x0b, 0x05, 0xa4, 0x1d, 0x5b, 0xc5, 0xb2, 0x05, 0x22, 0xaf, 0x36, 0xb6, 0x43, 0xb4, 0x39, 0x8f, 0xb0, 0x05, 0x5b, 0x29, 0xd4, 0x1c, 0xbe, 0xa6, 0xe5, 0xb1, 0x01, 0xca, 0x12, 0x35, 0x8b, 0xea, 0xb2, 0x6e, 0xb0, 0x15, 0xa3, 0x29, 0x31, 0x45, 0x90, 0x14, 0x40, 0x6b, 0xda, 0x81, 0x39, 0x36, 0x5e, 0x55, 0xae, 0xab, 0x3b, 0xc8, 0x12, 0xd2, 0x3e, 0xc2, 0x59, 0x92, 0x64, 0x6f, 0xae, 0x9b, 0x97, 0x0d, 0x30, 0xb3, 0xf4, 0xbc, 0x9e, 0x7b, 0xc0, 0x0c, 0xbb, 0x20, 0xb0, 0x5c, 0x0e, 0xc1, 0xb0, 0x7f, 0xc0, 0x7f, 0xce, 0x39, 0x17, 0x12, 0x9a, 0x72, 0x42, 0x14, 0x55, 0x85, 0xb0, 0x51, 0x12, 0x81, 0xce, 0x6c, 0x92, 0xa5, 0xf8, 0x55, 0x73, 0xc0, 0x67, 0x38, 0x40, 0xfc, 0xa6, 0x5d, 0x6b, 0xc1, 0xa5, 0xa0, 0x67, 0x5d, 0x38, 0x02, 0x8d, 0x48, 0x3a, 0x81, 0x49, 0xe7, 0x21, 0x1d, 0xb9, 0x70, 0xb1, 0xd3, 0x6d, 0x22, 0xe0, 0x89, 0xc6, 0x39, 0x97, 0x0f, 0x58, 0x33, 0x7f, 0xcf, 0xc8, 0x7f, 0xf2, 0x69, 0x9d, 0xdd, 0x48, 0x76, 0x63, 0xe0, 0xff, 0x8e, 0x0c, 0xfc, 0xb1, 0xa4, 0x39, 0x00, 0x65, 0xe2, 0x5c, 0x49, 0xb5, 0x82, 0xb2, 0x8a, 0xb2, 0x50, 0x46, 0x4a, 0x9d, 0x29, 0xf2, 0x0c, 0x25, 0xc5, 0x02, 0x53, 0x81, 0x4e, 0x03, 0x33, 0x77, 0xad, 0x96, 0x70, 0x9b, 0x05, 0x78, 0x82, 0xc3, 0xcc, 0xcd, 0x1d, 0xca, 0xd4, 0x1c, 0x41, 0xc3, 0xda, 0x79, 0x84, 0x1b, 0xaf, 0x49, 0x31, 0xb3, 0x12, 0x45, 0xf9, 0x49, 0x03, 0xbf, 0xba, 0xe1, 0x4c, 0x0e, 0x2a, 0xbd, 0xba, 0xd7, 0xb2, 0xef, 0x40, 0xa5, 0x1b, 0xc4, 0xfc, 0xf7, 0x6f, 0x11, 0xf3, 0x3b, 0xfd, 0xff, 0xfd, 0x07, 0x21, 0xe5, 0xba, 0x05, 0x69, 0xba, 0x6a, 0x67, 0x8f, 0x55, 0xfe, 0x18, 0x24, 0x2c, 0x95, 0x91, 0x82, 0x05, 0x20, 0x8c, 0x40, 0xf5, 0x35, 0xd7, 0x45, 0xde, 0xd8, 0x4c, 0xa6, 0x60, 0x46, 0x00, 0xbe, 0x00, 0xc5, 0x9a, 0x28, 0x22, 0xe5, 0x13, 0x9a, 0x86, 0xb5, 0x82, 0xdc, 0x27, 0x36, 0x7b, 0x8d, 0x6d, 0x5e, 0x6b, 0x7e, 0x54, 0x7d, 0xa3, 0xee, 0xaa, 0x7e, 0x4d, 0x9f, 0x21, 0xbe, 0x92, 0xbb, 0x8d, 0xf9, 0xd3, 0x3b, 0xb1, 0xe1, 0x27, 0x5f, 0xdc, 0x12, 0x4c, 0xdd, 0x8d, 0x95, 0x1f, 0x17, 0x8c, 0xc2, 0xc0, 0xa3, 0x95, 0xee, 0xbb, 0x7c, 0x80, 0x40, 0x14, 0xc8, 0xac, 0x12, 0x4f, 0x34, 0x57, 0xc2, 0xa8, 0xc4, 0xc2, 0x0c, 0xb8, 0x32, 0x7a, 0x4d, 0x64, 0x39, 0xa3, 0x3c, 0x89, 0x46, 0xe8, 0x6f, 0x0a, 0x53, 0x92, 0x4d, 0x63, 0xa7, 0x36, 0xa5, 0x8b, 0xf5, 0x8c, 0x70, 0x52, 0xf3, 0x36, 0x52, 0xaa, 0xb7, 0x91, 0x72, 0xed, 0x22, 0x65, 0x0d, 0x9c, 0x44, 0xbb, 0xf6, 0x56, 0xb2, 0xf5, 0xad, 0xab, 0x7f, 0x75, 0x6f, 0x38, 0xfc, 0xea, 0x98, 0x6c, 0xfd, 0x8a, 0xf4, 0xfb, 0xe1, 0x32, 0x7c, 0x54, 0xbf, 0xd8, 0x05, 0xd7, 0x5d, 0xf3, 0xba, 0x79, 0xf3, 0xf2, 0x47, 0x2e, 0x43, 0x9c, 0x4a, 0x7e, 0x21, 0x94, 0xb1, 0xa5, 0xd5, 0x30, 0x7b, 0x23, 0x75, 0x7e, 0xa1, 0x01, 0x8e, 0xa4, 0x34, 0x99, 0xca, 0x2b, 0x59, 0xaa, 0x2c, 0x05, 0x60, 0x50, 0xb6, 0x84, 0x5b, 0x6f, 0xa2, 0xaa, 0xe9, 0x9a, 0x12, 0xef, 0xa7, 0x60, 0xd8, 0xbc, 0x1f, 0x0c, 0xdb, 0x63, 0x30, 0xac, 0xdb, 0xc9, 0x8b, 0xe9, 0x35, 0xe8, 0xf6, 0x83, 0xcb, 0x70, 0xd7, 0x81, 0xbf, 0x5d, 0x86, 0x0f, 0xcd, 0xfc, 0xa3, 0xd6, 0x70, 0x6b, 0x19, 0xac, 0x64, 0xe1, 0xb6, 0x3f, 0x6c, 0xf7, 0xdb, 0xd0, 0xe7, 0x9c, 0x6d, 0x1e, 0xf6, 0x7a, 0x69, 0x7c, 0x91, 0xf2, 0x04, 0x1e, 0x40, 0xb3, 0x04, 0x5e, 0x1a, 0xf0, 0x89, 0x80, 0x21, 0x39, 0x00, 0x99, 0x65, 0xb9, 0xd6, 0x31, 0x25, 0x49, 0xa5, 0x14, 0x80, 0x55, 0x58, 0x1e, 0x2c, 0x8d, 0x2e, 0x40, 0x17, 0x33, 0x08, 0x5f, 0x18, 0x06, 0x13, 0xef, 0x28, 0x51, 0x44, 0x66, 0xe1, 0xb6, 0x7e, 0x43, 0x50, 0x80, 0x76, 0x01, 0x5c, 0xc1, 0x9a, 0x4c, 0xa1, 0xa4, 0x9c, 0xc9, 0x1d, 0x61, 0xbf, 0x38, 0xea, 0xf7, 0x1f, 0xee, 0xd1, 0xef, 0x3f, 0x7c, 0x40, 0x08, 0xae, 0x2e, 0xb1, 0xb8, 0x60, 0xbc, 0xa4, 0xdf, 0x47, 0x83, 0x1d, 0xf9, 0x25, 0x5f, 0xae, 0xd2, 0x67, 0xe7, 0xcf, 0x56, 0xcb, 0xf0, 0xe7, 0xd1, 0xe2, 0x7c, 0xf5, 0x6d, 0xec, 0x25, 0x49, 0x12, 0xa4, 0x2c, 0x9a, 0x3f, 0x5b, 0x45, 0xd1, 0xe2, 0xc5, 0x7c, 0xb1, 0xb0, 0x2c, 0x65, 0x71, 0x1a, 0xb3, 0x58, 0x6b, 0x66, 0x75, 0x9a, 0x96, 0x26, 0x6b, 0x75, 0x52, 0x1b, 0xa6, 0x75, 0xaa, 0x34, 0x76, 0x36, 0x44, 0xcd, 0x24, 0x89, 0x27, 0x32, 0xd3, 0x24, 0x75, 0x2d, 0xd7, 0x84, 0x75, 0x32, 0xab, 0xd7, 0xbc, 0xc8, 0xd3, 0x3b, 0xfa, 0x9d, 0xb4, 0xfb, 0xfa, 0xa3, 0x89, 0x1f, 0xd2, 0xee, 0x4f, 0x6e, 0x6b, 0xf7, 0x1f, 0xee, 0xd1, 0xee, 0xc7, 0x17, 0xe1, 0xf1, 0x79, 0x9f, 0x68, 0x91, 0x8a, 0x34, 0x0a, 0x22, 0x9e, 0x66, 0x8c, 0x25, 0x4c, 0xb0, 0x34, 0x46, 0x00, 0x9e, 0xe7, 0x8d, 0xd1, 0x73, 0x01, 0x17, 0x0f, 0x9d, 0xc2, 0x1b, 0x49, 0xc3, 0xb9, 0xb1, 0xb9, 0x6d, 0xd3, 0x56, 0xa7, 0x30, 0xdc, 0xec, 0x18, 0x89, 0x33, 0x02, 0xf9, 0x14, 0xe8, 0xa0, 0x67, 0x66, 0x1a, 0xca, 0x89, 0x67, 0x09, 0x1c, 0xe1, 0xba, 0x8e, 0xa1, 0x5d, 0x6d, 0xef, 0xc9, 0xfb, 0xdc, 0x08, 0xf6, 0x1f, 0xee, 0xf1, 0xce, 0xff, 0xe1, 0x03, 0xc1, 0xe0, 0xc3, 0xae, 0xdf, 0x5c, 0x5d, 0xcd, 0x1e, 0x97, 0xcc, 0x20, 0xd1, 0x22, 0x60, 0x8e, 0x05, 0x65, 0x34, 0x38, 0x83, 0x37, 0xcd, 0x80, 0x3b, 0x10, 0xb5, 0x78, 0x52, 0x14, 0x2b, 0x91, 0x83, 0xef, 0x53, 0x56, 0xd3, 0x38, 0xe1, 0x20, 0x22, 0x48, 0x4c, 0xe5, 0x0e, 0x89, 0xc0, 0xf3, 0x40, 0x64, 0x4a, 0x10, 0xbd, 0xc9, 0x27, 0xdf, 0x26, 0x31, 0x4d, 0x9d, 0x4d, 0x38, 0x64, 0x5d, 0x2f, 0x9a, 0x35, 0x60, 0x59, 0xfe, 0xf4, 0x8e, 0x60, 0x5f, 0x7f, 0x71, 0x4b, 0x30, 0x98, 0xed, 0x97, 0xb7, 0x34, 0xf6, 0x71, 0xc1, 0x08, 0x80, 0xfe, 0x9f, 0x3f, 0x2a, 0x97, 0x39, 0x01, 0xcf, 0x65, 0x7c, 0x01, 0x10, 0x22, 0xb9, 0x49, 0x53, 0xbe, 0x02, 0x6f, 0x4b, 0x94, 0x56, 0x4b, 0xc1, 0x79, 0x94, 0xc4, 0x26, 0xd1, 0x89, 0x4d, 0x63, 0x05, 0x2f, 0xa4, 0xf2, 0xa4, 0xd0, 0x65, 0x03, 0xe0, 0x85, 0x10, 0xd5, 0xb4, 0xb2, 0xce, 0xb2, 0xe2, 0x26, 0x30, 0xd3, 0x43, 0xad, 0xc9, 0x1d, 0x65, 0x6b, 0x5d, 0x27, 0x88, 0xc8, 0xf0, 0xd8, 0xd5, 0xba, 0x2a, 0x57, 0xef, 0x3c, 0xf4, 0x11, 0x5e, 0x3a, 0xe3, 0x7d, 0x79, 0xaf, 0xf1, 0x7e, 0x79, 0x34, 0xde, 0x2f, 0xc9, 0x78, 0xff, 0x9f, 0x23, 0x39, 0xf9, 0x43, 0x90, 0x93, 0xe7, 0xea, 0x9f, 0xf9, 0x5f, 0xcc, 0x7e, 0xf1, 0x96, 0xb0, 0xfc, 0xe1, 0x07, 0xa9, 0x9d, 0xae, 0x03, 0x9f, 0x7f, 0xd5, 0x4e, 0x2e, 0x1a, 0x22, 0x6e, 0x7b, 0x6f, 0xbf, 0xf1, 0x87, 0xfe, 0x20, 0xfd, 0xd0, 0xee, 0x46, 0xde, 0xdb, 0x43, 0xb0, 0xe3, 0xa1, 0x17, 0xf0, 0xde, 0xeb, 0xb7, 0xdc, 0xf7, 0xf7, 0x07, 0x6e, 0xf1, 0x32, 0x98, 0xc0, 0xfa, 0x59, 0x1e, 0x55, 0x66, 0x4d, 0x7a, 0x41, 0x9c, 0x59, 0x91, 0x54, 0x13, 0xe1, 0x6c, 0x8d, 0xaa, 0x5b, 0x84, 0xd9, 0x3c, 0x37, 0x39, 0x61, 0x11, 0xdd, 0xd5, 0x4d, 0x99, 0x1b, 0x53, 0x92, 0x46, 0x09, 0x8f, 0xd8, 0x0c, 0x1a, 0x36, 0xb5, 0xae, 0xb2, 0xac, 0x2d, 0xd6, 0x05, 0x25, 0xbc, 0x8c, 0x2e, 0xb5, 0xb4, 0x2a, 0xe3, 0x36, 0x4f, 0x33, 0x50, 0x3e, 0x99, 0x89, 0xa5, 0x04, 0x0b, 0xbe, 0xb5, 0x85, 0x2f, 0xaf, 0x7f, 0x79, 0xd5, 0xfc, 0xd0, 0x7c, 0x62, 0x11, 0x8e, 0xe0, 0xfa, 0xed, 0x02, 0xcc, 0xfe, 0x99, 0x3f, 0x9b, 0xfd, 0xc5, 0xe7, 0x2c, 0xc0, 0x23, 0x01, 0x08, 0xd8, 0xfb, 0x19, 0x10, 0x17, 0x81, 0xa8, 0x75, 0x86, 0x15, 0x20, 0xb7, 0x8a, 0xa0, 0x22, 0x1b, 0xd5, 0x48, 0x40, 0xcd, 0x5a, 0x12, 0xe5, 0x6e, 0xb4, 0x69, 0x94, 0x4a, 0xf2, 0x3c, 0xcb, 0xbb, 0x86, 0x4e, 0x44, 0xb3, 0xb6, 0xd2, 0xc0, 0xab, 0x40, 0x18, 0x6d, 0x46, 0x7b, 0xa0, 0xae, 0xb5, 0x89, 0x4c, 0x6a, 0x35, 0x76, 0x05, 0x57, 0xd8, 0x25, 0x20, 0xc4, 0x5a, 0x69, 0x11, 0x33, 0x6c, 0x1f, 0xc1, 0x93, 0xe5, 0x1d, 0x49, 0x3f, 0x94, 0xec, 0xe3, 0xaa, 0xbd, 0x82, 0x64, 0x57, 0x57, 0x5d, 0x77, 0x79, 0x39, 0x7b, 0xa4, 0x57, 0xf2, 0x21, 0x59, 0x5e, 0x96, 0x6b, 0x8a, 0x12, 0xb4, 0x13, 0xc9, 0x50, 0x6b, 0x4d, 0x49, 0x28, 0x4b, 0x81, 0x44, 0x39, 0x30, 0x89, 0x60, 0x6a, 0x5c, 0x2e, 0x3a, 0x01, 0xf2, 0xa8, 0x0b, 0xe9, 0x4e, 0x69, 0xb0, 0x75, 0xdb, 0x18, 0xb8, 0x04, 0x42, 0x27, 0x88, 0x48, 0x2d, 0x98, 0x6b, 0x99, 0x15, 0x94, 0xe0, 0xb3, 0x1a, 0x2e, 0x40, 0x59, 0x65, 0x88, 0x7e, 0xe8, 0x44, 0x0b, 0x1e, 0xdf, 0x81, 0x1a, 0x1f, 0x1a, 0xed, 0xc7, 0x75, 0x76, 0x4b, 0xb2, 0x1f, 0x69, 0xb4, 0x45, 0x59, 0xa9, 0x12, 0xbb, 0xae, 0x22, 0x71, 0xc8, 0x78, 0x09, 0x1c, 0x43, 0x58, 0x93, 0xd5, 0xcd, 0xf1, 0xf8, 0x04, 0xe2, 0xae, 0xeb, 0xe3, 0xe1, 0x0a, 0x36, 0xa7, 0x03, 0x14, 0x05, 0x65, 0xa3, 0x6d, 0xcd, 0x0a, 0xdb, 0x5a, 0x3a, 0x82, 0x4b, 0xa0, 0xc0, 0x8c, 0x34, 0x46, 0x0a, 0xb5, 0xa9, 0x05, 0xc1, 0x04, 0x4e, 0x11, 0xf0, 0x00, 0xf2, 0x01, 0xa3, 0xbd, 0xfa, 0xc0, 0x68, 0xff, 0xf1, 0xf3, 0x77, 0x2d, 0xb1, 0x8b, 0xe6, 0xaa, 0x79, 0x79, 0xf9, 0x7a, 0xc2, 0x97, 0xc3, 0x8f, 0xd8, 0xb5, 0x65, 0x45, 0x29, 0x94, 0x96, 0x98, 0x0e, 0xa5, 0x56, 0xea, 0x9b, 0x5d, 0xeb, 0x60, 0x71, 0x47, 0x39, 0xa5, 0xbc, 0xed, 0xea, 0xba, 0x73, 0x52, 0x77, 0x94, 0x8b, 0x6f, 0xac, 0xcb, 0xc9, 0x13, 0x9e, 0xa8, 0x4d, 0x89, 0x8f, 0xea, 0x75, 0x01, 0x54, 0x4d, 0x79, 0x0a, 0x4b, 0x19, 0x7d, 0xbc, 0xe2, 0x75, 0x81, 0xc0, 0x6c, 0xf2, 0x05, 0x67, 0x22, 0xb9, 0x1d, 0x78, 0x7f, 0xf7, 0xf2, 0xf5, 0xfb, 0x4b, 0x70, 0x97, 0x3e, 0x3c, 0x76, 0xdf, 0xde, 0x5e, 0x02, 0x36, 0x6c, 0x36, 0x8f, 0xab, 0xda, 0x38, 0x03, 0x55, 0x24, 0xf6, 0xe3, 0xc2, 0x09, 0x90, 0xf1, 0x84, 0x98, 0x80, 0x90, 0xa7, 0x24, 0x4a, 0x9a, 0x83, 0x17, 0xd0, 0x9a, 0xd0, 0x96, 0x2d, 0x6a, 0x97, 0x61, 0x07, 0xe6, 0x36, 0x58, 0x0a, 0xdd, 0x51, 0xb8, 0xad, 0x81, 0x48, 0x2b, 0x4b, 0xc7, 0x97, 0x89, 0xa2, 0xc3, 0xba, 0x0c, 0xcc, 0x5a, 0x4b, 0x4f, 0x61, 0x1d, 0x32, 0xa5, 0x44, 0x2a, 0x13, 0xce, 0x3f, 0x20, 0xc5, 0x37, 0xf9, 0xa2, 0xf7, 0xf7, 0xed, 0x1f, 0x7d, 0x60, 0xdd, 0x6d, 0xf3, 0xe6, 0xfa, 0xf5, 0xcb, 0x57, 0xed, 0x4c, 0x0e, 0xac, 0xe7, 0x9c, 0x07, 0xfe, 0xc6, 0x0b, 0x7d, 0xe6, 0x0d, 0x0f, 0x4b, 0x7a, 0xc6, 0x72, 0x6c, 0xc7, 0xf5, 0xfa, 0x6d, 0xf9, 0x08, 0x20, 0xaf, 0x8b, 0xa6, 0x2e, 0x9c, 0x52, 0xae, 0xa3, 0x6e, 0x4b, 0xf0, 0x23, 0xe8, 0xb4, 0x69, 0xad, 0x0b, 0xbf, 0x1c, 0x66, 0x2b, 0x52, 0xc6, 0x13, 0x98, 0xf2, 0x1c, 0x12, 0x49, 0x08, 0xa5, 0xf2, 0xcc, 0xe4, 0x0c, 0xf1, 0x0c, 0x90, 0xf2, 0x9c, 0x65, 0x29, 0xb7, 0x6a, 0xae, 0xd9, 0x13, 0x96, 0x5e, 0x5c, 0x24, 0xf7, 0xef, 0xdb, 0x3f, 0xba, 0x67, 0xdf, 0x7e, 0x42, 0x32, 0xb7, 0x6f, 0xf7, 0x81, 0xf5, 0x82, 0xc1, 0xb3, 0xfb, 0x90, 0x6f, 0xd8, 0x61, 0xd8, 0x1f, 0xac, 0x3f, 0xb2, 0xdd, 0x96, 0xf5, 0xde, 0xd6, 0x7a, 0x61, 0xc0, 0x19, 0x93, 0x23, 0xe7, 0xa3, 0x17, 0xde, 0x94, 0x66, 0x9c, 0x15, 0xa2, 0x28, 0x8e, 0xdb, 0x96, 0x5c, 0x91, 0xdb, 0xb6, 0x50, 0x99, 0x69, 0xa6, 0x6d, 0x5b, 0xd0, 0x51, 0x88, 0x4b, 0x7e, 0x13, 0xf8, 0xa7, 0x5c, 0x78, 0x0e, 0xf9, 0x61, 0xb5, 0xa4, 0x40, 0x2c, 0x05, 0x7c, 0x54, 0x05, 0x80, 0x91, 0x24, 0xa6, 0xc8, 0x32, 0x6d, 0x04, 0x15, 0xe5, 0x18, 0x3a, 0x7f, 0x00, 0x40, 0xc9, 0xe5, 0x52, 0x26, 0x92, 0xdf, 0xd9, 0xb7, 0xce, 0x68, 0xdb, 0x4f, 0xef, 0xdb, 0x47, 0xaa, 0xf6, 0x55, 0xf3, 0xea, 0x9a, 0xfe, 0x67, 0x1e, 0xab, 0xd8, 0xdd, 0xe6, 0x2c, 0xcf, 0x8b, 0xea, 0x08, 0x19, 0x26, 0x9f, 0x7c, 0x54, 0x2b, 0x0c, 0xf5, 0x67, 0x50, 0x7a, 0x19, 0x03, 0x35, 0xb6, 0x1a, 0x6a, 0x35, 0xb6, 0x81, 0x8b, 0x2a, 0x29, 0xa2, 0x70, 0xae, 0xac, 0x6d, 0x75, 0x45, 0x01, 0x07, 0x38, 0x0c, 0xc0, 0x32, 0x4f, 0xc0, 0x9e, 0x52, 0x21, 0x63, 0x9d, 0x81, 0x87, 0xd9, 0x55, 0x26, 0x80, 0xd0, 0xd8, 0x22, 0x4e, 0xd3, 0x38, 0xf9, 0xf2, 0x8e, 0xa4, 0xff, 0xf8, 0x38, 0xd5, 0xde, 0x48, 0xe6, 0x3c, 0xd2, 0x8f, 0x50, 0x6d, 0x99, 0xdc, 0xa8, 0x16, 0x2a, 0xcd, 0xd7, 0xb4, 0x1d, 0x6b, 0xe7, 0x91, 0x0b, 0x87, 0xff, 0x48, 0x60, 0x10, 0x78, 0xa8, 0xd6, 0xca, 0xd6, 0x18, 0xbc, 0x96, 0xc6, 0xe8, 0xb4, 0x30, 0x9a, 0x8e, 0xc2, 0x10, 0x8b, 0xe0, 0x91, 0x33, 0xb3, 0xcc, 0x52, 0x8d, 0xa0, 0x93, 0x1b, 0x95, 0x25, 0xc6, 0xa8, 0x34, 0x49, 0xf1, 0x97, 0x8c, 0x7c, 0xc1, 0x19, 0x8f, 0xd9, 0x5d, 0x8f, 0xf4, 0xea, 0xe3, 0xca, 0xfd, 0xc9, 0xfb, 0x4e, 0xf9, 0xdd, 0x12, 0xfc, 0x4f, 0x9f, 0x4a, 0xf9, 0xdc, 0xce, 0xfd, 0xfe, 0xa8, 0x25, 0x28, 0x10, 0x94, 0x9a, 0xe3, 0x12, 0x1c, 0x7d, 0x32, 0xfc, 0xd3, 0x11, 0x02, 0xbb, 0x22, 0x08, 0x3c, 0x75, 0x75, 0xf3, 0xae, 0x0a, 0x00, 0xea, 0x76, 0x3e, 0x19, 0xd0, 0xc2, 0xc0, 0x4f, 0x83, 0xf7, 0x40, 0xed, 0x0d, 0x30, 0x55, 0x4e, 0x36, 0x0e, 0x95, 0x67, 0x8d, 0xa9, 0x10, 0x74, 0xf5, 0x52, 0x8a, 0xbb, 0x50, 0xea, 0xbe, 0x25, 0x78, 0x97, 0xde, 0x7d, 0xbb, 0x04, 0x37, 0x1b, 0xfc, 0x57, 0xf7, 0xc4, 0xa5, 0x5f, 0xdd, 0xb3, 0xc1, 0x2f, 0xaf, 0x2f, 0xbb, 0xcb, 0xe3, 0x06, 0x7f, 0x6c, 0x58, 0x0a, 0x9f, 0x26, 0x8b, 0x38, 0x5a, 0x69, 0x21, 0xd3, 0x45, 0xac, 0x97, 0xcc, 0x9a, 0x38, 0x87, 0xe3, 0xcd, 0x16, 0x79, 0x56, 0xe4, 0x2b, 0x55, 0x2c, 0x13, 0xc5, 0xe3, 0x52, 0x84, 0x16, 0x24, 0xb8, 0x30, 0x25, 0x59, 0x38, 0xac, 0x5a, 0x2b, 0x96, 0x23, 0x00, 0xaf, 0x0a, 0x02, 0x51, 0xb9, 0xcd, 0xcd, 0xe2, 0x79, 0xb2, 0x8c, 0x57, 0x2b, 0x1e, 0x7f, 0x1f, 0xfd, 0x3c, 0x59, 0x9d, 0x0b, 0x01, 0x62, 0xe5, 0xa5, 0x8b, 0x0b, 0x0f, 0x4c, 0xfa, 0xd9, 0xed, 0xb8, 0x34, 0x2d, 0xc0, 0xfd, 0x15, 0x66, 0x1f, 0x6c, 0xf0, 0x5f, 0xdd, 0x13, 0x95, 0x3e, 0xb1, 0x00, 0x8f, 0xe0, 0xf8, 0x47, 0x6c, 0x79, 0x96, 0x7a, 0x89, 0x48, 0xb5, 0x10, 0x82, 0xea, 0x22, 0x32, 0x13, 0x2b, 0xb9, 0x82, 0x68, 0xb9, 0x58, 0xd8, 0x5c, 0xaa, 0x58, 0x99, 0x18, 0x3e, 0x1a, 0x5c, 0x18, 0x11, 0x76, 0xa5, 0xe6, 0x61, 0xb8, 0x4c, 0x41, 0x3f, 0xd2, 0x28, 0x8d, 0x16, 0x60, 0x5b, 0x22, 0x14, 0xcf, 0x65, 0x9a, 0x26, 0xf3, 0x67, 0xf3, 0x05, 0x4b, 0x2e, 0xa2, 0xd5, 0x32, 0x82, 0x3f, 0x5b, 0x2e, 0x2e, 0xc4, 0x7c, 0x25, 0xce, 0xbf, 0x0f, 0x9f, 0x3d, 0x09, 0xe3, 0x38, 0x9a, 0xdf, 0x91, 0xf4, 0xff, 0x3d, 0x4a, 0xf1, 0x6b, 0x48, 0xe1, 0xbf, 0xa7, 0xda, 0x5f, 0x7f, 0x88, 0xb9, 0x2e, 0x5f, 0x35, 0x5d, 0x37, 0x51, 0xfd, 0x47, 0xdb, 0xf6, 0xe1, 0x2c, 0x73, 0x81, 0x89, 0xcc, 0xba, 0x39, 0xe2, 0xad, 0xb7, 0x70, 0xa3, 0x25, 0x22, 0xe0, 0x4c, 0xdb, 0xbd, 0x29, 0xa9, 0x0a, 0xa0, 0x06, 0xb4, 0x34, 0x44, 0x08, 0xab, 0xb6, 0x80, 0x9b, 0x92, 0x8a, 0xf6, 0x71, 0x04, 0x1e, 0xac, 0x62, 0xad, 0xb9, 0x8a, 0x94, 0x44, 0xa0, 0xd5, 0x2c, 0x07, 0xca, 0x94, 0x61, 0x9c, 0x82, 0x39, 0xf3, 0xf4, 0xb6, 0x66, 0xaf, 0x9c, 0x66, 0x37, 0xf7, 0x83, 0xae, 0xb7, 0xc6, 0xfd, 0x57, 0xb7, 0x57, 0xe0, 0x3d, 0xdd, 0x7e, 0x7c, 0x05, 0x1e, 0xab, 0xd8, 0x1d, 0x00, 0xa7, 0x2d, 0x68, 0x6f, 0x13, 0x4d, 0xa8, 0x89, 0xe8, 0x51, 0x62, 0xce, 0xae, 0x9d, 0x2b, 0x6f, 0xb2, 0xf6, 0x78, 0xac, 0xa5, 0x5b, 0x40, 0x6b, 0x66, 0x2c, 0xe4, 0x82, 0xef, 0xd2, 0x02, 0x22, 0x17, 0xa5, 0x49, 0x4a, 0x23, 0x75, 0x81, 0x0f, 0x6c, 0x95, 0xc1, 0xb7, 0xc3, 0xb3, 0x09, 0x15, 0xa5, 0x46, 0x2d, 0x2d, 0xf8, 0xb3, 0x80, 0xf5, 0x5b, 0x91, 0xd0, 0x71, 0xf9, 0xbd, 0xbe, 0xfb, 0xd7, 0xf7, 0xec, 0xda, 0xf7, 0x04, 0x73, 0xe7, 0x0b, 0x97, 0x6d, 0x7b, 0xf5, 0xe6, 0xf2, 0x47, 0xeb, 0x96, 0x57, 0x94, 0x34, 0xaf, 0x1b, 0x75, 0x03, 0x25, 0xa9, 0xfe, 0x33, 0x77, 0x50, 0x72, 0xd2, 0x6d, 0x37, 0xb9, 0xad, 0x94, 0xc0, 0x47, 0x5b, 0x4f, 0x55, 0x7c, 0x15, 0x11, 0x40, 0x5d, 0x22, 0x3e, 0xe5, 0xd0, 0x73, 0x42, 0x5b, 0x3a, 0x33, 0x1a, 0x00, 0xca, 0x41, 0x6a, 0x70, 0xe4, 0xa2, 0xca, 0xe3, 0x48, 0x0b, 0xc5, 0x79, 0xfa, 0x90, 0x6e, 0x3f, 0x81, 0x26, 0x7f, 0x7d, 0xcf, 0xbe, 0xfd, 0xc4, 0x12, 0x78, 0x83, 0x0d, 0xe5, 0x6d, 0xe0, 0xb5, 0x7d, 0x28, 0x3e, 0x13, 0x9a, 0xac, 0xea, 0xaa, 0x5a, 0xab, 0x3a, 0x99, 0x34, 0x5b, 0xeb, 0xf6, 0x2d, 0xfa, 0x02, 0xd3, 0xcf, 0x96, 0xa0, 0xbb, 0x0d, 0xb8, 0x7f, 0x6e, 0x48, 0x64, 0x90, 0x46, 0x93, 0xe9, 0xb6, 0x8d, 0x04, 0x98, 0xa0, 0xc8, 0xe8, 0xf0, 0xd3, 0x1a, 0x05, 0x4f, 0xcd, 0x52, 0x25, 0x04, 0x02, 0xf6, 0xd2, 0xa6, 0x32, 0x97, 0x11, 0x68, 0xd2, 0x32, 0x59, 0xbd, 0x10, 0xf3, 0x24, 0x61, 0x77, 0x24, 0xfd, 0xdb, 0x0f, 0x94, 0x1b, 0x38, 0xc9, 0xfe, 0xf1, 0xf8, 0x78, 0xcf, 0x6a, 0x5f, 0x5e, 0x5f, 0x5f, 0x37, 0xaf, 0xaf, 0x7f, 0xa4, 0x72, 0x83, 0xb9, 0x5e, 0xae, 0x56, 0x02, 0x88, 0x21, 0xfd, 0x36, 0xe2, 0x09, 0x0c, 0x7d, 0x9e, 0xb0, 0x30, 0x80, 0x76, 0x20, 0xec, 0x1a, 0x6c, 0x67, 0x0e, 0x4e, 0x27, 0xc0, 0xf6, 0xd7, 0xa5, 0x69, 0x6b, 0x15, 0x1b, 0x90, 0xb3, 0x75, 0xd7, 0x74, 0x49, 0xbe, 0xd6, 0xd6, 0xd6, 0x5d, 0x55, 0x74, 0x85, 0xa4, 0xba, 0x05, 0x3a, 0xab, 0x84, 0x69, 0x74, 0x55, 0xd3, 0xd5, 0x79, 0x97, 0x67, 0x65, 0xae, 0xd4, 0x05, 0xd6, 0x22, 0x33, 0x67, 0x0f, 0x6f, 0x5c, 0x52, 0x2c, 0x29, 0x95, 0xb2, 0x93, 0x24, 0xfa, 0x6f, 0xee, 0xb1, 0xeb, 0xdf, 0xbc, 0xb7, 0x61, 0xa9, 0x5c, 0xa1, 0x79, 0xf3, 0xaa, 0x7d, 0xfd, 0xda, 0x89, 0xfe, 0xe8, 0x60, 0xc4, 0xce, 0x6c, 0x51, 0xd6, 0x6e, 0xcb, 0xc2, 0xb4, 0x0b, 0x4a, 0x1f, 0xc3, 0x43, 0x01, 0x90, 0xb8, 0xfd, 0xda, 0xca, 0x1b, 0x97, 0xe5, 0x4a, 0xb2, 0xa8, 0xec, 0xa2, 0xa6, 0xba, 0x45, 0xf7, 0xb2, 0xa8, 0x4b, 0xed, 0x5e, 0x15, 0x40, 0x57, 0x45, 0x69, 0xcb, 0xa2, 0x11, 0xe0, 0x14, 0x36, 0xb7, 0x65, 0x46, 0x40, 0x45, 0x2b, 0x21, 0xe1, 0xc0, 0x58, 0x2c, 0x6f, 0x8b, 0x7e, 0x79, 0x14, 0xfd, 0x23, 0xf9, 0x8d, 0xaf, 0xde, 0xb7, 0xec, 0xdf, 0xdc, 0x63, 0xd9, 0x9f, 0x58, 0x84, 0xf7, 0x0d, 0xfb, 0x61, 0xe0, 0x79, 0x86, 0x2d, 0x48, 0x54, 0x79, 0xad, 0xd6, 0xc2, 0xb1, 0x8a, 0xc9, 0xaa, 0x23, 0xc0, 0xcf, 0x66, 0xd1, 0x34, 0x72, 0x5d, 0x2f, 0x01, 0xba, 0x6b, 0x8d, 0x2f, 0x56, 0x34, 0x32, 0x6f, 0x24, 0x58, 0x45, 0x8b, 0x58, 0x9c, 0x68, 0xc5, 0x01, 0x3e, 0x13, 0x5e, 0xe4, 0x85, 0xcc, 0x12, 0x77, 0xc6, 0x0f, 0x58, 0x9a, 0x01, 0x9e, 0xda, 0x94, 0x76, 0x79, 0xba, 0x00, 0xd4, 0x46, 0xa4, 0x63, 0xf2, 0x83, 0x2c, 0xde, 0x4d, 0x05, 0x12, 0xa9, 0xf7, 0x27, 0x1f, 0xc7, 0x5b, 0xb7, 0xab, 0x92, 0x28, 0x85, 0x47, 0x47, 0x6c, 0x24, 0xfb, 0x63, 0xed, 0xdb, 0x0f, 0xce, 0x0c, 0xd5, 0x1d, 0x58, 0xb1, 0xc2, 0x86, 0xc4, 0x06, 0x94, 0x46, 0x2d, 0x32, 0x9b, 0x2f, 0x59, 0x4e, 0x69, 0x4b, 0xec, 0x4e, 0x49, 0x7b, 0xb3, 0x4c, 0xd2, 0x44, 0x1a, 0xd0, 0xdc, 0x30, 0x04, 0x0e, 0x07, 0xcb, 0x2a, 0xf0, 0x4d, 0x91, 0x8b, 0xaa, 0xf2, 0x05, 0x61, 0x10, 0x9e, 0x19, 0xb9, 0xb4, 0x95, 0x29, 0x08, 0x80, 0x01, 0x7c, 0x15, 0xc5, 0x02, 0x42, 0xa7, 0x62, 0x19, 0xcb, 0x48, 0x9c, 0xdf, 0x56, 0x73, 0x4b, 0x6a, 0xbe, 0xfa, 0xe5, 0x87, 0x4a, 0xbe, 0xb8, 0xad, 0xe4, 0x0f, 0x97, 0xe2, 0x9d, 0xa5, 0xbf, 0x57, 0xa0, 0x45, 0xb5, 0xa7, 0xed, 0xe5, 0xd5, 0xeb, 0xcb, 0xab, 0x97, 0xa7, 0x2e, 0x05, 0x5c, 0x59, 0x5d, 0xc7, 0x14, 0xa3, 0x11, 0x82, 0x89, 0x5e, 0x1c, 0x13, 0x02, 0x74, 0x5c, 0x0e, 0x6b, 0x9e, 0x22, 0xb4, 0x56, 0x64, 0xdc, 0x39, 0x15, 0xe6, 0x96, 0x9d, 0xd3, 0x38, 0x48, 0x25, 0xc0, 0x67, 0xd1, 0xd6, 0x89, 0xc2, 0x4a, 0xe6, 0x65, 0x1e, 0x1b, 0xa6, 0x6d, 0xa9, 0xb3, 0xaa, 0x6c, 0x4d, 0x59, 0xd8, 0xc4, 0xea, 0x48, 0x20, 0x4c, 0xb1, 0xf4, 0x4e, 0x5e, 0xe0, 0xbe, 0xa5, 0x78, 0xff, 0xbc, 0xe5, 0x96, 0xbd, 0xff, 0xf1, 0x3d, 0xf6, 0xfe, 0x89, 0xa5, 0x78, 0xf4, 0x89, 0xf2, 0x08, 0x04, 0x8e, 0x07, 0xe1, 0x6f, 0x07, 0xc0, 0xd7, 0xae, 0xec, 0xca, 0x71, 0xe6, 0xd6, 0xa8, 0x86, 0x0e, 0x61, 0x74, 0xaa, 0x94, 0x56, 0xaa, 0x35, 0x54, 0x9e, 0xad, 0x73, 0xf8, 0x79, 0x92, 0xdb, 0x82, 0x81, 0x82, 0x65, 0x35, 0x91, 0xae, 0xe0, 0xbe, 0x33, 0x00, 0x6e, 0x43, 0x35, 0x3a, 0x84, 0xe2, 0x32, 0xbb, 0x06, 0x08, 0xb7, 0xc2, 0x4a, 0xcd, 0xe2, 0x17, 0x2c, 0x8d, 0xee, 0xcd, 0x0b, 0xfc, 0xc9, 0xef, 0x7c, 0x48, 0x1e, 0x3f, 0xec, 0x5c, 0x68, 0x5f, 0xbd, 0x7c, 0x79, 0x75, 0xd9, 0x75, 0xb3, 0xfe, 0xd1, 0x5b, 0xf9, 0xcc, 0x4e, 0x79, 0x01, 0x77, 0x10, 0xb8, 0x6a, 0xa6, 0x64, 0xcf, 0x4d, 0x1e, 0x8f, 0x52, 0x40, 0x13, 0x95, 0x64, 0xc7, 0x82, 0x4b, 0x77, 0x62, 0x8c, 0xd8, 0xd5, 0x19, 0x70, 0x2d, 0xc9, 0xac, 0x92, 0xe4, 0xaf, 0x74, 0x99, 0x65, 0x12, 0x0c, 0x23, 0xa6, 0xf0, 0x0c, 0x76, 0xd1, 0x66, 0xd2, 0x70, 0xfc, 0x6c, 0xc5, 0xa5, 0x48, 0x44, 0x72, 0xc7, 0x9c, 0xbf, 0xf9, 0xe2, 0x96, 0x64, 0xce, 0x7c, 0xff, 0xe2, 0x73, 0x24, 0xfb, 0x77, 0x47, 0xf3, 0xa5, 0x43, 0xf3, 0xc7, 0xba, 0x6b, 0xb6, 0x3b, 0xcb, 0xe0, 0xad, 0xa8, 0x16, 0xa8, 0x72, 0xd5, 0x6e, 0x94, 0xda, 0x59, 0xbb, 0xc4, 0x40, 0x52, 0xd7, 0x76, 0xca, 0xe7, 0x4d, 0xb5, 0x32, 0xed, 0x74, 0xa6, 0xe0, 0x32, 0x3b, 0x44, 0xab, 0x8a, 0x82, 0xd0, 0x08, 0xa5, 0x72, 0x28, 0xcb, 0x95, 0x4b, 0xca, 0x0a, 0xd4, 0xa4, 0xb7, 0x1c, 0x10, 0xac, 0x86, 0xf5, 0x02, 0x8b, 0x27, 0xb1, 0x88, 0x45, 0x7a, 0x9b, 0x44, 0x5e, 0x36, 0x47, 0xf3, 0xbd, 0x67, 0x2f, 0xbf, 0x6b, 0x52, 0x81, 0x01, 0xff, 0xfc, 0xd6, 0x62, 0xf8, 0x6e, 0x31, 0xfe, 0xab, 0x8f, 0xd5, 0x91, 0xdf, 0x6a, 0x50, 0x39, 0x71, 0x2d, 0x2c, 0x01, 0xce, 0x63, 0x92, 0xa4, 0x98, 0x92, 0x24, 0x93, 0xf8, 0x59, 0x5d, 0xdf, 0x60, 0x6d, 0x4a, 0xee, 0x19, 0xca, 0xe7, 0x19, 0x50, 0xea, 0x8e, 0x72, 0x9b, 0x4d, 0x4b, 0x80, 0xac, 0xc8, 0xeb, 0x58, 0x02, 0x6b, 0xd3, 0x61, 0xa3, 0x5c, 0x22, 0x52, 0x2d, 0x55, 0xa5, 0xc0, 0xaf, 0x0a, 0x1b, 0xcd, 0x85, 0x01, 0x1a, 0xe0, 0x6a, 0x09, 0x54, 0xf2, 0x99, 0x6b, 0x71, 0x71, 0x7b, 0x2d, 0x1e, 0x63, 0xf2, 0xa0, 0x53, 0x57, 0xaf, 0xa8, 0xaf, 0xe2, 0xf5, 0xec, 0xb3, 0xd3, 0x24, 0x6f, 0x33, 0x7d, 0x60, 0x1c, 0x89, 0x3b, 0xf0, 0xa4, 0xf2, 0xd9, 0x6c, 0x02, 0xa7, 0x60, 0x0d, 0x7a, 0x95, 0x9a, 0x44, 0x26, 0x4a, 0x24, 0xab, 0x38, 0x4a, 0x13, 0x6d, 0x0c, 0x2b, 0x94, 0x86, 0x21, 0xc7, 0xa9, 0x2c, 0x45, 0x29, 0xb8, 0x8c, 0xb2, 0x15, 0x5b, 0x0a, 0x09, 0x50, 0xbd, 0x8a, 0x10, 0xa5, 0xac, 0x8c, 0x17, 0xae, 0x38, 0x3b, 0x4a, 0x17, 0x4b, 0xae, 0xc1, 0x36, 0xd9, 0x19, 0xbf, 0x80, 0xf4, 0x4b, 0x76, 0x37, 0x5f, 0xf2, 0x18, 0x93, 0xbf, 0x25, 0xd9, 0x89, 0x6a, 0x66, 0x80, 0xfe, 0x6a, 0x2d, 0xd7, 0xd4, 0x4d, 0x41, 0x15, 0x0e, 0x5a, 0x92, 0xc9, 0x83, 0x17, 0x69, 0xc9, 0x00, 0x2f, 0x95, 0x55, 0xcd, 0x84, 0x4f, 0x64, 0x5d, 0x97, 0xb4, 0x06, 0x6d, 0x5d, 0x96, 0x79, 0xae, 0xa8, 0x0f, 0x4d, 0xb4, 0xc2, 0x2b, 0xca, 0xa8, 0x2c, 0xdb, 0x4a, 0xd6, 0xb6, 0xc2, 0xbf, 0x67, 0xb0, 0x7f, 0xc4, 0x2e, 0x9b, 0x2a, 0xc6, 0x53, 0x09, 0x7c, 0x12, 0x0b, 0xf6, 0xe2, 0x61, 0x35, 0x5f, 0x7d, 0x86, 0xc9, 0x7f, 0x4a, 0xcd, 0x6f, 0x5e, 0xbf, 0x79, 0xf5, 0xe6, 0xba, 0xf9, 0x2d, 0x98, 0x7c, 0x7d, 0x63, 0xf2, 0x54, 0xec, 0xf2, 0xd6, 0xe4, 0x6f, 0x65, 0x4e, 0x5a, 0x36, 0xd5, 0x03, 0x90, 0xef, 0xb3, 0x9d, 0x23, 0x2b, 0xe5, 0xb1, 0x7f, 0x02, 0x58, 0xbc, 0x29, 0xcb, 0xae, 0xb2, 0x85, 0xcd, 0x4a, 0xd1, 0x18, 0xca, 0x25, 0x18, 0x5a, 0x0b, 0x9d, 0xd1, 0x19, 0xac, 0x64, 0x92, 0x27, 0x3f, 0x66, 0x2d, 0xfe, 0xea, 0x96, 0xdc, 0xef, 0xb3, 0xcc, 0x8f, 0xaf, 0xc5, 0x07, 0x44, 0xe4, 0x61, 0x27, 0xef, 0x88, 0x08, 0x3c, 0xa0, 0xaa, 0x95, 0x8b, 0x5f, 0x37, 0x80, 0xed, 0x98, 0x06, 0x2e, 0xb2, 0xa9, 0x22, 0xa8, 0x9e, 0x42, 0x9a, 0x73, 0xf2, 0x25, 0xf1, 0x6c, 0xc4, 0x2f, 0xc2, 0x40, 0xba, 0x50, 0x74, 0x06, 0x57, 0x65, 0xb2, 0x55, 0x0a, 0xa6, 0xc3, 0x32, 0xe0, 0x99, 0x1c, 0x4e, 0xd0, 0xc2, 0xaa, 0xb0, 0x11, 0x38, 0xfc, 0xfc, 0x03, 0x16, 0xff, 0x51, 0x25, 0x53, 0x60, 0xbe, 0xbc, 0x02, 0x0e, 0xbd, 0x3a, 0x59, 0xcb, 0x19, 0x69, 0xb9, 0x39, 0x6a, 0xf9, 0x36, 0x44, 0x21, 0xb9, 0x3a, 0xe7, 0xd8, 0xca, 0x63, 0xd5, 0x87, 0x6c, 0x5b, 0x55, 0x52, 0xaa, 0xbb, 0xad, 0x8b, 0xd6, 0xd2, 0xab, 0xaa, 0x36, 0x19, 0x95, 0x94, 0xd2, 0x5f, 0xac, 0xc8, 0x31, 0x60, 0xdf, 0xb4, 0x56, 0xb7, 0x35, 0x02, 0xbb, 0xc4, 0x56, 0x87, 0xd4, 0xf1, 0x67, 0x68, 0xf9, 0x1d, 0x4a, 0xf9, 0x84, 0x63, 0xfb, 0xa8, 0x96, 0x6f, 0x2f, 0xc6, 0xa3, 0xaa, 0x41, 0x1c, 0x62, 0xa1, 0x54, 0x8a, 0xa4, 0x43, 0xe2, 0x9a, 0x6a, 0x38, 0xde, 0x69, 0x38, 0xbb, 0x95, 0x11, 0x3e, 0x6a, 0x98, 0xfe, 0x74, 0xba, 0x2d, 0x62, 0x5d, 0x6a, 0xd2, 0xb0, 0xa2, 0x7c, 0x99, 0x6a, 0x2b, 0xc2, 0xe1, 0xc4, 0x4b, 0x2c, 0x08, 0x0b, 0xad, 0x00, 0xd5, 0x14, 0xeb, 0xc4, 0x64, 0x8c, 0x8a, 0x04, 0x45, 0x1a, 0xa5, 0x77, 0x24, 0xbd, 0x51, 0xf3, 0x9f, 0xde, 0xa3, 0xe6, 0x3f, 0xfd, 0x30, 0x96, 0x5f, 0xbe, 0xbc, 0xec, 0x5e, 0x23, 0x96, 0xff, 0xdb, 0xa3, 0x9a, 0xff, 0x0c, 0x5f, 0x8f, 0x46, 0xa2, 0xfb, 0xb3, 0xbc, 0x28, 0xcd, 0x4d, 0x8e, 0xbf, 0x38, 0x86, 0x2f, 0x73, 0x6c, 0x77, 0x38, 0xf2, 0xae, 0x46, 0xbb, 0x50, 0x9e, 0x4d, 0xf9, 0xd0, 0x29, 0xaa, 0x59, 0xf7, 0xaa, 0x8e, 0xac, 0xa5, 0x3a, 0x89, 0xc2, 0x8a, 0x2c, 0x23, 0x95, 0x97, 0xf8, 0x89, 0xce, 0x8b, 0x94, 0x4e, 0xec, 0xa8, 0xdd, 0x4e, 0x62, 0x2f, 0xdf, 0x56, 0xf3, 0xcb, 0x37, 0x37, 0x6a, 0x6e, 0x3f, 0x1d, 0xcb, 0xff, 0xfa, 0x96, 0xe0, 0xef, 0xab, 0xf9, 0x13, 0x8b, 0xf1, 0xc8, 0x13, 0x2a, 0xbb, 0x09, 0x68, 0x01, 0xe8, 0x90, 0x4a, 0x29, 0x2a, 0xd6, 0xa9, 0x1b, 0x4b, 0x46, 0xef, 0xea, 0x96, 0x48, 0xcd, 0x60, 0x93, 0x54, 0xed, 0x4b, 0x87, 0x57, 0xb4, 0x02, 0xd8, 0xc2, 0x5a, 0x51, 0x1f, 0x5d, 0x9d, 0xe3, 0x67, 0x74, 0xe2, 0xde, 0x12, 0x1d, 0x37, 0xb6, 0xa5, 0xa2, 0xf0, 0xb2, 0x32, 0x75, 0x89, 0xd8, 0x0e, 0xea, 0xcd, 0x01, 0x0a, 0x8a, 0x18, 0xfe, 0x8c, 0x4b, 0xa0, 0xf1, 0x7b, 0x21, 0xdb, 0xe7, 0xa9, 0xb9, 0x6b, 0x5f, 0x5e, 0x23, 0x82, 0xbd, 0xf9, 0x2d, 0xa8, 0xb9, 0xaa, 0x23, 0xd2, 0x6c, 0x2d, 0x8b, 0x77, 0x28, 0x45, 0x8a, 0x5b, 0x6a, 0x76, 0xdd, 0x80, 0xae, 0xf8, 0x5b, 0xb5, 0x50, 0x64, 0xab, 0x64, 0xab, 0xa1, 0x67, 0xf0, 0x0d, 0x4e, 0xfd, 0xc5, 0x65, 0x53, 0x94, 0x22, 0x86, 0xae, 0x35, 0xdc, 0x77, 0x21, 0x74, 0x5e, 0x1b, 0x69, 0x0a, 0xec, 0x67, 0x40, 0x57, 0x7d, 0xc1, 0xd8, 0x3f, 0xbd, 0x9a, 0xdf, 0x2e, 0xc6, 0xc7, 0x76, 0xf3, 0xe1, 0xc1, 0xdd, 0x6c, 0xd7, 0xf9, 0xb4, 0x9b, 0xad, 0xab, 0xda, 0x03, 0xe2, 0x6c, 0xf2, 0x5a, 0x12, 0x34, 0x6d, 0xea, 0x3c, 0xb7, 0x70, 0x65, 0x44, 0x37, 0xc0, 0x28, 0x65, 0xc1, 0x74, 0xc1, 0x64, 0xaa, 0x65, 0x6a, 0x22, 0xf8, 0x6b, 0xf0, 0x2c, 0x01, 0x86, 0x25, 0x4a, 0x30, 0x0f, 0x09, 0xc2, 0xc1, 0x4d, 0xa1, 0x11, 0xfc, 0xfd, 0x17, 0xe9, 0xfc, 0x3c, 0x3d, 0x8f, 0xef, 0xee, 0x66, 0x48, 0xfa, 0xc5, 0x07, 0x6a, 0xfe, 0xea, 0x63, 0xd9, 0x23, 0xca, 0x8b, 0xbd, 0x6c, 0xaf, 0xae, 0xba, 0x57, 0xcd, 0xa9, 0x6a, 0x86, 0x96, 0xcb, 0x75, 0xdd, 0x55, 0x6b, 0xaa, 0x7c, 0xe9, 0x1a, 0x4d, 0x9d, 0x4a, 0x5d, 0xd3, 0x75, 0xa5, 0xeb, 0x54, 0xea, 0x9a, 0x75, 0x67, 0x5d, 0xe5, 0x6a, 0xb1, 0x5e, 0x13, 0xa7, 0xec, 0x1a, 0xd3, 0x76, 0x59, 0x53, 0x55, 0x5d, 0xd7, 0x65, 0x79, 0x75, 0x21, 0x4d, 0x03, 0x5e, 0xa9, 0x4c, 0xc2, 0xf3, 0x75, 0x6e, 0x38, 0x2f, 0x0a, 0x0e, 0xd7, 0x9d, 0xaa, 0x39, 0x76, 0x32, 0xbb, 0x48, 0x2f, 0xa2, 0x8b, 0x38, 0x7e, 0x50, 0xcd, 0x70, 0x65, 0xa4, 0xe2, 0x1b, 0xf5, 0xee, 0xf1, 0xf5, 0xdf, 0xfd, 0x8f, 0x5f, 0x42, 0xbd, 0xbf, 0xff, 0x16, 0x85, 0xde, 0x7c, 0xf6, 0x3e, 0x56, 0xbb, 0xec, 0xda, 0xee, 0xcd, 0x9b, 0xd9, 0x30, 0xda, 0x9d, 0x07, 0xa5, 0xed, 0x99, 0xdc, 0xb0, 0x80, 0x8d, 0x6c, 0x03, 0x78, 0x78, 0xd8, 0x06, 0xee, 0xf3, 0xd1, 0x86, 0xfb, 0xcd, 0x6e, 0xb3, 0xf1, 0x98, 0x65, 0x1b, 0x9f, 0x07, 0x8c, 0x3e, 0xa7, 0x53, 0xbb, 0xf5, 0x94, 0xf3, 0x26, 0x41, 0xdd, 0x39, 0xa5, 0x33, 0xf6, 0xf6, 0x06, 0x97, 0x34, 0x45, 0x4d, 0x23, 0x01, 0x8c, 0x69, 0x78, 0x9b, 0x29, 0x68, 0x1f, 0x21, 0x97, 0x6a, 0x50, 0x81, 0xca, 0x3b, 0x43, 0x29, 0x25, 0xbc, 0xcb, 0x99, 0x95, 0x2a, 0xd7, 0x85, 0xa1, 0x43, 0x76, 0x55, 0xe9, 0x95, 0x11, 0x86, 0x10, 0x9e, 0x94, 0x29, 0xbf, 0x43, 0xbc, 0xae, 0x66, 0x7f, 0x7f, 0x5b, 0x32, 0xf5, 0xfb, 0x6f, 0x4f, 0xed, 0x1e, 0x90, 0x8c, 0x32, 0x64, 0x07, 0xb6, 0xd9, 0xfa, 0x83, 0xdd, 0xf6, 0xc3, 0xde, 0xfa, 0xe1, 0x3e, 0xdc, 0xf3, 0x91, 0xb1, 0x7e, 0x17, 0xe2, 0x73, 0x9f, 0x3e, 0x1f, 0x76, 0xa3, 0xdd, 0xec, 0xf7, 0xa3, 0xe5, 0x16, 0x9f, 0x6f, 0xf0, 0x39, 0xd5, 0x11, 0x10, 0xe1, 0xaa, 0xa9, 0x09, 0xa3, 0x71, 0x90, 0xc3, 0x95, 0x6e, 0xc1, 0xd7, 0xd4, 0xda, 0xe5, 0xcd, 0x9c, 0x53, 0x76, 0x07, 0x58, 0xd4, 0xbb, 0xe6, 0x60, 0x97, 0xdb, 0xe2, 0x65, 0xeb, 0xc2, 0x32, 0x38, 0x64, 0x56, 0xaa, 0xaa, 0x92, 0x6d, 0xd9, 0x66, 0xa6, 0x36, 0x74, 0x90, 0x03, 0x35, 0x83, 0x7b, 0x68, 0x77, 0x5e, 0x05, 0xc8, 0x71, 0x4b, 0xad, 0x6f, 0xae, 0x7f, 0xf7, 0xfe, 0x03, 0xbb, 0x2f, 0x6e, 0xb6, 0xed, 0xff, 0x7e, 0xcb, 0x90, 0xbd, 0xd9, 0xfe, 0xad, 0x5e, 0xef, 0x4b, 0x8d, 0x5e, 0x52, 0x57, 0x44, 0x73, 0xf9, 0x7a, 0x86, 0xed, 0xc8, 0x7a, 0xe6, 0xf5, 0xe1, 0x6e, 0x1c, 0x7b, 0x36, 0xf4, 0xde, 0xae, 0x1f, 0x0f, 0xd6, 0xb3, 0x9c, 0xed, 0x83, 0x8d, 0xe7, 0x1e, 0x50, 0xab, 0xbf, 0xf3, 0x36, 0xdb, 0xdd, 0x01, 0x5a, 0xdd, 0x04, 0x4f, 0x96, 0x30, 0x39, 0x50, 0x21, 0x96, 0xce, 0xd3, 0x17, 0x2f, 0x56, 0xab, 0x20, 0x8a, 0x00, 0x95, 0x7f, 0x2e, 0xc4, 0xea, 0x69, 0xca, 0x97, 0x72, 0x75, 0xae, 0x64, 0xaa, 0x5e, 0x78, 0x88, 0xa6, 0xab, 0x95, 0x08, 0xbf, 0x55, 0xab, 0x48, 0xd9, 0x24, 0x79, 0xc2, 0x7c, 0xec, 0x0e, 0x2a, 0xe8, 0x8b, 0x95, 0x4a, 0x54, 0x9c, 0x46, 0xdf, 0x09, 0xa3, 0xbe, 0x8e, 0xa3, 0x2f, 0xef, 0x7b, 0xfc, 0xea, 0x87, 0x1f, 0xfe, 0xd5, 0x9d, 0x8d, 0xfb, 0xa1, 0x6c, 0x7f, 0xf1, 0xb0, 0x6c, 0xdc, 0x8e, 0xee, 0x01, 0x64, 0xb5, 0xdb, 0xed, 0xfb, 0x9d, 0xe7, 0xf9, 0x76, 0xf4, 0xc7, 0x3d, 0xbe, 0xf3, 0x31, 0x1c, 0xa1, 0x64, 0xc6, 0x36, 0x1e, 0x64, 0xf3, 0xb6, 0x5b, 0x29, 0xfb, 0xdd, 0xc6, 0x3b, 0xbb, 0x78, 0xfe, 0x6d, 0x7c, 0x11, 0xfb, 0x4f, 0x9e, 0x7f, 0x15, 0x06, 0x2f, 0xbe, 0x3f, 0x7f, 0xb6, 0x7c, 0xbe, 0xba, 0xf8, 0x7e, 0xbe, 0x7a, 0xfe, 0xfd, 0x17, 0xcf, 0xc2, 0x8b, 0x6f, 0x7f, 0xb2, 0x5c, 0xac, 0xbe, 0x63, 0x17, 0x3c, 0x5a, 0x3d, 0xfb, 0x6e, 0x71, 0xef, 0x2f, 0xfe, 0x19, 0x0f, 0xc8, 0x56, 0xdd, 0x91, 0xed, 0xff, 0xb8, 0x25, 0xc7, 0x73, 0x27, 0xdb, 0x47, 0x9d, 0xd2, 0x8d, 0x6c, 0x6f, 0xb0, 0x9d, 0xfb, 0xcd, 0x6e, 0xd2, 0x8f, 0xcf, 0x76, 0x78, 0x15, 0xf6, 0xf4, 0x92, 0x42, 0x1b, 0xe0, 0xf2, 0x28, 0xc7, 0x11, 0x2e, 0x78, 0xdc, 0x1d, 0x0e, 0x78, 0xb7, 0xc1, 0x1b, 0x8b, 0xb5, 0x38, 0x03, 0xb4, 0x2f, 0xd6, 0x94, 0x1d, 0xa8, 0x26, 0xa3, 0x6c, 0x82, 0x8b, 0x9f, 0x3e, 0x7d, 0x72, 0x11, 0xfe, 0x74, 0xce, 0x79, 0xf2, 0xc2, 0xff, 0xe6, 0xc5, 0xc5, 0xf3, 0x1f, 0x2d, 0xd6, 0x3b, 0xe9, 0xf4, 0x03, 0x9a, 0x7b, 0xc8, 0x2a, 0x01, 0x0c, 0xe5, 0xfe, 0x10, 0xb0, 0x9d, 0x37, 0xf0, 0xcd, 0xe6, 0xe0, 0x4c, 0x6f, 0x24, 0xd3, 0x0b, 0xb7, 0x32, 0xf0, 0x65, 0x68, 0x65, 0x3f, 0xf0, 0xbd, 0x3d, 0x0c, 0x76, 0x20, 0x91, 0xbd, 0x31, 0xf4, 0x87, 0xed, 0x59, 0x5a, 0x16, 0x95, 0xab, 0x61, 0x01, 0x0e, 0xa8, 0x5c, 0x13, 0xb0, 0x43, 0xfb, 0xe6, 0x78, 0x1a, 0x61, 0xda, 0xd4, 0x9d, 0x34, 0xc1, 0xe5, 0xd0, 0x69, 0x04, 0x76, 0x22, 0x68, 0xbf, 0xb4, 0x31, 0x17, 0xcf, 0x8d, 0x8c, 0x6c, 0x22, 0xad, 0x50, 0x2b, 0xbc, 0x60, 0xa1, 0x5d, 0xc5, 0x8a, 0x7d, 0x4c, 0xb6, 0x53, 0xad, 0x92, 0x64, 0xdb, 0x86, 0x07, 0xf8, 0x13, 0x6f, 0x92, 0x6d, 0xb7, 0xdd, 0xc9, 0x5d, 0x0f, 0x05, 0x6e, 0x76, 0xbb, 0x00, 0xa2, 0xed, 0x76, 0xb0, 0xc5, 0xfe, 0xe0, 0xb4, 0xe9, 0x79, 0x41, 0x10, 0xec, 0xc3, 0xed, 0xd9, 0x89, 0x3a, 0xf9, 0x4c, 0xbd, 0x89, 0x3b, 0xb2, 0xfd, 0xaf, 0x8f, 0xd7, 0xdb, 0xf5, 0xac, 0xef, 0xfd, 0x9e, 0x1e, 0x61, 0xdf, 0xc3, 0x9d, 0xf4, 0x8c, 0xde, 0x6f, 0x7a, 0x0f, 0x7e, 0x25, 0x3c, 0xe0, 0xdd, 0x38, 0x32, 0x7c, 0x1a, 0xfa, 0xfb, 0x00, 0x4a, 0x43, 0x8c, 0x84, 0xfc, 0x4f, 0xe1, 0xe6, 0xc2, 0x35, 0xd1, 0xb5, 0xb5, 0xa9, 0xb9, 0xe3, 0x36, 0xb7, 0x1f, 0xad, 0x3b, 0x81, 0xa0, 0x53, 0xc2, 0x86, 0xce, 0x1c, 0x08, 0x1f, 0x51, 0x63, 0x4b, 0x41, 0x48, 0x58, 0xb9, 0xbf, 0x01, 0x7d, 0x0b, 0x2a, 0x88, 0x29, 0x00, 0xea, 0xf5, 0x32, 0xab, 0x5b, 0x96, 0xd5, 0x59, 0x0d, 0x6c, 0x50, 0x19, 0x25, 0x84, 0x3e, 0x57, 0x22, 0x7d, 0x40, 0xae, 0x07, 0x75, 0x46, 0x72, 0x91, 0x00, 0xb2, 0x1f, 0x43, 0xec, 0x26, 0x2f, 0x0c, 0x49, 0x00, 0x44, 0x89, 0x31, 0xb4, 0x01, 0x04, 0xd9, 0x87, 0xd8, 0x7e, 0x21, 0x89, 0x14, 0x86, 0x78, 0xef, 0xe4, 0x3a, 0x93, 0x00, 0x77, 0xc0, 0xb0, 0xb0, 0xc9, 0x6a, 0xad, 0x29, 0x21, 0x67, 0xd7, 0xb6, 0xc9, 0x29, 0x21, 0x03, 0x6c, 0x43, 0x31, 0x62, 0x3d, 0x91, 0x52, 0x48, 0x93, 0x4f, 0xb5, 0x0e, 0x9d, 0x43, 0x80, 0xf4, 0xca, 0x1e, 0xa9, 0x0c, 0xf0, 0xc2, 0x54, 0xf6, 0x32, 0x85, 0x93, 0xc2, 0xfa, 0x90, 0x0b, 0x74, 0xb5, 0x14, 0xf9, 0x22, 0xcf, 0xf8, 0x89, 0x5e, 0xe4, 0xcd, 0x15, 0x40, 0xdb, 0x7e, 0xdb, 0x1f, 0x60, 0x68, 0x9b, 0x70, 0x13, 0xf6, 0x41, 0xe8, 0xd9, 0xd0, 0x3f, 0x04, 0xfb, 0x2d, 0x1f, 0xed, 0x10, 0xc0, 0x04, 0xdd, 0x17, 0x5e, 0xb2, 0x71, 0xb3, 0xf5, 0x58, 0xe0, 0x0f, 0x5e, 0x70, 0x00, 0x07, 0x5d, 0x57, 0x65, 0x4d, 0x73, 0x6b, 0x24, 0x45, 0x75, 0xe0, 0xa4, 0x75, 0x71, 0xe4, 0x9f, 0xa0, 0x54, 0x1d, 0x9d, 0x6d, 0x03, 0xc4, 0x50, 0x60, 0xc7, 0xb7, 0x36, 0xa3, 0x57, 0xa0, 0x61, 0x94, 0x19, 0x2e, 0x1a, 0xbd, 0xd6, 0xa6, 0xa1, 0x6a, 0xd7, 0x5c, 0xf3, 0x22, 0x59, 0xe5, 0xd0, 0x51, 0xb1, 0x8a, 0x80, 0xe3, 0x20, 0xd7, 0xf2, 0x8e, 0x35, 0xfe, 0x67, 0xa7, 0x59, 0x63, 0x7b, 0xd5, 0xcd, 0x18, 0xc8, 0x34, 0x1f, 0x09, 0x6f, 0xb2, 0x31, 0x04, 0x60, 0x01, 0x7c, 0x19, 0xc2, 0x2d, 0xdb, 0x8d, 0x9b, 0x91, 0xfb, 0xc3, 0xc6, 0x6e, 0x47, 0x1e, 0xb2, 0x61, 0x83, 0x3d, 0xe8, 0x8d, 0xbd, 0x73, 0x34, 0x40, 0x2c, 0x25, 0x15, 0x43, 0xba, 0xec, 0x77, 0x39, 0x1d, 0x50, 0x5b, 0x67, 0x83, 0x72, 0xea, 0x29, 0xa4, 0x72, 0x48, 0x7a, 0xca, 0x93, 0x26, 0xa7, 0x2a, 0xb2, 0xba, 0x8c, 0x9e, 0xbb, 0xcc, 0x43, 0xa7, 0xab, 0xb8, 0xae, 0x4a, 0x2a, 0x3d, 0x69, 0x0a, 0x51, 0xe7, 0x49, 0x2e, 0x28, 0x01, 0x4e, 0xf5, 0x38, 0xd4, 0xe5, 0xcd, 0x13, 0x25, 0xc5, 0x42, 0x71, 0xc6, 0xd9, 0x69, 0xd6, 0x48, 0x72, 0x79, 0xe1, 0x80, 0xd0, 0xc6, 0x43, 0xe0, 0xcb, 0x80, 0xed, 0x79, 0x30, 0x6c, 0x42, 0xe6, 0xdb, 0x1d, 0x3b, 0x04, 0xf0, 0x2c, 0xd0, 0x64, 0x1f, 0xee, 0x29, 0x5b, 0x10, 0xec, 0x01, 0x66, 0x26, 0x07, 0x7a, 0x56, 0x4c, 0x47, 0xf0, 0x96, 0xba, 0x45, 0x5d, 0x29, 0x02, 0x94, 0x24, 0x73, 0x77, 0xf0, 0x0e, 0xca, 0x94, 0x89, 0x3c, 0xd7, 0x4b, 0xc6, 0x54, 0x91, 0xb5, 0x45, 0x2e, 0x9b, 0x36, 0x97, 0x30, 0xbf, 0x5c, 0x83, 0x70, 0xb6, 0xc0, 0xe4, 0xd6, 0xd0, 0xf4, 0x05, 0x6b, 0xb3, 0xc4, 0x4d, 0xe4, 0xc8, 0x2d, 0x68, 0x24, 0xe8, 0x74, 0x26, 0x59, 0xa6, 0x41, 0x33, 0xa8, 0xd8, 0x9d, 0xa5, 0x27, 0x5a, 0x63, 0x7b, 0x75, 0x4d, 0x31, 0xcd, 0xb3, 0xa3, 0x17, 0x6c, 0x83, 0x03, 0xa8, 0x20, 0xf9, 0xbf, 0x81, 0xf9, 0x87, 0x31, 0xd8, 0x6f, 0x42, 0xde, 0xef, 0xb7, 0xd0, 0xd8, 0x6e, 0xcb, 0x03, 0xfc, 0x78, 0xb7, 0x81, 0x9f, 0xdc, 0xec, 0x7c, 0x3c, 0x9d, 0x7d, 0x7b, 0xe6, 0x3d, 0xfd, 0xde, 0xff, 0xf9, 0xd3, 0xf3, 0xa5, 0x1f, 0x7e, 0xf3, 0xfd, 0xe2, 0x7b, 0xef, 0xe9, 0x59, 0x1c, 0x3f, 0xf7, 0x2e, 0xe2, 0x74, 0xf5, 0x7d, 0x18, 0x7c, 0xfd, 0x4d, 0xf8, 0xe2, 0xc5, 0xc2, 0xc7, 0x4f, 0xe3, 0xf3, 0xb3, 0xa5, 0xcf, 0xbe, 0x8b, 0x9e, 0x85, 0xf2, 0x59, 0xb0, 0xd4, 0xd9, 0x37, 0x67, 0xf2, 0xdb, 0xf0, 0x67, 0xde, 0x2a, 0xb5, 0x3f, 0x0b, 0x93, 0xc0, 0x9b, 0x2f, 0xbe, 0x78, 0xca, 0x80, 0x5b, 0x9f, 0x87, 0x67, 0x5f, 0x27, 0xcb, 0x94, 0xbd, 0xe7, 0x1b, 0x7f, 0x7d, 0xa2, 0x35, 0xbe, 0x6a, 0x67, 0xbb, 0x3e, 0x08, 0x00, 0x90, 0x37, 0x1b, 0xe8, 0x64, 0x63, 0x03, 0x30, 0xa3, 0x80, 0x1d, 0x7a, 0xb0, 0x61, 0x2f, 0xd8, 0xec, 0xc0, 0x79, 0x3d, 0x3f, 0xf4, 0x64, 0x10, 0x84, 0x72, 0x13, 0x04, 0x53, 0xfc, 0x7b, 0x0a, 0x84, 0x6b, 0xc9, 0x57, 0xd8, 0x86, 0xf8, 0xeb, 0x31, 0x7d, 0xe5, 0xbe, 0xb9, 0x62, 0x91, 0xe9, 0x35, 0xf6, 0x5e, 0x5c, 0xc2, 0xe2, 0x9a, 0x46, 0xd0, 0x19, 0x6c, 0x43, 0xbd, 0x9c, 0x7a, 0xd9, 0xda, 0xaa, 0x30, 0x59, 0xa6, 0xda, 0x45, 0x91, 0x15, 0x4b, 0x5b, 0x66, 0xb6, 0xe1, 0x3a, 0xca, 0x54, 0x9e, 0x69, 0xb1, 0x8c, 0x34, 0x7b, 0x91, 0x2a, 0x4a, 0x72, 0x26, 0x27, 0x5a, 0x23, 0xe4, 0xb2, 0x12, 0x9c, 0x60, 0xb4, 0x87, 0x80, 0x1f, 0x2c, 0x00, 0x07, 0x24, 0x1a, 0x00, 0xf3, 0xb8, 0x0d, 0x0e, 0x87, 0x83, 0x7f, 0x38, 0x8c, 0x87, 0x83, 0xb5, 0x3d, 0x3f, 0xca, 0x75, 0xd8, 0xef, 0x83, 0xdd, 0x19, 0x88, 0x2a, 0x9d, 0x35, 0x91, 0x77, 0x5c, 0x1f, 0x9b, 0x2a, 0xdb, 0xe9, 0x30, 0xc2, 0xd5, 0xf0, 0x91, 0x53, 0x97, 0xb0, 0x42, 0xb0, 0x7d, 0x37, 0x01, 0xa3, 0x66, 0x20, 0xb7, 0x58, 0x84, 0x29, 0xdb, 0xd1, 0x69, 0x2a, 0xd2, 0x85, 0x54, 0xba, 0x54, 0x45, 0x5b, 0x51, 0x23, 0x60, 0x6c, 0x29, 0xe3, 0x61, 0x6d, 0xa4, 0xc4, 0x22, 0x55, 0x32, 0xe6, 0x9c, 0x9f, 0xaa, 0xaf, 0x57, 0x33, 0x36, 0x82, 0xca, 0x78, 0xf6, 0x30, 0x0e, 0x43, 0xb8, 0x87, 0x09, 0x1e, 0x80, 0xa1, 0xd8, 0x66, 0x3f, 0x78, 0xdb, 0xf1, 0xd0, 0x8f, 0x9b, 0x7e, 0xb3, 0x0d, 0xc6, 0x11, 0x10, 0xf9, 0x1d, 0x42, 0x71, 0x7c, 0xc7, 0x55, 0x51, 0xbb, 0x42, 0x08, 0x87, 0xb1, 0xe0, 0x41, 0xdc, 0x53, 0x93, 0x17, 0xb5, 0x1b, 0x50, 0xd2, 0x3a, 0x2f, 0x42, 0x13, 0x9c, 0x08, 0x82, 0xb4, 0x55, 0x5d, 0xe7, 0x70, 0xfc, 0x85, 0xb0, 0x40, 0x25, 0x59, 0x5b, 0xe6, 0xd8, 0x5e, 0x75, 0x5d, 0x96, 0xba, 0x49, 0xaa, 0x25, 0x4f, 0x4d, 0x9c, 0x67, 0x19, 0x08, 0xbd, 0x59, 0x29, 0xc9, 0x85, 0xe4, 0x27, 0xc6, 0x32, 0x92, 0x0b, 0x41, 0xd8, 0x03, 0xa3, 0xb1, 0x21, 0x0b, 0x03, 0x38, 0x77, 0x12, 0x6b, 0x43, 0x62, 0x81, 0xef, 0x80, 0xb3, 0x7a, 0x81, 0x07, 0x65, 0x6e, 0xe0, 0x45, 0x26, 0xb9, 0xf6, 0x72, 0xe8, 0x41, 0xd3, 0x9d, 0xf7, 0x58, 0x4f, 0x4c, 0xa7, 0x71, 0x2d, 0x1b, 0x14, 0xaa, 0x9d, 0x33, 0x74, 0xd2, 0x16, 0xae, 0x8a, 0x47, 0x37, 0x6e, 0x62, 0x41, 0x3d, 0x45, 0x6a, 0x77, 0xbe, 0x44, 0xd9, 0x65, 0xca, 0xc4, 0x18, 0xca, 0x52, 0xda, 0xb6, 0xcc, 0xa0, 0xa7, 0x36, 0xb3, 0x66, 0xa1, 0x35, 0xb5, 0xc2, 0x98, 0x95, 0x8e, 0x16, 0x42, 0xf0, 0x17, 0x77, 0xe4, 0xfa, 0xdf, 0x6e, 0xc9, 0xf0, 0xec, 0xb3, 0xf4, 0xf5, 0x7a, 0x06, 0x27, 0xb8, 0x0b, 0xa6, 0x27, 0x6f, 0x4f, 0x4f, 0x21, 0xf4, 0xd3, 0xef, 0xf7, 0xde, 0xb0, 0xc1, 0xdb, 0xfe, 0xdd, 0x4f, 0xf1, 0xe4, 0xb9, 0xa7, 0x33, 0x4a, 0x3e, 0x40, 0x14, 0xc9, 0x84, 0x52, 0x01, 0x93, 0x4a, 0xc5, 0x74, 0xbe, 0xc9, 0x24, 0x9d, 0xe0, 0x4b, 0x4d, 0x67, 0xdc, 0x42, 0xe5, 0xab, 0xdc, 0xe6, 0x89, 0xc8, 0x35, 0x71, 0x4e, 0xb0, 0xce, 0x44, 0x09, 0x6b, 0x13, 0xc3, 0x96, 0x22, 0x5d, 0x80, 0x98, 0xae, 0x94, 0xca, 0x12, 0x71, 0x1e, 0xb3, 0x38, 0x4a, 0xcf, 0x59, 0x7a, 0x1f, 0xac, 0xfa, 0xe5, 0x1d, 0xd1, 0xfe, 0x97, 0x0f, 0x44, 0x7b, 0x48, 0x65, 0xaf, 0xa1, 0xb1, 0x3d, 0xb6, 0x16, 0xdf, 0x1f, 0xd8, 0x81, 0x8f, 0x87, 0x01, 0x9e, 0xff, 0xc0, 0x2c, 0x3d, 0x85, 0xbe, 0x7f, 0x7c, 0x65, 0x79, 0x7f, 0x60, 0x23, 0xdf, 0x1e, 0x46, 0xf7, 0x53, 0xd2, 0x58, 0x05, 0xf8, 0x03, 0x93, 0x83, 0x84, 0xc9, 0xa4, 0xb0, 0xda, 0x29, 0xab, 0x6e, 0x73, 0x32, 0x44, 0xe3, 0x52, 0x65, 0x34, 0xa2, 0x8e, 0x0a, 0x88, 0x0d, 0x95, 0x93, 0xea, 0xd2, 0xb4, 0xba, 0x70, 0x9b, 0x2c, 0x43, 0x14, 0x93, 0xee, 0x50, 0x25, 0xd6, 0x4a, 0x70, 0xf8, 0x7e, 0x99, 0x2c, 0x74, 0xae, 0x72, 0x01, 0x6e, 0x9a, 0xb8, 0x92, 0x69, 0x79, 0x1a, 0xca, 0xef, 0xda, 0x37, 0xb3, 0x91, 0x1f, 0x02, 0x72, 0xe8, 0x70, 0x86, 0xe3, 0xb0, 0x43, 0x50, 0xa6, 0x08, 0xf6, 0xce, 0xfd, 0x39, 0xf8, 0xcf, 0x37, 0xfd, 0x01, 0x10, 0x58, 0x1e, 0x46, 0x84, 0xeb, 0x2d, 0x25, 0x8c, 0xb2, 0xf5, 0xe4, 0x05, 0xf3, 0x8a, 0x7a, 0x4d, 0xc8, 0x0f, 0x6a, 0x78, 0xbf, 0x3c, 0xc7, 0xa6, 0x52, 0x4d, 0x0c, 0x31, 0x1a, 0xab, 0x98, 0x56, 0x91, 0x21, 0x84, 0xaf, 0x0d, 0xb7, 0x5c, 0x4b, 0xcb, 0xa5, 0xd1, 0x42, 0xd8, 0xd4, 0x98, 0x64, 0x9e, 0xa4, 0x4c, 0xa4, 0xf7, 0xf3, 0xce, 0xa3, 0xca, 0xfe, 0xf9, 0x69, 0xbb, 0x8c, 0x64, 0xdb, 0x0c, 0x40, 0x1b, 0x9c, 0x79, 0xf0, 0x83, 0x16, 0x61, 0xcb, 0x82, 0xac, 0xdd, 0x76, 0x81, 0x40, 0xf6, 0x03, 0x20, 0xc7, 0x61, 0x37, 0xec, 0x25, 0xdf, 0x03, 0x9c, 0x78, 0xde, 0x19, 0xcf, 0x4b, 0xea, 0xa7, 0xa9, 0xd6, 0x13, 0xda, 0xa3, 0x16, 0x05, 0x4b, 0x60, 0x31, 0x6d, 0xda, 0x34, 0xcf, 0x0a, 0xf2, 0x86, 0x5a, 0xe3, 0x9b, 0x6e, 0x4c, 0x02, 0x14, 0xa5, 0x9b, 0x82, 0xd9, 0x86, 0x29, 0xab, 0x56, 0x5a, 0x59, 0xbe, 0xb2, 0x26, 0x36, 0xc2, 0x1a, 0x69, 0xa4, 0x92, 0x78, 0x6d, 0xa5, 0x51, 0x4b, 0x15, 0xa9, 0x74, 0x1e, 0x25, 0x2b, 0xce, 0x59, 0x3c, 0x5f, 0x45, 0x0f, 0x79, 0x8f, 0x87, 0x74, 0xd6, 0xc1, 0x2b, 0x7a, 0x3d, 0xb3, 0xe3, 0x00, 0x00, 0x7c, 0x18, 0xd8, 0x6e, 0xd8, 0xf4, 0xe3, 0xb0, 0xe1, 0xfe, 0x61, 0x08, 0x36, 0xe3, 0x61, 0x0f, 0x2c, 0x25, 0x77, 0x1e, 0xd0, 0xff, 0x6d, 0xd6, 0xe6, 0xb2, 0x9c, 0xe4, 0xe7, 0xc9, 0xf8, 0xaa, 0x76, 0x1a, 0xc8, 0xe1, 0xa8, 0x98, 0x6a, 0x33, 0x68, 0xcd, 0xd5, 0x5a, 0x70, 0x6a, 0x1a, 0x72, 0xae, 0xb1, 0x2d, 0x8a, 0xce, 0x25, 0x4b, 0xe8, 0xac, 0xc2, 0xda, 0xaa, 0xd1, 0x71, 0x65, 0x15, 0xc0, 0x3d, 0xdc, 0x05, 0x85, 0xb1, 0x22, 0xc9, 0xa6, 0xda, 0xde, 0xd8, 0x44, 0x4c, 0x08, 0x18, 0x22, 0x4f, 0x4e, 0xf4, 0x8a, 0x24, 0x17, 0xd0, 0xfb, 0x81, 0xef, 0x47, 0xee, 0x49, 0x2f, 0x84, 0x59, 0x06, 0xc3, 0x9e, 0x03, 0xd3, 0x73, 0xdf, 0x6e, 0x01, 0xaa, 0x7a, 0xee, 0x79, 0xfb, 0x7d, 0x38, 0xde, 0xf2, 0x89, 0x40, 0x1e, 0x45, 0x5e, 0xd0, 0x91, 0x7b, 0x5d, 0x2b, 0x77, 0xde, 0x9e, 0x37, 0x6b, 0x3d, 0xcd, 0x08, 0xc8, 0x9d, 0x7d, 0xc2, 0x19, 0x12, 0xc0, 0x2a, 0xa6, 0x83, 0x1a, 0x22, 0x2e, 0x70, 0x7f, 0x40, 0xef, 0x1a, 0x12, 0x1b, 0xaa, 0xde, 0x95, 0x26, 0xb5, 0x29, 0x8d, 0xb0, 0xd1, 0xc2, 0xd0, 0x11, 0x04, 0xed, 0xb7, 0x8c, 0x34, 0x97, 0xae, 0xa4, 0x4a, 0x53, 0x04, 0xb1, 0x87, 0xa2, 0xf3, 0x43, 0xfa, 0xba, 0xc6, 0x1e, 0xf3, 0x43, 0x62, 0x24, 0xe1, 0xb0, 0x3d, 0x50, 0x34, 0xeb, 0xbd, 0x10, 0x3e, 0xbf, 0x07, 0xdc, 0x08, 0x3c, 0xcf, 0xf2, 0x11, 0xd8, 0xb7, 0x67, 0xe1, 0x30, 0x0c, 0xef, 0x36, 0x1e, 0xf9, 0x0e, 0xca, 0x11, 0xb8, 0x13, 0xb4, 0xd2, 0x39, 0xf3, 0xa9, 0x70, 0x60, 0xc2, 0x1d, 0xb5, 0x9b, 0x48, 0xd3, 0x4c, 0xc7, 0x4d, 0xd4, 0x23, 0xc3, 0x5d, 0xb9, 0x44, 0xd9, 0xd6, 0x55, 0x0a, 0xc0, 0x5f, 0x40, 0x06, 0x61, 0x73, 0x4d, 0xfa, 0x2a, 0x73, 0x63, 0x5d, 0x39, 0xa3, 0x4d, 0x92, 0x9c, 0x86, 0x67, 0xea, 0x08, 0x6e, 0x33, 0x7e, 0x11, 0x9f, 0x88, 0x3a, 0x48, 0x2e, 0x04, 0xab, 0x70, 0xe8, 0xb7, 0x24, 0x01, 0xc2, 0xb0, 0x05, 0xfc, 0xe8, 0x03, 0x3b, 0x86, 0x63, 0x1f, 0xc0, 0x43, 0x6e, 0xb6, 0x2c, 0x3c, 0x10, 0x57, 0xdb, 0xdf, 0xda, 0x74, 0x67, 0x26, 0xaf, 0x68, 0x83, 0x51, 0xd3, 0xda, 0xcd, 0x54, 0x98, 0xa9, 0x2d, 0xd8, 0x05, 0x66, 0x57, 0xee, 0x42, 0x9a, 0xd3, 0xed, 0xb4, 0xff, 0x6a, 0x65, 0xa8, 0xe8, 0x87, 0x8a, 0xcc, 0x45, 0x53, 0x16, 0x95, 0x31, 0xf4, 0x23, 0x84, 0x62, 0x6a, 0x86, 0x69, 0xa8, 0xa0, 0xcb, 0x16, 0xf5, 0x99, 0xc2, 0xc3, 0xae, 0xb5, 0x50, 0x8c, 0xc2, 0xd8, 0x07, 0x0d, 0x6b, 0x37, 0x32, 0x7c, 0x16, 0x06, 0xee, 0xde, 0x34, 0x54, 0xe0, 0xe2, 0x81, 0x61, 0xf2, 0x60, 0xe3, 0xf9, 0xfb, 0x0d, 0x3f, 0xf8, 0xd8, 0x70, 0x9e, 0x85, 0xd6, 0x76, 0x40, 0xa7, 0x83, 0x0f, 0xe7, 0x3e, 0x80, 0xae, 0x78, 0x6c, 0xd3, 0x0f, 0x81, 0x6f, 0x47, 0xb6, 0x61, 0xac, 0x3f, 0x4b, 0xe5, 0x9c, 0x21, 0x30, 0x69, 0x09, 0xf7, 0xcc, 0x42, 0xad, 0x53, 0x93, 0x2d, 0x8d, 0x8d, 0x32, 0xb3, 0xe6, 0xd8, 0x3a, 0xa5, 0xe6, 0x2a, 0xcb, 0x34, 0xfc, 0x20, 0xfc, 0x79, 0x62, 0xc4, 0x02, 0xbf, 0xfb, 0xf7, 0xb9, 0xd4, 0x15, 0xaf, 0x6c, 0x25, 0xb3, 0x22, 0x55, 0x19, 0x8b, 0xd2, 0x9f, 0x62, 0x2f, 0x31, 0x5f, 0x9c, 0x47, 0x49, 0xba, 0x88, 0xbe, 0x8f, 0x96, 0xe1, 0x4f, 0xe3, 0x55, 0xec, 0x3d, 0x5f, 0x01, 0x34, 0xcf, 0x97, 0xe1, 0xc5, 0x69, 0xde, 0xfe, 0xe5, 0xcb, 0x76, 0xe6, 0xf9, 0xe3, 0x0e, 0x3a, 0xe9, 0xfb, 0xc3, 0xb8, 0x1b, 0x46, 0x7f, 0xdf, 0x3f, 0x98, 0xda, 0x81, 0xe7, 0x28, 0x6a, 0x47, 0x57, 0xa8, 0x63, 0x7b, 0xaa, 0x46, 0x74, 0x38, 0xd1, 0xe9, 0x0c, 0x4e, 0x42, 0xb8, 0x0c, 0x4f, 0x01, 0xa2, 0x42, 0xd3, 0x30, 0xc9, 0x36, 0x6d, 0x41, 0x18, 0xb8, 0xa4, 0x0c, 0x3b, 0x36, 0x56, 0x99, 0x19, 0x2a, 0xa1, 0xf5, 0x64, 0x12, 0x99, 0x79, 0x62, 0x78, 0xfa, 0x61, 0x76, 0xeb, 0x83, 0x00, 0xfd, 0xe8, 0x9c, 0x8e, 0x93, 0x4d, 0xf6, 0xbe, 0xcf, 0x02, 0xf0, 0xff, 0xbe, 0xc7, 0xf7, 0x23, 0x9b, 0x3c, 0x3a, 0x0a, 0x6f, 0x03, 0x8f, 0x0f, 0xd1, 0xf6, 0xbb, 0xc3, 0xbb, 0xd4, 0x0e, 0xbc, 0x87, 0xa0, 0xfc, 0x00, 0x78, 0x34, 0x39, 0x40, 0xb7, 0xdd, 0xe8, 0x79, 0x8a, 0x6d, 0x53, 0x62, 0x83, 0xb2, 0x57, 0x85, 0x03, 0xc7, 0x8c, 0xaa, 0x0e, 0x29, 0x51, 0x50, 0x96, 0x82, 0x8e, 0xe5, 0x5d, 0xe9, 0x68, 0x83, 0xe8, 0x96, 0x2b, 0x51, 0xd9, 0xb2, 0x12, 0x6a, 0x99, 0xa6, 0x11, 0x63, 0x22, 0x11, 0x5c, 0x00, 0xfe, 0x4e, 0x48, 0x04, 0xb2, 0xfd, 0xeb, 0x13, 0xf5, 0xf6, 0xaa, 0x9b, 0xed, 0xb6, 0xc0, 0xf1, 0xb0, 0x33, 0xbb, 0x3b, 0x0c, 0x87, 0x61, 0xe0, 0xe3, 0x06, 0x0a, 0xf4, 0x11, 0xac, 0xb7, 0xd8, 0x74, 0x9e, 0x0d, 0x01, 0x81, 0x0f, 0xde, 0x1d, 0x65, 0x3e, 0xcd, 0x23, 0xb0, 0x68, 0xc0, 0x3f, 0xea, 0xc4, 0x2a, 0x6b, 0xc2, 0x84, 0x6d, 0xe6, 0x7a, 0x5f, 0xe9, 0x2b, 0xc7, 0xae, 0x6a, 0x88, 0x64, 0xd6, 0xb9, 0x71, 0xb3, 0xdb, 0x20, 0x11, 0x65, 0xc0, 0x75, 0x6e, 0xa9, 0xc4, 0xdb, 0x16, 0x45, 0x03, 0x17, 0x5f, 0x55, 0x65, 0xb2, 0xb6, 0x10, 0xb5, 0x02, 0x49, 0xc9, 0x54, 0x66, 0x58, 0xec, 0x2f, 0x44, 0xc4, 0x53, 0x45, 0x0d, 0x86, 0x4e, 0xb6, 0xff, 0xe2, 0x44, 0xbd, 0x41, 0xb6, 0x70, 0x08, 0x01, 0x87, 0xfb, 0xfd, 0x61, 0xf0, 0x76, 0x76, 0xb7, 0x09, 0x0e, 0xd0, 0x21, 0x0b, 0xb6, 0x7e, 0x80, 0x3f, 0x6c, 0xbf, 0xb7, 0xbb, 0x21, 0x08, 0x38, 0xbb, 0xe3, 0xf5, 0x81, 0x40, 0x2a, 0x4a, 0xfc, 0xd3, 0x04, 0x01, 0xf7, 0x5f, 0x7b, 0xac, 0x2a, 0x98, 0x5c, 0x64, 0xdd, 0x2c, 0xe9, 0x9b, 0x50, 0xc4, 0x9f, 0x8b, 0x92, 0x7e, 0xea, 0x0a, 0xa2, 0xe1, 0x45, 0x40, 0xa4, 0x35, 0xd1, 0x17, 0x61, 0xa9, 0x3c, 0x50, 0xd9, 0xbc, 0xb4, 0xd4, 0xb5, 0x61, 0x39, 0xd5, 0x40, 0x73, 0x29, 0x63, 0x44, 0xb2, 0x98, 0x27, 0xf7, 0xc8, 0xf6, 0x68, 0xcf, 0xff, 0xf2, 0xba, 0x9d, 0x0d, 0x9c, 0x28, 0x19, 0xdf, 0xec, 0x03, 0x48, 0x66, 0xfd, 0x60, 0xbb, 0xe5, 0x5b, 0xc6, 0xc3, 0x2d, 0x1f, 0xac, 0x37, 0x02, 0x52, 0x42, 0xf2, 0x3b, 0x6c, 0x93, 0x0d, 0x14, 0xa9, 0x09, 0xd6, 0x23, 0x50, 0x81, 0x6f, 0x1a, 0xca, 0xa4, 0x36, 0x4d, 0x42, 0xd5, 0xbd, 0x94, 0xfd, 0x68, 0x55, 0x21, 0x68, 0x78, 0xcc, 0xb9, 0xa6, 0x23, 0x8e, 0x52, 0x9a, 0x0b, 0x93, 0x0a, 0xbd, 0x84, 0xbd, 0x61, 0xa7, 0xc1, 0xf7, 0x89, 0xf9, 0x82, 0x06, 0x74, 0xc9, 0x45, 0x92, 0x28, 0xa5, 0x25, 0xb8, 0xa6, 0xd4, 0xa9, 0x8a, 0x97, 0x72, 0x99, 0xc4, 0x9a, 0xa7, 0x42, 0xa4, 0xdf, 0x2c, 0x57, 0x27, 0x7a, 0x7e, 0x92, 0xcb, 0x7a, 0x5e, 0xe8, 0x63, 0x07, 0x8d, 0xf8, 0x9d, 0xb7, 0xe1, 0x6e, 0xd8, 0xee, 0xb6, 0x5b, 0xbb, 0x0f, 0x0e, 0x3c, 0xb0, 0xfe, 0x61, 0x47, 0x54, 0x7a, 0xc7, 0xee, 0x42, 0xad, 0xb3, 0x92, 0x97, 0x95, 0xa5, 0x69, 0x90, 0xb9, 0x9c, 0xea, 0x1b, 0x65, 0x93, 0x51, 0xb5, 0xba, 0x3b, 0x41, 0x76, 0xd3, 0xb5, 0xda, 0x36, 0x61, 0x60, 0x5e, 0x8d, 0xca, 0xf0, 0xd4, 0xb4, 0xa6, 0x8d, 0x20, 0x7b, 0xa6, 0x63, 0x00, 0x60, 0x63, 0x83, 0x18, 0x7b, 0x4a, 0x2e, 0xe8, 0xdc, 0x09, 0x02, 0xb9, 0x54, 0x8e, 0x88, 0xa2, 0x54, 0x46, 0xd8, 0x73, 0x2f, 0xd2, 0x34, 0x89, 0x92, 0x38, 0x7e, 0x00, 0xe4, 0x3f, 0xa0, 0xaf, 0xcb, 0x66, 0x36, 0x6e, 0x87, 0x71, 0xe7, 0x85, 0xf0, 0x84, 0x5e, 0x08, 0xf0, 0xb1, 0xe3, 0x3e, 0x90, 0xd5, 0xb8, 0x63, 0x08, 0x6e, 0xbd, 0x0c, 0x3c, 0xe6, 0x87, 0xee, 0xb1, 0xdd, 0x4f, 0x8f, 0xa1, 0x1f, 0x5c, 0x31, 0x88, 0x6b, 0xdd, 0xad, 0x5d, 0xaa, 0x90, 0x4e, 0x4f, 0x1d, 0xfb, 0xca, 0x73, 0x82, 0x4f, 0x30, 0x40, 0xa6, 0xa0, 0xb7, 0x9c, 0x78, 0x4b, 0x13, 0x19, 0xab, 0x6b, 0x5e, 0xe4, 0x19, 0x07, 0x2e, 0xb6, 0x54, 0xe9, 0x44, 0x59, 0x2c, 0x7a, 0xed, 0x42, 0x9a, 0x2d, 0xad, 0x2f, 0x0c, 0x20, 0x56, 0x4e, 0x2d, 0xad, 0x99, 0x5a, 0x41, 0x4e, 0xb9, 0x8a, 0xd8, 0x03, 0xb4, 0xec, 0x01, 0x75, 0x41, 0x2c, 0x8f, 0xe6, 0x9b, 0x78, 0xcc, 0x0b, 0xdc, 0x61, 0x05, 0x7c, 0xdf, 0x48, 0xaa, 0xc3, 0xa3, 0x47, 0xf4, 0x82, 0x27, 0x0c, 0xf1, 0xb6, 0xef, 0x8f, 0x07, 0x19, 0x3e, 0xc4, 0xe4, 0x67, 0x8b, 0xef, 0xc2, 0xd5, 0x8f, 0xca, 0x61, 0x7f, 0xfe, 0xe3, 0xf4, 0x6c, 0xf7, 0xe5, 0xe5, 0xab, 0x19, 0x9c, 0xc4, 0x48, 0x6c, 0x3a, 0x08, 0xe8, 0x0c, 0x4d, 0x0e, 0x07, 0x06, 0x57, 0xe8, 0x6c, 0x73, 0x0b, 0x8f, 0x78, 0xf0, 0x87, 0x90, 0xbd, 0xc7, 0x67, 0xce, 0xb2, 0x92, 0xba, 0xdc, 0xa6, 0x5e, 0x98, 0x29, 0xa3, 0x43, 0xe7, 0xfd, 0x8e, 0x96, 0x51, 0x5b, 0xe3, 0x54, 0xe1, 0xe0, 0xf0, 0x71, 0xed, 0x2a, 0x79, 0xa8, 0x98, 0xa1, 0x68, 0xd3, 0x76, 0x42, 0x22, 0xee, 0x90, 0xb8, 0xc0, 0xa7, 0xa5, 0x69, 0x38, 0x7c, 0x24, 0x65, 0x27, 0x97, 0x95, 0x96, 0x20, 0x37, 0xd4, 0x7c, 0x9b, 0x72, 0x96, 0x88, 0xf8, 0x34, 0xaf, 0x48, 0x72, 0xe1, 0xf7, 0xde, 0x03, 0xd8, 0x6f, 0xb6, 0xce, 0x4d, 0x6c, 0x46, 0x18, 0x22, 0xa4, 0xeb, 0x87, 0x83, 0x05, 0xf2, 0x87, 0x74, 0x7b, 0x6c, 0xb7, 0xbb, 0x5c, 0xe6, 0x98, 0x5f, 0xac, 0xd6, 0xd6, 0x9d, 0x88, 0xba, 0xdf, 0x95, 0xf6, 0x59, 0x96, 0xad, 0xdf, 0xe6, 0xe9, 0x69, 0x30, 0x3a, 0x50, 0x6f, 0x43, 0x79, 0x01, 0xc4, 0xae, 0x92, 0xf2, 0xdd, 0x94, 0x03, 0x69, 0xa6, 0x39, 0xbf, 0x55, 0x69, 0x35, 0xcd, 0x7e, 0xe3, 0x99, 0x95, 0x42, 0x83, 0x63, 0x4b, 0x1e, 0x81, 0xcb, 0x24, 0x11, 0x4f, 0x78, 0x1a, 0xc7, 0xf7, 0x78, 0xc5, 0x47, 0xe3, 0xab, 0xcb, 0x57, 0xcd, 0xeb, 0x6e, 0xe6, 0x59, 0x19, 0x0e, 0x2c, 0x94, 0xde, 0x4d, 0x26, 0xa0, 0xf7, 0xf9, 0x26, 0x0c, 0x8e, 0x6f, 0xef, 0x23, 0x69, 0x67, 0x79, 0xbe, 0x2e, 0x25, 0x8d, 0x0f, 0xa2, 0xc6, 0xf8, 0x35, 0x20, 0x3b, 0x7e, 0x79, 0xc0, 0xbe, 0xb6, 0x33, 0x2a, 0xeb, 0xba, 0x9c, 0x86, 0x2d, 0xa5, 0xeb, 0x2e, 0xa3, 0xca, 0x0b, 0x23, 0x64, 0xa6, 0xea, 0x4c, 0x67, 0xba, 0xcc, 0x39, 0x17, 0x3a, 0xd6, 0x2c, 0x8d, 0x13, 0xcb, 0x8c, 0x4e, 0x44, 0xc0, 0x12, 0xbe, 0x5a, 0xdb, 0xf8, 0x1c, 0x3e, 0x64, 0xb1, 0x38, 0x4f, 0xc2, 0xc5, 0x0b, 0xbe, 0x8a, 0x97, 0xf3, 0x8b, 0xe7, 0x81, 0x77, 0xa2, 0xff, 0xb8, 0x9e, 0xd9, 0x0d, 0xc0, 0x2f, 0x1d, 0xfa, 0x6d, 0x7c, 0xbf, 0x67, 0x7b, 0x8f, 0x0f, 0x81, 0xd7, 0xfb, 0xe3, 0x7e, 0xcf, 0xc6, 0x4d, 0x1f, 0xf2, 0xf1, 0x43, 0x66, 0xfd, 0x94, 0x45, 0x0b, 0x4b, 0xb8, 0x23, 0x95, 0x49, 0x7a, 0x16, 0xc5, 0x69, 0xbc, 0x60, 0xb9, 0x51, 0xd2, 0x10, 0xd9, 0x4a, 0xb2, 0x62, 0x9e, 0x2b, 0x99, 0x8a, 0x39, 0xb8, 0xf4, 0x6a, 0x41, 0x43, 0xef, 0x8d, 0x5d, 0x64, 0xd1, 0x05, 0x70, 0xa4, 0x91, 0xbc, 0x60, 0x55, 0xc1, 0x8c, 0x80, 0xb8, 0x8a, 0x0b, 0x93, 0x08, 0x89, 0xff, 0x32, 0x53, 0x08, 0x9a, 0x77, 0x32, 0x4f, 0xa5, 0xe1, 0x2c, 0x64, 0x2c, 0x4d, 0x97, 0xa7, 0xe5, 0x3e, 0x20, 0x96, 0xb7, 0x0b, 0xfb, 0x83, 0x37, 0xc0, 0x35, 0xec, 0xfb, 0xd1, 0xb2, 0xdd, 0xe8, 0x0f, 0xfd, 0x7e, 0x7f, 0xe8, 0xc7, 0x11, 0xb8, 0x38, 0x3c, 0x04, 0x1f, 0xea, 0xeb, 0x4c, 0xb3, 0x79, 0x0c, 0x48, 0x64, 0xd2, 0x7c, 0xb1, 0x16, 0x59, 0x9a, 0xaf, 0xc1, 0xc3, 0x28, 0x05, 0x42, 0x04, 0x53, 0x67, 0xf9, 0x39, 0x21, 0x76, 0x99, 0x46, 0x8a, 0x1a, 0xcd, 0xc0, 0x9e, 0x95, 0x82, 0x5b, 0x34, 0x59, 0x62, 0x16, 0xa9, 0x2c, 0xd2, 0x2a, 0x2a, 0x88, 0x69, 0x47, 0x80, 0xc6, 0x5a, 0xda, 0x92, 0x83, 0x6f, 0xa6, 0x59, 0xc4, 0x74, 0x0a, 0x3d, 0x86, 0x88, 0x62, 0x11, 0x5f, 0xc0, 0xe3, 0x9f, 0xe6, 0x3b, 0x5e, 0xbd, 0x6c, 0x66, 0x60, 0x62, 0xbe, 0x4f, 0x27, 0x2f, 0x40, 0xba, 0x10, 0x70, 0x1b, 0x8e, 0x87, 0xc3, 0xe0, 0x33, 0xca, 0xc9, 0xe1, 0x27, 0xfd, 0x86, 0x30, 0xd5, 0x5d, 0x95, 0x9d, 0x15, 0x22, 0xb7, 0x75, 0xb6, 0xa6, 0xf9, 0x5e, 0x79, 0x95, 0xd1, 0x04, 0xd0, 0xfc, 0xe6, 0x6c, 0xc8, 0x21, 0x0c, 0xbc, 0xc8, 0xf1, 0xdc, 0x31, 0x6c, 0x2b, 0xaa, 0x14, 0x92, 0x35, 0xf5, 0x1f, 0x50, 0x39, 0x85, 0xee, 0xe0, 0xe7, 0x29, 0x05, 0x9c, 0x57, 0x0e, 0x5f, 0xd6, 0x5a, 0xc0, 0xc9, 0xb7, 0xa9, 0x6d, 0x44, 0x8e, 0x58, 0x9d, 0x0b, 0x40, 0x47, 0x25, 0x3c, 0x71, 0xe2, 0xd9, 0x04, 0xc9, 0x05, 0xb7, 0x31, 0x1e, 0xfa, 0x3d, 0x4c, 0xd1, 0x82, 0x56, 0xee, 0xd9, 0x86, 0xba, 0xc8, 0x60, 0x81, 0x23, 0x50, 0xf1, 0x38, 0x52, 0x05, 0x45, 0xff, 0x9e, 0xce, 0x5c, 0xae, 0x4a, 0x54, 0xee, 0xa4, 0xec, 0x88, 0x83, 0xe1, 0x0d, 0x29, 0xac, 0x65, 0x53, 0x70, 0xa6, 0x29, 0x3f, 0x85, 0x76, 0x25, 0x51, 0x2e, 0xba, 0xd1, 0xbc, 0x42, 0x57, 0xb5, 0x5f, 0xd4, 0x2e, 0xe8, 0xd1, 0x60, 0xb3, 0xba, 0xa2, 0x5c, 0x09, 0x70, 0x31, 0xf4, 0x06, 0xca, 0x63, 0x4c, 0x4e, 0x6d, 0x08, 0x72, 0x25, 0xb9, 0x48, 0x93, 0xf8, 0xc4, 0xbc, 0xc7, 0xab, 0x57, 0x6f, 0x66, 0x3e, 0xa2, 0xb2, 0xef, 0x05, 0xa0, 0xd1, 0x07, 0x48, 0x30, 0x6c, 0xed, 0xae, 0x1f, 0x46, 0xcf, 0x02, 0x50, 0xf5, 0xe3, 0x81, 0xfb, 0xfd, 0xc8, 0xbd, 0xf7, 0x92, 0x57, 0x93, 0xaf, 0x5f, 0xbb, 0x44, 0x4e, 0x53, 0x4d, 0xa5, 0xb8, 0xc7, 0xe9, 0x1a, 0xcd, 0x4d, 0x29, 0xbe, 0x99, 0x98, 0x66, 0x03, 0x1e, 0x3d, 0x35, 0x42, 0x3a, 0x54, 0x52, 0x96, 0xae, 0x5d, 0xae, 0x31, 0x00, 0x23, 0xd6, 0x95, 0x85, 0x18, 0x82, 0xc0, 0x36, 0x2b, 0x6d, 0x0a, 0x7d, 0x49, 0x3c, 0x14, 0xb1, 0xb5, 0xf4, 0x54, 0x7d, 0x41, 0x2e, 0x40, 0x0c, 0xaf, 0xdf, 0x83, 0xa4, 0xf4, 0x80, 0x52, 0xc1, 0xe8, 0xb1, 0x9e, 0x07, 0x5b, 0x06, 0xeb, 0xdc, 0x80, 0x44, 0xdb, 0x71, 0xcf, 0xc2, 0xf1, 0x3d, 0x67, 0xef, 0x7a, 0xf1, 0xd7, 0x53, 0xf2, 0xde, 0x29, 0xe4, 0x6d, 0x2a, 0xf8, 0x78, 0x4e, 0x79, 0x1c, 0xbe, 0xe7, 0xe6, 0x17, 0x75, 0xf5, 0x84, 0x4d, 0x68, 0x12, 0x41, 0x56, 0x67, 0x34, 0x46, 0x82, 0x0a, 0xba, 0xa8, 0x3f, 0xdb, 0x94, 0x86, 0x92, 0x1d, 0xd0, 0x96, 0x82, 0xb7, 0x57, 0x2a, 0x86, 0xb7, 0x8f, 0xe1, 0x4d, 0x78, 0x7c, 0xf1, 0x90, 0x5c, 0x0f, 0xe8, 0xeb, 0x75, 0x7b, 0x3d, 0x0b, 0x43, 0xe6, 0xed, 0x7d, 0x0e, 0x7f, 0x38, 0xf4, 0x7d, 0x18, 0xc2, 0x6b, 0x30, 0x60, 0x8f, 0x70, 0xc3, 0xe8, 0x43, 0xca, 0x89, 0x00, 0x8a, 0xd8, 0xbd, 0x0f, 0xf8, 0xd1, 0xfb, 0x9e, 0xcf, 0x38, 0xf3, 0xc8, 0x0e, 0xd7, 0x14, 0x9d, 0x14, 0xf5, 0xa1, 0xb7, 0x6f, 0x4f, 0x5d, 0x8f, 0x4f, 0x75, 0x41, 0xf3, 0xd3, 0xda, 0xa9, 0xa8, 0xc7, 0x6d, 0xa2, 0xd6, 0x9d, 0x54, 0x74, 0xae, 0xe6, 0xb2, 0x99, 0xa6, 0x32, 0x50, 0x70, 0xc7, 0x26, 0xcc, 0xeb, 0x82, 0xa6, 0x6b, 0xae, 0x2b, 0x53, 0x67, 0x36, 0xaf, 0xad, 0x26, 0xa2, 0xa6, 0x72, 0x66, 0x4e, 0x8b, 0xcd, 0x24, 0xd7, 0x6e, 0xdc, 0xed, 0x76, 0x03, 0x08, 0x34, 0xfe, 0x0c, 0xd8, 0x51, 0xc3, 0xf8, 0xf1, 0x87, 0xfb, 0xd9, 0xfe, 0x9f, 0x18, 0x4a, 0xdd, 0x8f, 0xa7, 0x1e, 0xcd, 0x34, 0x5f, 0x13, 0x8b, 0xf6, 0x18, 0x70, 0x14, 0x63, 0xde, 0x86, 0xd1, 0x0b, 0xfc, 0xd9, 0xb0, 0x63, 0x99, 0xc0, 0x47, 0xf2, 0x04, 0x2e, 0xb7, 0xd8, 0xb8, 0xf2, 0x81, 0x04, 0x4c, 0xda, 0x25, 0xdc, 0xa8, 0x0c, 0xb6, 0xd6, 0x34, 0xcb, 0x94, 0xfc, 0x48, 0x46, 0xa7, 0xeb, 0x40, 0x4f, 0xd4, 0xf8, 0x41, 0x4e, 0x84, 0x86, 0x89, 0x37, 0xc6, 0x80, 0x11, 0x28, 0x18, 0xa3, 0xa1, 0x02, 0x44, 0x0b, 0x42, 0x56, 0x1a, 0x9e, 0xc9, 0xac, 0xe0, 0xcb, 0x7b, 0x65, 0xfb, 0xfd, 0xd3, 0xf6, 0x19, 0xc9, 0xd6, 0xf7, 0xe3, 0xde, 0x52, 0x5d, 0x59, 0x08, 0xf0, 0x8e, 0x7d, 0xb5, 0xa7, 0x17, 0x9f, 0xcc, 0x13, 0xb8, 0x53, 0x17, 0xaa, 0x82, 0x75, 0x73, 0x0b, 0xd7, 0x6b, 0x45, 0x43, 0x0c, 0xb3, 0x69, 0xda, 0x07, 0x00, 0x86, 0xd6, 0x73, 0xad, 0x69, 0x0c, 0x5e, 0x53, 0xbf, 0xcb, 0x16, 0x50, 0xdd, 0x7e, 0xd3, 0xc6, 0x0a, 0x28, 0xaa, 0x30, 0x94, 0xb6, 0x57, 0x2a, 0x11, 0x42, 0xb9, 0xc4, 0x1b, 0xa7, 0x13, 0x8e, 0x48, 0xa7, 0x46, 0x87, 0xc9, 0x22, 0x0a, 0xe7, 0x69, 0x14, 0x2f, 0x4f, 0xdc, 0x67, 0xaf, 0x5e, 0xcf, 0xbc, 0x71, 0x07, 0x37, 0xe8, 0xf3, 0x71, 0xe4, 0xf0, 0xee, 0x7c, 0xb4, 0x5b, 0x7e, 0x60, 0xe0, 0x32, 0x01, 0xac, 0xcf, 0x06, 0x87, 0x81, 0x0f, 0x83, 0x4f, 0x87, 0x31, 0xe1, 0xdb, 0x14, 0x01, 0x55, 0x46, 0x38, 0x8d, 0x35, 0x54, 0x38, 0xd0, 0x1c, 0xe7, 0x0d, 0xe5, 0x13, 0x1d, 0x6b, 0x27, 0x37, 0xd8, 0x4e, 0xc3, 0x86, 0x28, 0xb9, 0x0f, 0x35, 0x59, 0xa0, 0x4b, 0x4b, 0x69, 0x61, 0xc2, 0x5d, 0xb6, 0xa9, 0x32, 0xa9, 0x25, 0xb5, 0x27, 0x19, 0x1a, 0x13, 0x0c, 0x21, 0x85, 0x8a, 0x6d, 0x96, 0x29, 0xb0, 0x35, 0xad, 0xc0, 0x33, 0xe7, 0x8b, 0x87, 0x4e, 0xff, 0x1e, 0xd2, 0x17, 0xe4, 0xa2, 0x0a, 0x16, 0x20, 0xf8, 0x03, 0x78, 0x73, 0x80, 0x70, 0x0c, 0x1f, 0x01, 0xaf, 0x1e, 0xee, 0x82, 0x1d, 0xdb, 0x04, 0x1b, 0xcb, 0x82, 0x0d, 0x18, 0x4d, 0xbf, 0xef, 0x7d, 0x76, 0x93, 0xec, 0xde, 0x4f, 0xfa, 0x9a, 0x12, 0x03, 0xae, 0x58, 0x79, 0x3d, 0xcd, 0xa1, 0x44, 0x18, 0x96, 0xc7, 0x93, 0xdb, 0x69, 0x52, 0xfd, 0x94, 0x08, 0x69, 0xb4, 0xab, 0x7c, 0x2c, 0x28, 0xc9, 0x28, 0xe1, 0x6f, 0x8a, 0x12, 0xd8, 0x19, 0xc1, 0x2c, 0x93, 0x45, 0x0b, 0xc7, 0x58, 0x91, 0xf3, 0x2f, 0xea, 0xa2, 0xcc, 0x0a, 0x15, 0x1b, 0xa9, 0x0a, 0xc9, 0xd2, 0xb9, 0x38, 0x0d, 0xff, 0xbe, 0x7e, 0x73, 0xd5, 0x34, 0x33, 0xaa, 0x51, 0x19, 0xc3, 0xbd, 0x07, 0x83, 0x0c, 0xe1, 0x1c, 0x47, 0x72, 0x8c, 0x94, 0xb7, 0x92, 0xfb, 0xbe, 0x3f, 0xf4, 0x00, 0x91, 0x88, 0x07, 0xae, 0x86, 0x27, 0x44, 0x30, 0xf0, 0x88, 0x76, 0x9e, 0x65, 0xd2, 0xe6, 0xd4, 0x5a, 0xb6, 0x2e, 0xd6, 0xdd, 0xba, 0x72, 0x23, 0x06, 0x3b, 0x4b, 0x2e, 0x32, 0xb7, 0xeb, 0x3a, 0xca, 0x35, 0x87, 0x62, 0x5c, 0x08, 0x43, 0x48, 0xee, 0xea, 0x75, 0x27, 0xe9, 0x9c, 0xaf, 0xcb, 0xa8, 0x7e, 0x3d, 0xaf, 0xf3, 0x0e, 0x20, 0x71, 0xb9, 0x48, 0xb9, 0xd4, 0x9c, 0xd1, 0xca, 0x94, 0x94, 0xd4, 0xaf, 0x72, 0x9a, 0xbf, 0x63, 0x75, 0x26, 0x58, 0x2c, 0x96, 0xc9, 0xe2, 0xb4, 0xea, 0x81, 0xeb, 0xab, 0x37, 0x44, 0xa1, 0x47, 0x68, 0x06, 0xb2, 0xc0, 0xeb, 0x81, 0xa1, 0x80, 0xa9, 0xec, 0xbd, 0x70, 0xef, 0xdf, 0x7d, 0xe0, 0xc7, 0x21, 0x68, 0x4c, 0xb8, 0x21, 0x11, 0xd9, 0x99, 0x54, 0x79, 0x91, 0x5d, 0x24, 0xdc, 0xe4, 0x55, 0x21, 0xcf, 0x4d, 0xc6, 0xed, 0x7c, 0xc9, 0x62, 0xb6, 0xe0, 0xf9, 0x22, 0xb5, 0x7c, 0x45, 0x07, 0x45, 0x54, 0x71, 0x93, 0x17, 0x00, 0x8e, 0xb6, 0x2a, 0x45, 0x02, 0x08, 0x85, 0x38, 0xbc, 0x56, 0x45, 0xa5, 0xb2, 0x32, 0xa7, 0x99, 0x1b, 0x55, 0x5e, 0xad, 0xca, 0x27, 0x46, 0xb0, 0x6c, 0x7e, 0x6f, 0xd9, 0x18, 0xfc, 0xc7, 0x7f, 0x7a, 0x9a, 0x6f, 0xbc, 0x7e, 0x75, 0x39, 0x7b, 0x30, 0x59, 0x0a, 0x65, 0x6d, 0xb6, 0x87, 0x70, 0xe0, 0x3b, 0x0a, 0x71, 0xd2, 0xda, 0x33, 0x91, 0x17, 0x8a, 0x4a, 0x89, 0x00, 0x8c, 0x74, 0x65, 0xa7, 0xf9, 0xf8, 0x94, 0x88, 0xa3, 0x40, 0x3d, 0xd7, 0x79, 0x9a, 0xe9, 0x45, 0xbc, 0xfa, 0x3a, 0xf6, 0x82, 0x93, 0xfc, 0x7e, 0x71, 0x5a, 0x4c, 0x23, 0xd9, 0x76, 0xbe, 0xc4, 0xc6, 0x9a, 0x1e, 0x1b, 0xf7, 0x3c, 0x4a, 0x7a, 0x96, 0xbb, 0xed, 0x7e, 0xec, 0x8f, 0x35, 0x8e, 0x1e, 0x20, 0x48, 0xb0, 0xdb, 0x1f, 0x86, 0x2d, 0xe8, 0xe7, 0x33, 0xf6, 0xe4, 0xc9, 0xcf, 0x9f, 0xff, 0xf8, 0xdf, 0xfb, 0x33, 0x65, 0x3b, 0x31, 0x47, 0x70, 0x7d, 0xdd, 0xcd, 0x80, 0x16, 0x41, 0xbe, 0xec, 0x48, 0xd8, 0x03, 0x20, 0x8b, 0xa2, 0xda, 0x38, 0x4e, 0x98, 0xe4, 0xc0, 0xc3, 0xfd, 0xce, 0x83, 0x2d, 0x7a, 0x23, 0x1b, 0xf7, 0x6f, 0x09, 0x1a, 0x70, 0x63, 0x21, 0x5c, 0xd7, 0xc3, 0x74, 0xb3, 0xcb, 0x11, 0x83, 0x34, 0x37, 0x79, 0x61, 0x77, 0xb2, 0xde, 0xde, 0xae, 0x8f, 0x9b, 0xee, 0xbd, 0xa1, 0x96, 0x00, 0xaa, 0x97, 0x96, 0x2d, 0x1d, 0xa0, 0x35, 0x84, 0x47, 0x2c, 0x55, 0xfa, 0xe4, 0x74, 0x5f, 0x46, 0x16, 0xdb, 0x3c, 0xd4, 0x88, 0x74, 0x29, 0x17, 0xf3, 0x07, 0xab, 0x23, 0x1e, 0xd2, 0x19, 0xe4, 0xf2, 0x7c, 0x6f, 0x80, 0x4c, 0x5e, 0x30, 0x72, 0x3f, 0xdc, 0x6d, 0xc8, 0x81, 0xc0, 0x5b, 0x78, 0x03, 0x89, 0x06, 0x2a, 0x03, 0x99, 0xbc, 0x80, 0xb8, 0x1b, 0xd4, 0x76, 0x44, 0x8f, 0x94, 0x23, 0xa8, 0xdc, 0x5d, 0x05, 0xe6, 0x38, 0x7f, 0xcc, 0xb5, 0x64, 0x11, 0x76, 0x74, 0x6d, 0x3b, 0xeb, 0x49, 0xa2, 0xc6, 0xdd, 0x76, 0x40, 0xc9, 0xe1, 0xac, 0x29, 0x6c, 0x2d, 0xf5, 0x34, 0xce, 0x36, 0x9b, 0xa6, 0x5e, 0x99, 0xb6, 0x94, 0x40, 0x92, 0x19, 0x0d, 0xb0, 0x6e, 0x4b, 0xdb, 0xd8, 0xcc, 0xb2, 0x58, 0x8a, 0x4c, 0x4a, 0x91, 0xcf, 0xc5, 0x89, 0x67, 0xd2, 0x6f, 0x5a, 0x60, 0x10, 0xf0, 0x16, 0x4e, 0x45, 0x11, 0xde, 0x30, 0x0c, 0x50, 0x1b, 0x3b, 0x04, 0xfb, 0x50, 0x0e, 0x7b, 0x44, 0x80, 0x9d, 0x7f, 0x1f, 0x14, 0x09, 0xa7, 0x2a, 0x77, 0xb3, 0x76, 0x04, 0xa5, 0x9c, 0x66, 0x2b, 0x4f, 0x7f, 0xf2, 0xf6, 0x88, 0x87, 0x69, 0xdf, 0x91, 0x1c, 0x0c, 0xae, 0x9d, 0x93, 0x34, 0x15, 0x4d, 0x5a, 0x36, 0x19, 0xa4, 0xe1, 0x08, 0xd5, 0x20, 0x66, 0xd6, 0x2e, 0x4c, 0x45, 0xc3, 0x34, 0x2d, 0x31, 0x33, 0x25, 0xe8, 0xea, 0x93, 0x88, 0x1a, 0x75, 0xe4, 0x82, 0x4f, 0xb6, 0xf8, 0x9f, 0x9f, 0xa6, 0x33, 0x92, 0x6d, 0x38, 0xd8, 0x61, 0x64, 0xdc, 0xdf, 0xf4, 0x7c, 0x08, 0xf7, 0xbd, 0xb7, 0xf5, 0xfd, 0xb0, 0xdf, 0x0f, 0xde, 0x6e, 0xd3, 0x6f, 0xc2, 0x7b, 0xa1, 0x08, 0x8d, 0x54, 0xab, 0x80, 0x3f, 0x2a, 0xeb, 0x0c, 0x72, 0xad, 0x5d, 0x52, 0xc7, 0x8d, 0x18, 0xce, 0x9c, 0x65, 0xe5, 0x93, 0xb8, 0x24, 0x66, 0x7e, 0xec, 0x9c, 0x66, 0x34, 0x8c, 0x99, 0xb8, 0x59, 0x49, 0x59, 0x1e, 0x8b, 0xd8, 0xd7, 0x96, 0x26, 0xd3, 0xc4, 0x5e, 0x78, 0x99, 0x65, 0x82, 0x38, 0xb7, 0x91, 0x56, 0xab, 0x88, 0x5f, 0xb0, 0x84, 0xcd, 0x4f, 0xd4, 0x59, 0xf7, 0x7a, 0x06, 0x0a, 0x13, 0xdc, 0x14, 0x79, 0x78, 0x03, 0x3c, 0x88, 0xc7, 0x36, 0xde, 0x36, 0xa0, 0xc2, 0x0f, 0x6f, 0xd8, 0xef, 0xa7, 0x72, 0x0f, 0xbc, 0xf5, 0xa5, 0xfb, 0x6c, 0x1c, 0x36, 0x67, 0x59, 0x31, 0x1d, 0xb3, 0xbb, 0xca, 0x2a, 0xba, 0x68, 0xe4, 0xe6, 0x50, 0x9a, 0xea, 0xe2, 0x1a, 0x37, 0x21, 0x7f, 0xba, 0x4f, 0xa4, 0x69, 0x04, 0x4d, 0xa6, 0xa1, 0x3a, 0x02, 0x01, 0xde, 0x95, 0x41, 0x45, 0xcc, 0x50, 0x5e, 0x44, 0x2b, 0x95, 0xb2, 0x4c, 0x31, 0x7e, 0x21, 0x12, 0x26, 0xd3, 0xa7, 0x51, 0xac, 0x18, 0x48, 0x4c, 0x7a, 0xc1, 0xdf, 0xf9, 0x8f, 0x3f, 0x39, 0x51, 0x67, 0x90, 0xad, 0xb7, 0x9c, 0x00, 0x15, 0x15, 0x75, 0xe0, 0x69, 0x60, 0xc3, 0xd6, 0x3f, 0x8c, 0x8c, 0xde, 0x51, 0xa3, 0xcd, 0x68, 0xa9, 0x00, 0xc4, 0x1f, 0x0f, 0xd2, 0xfd, 0x0d, 0x4f, 0xba, 0xda, 0x0f, 0x55, 0x95, 0x74, 0x95, 0xde, 0xda, 0xba, 0xe4, 0xb0, 0x1b, 0x3c, 0x44, 0x4f, 0x0a, 0x7a, 0x92, 0x0e, 0x88, 0xe4, 0x04, 0x90, 0xe9, 0x5e, 0x21, 0xba, 0x16, 0x21, 0x2f, 0xa9, 0x99, 0x3f, 0xa2, 0x6b, 0xd6, 0xe8, 0xc8, 0x36, 0x53, 0x45, 0xde, 0x68, 0x80, 0xaa, 0x3a, 0xa5, 0x61, 0xe0, 0x59, 0x04, 0xdc, 0x08, 0x69, 0x45, 0x42, 0x83, 0xb7, 0x85, 0x9f, 0x8a, 0x94, 0x25, 0xea, 0x83, 0xb9, 0xba, 0x37, 0x32, 0xf8, 0x9f, 0x11, 0xad, 0x5b, 0x77, 0x51, 0x18, 0x82, 0xf0, 0x66, 0xdb, 0xdb, 0x0d, 0xa5, 0x18, 0xf1, 0x92, 0xf5, 0xbd, 0xc7, 0x19, 0x0d, 0xe3, 0xdc, 0xc2, 0x12, 0xa1, 0xb4, 0x7e, 0x4f, 0x60, 0xe4, 0x80, 0x60, 0xde, 0x1f, 0xb7, 0xdd, 0x59, 0x91, 0xaf, 0xcb, 0x75, 0x4e, 0xa1, 0xac, 0x6a, 0x8e, 0x9d, 0x15, 0x5d, 0x5b, 0x15, 0x4d, 0xd7, 0xd1, 0x4d, 0x10, 0x9d, 0x6b, 0x97, 0xa3, 0xee, 0x46, 0x49, 0xbf, 0x3f, 0xd8, 0xa5, 0x6a, 0xba, 0x3a, 0xed, 0x2a, 0x0d, 0xb3, 0x2d, 0xb3, 0xca, 0x00, 0x08, 0xeb, 0x94, 0xad, 0xad, 0x00, 0x48, 0x56, 0x76, 0x4d, 0x08, 0xd2, 0x1a, 0x43, 0x49, 0xa0, 0x48, 0x84, 0x2c, 0x4e, 0x17, 0xf3, 0x70, 0x75, 0x92, 0x31, 0xb6, 0xcd, 0xe5, 0xcb, 0x19, 0xa1, 0x46, 0xd0, 0x66, 0x36, 0x58, 0x68, 0x6e, 0x0c, 0xd9, 0x66, 0x67, 0xd9, 0x8e, 0xca, 0xef, 0x03, 0xdf, 0xef, 0xfb, 0xfb, 0xea, 0x5b, 0x9e, 0x8a, 0x88, 0x67, 0xeb, 0x86, 0xaf, 0xa1, 0x83, 0x85, 0x34, 0x29, 0x8f, 0x96, 0xe6, 0x42, 0x2e, 0xf5, 0x32, 0x52, 0xf2, 0x5b, 0xfe, 0x6c, 0x15, 0xad, 0xc2, 0xe0, 0xf9, 0xf2, 0xc5, 0x42, 0x3e, 0x4b, 0x56, 0x17, 0xd1, 0xb3, 0x38, 0xe6, 0xcf, 0x2f, 0x16, 0xf3, 0xd8, 0x17, 0x49, 0x1a, 0x59, 0x93, 0xe0, 0xef, 0x25, 0x4c, 0xc5, 0x4c, 0xfe, 0xec, 0x22, 0xf9, 0x54, 0x30, 0xfb, 0xe7, 0x27, 0x05, 0x6a, 0x27, 0x5b, 0xdf, 0x83, 0xbb, 0x78, 0x01, 0x7c, 0xfe, 0x10, 0xf0, 0xc3, 0x10, 0x7a, 0xbb, 0x5d, 0x10, 0x30, 0x20, 0x7c, 0x8f, 0xed, 0x37, 0xf7, 0xd6, 0xb7, 0x3c, 0x9d, 0xaf, 0xe6, 0x51, 0xc2, 0xc5, 0x52, 0x0a, 0x99, 0xc4, 0x89, 0x54, 0x72, 0x15, 0xa5, 0x71, 0x18, 0x2f, 0x79, 0xb4, 0x52, 0x32, 0x88, 0xc2, 0x27, 0x7c, 0x95, 0x2c, 0xe3, 0xe5, 0x77, 0xfc, 0x02, 0x52, 0x24, 0x49, 0xb2, 0x48, 0xc3, 0x25, 0x4f, 0x60, 0x78, 0xe9, 0x6a, 0xb1, 0x5c, 0xcc, 0x2f, 0xc2, 0xf8, 0x62, 0x11, 0x3f, 0x9b, 0x9f, 0x05, 0xcf, 0xc3, 0x45, 0x9a, 0xb2, 0xef, 0x57, 0xc1, 0x07, 0x42, 0x42, 0xb6, 0x3f, 0x38, 0x29, 0x50, 0xb7, 0x34, 0x21, 0x28, 0xe4, 0xfd, 0x6e, 0x0f, 0x88, 0x71, 0xe0, 0x74, 0xe4, 0xc7, 0x3c, 0xdf, 0x86, 0xfd, 0xb8, 0x39, 0x84, 0x54, 0xc4, 0x18, 0x0e, 0xd8, 0x62, 0xfd, 0x21, 0x00, 0xbe, 0x1c, 0xdf, 0x65, 0x79, 0xdc, 0x58, 0x2f, 0xda, 0x60, 0x6a, 0xdd, 0x58, 0x31, 0xf9, 0x8f, 0xe9, 0xb8, 0x16, 0xd6, 0x69, 0x6e, 0xb2, 0xf8, 0x2e, 0xa6, 0xd1, 0x1c, 0x60, 0xca, 0x15, 0x34, 0xee, 0xde, 0xa2, 0xa6, 0x89, 0x8d, 0x2b, 0xa2, 0xa0, 0x42, 0x17, 0x9a, 0x06, 0x6d, 0xa9, 0x0f, 0xb7, 0xb6, 0x4a, 0xd0, 0x78, 0xe8, 0xe7, 0x5a, 0xa4, 0x52, 0x88, 0xe7, 0x21, 0x17, 0x51, 0x7c, 0x92, 0x03, 0x71, 0x72, 0x41, 0x2f, 0x88, 0x66, 0xf0, 0xf0, 0xde, 0x9e, 0x85, 0x54, 0x7b, 0x1a, 0x6e, 0x0e, 0x5e, 0x1f, 0x06, 0xfb, 0x91, 0xe6, 0x7e, 0xd0, 0xd1, 0xa0, 0x05, 0x7d, 0xeb, 0x77, 0xe1, 0x5b, 0xf5, 0x9d, 0x69, 0xe3, 0x0e, 0x38, 0xa7, 0xeb, 0x65, 0x5c, 0xa4, 0x6e, 0xa6, 0x9a, 0xc6, 0xa9, 0xaa, 0xa5, 0xc9, 0x41, 0xd6, 0x72, 0x55, 0xb7, 0x3a, 0x53, 0xf4, 0x01, 0x5d, 0x4e, 0x55, 0x17, 0x39, 0x35, 0x9f, 0x66, 0x20, 0x32, 0xd6, 0x5d, 0x3b, 0x50, 0xd1, 0xe1, 0x12, 0x5d, 0x0b, 0x6b, 0xa6, 0x11, 0xb1, 0x30, 0xd4, 0x06, 0x3c, 0x54, 0xd2, 0x40, 0x01, 0xf6, 0x1e, 0x91, 0x79, 0x2c, 0xdc, 0x6f, 0x5b, 0xf0, 0x98, 0x76, 0x26, 0xe5, 0xb1, 0xbf, 0xc7, 0x7d, 0xb3, 0x07, 0x00, 0x61, 0x6a, 0xc8, 0x3b, 0xf0, 0xe3, 0xc3, 0x67, 0xbe, 0xe4, 0xbe, 0x8f, 0x7d, 0xc7, 0xf9, 0x76, 0x07, 0x1a, 0xe7, 0xfd, 0x93, 0xe0, 0xc4, 0x0f, 0xad, 0xf1, 0x34, 0xd8, 0xd8, 0xb6, 0xaf, 0xbb, 0x19, 0x02, 0xd9, 0x31, 0x9a, 0xf9, 0xc1, 0xad, 0x92, 0xc5, 0xc1, 0x1d, 0x54, 0xf4, 0xb7, 0xde, 0xba, 0x27, 0xe6, 0x8d, 0xc7, 0x90, 0xb6, 0x9e, 0xa6, 0xcc, 0x55, 0x37, 0xd1, 0x6c, 0xaa, 0xca, 0x74, 0x71, 0x2d, 0xcf, 0x5d, 0xe9, 0xba, 0x43, 0x23, 0x65, 0x6d, 0x01, 0x17, 0x15, 0x02, 0xb8, 0xc1, 0x37, 0x57, 0xdc, 0x6d, 0xb2, 0xa2, 0x94, 0xf0, 0x8b, 0x59, 0xa4, 0x12, 0x99, 0x69, 0xb0, 0x69, 0xb0, 0x3e, 0x96, 0x1a, 0x4a, 0x35, 0xe2, 0x2b, 0x4d, 0x62, 0x76, 0x5a, 0xba, 0xd1, 0xc9, 0xe5, 0x22, 0xd9, 0x66, 0xef, 0xc2, 0xd9, 0x2e, 0xa0, 0x28, 0x36, 0x52, 0x60, 0x9b, 0x02, 0xd8, 0xc8, 0xec, 0x81, 0x7e, 0xc0, 0x42, 0xaa, 0xd0, 0x9f, 0x22, 0xde, 0x81, 0xca, 0xac, 0xa6, 0xb2, 0x1d, 0xe5, 0x30, 0xc8, 0x4d, 0x38, 0x9b, 0x84, 0x6a, 0xa6, 0x61, 0x07, 0xf5, 0x31, 0x2d, 0xe7, 0x1a, 0xee, 0x8a, 0x88, 0x4a, 0xa6, 0xd3, 0xa2, 0x71, 0xbd, 0x22, 0xda, 0xc8, 0xda, 0xe4, 0x19, 0x5d, 0x11, 0x10, 0xd1, 0xdc, 0xf5, 0x25, 0x53, 0x60, 0x74, 0x85, 0x35, 0x39, 0xd3, 0x92, 0x09, 0x86, 0x28, 0xca, 0x4e, 0xa2, 0xd5, 0x6d, 0x77, 0xf9, 0xb2, 0xb9, 0x9c, 0xe1, 0x7f, 0x87, 0x07, 0x3e, 0x87, 0xef, 0xf0, 0x36, 0x8c, 0x1f, 0x2c, 0x0f, 0xbc, 0x80, 0xd2, 0x21, 0xfe, 0x01, 0x1e, 0xc5, 0xdb, 0xbb, 0x64, 0xdd, 0x08, 0xa7, 0x19, 0xb0, 0xe3, 0x4e, 0x0b, 0xce, 0x78, 0x41, 0x95, 0x48, 0x75, 0x01, 0x3e, 0xd9, 0x35, 0x44, 0xa0, 0xa9, 0x29, 0x94, 0x97, 0x75, 0xd7, 0x51, 0x31, 0x50, 0x85, 0x8d, 0x84, 0x38, 0xd7, 0xc9, 0xa4, 0x55, 0xd9, 0x3a, 0xa7, 0xf9, 0x77, 0x59, 0xaa, 0x93, 0xac, 0x30, 0x71, 0x92, 0xa4, 0x56, 0xe7, 0xab, 0x75, 0x26, 0x0a, 0x49, 0x43, 0x6b, 0x83, 0x95, 0x49, 0x32, 0x7e, 0x26, 0x44, 0x06, 0x32, 0x9d, 0xc4, 0xb1, 0x5c, 0xc8, 0x24, 0x5d, 0x2c, 0xc3, 0xf9, 0x8b, 0xd3, 0xe2, 0x59, 0xf7, 0x0a, 0x00, 0x64, 0x17, 0x8c, 0xd0, 0x57, 0xb0, 0x1d, 0x06, 0x3e, 0x6c, 0xe8, 0xa8, 0x13, 0x1e, 0x71, 0xfc, 0x64, 0x52, 0xce, 0xc2, 0x12, 0xcd, 0x74, 0x0c, 0xe8, 0x46, 0x08, 0x13, 0x7c, 0x9f, 0xee, 0x66, 0x6b, 0x5c, 0x69, 0xc4, 0x04, 0x89, 0x6b, 0x57, 0x23, 0xec, 0xb4, 0x68, 0x3b, 0x63, 0x74, 0x59, 0x94, 0xbc, 0x34, 0xa5, 0xae, 0x1a, 0xa1, 0x5b, 0x45, 0x13, 0x4d, 0xdb, 0x36, 0x51, 0x94, 0xd3, 0x8f, 0x52, 0xb1, 0x32, 0xe9, 0x32, 0x65, 0x5a, 0x27, 0x72, 0x71, 0xb3, 0xcb, 0xfe, 0xec, 0xb4, 0x78, 0xe6, 0x64, 0x0b, 0x86, 0x20, 0xdc, 0xf3, 0xc3, 0xc8, 0xa9, 0xe6, 0x83, 0xf7, 0xc3, 0x86, 0xf9, 0x07, 0xeb, 0x7d, 0x32, 0x29, 0x57, 0x94, 0x82, 0xe8, 0x8b, 0x39, 0x1e, 0xbc, 0xbf, 0x65, 0x66, 0xce, 0xf1, 0xdb, 0x63, 0x96, 0xc7, 0x15, 0x32, 0x2a, 0xe0, 0x5f, 0x45, 0x47, 0x82, 0xa6, 0xe1, 0xda, 0x72, 0x25, 0x63, 0x20, 0xdf, 0xb4, 0xb0, 0x36, 0x21, 0x9b, 0x13, 0xe0, 0xdf, 0x08, 0x87, 0x09, 0xa2, 0x5e, 0x24, 0x99, 0x4c, 0x5e, 0xcc, 0x2f, 0xde, 0x79, 0x90, 0x3f, 0x39, 0x4d, 0x6f, 0x2f, 0xaf, 0xae, 0xa8, 0x40, 0xee, 0xd6, 0xe3, 0x1e, 0xdc, 0x71, 0x78, 0x5b, 0x57, 0x7b, 0x20, 0x8e, 0x1d, 0xfa, 0xd4, 0xfc, 0xe2, 0x92, 0xa9, 0x19, 0xa4, 0xab, 0x1c, 0xbc, 0x52, 0x4e, 0x49, 0x74, 0x40, 0x1b, 0xbd, 0x58, 0x86, 0xe7, 0x8b, 0x48, 0x03, 0xe4, 0x2e, 0xce, 0x93, 0xb3, 0xe5, 0x72, 0xb5, 0xbc, 0x88, 0x23, 0x8f, 0xad, 0x52, 0xf1, 0xe2, 0x7c, 0x29, 0xd3, 0xd0, 0x3f, 0x0f, 0x3f, 0xcf, 0x3b, 0x6e, 0x4f, 0xd3, 0x1b, 0xc9, 0x36, 0xdc, 0x79, 0xdc, 0x5f, 0x57, 0xbb, 0xbb, 0xa9, 0xab, 0x75, 0x75, 0x05, 0x67, 0x02, 0x54, 0x8a, 0xc6, 0xce, 0x1d, 0x1f, 0x82, 0xae, 0x57, 0x54, 0x5a, 0x0b, 0x01, 0xc4, 0x11, 0xcd, 0xbf, 0x9d, 0x7b, 0x3f, 0x0f, 0x56, 0xcb, 0xef, 0xcf, 0x83, 0x17, 0x4f, 0x9f, 0xbc, 0x98, 0x87, 0x4f, 0xbf, 0xa1, 0x0e, 0x4f, 0x3f, 0x48, 0xbf, 0x4b, 0xf9, 0xfd, 0xbd, 0x80, 0xf7, 0xcb, 0xf6, 0x1f, 0x9f, 0xe6, 0xf9, 0x2f, 0x5f, 0xbd, 0x9c, 0xd1, 0x9c, 0x13, 0x46, 0x05, 0x49, 0x1e, 0xef, 0x37, 0xbd, 0x1f, 0xec, 0x07, 0xc4, 0xea, 0x6d, 0xc0, 0x3c, 0x18, 0x0d, 0xc0, 0x7f, 0xb8, 0x0f, 0x81, 0x4c, 0xf6, 0x24, 0x95, 0x3d, 0x96, 0xa3, 0xba, 0xa6, 0x25, 0xe7, 0x16, 0xe9, 0x04, 0xe2, 0x78, 0xf5, 0x4d, 0xdb, 0x1e, 0xcf, 0x66, 0xa8, 0xc7, 0xda, 0x35, 0x45, 0xaa, 0x42, 0x36, 0xd3, 0xfc, 0xa7, 0x86, 0xae, 0x11, 0x05, 0xf8, 0xa0, 0xa9, 0x20, 0x4d, 0xcb, 0x1b, 0xb8, 0x14, 0x5d, 0x67, 0x05, 0xdd, 0x10, 0x53, 0xe4, 0x67, 0x55, 0x96, 0xa5, 0x4b, 0xba, 0xa0, 0x0e, 0x1c, 0x2d, 0xbb, 0x70, 0x7d, 0xc8, 0xa7, 0x7a, 0x7e, 0x92, 0x8b, 0xed, 0xa8, 0xe8, 0x83, 0xf5, 0xbb, 0xbe, 0x07, 0x62, 0xe4, 0xe1, 0x6e, 0xb7, 0x1f, 0xb7, 0x03, 0xe3, 0xfd, 0xc1, 0xe3, 0x03, 0x35, 0xd2, 0xed, 0x47, 0x2a, 0x27, 0xdb, 0x86, 0xdb, 0x1b, 0x2a, 0x7a, 0x26, 0x0b, 0x23, 0xcb, 0x2a, 0x12, 0x55, 0xfc, 0x0d, 0x93, 0x3c, 0x65, 0x7c, 0xc5, 0xdc, 0x45, 0x3e, 0x4a, 0x4f, 0x0d, 0x23, 0x5a, 0xd3, 0x24, 0xb6, 0xba, 0x91, 0x96, 0x0a, 0x97, 0x5a, 0x8b, 0xcf, 0x5b, 0x93, 0xb5, 0x65, 0x5b, 0x68, 0x66, 0x74, 0xa6, 0x5b, 0xc0, 0xa9, 0xda, 0x16, 0x00, 0x22, 0x40, 0x23, 0x19, 0x68, 0x4e, 0x59, 0xd2, 0x81, 0x1a, 0x15, 0xbb, 0xaf, 0x52, 0x49, 0x05, 0xb6, 0xfc, 0xb4, 0x7d, 0x76, 0xd5, 0xbe, 0x9c, 0xed, 0xa9, 0xda, 0xa3, 0x97, 0xd4, 0x4b, 0xec, 0xb9, 0xb3, 0x4e, 0x38, 0x49, 0xa0, 0x2c, 0xe8, 0x2b, 0x08, 0xee, 0xf1, 0x92, 0x30, 0xd6, 0xb3, 0x8c, 0xcb, 0x35, 0xc0, 0x0b, 0x74, 0xb3, 0xae, 0xe7, 0xe4, 0x43, 0xbe, 0xca, 0x6d, 0x9e, 0xe7, 0x99, 0xeb, 0x0a, 0xd1, 0xc2, 0xd0, 0xe4, 0x03, 0x8a, 0xdb, 0x1e, 0x5d, 0x19, 0xa9, 0x33, 0xba, 0x36, 0xba, 0x6a, 0x68, 0xb8, 0x9e, 0x31, 0x41, 0x1a, 0x2b, 0x99, 0xd1, 0xf5, 0x57, 0x11, 0xcd, 0x25, 0x83, 0xed, 0x72, 0x0e, 0x4a, 0x96, 0x88, 0x64, 0x1e, 0xc5, 0x9c, 0x2f, 0x97, 0x17, 0xe9, 0xfd, 0xfe, 0xf1, 0xd1, 0x3a, 0x23, 0xd9, 0x00, 0xa9, 0xf6, 0xe3, 0xde, 0x32, 0x3e, 0x72, 0x2f, 0xa0, 0x4a, 0xa4, 0x71, 0x0f, 0xf7, 0x0f, 0x94, 0x6c, 0xa1, 0xc9, 0x7b, 0xbd, 0xe4, 0x99, 0x74, 0x87, 0x9e, 0x84, 0x1e, 0xed, 0x9a, 0xee, 0x92, 0xb3, 0x79, 0x26, 0x26, 0x54, 0x3c, 0xd5, 0x81, 0x14, 0xb5, 0x4a, 0xf2, 0x0b, 0x6a, 0x73, 0x57, 0x2b, 0xc5, 0x1b, 0x9d, 0xb7, 0x25, 0x3e, 0xd5, 0x08, 0x6f, 0x46, 0xeb, 0xa8, 0x35, 0x16, 0x91, 0xd9, 0x24, 0x42, 0xc4, 0x89, 0xe1, 0x91, 0xd2, 0x2a, 0x59, 0x72, 0x91, 0xf2, 0x17, 0x62, 0x11, 0x2e, 0xc3, 0x34, 0x9c, 0xc7, 0x61, 0x72, 0xf7, 0xf0, 0xfd, 0xb1, 0xa5, 0x12, 0xed, 0xd5, 0xe5, 0x0c, 0xf8, 0x09, 0x08, 0x03, 0xf1, 0x79, 0x04, 0x18, 0x76, 0x29, 0x01, 0x7a, 0x05, 0xbf, 0xc8, 0xf6, 0x6f, 0x11, 0x97, 0x7b, 0xe5, 0xed, 0x82, 0x9d, 0x4b, 0x1d, 0x9c, 0x01, 0x4e, 0xac, 0xa7, 0x6b, 0x12, 0x04, 0xc0, 0x95, 0x92, 0x4d, 0x9d, 0x4d, 0x4e, 0x5f, 0x11, 0x00, 0x4e, 0x32, 0xa5, 0x41, 0xa2, 0x73, 0x77, 0x4e, 0x4d, 0xd7, 0x39, 0x16, 0xb0, 0x5c, 0xd7, 0x95, 0x24, 0x8d, 0xad, 0x4a, 0x46, 0x05, 0x07, 0x26, 0xb1, 0x9a, 0xd3, 0x38, 0x39, 0xa0, 0x7b, 0x9b, 0xf2, 0xe4, 0x4c, 0x26, 0x51, 0xfa, 0x65, 0xfc, 0xdc, 0x0f, 0x63, 0x9e, 0x46, 0xdf, 0xbe, 0xb7, 0xc5, 0x1e, 0x5b, 0x2a, 0x41, 0x62, 0x41, 0xa6, 0x1d, 0xa5, 0x08, 0x40, 0x9a, 0x0f, 0xd4, 0xdd, 0x7e, 0x60, 0x7b, 0x00, 0x2b, 0x4e, 0xe8, 0x8a, 0xbb, 0x26, 0x11, 0x0e, 0x2c, 0x72, 0x4c, 0x25, 0xc8, 0x91, 0x7a, 0x46, 0xdc, 0xd1, 0x3b, 0x50, 0xa3, 0x75, 0x30, 0x3f, 0xd3, 0x53, 0xb6, 0x71, 0x5d, 0xbf, 0x3b, 0xf9, 0x74, 0x2d, 0xaa, 0xda, 0x5d, 0x15, 0xe8, 0x26, 0xcc, 0x74, 0xba, 0xe6, 0x08, 0xce, 0xa6, 0x69, 0xd3, 0x50, 0x68, 0x62, 0xd0, 0x2b, 0xad, 0x0a, 0x5b, 0x94, 0x80, 0x21, 0x4c, 0xcf, 0x23, 0xc6, 0xf4, 0x02, 0xee, 0xe2, 0x69, 0x26, 0x05, 0x97, 0xcf, 0x63, 0xfe, 0x5e, 0x61, 0xdc, 0xa3, 0xb1, 0xd5, 0xd5, 0xe5, 0x9b, 0xe6, 0x7a, 0x36, 0xec, 0xa9, 0xd8, 0xc3, 0x0f, 0xc6, 0x71, 0x4b, 0x1d, 0x9d, 0x87, 0xd0, 0xf6, 0xe1, 0x01, 0xc6, 0xc7, 0xed, 0x3d, 0xf5, 0x1f, 0xae, 0xa9, 0x82, 0x0e, 0x06, 0x73, 0x5b, 0xf3, 0xb5, 0x6b, 0xa7, 0x68, 0xa6, 0x5c, 0x41, 0x57, 0xd3, 0xcc, 0x46, 0x8a, 0xfd, 0x5d, 0x81, 0x77, 0x74, 0x3a, 0xdd, 0x16, 0xb6, 0x5b, 0xe3, 0x5b, 0x57, 0x77, 0x45, 0x97, 0x77, 0x35, 0x2f, 0x1b, 0x5b, 0xaa, 0x26, 0x93, 0x99, 0x52, 0x85, 0x49, 0x65, 0xa5, 0xd2, 0x34, 0xcf, 0x21, 0x9b, 0x88, 0xc4, 0xc2, 0x86, 0xf1, 0x79, 0x14, 0xd1, 0xdd, 0x4c, 0x71, 0x1c, 0x2f, 0xbe, 0x3c, 0xcd, 0xd7, 0x5f, 0x5d, 0x5d, 0x23, 0x46, 0x6f, 0x7b, 0x6c, 0x9b, 0x4d, 0xef, 0x51, 0x35, 0x3e, 0xd5, 0xe6, 0xd3, 0x60, 0x0d, 0xc4, 0x62, 0xbb, 0x01, 0xc2, 0xf2, 0x2c, 0xb8, 0xcb, 0x70, 0xb7, 0x4c, 0xfa, 0x69, 0xf2, 0x7d, 0xc2, 0x58, 0xcc, 0x9e, 0x31, 0x11, 0x5e, 0x78, 0x0b, 0xbe, 0x5a, 0x71, 0xac, 0x79, 0xbc, 0x08, 0x96, 0x0b, 0x99, 0xb2, 0x05, 0x1d, 0x7f, 0xad, 0x98, 0x8e, 0xa5, 0x5c, 0x71, 0x26, 0xb8, 0xa0, 0xb2, 0x52, 0x43, 0x57, 0xa8, 0x29, 0xce, 0x4d, 0xb2, 0xc0, 0xf7, 0x54, 0x03, 0xcd, 0x73, 0x9a, 0xa1, 0x8c, 0x97, 0x3e, 0x40, 0xbd, 0x8e, 0xd8, 0x33, 0x3f, 0x7e, 0x3e, 0xbf, 0xe0, 0xcb, 0x90, 0x31, 0x9e, 0xae, 0x2e, 0x4e, 0xf4, 0x1b, 0x90, 0xcb, 0x0f, 0x0e, 0x43, 0xbf, 0x1f, 0xa1, 0x25, 0xb6, 0x81, 0xd3, 0x87, 0x53, 0xdc, 0x53, 0xc1, 0x0e, 0x3c, 0xfc, 0x48, 0x19, 0x91, 0xc3, 0x18, 0xd8, 0xfd, 0x9d, 0x5e, 0x0a, 0xef, 0xec, 0xa9, 0x7c, 0x21, 0xd2, 0x95, 0x08, 0x57, 0x0b, 0xb1, 0x4a, 0x98, 0x14, 0x11, 0x8b, 0xd2, 0x28, 0x96, 0x11, 0x20, 0x52, 0xba, 0x60, 0x71, 0x82, 0x3d, 0x24, 0x45, 0xba, 0x90, 0x2a, 0x8d, 0xce, 0x69, 0x96, 0x26, 0x3c, 0x83, 0xc6, 0xc7, 0x2b, 0x96, 0x48, 0x7e, 0xc1, 0x41, 0x98, 0x23, 0xb1, 0x52, 0xf8, 0xcb, 0x24, 0x35, 0xc3, 0x5f, 0x53, 0x09, 0xdc, 0xe2, 0x92, 0xaf, 0x96, 0x2f, 0xe2, 0x68, 0x95, 0xc2, 0x0e, 0xe3, 0x87, 0xb8, 0xf4, 0x43, 0xfa, 0x7a, 0xfd, 0x66, 0xb6, 0x9b, 0x1c, 0x43, 0x3f, 0xc2, 0x81, 0x4c, 0xaf, 0xfa, 0x70, 0xd8, 0x1d, 0x9d, 0xc5, 0xde, 0xd9, 0x9f, 0x17, 0x0e, 0x37, 0xde, 0x03, 0xfe, 0x7f, 0x78, 0x9a, 0xc6, 0x80, 0x77, 0x42, 0x02, 0xf4, 0xd2, 0x58, 0x82, 0x69, 0x06, 0x76, 0x4b, 0xd7, 0xae, 0xb4, 0xf0, 0x1c, 0x79, 0x41, 0x0d, 0x67, 0x88, 0x67, 0x35, 0x2b, 0x98, 0x21, 0x8f, 0x2e, 0x54, 0x69, 0x69, 0x0c, 0x32, 0xfe, 0x09, 0x54, 0x29, 0x59, 0xa2, 0xa4, 0x4c, 0x5d, 0xdb, 0x59, 0x6c, 0x42, 0xaa, 0x58, 0x62, 0x6e, 0x3e, 0xb6, 0x4c, 0x8c, 0x04, 0xc4, 0xa7, 0xde, 0xf9, 0x07, 0x8b, 0x25, 0x1e, 0xd2, 0xd7, 0x6b, 0x6a, 0xc4, 0xf2, 0x47, 0x4b, 0x27, 0xb7, 0x32, 0x84, 0x8f, 0x60, 0x7b, 0xe6, 0xda, 0xca, 0xf0, 0xc4, 0xe8, 0xe8, 0xe2, 0x2d, 0x15, 0x9b, 0x3a, 0xcf, 0xa8, 0xd9, 0x82, 0xb9, 0x69, 0x93, 0x65, 0x3d, 0x9d, 0x75, 0x4e, 0xae, 0xf0, 0x05, 0x49, 0xa5, 0xdd, 0x85, 0xcd, 0xf8, 0x36, 0xe5, 0x4f, 0xa7, 0x06, 0x33, 0x7a, 0xb2, 0x75, 0x5c, 0xb7, 0xdc, 0x34, 0x99, 0x6b, 0x78, 0x41, 0x28, 0x6b, 0x74, 0x9b, 0x59, 0x61, 0x4a, 0x45, 0x77, 0xa2, 0x47, 0xc6, 0x0d, 0x0a, 0x15, 0x2f, 0x52, 0x45, 0xad, 0x77, 0x30, 0x53, 0x84, 0xbe, 0xd3, 0xf4, 0xf5, 0x8a, 0x12, 0xde, 0xd4, 0xbe, 0xee, 0x21, 0x42, 0x53, 0xd7, 0x1c, 0x7d, 0x01, 0xe9, 0x0f, 0xe1, 0xf6, 0xc0, 0x06, 0x7b, 0xc0, 0xeb, 0x3d, 0xd5, 0xee, 0xd8, 0xd1, 0xee, 0x46, 0x3a, 0x60, 0xea, 0xc3, 0xd1, 0xeb, 0xcf, 0xb0, 0xdb, 0x6f, 0xa6, 0x1e, 0xbb, 0x6b, 0x05, 0x8f, 0xe5, 0x55, 0xc7, 0x12, 0xc6, 0xe6, 0x58, 0xda, 0x48, 0x03, 0x9d, 0xdd, 0x58, 0xe4, 0xb6, 0xd4, 0xba, 0x74, 0x9d, 0xee, 0x25, 0xd8, 0x9b, 0xfb, 0x17, 0xc6, 0xc1, 0xad, 0x96, 0x2e, 0xef, 0x2d, 0xe3, 0x9a, 0xa6, 0xac, 0xe5, 0x2d, 0xdd, 0x7a, 0xb5, 0x04, 0xee, 0x48, 0xb1, 0xa2, 0xa7, 0x95, 0x40, 0x3b, 0xb9, 0xa8, 0x33, 0xda, 0x43, 0x3c, 0x66, 0xd6, 0x7a, 0x3b, 0x77, 0x44, 0xcb, 0x6c, 0xc0, 0x36, 0xac, 0xb7, 0x3e, 0xa3, 0x03, 0x50, 0xaa, 0x74, 0xa1, 0x79, 0x2e, 0x3e, 0x43, 0x08, 0x83, 0x57, 0xe9, 0xd9, 0x19, 0xb5, 0x2a, 0x11, 0x6f, 0x81, 0x47, 0x73, 0x25, 0x56, 0xd4, 0x8e, 0x45, 0x37, 0xe0, 0x4c, 0x15, 0x13, 0xf5, 0xf1, 0xbc, 0x89, 0x5a, 0x0c, 0x8e, 0x6d, 0x3e, 0x79, 0x07, 0xde, 0xec, 0xa6, 0xbf, 0x5a, 0x77, 0x71, 0x60, 0x65, 0x6b, 0x6d, 0x6c, 0x5b, 0xb9, 0x11, 0x4d, 0x75, 0x66, 0xb3, 0xbc, 0xc9, 0xe8, 0x1c, 0xc6, 0x0a, 0x5d, 0xc0, 0xbe, 0xf9, 0x7b, 0x0d, 0x81, 0x8f, 0xce, 0xe9, 0xbc, 0xba, 0xbe, 0xbc, 0x7a, 0x3d, 0x1b, 0xb6, 0x5e, 0xb0, 0xdd, 0xb0, 0xad, 0x1d, 0x03, 0x18, 0xf7, 0xc1, 0x3f, 0xec, 0xb7, 0x7b, 0xc6, 0xb7, 0x3e, 0x0b, 0x25, 0xe7, 0xdb, 0x03, 0x8c, 0x34, 0x00, 0x63, 0x07, 0x59, 0xc3, 0x42, 0x5a, 0xc6, 0xac, 0x94, 0x67, 0xf1, 0x63, 0x33, 0x34, 0x8f, 0x7f, 0x9c, 0x5c, 0xde, 0xd2, 0xbe, 0x7a, 0xd3, 0xcc, 0x02, 0x9f, 0xb3, 0x7d, 0x48, 0x60, 0x69, 0xb3, 0xd9, 0x41, 0x3c, 0x2a, 0x73, 0xd9, 0xef, 0xb6, 0x83, 0xe5, 0x34, 0x33, 0x0a, 0x9b, 0xea, 0x03, 0xb4, 0xf8, 0x14, 0xd0, 0x07, 0x36, 0xa3, 0x45, 0x64, 0x4c, 0xb4, 0x12, 0x8b, 0x1c, 0xd8, 0x4f, 0x2a, 0x60, 0x61, 0x99, 0xb0, 0x50, 0x3c, 0x5f, 0xae, 0xe0, 0xaf, 0x79, 0x9a, 0xa6, 0x31, 0x51, 0x3c, 0x31, 0x57, 0xd1, 0x62, 0x31, 0x4f, 0x56, 0x0b, 0x1b, 0x5b, 0x19, 0x2e, 0x93, 0x78, 0xb9, 0xf4, 0x2e, 0xbe, 0x39, 0x3f, 0xf3, 0xc1, 0xd5, 0xa2, 0x44, 0x2e, 0x5f, 0xdc, 0x9b, 0x1e, 0xfe, 0x8c, 0xe3, 0xe9, 0x87, 0x2c, 0x12, 0xb2, 0xe1, 0x17, 0x07, 0x54, 0x0a, 0x36, 0xdb, 0x80, 0x33, 0xbb, 0xdf, 0xdb, 0x61, 0x47, 0xca, 0xb2, 0x76, 0xe4, 0x8c, 0x86, 0xef, 0x1c, 0xde, 0x9d, 0x2e, 0x6d, 0xa6, 0x05, 0x08, 0x9e, 0x32, 0x10, 0xfa, 0x04, 0x28, 0x22, 0x7a, 0x01, 0x6e, 0x96, 0x64, 0x71, 0x66, 0xc4, 0x42, 0x9d, 0xb1, 0x65, 0x2c, 0x13, 0x39, 0x07, 0x24, 0x4a, 0xe2, 0xbc, 0xd0, 0xa9, 0xe5, 0x73, 0x20, 0x5e, 0x1e, 0x73, 0xb6, 0xd4, 0x29, 0x5d, 0x82, 0x99, 0x67, 0x3a, 0x4a, 0xec, 0x52, 0x67, 0x09, 0xc7, 0x3a, 0xcc, 0x29, 0x34, 0x44, 0xc9, 0x47, 0xba, 0x39, 0x21, 0xdb, 0xbf, 0x3c, 0xcd, 0x8b, 0xd0, 0x94, 0x42, 0x46, 0x73, 0x19, 0x7b, 0xeb, 0x59, 0xe0, 0xab, 0x0d, 0x15, 0xe4, 0x6f, 0x29, 0x53, 0x35, 0x50, 0xc3, 0x20, 0xeb, 0xf9, 0xa1, 0xef, 0x3d, 0x06, 0x2d, 0x32, 0xec, 0x43, 0x30, 0xb6, 0x9b, 0x31, 0x12, 0x80, 0x55, 0x99, 0xbb, 0x67, 0xd3, 0xc1, 0xa9, 0xa9, 0xeb, 0xb1, 0x9d, 0x4e, 0xe0, 0x27, 0x60, 0x35, 0x95, 0xbd, 0x38, 0x7e, 0x3d, 0xdd, 0xd8, 0xd9, 0x16, 0x1d, 0x0d, 0xa6, 0xa1, 0xd1, 0x19, 0x05, 0xdd, 0xf5, 0x42, 0xd3, 0x09, 0x5b, 0xb0, 0x99, 0x22, 0xa5, 0x24, 0x88, 0x05, 0xd8, 0x8a, 0xa8, 0xa4, 0x87, 0x89, 0x25, 0xcd, 0x35, 0x39, 0xd1, 0xeb, 0x93, 0x5c, 0x36, 0xd8, 0xc0, 0x2b, 0x42, 0x63, 0x76, 0x3f, 0x86, 0x34, 0x68, 0x66, 0xb7, 0xa3, 0x62, 0xb8, 0xfd, 0x06, 0x40, 0x18, 0x44, 0x86, 0x26, 0x5d, 0x79, 0xfb, 0x7e, 0xef, 0xd3, 0x2d, 0xed, 0x47, 0xb9, 0xca, 0xdc, 0x8d, 0x34, 0x71, 0x45, 0x2e, 0xc7, 0x5f, 0xbb, 0x71, 0xbe, 0x83, 0x6a, 0x1c, 0xdb, 0x7c, 0xed, 0x06, 0x2b, 0x3b, 0xde, 0x09, 0xba, 0x45, 0x77, 0xbe, 0xb5, 0xad, 0xbb, 0x93, 0xd3, 0xd2, 0xc8, 0x16, 0xc7, 0x3d, 0xab, 0xa6, 0xa5, 0xe1, 0xc9, 0xba, 0x6e, 0x33, 0xba, 0xbc, 0x35, 0x2f, 0x2d, 0x82, 0x1d, 0xf1, 0x19, 0x95, 0x2e, 0x0c, 0x75, 0xee, 0x9f, 0xa6, 0xaf, 0xeb, 0xeb, 0xeb, 0x99, 0xa5, 0x5f, 0x1d, 0xe4, 0x92, 0x46, 0x0f, 0xb0, 0x71, 0xf0, 0x7a, 0xa0, 0xf8, 0x70, 0xc3, 0x06, 0xec, 0x37, 0x18, 0x28, 0xa1, 0xe1, 0xf7, 0xb3, 0x21, 0xe4, 0x1d, 0xeb, 0x6c, 0x92, 0x06, 0x7e, 0xfb, 0xed, 0x74, 0x32, 0x37, 0xb5, 0xab, 0x51, 0x05, 0x0d, 0x50, 0xd6, 0x6e, 0xd6, 0x77, 0xe3, 0x40, 0xa3, 0x36, 0x45, 0x9b, 0xb7, 0xc2, 0x5d, 0x65, 0x67, 0x5b, 0xea, 0xa2, 0xa0, 0x6b, 0x77, 0x5c, 0xef, 0xa6, 0xa6, 0x06, 0xf1, 0x24, 0xd2, 0x2c, 0xc1, 0xb6, 0x55, 0x34, 0x34, 0x99, 0x36, 0xe9, 0x32, 0x4c, 0x4e, 0xdb, 0x63, 0x24, 0xd7, 0x6e, 0xeb, 0xef, 0x0e, 0x07, 0x3b, 0x1c, 0x46, 0x82, 0xf8, 0x80, 0xf4, 0xfd, 0xc8, 0xfc, 0x81, 0x46, 0x4a, 0x6c, 0x3d, 0x3f, 0xd8, 0x05, 0x5b, 0xf0, 0xb2, 0x77, 0x60, 0x18, 0x2e, 0x46, 0x3e, 0x7b, 0xc1, 0xbe, 0x7c, 0xf1, 0xc5, 0x4f, 0xbe, 0x3c, 0x8b, 0x9e, 0xac, 0xa2, 0x27, 0xdf, 0x3c, 0x49, 0x7e, 0xfa, 0xdd, 0xf2, 0x67, 0xdf, 0xc7, 0x5f, 0x7d, 0xb5, 0x80, 0xb1, 0x7e, 0xf3, 0x39, 0xf9, 0x9a, 0x1f, 0xe1, 0x1b, 0x1f, 0xaf, 0xb3, 0x37, 0xd7, 0x33, 0xa2, 0x2d, 0x00, 0x17, 0xde, 0xe8, 0xef, 0xa9, 0x7c, 0xcc, 0xc1, 0x8c, 0xb0, 0x47, 0x7c, 0x83, 0x37, 0xbc, 0xc1, 0x1f, 0xd3, 0xab, 0xde, 0x65, 0x8b, 0xad, 0x7c, 0x9a, 0x00, 0x26, 0x66, 0x86, 0x3a, 0xa8, 0xea, 0x9a, 0x1b, 0x55, 0x5b, 0xb9, 0x5c, 0xa9, 0x95, 0xe5, 0x45, 0x2d, 0x35, 0x16, 0x5e, 0xf2, 0xa5, 0x05, 0xb8, 0x32, 0x94, 0x36, 0x8c, 0x78, 0x2c, 0x12, 0xcb, 0xa9, 0x4b, 0x5f, 0x81, 0x4e, 0x2e, 0xb2, 0x38, 0x5d, 0x62, 0x17, 0xd1, 0x13, 0xa7, 0xbb, 0x47, 0xd3, 0x78, 0x85, 0x7f, 0x90, 0xa4, 0xea, 0x09, 0x78, 0xd9, 0x4a, 0x24, 0xf1, 0x0a, 0x3c, 0x5a, 0xc4, 0xe7, 0xa7, 0xed, 0x31, 0x92, 0x6b, 0x4a, 0xd1, 0x7b, 0xbb, 0x90, 0x8e, 0xa8, 0xdf, 0x65, 0xec, 0xb7, 0xcc, 0xdf, 0x3a, 0x90, 0xd8, 0x07, 0x37, 0x9f, 0x79, 0x21, 0xf3, 0x7d, 0x2a, 0x8f, 0x2b, 0x16, 0xa5, 0xb5, 0xeb, 0xca, 0x66, 0x22, 0xa6, 0x4a, 0xdf, 0x95, 0x50, 0x72, 0xa9, 0x52, 0x29, 0x33, 0x6d, 0x65, 0x3a, 0xd7, 0x4a, 0x03, 0x36, 0x66, 0x32, 0x67, 0x94, 0xc7, 0x66, 0x4d, 0x9e, 0x97, 0x70, 0x06, 0x2c, 0x4c, 0x75, 0xca, 0x97, 0x71, 0x24, 0xd9, 0x0a, 0x90, 0x5f, 0x18, 0xaa, 0xf6, 0x43, 0x50, 0xa6, 0xee, 0x77, 0xc0, 0x48, 0x09, 0xd0, 0x18, 0xa7, 0x0b, 0xd0, 0xb1, 0x90, 0x89, 0xf7, 0xcb, 0xc8, 0x1e, 0x1d, 0xa9, 0xdf, 0xd0, 0xcb, 0x99, 0x17, 0xec, 0xa7, 0xfe, 0x9d, 0x61, 0xe7, 0x0e, 0x61, 0xf0, 0xd2, 0xb5, 0xf5, 0x78, 0xf4, 0x03, 0xef, 0xbd, 0x07, 0xf5, 0xe2, 0x8e, 0xbf, 0x15, 0x73, 0x7b, 0xac, 0x35, 0x3e, 0x9a, 0x71, 0xbe, 0x01, 0xb4, 0x7b, 0x39, 0xdb, 0xf0, 0x49, 0x2f, 0xbe, 0x3b, 0x71, 0x91, 0x1b, 0x2b, 0x09, 0xeb, 0x03, 0xf5, 0x33, 0x6f, 0xeb, 0x8d, 0x9b, 0xd1, 0x4e, 0x87, 0x32, 0x07, 0x7a, 0xa2, 0x96, 0x4f, 0x6f, 0x38, 0x4b, 0xb9, 0x5c, 0xd1, 0xd5, 0x35, 0x85, 0x8a, 0x0a, 0x99, 0xad, 0x96, 0x2a, 0xcb, 0xb5, 0x92, 0xa0, 0xc7, 0xc6, 0xca, 0x15, 0x18, 0xbf, 0x62, 0x41, 0x92, 0xa4, 0x91, 0x48, 0x41, 0x73, 0x44, 0x44, 0xef, 0x35, 0x17, 0x60, 0x96, 0x66, 0x95, 0x4a, 0xb6, 0x94, 0xcb, 0x3c, 0x66, 0x9c, 0xa9, 0x55, 0x12, 0x72, 0xbd, 0xe2, 0xc9, 0x32, 0x8c, 0x89, 0xc1, 0x44, 0x71, 0x1c, 0x45, 0xa9, 0x78, 0xbe, 0x48, 0x56, 0xe1, 0x93, 0x0f, 0xef, 0xc3, 0x7c, 0x9c, 0x64, 0x97, 0xd7, 0xed, 0xeb, 0x19, 0xf3, 0xbd, 0x91, 0x66, 0x56, 0xf5, 0x41, 0x4f, 0x10, 0x32, 0x18, 0xb7, 0x3d, 0x35, 0x60, 0x8d, 0x9e, 0x9b, 0x65, 0x35, 0xee, 0x07, 0x68, 0xaf, 0x77, 0xb3, 0x41, 0xf6, 0xfe, 0xe8, 0xf7, 0x43, 0x70, 0x78, 0x1a, 0x5f, 0xcc, 0x97, 0x17, 0x17, 0x61, 0x0a, 0x7e, 0x95, 0x9d, 0xe7, 0xcb, 0x4c, 0xd1, 0xf9, 0xa4, 0xca, 0x32, 0x93, 0x2b, 0xa3, 0x56, 0x9a, 0x29, 0x56, 0x70, 0x15, 0x01, 0x08, 0xc6, 0xd6, 0x7e, 0xbb, 0xc4, 0x2f, 0x9d, 0x19, 0x9d, 0x83, 0x9e, 0x55, 0x2a, 0xa7, 0x29, 0xca, 0x66, 0x6d, 0xb5, 0xa1, 0xfc, 0x16, 0x0d, 0x6a, 0x59, 0x19, 0x6a, 0x04, 0x37, 0xf1, 0x42, 0x45, 0x3c, 0x8c, 0xb0, 0x35, 0x57, 0xc9, 0xfc, 0xe2, 0x3d, 0xce, 0xf9, 0x78, 0xc9, 0x5e, 0xbd, 0x7e, 0xd9, 0xcd, 0x10, 0xb7, 0xa8, 0xd1, 0x9d, 0x85, 0x63, 0x6f, 0x61, 0x6f, 0x2c, 0x38, 0xf4, 0xc3, 0x01, 0xef, 0x37, 0xc3, 0xe6, 0x23, 0x75, 0xb6, 0x67, 0x59, 0x5e, 0xd1, 0x40, 0xbc, 0xaa, 0x50, 0x6e, 0xd4, 0x46, 0x0b, 0x50, 0x4c, 0x69, 0x81, 0x75, 0xeb, 0x6a, 0x34, 0x3b, 0x4a, 0xa3, 0x76, 0x6e, 0x6a, 0x0b, 0x25, 0x0c, 0x74, 0xdb, 0x55, 0xa2, 0xeb, 0x24, 0xdd, 0x31, 0xac, 0xe8, 0x40, 0x29, 0x52, 0xba, 0x4c, 0x97, 0x86, 0x25, 0x61, 0x01, 0x87, 0xa3, 0xd2, 0x38, 0x4e, 0xc4, 0x93, 0xf4, 0x39, 0x7b, 0xb6, 0x90, 0x51, 0xb4, 0x8c, 0xe7, 0x2f, 0x96, 0x8b, 0x55, 0x78, 0x92, 0x6f, 0xec, 0xc0, 0xcf, 0x66, 0x34, 0x24, 0x97, 0x36, 0xda, 0x96, 0xe1, 0x39, 0xf0, 0x20, 0x1f, 0x24, 0x04, 0x59, 0xf1, 0x47, 0x7a, 0x01, 0x37, 0xb2, 0xdb, 0xd1, 0xe4, 0x46, 0xb6, 0xa3, 0xfe, 0x1f, 0x17, 0xda, 0xce, 0x8a, 0xdc, 0xd5, 0x6b, 0xba, 0x43, 0x89, 0xc2, 0x1c, 0xa1, 0x87, 0x03, 0xee, 0xdf, 0xde, 0xdc, 0x77, 0x39, 0x3d, 0x28, 0x37, 0x5c, 0x9b, 0x92, 0x7a, 0xd1, 0xa6, 0x4a, 0xfd, 0xda, 0x80, 0xa3, 0x95, 0xf3, 0x0c, 0x70, 0x3b, 0x2f, 0x6a, 0x5e, 0xe7, 0xa6, 0xd0, 0x55, 0x59, 0x99, 0xb2, 0x2c, 0x6c, 0x59, 0x64, 0xeb, 0x5c, 0x32, 0x0e, 0xd7, 0xc9, 0x1e, 0xf2, 0xf9, 0x9f, 0xf6, 0x8d, 0x4e, 0x2e, 0xea, 0xe0, 0xe1, 0x03, 0xfd, 0xea, 0x74, 0x58, 0x7b, 0xa0, 0xf4, 0x87, 0x07, 0xe3, 0x0b, 0xe9, 0x45, 0x38, 0x90, 0x70, 0xe3, 0xb0, 0x1d, 0x5d, 0x01, 0xc8, 0xb1, 0x67, 0x84, 0x4e, 0xdc, 0x29, 0xbf, 0x48, 0x87, 0x13, 0xae, 0x80, 0x78, 0x1a, 0x0a, 0x3c, 0x51, 0x96, 0xe9, 0x42, 0xcf, 0x1a, 0xb4, 0x5a, 0x1d, 0x6f, 0x3a, 0x9f, 0xea, 0xc5, 0xea, 0xda, 0xba, 0xfb, 0xf3, 0xca, 0x33, 0x46, 0x87, 0xf4, 0x78, 0x9d, 0x59, 0xdb, 0x81, 0x80, 0x96, 0x94, 0x30, 0xc7, 0x86, 0xb5, 0x05, 0xb6, 0x28, 0x9c, 0xa4, 0x98, 0x4b, 0x08, 0x77, 0x92, 0x25, 0x42, 0xae, 0xd7, 0xdd, 0xd5, 0x8c, 0x07, 0xde, 0xd6, 0xa7, 0xdf, 0x7b, 0x4b, 0xe1, 0x7a, 0x37, 0x04, 0x7d, 0x4f, 0x7d, 0x66, 0x76, 0x87, 0x4d, 0x07, 0x52, 0xed, 0x6d, 0x47, 0xfc, 0x8d, 0x7e, 0xb3, 0x1b, 0x68, 0x12, 0xa5, 0x7b, 0x10, 0x02, 0x29, 0xd6, 0xae, 0x1d, 0x9c, 0xc0, 0x22, 0x59, 0x63, 0xd9, 0xd1, 0xff, 0x5e, 0x97, 0x37, 0x4a, 0xc3, 0xc7, 0xd3, 0x1c, 0xe7, 0x5a, 0x34, 0xae, 0x2c, 0x9a, 0xf2, 0x58, 0x75, 0x69, 0xba, 0xb6, 0xc8, 0x74, 0xd1, 0x56, 0x39, 0x5d, 0xf9, 0x07, 0xf5, 0xa8, 0xbc, 0x02, 0xb1, 0x26, 0x7e, 0x2d, 0xa5, 0xca, 0x59, 0x6c, 0xc2, 0x67, 0x61, 0x70, 0xf1, 0xfc, 0x7c, 0xf5, 0xec, 0xc9, 0x72, 0x79, 0x3e, 0x3f, 0xd5, 0x12, 0xf1, 0x8f, 0xa0, 0x06, 0xd6, 0x6f, 0x19, 0xec, 0xac, 0xa7, 0x86, 0xac, 0xb1, 0x1f, 0x06, 0x2a, 0xfe, 0xf3, 0xf7, 0x63, 0x80, 0xbd, 0xe7, 0xb9, 0xb2, 0x68, 0xb9, 0xbb, 0x3d, 0xb3, 0xf1, 0x0c, 0xe0, 0x6e, 0xcd, 0xdc, 0x6c, 0x54, 0xeb, 0x2e, 0xf7, 0xab, 0xad, 0xa8, 0x45, 0x52, 0xbb, 0x02, 0x09, 0x37, 0x57, 0x8d, 0x98, 0xb6, 0xce, 0xda, 0x1c, 0x6c, 0x9a, 0xac, 0x8f, 0x51, 0xad, 0x44, 0x59, 0xc1, 0x26, 0x9b, 0x0a, 0xc2, 0xc6, 0xd8, 0x8a, 0x12, 0x44, 0xb3, 0x88, 0x5b, 0x15, 0xd3, 0x90, 0x5f, 0x9b, 0x28, 0x9b, 0x16, 0x04, 0xb5, 0x12, 0x91, 0x26, 0x3c, 0x89, 0x4e, 0x1c, 0x89, 0xe4, 0xe4, 0xe2, 0x34, 0xf9, 0x63, 0xdc, 0xec, 0x29, 0x73, 0xda, 0x7b, 0x12, 0xa4, 0x65, 0x38, 0x50, 0x6b, 0x88, 0x1d, 0x06, 0x9a, 0xe5, 0x1b, 0xee, 0x6c, 0x08, 0x34, 0x79, 0xfb, 0x5c, 0x90, 0x6e, 0x4b, 0x59, 0x38, 0x18, 0xec, 0x86, 0xa9, 0xc1, 0xa2, 0x6a, 0xa6, 0x01, 0x21, 0xcd, 0x3a, 0xa7, 0x2b, 0x19, 0x8f, 0x03, 0x25, 0x00, 0x26, 0x8f, 0x37, 0x78, 0x8b, 0x52, 0x1b, 0x42, 0xfa, 0x5a, 0xd0, 0x7b, 0xba, 0xb1, 0x52, 0x03, 0x12, 0x9b, 0xd2, 0xe2, 0x17, 0x88, 0x6d, 0x53, 0x36, 0x2b, 0xd3, 0xda, 0xb4, 0x54, 0x45, 0xc9, 0xec, 0x6a, 0xae, 0x14, 0x4f, 0xf8, 0xa9, 0x96, 0x78, 0x49, 0x97, 0x7c, 0xd3, 0x10, 0x13, 0xd6, 0x87, 0xe1, 0x16, 0xf6, 0x36, 0x3d, 0x28, 0x7b, 0x45, 0x0f, 0xf7, 0x3c, 0xbd, 0x39, 0x4c, 0x2f, 0x7b, 0x37, 0xb4, 0x91, 0xee, 0x3d, 0x72, 0xa3, 0xb9, 0xea, 0xb2, 0x6a, 0x61, 0x90, 0x5d, 0x0b, 0x77, 0xd8, 0x51, 0x95, 0x66, 0x47, 0xcd, 0xee, 0xed, 0x54, 0x65, 0x65, 0x21, 0x27, 0xef, 0x4c, 0x07, 0xf9, 0xe8, 0x7a, 0xab, 0xae, 0xa5, 0xfd, 0xd8, 0xc2, 0x95, 0xb2, 0x76, 0xbd, 0xa6, 0xfe, 0xc1, 0xb2, 0xac, 0x69, 0x7a, 0x7e, 0x55, 0x35, 0x55, 0x53, 0x54, 0x09, 0x8c, 0xb4, 0xca, 0x11, 0x08, 0xad, 0x80, 0xef, 0x08, 0x4f, 0xc2, 0x1f, 0x5d, 0xe3, 0xaa, 0x3f, 0xd8, 0xfe, 0x60, 0x0f, 0x3d, 0x1f, 0xf6, 0x34, 0x1d, 0xff, 0x30, 0x6c, 0x7b, 0xee, 0xfd, 0x4d, 0x92, 0xfc, 0xe3, 0x7f, 0xcb, 0xe8, 0xdf, 0xfc, 0x0d, 0xfd, 0x97, 0xfc, 0x5f, 0x89, 0xfc, 0xbb, 0x7e, 0xf3, 0x2f, 0x37, 0x75, 0xb2, 0xfd, 0x9b, 0x6d, 0xc8, 0xce, 0xe8, 0xb7, 0x82, 0x51, 0xd1, 0x2e, 0x23, 0x97, 0xd1, 0x39, 0xe9, 0xb0, 0x9b, 0x6c, 0x47, 0x33, 0x60, 0xba, 0x76, 0xdd, 0x29, 0x9e, 0xce, 0xd2, 0x64, 0xb6, 0xc2, 0xff, 0xe5, 0x97, 0xb3, 0x2f, 0xa7, 0x81, 0xc1, 0x33, 0xf7, 0xe6, 0xf8, 0x4c, 0xff, 0x7d, 0x39, 0xfd, 0x47, 0x8f, 0x99, 0xfb, 0x7a, 0xf7, 0x9e, 0xf0, 0x47, 0x79, 0xaa, 0x74, 0xf0, 0xd5, 0xb3, 0x0d, 0xe5, 0xaa, 0xb0, 0xa9, 0x2c, 0x49, 0xb6, 0xa1, 0x93, 0x17, 0xf0, 0xeb, 0x9b, 0x09, 0x35, 0x20, 0x9a, 0x07, 0x2f, 0xb0, 0xe3, 0x96, 0x59, 0x9a, 0x50, 0xc3, 0x03, 0x7b, 0xd8, 0x1c, 0xce, 0xc0, 0x9b, 0x4d, 0x7c, 0xc1, 0x32, 0xe0, 0xda, 0x8b, 0x48, 0xcf, 0xf5, 0x7c, 0xf5, 0xed, 0x5c, 0xf1, 0xaf, 0x59, 0x74, 0x7e, 0xf1, 0x64, 0x19, 0x9f, 0x7d, 0x23, 0xe3, 0x9f, 0x3e, 0x39, 0x7f, 0x72, 0x1e, 0xfb, 0xcb, 0xb3, 0xe8, 0xfc, 0xa7, 0xc1, 0x57, 0xa1, 0x7f, 0x76, 0x11, 0x44, 0xe9, 0xf7, 0x3f, 0x4b, 0x7f, 0x1a, 0x05, 0x2f, 0x80, 0x7b, 0xbf, 0x7b, 0xba, 0x58, 0x31, 0x6f, 0x1e, 0x7d, 0x97, 0x7e, 0xed, 0x7d, 0xad, 0x79, 0xfc, 0xdd, 0xd7, 0x3c, 0x7f, 0x2e, 0xd4, 0x5d, 0x74, 0xf5, 0x9b, 0xd3, 0xbc, 0x48, 0x7b, 0xd9, 0xcc, 0x76, 0xf8, 0xe5, 0x0f, 0xdb, 0x81, 0x87, 0xd4, 0x24, 0xb2, 0x1b, 0x77, 0x1b, 0x0b, 0x36, 0xbd, 0xf9, 0xd4, 0xe4, 0x27, 0x2a, 0xb1, 0x25, 0x67, 0xa1, 0x6a, 0xdd, 0x98, 0xca, 0x71, 0xe7, 0xcc, 0xb9, 0x0f, 0xa0, 0x0a, 0x45, 0x27, 0x13, 0xce, 0xfd, 0x3b, 0xce, 0x5c, 0x34, 0x79, 0x63, 0x12, 0x2a, 0xec, 0x6b, 0x0c, 0x15, 0x14, 0x68, 0x01, 0xb8, 0x6c, 0xd6, 0x74, 0xdf, 0xaf, 0x2d, 0xb3, 0x34, 0xa6, 0x69, 0x34, 0xf1, 0x52, 0x5c, 0x7c, 0x7b, 0x1e, 0xcd, 0xa3, 0x38, 0xa4, 0x29, 0xc6, 0xfc, 0x62, 0x11, 0x7b, 0xa7, 0xf1, 0x69, 0x27, 0xd7, 0x81, 0x05, 0x40, 0x4b, 0xdc, 0xe3, 0x0c, 0x9e, 0x30, 0xdc, 0xb1, 0xed, 0x06, 0x5a, 0xe3, 0x9f, 0x9a, 0xfa, 0xe4, 0x46, 0x48, 0x1b, 0x39, 0x35, 0x3d, 0x66, 0xda, 0xb1, 0xe8, 0x9c, 0xda, 0xc1, 0xe9, 0x1c, 0x10, 0x5e, 0x43, 0xad, 0xd2, 0xdc, 0x85, 0xe8, 0xa6, 0xce, 0xcb, 0xdc, 0xd4, 0x40, 0x50, 0x05, 0xcd, 0x97, 0x54, 0x2b, 0xaa, 0x34, 0xb5, 0xcb, 0x18, 0x72, 0xd2, 0xa1, 0xb6, 0xa0, 0xc1, 0x2f, 0x4b, 0x11, 0x2d, 0xb9, 0x8a, 0x17, 0x7a, 0x61, 0x74, 0x94, 0x2c, 0x16, 0x4b, 0xb8, 0xfe, 0xf3, 0x67, 0xf1, 0x69, 0xd6, 0xd8, 0xbe, 0x7a, 0xf9, 0x9a, 0xb0, 0x3e, 0xf0, 0x21, 0xa3, 0x4e, 0xfd, 0x03, 0xfc, 0x3e, 0xd0, 0xd5, 0x78, 0xa0, 0x61, 0xae, 0x23, 0x4d, 0x8a, 0x26, 0x97, 0xe2, 0x08, 0xc0, 0x9e, 0xee, 0x93, 0xa2, 0x13, 0x5e, 0xe0, 0x4a, 0xf6, 0xf4, 0xbb, 0x7f, 0xea, 0x16, 0xfe, 0xdf, 0x02, 0xf3, 0x84, 0x74, 0xd7, 0x33, 0x2a, 0x37, 0x22, 0x52, 0xe9, 0x73, 0xaa, 0x36, 0xbd, 0x19, 0xac, 0xc6, 0xa7, 0xc1, 0x6a, 0x23, 0xb3, 0x8e, 0x8b, 0xca, 0x63, 0x06, 0x3c, 0x74, 0x15, 0x49, 0x39, 0xb5, 0x83, 0xb8, 0xd1, 0x1f, 0x06, 0x0e, 0xfe, 0x6d, 0x5b, 0x67, 0x76, 0x73, 0x3f, 0xc3, 0x74, 0x1b, 0x03, 0x15, 0x44, 0xbb, 0x0b, 0x0a, 0x3a, 0x77, 0xd7, 0x4a, 0x0d, 0x53, 0x34, 0xba, 0xc9, 0x8b, 0xb6, 0xa9, 0x60, 0xcd, 0x45, 0x9a, 0x5a, 0x53, 0x24, 0x99, 0x2d, 0x6b, 0x5e, 0x34, 0x56, 0x4b, 0x6b, 0x45, 0x1c, 0x80, 0x8c, 0xc6, 0xe7, 0x92, 0xc7, 0xd1, 0x89, 0xd6, 0x08, 0xb9, 0x36, 0xc1, 0xe1, 0x56, 0x91, 0xd8, 0xe1, 0xf8, 0x6a, 0xb8, 0x79, 0xda, 0xd3, 0x85, 0x2a, 0xee, 0x33, 0x6f, 0x38, 0xfe, 0x95, 0x33, 0xd7, 0xbf, 0x44, 0x27, 0x66, 0x99, 0x20, 0x5c, 0x45, 0x57, 0xa1, 0xe5, 0x88, 0x6f, 0x59, 0x4e, 0x5d, 0x67, 0xa9, 0x9a, 0x0a, 0x1c, 0xa9, 0x57, 0x4b, 0xbb, 0x98, 0xa6, 0xdc, 0x1d, 0xa6, 0xd8, 0x5d, 0xb6, 0x88, 0x69, 0x7e, 0x6b, 0xde, 0xd2, 0xc0, 0x38, 0x23, 0x05, 0x50, 0xb1, 0x14, 0x96, 0x2e, 0x4e, 0x51, 0xa6, 0xca, 0x84, 0x29, 0xa5, 0x5c, 0xd2, 0xf5, 0xd2, 0x09, 0xbf, 0x38, 0xd1, 0x1a, 0xaf, 0xaf, 0xaf, 0x2e, 0xb1, 0xcf, 0xc2, 0xb7, 0x8a, 0xb2, 0x7c, 0xca, 0x1c, 0x8c, 0x8c, 0x20, 0x24, 0x5e, 0xdd, 0x9c, 0x5c, 0x4c, 0x95, 0xd1, 0x3c, 0xe4, 0xcc, 0x1e, 0xfc, 0x33, 0xe0, 0x87, 0x92, 0x06, 0xed, 0x00, 0x15, 0x67, 0x0d, 0xa1, 0xfb, 0xf5, 0xba, 0xcb, 0xc8, 0xfd, 0x53, 0x49, 0x52, 0x57, 0xb6, 0x06, 0x58, 0x9f, 0x42, 0x70, 0x03, 0x6a, 0x63, 0x5b, 0x88, 0x04, 0xf0, 0x2b, 0xa4, 0x4e, 0xf5, 0xb3, 0x45, 0xc4, 0xcc, 0xb3, 0x78, 0x19, 0xc9, 0xa7, 0x51, 0x72, 0xb1, 0xfa, 0xfe, 0xfb, 0xc5, 0xcf, 0xcf, 0xfd, 0x40, 0x2c, 0x03, 0xc0, 0xfb, 0x65, 0xf4, 0x9e, 0x35, 0x9e, 0x36, 0x24, 0xb4, 0xc3, 0xaf, 0x30, 0xa3, 0x63, 0x4e, 0xaf, 0xf7, 0xc3, 0x71, 0x03, 0x3e, 0xb6, 0xc7, 0x56, 0xda, 0x01, 0x87, 0x04, 0xd0, 0x0e, 0x08, 0x99, 0xcf, 0x87, 0xcd, 0xc6, 0xf2, 0x9e, 0x6d, 0x1c, 0xc2, 0x3a, 0x26, 0x89, 0xa7, 0xbb, 0xae, 0x68, 0x56, 0x17, 0xbe, 0x8a, 0xf6, 0xa6, 0x55, 0xe4, 0xdd, 0xa1, 0x85, 0xcb, 0x6a, 0x95, 0xd3, 0x9d, 0x5f, 0x34, 0xd0, 0x8b, 0xe6, 0xd3, 0xd5, 0xac, 0x28, 0x8d, 0xaf, 0x72, 0x3a, 0xa0, 0xa6, 0x86, 0x20, 0x18, 0x28, 0xec, 0x32, 0x2b, 0x15, 0xf5, 0x8a, 0x24, 0x19, 0xab, 0xa8, 0xb1, 0xd0, 0xaa, 0x94, 0x49, 0x2e, 0xc2, 0x13, 0xab, 0x3f, 0x9c, 0x5c, 0xd6, 0xee, 0x83, 0xcd, 0x1e, 0xa1, 0x6a, 0xc0, 0x5e, 0xa3, 0x41, 0x86, 0x23, 0x8d, 0x93, 0x18, 0x43, 0x8f, 0x0e, 0x08, 0x61, 0x8a, 0x63, 0x38, 0xd0, 0x09, 0xe1, 0x6d, 0x84, 0x45, 0x23, 0xb7, 0xe8, 0xde, 0x04, 0x7b, 0x33, 0x15, 0x89, 0x06, 0xa7, 0xd1, 0x4d, 0x4e, 0xae, 0x49, 0xda, 0x64, 0x12, 0x8e, 0x51, 0x28, 0x5d, 0x2b, 0xaa, 0xba, 0xc2, 0x37, 0x1a, 0xa1, 0x29, 0x74, 0x53, 0x63, 0x6f, 0x0a, 0x37, 0x33, 0x95, 0x4a, 0x43, 0x6c, 0x58, 0x40, 0x62, 0xe3, 0xca, 0xc8, 0x4c, 0x46, 0xc9, 0x22, 0x90, 0x50, 0x98, 0xa3, 0xe0, 0xa0, 0xe0, 0xec, 0x34, 0x6b, 0x84, 0x60, 0x57, 0xd7, 0xb3, 0x1d, 0x1c, 0xbb, 0x3d, 0x30, 0x09, 0xa7, 0xc7, 0x87, 0xb0, 0xe7, 0xe1, 0x6e, 0x00, 0xce, 0xf7, 0xc3, 0x8d, 0xb7, 0xdf, 0x7a, 0x34, 0xdd, 0x30, 0x84, 0x19, 0x7a, 0x6f, 0x9b, 0xc3, 0x69, 0x10, 0x19, 0x93, 0xb1, 0x56, 0xc0, 0xf3, 0x6b, 0xbb, 0xee, 0xec, 0x5a, 0x13, 0xfc, 0x73, 0xb3, 0x93, 0xd7, 0x09, 0x00, 0x23, 0x3c, 0x7c, 0x9d, 0xe1, 0xa7, 0xaa, 0xc8, 0xcd, 0x3c, 0xb1, 0x0c, 0x01, 0x0b, 0x82, 0x99, 0xb4, 0x48, 0x0d, 0x4f, 0x56, 0x3a, 0x81, 0xd7, 0x8f, 0x93, 0xc5, 0x85, 0x66, 0x92, 0xee, 0x4b, 0x96, 0xd9, 0xf7, 0x8b, 0xc5, 0x6a, 0xf5, 0xe2, 0x22, 0x4c, 0x16, 0xab, 0xdf, 0xe6, 0x00, 0xe5, 0xae, 0x43, 0x44, 0x0b, 0xf9, 0x6e, 0xd3, 0x5b, 0x7f, 0xd8, 0x0e, 0x01, 0x0d, 0xa8, 0x25, 0xd0, 0x1f, 0xec, 0x37, 0x80, 0xfc, 0xbb, 0x2d, 0x00, 0x32, 0x31, 0x19, 0x30, 0xee, 0xdd, 0xe1, 0x56, 0x5f, 0x0c, 0x31, 0x34, 0x44, 0xe4, 0x09, 0x0d, 0x16, 0xd3, 0x25, 0x3c, 0xcd, 0xd4, 0x07, 0x49, 0xa5, 0x7f, 0x42, 0xf1, 0x98, 0xa5, 0x29, 0x8b, 0x00, 0xea, 0x0b, 0xed, 0x6a, 0x51, 0xbb, 0xce, 0xd8, 0xb6, 0xb4, 0x79, 0x86, 0x38, 0xdd, 0xe6, 0x75, 0x9b, 0x55, 0x20, 0xa0, 0x15, 0x94, 0x56, 0xa9, 0x15, 0xdd, 0xe3, 0xdd, 0x66, 0xa9, 0x59, 0xd1, 0x00, 0x28, 0x83, 0xd8, 0x66, 0xd9, 0xf2, 0x54, 0xe6, 0x49, 0x72, 0x81, 0xb6, 0x58, 0x4b, 0x35, 0x12, 0xbb, 0x60, 0xf0, 0x03, 0x2a, 0xac, 0x82, 0xff, 0xa0, 0x7e, 0xea, 0xf0, 0x00, 0xd2, 0x72, 0x08, 0x78, 0xd0, 0xef, 0x43, 0x2e, 0x6f, 0xa5, 0x0d, 0xdc, 0xf5, 0x52, 0x25, 0x65, 0xba, 0xa7, 0x66, 0xdc, 0x9b, 0xcb, 0xa4, 0x6e, 0xca, 0xff, 0x9a, 0x9b, 0x2e, 0x98, 0xe9, 0x1e, 0x1e, 0x6a, 0x7b, 0xac, 0x5d, 0x08, 0xcf, 0x8a, 0x63, 0xf5, 0x63, 0x5e, 0xd8, 0xba, 0xcc, 0xea, 0x12, 0xbb, 0xcc, 0x95, 0x43, 0x37, 0x54, 0xe7, 0x52, 0xf1, 0x94, 0xfa, 0x0f, 0x16, 0x92, 0xcd, 0xf9, 0x69, 0x27, 0x4c, 0x5d, 0x77, 0x7d, 0x3d, 0x1b, 0xfb, 0x3d, 0xa3, 0xb9, 0x41, 0x00, 0xfc, 0x7c, 0x74, 0x27, 0xee, 0x7b, 0xa8, 0x8b, 0x0e, 0x05, 0xdf, 0x2f, 0x00, 0xc4, 0x56, 0x74, 0xf0, 0x0a, 0xfa, 0xca, 0xd7, 0x53, 0xaf, 0xea, 0x9a, 0x68, 0xc9, 0x71, 0x1e, 0x41, 0x7b, 0xd3, 0x5f, 0x36, 0xf5, 0x15, 0xbb, 0xb9, 0x34, 0xb5, 0xbb, 0x5f, 0xaa, 0xa5, 0xc9, 0xde, 0x65, 0x5b, 0x1a, 0xcd, 0x2b, 0x6b, 0x69, 0x44, 0x8d, 0xa1, 0xef, 0x60, 0xd0, 0x45, 0x09, 0xff, 0x21, 0x8d, 0xd6, 0xf7, 0xc4, 0xe9, 0x3f, 0x38, 0x29, 0xfb, 0xed, 0x64, 0x1b, 0x86, 0x61, 0x1f, 0xec, 0x81, 0x3f, 0x7c, 0x1a, 0x72, 0xe2, 0xed, 0xc2, 0xb0, 0x67, 0xde, 0x7e, 0x37, 0xf8, 0xfd, 0xc7, 0x06, 0x6b, 0x9e, 0x81, 0x37, 0x4f, 0x95, 0xc3, 0xf5, 0x24, 0xa2, 0x9b, 0x41, 0x49, 0x67, 0x9e, 0x35, 0xcf, 0x49, 0x23, 0xd3, 0x71, 0x3c, 0x5d, 0x53, 0x6c, 0xdc, 0xa8, 0xcd, 0xcc, 0x4d, 0x60, 0x07, 0xc2, 0xd2, 0xbc, 0xb4, 0xd4, 0x9b, 0xdb, 0x72, 0xab, 0x13, 0x66, 0xe8, 0xe2, 0x4b, 0x9e, 0x26, 0xa9, 0x04, 0xe5, 0xb4, 0x50, 0x17, 0x5d, 0xdd, 0x9a, 0x84, 0xec, 0x28, 0xdb, 0xbf, 0x3e, 0x8d, 0xa7, 0x41, 0xb6, 0xcb, 0x6e, 0xc6, 0x7d, 0x06, 0x17, 0x49, 0x89, 0xb9, 0xf1, 0x00, 0xac, 0xe5, 0x4f, 0x43, 0x91, 0x36, 0x21, 0x1b, 0xc0, 0xb7, 0x7b, 0x1f, 0x28, 0x72, 0x0c, 0x10, 0xea, 0x46, 0x10, 0xb6, 0x71, 0x70, 0x98, 0xd2, 0x9d, 0xe8, 0xd2, 0xb9, 0x2c, 0x84, 0xa3, 0xd3, 0x8a, 0x08, 0x52, 0x52, 0x85, 0x0b, 0x36, 0x54, 0x43, 0xf7, 0x10, 0x67, 0xe4, 0x78, 0xeb, 0x76, 0x4d, 0x5d, 0xd2, 0xeb, 0x6e, 0x6d, 0xac, 0xfb, 0xa0, 0xa3, 0xf3, 0xfa, 0x3c, 0x25, 0x7a, 0x56, 0xcb, 0xae, 0x6d, 0xf2, 0x6e, 0x4d, 0xb0, 0xb9, 0xa3, 0xd1, 0x3d, 0xad, 0xc6, 0xff, 0x56, 0x51, 0x34, 0x74, 0x51, 0x56, 0x1c, 0xa7, 0xf3, 0xe5, 0x89, 0x19, 0x83, 0xcb, 0xee, 0x72, 0x06, 0xdf, 0xc7, 0x07, 0xf8, 0x3f, 0x30, 0x16, 0xb8, 0xc4, 0xf1, 0x70, 0x20, 0x77, 0x38, 0xee, 0xf7, 0x9e, 0x07, 0x00, 0xd2, 0x1f, 0xc6, 0x2d, 0x24, 0x0d, 0x87, 0x03, 0xd5, 0x3a, 0x8e, 0xcc, 0x6d, 0x37, 0x3a, 0x3b, 0x83, 0xb6, 0x16, 0x6e, 0x4f, 0x55, 0x2d, 0xf5, 0x1a, 0x4c, 0xa3, 0x33, 0xea, 0x9b, 0xb3, 0xf8, 0xc2, 0x5d, 0xb3, 0x42, 0xa3, 0x25, 0x0c, 0xd5, 0x15, 0xc0, 0x18, 0x0b, 0xba, 0x6b, 0x99, 0xe2, 0x5d, 0x41, 0xd9, 0xba, 0xd6, 0xf9, 0x9d, 0x8c, 0x2e, 0x54, 0x31, 0x34, 0x31, 0x05, 0xae, 0x83, 0x5b, 0x81, 0x80, 0xa1, 0xb9, 0x66, 0x8b, 0x05, 0x3f, 0x35, 0x63, 0x40, 0x72, 0x85, 0x1b, 0xaa, 0x58, 0x1c, 0x28, 0x97, 0x3a, 0x0c, 0x34, 0xf8, 0x8f, 0x5a, 0x43, 0x7a, 0x38, 0xc4, 0xfd, 0xe6, 0x30, 0x04, 0x1e, 0xf4, 0x46, 0x13, 0x51, 0x87, 0x0d, 0xcd, 0x2a, 0x9f, 0x0e, 0xcf, 0xce, 0x32, 0x51, 0x22, 0xa0, 0x91, 0xff, 0xb0, 0x6b, 0x1a, 0xe3, 0xa2, 0x68, 0x26, 0xc1, 0xba, 0xd1, 0xd9, 0x14, 0xaf, 0xa7, 0x72, 0x69, 0x35, 0xcd, 0x4d, 0x6a, 0xe9, 0x66, 0x37, 0x67, 0x92, 0x2e, 0x73, 0x57, 0x80, 0xb5, 0x46, 0x79, 0xed, 0x6e, 0x5a, 0x6d, 0xa5, 0x76, 0x77, 0xd7, 0xb5, 0x6d, 0x1e, 0xb5, 0x55, 0xa5, 0x60, 0xae, 0xd2, 0x6a, 0x96, 0x46, 0x42, 0x9e, 0x76, 0x02, 0xdf, 0x5d, 0xbe, 0x6c, 0x5f, 0x5e, 0xcd, 0x06, 0x6e, 0xf7, 0xdb, 0x2d, 0xe5, 0xa4, 0xb6, 0xd4, 0x41, 0x11, 0x20, 0x06, 0x10, 0xde, 0x07, 0x17, 0x65, 0x7c, 0x07, 0x1e, 0x00, 0x99, 0x7c, 0x7f, 0xbb, 0xdb, 0xee, 0x76, 0x70, 0xf8, 0xfd, 0x16, 0x11, 0xe2, 0x69, 0xb8, 0x50, 0xfc, 0x42, 0x2e, 0x94, 0xf4, 0xe7, 0xcb, 0x60, 0xf5, 0x93, 0x2f, 0xce, 0xee, 0x99, 0xa2, 0xf0, 0xdb, 0xc6, 0xfa, 0x8f, 0x6d, 0x3a, 0xeb, 0xae, 0xde, 0x5c, 0x5e, 0xd2, 0xe5, 0x4d, 0x80, 0xbf, 0xa3, 0xc3, 0xbb, 0x34, 0xf7, 0xd4, 0x3f, 0x22, 0xe4, 0xfd, 0xce, 0x1b, 0xa9, 0x0c, 0xd0, 0x35, 0x0a, 0x8e, 0x53, 0xf9, 0xce, 0xe8, 0xaa, 0x7d, 0xce, 0xe8, 0x6e, 0x02, 0x00, 0x2b, 0x4a, 0x88, 0x90, 0x77, 0x04, 0x62, 0x34, 0x5d, 0xc7, 0x3b, 0x43, 0x28, 0x0a, 0x3b, 0xaa, 0xb6, 0x54, 0x51, 0xd6, 0x01, 0xe4, 0xcb, 0x2e, 0xa3, 0x8e, 0x76, 0xd5, 0x75, 0xa9, 0xd1, 0xeb, 0x56, 0xd5, 0xd2, 0xca, 0x64, 0x19, 0x64, 0x29, 0xe3, 0xe9, 0x3a, 0x4b, 0x01, 0x7f, 0x6d, 0x94, 0xb0, 0x42, 0x24, 0x8b, 0xb9, 0x55, 0x17, 0x69, 0xac, 0xd8, 0x72, 0xe1, 0x47, 0x5f, 0x7f, 0x13, 0xf9, 0xa7, 0x39, 0x90, 0x57, 0x97, 0xd7, 0x97, 0xaf, 0x66, 0xbb, 0x71, 0xa4, 0xba, 0x45, 0x8b, 0x5f, 0x1b, 0x80, 0x18, 0xb2, 0x51, 0xef, 0x41, 0xbf, 0x61, 0x1b, 0x2f, 0x18, 0x2d, 0x1b, 0x10, 0xe3, 0xac, 0x0f, 0x37, 0xd2, 0x07, 0x07, 0xb6, 0xbd, 0xb9, 0xeb, 0x20, 0x73, 0xf3, 0x50, 0x6b, 0xea, 0x16, 0x74, 0xe3, 0x5c, 0x9b, 0x9a, 0xae, 0x2f, 0x27, 0x07, 0x52, 0xd3, 0x75, 0x81, 0x35, 0xe5, 0x44, 0xe0, 0x4f, 0x5a, 0xca, 0x8c, 0xd4, 0x79, 0x57, 0xe0, 0x75, 0x5e, 0x10, 0x82, 0xe4, 0x59, 0x0b, 0xac, 0xdf, 0xd2, 0x0c, 0x97, 0xa2, 0x5b, 0xd3, 0x3d, 0x6b, 0x08, 0xd4, 0x44, 0x43, 0xad, 0xbb, 0x88, 0x8b, 0xb1, 0x79, 0xf2, 0x22, 0x9a, 0x2f, 0xce, 0x4f, 0x4b, 0xeb, 0x77, 0xaf, 0xae, 0xae, 0x3a, 0xaa, 0xd6, 0xb4, 0xe4, 0x1b, 0x19, 0x67, 0x1b, 0x0b, 0x95, 0xb0, 0xfd, 0x8e, 0xb1, 0xd0, 0x42, 0x06, 0x9f, 0x4e, 0x04, 0x7b, 0x9f, 0x4e, 0x0a, 0x89, 0xb1, 0x01, 0xea, 0x4f, 0x8d, 0x91, 0x8c, 0x2e, 0xfc, 0xa5, 0xaa, 0xd2, 0x2a, 0xaf, 0x28, 0x69, 0x45, 0x31, 0x8b, 0x9c, 0x49, 0xd7, 0x56, 0x1d, 0x83, 0xd3, 0x2f, 0x79, 0x56, 0xab, 0xce, 0xdd, 0x91, 0xa8, 0x58, 0xa6, 0x68, 0x7e, 0x6f, 0xde, 0xe4, 0xda, 0xac, 0xcb, 0x3a, 0x2b, 0x1b, 0x8d, 0xe8, 0x5c, 0x01, 0xfb, 0x42, 0xae, 0x42, 0xd9, 0x16, 0x40, 0x2c, 0xab, 0xe0, 0xf9, 0xad, 0x8c, 0xa9, 0x59, 0x44, 0x26, 0x09, 0x5f, 0x2c, 0x97, 0xe1, 0xe2, 0xb4, 0x60, 0xfd, 0xba, 0x03, 0xb8, 0xf2, 0x01, 0x7b, 0x2d, 0x95, 0xdf, 0x53, 0x9e, 0x87, 0x1d, 0x38, 0x83, 0x8c, 0xfd, 0xd6, 0x0b, 0x0e, 0xc1, 0xfe, 0xde, 0x46, 0x63, 0x79, 0xc6, 0x97, 0x45, 0xed, 0x8e, 0xdb, 0xe1, 0x20, 0x16, 0x60, 0x2b, 0xe4, 0xba, 0xa7, 0xa1, 0xb5, 0x78, 0xa1, 0x1a, 0xdd, 0x6a, 0xaa, 0xd5, 0x01, 0x15, 0xb3, 0x5a, 0xb7, 0xae, 0x6e, 0x58, 0x67, 0x46, 0xb8, 0x39, 0xeb, 0x5c, 0x2e, 0xa4, 0x4c, 0x53, 0x21, 0x97, 0x91, 0x02, 0xcb, 0xd4, 0x6e, 0x36, 0x74, 0x2c, 0x99, 0xe1, 0xd1, 0xfb, 0x1b, 0xed, 0x57, 0xa7, 0xb9, 0x47, 0x92, 0xad, 0xe7, 0x03, 0x60, 0x08, 0x3c, 0x24, 0x54, 0xb6, 0x0b, 0x37, 0xe0, 0xd0, 0x43, 0x00, 0x53, 0x04, 0x74, 0x1c, 0xfa, 0xfb, 0xcf, 0x62, 0x08, 0x38, 0x52, 0xac, 0xae, 0x97, 0x34, 0x9c, 0xf7, 0xd8, 0x5a, 0x41, 0xb0, 0x11, 0xb4, 0x33, 0x93, 0x70, 0x81, 0x40, 0x95, 0x0c, 0x6f, 0x64, 0x1b, 0xe7, 0x6e, 0x2c, 0x54, 0xd6, 0x6a, 0xe2, 0xdf, 0xba, 0x26, 0x07, 0xf8, 0xdc, 0x1a, 0x58, 0x64, 0x63, 0xe6, 0x5a, 0xc4, 0x42, 0x86, 0x5c, 0x49, 0x00, 0x4d, 0x1a, 0x88, 0xfb, 0xc2, 0x3c, 0x87, 0xe9, 0x27, 0xb1, 0x7c, 0xf6, 0x3e, 0x8d, 0x79, 0xec, 0x8c, 0xf9, 0xee, 0xf5, 0xcb, 0xd9, 0x81, 0xd2, 0x8d, 0x43, 0xef, 0x03, 0x67, 0x59, 0x60, 0xfb, 0x61, 0xdb, 0x33, 0xb9, 0x0d, 0x29, 0x09, 0x8e, 0xa8, 0xb6, 0xf5, 0x07, 0xf8, 0x4b, 0x6f, 0x37, 0x84, 0xa1, 0x87, 0x1d, 0xd7, 0xf7, 0x3b, 0x6b, 0xb7, 0x4f, 0xb9, 0x10, 0x19, 0x57, 0x2a, 0x14, 0x89, 0x88, 0x3d, 0xf6, 0xb5, 0x96, 0x52, 0x65, 0x19, 0x5d, 0x64, 0xa6, 0x98, 0x5e, 0xaa, 0x27, 0x8a, 0x2b, 0xf6, 0x3c, 0xf5, 0x97, 0xfa, 0x42, 0x3c, 0x51, 0xca, 0x57, 0x3a, 0xd6, 0xcb, 0x15, 0x60, 0x72, 0x92, 0xb3, 0x58, 0x27, 0xda, 0xf2, 0x6f, 0x9e, 0x26, 0x8b, 0x67, 0x32, 0x4d, 0x24, 0x40, 0x33, 0x4f, 0x18, 0x4f, 0x2e, 0xec, 0x83, 0xf8, 0xea, 0xb1, 0xc5, 0xc3, 0x24, 0x1a, 0x95, 0xae, 0x04, 0x74, 0x99, 0x0d, 0x58, 0xcc, 0x8e, 0x06, 0x00, 0x6e, 0x83, 0x00, 0x78, 0x8b, 0xb6, 0x1a, 0x02, 0x02, 0xd5, 0x16, 0x70, 0x2a, 0xdc, 0x9f, 0xfe, 0x06, 0x9d, 0x12, 0xb2, 0x67, 0xcf, 0x17, 0xab, 0x17, 0xdf, 0x3f, 0x0b, 0xe3, 0x65, 0x9a, 0x88, 0x15, 0xb3, 0x2b, 0xbb, 0xca, 0x97, 0x0a, 0x16, 0x26, 0x5f, 0x5c, 0x28, 0x11, 0xac, 0xe6, 0x5e, 0x7c, 0xf1, 0x62, 0xfe, 0xdd, 0x62, 0xb1, 0x58, 0xce, 0x97, 0xda, 0x37, 0x21, 0x0b, 0x04, 0xd7, 0x51, 0x9c, 0x1a, 0xb0, 0x1f, 0xbd, 0x32, 0x69, 0x60, 0x63, 0x7d, 0x6e, 0x23, 0xf3, 0x3d, 0xf0, 0x95, 0x39, 0xd3, 0xcb, 0x28, 0x4c, 0x9e, 0x88, 0xd4, 0x8b, 0x97, 0x8a, 0xa5, 0x22, 0x56, 0x7c, 0xc1, 0x1e, 0x4a, 0x83, 0x3c, 0xa0, 0xb1, 0xeb, 0x86, 0xa6, 0x85, 0x6e, 0x0f, 0x34, 0x0a, 0x8f, 0xf5, 0xf2, 0x20, 0x07, 0xb6, 0xb5, 0x50, 0xdb, 0xe1, 0x70, 0xf0, 0xf6, 0xc3, 0x26, 0xe8, 0x7d, 0xc9, 0x36, 0xbb, 0xf7, 0x7b, 0x72, 0x09, 0xea, 0x3b, 0xfb, 0xa3, 0x73, 0xbf, 0xca, 0x15, 0xc3, 0x59, 0xba, 0x60, 0xb4, 0x5d, 0xd1, 0xe4, 0xf5, 0x1c, 0x0e, 0x22, 0xc9, 0x29, 0x35, 0x80, 0x80, 0xab, 0xb4, 0xe0, 0x9c, 0x0e, 0x78, 0xd3, 0xa5, 0xd0, 0x82, 0x59, 0xa9, 0xa3, 0x44, 0xc9, 0xcc, 0xca, 0x2c, 0x52, 0x2a, 0x5d, 0x50, 0x19, 0x08, 0x05, 0xd2, 0x78, 0x21, 0x2e, 0xe2, 0xf3, 0x38, 0x49, 0x93, 0x98, 0xcf, 0x57, 0xab, 0x65, 0x78, 0x7e, 0x1a, 0x1c, 0x26, 0xb9, 0x7a, 0x7e, 0x18, 0xe4, 0xbe, 0x07, 0xf3, 0xf4, 0xc7, 0xcd, 0x66, 0xc3, 0x76, 0xdb, 0x60, 0x3b, 0x30, 0xb9, 0x91, 0xfd, 0x40, 0x63, 0xf2, 0x36, 0xdb, 0xf1, 0xfd, 0xd2, 0x68, 0xb7, 0xc3, 0x08, 0x2d, 0xaa, 0x89, 0x52, 0xc3, 0xe9, 0xe7, 0x04, 0x88, 0xe3, 0xc6, 0x4d, 0x99, 0xa7, 0x77, 0x3a, 0xce, 0xdb, 0x0b, 0x4d, 0xe3, 0xfb, 0x56, 0x45, 0xa4, 0x56, 0xcf, 0xe3, 0x55, 0x9c, 0x18, 0x69, 0xc4, 0x92, 0x4b, 0x9b, 0xea, 0xa7, 0x31, 0x8c, 0x58, 0x51, 0x29, 0x42, 0x44, 0xf5, 0x7e, 0xa9, 0x54, 0x4b, 0xf3, 0xa1, 0x29, 0xfe, 0xe1, 0x69, 0x9e, 0xf1, 0xba, 0xeb, 0x66, 0xd4, 0x28, 0x07, 0x0c, 0x45, 0x23, 0xf3, 0xe9, 0x5c, 0x69, 0x47, 0xad, 0x21, 0xe1, 0x3e, 0xa0, 0x41, 0x94, 0x1f, 0xe9, 0x63, 0xa2, 0xfb, 0xae, 0x2b, 0x5e, 0xdb, 0x8c, 0x1a, 0xb0, 0x8a, 0xc8, 0x5d, 0xd1, 0xe3, 0x2e, 0x93, 0xa4, 0xab, 0xaf, 0xa9, 0xcf, 0x47, 0x69, 0x3a, 0x12, 0xa4, 0x5b, 0xa1, 0x25, 0x75, 0xf3, 0xeb, 0xc2, 0x0d, 0x25, 0x33, 0x8d, 0x49, 0x01, 0x0d, 0x41, 0xaf, 0x4b, 0x90, 0x6c, 0x26, 0x25, 0x17, 0x2a, 0xa7, 0x71, 0xe5, 0xa0, 0xa3, 0x59, 0x6c, 0xd2, 0x4c, 0xc3, 0x08, 0x6f, 0xc9, 0xf6, 0xc7, 0xa7, 0x79, 0x46, 0x92, 0x8d, 0x46, 0x84, 0x5a, 0xca, 0x0e, 0xf8, 0x96, 0x8f, 0x54, 0x4b, 0x3b, 0x72, 0x10, 0x51, 0x4b, 0xd3, 0x51, 0x3f, 0x46, 0x63, 0x08, 0xe8, 0x5b, 0x9a, 0x33, 0x0f, 0xe8, 0x28, 0xeb, 0x69, 0x66, 0x46, 0xee, 0xca, 0x50, 0x29, 0xc3, 0x51, 0x58, 0x57, 0x5c, 0xd6, 0x5a, 0x4e, 0x97, 0x0e, 0x22, 0x48, 0xd3, 0xdc, 0xeb, 0x69, 0xf8, 0x5a, 0xc3, 0x21, 0x49, 0x63, 0x5a, 0x6e, 0xdc, 0xe8, 0x61, 0x83, 0xd8, 0x6c, 0x81, 0x3b, 0x20, 0xb0, 0xcc, 0xa6, 0x1b, 0x1f, 0x8c, 0x58, 0xd0, 0x20, 0xb9, 0xd5, 0x89, 0xfb, 0xec, 0xf5, 0xd5, 0xcc, 0xdb, 0x02, 0x59, 0x78, 0x07, 0x04, 0x62, 0xcb, 0x36, 0xa3, 0xf5, 0x49, 0x9c, 0x01, 0x38, 0xc4, 0xa7, 0xf6, 0xb2, 0x7b, 0xb5, 0x76, 0x96, 0x17, 0xb2, 0x3e, 0x9e, 0xdf, 0x02, 0x6f, 0x98, 0xe3, 0x5c, 0xa4, 0x76, 0xba, 0xc8, 0x37, 0xab, 0x5d, 0xd3, 0x08, 0xcd, 0x2c, 0x30, 0x37, 0xc4, 0xba, 0xed, 0x40, 0xa6, 0x81, 0x53, 0x18, 0x25, 0xc1, 0x69, 0x00, 0x7b, 0x69, 0x9b, 0x4c, 0x64, 0xd4, 0xb5, 0x4a, 0x8d, 0xd3, 0x59, 0x96, 0x31, 0xe8, 0x6d, 0xc9, 0x8c, 0x8d, 0x64, 0xb8, 0x5a, 0xf9, 0x0b, 0xef, 0x44, 0x7d, 0x41, 0x2e, 0xba, 0xe6, 0x65, 0x3f, 0xf4, 0x1e, 0xe4, 0x1a, 0x47, 0x77, 0xeb, 0x01, 0xe4, 0xda, 0x10, 0xb4, 0xb7, 0xdb, 0xf1, 0x5e, 0x8d, 0x9d, 0x65, 0x85, 0xa8, 0xd6, 0xd9, 0xba, 0x56, 0xb4, 0xd9, 0x32, 0x45, 0xd4, 0x9a, 0x3a, 0x7d, 0x48, 0x08, 0xd9, 0x28, 0xed, 0xea, 0xa3, 0x41, 0xa7, 0xeb, 0xbc, 0xe0, 0x78, 0x47, 0x35, 0x4a, 0x46, 0x53, 0x89, 0x9c, 0x71, 0xd7, 0x60, 0xc5, 0x46, 0x25, 0x20, 0x2a, 0x2a, 0x12, 0xc9, 0x4a, 0x6a, 0xf9, 0x5c, 0x09, 0x46, 0x13, 0x0c, 0x97, 0xd4, 0x19, 0xbf, 0x4a, 0x02, 0x44, 0x87, 0x65, 0xc8, 0x4e, 0xda, 0x63, 0x2f, 0x9b, 0xeb, 0x37, 0x33, 0x50, 0x68, 0x20, 0x0b, 0x3a, 0x68, 0xf7, 0x10, 0x9c, 0x0f, 0x74, 0xfb, 0x0b, 0x28, 0x8b, 0x47, 0x80, 0x04, 0x06, 0x4a, 0x6f, 0x80, 0x88, 0xd9, 0x26, 0xa4, 0x66, 0xdc, 0x30, 0x3c, 0x80, 0xdc, 0x3c, 0x95, 0x9c, 0x4b, 0xaa, 0x2f, 0x62, 0x4a, 0xca, 0xa5, 0xa4, 0x39, 0x84, 0x9a, 0x5a, 0xe9, 0xa8, 0xc3, 0x40, 0xe3, 0x8b, 0xee, 0x90, 0x56, 0xb1, 0x5a, 0x41, 0x86, 0x95, 0xc6, 0xd7, 0xdc, 0xd2, 0xcd, 0x06, 0x5a, 0xf2, 0x74, 0x21, 0x75, 0x6e, 0x98, 0xa1, 0x6a, 0xa6, 0x38, 0x4d, 0xe6, 0x6c, 0x21, 0x56, 0x69, 0x02, 0x6f, 0xb8, 0xe2, 0x71, 0x66, 0x15, 0x5d, 0xcc, 0x21, 0xd2, 0xb7, 0x7b, 0xec, 0x4f, 0x4f, 0xd2, 0xd9, 0x27, 0x64, 0xdb, 0x8c, 0x01, 0x9d, 0x63, 0xdc, 0x2b, 0x1b, 0x35, 0x19, 0x57, 0xeb, 0xb5, 0x70, 0x83, 0xe6, 0xdd, 0xcc, 0x46, 0x9a, 0x3e, 0x49, 0x47, 0xbb, 0xa4, 0x2b, 0x03, 0x65, 0x49, 0xa3, 0x8c, 0xa2, 0xd2, 0x75, 0xa5, 0x99, 0x76, 0x3a, 0x33, 0x9a, 0xd3, 0x2f, 0x9f, 0x01, 0x62, 0xe1, 0x8b, 0x2e, 0x6f, 0x30, 0x02, 0x8b, 0xd1, 0x0a, 0xeb, 0xda, 0xa9, 0x73, 0x45, 0x59, 0x1e, 0x2c, 0x84, 0x42, 0x40, 0x93, 0xa9, 0x88, 0x4e, 0xc2, 0xc2, 0x2f, 0x01, 0x62, 0x11, 0xa5, 0x03, 0xbb, 0x01, 0x90, 0x9a, 0x6a, 0xaa, 0x80, 0x9d, 0xe8, 0xe9, 0xe0, 0xda, 0xce, 0x2c, 0xeb, 0x43, 0x1a, 0xad, 0xb9, 0x09, 0xc6, 0x1e, 0xd2, 0x0d, 0xc3, 0x48, 0x25, 0xa9, 0x23, 0x4d, 0x35, 0x14, 0x6b, 0xe7, 0x3b, 0xaa, 0xfc, 0xa6, 0xa8, 0x91, 0x1a, 0x61, 0x3a, 0xd5, 0x56, 0xcd, 0x4a, 0x52, 0x6e, 0x76, 0x85, 0xad, 0x35, 0x07, 0x38, 0x6e, 0x33, 0x3a, 0x07, 0xd5, 0x9a, 0xae, 0xcb, 0xd6, 0x59, 0x92, 0x97, 0x32, 0x6b, 0x72, 0x05, 0x2f, 0x08, 0xf6, 0x5c, 0xe7, 0x15, 0xc0, 0x64, 0x6a, 0xb3, 0x8a, 0xc6, 0x37, 0x5a, 0x0e, 0x27, 0x19, 0x79, 0x32, 0x49, 0x57, 0xd1, 0x3c, 0x5e, 0x9c, 0x36, 0xc1, 0xe5, 0x25, 0xb5, 0x2e, 0x31, 0xba, 0xc8, 0xcc, 0xf3, 0xe8, 0xac, 0xd3, 0x0d, 0x5e, 0x0b, 0xf6, 0x34, 0xb1, 0xb1, 0x3f, 0x1c, 0x82, 0x8f, 0x35, 0xae, 0xba, 0x1b, 0xa2, 0x6f, 0xee, 0x49, 0x39, 0x4e, 0xd7, 0xcc, 0x28, 0x1d, 0xe0, 0xc6, 0xe9, 0xd7, 0x59, 0x9b, 0xb9, 0xe2, 0x4d, 0x38, 0x44, 0x37, 0x63, 0x33, 0xef, 0xe8, 0xae, 0x77, 0x78, 0x7c, 0x6d, 0x3a, 0x9a, 0x64, 0x0b, 0xf7, 0xd1, 0x51, 0x95, 0x12, 0x69, 0x8d, 0xee, 0x46, 0xb0, 0x1a, 0xe4, 0xcc, 0xaa, 0x44, 0x2c, 0xef, 0x46, 0xb3, 0x87, 0x8e, 0x3b, 0x1f, 0xb0, 0x46, 0x92, 0xcd, 0x6e, 0x36, 0x40, 0x4e, 0xd4, 0xb6, 0x49, 0xf3, 0x9f, 0xc2, 0x03, 0x15, 0x50, 0x8c, 0x3e, 0x9d, 0xec, 0x7e, 0xec, 0x68, 0xf0, 0xac, 0x2c, 0x4c, 0x35, 0x3d, 0x8e, 0x37, 0x03, 0x38, 0xdf, 0xe8, 0x2a, 0x6d, 0x9d, 0x73, 0xac, 0x8f, 0xe3, 0x5e, 0x69, 0x10, 0x94, 0x2b, 0x34, 0xe8, 0xa6, 0x04, 0x2b, 0x28, 0x81, 0xcb, 0x5b, 0x59, 0xaa, 0xcb, 0x2f, 0x85, 0x40, 0xdc, 0x00, 0xda, 0x2c, 0x38, 0x60, 0xbe, 0x71, 0xfd, 0xae, 0xb9, 0x5e, 0xd1, 0x8e, 0x15, 0xcb, 0xf9, 0x89, 0xd6, 0xf8, 0xba, 0xb9, 0xa6, 0x38, 0xed, 0x6d, 0x68, 0x6a, 0xc6, 0xd6, 0xf3, 0x76, 0x2c, 0xdc, 0x5b, 0x57, 0x33, 0xe1, 0x53, 0x55, 0x7b, 0x00, 0x67, 0xb9, 0x41, 0x8c, 0x3b, 0x8c, 0x83, 0xf4, 0xdd, 0xa1, 0x59, 0x68, 0xad, 0xd7, 0xef, 0x29, 0xb9, 0x93, 0xaf, 0x27, 0x83, 0x84, 0x3c, 0x32, 0x2d, 0xb2, 0xec, 0xc8, 0x39, 0xdd, 0x05, 0x82, 0x74, 0x36, 0xd1, 0xb9, 0xb9, 0x79, 0x6d, 0x77, 0x8e, 0x58, 0xd6, 0xd9, 0xaa, 0xec, 0x64, 0x87, 0xf0, 0xd7, 0x94, 0xa5, 0x5a, 0x4b, 0x6a, 0x82, 0xcc, 0xcd, 0x3a, 0x2f, 0x0a, 0xbb, 0x32, 0x79, 0xc6, 0x74, 0x2e, 0x10, 0xd5, 0x4c, 0x1c, 0x49, 0x0e, 0xd7, 0x13, 0x46, 0xcb, 0xc5, 0xc5, 0x89, 0xfb, 0xac, 0x03, 0x9b, 0xa6, 0x04, 0x31, 0x09, 0x10, 0xf4, 0xa3, 0x7f, 0xa0, 0x2d, 0x36, 0xd2, 0x4d, 0x3e, 0xd8, 0x7a, 0x87, 0x30, 0xf0, 0x83, 0x11, 0xee, 0x31, 0x74, 0xad, 0x4c, 0x41, 0xbf, 0x1f, 0x6f, 0xda, 0x20, 0xc1, 0xa6, 0xa9, 0x99, 0xdf, 0x5d, 0xf5, 0xd8, 0xba, 0x13, 0x0b, 0xd8, 0x9e, 0x4b, 0x96, 0x76, 0xe5, 0xda, 0x9d, 0x81, 0x74, 0xf4, 0xa0, 0xd4, 0x0d, 0x35, 0x9c, 0x35, 0x56, 0xd5, 0x8d, 0x86, 0xd4, 0x45, 0x65, 0x92, 0x22, 0x57, 0x40, 0x1c, 0x4d, 0x01, 0x70, 0x49, 0x69, 0x61, 0xb9, 0x54, 0x05, 0x93, 0x08, 0x06, 0x74, 0x4f, 0xbb, 0xe0, 0x2b, 0x13, 0x83, 0x50, 0xcf, 0xa3, 0x67, 0xa7, 0x71, 0xce, 0x97, 0x2f, 0x9b, 0xd7, 0xf7, 0x4d, 0x91, 0x0b, 0xef, 0x4e, 0x91, 0xf3, 0x80, 0xbb, 0x82, 0x1e, 0x40, 0x79, 0xff, 0xff, 0x35, 0xf7, 0x6d, 0xcd, 0x6d, 0x2b, 0x4b, 0x77, 0x3a, 0x7b, 0xfb, 0x26, 0x59, 0x12, 0x0d, 0x08, 0x92, 0x40, 0x82, 0xb8, 0xcc, 0x60, 0x06, 0x33, 0x83, 0x0b, 0x09, 0x50, 0xb2, 0xbd, 0xfd, 0x16, 0xb0, 0x50, 0x15, 0x56, 0x25, 0x55, 0xdf, 0x4b, 0xf2, 0xf0, 0xd5, 0x57, 0x95, 0xfc, 0x16, 0xa0, 0xf0, 0x80, 0xb7, 0xfc, 0xbe, 0xfc, 0x8d, 0x54, 0xde, 0x93, 0x5e, 0x03, 0xca, 0x96, 0x6f, 0xc7, 0xc7, 0xe1, 0x49, 0x2a, 0xb4, 0xa5, 0x4d, 0x51, 0xb2, 0x37, 0xdb, 0x33, 0xd3, 0xbd, 0xba, 0xa7, 0x7b, 0x2d, 0xb6, 0x1f, 0x85, 0x6f, 0x59, 0x0d, 0xa5, 0x65, 0x37, 0x05, 0x8b, 0x9c, 0x6d, 0xab, 0x22, 0xe8, 0x24, 0xe7, 0x81, 0x77, 0x65, 0x09, 0x6b, 0x57, 0x9c, 0x9d, 0xf3, 0xf5, 0x5d, 0x1c, 0x45, 0x32, 0x91, 0xab, 0x30, 0x0d, 0x7f, 0xf7, 0xea, 0x97, 0xce, 0xd9, 0x87, 0x93, 0x10, 0xb1, 0xb5, 0xad, 0x73, 0x44, 0xdb, 0x3e, 0xb1, 0xc8, 0xe1, 0x89, 0xe3, 0x73, 0x3c, 0xe7, 0x64, 0xdd, 0xb1, 0x21, 0xd5, 0x75, 0x08, 0x1d, 0xfb, 0x8e, 0xeb, 0xba, 0xfd, 0x81, 0x96, 0xf5, 0xdd, 0x6f, 0xbe, 0xcf, 0xff, 0x93, 0xc7, 0xc9, 0x97, 0xd4, 0x0f, 0x0f, 0x8f, 0xcd, 0x19, 0xed, 0x39, 0x82, 0x89, 0x7a, 0xf0, 0xfb, 0x01, 0xa2, 0x81, 0x23, 0x01, 0x2d, 0x4d, 0x59, 0xcc, 0xa1, 0xed, 0x86, 0xa1, 0xd7, 0xfd, 0x01, 0x70, 0x79, 0xcf, 0xbe, 0xd0, 0x97, 0x5b, 0x72, 0x9a, 0xc2, 0x0e, 0x31, 0x59, 0x17, 0xf9, 0x24, 0xa4, 0xda, 0x7c, 0x16, 0xda, 0x7b, 0xd2, 0x60, 0xc2, 0x45, 0x19, 0x5c, 0x06, 0xf9, 0x0e, 0x72, 0x82, 0x55, 0xb3, 0x23, 0x7f, 0xa8, 0x14, 0x37, 0xb5, 0x81, 0x3c, 0x85, 0x29, 0xe8, 0x53, 0x01, 0xea, 0x2e, 0x42, 0xc4, 0x9a, 0xdc, 0x48, 0x2c, 0x30, 0xaf, 0x25, 0x53, 0x0a, 0x69, 0xfc, 0xb4, 0x4b, 0x6a, 0x6b, 0x17, 0x9b, 0x28, 0x89, 0x06, 0xfc, 0x75, 0x7b, 0xcf, 0x69, 0x21, 0x77, 0x43, 0xb9, 0x0c, 0x2d, 0xe3, 0xc4, 0x86, 0x03, 0x39, 0xfb, 0x9e, 0xf6, 0x22, 0xa5, 0x01, 0xde, 0x33, 0x6e, 0xa1, 0xcb, 0x30, 0x59, 0x5c, 0xf8, 0xeb, 0xe5, 0x3b, 0x3f, 0xbc, 0x73, 0x9d, 0x7b, 0xcf, 0x5f, 0xc4, 0xe7, 0xcb, 0xd5, 0x8a, 0xbe, 0x76, 0xce, 0xcf, 0x2f, 0xce, 0x2f, 0x2f, 0x3d, 0xf7, 0xea, 0x55, 0x14, 0x2e, 0x9d, 0x8b, 0xb7, 0x97, 0x7f, 0x5e, 0x38, 0x17, 0xe7, 0x57, 0x57, 0x97, 0xf1, 0xcb, 0xd7, 0x6e, 0x78, 0xf9, 0xf6, 0x0f, 0x6f, 0x71, 0xe3, 0xaf, 0x29, 0xf5, 0xbc, 0x26, 0x4c, 0x25, 0x09, 0xbc, 0x80, 0x3b, 0x34, 0x41, 0xe4, 0x06, 0xff, 0x5a, 0xa9, 0x09, 0xc5, 0x14, 0x2b, 0x82, 0x2b, 0x5f, 0xaf, 0xd7, 0x7f, 0xff, 0xcd, 0x42, 0x23, 0xd9, 0xf5, 0xfe, 0xd3, 0x19, 0xd4, 0xae, 0x39, 0xe5, 0x66, 0x7c, 0x66, 0xa8, 0x21, 0x67, 0x31, 0xed, 0xd1, 0x22, 0xd1, 0x92, 0x2b, 0x41, 0x5f, 0x63, 0x47, 0x96, 0xd1, 0xd6, 0x14, 0xe4, 0x40, 0x87, 0xa9, 0x77, 0x0e, 0xd3, 0x64, 0x6f, 0x98, 0x68, 0x99, 0xaa, 0x6d, 0xb1, 0xd9, 0x19, 0x28, 0x2b, 0x35, 0x05, 0xea, 0xf9, 0x75, 0xfc, 0xcf, 0xab, 0xa6, 0x9e, 0x5c, 0x45, 0x7d, 0x78, 0xf8, 0x50, 0x7f, 0x3a, 0x83, 0x7b, 0xf7, 0x7b, 0x7f, 0x64, 0x9e, 0xbd, 0xa7, 0x60, 0x84, 0x1b, 0xd1, 0xdc, 0xde, 0xfb, 0x4e, 0xdf, 0xf9, 0xfb, 0x7e, 0xea, 0xf7, 0x83, 0x4f, 0xe1, 0xdc, 0x25, 0xff, 0x39, 0x50, 0x12, 0xe0, 0x7b, 0xe3, 0x82, 0xa0, 0x39, 0xbc, 0x23, 0x78, 0x85, 0x30, 0x25, 0x42, 0xc6, 0x6d, 0x84, 0x6d, 0x6f, 0xb4, 0x4d, 0x65, 0xb8, 0xb6, 0x68, 0x32, 0xfc, 0x67, 0xab, 0x12, 0xca, 0xb1, 0x93, 0xb2, 0xda, 0x34, 0xaa, 0xd8, 0xe5, 0xa8, 0x43, 0xea, 0xcc, 0xe8, 0x74, 0x23, 0xc9, 0xef, 0x57, 0xba, 0xa9, 0xd2, 0xc2, 0xc4, 0x55, 0xa1, 0xd2, 0x30, 0xe3, 0xb9, 0x4a, 0x73, 0x41, 0xa0, 0x5f, 0xc6, 0x01, 0xc6, 0x9e, 0x4e, 0x3c, 0x65, 0x7f, 0xd1, 0x6e, 0xa4, 0x48, 0x3d, 0x0d, 0xe4, 0x24, 0xfc, 0xc9, 0x96, 0x3c, 0x7c, 0x3e, 0xb6, 0xcc, 0xc3, 0x6c, 0x38, 0x1a, 0x94, 0x46, 0x9f, 0xf9, 0x7b, 0x0f, 0xa5, 0x7e, 0x46, 0x4f, 0x04, 0xa7, 0x45, 0x64, 0xd7, 0x22, 0x15, 0x2a, 0x9c, 0x29, 0xcb, 0x31, 0x0e, 0xf8, 0x74, 0x7d, 0xf6, 0xa4, 0x9a, 0x65, 0x35, 0xe0, 0xeb, 0x66, 0x9e, 0x85, 0x44, 0x3d, 0x7f, 0x3e, 0x73, 0xbb, 0xb9, 0xb7, 0x98, 0x2c, 0xdd, 0x40, 0xa6, 0x5a, 0x51, 0x70, 0x2b, 0xf5, 0x96, 0xf6, 0x60, 0xad, 0xcb, 0x0a, 0x27, 0x6f, 0x1b, 0x6e, 0x94, 0x4a, 0x90, 0x6c, 0x27, 0xb7, 0x27, 0x9e, 0x32, 0xd8, 0x35, 0xf5, 0xdd, 0xe8, 0x1f, 0x1c, 0xe1, 0x4f, 0x7d, 0xef, 0x31, 0xbd, 0xd7, 0x2e, 0x01, 0x0e, 0x0a, 0x70, 0x48, 0xd8, 0x46, 0xa6, 0xdb, 0xc1, 0xd5, 0xe3, 0xa1, 0x1d, 0x7b, 0x8a, 0xd7, 0x20, 0x83, 0x1a, 0x46, 0x4b, 0xba, 0x43, 0xf8, 0x4a, 0xce, 0xaa, 0x44, 0x14, 0xd6, 0xe0, 0x43, 0x36, 0xc7, 0x39, 0x9f, 0xed, 0x91, 0x6e, 0xde, 0xb6, 0x15, 0x17, 0x47, 0xbd, 0xcb, 0x12, 0xfd, 0xb4, 0xc7, 0x4a, 0x2b, 0x99, 0x5c, 0x10, 0x28, 0x6b, 0x2a, 0x2b, 0xa5, 0x02, 0xe7, 0x01, 0x32, 0xf3, 0xba, 0xb2, 0x1a, 0x0a, 0x05, 0x45, 0xfd, 0x82, 0x30, 0xc8, 0x89, 0xeb, 0xf5, 0x09, 0x3a, 0xb8, 0x04, 0xa9, 0x5a, 0xed, 0x4e, 0x5d, 0x47, 0xef, 0x1c, 0xf4, 0xb5, 0xbe, 0x75, 0x15, 0x07, 0x28, 0xa7, 0x78, 0x64, 0x72, 0xa7, 0xfd, 0xce, 0xf3, 0x1c, 0xdd, 0x3d, 0x91, 0x48, 0x43, 0x51, 0x8a, 0x42, 0xb3, 0xd8, 0xd6, 0x4f, 0x5e, 0x91, 0x4c, 0x88, 0x6d, 0xf7, 0x18, 0x40, 0xa2, 0xf5, 0x91, 0x96, 0x76, 0xb8, 0xa0, 0x14, 0x13, 0xda, 0x14, 0xda, 0x0e, 0x31, 0x25, 0x45, 0x9a, 0x15, 0x32, 0xa5, 0xbc, 0x99, 0xd6, 0x49, 0x13, 0x0a, 0x29, 0x31, 0x4a, 0x6d, 0x27, 0x55, 0x8d, 0x11, 0x46, 0x67, 0x60, 0x91, 0x5b, 0x4b, 0x96, 0x50, 0x5a, 0xf3, 0x2b, 0x4e, 0xe5, 0x5f, 0xad, 0x17, 0xd9, 0xd5, 0xbb, 0xec, 0x80, 0x1a, 0x55, 0x4f, 0x6e, 0xd0, 0xe3, 0xad, 0xc3, 0x1d, 0x87, 0xfc, 0xa1, 0xcf, 0x9d, 0x91, 0xf0, 0x15, 0xf3, 0x39, 0xa1, 0x11, 0x82, 0x1e, 0x10, 0xff, 0x7a, 0x22, 0x90, 0x7e, 0x77, 0xf1, 0xfa, 0x8f, 0x37, 0x2c, 0x0e, 0x5e, 0x90, 0x97, 0x7b, 0xfb, 0xf2, 0x72, 0x1d, 0x84, 0xce, 0x1f, 0x7f, 0xbe, 0x8d, 0xd6, 0xc9, 0xf9, 0xdb, 0x17, 0x6f, 0xd6, 0xeb, 0xcb, 0x3f, 0xdf, 0x44, 0x8b, 0x57, 0xaf, 0x5e, 0x5c, 0x5d, 0xbc, 0x78, 0xb5, 0xba, 0xb8, 0x78, 0xf5, 0xc7, 0xe5, 0x9b, 0xe0, 0x32, 0x5a, 0x5d, 0xbc, 0x8c, 0xc2, 0x17, 0xc9, 0xf2, 0xe2, 0xf5, 0xcb, 0xd8, 0x7b, 0xf9, 0xea, 0xf5, 0xb5, 0xe3, 0xdd, 0xac, 0x2e, 0x57, 0xf4, 0xff, 0x79, 0xbb, 0x58, 0xae, 0xee, 0x6f, 0xe3, 0x38, 0x8a, 0x79, 0x14, 0x2f, 0x93, 0x24, 0x65, 0xfc, 0x1b, 0xcd, 0x83, 0xe7, 0xb8, 0x6a, 0xf1, 0x8f, 0xac, 0xd7, 0xe3, 0xd9, 0xfe, 0x89, 0x95, 0x1c, 0x5c, 0xaf, 0xb6, 0xe9, 0x79, 0xe2, 0xdc, 0xe5, 0x23, 0xdc, 0x20, 0x85, 0xe9, 0x3d, 0x9f, 0xba, 0x23, 0x71, 0xd7, 0x9e, 0x12, 0xcd, 0xee, 0xc0, 0xc5, 0xb5, 0x7f, 0x13, 0xa7, 0xa9, 0x1f, 0x86, 0xe1, 0x3a, 0x0a, 0x4f, 0x60, 0xa9, 0xfd, 0x2d, 0x97, 0xf8, 0xbd, 0x65, 0xbf, 0x58, 0xb1, 0xc7, 0x33, 0x0a, 0x5c, 0x50, 0x5a, 0x62, 0xae, 0xe8, 0x84, 0xe3, 0xa2, 0xbe, 0xd8, 0x6b, 0xc7, 0xf5, 0xf7, 0xd0, 0xbb, 0xa1, 0xa8, 0x2c, 0x5a, 0x42, 0x52, 0x8c, 0x71, 0xd1, 0xfb, 0x08, 0x0a, 0x7a, 0xe8, 0xbc, 0x05, 0x67, 0xd1, 0x8a, 0x93, 0x2f, 0xb9, 0xbf, 0x5f, 0x05, 0xf7, 0xef, 0xde, 0x86, 0xcb, 0x3f, 0xcf, 0xcf, 0x6f, 0x6f, 0xde, 0x9e, 0xbf, 0x7e, 0x7d, 0x7e, 0xf3, 0xee, 0x2a, 0x5d, 0x07, 0x09, 0x5b, 0xaf, 0xee, 0xbd, 0x75, 0x70, 0xf9, 0x62, 0x19, 0x46, 0xab, 0xf8, 0xea, 0xcd, 0xd5, 0xcd, 0xf9, 0x3d, 0xe3, 0x8b, 0xd5, 0xfd, 0xdd, 0xdb, 0x97, 0xb7, 0x7f, 0x4b, 0xa2, 0x77, 0x49, 0x94, 0xbc, 0x0c, 0xd9, 0xf7, 0x8a, 0x66, 0xcf, 0x2c, 0xfb, 0x8f, 0xa7, 0x61, 0xe1, 0x47, 0x4b, 0xb6, 0x43, 0xf9, 0x18, 0xd8, 0x92, 0x41, 0x19, 0xed, 0xf5, 0x1e, 0x39, 0x79, 0x48, 0x9f, 0x83, 0x1b, 0x7a, 0x56, 0x3b, 0x3f, 0xa0, 0x73, 0xd8, 0x3d, 0x58, 0xf9, 0x73, 0xf7, 0x80, 0x16, 0x62, 0x7f, 0x21, 0x4c, 0x31, 0x37, 0xb3, 0x93, 0x37, 0xab, 0xd0, 0xa4, 0xdf, 0x6c, 0xa0, 0xf6, 0x02, 0xc9, 0x17, 0x83, 0x3b, 0x26, 0xe0, 0xe1, 0x59, 0x1c, 0x60, 0x57, 0x59, 0x84, 0x8c, 0xde, 0x2e, 0xb4, 0x10, 0x6f, 0x77, 0x36, 0x38, 0x6c, 0x2b, 0xfa, 0x40, 0x6f, 0x2e, 0x18, 0x62, 0x29, 0x14, 0x58, 0xe6, 0xd8, 0x2c, 0x67, 0x84, 0x90, 0xa1, 0x30, 0x15, 0xa5, 0xbf, 0x54, 0x7c, 0xfc, 0xd5, 0x6e, 0x7c, 0xa8, 0xcf, 0x3c, 0x82, 0x83, 0x94, 0x28, 0x3b, 0x63, 0xa7, 0x09, 0x5d, 0xf5, 0xfd, 0x81, 0x39, 0x2e, 0x65, 0x9e, 0xe3, 0x5e, 0xeb, 0xd1, 0x87, 0x42, 0x80, 0xb7, 0xd7, 0x7b, 0xe6, 0x3e, 0x13, 0xb3, 0xb4, 0x39, 0xa7, 0x9d, 0x39, 0xd8, 0xce, 0x95, 0xe1, 0x7a, 0xce, 0xbe, 0xec, 0x5c, 0x27, 0x5c, 0x47, 0x3e, 0xcf, 0xbc, 0xef, 0x6c, 0x07, 0x05, 0x7a, 0x3c, 0xc8, 0xcd, 0x1b, 0xcb, 0xdb, 0x62, 0x35, 0xde, 0x33, 0xad, 0xc8, 0x7d, 0x54, 0x85, 0x41, 0x83, 0x74, 0x01, 0x5d, 0x07, 0x94, 0xad, 0x96, 0x46, 0x58, 0x96, 0xb5, 0x55, 0x7c, 0x7b, 0xfb, 0x4b, 0x85, 0xce, 0x5f, 0xed, 0x45, 0xb2, 0xcb, 0xa1, 0xdc, 0x9f, 0x75, 0x64, 0x90, 0x33, 0xf6, 0x94, 0xbd, 0x74, 0x1c, 0xaa, 0xed, 0xa0, 0xc6, 0x26, 0xe7, 0xd8, 0x39, 0x7b, 0xca, 0xc5, 0xa0, 0x65, 0x31, 0x0d, 0x5f, 0x37, 0xb7, 0x28, 0xdb, 0xdc, 0x62, 0xe3, 0x98, 0x6d, 0x26, 0xdb, 0xce, 0x66, 0xd6, 0xb6, 0x23, 0xb5, 0x29, 0xac, 0x61, 0x6c, 0x9e, 0x6d, 0xcf, 0x4d, 0x49, 0xb6, 0x14, 0x14, 0xce, 0x9a, 0xb0, 0x2e, 0x64, 0x56, 0x60, 0x98, 0xbf, 0xda, 0xe6, 0x26, 0x4e, 0x4b, 0x53, 0x2a, 0xfa, 0x96, 0x1d, 0x8c, 0x4c, 0x0d, 0x57, 0x99, 0x90, 0xa0, 0x8b, 0xf2, 0xbf, 0x51, 0xe0, 0xf8, 0xed, 0xdc, 0xe5, 0xf1, 0xa3, 0x6d, 0x65, 0xef, 0x3c, 0x0d, 0x66, 0x1d, 0x4f, 0x74, 0xe3, 0x67, 0xf6, 0xa3, 0xef, 0x93, 0x99, 0x56, 0x0f, 0x42, 0xa3, 0x81, 0xee, 0x3a, 0x89, 0xc1, 0xa8, 0x0b, 0x80, 0x67, 0xf4, 0x6d, 0x18, 0x09, 0xe8, 0x92, 0xf1, 0x20, 0xa6, 0xdc, 0x8a, 0x60, 0x6c, 0x06, 0x22, 0xfc, 0x3c, 0x36, 0x1e, 0x53, 0x59, 0xb6, 0xce, 0xd5, 0x1d, 0x8f, 0xb3, 0x18, 0xe7, 0x54, 0xa5, 0x81, 0x48, 0xca, 0x50, 0xdf, 0x81, 0x60, 0x27, 0xfa, 0xf9, 0x01, 0x7b, 0x3a, 0x65, 0xff, 0xfe, 0xb4, 0xdc, 0x05, 0xb6, 0xb1, 0x6e, 0x70, 0x39, 0x00, 0xa2, 0x66, 0x7b, 0xcc, 0xac, 0x7e, 0x4d, 0x8e, 0xd1, 0x76, 0x5f, 0x28, 0xc8, 0xda, 0x59, 0x3f, 0x90, 0xce, 0x18, 0xe8, 0xee, 0x4d, 0xc2, 0xf4, 0x2d, 0x41, 0x73, 0xf4, 0x35, 0xb3, 0x7c, 0x9d, 0xa7, 0x12, 0xc4, 0x70, 0x77, 0x66, 0x79, 0x27, 0xbd, 0x78, 0x19, 0xfa, 0xb7, 0x31, 0xd9, 0x13, 0x46, 0xca, 0x15, 0x91, 0xcf, 0xe5, 0xbd, 0x7b, 0x1f, 0x85, 0x77, 0x4b, 0x8f, 0xb9, 0xd1, 0xdf, 0xe2, 0xf5, 0x2a, 0x5e, 0x27, 0x71, 0x10, 0xdc, 0xfd, 0x5d, 0xdb, 0xfe, 0xc3, 0x69, 0x70, 0xf1, 0x7d, 0x0d, 0x89, 0x11, 0x88, 0x81, 0x63, 0x88, 0xe9, 0xf3, 0x2f, 0xfa, 0xed, 0xf7, 0x3d, 0x65, 0x65, 0x87, 0xa1, 0xef, 0x0e, 0x74, 0xd6, 0xf6, 0xae, 0x23, 0x46, 0xd6, 0x4d, 0xe3, 0x64, 0x65, 0xce, 0x28, 0x79, 0xc1, 0x65, 0x2c, 0xc1, 0x45, 0x3a, 0x48, 0x95, 0x01, 0x57, 0xc6, 0x56, 0x79, 0x25, 0x3d, 0x23, 0xbf, 0x10, 0x34, 0x79, 0x2d, 0x14, 0x20, 0x14, 0x1d, 0xc1, 0x6c, 0x57, 0xec, 0xc8, 0x5b, 0xe4, 0xa6, 0x89, 0x94, 0xd8, 0xd4, 0x46, 0x6c, 0xb4, 0x4a, 0x94, 0x25, 0x9f, 0xcc, 0xab, 0xed, 0xc6, 0xd0, 0x8f, 0xdd, 0x16, 0x1b, 0x6d, 0x52, 0x4a, 0x69, 0x14, 0x41, 0xfd, 0x90, 0x02, 0x35, 0x8f, 0xd6, 0xc1, 0x7a, 0x75, 0x9a, 0x03, 0x79, 0xbf, 0x7b, 0x38, 0xc3, 0xdc, 0xdc, 0xe8, 0x83, 0x35, 0x82, 0x80, 0x07, 0xe8, 0x1a, 0xe1, 0x0f, 0xc9, 0x2b, 0xf6, 0x20, 0xc1, 0x86, 0x1d, 0xfd, 0x38, 0x1e, 0x07, 0x2b, 0x2c, 0xdf, 0x7e, 0xef, 0xa0, 0x57, 0xd3, 0xf2, 0xe8, 0x03, 0x7d, 0x14, 0x9f, 0x95, 0x45, 0xc8, 0x3e, 0xd4, 0x54, 0x65, 0x96, 0x19, 0xb9, 0xfd, 0x42, 0xbd, 0x33, 0x7f, 0x0b, 0xb2, 0xe1, 0x7a, 0x7b, 0x94, 0x18, 0xb1, 0x53, 0x5a, 0x55, 0x89, 0x29, 0xa6, 0xd8, 0x12, 0x62, 0x83, 0xdc, 0x6b, 0x4b, 0xa8, 0xba, 0x64, 0x28, 0x48, 0x82, 0xce, 0xec, 0x34, 0x07, 0x02, 0xbb, 0xa0, 0x23, 0xe5, 0xd2, 0xaf, 0x1e, 0x2e, 0x1e, 0xbc, 0x18, 0x47, 0x13, 0x50, 0x99, 0x03, 0x82, 0xa4, 0x35, 0x3a, 0xbe, 0xe0, 0x33, 0x1b, 0x05, 0xbe, 0x48, 0x1f, 0x54, 0xf5, 0xa6, 0xb2, 0xda, 0x0e, 0xf0, 0x92, 0x90, 0x39, 0xb3, 0xac, 0x12, 0x4f, 0x2e, 0x73, 0x63, 0x7b, 0x5b, 0xbe, 0x48, 0xaa, 0xd4, 0x4f, 0xff, 0x00, 0xb3, 0xa6, 0xc5, 0x71, 0x32, 0xde, 0xf6, 0x64, 0xcd, 0xb6, 0x93, 0x2f, 0x2a, 0x55, 0x91, 0xe7, 0xa0, 0xc4, 0x3e, 0xcd, 0x81, 0xbc, 0xff, 0x80, 0x0e, 0x32, 0x8f, 0x80, 0xfb, 0xc8, 0x7c, 0x74, 0x30, 0xf6, 0x87, 0xbd, 0xe7, 0x42, 0x09, 0xa0, 0x65, 0x04, 0x80, 0xa7, 0xe1, 0x87, 0x37, 0xee, 0xd7, 0xcb, 0xd5, 0x32, 0x5c, 0x07, 0x22, 0x65, 0x6b, 0x9e, 0xae, 0x79, 0x28, 0x42, 0x5f, 0x08, 0x26, 0x79, 0x2a, 0x3c, 0x1e, 0xa5, 0x22, 0xcd, 0x52, 0xb9, 0x8e, 0xd2, 0x50, 0x82, 0x0c, 0x1a, 0xac, 0x25, 0xa9, 0x4a, 0x55, 0xa6, 0x6e, 0x32, 0x5f, 0x64, 0xcb, 0x8c, 0xbe, 0x1b, 0x1a, 0x21, 0x94, 0x40, 0x47, 0xed, 0x2a, 0x16, 0x2a, 0x96, 0x46, 0x4a, 0x76, 0xaf, 0xa4, 0x58, 0x06, 0xb8, 0x14, 0x0c, 0x9e, 0x0e, 0xd9, 0x69, 0x4c, 0x5d, 0xb3, 0x6d, 0x0e, 0x65, 0x5c, 0x07, 0x0a, 0x61, 0x6d, 0x3b, 0x02, 0xd2, 0xbb, 0x68, 0x69, 0x9c, 0xf6, 0x1e, 0x7d, 0x7c, 0x6e, 0xcf, 0xfc, 0x96, 0xda, 0x9b, 0xa7, 0x29, 0x06, 0xa0, 0xd3, 0x08, 0x44, 0x33, 0x92, 0xac, 0x08, 0x96, 0x41, 0x1a, 0xa6, 0x2c, 0x13, 0x51, 0x06, 0x99, 0xcd, 0x80, 0x09, 0x91, 0x08, 0x94, 0xd6, 0xa4, 0xcf, 0xee, 0x13, 0xfc, 0x10, 0xb3, 0x52, 0xda, 0x29, 0x57, 0xc9, 0xdd, 0x72, 0xb5, 0x0e, 0xe3, 0x40, 0x3a, 0xeb, 0x38, 0x08, 0x45, 0x26, 0xbc, 0x84, 0xc5, 0x61, 0xf4, 0x2e, 0x4e, 0xd6, 0xb7, 0x8c, 0xb2, 0xb1, 0x28, 0x7e, 0x17, 0x06, 0xbf, 0x9a, 0x9f, 0xfe, 0xd5, 0x9a, 0x7d, 0xfc, 0x78, 0xd6, 0xb7, 0xb6, 0xff, 0x0d, 0x0d, 0x71, 0x53, 0x7f, 0xc0, 0x8c, 0xf1, 0xc1, 0x1d, 0x46, 0x3a, 0x60, 0x98, 0x3d, 0x63, 0x9d, 0x43, 0x90, 0xb8, 0x3f, 0xb4, 0xcf, 0xe9, 0x28, 0x17, 0xbc, 0x88, 0xaa, 0x99, 0x23, 0x14, 0xfd, 0xd0, 0x47, 0x0e, 0xd4, 0x79, 0x67, 0x2d, 0x30, 0x0e, 0x69, 0xf9, 0x78, 0xb7, 0xc6, 0x22, 0x90, 0x59, 0x12, 0xa6, 0xb6, 0x81, 0xbb, 0x69, 0x6c, 0x57, 0x8b, 0xa2, 0xcd, 0x26, 0xae, 0xc8, 0x70, 0x46, 0xc0, 0xde, 0xa8, 0xa4, 0x34, 0x7a, 0x1b, 0x65, 0x20, 0xb9, 0x92, 0x72, 0x0d, 0x35, 0x29, 0xf1, 0xcb, 0x6b, 0xe9, 0x5f, 0xad, 0x17, 0xec, 0xa2, 0x94, 0xd2, 0x19, 0xfc, 0x69, 0xd0, 0x7b, 0x3a, 0x4d, 0xae, 0xef, 0xba, 0x9e, 0xd7, 0x33, 0xca, 0xc9, 0x08, 0x39, 0xfa, 0xd0, 0xf6, 0x99, 0x90, 0xbc, 0x3c, 0xa7, 0xa2, 0x5c, 0x08, 0x48, 0xec, 0x11, 0xa6, 0x7a, 0x9b, 0xa6, 0xb4, 0x0a, 0x9b, 0x99, 0x01, 0xd5, 0xb2, 0x92, 0x1d, 0x19, 0x5c, 0x66, 0x4b, 0xf3, 0x99, 0x75, 0x93, 0x1e, 0x0b, 0xca, 0x4e, 0x44, 0x73, 0x6c, 0xa4, 0x28, 0x8e, 0x2a, 0x01, 0x55, 0xb3, 0xd9, 0x52, 0xa8, 0x48, 0x10, 0x12, 0x55, 0x54, 0xa5, 0x06, 0x4e, 0x23, 0xc0, 0xad, 0x0c, 0x5b, 0x86, 0xa7, 0x15, 0x3e, 0xde, 0x7f, 0xfc, 0x8b, 0xd0, 0xe2, 0xd0, 0x92, 0xaf, 0x9b, 0x5a, 0x17, 0x37, 0x9a, 0x23, 0x23, 0xec, 0x41, 0x8e, 0x51, 0x20, 0x6d, 0xe9, 0xfc, 0xa1, 0xd5, 0x1d, 0x1b, 0x7a, 0x50, 0xd8, 0x3a, 0x68, 0xbb, 0x12, 0x07, 0xda, 0xad, 0xed, 0x42, 0x9b, 0x92, 0xc7, 0x94, 0x2e, 0x56, 0x50, 0x2d, 0x28, 0xed, 0x68, 0x20, 0xf8, 0xb8, 0xd0, 0x6a, 0x45, 0x40, 0x11, 0xb4, 0xc2, 0x48, 0x96, 0xf1, 0x7a, 0x28, 0xcb, 0x9a, 0x2d, 0x25, 0xbd, 0xbc, 0x4c, 0xcc, 0x66, 0x13, 0x70, 0xdc, 0x4b, 0x24, 0x65, 0x56, 0xe6, 0xba, 0xb0, 0x4d, 0x2d, 0x61, 0x25, 0x45, 0x02, 0xb5, 0x51, 0x16, 0xc9, 0x74, 0x4d, 0xc7, 0xcd, 0xf9, 0x87, 0x0f, 0xd9, 0x2f, 0x36, 0xe3, 0x87, 0x87, 0x87, 0x33, 0xda, 0x84, 0xdd, 0x48, 0x20, 0x91, 0x96, 0x0b, 0x24, 0x3b, 0xb8, 0xb8, 0x3d, 0x8c, 0xe3, 0xe8, 0x8e, 0x5e, 0xef, 0xb4, 0xfe, 0x34, 0x75, 0x3e, 0xf3, 0x04, 0x0e, 0xd8, 0xb3, 0x2a, 0x5c, 0x69, 0x6f, 0x29, 0x78, 0x7d, 0xa4, 0x52, 0xdb, 0x82, 0xfb, 0xa9, 0x39, 0x0a, 0x39, 0x98, 0xe6, 0xa8, 0x07, 0x66, 0xbd, 0x1f, 0xa5, 0x9c, 0xf9, 0x4e, 0xa6, 0x05, 0x0a, 0x1d, 0x14, 0x26, 0x6c, 0x97, 0x63, 0xbd, 0xa4, 0x24, 0x74, 0x63, 0xea, 0x52, 0x35, 0xc6, 0xe4, 0xb5, 0xac, 0x55, 0x59, 0x52, 0x14, 0x8b, 0xa5, 0xd6, 0x9b, 0x4c, 0xf8, 0x64, 0xe4, 0xa9, 0x88, 0xd1, 0xda, 0x35, 0x80, 0x51, 0x61, 0xa4, 0xc4, 0xcf, 0xf1, 0x07, 0xda, 0x81, 0xec, 0xc0, 0x18, 0x73, 0x71, 0x01, 0x4f, 0xde, 0x7d, 0x3a, 0xd0, 0x7a, 0x1e, 0xd0, 0x1f, 0xfd, 0x4c, 0x08, 0x6c, 0x21, 0xe2, 0x52, 0x92, 0xc3, 0xd7, 0x92, 0xa2, 0xf4, 0x76, 0xcb, 0xa1, 0x7e, 0x5e, 0x5b, 0xe6, 0x24, 0xc2, 0xec, 0x73, 0xb4, 0xca, 0xad, 0x08, 0x80, 0x65, 0x64, 0xc7, 0x75, 0x27, 0x1d, 0x2d, 0x68, 0xd6, 0xa3, 0x24, 0x09, 0x10, 0x69, 0x72, 0x51, 0xeb, 0x52, 0xd7, 0x19, 0xca, 0x38, 0xaa, 0xa4, 0xf0, 0x5c, 0xea, 0x2c, 0x8e, 0x09, 0xdd, 0x93, 0x5d, 0x02, 0x14, 0xd1, 0xa7, 0x69, 0x80, 0x3d, 0x7c, 0xf8, 0xf4, 0xe9, 0x8c, 0x52, 0xcb, 0xbe, 0xdb, 0x63, 0x32, 0x95, 0xde, 0xbf, 0x47, 0xd0, 0x1e, 0x24, 0x20, 0x14, 0xba, 0x08, 0x8f, 0x4c, 0x1c, 0x95, 0xd3, 0x3d, 0xef, 0xbf, 0x66, 0xdd, 0xb9, 0x0e, 0x97, 0x77, 0x21, 0x5f, 0x91, 0xf9, 0xa1, 0x54, 0x01, 0x8f, 0xa4, 0x8c, 0x33, 0x48, 0x1b, 0x8a, 0x4c, 0xa6, 0x20, 0xf4, 0x58, 0x53, 0x90, 0x96, 0x89, 0x5c, 0xab, 0x20, 0x53, 0x6b, 0x50, 0x31, 0xe8, 0x8c, 0x69, 0x43, 0x48, 0x52, 0x47, 0xda, 0xbc, 0xcb, 0xc1, 0xd5, 0x18, 0xc7, 0xbc, 0x60, 0x1a, 0x22, 0xcd, 0x52, 0x11, 0xbc, 0x5a, 0xa6, 0x14, 0xd5, 0xc5, 0x9d, 0x62, 0x77, 0x77, 0x92, 0x12, 0xf4, 0x38, 0xf6, 0x4f, 0x43, 0x8b, 0xb0, 0xab, 0xf3, 0xbd, 0x4e, 0x7b, 0x14, 0xa1, 0x5a, 0xa7, 0x6b, 0x0f, 0x68, 0x19, 0xf6, 0x0f, 0x84, 0xf2, 0x5d, 0xc2, 0xbc, 0x1a, 0x15, 0x37, 0xae, 0x5d, 0xca, 0xac, 0xbf, 0x52, 0x2d, 0x5e, 0x51, 0x98, 0xbe, 0x5d, 0x2d, 0x6f, 0xa3, 0x84, 0xfb, 0x9c, 0x27, 0x32, 0x40, 0xb9, 0x42, 0x10, 0x44, 0x0c, 0xd0, 0xdc, 0xc1, 0xef, 0x64, 0x1c, 0x30, 0x16, 0x5d, 0x5f, 0x79, 0xeb, 0x1b, 0x1e, 0xde, 0x06, 0xdc, 0xa1, 0x7f, 0x86, 0xa5, 0x9b, 0x70, 0x16, 0xa4, 0x64, 0xd3, 0x9a, 0x65, 0x81, 0xba, 0x14, 0xf7, 0x41, 0x10, 0xad, 0x5e, 0xbe, 0x4e, 0x2e, 0xfc, 0xc5, 0xfd, 0x35, 0xe5, 0xaf, 0xf1, 0x3f, 0x77, 0x00, 0xe6, 0xe1, 0x63, 0xfd, 0x80, 0x8a, 0xf0, 0x61, 0x10, 0x33, 0x03, 0xc8, 0xcc, 0x36, 0xe6, 0x0f, 0xdd, 0xa1, 0xff, 0xfc, 0xa5, 0xd5, 0xee, 0x1c, 0xc7, 0xe9, 0xcb, 0xbc, 0xa0, 0xd5, 0xdf, 0xd8, 0x66, 0x70, 0x88, 0x99, 0x25, 0x6f, 0x79, 0xe2, 0x81, 0xb6, 0xea, 0x7a, 0x99, 0xb6, 0x17, 0x66, 0xdb, 0x7c, 0x8b, 0x0e, 0xb1, 0x79, 0xf3, 0x61, 0xda, 0x65, 0x5b, 0x1a, 0x74, 0x7d, 0xd3, 0xe6, 0xab, 0x63, 0x06, 0xad, 0xc0, 0x5c, 0xa8, 0x25, 0xae, 0x75, 0x23, 0xdc, 0x6a, 0x53, 0x80, 0x0b, 0x62, 0x09, 0xe1, 0x83, 0x28, 0xe0, 0xe9, 0xcd, 0x89, 0x67, 0x0c, 0x76, 0x0d, 0x0e, 0x04, 0xeb, 0x7f, 0x2a, 0x3b, 0x0a, 0xd9, 0x5f, 0x01, 0xa7, 0xf9, 0xe5, 0x52, 0x70, 0x61, 0x67, 0xdd, 0xab, 0xc0, 0xde, 0x96, 0x01, 0x3c, 0x65, 0x4f, 0xf5, 0x7c, 0x72, 0xfc, 0x52, 0x5b, 0xed, 0x8d, 0xb9, 0x31, 0x42, 0xe5, 0x68, 0x14, 0xce, 0x9e, 0xa6, 0xfc, 0x15, 0x07, 0xc1, 0x2b, 0x24, 0xce, 0x78, 0x03, 0x9d, 0x11, 0xad, 0x64, 0xaa, 0xb5, 0x08, 0x0c, 0x40, 0x0a, 0x9d, 0xb1, 0x24, 0x21, 0xbb, 0xd8, 0x2a, 0x61, 0xcb, 0xd3, 0xc8, 0x76, 0x1e, 0x3e, 0x7e, 0x78, 0x7f, 0xd6, 0xf9, 0x9f, 0xe5, 0x35, 0xfc, 0x99, 0x1e, 0xcf, 0x1b, 0x9d, 0xa9, 0x03, 0x29, 0x5e, 0x8b, 0xa6, 0xe8, 0xd6, 0xff, 0x4c, 0x8f, 0x77, 0xe4, 0x31, 0x3f, 0xd6, 0xe0, 0x0c, 0x85, 0x2d, 0x6d, 0x8a, 0x5a, 0x72, 0x3a, 0x5d, 0xb9, 0x94, 0xb4, 0x00, 0x78, 0x96, 0x71, 0x7a, 0x93, 0x85, 0xcc, 0xd3, 0x9c, 0x3c, 0x43, 0x5e, 0x28, 0xc5, 0x99, 0x0a, 0xd7, 0x04, 0xa2, 0xe4, 0xba, 0x50, 0x59, 0x99, 0x2e, 0x93, 0x52, 0x46, 0xe4, 0x31, 0x92, 0x55, 0x9c, 0x28, 0xda, 0xb2, 0x31, 0x97, 0x6b, 0x3a, 0x96, 0xec, 0x32, 0xb9, 0x4d, 0x12, 0x02, 0x1e, 0x74, 0x74, 0xef, 0x4f, 0xd4, 0x45, 0xb4, 0x76, 0xcd, 0x8c, 0x99, 0xd3, 0x0f, 0x3e, 0xe9, 0xcf, 0x83, 0x66, 0xfe, 0xe0, 0x0d, 0xe4, 0x31, 0xe9, 0x19, 0xe7, 0xce, 0xb4, 0x00, 0x23, 0xde, 0x3c, 0x6e, 0x60, 0x3e, 0xeb, 0x6e, 0xe4, 0x1a, 0xba, 0x1b, 0xf2, 0xa8, 0x8d, 0x98, 0x2b, 0x99, 0x6b, 0xab, 0x0a, 0xa3, 0x1a, 0x49, 0x39, 0x8b, 0xc9, 0xcb, 0xba, 0x89, 0xb6, 0x69, 0x5d, 0xe8, 0x82, 0xd7, 0x65, 0x5e, 0x90, 0x43, 0x24, 0xc4, 0xc8, 0xc9, 0x7c, 0x96, 0x15, 0xc6, 0xa4, 0x9a, 0x53, 0x38, 0xc8, 0x8b, 0x8c, 0x76, 0xe5, 0xed, 0xea, 0x7e, 0x75, 0xe2, 0x0d, 0xe0, 0xa7, 0xfa, 0x83, 0x25, 0x60, 0x9f, 0xc4, 0x74, 0x1c, 0x9b, 0x1b, 0xfe, 0xde, 0x33, 0x7d, 0x24, 0x60, 0x8f, 0x71, 0xbe, 0xac, 0x66, 0x71, 0x3c, 0x8f, 0x3b, 0x6e, 0x67, 0x94, 0x61, 0xec, 0x64, 0x2a, 0xcb, 0x50, 0x0c, 0x30, 0xdb, 0x68, 0xbd, 0x10, 0xd0, 0xf8, 0x52, 0x59, 0xda, 0x44, 0xc5, 0x3a, 0x63, 0x26, 0x2b, 0xad, 0x73, 0xcf, 0xb8, 0x52, 0x89, 0x88, 0x5d, 0x19, 0xc5, 0xc9, 0x3b, 0x1e, 0x05, 0xb1, 0x1b, 0x45, 0xc1, 0xe2, 0x32, 0x89, 0xee, 0x56, 0x9c, 0x45, 0xfc, 0x9f, 0x04, 0x82, 0x61, 0x1b, 0x94, 0x6c, 0xfc, 0x8e, 0x79, 0x2d, 0x61, 0x7b, 0x34, 0x71, 0xbb, 0xd8, 0x75, 0x76, 0xff, 0x79, 0xfd, 0xbc, 0x09, 0xe7, 0xf9, 0xc7, 0xfd, 0xe7, 0x43, 0xb7, 0xc8, 0x6e, 0x28, 0xe4, 0x44, 0xe0, 0x09, 0xb6, 0x61, 0xd8, 0xe0, 0x74, 0xc9, 0x59, 0xf8, 0x5c, 0x6e, 0xd7, 0x92, 0xd3, 0xce, 0x7b, 0xc7, 0x04, 0x65, 0xda, 0xe4, 0x1b, 0x64, 0x72, 0x2d, 0x57, 0x49, 0x72, 0x77, 0x73, 0xbf, 0xa2, 0x9c, 0xda, 0x8d, 0x2f, 0x2f, 0x96, 0x21, 0x81, 0x79, 0x96, 0x45, 0xa1, 0x4e, 0x23, 0xc2, 0x8d, 0xf2, 0x56, 0x67, 0x3c, 0xca, 0x2a, 0xda, 0xcc, 0xb1, 0x22, 0x7f, 0x92, 0x82, 0xb6, 0xec, 0xb4, 0x31, 0xfe, 0x87, 0x4f, 0x3b, 0xab, 0x1e, 0xb8, 0x67, 0xcc, 0x99, 0xc1, 0xd3, 0x74, 0xa0, 0x1c, 0xf3, 0xb0, 0xa7, 0x9c, 0x79, 0xf4, 0xf7, 0x98, 0xa7, 0x63, 0x94, 0xd6, 0x0c, 0x83, 0xeb, 0x4d, 0xe3, 0xa0, 0x0f, 0x18, 0x3a, 0x9b, 0x09, 0x25, 0x08, 0xc5, 0xca, 0x5c, 0x6e, 0xd5, 0x26, 0xdb, 0xec, 0x84, 0xc5, 0xba, 0x7a, 0x97, 0x6e, 0xab, 0x4d, 0xb3, 0xcb, 0x15, 0x58, 0x50, 0xb7, 0xdb, 0xdd, 0x2e, 0xdc, 0x41, 0x57, 0x70, 0x23, 0x76, 0xa6, 0xd9, 0x95, 0x79, 0x90, 0xa2, 0xbe, 0x55, 0x4a, 0x91, 0x67, 0x71, 0x52, 0xa5, 0x74, 0x08, 0xf3, 0x65, 0x26, 0x54, 0x58, 0x29, 0x51, 0x6e, 0x73, 0x2e, 0x55, 0x7a, 0xb7, 0xf4, 0x83, 0xeb, 0x57, 0xaf, 0x5e, 0xff, 0xf1, 0x07, 0x8b, 0xc2, 0xf0, 0xc4, 0x1b, 0x97, 0x4f, 0x8f, 0x9f, 0xce, 0x86, 0x11, 0x73, 0x9a, 0xde, 0x80, 0x4c, 0xac, 0xeb, 0x29, 0x69, 0xe6, 0x50, 0x97, 0xf6, 0xa6, 0xe1, 0x47, 0x84, 0xe5, 0x76, 0x1c, 0x1c, 0x88, 0xca, 0xb2, 0x2e, 0x6c, 0xa0, 0x51, 0xbf, 0x9d, 0xf9, 0xd3, 0x08, 0x46, 0xe5, 0xc7, 0xe4, 0xd1, 0x0a, 0x74, 0x5a, 0x2f, 0x58, 0x37, 0x69, 0xa3, 0x2d, 0x8d, 0x4b, 0x53, 0x83, 0x8c, 0x6c, 0x47, 0x66, 0xe8, 0xa2, 0x46, 0xdf, 0x47, 0x51, 0xd4, 0xa5, 0x04, 0xa4, 0x12, 0x5a, 0x98, 0x38, 0xa4, 0x55, 0xa3, 0x24, 0xce, 0xbf, 0x0c, 0xd6, 0xf7, 0x3c, 0x88, 0xd9, 0x89, 0x15, 0x7c, 0xd8, 0x35, 0x52, 0x24, 0x86, 0x38, 0x78, 0xe7, 0x1f, 0xfa, 0x1e, 0x33, 0x80, 0x07, 0xf2, 0x84, 0x07, 0xcf, 0x61, 0xed, 0x4f, 0x7b, 0x3e, 0xec, 0xec, 0x2d, 0xc6, 0x43, 0xac, 0x3e, 0xf8, 0x66, 0x56, 0x55, 0x9d, 0x33, 0xe8, 0x99, 0x3c, 0x19, 0x0e, 0xde, 0xb6, 0x23, 0xd9, 0x2a, 0x23, 0xac, 0x54, 0x04, 0xb9, 0x72, 0xd5, 0x28, 0x4d, 0x76, 0x3e, 0xf5, 0x7c, 0x64, 0x65, 0x65, 0x64, 0x8a, 0x96, 0x2c, 0xa6, 0x92, 0x54, 0xdb, 0xa6, 0xac, 0x35, 0x9c, 0x6a, 0xf8, 0x8d, 0xd2, 0xd2, 0xef, 0x12, 0x27, 0x3f, 0x52, 0x10, 0x73, 0x29, 0x5f, 0xc1, 0x00, 0x92, 0x43, 0x67, 0x8b, 0xf5, 0xc3, 0xd0, 0x82, 0x0a, 0xc4, 0x19, 0x1c, 0xca, 0x38, 0x29, 0x27, 0x73, 0x5c, 0x3d, 0x79, 0x04, 0x83, 0xfd, 0x67, 0x6b, 0x07, 0x31, 0xb3, 0xca, 0xce, 0xa6, 0x6e, 0x40, 0x86, 0x01, 0x4b, 0x8c, 0xb1, 0xa0, 0x10, 0x97, 0x30, 0x4d, 0x9d, 0xe4, 0x18, 0x4d, 0x15, 0x12, 0xd3, 0xd3, 0xdb, 0xbc, 0xc4, 0x9a, 0x66, 0x56, 0x4f, 0xb5, 0x01, 0x7d, 0x37, 0x21, 0xc9, 0x5d, 0x4d, 0xe0, 0x99, 0xd9, 0x3f, 0xcb, 0xb7, 0x5b, 0x3a, 0xaa, 0x3c, 0x08, 0xb8, 0x0f, 0xba, 0x9d, 0x28, 0x65, 0xd1, 0x3a, 0x49, 0xc2, 0xd3, 0x88, 0x93, 0x61, 0x96, 0x0f, 0xc6, 0x5d, 0xcb, 0x67, 0xc5, 0xd8, 0xc8, 0xda, 0xa9, 0x05, 0x33, 0xcd, 0x38, 0xb4, 0x6d, 0x3f, 0x12, 0xae, 0x9a, 0x18, 0x61, 0x46, 0xaf, 0x75, 0x9e, 0xcb, 0xe0, 0x2e, 0x8c, 0x2c, 0xb5, 0xe5, 0x16, 0xae, 0xc8, 0x0e, 0x79, 0xec, 0x18, 0xdb, 0x58, 0x11, 0x4b, 0x93, 0xd8, 0x11, 0x55, 0x38, 0x48, 0x4a, 0x40, 0xb7, 0xb9, 0xac, 0x59, 0x6e, 0x63, 0x35, 0xe7, 0x12, 0x0a, 0x01, 0x55, 0x59, 0x6b, 0x2c, 0x19, 0xf0, 0xbf, 0x10, 0x8d, 0x29, 0x85, 0x2a, 0x8c, 0x62, 0x3c, 0x36, 0xb9, 0xa6, 0x2c, 0x33, 0x12, 0x7e, 0x90, 0xb0, 0xf0, 0x9b, 0x8a, 0xe9, 0xef, 0x26, 0x63, 0x8f, 0xf5, 0x87, 0x87, 0xf7, 0x67, 0x6d, 0xcf, 0x5a, 0x17, 0x0d, 0x6e, 0x4c, 0x63, 0xfa, 0x43, 0x13, 0x82, 0xef, 0x1d, 0xf4, 0x12, 0xe8, 0xc1, 0x75, 0xf4, 0xb8, 0xd7, 0xec, 0xdb, 0xed, 0xb8, 0x30, 0xa6, 0x28, 0xb6, 0x59, 0xb5, 0x31, 0x66, 0x63, 0x2b, 0xdb, 0xb6, 0x2d, 0x07, 0x84, 0x34, 0xbb, 0xda, 0xd8, 0xfe, 0x95, 0x3c, 0x09, 0xa1, 0xf8, 0x0d, 0xa1, 0x76, 0xd1, 0x14, 0xa2, 0xdc, 0x15, 0xf4, 0x27, 0x72, 0x19, 0x47, 0xd2, 0x58, 0x92, 0x42, 0x5e, 0xdd, 0xd2, 0xdb, 0x4f, 0x96, 0x22, 0xa4, 0xac, 0x32, 0xbc, 0x5b, 0x2e, 0x83, 0x6f, 0x2b, 0xa8, 0xdf, 0x35, 0x09, 0xff, 0xee, 0xa4, 0xd2, 0x63, 0xf3, 0xf0, 0x11, 0xf5, 0xb7, 0xc9, 0xa1, 0xb5, 0x69, 0xb5, 0x87, 0x54, 0x13, 0x8c, 0x5c, 0x3d, 0x13, 0x8c, 0x0c, 0xf4, 0x3c, 0xa8, 0x46, 0xfd, 0x88, 0x19, 0x7a, 0x91, 0x18, 0x5c, 0x3f, 0xe3, 0x98, 0x09, 0xeb, 0x41, 0xac, 0x10, 0xc4, 0x76, 0xa7, 0x37, 0xbb, 0x7a, 0x83, 0xe1, 0x38, 0xb8, 0x8e, 0x5d, 0x23, 0x76, 0x4d, 0x23, 0x33, 0xb4, 0xec, 0x98, 0x5a, 0x96, 0xd2, 0x8a, 0xd8, 0xef, 0xd0, 0x03, 0x4e, 0x9e, 0x71, 0xad, 0xb2, 0x22, 0x8b, 0x8c, 0x0e, 0xb2, 0x2c, 0xe2, 0xa0, 0x56, 0x56, 0x45, 0xc0, 0x56, 0xe2, 0x2b, 0xeb, 0xfe, 0xed, 0x24, 0x97, 0xff, 0xd8, 0x90, 0xc7, 0xdf, 0x9d, 0x4d, 0x50, 0xfa, 0x22, 0x8f, 0x38, 0xd2, 0xc6, 0x64, 0x9c, 0x0d, 0x9e, 0xef, 0x0e, 0xce, 0xde, 0xdb, 0x0b, 0xef, 0xd0, 0x7a, 0xdd, 0x80, 0x16, 0x1d, 0x3b, 0xe8, 0x49, 0xbb, 0x96, 0x52, 0xb5, 0xbe, 0xed, 0x29, 0x29, 0xcb, 0xe8, 0x51, 0x2d, 0xb5, 0xc8, 0xd6, 0x05, 0x38, 0xc8, 0x8c, 0xbf, 0x54, 0x41, 0x1a, 0x07, 0xa9, 0xa2, 0x74, 0x44, 0x46, 0x66, 0x15, 0x52, 0x40, 0x93, 0xeb, 0x52, 0x87, 0x61, 0x1a, 0xde, 0x53, 0x8a, 0xe7, 0x2b, 0x79, 0x8f, 0xd9, 0x02, 0x2e, 0xd6, 0xab, 0x9c, 0x25, 0x26, 0x5e, 0xaf, 0xc2, 0x58, 0x2d, 0x15, 0xbb, 0x55, 0x20, 0xa0, 0x41, 0x3f, 0x2a, 0xd3, 0xc9, 0xfa, 0xfe, 0xd2, 0x8f, 0xef, 0xc2, 0xf5, 0x6a, 0xe9, 0x9f, 0x26, 0xd3, 0xf9, 0xb8, 0x7b, 0x04, 0x3b, 0xb4, 0x43, 0x6f, 0x9f, 0x0f, 0xbd, 0xd6, 0x5f, 0x94, 0x8a, 0xd1, 0xa7, 0xb3, 0x7f, 0xf6, 0xb5, 0x7d, 0xf4, 0xb6, 0x51, 0xe2, 0x40, 0xcf, 0x16, 0x79, 0x66, 0x89, 0x09, 0x90, 0x33, 0x97, 0xd9, 0xc6, 0x8e, 0xee, 0xd8, 0xde, 0x08, 0x3b, 0xe2, 0x68, 0x9b, 0xab, 0xe2, 0xf0, 0xfc, 0x75, 0xfa, 0xb7, 0xf3, 0x17, 0xd7, 0x7f, 0xfb, 0xf3, 0xcf, 0x3f, 0x5f, 0x5f, 0xdd, 0x93, 0x21, 0x9c, 0x5f, 0xbd, 0x70, 0x6e, 0xd7, 0xf7, 0xef, 0x5e, 0xb8, 0x92, 0xa7, 0x5a, 0xfc, 0xf1, 0x77, 0x1f, 0xdf, 0x15, 0xf2, 0x7f, 0xdb, 0xba, 0x87, 0xdd, 0x03, 0x04, 0x71, 0xfb, 0xd1, 0x47, 0x47, 0x9c, 0xef, 0xb5, 0x23, 0xb9, 0x45, 0xe7, 0x30, 0x4c, 0xde, 0xc1, 0xd1, 0x04, 0x44, 0x40, 0x0e, 0x4d, 0x79, 0xe6, 0x77, 0xd5, 0xb8, 0x45, 0x4e, 0x87, 0x6e, 0x43, 0x49, 0x34, 0xf9, 0x0b, 0xa8, 0x04, 0x36, 0x9b, 0xad, 0xdc, 0xc1, 0xa7, 0x80, 0x92, 0x46, 0x97, 0x18, 0x31, 0x83, 0x1b, 0x84, 0x8a, 0x31, 0xe6, 0x34, 0x0d, 0xfd, 0x13, 0xa8, 0x22, 0xcf, 0x2a, 0x51, 0xa9, 0xbc, 0xe2, 0xb1, 0x82, 0x9a, 0x3d, 0x74, 0x6c, 0x62, 0x19, 0xe5, 0x85, 0xc8, 0xee, 0xc2, 0x8c, 0xe0, 0x89, 0x5c, 0x45, 0x3c, 0xa3, 0xec, 0x25, 0xfa, 0x49, 0x01, 0xe4, 0x77, 0xc1, 0xe3, 0xe3, 0xc3, 0x87, 0xe6, 0x0c, 0x1d, 0xa6, 0x03, 0xb9, 0x7b, 0xb7, 0x1f, 0xa7, 0x03, 0xc8, 0x30, 0x3c, 0x90, 0x34, 0x4e, 0x0c, 0xd4, 0x1f, 0x43, 0x3f, 0x61, 0x80, 0x75, 0xea, 0xbf, 0x2a, 0xa4, 0x2e, 0x92, 0x90, 0xf0, 0x83, 0x61, 0x94, 0x58, 0xcd, 0xe1, 0x5a, 0x91, 0xe3, 0x03, 0x51, 0x74, 0x6c, 0x74, 0x6e, 0xb6, 0x02, 0x8d, 0x02, 0x75, 0x23, 0x0d, 0xbd, 0x56, 0x6e, 0x59, 0x6d, 0x98, 0x06, 0x85, 0x3e, 0xa5, 0x69, 0xaa, 0x0a, 0xb7, 0xd0, 0x82, 0x31, 0xb8, 0x3c, 0xab, 0xb7, 0x3a, 0x54, 0x26, 0x12, 0xb1, 0xce, 0x62, 0xcd, 0x95, 0x4e, 0x64, 0x16, 0x89, 0x34, 0x8a, 0x24, 0xe3, 0x7f, 0xfc, 0x13, 0xc4, 0x11, 0xad, 0x6d, 0x56, 0x42, 0x15, 0x09, 0x19, 0xf9, 0x7e, 0x8d, 0x1a, 0x56, 0xbf, 0xb7, 0xdc, 0x18, 0x74, 0x4a, 0xbc, 0xd1, 0x1f, 0x3d, 0x8c, 0x1d, 0x7f, 0xad, 0x79, 0xb0, 0xc8, 0x6c, 0x35, 0xdf, 0x54, 0x36, 0x4c, 0x6f, 0x84, 0x6d, 0xaa, 0xda, 0x10, 0xe4, 0xb7, 0x05, 0x47, 0x34, 0x7e, 0x1b, 0x68, 0x40, 0xda, 0x59, 0x84, 0xad, 0x25, 0xb7, 0x02, 0x58, 0x89, 0x0b, 0x74, 0x7a, 0xdb, 0x52, 0x5d, 0xb1, 0x43, 0x1a, 0xda, 0x80, 0x19, 0x55, 0x33, 0x55, 0x49, 0xa3, 0x4b, 0x65, 0x52, 0x59, 0xf0, 0x4c, 0x83, 0x61, 0x8f, 0x13, 0x3c, 0x3e, 0x09, 0x62, 0x91, 0x5d, 0x9f, 0xce, 0x7a, 0x90, 0x16, 0x92, 0xef, 0xb7, 0xc7, 0xeb, 0x00, 0xb5, 0xa5, 0x51, 0x8f, 0xa8, 0x00, 0x53, 0x18, 0x40, 0x4f, 0xbb, 0x3f, 0x8d, 0x50, 0xbe, 0x79, 0xc6, 0x33, 0xbf, 0xd0, 0x85, 0xb0, 0xf1, 0xda, 0xd4, 0x9b, 0xba, 0x9a, 0xe5, 0x98, 0x6d, 0xaf, 0xe9, 0x51, 0xf4, 0xf1, 0x28, 0x80, 0xde, 0x58, 0x01, 0xf4, 0xdc, 0x5e, 0x0f, 0x5a, 0x9a, 0x93, 0xaa, 0x9e, 0x3b, 0x5e, 0xa0, 0xce, 0x51, 0x6a, 0x5a, 0xcc, 0x92, 0x76, 0x6f, 0x62, 0xe8, 0x1f, 0x44, 0x1b, 0x5d, 0x78, 0xc6, 0x60, 0xb0, 0x58, 0x42, 0xd5, 0x2c, 0x3a, 0x6d, 0x86, 0xdf, 0xda, 0xe5, 0xd2, 0xba, 0xec, 0x07, 0xac, 0x96, 0xd3, 0x8e, 0x2d, 0xbd, 0xf5, 0xa1, 0xe7, 0xce, 0x1e, 0x75, 0x45, 0xcb, 0x54, 0xd3, 0xb1, 0xae, 0x9b, 0xf6, 0xce, 0x73, 0x35, 0x1f, 0x8b, 0x45, 0x28, 0xa5, 0xd6, 0x56, 0x16, 0x15, 0xed, 0x2c, 0xb5, 0xcc, 0x6b, 0x61, 0x42, 0x4c, 0x0b, 0x37, 0xd2, 0x6a, 0x6b, 0x23, 0xa5, 0x29, 0x67, 0xbe, 0x3c, 0x43, 0x76, 0xd1, 0x76, 0xdd, 0xa2, 0xfa, 0x56, 0xa2, 0xa7, 0xbb, 0xa6, 0xfc, 0x4c, 0x97, 0x20, 0x10, 0xaa, 0x68, 0x57, 0x1a, 0xa3, 0xd0, 0x51, 0xab, 0xe2, 0x4a, 0xab, 0x82, 0x9e, 0x06, 0x22, 0xf6, 0x57, 0xa7, 0x5d, 0x4b, 0x3f, 0xd2, 0xe3, 0x6c, 0x02, 0xbb, 0x2b, 0x7d, 0x6a, 0xbd, 0xde, 0xef, 0x29, 0x67, 0xf6, 0xf7, 0x3d, 0x9f, 0x5a, 0x9f, 0x7b, 0x07, 0x24, 0xd4, 0xd3, 0x0f, 0x70, 0xf1, 0x2c, 0x5c, 0x8f, 0x15, 0x6b, 0x80, 0x93, 0x20, 0xf3, 0x35, 0xdf, 0xac, 0x50, 0x0a, 0x60, 0x4c, 0x46, 0xd0, 0x23, 0x03, 0x7d, 0x12, 0x78, 0x85, 0xe5, 0x6c, 0x5a, 0xa9, 0x70, 0x79, 0xab, 0xed, 0x6c, 0x3f, 0x41, 0x61, 0xa5, 0xd2, 0x59, 0x7b, 0xee, 0x3e, 0x36, 0x2a, 0xcd, 0x52, 0x41, 0xfb, 0x45, 0x19, 0x19, 0x25, 0x92, 0x72, 0xeb, 0x34, 0x8d, 0x7c, 0x7f, 0x79, 0xda, 0x7a, 0xc1, 0x2e, 0xd4, 0x16, 0x5d, 0x57, 0x77, 0xfe, 0xe0, 0x74, 0xfd, 0x1e, 0xa4, 0x18, 0x64, 0x9f, 0x86, 0xce, 0x0d, 0x4e, 0xd9, 0x8f, 0x86, 0x5f, 0x16, 0x45, 0xa1, 0xab, 0xb2, 0xaa, 0x30, 0x96, 0x4e, 0xe6, 0x20, 0x0c, 0x5b, 0x42, 0x9a, 0xcc, 0xf2, 0xfc, 0xa1, 0xa2, 0x6d, 0x55, 0x6e, 0x68, 0x67, 0x1a, 0x68, 0x76, 0xe6, 0x50, 0x7f, 0xa9, 0xc9, 0x3b, 0x64, 0x85, 0x52, 0x02, 0xd3, 0x80, 0xaa, 0xb6, 0xb4, 0xf2, 0xb8, 0x75, 0x37, 0x68, 0x6b, 0xb4, 0x57, 0x6c, 0x22, 0x15, 0x52, 0x2a, 0xdc, 0x6f, 0x70, 0x1e, 0x9e, 0x76, 0x2d, 0xfd, 0xf8, 0xf8, 0x7e, 0xf7, 0xa3, 0x96, 0xda, 0x83, 0x70, 0x46, 0x17, 0xbe, 0x50, 0x8f, 0x4e, 0x8f, 0xc6, 0x61, 0x90, 0xc8, 0x51, 0x10, 0xa0, 0x5c, 0xc0, 0x77, 0xba, 0xe1, 0x3a, 0xf6, 0x83, 0x15, 0x5f, 0x89, 0xd4, 0x15, 0x3c, 0x58, 0x83, 0xbb, 0x49, 0xdc, 0xaa, 0x50, 0x46, 0xa1, 0xcc, 0xd2, 0x1b, 0x77, 0x19, 0x5e, 0xad, 0x5e, 0xdc, 0x45, 0xd1, 0xe5, 0x49, 0x04, 0x4a, 0xe4, 0x13, 0xcd, 0x49, 0x85, 0x46, 0x6b, 0x5b, 0xe7, 0x89, 0xb1, 0xeb, 0x3d, 0x3a, 0x49, 0x68, 0xa7, 0xa5, 0xdd, 0xe8, 0xf9, 0x1e, 0x3d, 0xe7, 0xa2, 0x9b, 0x2c, 0xef, 0x13, 0x18, 0xa1, 0x3c, 0xc1, 0xc0, 0x5a, 0x30, 0xfa, 0x93, 0x7f, 0xe8, 0xba, 0x53, 0xde, 0xf3, 0x6f, 0xd8, 0x76, 0x1a, 0x57, 0x06, 0xd9, 0xf6, 0x70, 0xc6, 0xda, 0x3d, 0x61, 0x47, 0x7d, 0xd0, 0x0c, 0x7d, 0xc1, 0xe4, 0xe6, 0x1d, 0x36, 0xe0, 0xf3, 0xcf, 0x5b, 0xa4, 0xaf, 0xef, 0x69, 0xad, 0xe8, 0x4c, 0x29, 0xed, 0xc5, 0xc2, 0xa3, 0x1c, 0x2b, 0x67, 0x94, 0x7f, 0xe5, 0x22, 0x67, 0x74, 0xfc, 0x85, 0x61, 0x04, 0x84, 0x25, 0xd7, 0x61, 0x44, 0xe9, 0x24, 0x03, 0xf5, 0x04, 0x8b, 0x08, 0x23, 0xfa, 0x11, 0x63, 0x41, 0x12, 0x45, 0x3a, 0x55, 0x56, 0xf9, 0x20, 0x35, 0x6b, 0x43, 0x7f, 0x89, 0xf1, 0x4d, 0x2c, 0x63, 0xbd, 0xfa, 0x16, 0x94, 0xfc, 0x03, 0x03, 0x74, 0xbf, 0x5c, 0xb7, 0x87, 0x33, 0x8a, 0xce, 0x04, 0x42, 0xe8, 0xf3, 0x04, 0xd5, 0xb9, 0xb6, 0x65, 0xed, 0x41, 0x8f, 0x5a, 0xb7, 0x3f, 0xba, 0x07, 0x3c, 0x74, 0xfb, 0xbd, 0xe8, 0xaf, 0x29, 0xd6, 0x84, 0x51, 0x9a, 0xae, 0x43, 0xe8, 0xfd, 0x49, 0x88, 0x10, 0x9b, 0xf5, 0x3a, 0x5b, 0xc7, 0xf4, 0xb8, 0xcd, 0xe3, 0x78, 0xc5, 0x62, 0x0a, 0xba, 0x64, 0x32, 0x21, 0x60, 0x72, 0xe6, 0x2b, 0xc9, 0x59, 0xec, 0x87, 0xa1, 0x17, 0x06, 0xd1, 0x2a, 0x52, 0x49, 0xc4, 0xb9, 0x1b, 0x52, 0xcc, 0xc2, 0x58, 0xcf, 0x79, 0x48, 0xe8, 0x7f, 0x19, 0xd3, 0xf7, 0x96, 0xeb, 0xaf, 0x14, 0x49, 0xbf, 0x1b, 0xa7, 0xf8, 0xfd, 0x75, 0x23, 0xbf, 0xcf, 0x7e, 0x58, 0x94, 0x9b, 0x3f, 0x8d, 0x60, 0x90, 0x86, 0x7a, 0x60, 0x6f, 0x09, 0xa2, 0xc4, 0x4c, 0x10, 0x65, 0x75, 0xcd, 0x9e, 0x0a, 0x72, 0xd5, 0xe7, 0xea, 0x70, 0x73, 0x64, 0x61, 0xc7, 0xb3, 0x3c, 0x6c, 0x38, 0xf2, 0xb1, 0x92, 0x5c, 0xa5, 0x56, 0x5b, 0xca, 0x67, 0x2c, 0x5f, 0x50, 0x4a, 0x5e, 0x26, 0x17, 0x84, 0x82, 0xd7, 0xa6, 0x48, 0x45, 0x18, 0xa7, 0xab, 0x20, 0x4c, 0x62, 0x1d, 0xa6, 0x2a, 0x30, 0xf2, 0xce, 0x49, 0xe3, 0x55, 0x9c, 0x7e, 0xb6, 0xed, 0xb4, 0xc1, 0x25, 0x6b, 0x9b, 0x47, 0x3e, 0xf2, 0x19, 0x69, 0x97, 0x37, 0xd7, 0xab, 0xa6, 0xae, 0x9f, 0x6b, 0xa8, 0xbd, 0xdb, 0xb9, 0x03, 0x14, 0x1d, 0x90, 0xe9, 0xcc, 0x3f, 0x82, 0x96, 0x24, 0xf8, 0x48, 0xe4, 0x34, 0x14, 0x9d, 0xed, 0xd8, 0xd2, 0x9d, 0xa1, 0xc0, 0xb4, 0x3d, 0x72, 0xee, 0x20, 0xf1, 0x84, 0x58, 0x27, 0x60, 0x55, 0x56, 0x17, 0x82, 0x52, 0xd0, 0x26, 0xcd, 0x55, 0x4d, 0x18, 0x52, 0x51, 0x8e, 0xad, 0x68, 0x37, 0xeb, 0xed, 0x4e, 0xc1, 0x51, 0x5a, 0x8e, 0x3c, 0xb0, 0x65, 0xe4, 0x3a, 0x96, 0x84, 0x41, 0x14, 0xf9, 0x7e, 0xc8, 0x6e, 0x9d, 0x18, 0xd3, 0xc0, 0x1f, 0x37, 0xf8, 0xfb, 0xc9, 0xde, 0x6b, 0x52, 0x64, 0xd3, 0x36, 0x4b, 0x9b, 0xbc, 0x76, 0xf2, 0x09, 0x3a, 0x0e, 0x93, 0xbd, 0xfd, 0xec, 0xd1, 0x81, 0x35, 0x79, 0xe0, 0xee, 0xc5, 0x60, 0x85, 0x15, 0xd5, 0x3e, 0x36, 0x0d, 0x1c, 0xaf, 0x6c, 0x8f, 0xca, 0x1b, 0xf4, 0x49, 0xdb, 0x1b, 0xc2, 0xfa, 0x8b, 0x26, 0x47, 0xfd, 0x14, 0xb4, 0x51, 0x2e, 0x98, 0x47, 0x81, 0x00, 0x4a, 0x76, 0x1b, 0x2b, 0xc8, 0xad, 0xed, 0x9f, 0x6f, 0xaa, 0x3c, 0xc1, 0xdf, 0x56, 0x55, 0x66, 0x93, 0xe7, 0x2a, 0x5b, 0xa7, 0xf2, 0xc4, 0xf5, 0x82, 0x5d, 0x4e, 0xdb, 0x3b, 0xfe, 0x08, 0x12, 0xbc, 0xce, 0xeb, 0x0f, 0x07, 0x4a, 0xc6, 0x08, 0x8c, 0xa0, 0x4d, 0x13, 0xc4, 0x78, 0x7a, 0x14, 0xa3, 0x87, 0xf0, 0xc6, 0xc8, 0x74, 0x67, 0xef, 0xb7, 0xb0, 0x0b, 0xc3, 0x9c, 0x14, 0xd2, 0x36, 0x47, 0xa9, 0x4e, 0xdb, 0x1a, 0xa1, 0x21, 0x9a, 0x82, 0x72, 0xcf, 0x93, 0xf6, 0xd2, 0x1c, 0xe0, 0xea, 0x99, 0xf2, 0xc4, 0x92, 0x24, 0xd9, 0xfe, 0x7d, 0xcc, 0xc8, 0x40, 0x4a, 0xa5, 0x96, 0x02, 0x78, 0xa4, 0x81, 0x7c, 0xa2, 0xc1, 0xfd, 0x86, 0x6e, 0x40, 0x1a, 0x55, 0xc9, 0x3c, 0x33, 0x94, 0xe8, 0x9c, 0xb8, 0x5e, 0x7f, 0xe1, 0x42, 0xd0, 0xa3, 0x9d, 0xb7, 0xf7, 0xbd, 0xc1, 0xd3, 0xfb, 0x89, 0x8d, 0xd0, 0xbf, 0x9d, 0x5c, 0x0f, 0xf5, 0x55, 0x70, 0x77, 0x51, 0x44, 0x63, 0xa3, 0xe5, 0x4a, 0x7d, 0xc6, 0xfb, 0x54, 0x16, 0x33, 0xa4, 0xa2, 0xf7, 0x58, 0x35, 0xdb, 0xe3, 0xf4, 0xfe, 0xdc, 0x18, 0xa7, 0xe6, 0xbe, 0x95, 0xdc, 0x34, 0x96, 0xc3, 0xd1, 0x12, 0xb4, 0x28, 0x4c, 0x1a, 0x40, 0x77, 0xbb, 0xa9, 0xe8, 0xcc, 0x89, 0x7c, 0x47, 0x86, 0xa0, 0xcd, 0x43, 0x51, 0x3a, 0xa3, 0x53, 0x4a, 0xb0, 0x33, 0x42, 0x24, 0x89, 0x24, 0xf4, 0xcf, 0xf8, 0xcd, 0x2a, 0xbd, 0x4d, 0x4e, 0xbc, 0xe8, 0xb4, 0x76, 0xe1, 0xe2, 0xd9, 0xf5, 0x0f, 0x8c, 0xbc, 0x63, 0xe7, 0xd8, 0x2a, 0xc8, 0xd8, 0x43, 0x1e, 0x77, 0xf0, 0x5b, 0x8f, 0xed, 0x47, 0x4a, 0x6b, 0x34, 0x8a, 0x59, 0xde, 0xb3, 0xd6, 0x38, 0xdb, 0x07, 0x6d, 0x73, 0xcf, 0xcd, 0x93, 0x30, 0xd6, 0xf1, 0x16, 0xa6, 0x79, 0x5a, 0x21, 0x48, 0x20, 0x14, 0x19, 0x1d, 0xb2, 0x79, 0x82, 0x15, 0xe4, 0x64, 0x4d, 0x53, 0x01, 0x53, 0xd6, 0x60, 0x84, 0xc5, 0xdd, 0x0c, 0x1d, 0xa9, 0xa2, 0xde, 0x01, 0x93, 0x60, 0x3a, 0x10, 0xc9, 0x8f, 0xc2, 0x95, 0x46, 0x94, 0xf0, 0x25, 0x3b, 0x6d, 0xdc, 0xe0, 0xf1, 0xc3, 0x5f, 0x4d, 0x7d, 0xe6, 0xd1, 0x83, 0x0d, 0xbd, 0xeb, 0x0e, 0xa8, 0x5c, 0x69, 0x6f, 0xef, 0x0e, 0xac, 0xd3, 0x5f, 0x61, 0xaa, 0xd8, 0xeb, 0xfa, 0x7f, 0xf9, 0x6f, 0xff, 0xeb, 0x7f, 0x8e, 0xf6, 0xaf, 0xf9, 0x1f, 0x8b, 0x98, 0x25, 0x8c, 0xdc, 0xb6, 0xaa, 0x02, 0x01, 0x72, 0x1c, 0x5d, 0xc4, 0x18, 0x38, 0x92, 0x49, 0x46, 0xa7, 0x43, 0x53, 0xea, 0x9f, 0xe9, 0xa2, 0x10, 0x3a, 0x5f, 0x87, 0x11, 0x8b, 0x45, 0xb6, 0xe6, 0x7e, 0x1a, 0xf1, 0x84, 0xd2, 0xea, 0x5b, 0x7f, 0xf5, 0xd9, 0xeb, 0x7d, 0xe1, 0x3d, 0x9d, 0x19, 0x52, 0xff, 0x78, 0x46, 0x99, 0x4a, 0x5f, 0x91, 0x53, 0xfc, 0x77, 0xa7, 0xa5, 0xd4, 0x1f, 0xdf, 0xef, 0xfe, 0xda, 0x9d, 0x89, 0x6f, 0xf4, 0x1e, 0xed, 0x63, 0x1a, 0xd0, 0xf3, 0x2d, 0x38, 0xd9, 0x09, 0x56, 0x10, 0xbf, 0x13, 0xc2, 0xd7, 0xe3, 0x7e, 0x70, 0x35, 0x73, 0xf5, 0x22, 0x31, 0x9b, 0x02, 0x9c, 0x9a, 0xdb, 0x8c, 0xb2, 0x4f, 0x53, 0x5a, 0xfa, 0xea, 0xaa, 0x4c, 0xca, 0x4d, 0x5e, 0x1a, 0x4b, 0x64, 0x25, 0x9a, 0xaa, 0x16, 0x5b, 0x11, 0x14, 0x3b, 0xb3, 0x2b, 0xe3, 0x9d, 0xd8, 0x95, 0x3c, 0x95, 0xe1, 0x76, 0x93, 0xe9, 0x40, 0xc8, 0x3b, 0xa1, 0x63, 0xb1, 0x10, 0x2c, 0x0e, 0xef, 0xa2, 0x4c, 0x2e, 0xd9, 0x2a, 0x66, 0xfc, 0x39, 0x0f, 0xea, 0x93, 0xcb, 0xff, 0xcf, 0xa7, 0x2d, 0xdd, 0xc7, 0x4f, 0x18, 0x5b, 0x72, 0xb9, 0xbf, 0xa7, 0xc5, 0x43, 0x27, 0x34, 0xe7, 0x1e, 0xef, 0x18, 0x4c, 0xc0, 0xe5, 0x0b, 0x84, 0x8c, 0x05, 0x77, 0x39, 0xef, 0x3a, 0xbe, 0xe7, 0x5e, 0xb7, 0xb7, 0x2c, 0x95, 0xee, 0x60, 0xe3, 0x19, 0x78, 0x77, 0x33, 0xf4, 0xb7, 0x6d, 0x34, 0x7a, 0x25, 0x28, 0xc0, 0xbd, 0x79, 0xbd, 0x4c, 0xfe, 0x3f, 0xc2, 0x58, 0x1f, 0x3f, 0x35, 0x67, 0x7a, 0xf2, 0x5b, 0xe6, 0x7a, 0x04, 0xf0, 0x29, 0x0d, 0xf3, 0xdd, 0x49, 0xb7, 0x64, 0x85, 0xef, 0x4c, 0xe8, 0x97, 0xa3, 0x14, 0xdb, 0x03, 0x71, 0x0b, 0x81, 0x94, 0x09, 0x50, 0x45, 0xbb, 0x23, 0x65, 0xa6, 0x2f, 0xef, 0xa3, 0xb7, 0xf7, 0x57, 0x17, 0x77, 0xd7, 0xfe, 0xad, 0x1f, 0xbf, 0xbd, 0x8e, 0xde, 0x85, 0xab, 0x5b, 0xd7, 0xbd, 0x59, 0xde, 0x5f, 0xad, 0x2f, 0x2e, 0x56, 0x37, 0x6b, 0xff, 0xea, 0xd2, 0x73, 0xdd, 0x37, 0xcb, 0xd5, 0xd2, 0x89, 0x82, 0xab, 0xcb, 0xd5, 0xfa, 0x6d, 0x72, 0xeb, 0xc6, 0x91, 0x0a, 0x94, 0x5e, 0x72, 0x95, 0xa9, 0x77, 0xef, 0xbc, 0xb7, 0xab, 0x20, 0x76, 0x97, 0x31, 0x0f, 0x92, 0xf4, 0xa7, 0xb6, 0xfd, 0xcb, 0x69, 0x18, 0x0b, 0xb6, 0xed, 0x19, 0x81, 0x60, 0x1f, 0x73, 0x59, 0xba, 0x05, 0x86, 0x24, 0x80, 0xef, 0x3a, 0x53, 0x47, 0x98, 0xd1, 0x25, 0x77, 0xdf, 0x03, 0x4f, 0xda, 0xae, 0x17, 0xa4, 0xa2, 0x10, 0x66, 0x1a, 0xdd, 0xc5, 0xf9, 0x79, 0xf0, 0xee, 0x76, 0xf1, 0xe6, 0xe2, 0xdc, 0xb9, 0xb8, 0x7a, 0x79, 0x7e, 0xe3, 0xdf, 0xdc, 0x5c, 0x84, 0x57, 0x41, 0xf2, 0xea, 0xe6, 0xe5, 0xf5, 0x92, 0xbe, 0xf0, 0xef, 0xc2, 0xb7, 0x6f, 0x96, 0xd7, 0x7f, 0xc6, 0x37, 0xb1, 0x9b, 0x38, 0x3c, 0xbd, 0xbc, 0xbc, 0x0a, 0x56, 0x2f, 0xa3, 0xeb, 0x75, 0xbc, 0x86, 0x4e, 0x7a, 0x9a, 0x84, 0xf7, 0xd1, 0xe5, 0xbb, 0xbb, 0xf0, 0xfe, 0xd5, 0x95, 0x4c, 0x96, 0x3c, 0x16, 0xd1, 0x82, 0x67, 0xb7, 0x17, 0xf2, 0x1b, 0xdb, 0xfe, 0xf5, 0xb4, 0x75, 0xfb, 0xd4, 0xec, 0xce, 0x50, 0x44, 0x45, 0x85, 0x87, 0x76, 0xa1, 0x3e, 0x1c, 0xf8, 0x81, 0x3e, 0x30, 0xc8, 0xc3, 0x7e, 0xda, 0x72, 0x8b, 0xc1, 0x4e, 0xab, 0x9b, 0xb5, 0xb1, 0xb1, 0xd8, 0x82, 0xaa, 0xb9, 0x31, 0xda, 0x06, 0x02, 0xb5, 0xcd, 0xd1, 0xbc, 0x82, 0x0e, 0xab, 0x59, 0x59, 0xcb, 0xd4, 0x59, 0x83, 0x56, 0x39, 0x42, 0x56, 0x85, 0x48, 0xaf, 0x03, 0x49, 0xc6, 0x30, 0x4a, 0x84, 0xb4, 0x94, 0x11, 0x4f, 0x59, 0x12, 0x66, 0xd2, 0x89, 0x7f, 0x49, 0x2e, 0xf1, 0xdb, 0x31, 0x00, 0xb6, 0xe9, 0xd6, 0x75, 0x46, 0xaf, 0x65, 0x4c, 0xd0, 0x47, 0xe7, 0x50, 0x5e, 0xc3, 0x5c, 0x44, 0xb7, 0x9f, 0x48, 0x04, 0x0c, 0x7b, 0xb1, 0x50, 0xc7, 0x9b, 0x5d, 0xeb, 0x50, 0x2c, 0x8d, 0x5c, 0x66, 0x9b, 0x1a, 0xc9, 0xff, 0x9b, 0x99, 0x9c, 0x6c, 0xd6, 0xfc, 0xb5, 0x32, 0x3f, 0x66, 0xee, 0xd5, 0xac, 0x55, 0x59, 0x53, 0x58, 0xae, 0x4b, 0x8e, 0xe1, 0xb2, 0x5a, 0xca, 0xd2, 0x54, 0x6b, 0xad, 0x4b, 0xa1, 0xb2, 0x46, 0x41, 0xb5, 0x24, 0xdb, 0xa8, 0x48, 0x8b, 0x2c, 0x8b, 0xe3, 0x65, 0x1c, 0x9d, 0xc6, 0x8b, 0xfa, 0xbe, 0xde, 0x7d, 0xfc, 0xeb, 0xe3, 0x99, 0xde, 0x53, 0xa6, 0xd6, 0x8d, 0xf6, 0x77, 0xd7, 0x1d, 0xba, 0xbf, 0xfb, 0xd8, 0xd3, 0xc7, 0xff, 0xa5, 0x91, 0x8a, 0xef, 0x56, 0xed, 0x34, 0x4f, 0xf2, 0x9e, 0x7e, 0x9f, 0x61, 0x06, 0xc6, 0x99, 0xb4, 0xcf, 0x40, 0x1d, 0xca, 0xa1, 0xe3, 0x36, 0xe8, 0x01, 0xc2, 0xcd, 0x7a, 0xff, 0x63, 0x76, 0x89, 0x83, 0x55, 0xc5, 0xb5, 0x08, 0xd1, 0x5e, 0xce, 0x2c, 0x28, 0xcb, 0x16, 0xe0, 0x08, 0x6a, 0x9e, 0x50, 0xff, 0x7c, 0x51, 0x38, 0xdf, 0x1e, 0x5a, 0xb0, 0x8c, 0x98, 0xdd, 0x50, 0xe8, 0xa6, 0x55, 0xe3, 0xd0, 0xb0, 0x07, 0x6f, 0x92, 0xa1, 0x74, 0x20, 0x47, 0x9b, 0x02, 0x01, 0x63, 0x4e, 0x51, 0x7b, 0x99, 0x09, 0x19, 0xc9, 0xe0, 0x8b, 0x6d, 0xff, 0xe5, 0xa4, 0x1d, 0x69, 0x6d, 0xeb, 0x69, 0xdd, 0x9c, 0x16, 0xea, 0x59, 0xf4, 0x1f, 0x42, 0xf7, 0x2d, 0x66, 0xcd, 0x3c, 0x90, 0x2a, 0x77, 0x3f, 0x66, 0x98, 0x18, 0x17, 0x06, 0x03, 0xe2, 0x96, 0x88, 0x72, 0x33, 0x63, 0x2b, 0x42, 0x1a, 0x39, 0xbd, 0x57, 0x88, 0xbc, 0x5b, 0xdc, 0xbf, 0xcd, 0x0b, 0xfa, 0x7a, 0x99, 0x49, 0x99, 0x15, 0x47, 0x16, 0x58, 0x94, 0x51, 0xeb, 0x32, 0xcf, 0x54, 0x99, 0x8a, 0x82, 0x17, 0x25, 0x57, 0x2a, 0x55, 0x65, 0xc2, 0x50, 0x3f, 0x4e, 0x93, 0x34, 0x11, 0x6b, 0xb5, 0x62, 0x10, 0x7a, 0x4f, 0xd7, 0xab, 0xf0, 0xee, 0x34, 0xd4, 0xff, 0xbe, 0xd9, 0x3d, 0x9c, 0x71, 0x0c, 0x02, 0xea, 0x69, 0xe4, 0x5c, 0x13, 0xa4, 0x6f, 0x29, 0x03, 0xf5, 0xc8, 0xdf, 0x3b, 0xe8, 0x1e, 0x46, 0x51, 0xa4, 0xef, 0xfd, 0x6f, 0x57, 0x6e, 0x91, 0xe3, 0xb6, 0xd0, 0xba, 0x88, 0xc6, 0xde, 0x16, 0x5a, 0xc9, 0xa8, 0x23, 0xce, 0xcf, 0x3f, 0x23, 0x2e, 0x89, 0x7b, 0xb4, 0xa2, 0x99, 0x2f, 0x7b, 0x8b, 0x6d, 0xbc, 0x6b, 0xe8, 0x48, 0x35, 0x56, 0xf4, 0xc1, 0x6c, 0xb7, 0xac, 0xe1, 0xd9, 0x32, 0x36, 0x68, 0xde, 0xb4, 0xe9, 0x8c, 0xce, 0x58, 0x08, 0x4d, 0x04, 0x99, 0xc6, 0xdc, 0xbf, 0x3d, 0x0d, 0x45, 0x5a, 0xbb, 0xfc, 0xbe, 0x1f, 0xbc, 0x69, 0x44, 0x53, 0x37, 0x98, 0xe4, 0xb4, 0xc7, 0x3c, 0x82, 0xfb, 0x0e, 0x1d, 0x3e, 0x46, 0x29, 0xdb, 0xbe, 0x77, 0xba, 0xef, 0x6f, 0xd5, 0xe6, 0xfe, 0xe8, 0x79, 0xc1, 0xe6, 0x0f, 0x0b, 0xfc, 0x09, 0x22, 0x82, 0xc9, 0xc5, 0x4e, 0xbc, 0xa3, 0x31, 0x70, 0xf6, 0x27, 0x35, 0xea, 0x8e, 0xa8, 0x3f, 0x96, 0x10, 0x97, 0x2d, 0x93, 0xac, 0x44, 0x85, 0xb8, 0xd6, 0x4b, 0x95, 0x56, 0xa6, 0x6a, 0x44, 0x16, 0xa5, 0x99, 0x02, 0xa1, 0xa1, 0x2c, 0x24, 0x59, 0x75, 0xcf, 0x93, 0x38, 0x3c, 0x8d, 0xcb, 0xf6, 0x7d, 0xf3, 0x71, 0xf7, 0x17, 0xe5, 0x33, 0x2d, 0x21, 0x61, 0xc2, 0xc6, 0x18, 0x06, 0xa4, 0xcf, 0xf4, 0xfc, 0x00, 0xf2, 0xe1, 0xd1, 0x99, 0x9f, 0x30, 0xbc, 0x42, 0xd9, 0x28, 0x5e, 0xf7, 0xc6, 0x03, 0x7e, 0x60, 0x01, 0x5d, 0xe5, 0xaa, 0xc1, 0xa8, 0x0f, 0x0e, 0x5a, 0xa1, 0xca, 0x8d, 0x04, 0x7f, 0x92, 0x2c, 0x2a, 0x4a, 0x49, 0x04, 0xe5, 0x27, 0xc5, 0x8e, 0xbc, 0xdc, 0x56, 0x6d, 0x38, 0xee, 0xa8, 0x69, 0xe9, 0x2a, 0x93, 0x6f, 0x54, 0x5a, 0x2a, 0x5e, 0x4a, 0x23, 0x0b, 0xb6, 0x21, 0x47, 0xcc, 0xa2, 0x0a, 0x44, 0x6c, 0xb1, 0x62, 0xac, 0x88, 0xe8, 0xf5, 0x20, 0x8d, 0xfc, 0xe4, 0x2b, 0x0f, 0x72, 0xda, 0x8d, 0x1a, 0x59, 0xf7, 0x69, 0xf7, 0xf1, 0x8c, 0xd2, 0xcd, 0xae, 0xc5, 0xd4, 0xe3, 0xde, 0x99, 0x0e, 0xe8, 0x52, 0xb2, 0xa7, 0x49, 0x93, 0xb7, 0x6c, 0x0f, 0xe8, 0x09, 0xc7, 0x90, 0x38, 0xee, 0x14, 0xf5, 0x67, 0xae, 0x5e, 0xcc, 0x21, 0xd8, 0xd2, 0x6a, 0x65, 0x75, 0x1c, 0xb6, 0x56, 0x95, 0x03, 0xea, 0x30, 0x05, 0x65, 0x98, 0xbb, 0x06, 0x1c, 0x9b, 0xca, 0x20, 0xb5, 0x84, 0x9a, 0xec, 0xae, 0x6e, 0x32, 0x8c, 0xab, 0x8a, 0x5d, 0x16, 0x51, 0xce, 0xa0, 0x34, 0xa5, 0xd8, 0x75, 0xa5, 0x39, 0xfd, 0x90, 0x49, 0x32, 0xca, 0xf1, 0x54, 0x25, 0x37, 0xa5, 0xd4, 0x1b, 0x21, 0xb3, 0xb5, 0x4e, 0x65, 0x1c, 0xad, 0xef, 0x9d, 0x6f, 0xc8, 0xff, 0x7e, 0xfb, 0x9c, 0xed, 0xc8, 0x7f, 0xb4, 0x9d, 0xeb, 0xba, 0x56, 0x7e, 0x9a, 0x76, 0xe5, 0x38, 0x8b, 0x06, 0x0c, 0x10, 0x0d, 0x20, 0xab, 0x28, 0x3e, 0x0f, 0x7c, 0x82, 0x68, 0x00, 0x05, 0xea, 0xc9, 0xa1, 0x04, 0x5b, 0x3b, 0x98, 0xaf, 0x00, 0xdb, 0x89, 0x0d, 0x64, 0x20, 0x10, 0xb5, 0x85, 0x82, 0x50, 0xa7, 0xc6, 0xd8, 0x0b, 0xec, 0xfc, 0x98, 0x7b, 0x22, 0x8a, 0x95, 0x26, 0x57, 0x79, 0x3d, 0x8b, 0xa9, 0xd4, 0x38, 0x65, 0x85, 0x02, 0x5b, 0x31, 0xfa, 0xe6, 0x70, 0x24, 0xf5, 0x36, 0x08, 0x75, 0xa1, 0xb5, 0x86, 0x9b, 0x34, 0x25, 0xe5, 0x6f, 0xd9, 0x1a, 0xda, 0x53, 0xbf, 0xae, 0x1a, 0xfc, 0xe2, 0x9c, 0xc1, 0x2e, 0x5c, 0x70, 0x3a, 0xee, 0x80, 0x86, 0x83, 0xb1, 0x9d, 0x34, 0x6a, 0xfb, 0xbe, 0x4f, 0x1e, 0x71, 0xd4, 0xd3, 0x6c, 0x0e, 0xb0, 0x55, 0x4b, 0x4f, 0x06, 0xdf, 0x75, 0x1c, 0xb2, 0xd8, 0xaa, 0x5c, 0x6e, 0xec, 0x84, 0x85, 0x0d, 0xcf, 0x6a, 0x96, 0x5b, 0xc5, 0x7d, 0xc4, 0x56, 0x6c, 0x41, 0x1a, 0x47, 0xa7, 0x0d, 0x1d, 0xd1, 0x0c, 0xfd, 0x80, 0xb3, 0x49, 0xbb, 0x0c, 0x73, 0x14, 0xaa, 0xce, 0x29, 0x4f, 0xf3, 0x35, 0x34, 0xde, 0xc8, 0x67, 0xd0, 0x71, 0x33, 0xe4, 0x62, 0xb7, 0x75, 0x6a, 0x8a, 0x4c, 0xa7, 0x60, 0x0b, 0x51, 0x68, 0xf2, 0x4f, 0x13, 0x7e, 0xe2, 0x39, 0xdb, 0x3d, 0xbc, 0x7f, 0xdc, 0x51, 0x34, 0x03, 0xc0, 0xef, 0xfa, 0x43, 0xa7, 0x09, 0x0c, 0x3b, 0x04, 0xf3, 0x31, 0xe4, 0x43, 0x7e, 0x03, 0xbc, 0x42, 0x14, 0x09, 0xc6, 0x9e, 0xe0, 0x97, 0x65, 0x2c, 0x10, 0x8e, 0x8b, 0x1a, 0x83, 0xb3, 0x60, 0x52, 0xc8, 0x52, 0x8a, 0x28, 0x92, 0x66, 0x19, 0x48, 0x95, 0x26, 0xb9, 0x09, 0xe4, 0xdd, 0xdb, 0x5f, 0x4c, 0x27, 0xfd, 0x3f, 0x8e, 0xd4, 0xbb, 0xbf, 0xea, 0x33, 0x74, 0x0c, 0x13, 0xd2, 0xe7, 0xfd, 0x30, 0x72, 0xad, 0x87, 0xfe, 0x07, 0x90, 0x51, 0x7f, 0xa1, 0x9c, 0x68, 0xc9, 0x46, 0xab, 0x42, 0x6d, 0xdd, 0x62, 0xb3, 0x9d, 0x07, 0x46, 0xe6, 0xda, 0xc1, 0x71, 0xb8, 0x6e, 0xa6, 0x20, 0x96, 0x33, 0xcd, 0x72, 0xa8, 0x32, 0x72, 0x2f, 0xf6, 0x5b, 0x69, 0xa5, 0x54, 0x6d, 0xd5, 0x49, 0xb5, 0x89, 0x25, 0x73, 0xe2, 0xd5, 0xed, 0x1a, 0x9d, 0x09, 0x51, 0x14, 0x7c, 0x9f, 0x07, 0x91, 0x6d, 0xff, 0xe9, 0x24, 0xcc, 0x6f, 0x6d, 0xf3, 0x68, 0x95, 0xf6, 0x9e, 0xef, 0xb5, 0x2d, 0x9a, 0xf5, 0x7f, 0xc2, 0x64, 0x08, 0xc8, 0xd8, 0xcf, 0x53, 0x5a, 0xee, 0x5c, 0x9f, 0xab, 0x2c, 0x02, 0xb1, 0xf3, 0xd3, 0xf5, 0xf6, 0x48, 0xe4, 0x32, 0x37, 0x04, 0x92, 0xe3, 0x8f, 0xc0, 0xda, 0x32, 0xb3, 0xb7, 0x58, 0x46, 0x32, 0x6d, 0x85, 0x06, 0x95, 0x6e, 0xc0, 0x5a, 0xcb, 0x31, 0x5c, 0x97, 0x57, 0x75, 0x5a, 0x09, 0x14, 0xeb, 0x62, 0xad, 0x52, 0xc1, 0x95, 0xb4, 0x32, 0x2a, 0x69, 0x1a, 0x7f, 0xb6, 0xed, 0xbf, 0x9e, 0xe6, 0x1f, 0xc1, 0x2e, 0x44, 0xde, 0x9f, 0x79, 0x7b, 0xca, 0x58, 0x7c, 0xc7, 0x6f, 0xfd, 0x76, 0x72, 0xbd, 0xbd, 0x95, 0x99, 0xd2, 0x3d, 0x7d, 0x45, 0xe9, 0xda, 0xc4, 0x46, 0x18, 0x35, 0x1e, 0xd0, 0x6e, 0x4c, 0x79, 0x9d, 0xe5, 0xb4, 0x85, 0x2a, 0xb3, 0xd0, 0x42, 0x81, 0x30, 0x93, 0x62, 0x92, 0xcc, 0x69, 0x2d, 0xe8, 0xb5, 0x22, 0xcd, 0xa5, 0x94, 0x06, 0x45, 0x04, 0x90, 0xeb, 0x80, 0x88, 0xd2, 0x64, 0xe4, 0x32, 0x52, 0x61, 0x54, 0x21, 0x94, 0xc9, 0xaa, 0xd4, 0x0e, 0xe5, 0xc1, 0x1f, 0x1a, 0x2d, 0xfd, 0x54, 0x5a, 0x51, 0x63, 0xae, 0x73, 0x3a, 0x66, 0xa0, 0x56, 0x52, 0x45, 0xca, 0x93, 0x28, 0xbc, 0x5b, 0x2f, 0xbf, 0x6e, 0xc6, 0xfa, 0xdf, 0xa7, 0x53, 0x30, 0xda, 0xd8, 0xfe, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x1b, 0x6e, 0xc4, 0xbd, 0xdb, 0x92, 0xe4, 0xc8, 0xb2, 0x1d, 0x96, 0x67, 0x5f, 0x67, 0xa6, 0x67, 0x2a, 0x1b, 0x28, 0x54, 0x15, 0x32, 0x71, 0x8d, 0x40, 0xdc, 0x70, 0xc9, 0xc4, 0xa5, 0xef, 0x26, 0xc9, 0x24, 0xe4, 0x81, 0x91, 0x30, 0x93, 0x8e, 0x44, 0x91, 0x66, 0x22, 0x8d, 0x34, 0x89, 0x34, 0x49, 0x3f, 0x02, 0x18, 0x1e, 0xf0, 0x22, 0x3b, 0x1f, 0x27, 0xea, 0xfa, 0x17, 0xa4, 0xf1, 0x41, 0x6f, 0x47, 0xcb, 0x03, 0x55, 0x3d, 0xdd, 0x3d, 0x3d, 0xbb, 0xa6, 0x4f, 0x1e, 0x1a, 0xb3, 0xbb, 0xb3, 0xaa, 0xb2, 0x6a, 0xf6, 0x4e, 0x2f, 0x8f, 0x58, 0xbe, 0x96, 0x87, 0xbb, 0xc7, 0xbf, 0xdd, 0xed, 0x76, 0x7f, 0xf7, 0xf8, 0x70, 0x76, 0xa3, 0xbb, 0xdb, 0xfd, 0xcd, 0xee, 0x7f, 0xfd, 0xe4, 0x35, 0x7c, 0xba, 0xfb, 0x67, 0xff, 0xf4, 0x9f, 0x36, 0x6f, 0xbb, 0xb7, 0xaf, 0x5e, 0x9f, 0xdb, 0xe6, 0xcd, 0xab, 0x57, 0x1f, 0x76, 0x6c, 0xf6, 0xc6, 0x69, 0x99, 0xd7, 0xc1, 0xf3, 0x58, 0x3f, 0xae, 0x6c, 0x74, 0xf1, 0x0a, 0x5f, 0x2e, 0xce, 0xe0, 0x99, 0xe1, 0xb2, 0x18, 0x3e, 0x7b, 0x9e, 0xe1, 0xcb, 0xe0, 0x7a, 0xc2, 0xf3, 0x7c, 0xd1, 0x7b, 0xde, 0xbe, 0x28, 0xca, 0xba, 0x6e, 0xce, 0x78, 0x34, 0x75, 0xd5, 0xd6, 0x4d, 0xdb, 0xe4, 0x4d, 0x83, 0xe7, 0xa6, 0xa9, 0xf1, 0x68, 0x1b, 0x85, 0xa7, 0x96, 0x3e, 0xc1, 0x1f, 0x7a, 0x34, 0xba, 0xd3, 0x65, 0x75, 0x6a, 0x8d, 0x51, 0x05, 0xbe, 0x54, 0x79, 0xd1, 0x68, 0x9d, 0x57, 0xa6, 0x50, 0x79, 0x99, 0xe7, 0x26, 0x4f, 0xcf, 0x46, 0xa5, 0x39, 0xbe, 0xcb, 0xc3, 0x2c, 0xc8, 0x18, 0xcf, 0x38, 0xfb, 0xa7, 0xff, 0xf8, 0x5f, 0x7e, 0x7c, 0xa7, 0xbb, 0x7f, 0xfb, 0x0b, 0xbb, 0xfe, 0xb7, 0xe7, 0xed, 0x32, 0xc2, 0x8c, 0x9c, 0xc1, 0x08, 0xd3, 0x0f, 0x1e, 0xbb, 0x70, 0x18, 0xb1, 0x5e, 0xd8, 0x60, 0xfa, 0x65, 0x74, 0x17, 0xc7, 0x9d, 0x17, 0x63, 0xb8, 0xd3, 0xb3, 0xc9, 0xc5, 0x2b, 0x8f, 0x76, 0x55, 0x65, 0x76, 0xaa, 0xcf, 0xa7, 0x33, 0x59, 0x41, 0xa6, 0xb4, 0x30, 0x01, 0x9f, 0x91, 0x71, 0xf6, 0x91, 0x17, 0xb0, 0x11, 0xf6, 0x36, 0xad, 0x69, 0xda, 0x12, 0x76, 0x36, 0x65, 0x6b, 0xa4, 0x6e, 0x5b, 0xad, 0x8d, 0xce, 0x55, 0xde, 0x9a, 0x82, 0x7e, 0x17, 0x85, 0xa9, 0x8c, 0x29, 0x64, 0x79, 0x32, 0xbc, 0x30, 0x30, 0xcf, 0x28, 0x29, 0x78, 0xc8, 0x19, 0xe3, 0x69, 0xfa, 0x99, 0x5d, 0xff, 0xd7, 0x27, 0x36, 0xbc, 0xfc, 0x2d, 0xfe, 0x7a, 0xdd, 0xed, 0x06, 0xc7, 0x61, 0x2b, 0xfe, 0xf1, 0x99, 0xcf, 0x3d, 0x9b, 0x17, 0xd6, 0xe3, 0xab, 0x69, 0xd8, 0x2c, 0x10, 0xe3, 0xec, 0xb1, 0xc1, 0x59, 0x78, 0xdf, 0xf3, 0x7e, 0x9a, 0x47, 0xf7, 0x22, 0xdc, 0xf5, 0x46, 0x64, 0xc2, 0xd4, 0x5a, 0x9d, 0xeb, 0x73, 0xd3, 0x9c, 0x60, 0x98, 0x69, 0x6b, 0x9e, 0xc3, 0x29, 0xb7, 0x22, 0xe2, 0x42, 0xc2, 0x99, 0x52, 0x09, 0x11, 0x72, 0xcd, 0xb9, 0x12, 0xa5, 0x60, 0x4a, 0xa8, 0x03, 0x8f, 0xb4, 0xe6, 0x2c, 0x0c, 0x85, 0xe7, 0x06, 0x2c, 0x0a, 0x5e, 0x1e, 0xc2, 0x68, 0x1f, 0x85, 0x01, 0x3b, 0xa6, 0xfc, 0x77, 0x5f, 0x7b, 0xfc, 0x8b, 0xbf, 0xfe, 0xeb, 0x7f, 0xf2, 0x8c, 0x69, 0xcf, 0xb8, 0x0c, 0xa6, 0xf1, 0x69, 0x5d, 0x1d, 0xb2, 0x68, 0x99, 0xfb, 0xa1, 0x1f, 0x16, 0x7c, 0x85, 0x7f, 0xfc, 0xd1, 0xb4, 0x79, 0x1c, 0xbd, 0xc1, 0xf1, 0xbc, 0x65, 0xea, 0xe7, 0x79, 0x58, 0x46, 0xc1, 0x47, 0x7f, 0x5f, 0x56, 0x61, 0x56, 0x69, 0x73, 0x82, 0xd3, 0xe0, 0xa9, 0x54, 0x70, 0x91, 0x25, 0xec, 0x18, 0x67, 0x42, 0xc6, 0x42, 0x3c, 0x64, 0xf1, 0x31, 0x95, 0x51, 0xc8, 0x85, 0xae, 0x65, 0x01, 0xef, 0x34, 0xbc, 0x28, 0x58, 0xaa, 0x75, 0x99, 0x95, 0x15, 0x57, 0x2a, 0x96, 0x46, 0x09, 0x2d, 0x74, 0x18, 0x45, 0x2c, 0xc9, 0x12, 0x75, 0x1b, 0x2b, 0x96, 0x04, 0x8c, 0x63, 0x09, 0x66, 0xec, 0xee, 0xee, 0x2e, 0x7a, 0x32, 0xed, 0xdf, 0x3c, 0xb3, 0x1a, 0x9f, 0xf3, 0xda, 0x9b, 0xd7, 0x3b, 0xcf, 0x99, 0x5d, 0x33, 0x78, 0x0e, 0xf3, 0x57, 0x6f, 0x5d, 0x56, 0xd7, 0x31, 0xdc, 0x2c, 0x8b, 0x59, 0xc7, 0x95, 0x1b, 0x33, 0x99, 0x65, 0x5e, 0xa6, 0x79, 0x16, 0x2e, 0x5b, 0xe7, 0x91, 0x3f, 0xed, 0xb2, 0xac, 0x82, 0x55, 0x67, 0xac, 0x28, 0x59, 0x9f, 0x9a, 0xa2, 0x2e, 0x9a, 0xa7, 0x75, 0xf9, 0xb8, 0xcd, 0xb6, 0x0d, 0x56, 0xd3, 0x82, 0xec, 0xf0, 0xaf, 0xb6, 0x7b, 0xb0, 0xc3, 0x9f, 0x42, 0x74, 0x55, 0x53, 0x36, 0x9d, 0xa8, 0xce, 0x58, 0xa8, 0x4d, 0x95, 0xe4, 0x35, 0xf6, 0x64, 0x65, 0x54, 0x8c, 0xa5, 0x59, 0x72, 0x95, 0xd2, 0x2e, 0x4b, 0x92, 0x9b, 0xe4, 0xba, 0x5d, 0x46, 0x76, 0x0d, 0x6e, 0xef, 0xc0, 0x17, 0x7d, 0x3f, 0xb1, 0x9e, 0x79, 0x93, 0x07, 0x17, 0xb9, 0x8e, 0xc7, 0x98, 0x37, 0x78, 0xeb, 0xe8, 0x30, 0xc7, 0x38, 0xfe, 0xb2, 0x1a, 0xee, 0x8d, 0xfd, 0x6a, 0x1e, 0xed, 0x2a, 0x79, 0x29, 0x4e, 0x67, 0xda, 0x66, 0xe7, 0xb3, 0x82, 0x29, 0xa2, 0x3e, 0x6f, 0x56, 0x61, 0x83, 0xe1, 0x29, 0x7d, 0x44, 0x12, 0xda, 0x5e, 0xb0, 0xae, 0x54, 0x8d, 0x2e, 0x95, 0xd4, 0x4d, 0x53, 0x16, 0x4d, 0xd1, 0x1a, 0xad, 0x3a, 0x6d, 0x4c, 0x6d, 0xf2, 0xbc, 0x16, 0x9d, 0x6e, 0x4f, 0x4d, 0x9e, 0x37, 0x46, 0x57, 0xba, 0xd0, 0xca, 0x88, 0x2a, 0x16, 0x80, 0x8f, 0x2f, 0xd0, 0xe3, 0xff, 0xfe, 0x66, 0x7f, 0xbd, 0x6d, 0xb1, 0xcd, 0x7c, 0x67, 0x62, 0x97, 0xcb, 0xcc, 0x7d, 0x78, 0x68, 0xf6, 0xb9, 0xbb, 0xce, 0x1c, 0x4f, 0x03, 0x77, 0x7d, 0xb3, 0x98, 0xc5, 0x9b, 0xa6, 0x51, 0xf8, 0x2b, 0xd6, 0xe2, 0xe0, 0xf4, 0x97, 0x61, 0x64, 0x97, 0x7d, 0x51, 0x56, 0x40, 0xc4, 0x9c, 0x50, 0xb1, 0x39, 0x25, 0xcd, 0xe6, 0x9c, 0x9a, 0xd0, 0x51, 0xd7, 0x84, 0x1a, 0x6d, 0x59, 0x97, 0x92, 0x90, 0x91, 0x2c, 0x8b, 0xb8, 0xaf, 0xb4, 0x09, 0xb4, 0x62, 0x99, 0xe0, 0xca, 0x14, 0x3a, 0xc3, 0x3b, 0x4f, 0x65, 0x60, 0x94, 0x0e, 0xb0, 0x7a, 0xf3, 0x2c, 0x4d, 0x78, 0x1c, 0xfa, 0xfa, 0x17, 0xdb, 0xec, 0x9f, 0x5f, 0xe9, 0x33, 0xd8, 0xe6, 0x38, 0x73, 0x6f, 0x7c, 0x77, 0x76, 0x2e, 0x4e, 0xbf, 0x2c, 0x17, 0xe6, 0x2d, 0x03, 0x36, 0xd6, 0xd2, 0x2f, 0xce, 0x00, 0x67, 0x0e, 0x1e, 0x80, 0xd3, 0x9f, 0xd6, 0x99, 0x6d, 0xb6, 0x8d, 0x62, 0x99, 0xf6, 0xaa, 0xac, 0xaa, 0x93, 0x3c, 0x9f, 0xea, 0x6d, 0xa7, 0x3d, 0xc2, 0x61, 0x5e, 0x4b, 0x98, 0x55, 0x60, 0xa9, 0xe5, 0x82, 0x90, 0x5e, 0x72, 0x78, 0x8b, 0x01, 0x0e, 0x25, 0xf0, 0xbd, 0xa9, 0x94, 0xd1, 0x06, 0xde, 0xc3, 0xbe, 0x6b, 0x4c, 0x55, 0xc0, 0x4b, 0x46, 0xd7, 0xb5, 0xc1, 0x4f, 0x12, 0x2a, 0x36, 0xc7, 0x5c, 0x8a, 0x2c, 0x53, 0x59, 0x28, 0xf8, 0xe1, 0x98, 0xdc, 0x47, 0xd7, 0xf9, 0xec, 0xcd, 0xbb, 0x0f, 0x3b, 0x6f, 0xa6, 0x15, 0xd7, 0x1b, 0x87, 0xaf, 0xeb, 0x65, 0x36, 0x97, 0xb5, 0xf7, 0x07, 0x7f, 0xf4, 0xd7, 0xe5, 0x2b, 0xe0, 0x38, 0xcf, 0xa3, 0x7f, 0x11, 0xfb, 0x0c, 0xe0, 0x77, 0xf4, 0x0f, 0xbf, 0x0f, 0x83, 0xbb, 0xdb, 0x9f, 0x8e, 0x05, 0xd6, 0x61, 0x0e, 0x9f, 0xe5, 0x8d, 0x24, 0xa0, 0x07, 0x98, 0xcb, 0x46, 0xaa, 0xba, 0x6c, 0x93, 0x42, 0x1a, 0x09, 0xb3, 0x6b, 0x9e, 0x95, 0x59, 0x96, 0x19, 0x3c, 0x1a, 0xa1, 0x42, 0x8e, 0x88, 0x95, 0x21, 0x92, 0x95, 0xf8, 0x9a, 0x65, 0x5a, 0xea, 0x20, 0xcd, 0x44, 0x1c, 0x05, 0x5f, 0xfa, 0xec, 0x5f, 0x5c, 0xe7, 0x33, 0xb2, 0x8d, 0x39, 0xbe, 0xeb, 0x73, 0x1f, 0x3e, 0xf3, 0xfa, 0x8b, 0xe3, 0x0c, 0xab, 0x37, 0xaf, 0xf3, 0xea, 0xf6, 0xe6, 0x57, 0xd1, 0x71, 0x5f, 0x22, 0xe4, 0xc2, 0x6b, 0x70, 0x99, 0xc1, 0x4e, 0xab, 0x9f, 0x62, 0xd8, 0xe3, 0xc7, 0x56, 0x21, 0x1c, 0xc0, 0xda, 0xbc, 0xb6, 0xab, 0x54, 0x37, 0x5b, 0xb4, 0x23, 0x77, 0xb5, 0xca, 0xb4, 0x5c, 0x9b, 0x46, 0x8b, 0xc6, 0xc8, 0xea, 0x74, 0x92, 0xa9, 0x80, 0x6d, 0x2c, 0x07, 0x72, 0xe6, 0x4a, 0x18, 0x19, 0x19, 0x26, 0xb3, 0xdb, 0xf0, 0xee, 0xf8, 0x70, 0x1d, 0x2e, 0xbe, 0x79, 0xdf, 0xee, 0xfc, 0xc1, 0x38, 0xc0, 0x8e, 0x79, 0x41, 0x48, 0x5b, 0x56, 0x04, 0x00, 0x66, 0x9c, 0xc9, 0x65, 0x7d, 0xef, 0xac, 0x8e, 0x3b, 0x79, 0x5f, 0xf1, 0xdc, 0x3e, 0x2f, 0x11, 0xc4, 0x28, 0x46, 0xc3, 0xa8, 0x13, 0xf6, 0x93, 0xb5, 0x88, 0x50, 0xb0, 0x7e, 0x7a, 0xb4, 0xdb, 0x57, 0x78, 0xb1, 0xb3, 0xa6, 0x92, 0x81, 0x6d, 0x5b, 0x9c, 0xf0, 0xd4, 0x34, 0x95, 0x29, 0x13, 0x43, 0x61, 0x59, 0x6b, 0xdd, 0x02, 0x13, 0x4b, 0x30, 0x0f, 0x5d, 0xe4, 0xf8, 0xb2, 0x92, 0x01, 0x9c, 0xcb, 0xb8, 0x9f, 0x5e, 0xe9, 0x2f, 0xd8, 0x65, 0xa6, 0x71, 0x75, 0xd6, 0x79, 0x5e, 0xc6, 0x69, 0xf5, 0x60, 0xdc, 0x44, 0xe6, 0xad, 0x08, 0x6d, 0xd3, 0xbc, 0x7a, 0xdc, 0xff, 0x8a, 0xd7, 0xf6, 0x55, 0x51, 0x9e, 0xe8, 0x81, 0x1d, 0x46, 0x80, 0x68, 0xd9, 0xd4, 0x99, 0x82, 0xf6, 0xe6, 0x3a, 0x02, 0xc8, 0x8f, 0x56, 0xb6, 0x16, 0xee, 0x2d, 0xb8, 0x60, 0x79, 0xb6, 0xed, 0xf6, 0x33, 0x9a, 0xf8, 0x16, 0x10, 0x3f, 0xa9, 0x9a, 0x2c, 0x07, 0x29, 0x69, 0x4e, 0x27, 0x95, 0x9b, 0x52, 0x02, 0x50, 0x04, 0xff, 0x05, 0xfb, 0xf8, 0x7f, 0x3f, 0xb1, 0xe1, 0xd6, 0xda, 0xf5, 0x87, 0x67, 0xec, 0xfa, 0x80, 0xcf, 0x76, 0xde, 0x70, 0x99, 0x9d, 0x71, 0x66, 0x17, 0x17, 0x2b, 0x10, 0x9b, 0xcb, 0x1f, 0x19, 0x33, 0x9e, 0x0b, 0x90, 0x9c, 0x41, 0x13, 0x47, 0x78, 0x6e, 0x62, 0x03, 0x80, 0x1f, 0xdf, 0x9d, 0xf1, 0x84, 0xbf, 0x7b, 0x2e, 0x4e, 0x42, 0x95, 0x79, 0x79, 0xae, 0xce, 0x84, 0x83, 0xa2, 0xed, 0x40, 0x1b, 0xf1, 0xa6, 0x5b, 0x0e, 0x4b, 0xba, 0x2a, 0x33, 0x60, 0x23, 0x0c, 0x18, 0x28, 0x6b, 0x29, 0x55, 0x55, 0x30, 0x2c, 0x33, 0x95, 0x60, 0x6f, 0x29, 0x99, 0xba, 0x87, 0x83, 0xeb, 0xde, 0x47, 0xd1, 0xf1, 0x78, 0x5b, 0xc4, 0x9c, 0x45, 0x09, 0xbf, 0x8d, 0xd4, 0x31, 0x49, 0xe3, 0x50, 0x3b, 0xe1, 0x51, 0x44, 0x22, 0xfe, 0xb8, 0xcb, 0xfe, 0xf5, 0x67, 0xd6, 0xfd, 0x3f, 0x9f, 0x58, 0xe2, 0xfe, 0x16, 0xeb, 0xde, 0xbe, 0xfa, 0xf0, 0x7a, 0xd7, 0x73, 0x33, 0xb8, 0x88, 0x66, 0xcb, 0xc8, 0x11, 0xb0, 0x99, 0xcf, 0xb8, 0x3b, 0x72, 0x7f, 0x1c, 0x47, 0xbe, 0xf4, 0xbd, 0xe7, 0x3c, 0x21, 0xe2, 0x00, 0xc4, 0xf4, 0x06, 0xfc, 0xf3, 0xcd, 0x3e, 0x95, 0x78, 0x18, 0x99, 0x49, 0x19, 0xb4, 0xfa, 0x9c, 0x49, 0xc4, 0xdc, 0xb8, 0x6c, 0x94, 0x16, 0x27, 0xd9, 0x9c, 0xce, 0x39, 0xd3, 0x5d, 0x55, 0x84, 0x0f, 0x87, 0x28, 0x0c, 0x93, 0x58, 0xb0, 0x30, 0x3b, 0x06, 0xc7, 0x28, 0x89, 0xfd, 0x30, 0x08, 0x8e, 0x41, 0x18, 0x3c, 0x84, 0xfe, 0xc1, 0x8b, 0xbf, 0xca, 0xa9, 0x3e, 0x83, 0x90, 0x7f, 0x74, 0xdd, 0x56, 0x7b, 0xfb, 0xfa, 0xed, 0x8e, 0x7b, 0x8e, 0x83, 0xb0, 0x35, 0x39, 0x0e, 0x77, 0x3d, 0xee, 0xb9, 0xfe, 0xe2, 0x33, 0xdf, 0x1b, 0xf1, 0x52, 0xef, 0x2e, 0x0b, 0x18, 0x49, 0xef, 0xf4, 0x5e, 0xef, 0xba, 0x8f, 0x56, 0x0e, 0x2b, 0xdb, 0x17, 0x41, 0xb5, 0x91, 0x61, 0x73, 0xae, 0x4b, 0xa2, 0x8f, 0xa0, 0x21, 0x6d, 0x91, 0x82, 0x91, 0x50, 0x8c, 0xc6, 0x6a, 0xcc, 0xf1, 0x42, 0xdd, 0x96, 0x8f, 0x0b, 0x11, 0x01, 0xae, 0xc6, 0xb2, 0x13, 0x5d, 0x4b, 0xe0, 0x71, 0x02, 0x97, 0x6e, 0x1b, 0x63, 0x24, 0x36, 0x68, 0x5b, 0xe5, 0x75, 0xa1, 0xcf, 0xb4, 0xeb, 0xca, 0x24, 0x97, 0xf8, 0x99, 0x53, 0x79, 0x94, 0x71, 0x14, 0xf1, 0xeb, 0xb6, 0x1a, 0xd9, 0xb5, 0x2c, 0x2b, 0x5f, 0x0d, 0x84, 0xcb, 0x32, 0xbb, 0x60, 0xfb, 0xbe, 0x3b, 0x81, 0x48, 0xf6, 0xb3, 0x03, 0x4e, 0x75, 0x59, 0x96, 0x71, 0x5d, 0x7d, 0xdf, 0x5d, 0xd7, 0x19, 0x0e, 0x7c, 0x8a, 0x67, 0xa0, 0x20, 0xba, 0xaa, 0x38, 0xe0, 0x03, 0xfc, 0x0a, 0x7b, 0xcd, 0x00, 0xf2, 0x49, 0xd0, 0x34, 0xf7, 0xbf, 0x3f, 0x1c, 0xfd, 0x38, 0x8a, 0x1f, 0x18, 0xbe, 0x2c, 0xcf, 0x76, 0xcb, 0x81, 0x7e, 0xe0, 0x03, 0x48, 0x3c, 0x80, 0x91, 0xec, 0x32, 0xf4, 0xf5, 0x51, 0x64, 0xf0, 0x30, 0xe2, 0x85, 0x6e, 0x34, 0xa2, 0x99, 0x4a, 0x60, 0x92, 0x9f, 0x73, 0xa9, 0x05, 0x8f, 0x8f, 0x22, 0xf4, 0x9f, 0x15, 0x30, 0xcf, 0xf9, 0xeb, 0x2d, 0xd6, 0xa2, 0x99, 0x1d, 0xc7, 0x4c, 0x6c, 0x65, 0x8c, 0x01, 0x1d, 0x2f, 0x2e, 0x45, 0xb3, 0xd5, 0x77, 0xd8, 0xbc, 0x4e, 0x3e, 0x5b, 0xfc, 0x9e, 0x63, 0x97, 0x2d, 0xfd, 0x27, 0x10, 0x79, 0xf3, 0x32, 0xe1, 0x0c, 0xab, 0x4c, 0x08, 0xef, 0xf8, 0xf0, 0xe3, 0x4f, 0x82, 0xdf, 0x80, 0xbb, 0xa7, 0xa9, 0x14, 0x32, 0x4d, 0x7c, 0x16, 0xdf, 0xab, 0x1b, 0x15, 0x3c, 0x30, 0x1e, 0x49, 0xac, 0xd9, 0x2c, 0x11, 0x9a, 0x6b, 0x3f, 0xd2, 0x21, 0x07, 0xe9, 0x90, 0x99, 0x8a, 0x82, 0x03, 0xc3, 0xf6, 0x7b, 0x48, 0x8a, 0x7b, 0x85, 0xfd, 0x15, 0xa4, 0x2a, 0xe1, 0xe2, 0xe5, 0xad, 0xc4, 0xf7, 0xe2, 0x2c, 0x78, 0x91, 0xf8, 0x77, 0x0c, 0xdc, 0xfa, 0x4a, 0x61, 0x46, 0x76, 0xcd, 0x0c, 0x0c, 0x78, 0x98, 0xc9, 0x84, 0x09, 0x04, 0x04, 0x16, 0x51, 0x64, 0x1b, 0x2f, 0xc0, 0xc7, 0x65, 0x59, 0x9c, 0x65, 0xf2, 0xd6, 0xb5, 0xf7, 0xe6, 0x4f, 0x20, 0x72, 0x9f, 0xb0, 0xe4, 0xc8, 0x33, 0xcf, 0x3f, 0xc4, 0x7b, 0x11, 0x2a, 0x8e, 0xf0, 0x93, 0x25, 0x99, 0x08, 0xa5, 0x14, 0x90, 0x28, 0x52, 0xf8, 0x19, 0xd8, 0x3c, 0xd7, 0x19, 0x88, 0xbe, 0x10, 0xea, 0xf6, 0xa8, 0xa5, 0xc2, 0x23, 0x4e, 0x13, 0xa6, 0xa0, 0x6c, 0xf0, 0x1d, 0x1e, 0x65, 0x29, 0xd8, 0x08, 0x17, 0xf8, 0xe1, 0x4c, 0xf1, 0x98, 0xfb, 0x77, 0x86, 0xcb, 0xa3, 0x90, 0xd9, 0x51, 0x86, 0x08, 0xda, 0xe9, 0xcd, 0x73, 0xeb, 0xf0, 0x19, 0x7f, 0xbd, 0x6b, 0xdf, 0xed, 0x20, 0xc2, 0x9c, 0x79, 0x5a, 0x0d, 0x73, 0xe6, 0x99, 0x3b, 0xf8, 0x7c, 0x9e, 0x5d, 0xf0, 0xfd, 0x1e, 0x7c, 0x18, 0xd0, 0xb1, 0xce, 0xc6, 0xeb, 0x57, 0x38, 0xf2, 0xe2, 0xc2, 0x99, 0x9b, 0x71, 0x37, 0xbc, 0x3c, 0x45, 0x14, 0xc8, 0xb0, 0x6b, 0x4c, 0x65, 0x03, 0x30, 0xd6, 0x1b, 0xd6, 0x59, 0x4e, 0x0c, 0xb8, 0xc1, 0x3a, 0x4b, 0xc1, 0xad, 0x5a, 0xde, 0xd2, 0x77, 0x8a, 0x52, 0xb5, 0xb5, 0xd1, 0x14, 0xb5, 0xda, 0xb6, 0x62, 0x75, 0x53, 0x35, 0xed, 0x99, 0x69, 0x5e, 0xf1, 0xaa, 0x54, 0x27, 0xa0, 0x69, 0x45, 0xec, 0xff, 0x04, 0x9a, 0x59, 0xd4, 0xaa, 0x62, 0xe1, 0xc3, 0x3d, 0x4b, 0x18, 0xbf, 0x92, 0xe2, 0x93, 0x5d, 0xf0, 0xcb, 0x78, 0x81, 0x6f, 0x1c, 0xb2, 0xc0, 0x01, 0xa0, 0x43, 0xb5, 0xcc, 0x60, 0xf5, 0x80, 0x7a, 0x90, 0xfa, 0x75, 0xc0, 0xf3, 0xe2, 0x39, 0x13, 0x3e, 0xe7, 0xd3, 0x13, 0xc5, 0x8f, 0x4b, 0xa8, 0xb2, 0x18, 0x2c, 0xe9, 0x6c, 0xb0, 0xc1, 0x68, 0x77, 0xe5, 0xed, 0xb9, 0xe1, 0xb9, 0x92, 0x04, 0x15, 0x92, 0x88, 0x7d, 0x5d, 0xa8, 0x3a, 0x6b, 0x6b, 0xa9, 0x0d, 0xfe, 0x91, 0xea, 0x67, 0xe0, 0xbe, 0x2a, 0xaf, 0x75, 0x45, 0x44, 0x51, 0xc4, 0x2a, 0xcc, 0x85, 0xd2, 0x92, 0x83, 0x26, 0x9b, 0x28, 0x11, 0x8a, 0x09, 0x96, 0xb2, 0xe3, 0x5d, 0x72, 0x48, 0x93, 0xe8, 0x3e, 0x0a, 0xaf, 0x0b, 0x65, 0xef, 0xba, 0xf6, 0xf5, 0x07, 0x58, 0x06, 0x16, 0x4f, 0x04, 0x71, 0x35, 0xe3, 0x05, 0x1e, 0x73, 0xa6, 0x7f, 0xf7, 0x1f, 0x92, 0xbf, 0xfd, 0xbb, 0xbf, 0xf5, 0xe9, 0xbf, 0xf9, 0xf7, 0x7f, 0xf7, 0x77, 0xff, 0xee, 0xef, 0x92, 0xff, 0xf0, 0xb7, 0xbd, 0xe3, 0x2c, 0xff, 0x9d, 0x93, 0xfc, 0xad, 0xf7, 0xef, 0xd7, 0xf1, 0x6f, 0xf7, 0x22, 0x3f, 0x55, 0xa6, 0x06, 0x29, 0x3a, 0x17, 0x24, 0x5b, 0x2c, 0x0a, 0x82, 0x64, 0xb4, 0x5d, 0xd7, 0xd4, 0x85, 0xfd, 0x2c, 0xdc, 0xc5, 0xbb, 0x63, 0xb8, 0x0b, 0xf1, 0x7f, 0xf9, 0xbb, 0xdd, 0xef, 0x7e, 0xb7, 0x7b, 0x7a, 0xfc, 0xee, 0xe9, 0x99, 0xfe, 0xd2, 0x77, 0x1e, 0x1f, 0x3b, 0xfb, 0xef, 0xe7, 0x97, 0x76, 0x40, 0xfb, 0xea, 0x4a, 0xeb, 0x5e, 0x75, 0xcd, 0xab, 0xdd, 0xe4, 0xfa, 0x33, 0xf3, 0xc7, 0x81, 0x0d, 0xbd, 0x19, 0xa7, 0x19, 0x20, 0xe8, 0xcf, 0x2b, 0xef, 0xe1, 0x2b, 0x40, 0x3d, 0x16, 0x64, 0xef, 0xf7, 0x2b, 0x94, 0xe7, 0x80, 0xc5, 0xc8, 0x3c, 0x76, 0x01, 0xf1, 0xda, 0xa7, 0xc2, 0x14, 0xe0, 0x46, 0x65, 0x25, 0xb3, 0x52, 0x56, 0x26, 0x11, 0x62, 0xff, 0x57, 0xde, 0x0f, 0x8e, 0x1f, 0xf2, 0x97, 0x21, 0xc2, 0x6d, 0xfa, 0x22, 0x48, 0x5e, 0x44, 0xf1, 0x0f, 0xd1, 0x5f, 0xfd, 0xe9, 0x8f, 0x77, 0x3f, 0x3d, 0x1c, 0x1f, 0x82, 0x7b, 0xc1, 0xb3, 0x38, 0xe4, 0xe1, 0xd7, 0xb3, 0x02, 0xbf, 0x12, 0xcb, 0xfe, 0xf3, 0x2b, 0xad, 0x7b, 0xd3, 0x40, 0xc4, 0x00, 0x26, 0x9c, 0x81, 0x99, 0x61, 0x01, 0x1e, 0x2e, 0xc3, 0xea, 0xfa, 0xae, 0xe3, 0xfb, 0x7e, 0xff, 0x51, 0x92, 0x91, 0x6c, 0x81, 0x9c, 0xe9, 0x01, 0x1f, 0xbe, 0x11, 0xe3, 0x30, 0x5f, 0xf6, 0xc2, 0x70, 0x7d, 0xe0, 0xa7, 0xe8, 0x81, 0x84, 0x65, 0x21, 0xf4, 0x09, 0xae, 0x2c, 0xab, 0xb2, 0x36, 0x65, 0x9c, 0x4a, 0x55, 0xe8, 0x20, 0x3a, 0x9f, 0x94, 0xd6, 0xa1, 0x8a, 0x4a, 0xa3, 0xce, 0xac, 0xc8, 0xe0, 0x52, 0x91, 0x9b, 0x80, 0x89, 0x32, 0x65, 0x42, 0x07, 0x3c, 0xf4, 0xbd, 0x3c, 0x0d, 0x40, 0xa4, 0x82, 0x24, 0xc9, 0x82, 0x24, 0x56, 0xc7, 0x30, 0x4d, 0xee, 0x10, 0xd8, 0x8f, 0xf1, 0x21, 0xfe, 0x7a, 0xb2, 0xe0, 0xff, 0xf8, 0x56, 0x1a, 0xf2, 0xee, 0xed, 0x9b, 0x66, 0x67, 0x46, 0xcf, 0x9d, 0x5c, 0x78, 0x0a, 0x16, 0x18, 0xf8, 0x10, 0x9c, 0x18, 0x71, 0x6c, 0x5d, 0xcd, 0x44, 0x84, 0x0b, 0xdf, 0x5d, 0xd9, 0x04, 0x81, 0x3a, 0xf6, 0xbe, 0xcf, 0xc0, 0x99, 0xfd, 0x61, 0xd9, 0x0b, 0xad, 0x79, 0x5c, 0x9f, 0xf2, 0xe2, 0x74, 0xee, 0x9a, 0x8d, 0xed, 0x77, 0x85, 0x88, 0xea, 0xbc, 0x68, 0xab, 0xa6, 0xd0, 0xd8, 0x74, 0x58, 0xa1, 0xa2, 0xaa, 0x9a, 0xbc, 0xab, 0xb1, 0x4c, 0x45, 0x9d, 0xeb, 0xbc, 0x2d, 0x9b, 0x26, 0x13, 0x05, 0x54, 0x74, 0xa9, 0x62, 0x85, 0x4d, 0x9b, 0x46, 0x40, 0x7d, 0x2f, 0x7a, 0xb8, 0x0b, 0x74, 0xa6, 0xee, 0x79, 0x2e, 0xb1, 0x25, 0xb3, 0x12, 0xb4, 0x0b, 0x31, 0x31, 0xf8, 0x1c, 0x4a, 0xfe, 0xcf, 0x6f, 0x75, 0xdb, 0xfb, 0xee, 0x43, 0xd7, 0xec, 0x7c, 0x26, 0xa6, 0x01, 0xc4, 0x63, 0xbd, 0x78, 0x83, 0x4f, 0xd4, 0xd1, 0xe3, 0x7c, 0x1d, 0xbd, 0x8b, 0xe7, 0xf1, 0xa9, 0x87, 0x12, 0x45, 0xb0, 0x66, 0xdc, 0xa3, 0x9f, 0x18, 0x2f, 0xde, 0x42, 0x3f, 0xb1, 0xcf, 0x8b, 0x73, 0x29, 0x54, 0x05, 0x2e, 0x45, 0x39, 0x47, 0x30, 0x0a, 0x4a, 0x72, 0x34, 0x27, 0x09, 0x54, 0x6c, 0x72, 0x6c, 0xb9, 0xf6, 0xac, 0xf3, 0xae, 0xcb, 0xc9, 0x0c, 0x9d, 0xe9, 0xdc, 0x64, 0x4a, 0xe6, 0xa6, 0xe0, 0x22, 0xd6, 0x32, 0x65, 0x61, 0x11, 0x7a, 0x31, 0x53, 0xa4, 0x86, 0x72, 0x9e, 0x66, 0xc5, 0x9d, 0x4c, 0x8e, 0x89, 0x4a, 0x43, 0xc4, 0xd4, 0x2c, 0x2e, 0xe2, 0xc4, 0x0f, 0xe3, 0xe0, 0x70, 0xbc, 0x0e, 0xfc, 0xdf, 0xbf, 0x7a, 0x0b, 0x7d, 0x36, 0xc2, 0x59, 0xfe, 0x38, 0x3b, 0xc6, 0x8c, 0xbd, 0x41, 0x18, 0x63, 0xfd, 0x04, 0x06, 0xe9, 0xc1, 0x71, 0xe4, 0xbd, 0x0b, 0x20, 0xc6, 0xb8, 0x06, 0xde, 0xeb, 0x61, 0xd5, 0xcc, 0xc7, 0x75, 0x5f, 0x94, 0xe2, 0x7c, 0xd6, 0x1b, 0xc7, 0x28, 0x1f, 0xb9, 0x3c, 0x25, 0x0d, 0xf0, 0x82, 0x69, 0x2d, 0xfd, 0x47, 0x08, 0x90, 0x36, 0x33, 0x42, 0x21, 0xa0, 0x6a, 0x4c, 0xd1, 0x1a, 0xca, 0xf5, 0x40, 0xab, 0x95, 0x3a, 0x6f, 0x2c, 0xda, 0x40, 0xbf, 0xb5, 0x1a, 0xd4, 0xba, 0x26, 0x3c, 0x35, 0x06, 0x3a, 0xc6, 0x9c, 0xf4, 0x09, 0x8c, 0x3f, 0x0b, 0xb2, 0x58, 0x5c, 0x07, 0xfe, 0x64, 0xd7, 0xd2, 0x3b, 0x8c, 0xe3, 0x6d, 0x8f, 0x9e, 0xe3, 0x2e, 0x58, 0x92, 0xfd, 0xb4, 0xe2, 0xdf, 0x65, 0x9e, 0xdc, 0x7e, 0x9d, 0x2f, 0xf8, 0xae, 0x18, 0x1c, 0x60, 0x0b, 0x03, 0x55, 0x19, 0xe0, 0xc0, 0xde, 0x63, 0x7b, 0x4a, 0x15, 0x50, 0xa6, 0x00, 0x98, 0x7f, 0x86, 0xf4, 0x6c, 0xea, 0xb3, 0x01, 0x6f, 0xc4, 0xff, 0xa0, 0x82, 0x94, 0x29, 0x8a, 0x46, 0x49, 0x81, 0x77, 0xab, 0x5a, 0x25, 0xcf, 0x78, 0xff, 0xb2, 0x82, 0xe2, 0xd6, 0x5a, 0xc1, 0xda, 0xb8, 0xc9, 0x11, 0xa4, 0x85, 0xd1, 0x31, 0x22, 0x00, 0xc9, 0x33, 0x5d, 0x68, 0x56, 0x98, 0x06, 0x90, 0xa4, 0x8c, 0x62, 0x1c, 0x3c, 0x46, 0x30, 0x04, 0x8a, 0xf0, 0xda, 0x95, 0xf8, 0xb6, 0x7b, 0xd7, 0xed, 0xa0, 0x5d, 0xcc, 0x34, 0xcc, 0x93, 0xef, 0x4d, 0x08, 0x66, 0x60, 0x21, 0xbe, 0x3f, 0xc0, 0x65, 0x6c, 0x1c, 0xe7, 0xc1, 0x63, 0x33, 0x22, 0xf9, 0x3c, 0xf8, 0x0b, 0x9c, 0xe5, 0xcf, 0x66, 0x5c, 0x7a, 0xe3, 0xcf, 0xfb, 0x17, 0x31, 0x18, 0xfb, 0x7d, 0xfa, 0x70, 0xb8, 0x7f, 0x38, 0x78, 0xe9, 0x8f, 0xb7, 0x37, 0xb1, 0x7f, 0xfb, 0xc3, 0x5d, 0xe4, 0xa4, 0xbe, 0x1f, 0x7e, 0x17, 0x06, 0x87, 0x30, 0x09, 0x5e, 0xbc, 0xb8, 0x8f, 0x6f, 0x5f, 0xbe, 0xf0, 0xef, 0x7e, 0xfa, 0xfd, 0xfe, 0xe5, 0xfe, 0x36, 0xbb, 0xf9, 0xb3, 0xf7, 0xe7, 0xef, 0x5f, 0xde, 0x1c, 0x0e, 0x2f, 0x93, 0x1b, 0xe1, 0xdd, 0xfd, 0x10, 0x7d, 0xe7, 0x45, 0x3f, 0x06, 0x99, 0x77, 0x77, 0x0c, 0x1f, 0x7e, 0xca, 0xf6, 0x41, 0x7c, 0xff, 0xa3, 0xbc, 0x4b, 0xf9, 0x03, 0xbe, 0x21, 0xd2, 0x9f, 0x1c, 0xef, 0xba, 0x2c, 0xc8, 0x87, 0xf6, 0xfd, 0x8e, 0x03, 0xcd, 0x0d, 0xa4, 0x4b, 0x6f, 0x10, 0xaa, 0xdd, 0x5f, 0x4d, 0x7d, 0x40, 0x99, 0x5d, 0x56, 0xc4, 0x36, 0x3c, 0xf6, 0x45, 0x55, 0x52, 0xfa, 0xb4, 0x56, 0xe7, 0x73, 0x73, 0x6a, 0x36, 0x9d, 0xb9, 0xa5, 0xac, 0xea, 0x22, 0x6f, 0xea, 0x3c, 0xb5, 0xb9, 0xb8, 0xa2, 0xd4, 0x58, 0x7f, 0x94, 0xc0, 0x6f, 0x4b, 0x83, 0x3f, 0x60, 0xc3, 0x71, 0x85, 0x57, 0x8c, 0xce, 0x92, 0xef, 0x59, 0x12, 0x71, 0x90, 0xe0, 0x58, 0x45, 0x51, 0x92, 0x25, 0x5f, 0x85, 0xfd, 0x7f, 0xf6, 0x8c, 0x6d, 0xcf, 0xac, 0x46, 0xb2, 0x6d, 0x44, 0xdc, 0xf2, 0xc0, 0x3d, 0x46, 0xcf, 0x2c, 0xfe, 0xf0, 0x17, 0x12, 0xc3, 0x94, 0x22, 0x87, 0xda, 0x71, 0x7a, 0xca, 0xca, 0x91, 0xa6, 0xa6, 0x87, 0xcd, 0x82, 0x40, 0xc5, 0xc8, 0xf6, 0xdc, 0x6c, 0x34, 0x04, 0xbc, 0x44, 0x17, 0xd8, 0x69, 0x20, 0x24, 0x5a, 0xe7, 0x0c, 0xf4, 0x3d, 0x01, 0x75, 0x04, 0xb7, 0xd4, 0x12, 0x7f, 0x14, 0x28, 0xbe, 0xd0, 0x46, 0xc4, 0x15, 0xa2, 0x80, 0x1f, 0x1d, 0xa2, 0xe0, 0xc1, 0xc3, 0xea, 0x4b, 0xb9, 0xc8, 0xa4, 0x48, 0x3e, 0xb3, 0xed, 0x5f, 0x7d, 0x66, 0xdb, 0xff, 0xfe, 0xad, 0x79, 0xfd, 0x0f, 0x6f, 0x76, 0xeb, 0xc2, 0x48, 0x9a, 0x79, 0xce, 0x38, 0x5d, 0x46, 0xc7, 0x9f, 0xc6, 0x79, 0xf5, 0x0c, 0xc8, 0x30, 0x24, 0x9b, 0xe9, 0x5d, 0x6f, 0x36, 0xd3, 0x47, 0x59, 0x76, 0xf1, 0x7a, 0x38, 0xd0, 0xbb, 0x89, 0x1e, 0x3c, 0x21, 0x1f, 0xb2, 0x2c, 0x93, 0xc7, 0xcc, 0x65, 0x87, 0x43, 0x9c, 0x30, 0x01, 0xa9, 0x1f, 0x64, 0x91, 0x74, 0xb8, 0x00, 0xaf, 0x25, 0x5d, 0x2a, 0x41, 0xb0, 0x60, 0x8a, 0x06, 0x92, 0x03, 0x1d, 0xcd, 0xbd, 0xca, 0x83, 0xd8, 0x20, 0xd8, 0xe5, 0x81, 0x41, 0x08, 0xcc, 0x32, 0xc1, 0xc3, 0x17, 0x2f, 0xe3, 0xfb, 0x7d, 0x12, 0x06, 0xd0, 0x0e, 0x49, 0x96, 0x4a, 0x37, 0xf6, 0xf7, 0x3f, 0xdd, 0x87, 0x69, 0x78, 0x48, 0x92, 0x67, 0xcc, 0x7a, 0xce, 0x65, 0x6f, 0x76, 0xce, 0xe0, 0x2e, 0x74, 0xa6, 0xb4, 0x22, 0x42, 0x4f, 0x17, 0xc4, 0x6c, 0xe3, 0xac, 0x93, 0x30, 0x94, 0x1e, 0x20, 0x61, 0x76, 0x71, 0xac, 0xda, 0xbc, 0x7c, 0x12, 0xae, 0x7f, 0x8c, 0x78, 0x2c, 0xf0, 0xd6, 0xbd, 0x2c, 0x91, 0x11, 0x04, 0xbe, 0x80, 0x9e, 0xc9, 0x88, 0xd8, 0x7b, 0x77, 0x5c, 0xf2, 0x1f, 0xa1, 0x98, 0x7f, 0xd2, 0x47, 0x95, 0x44, 0x81, 0x94, 0x7f, 0x54, 0xc6, 0xe1, 0x99, 0x51, 0xca, 0x1c, 0x41, 0x1d, 0x59, 0x92, 0xde, 0x0a, 0xa5, 0xe4, 0x4d, 0xc4, 0x44, 0x62, 0x74, 0x64, 0x10, 0x0b, 0xbe, 0x0f, 0x0d, 0xf4, 0x58, 0xc4, 0x8c, 0x64, 0xca, 0x08, 0x16, 0x67, 0x51, 0xc6, 0x92, 0xec, 0x77, 0x57, 0xe1, 0xc7, 0xdb, 0xe6, 0xd5, 0xeb, 0xb6, 0xdb, 0x31, 0x33, 0xcd, 0x53, 0x6f, 0x33, 0x3b, 0x93, 0x47, 0xe9, 0x9d, 0x05, 0x2a, 0x1a, 0x8c, 0xd2, 0x21, 0x38, 0x21, 0x34, 0x04, 0xcf, 0x9f, 0xfc, 0xd9, 0x77, 0x7e, 0x96, 0x9d, 0xaa, 0x38, 0x57, 0x15, 0x80, 0x51, 0x57, 0x19, 0x64, 0x73, 0x12, 0x25, 0xfe, 0x4f, 0x07, 0x9e, 0xb0, 0xb4, 0xed, 0x44, 0x7e, 0x6e, 0xbb, 0xba, 0x6d, 0xf5, 0xa9, 0xe9, 0x88, 0xfb, 0x77, 0x14, 0xc4, 0x3b, 0x49, 0x09, 0xba, 0x0e, 0x7b, 0x11, 0xb1, 0xbb, 0x38, 0x77, 0x26, 0x54, 0x86, 0xe7, 0x65, 0x97, 0x23, 0x6a, 0x9c, 0xda, 0xf3, 0x09, 0x82, 0x55, 0x48, 0x23, 0x80, 0xa7, 0x05, 0x7e, 0x09, 0x09, 0x0b, 0x0e, 0x71, 0x7c, 0x15, 0x7e, 0xc0, 0xb2, 0x0f, 0xbb, 0xa1, 0x1f, 0x38, 0x83, 0x18, 0x73, 0x0c, 0xac, 0x18, 0xc7, 0x0b, 0xd8, 0xd5, 0xc0, 0xfb, 0xcb, 0x65, 0x58, 0x2e, 0xb3, 0x7f, 0x31, 0xa3, 0x33, 0x73, 0x8f, 0x13, 0xed, 0xc7, 0xab, 0x03, 0x90, 0xb2, 0x9f, 0xf7, 0xa0, 0x15, 0xe7, 0xc6, 0xe0, 0x0f, 0x02, 0xd2, 0xc9, 0x9e, 0x4f, 0x40, 0xa9, 0x58, 0x0a, 0x62, 0xf3, 0x58, 0x36, 0x13, 0x0e, 0xf5, 0x02, 0xf3, 0xa0, 0x66, 0x74, 0xab, 0x2b, 0x69, 0x2a, 0xd2, 0xcd, 0xa5, 0xd6, 0x55, 0xa1, 0x13, 0x95, 0x1b, 0xa9, 0x2a, 0x4a, 0xa2, 0x56, 0x8a, 0x31, 0x7e, 0x24, 0x8a, 0x1f, 0xa7, 0x01, 0x48, 0xd6, 0xef, 0x7c, 0x27, 0x7c, 0xc9, 0x93, 0x6d, 0x8f, 0xfd, 0xcf, 0x57, 0x45, 0x33, 0x6b, 0xdb, 0x0a, 0x16, 0x65, 0xc6, 0x75, 0xf6, 0xe8, 0xb4, 0x62, 0x18, 0x57, 0xc6, 0x47, 0x6c, 0x37, 0x36, 0xf8, 0xc3, 0xbc, 0x02, 0x3c, 0xb0, 0x9a, 0x66, 0xd3, 0xcf, 0x8b, 0x61, 0x7c, 0x1e, 0x38, 0x89, 0xb8, 0x61, 0x9f, 0x97, 0x14, 0xcf, 0xe8, 0x4c, 0x10, 0x08, 0x22, 0x08, 0x1b, 0x09, 0x44, 0xe8, 0xa0, 0xa2, 0x68, 0xb7, 0x5c, 0x63, 0xa1, 0x95, 0xa8, 0x0b, 0x40, 0x48, 0x93, 0x35, 0x25, 0x07, 0x2d, 0x31, 0x88, 0x6d, 0xa9, 0x29, 0xb3, 0xb6, 0x29, 0xdb, 0xc2, 0xd4, 0xed, 0xa9, 0x81, 0xa4, 0xd1, 0x61, 0x99, 0x43, 0xda, 0x34, 0xaa, 0xac, 0x12, 0x1d, 0x21, 0x9e, 0xb9, 0x49, 0x1c, 0x43, 0xf4, 0x70, 0xce, 0xaf, 0x5c, 0x8d, 0xaf, 0x5f, 0x77, 0xaf, 0x76, 0xde, 0xd2, 0xfb, 0x00, 0xf8, 0x1e, 0x74, 0x9f, 0x3e, 0xf3, 0x97, 0xde, 0xa5, 0x2f, 0x1d, 0x3c, 0xb1, 0x71, 0x58, 0xe8, 0x35, 0xfa, 0x86, 0xe7, 0x6c, 0x3f, 0xc7, 0x7c, 0x58, 0x96, 0x9f, 0x4f, 0xa7, 0xfc, 0x54, 0x9f, 0xab, 0x2d, 0x95, 0x88, 0xff, 0xb1, 0xae, 0x3a, 0x77, 0x2d, 0x16, 0x62, 0xd3, 0x46, 0xe0, 0x55, 0x5d, 0xd4, 0x36, 0x49, 0x2b, 0xce, 0xa6, 0xab, 0x45, 0x03, 0x87, 0xaa, 0xb8, 0xe8, 0x0c, 0xc4, 0x26, 0x7c, 0x47, 0x29, 0x4a, 0xa5, 0xc2, 0xa2, 0xab, 0xca, 0xf2, 0xdc, 0x45, 0x65, 0x2e, 0x8b, 0x98, 0xb1, 0x4a, 0x1e, 0xa3, 0x54, 0xeb, 0x88, 0xa5, 0x88, 0xd1, 0xd1, 0x31, 0x09, 0xae, 0xe2, 0x55, 0x6f, 0xf1, 0x67, 0xe7, 0x60, 0x47, 0x61, 0xa3, 0xd1, 0x2e, 0xeb, 0x7b, 0x70, 0x2a, 0xc0, 0xa3, 0x33, 0x79, 0xeb, 0xc5, 0xf9, 0x12, 0x0d, 0x5d, 0xe1, 0xfb, 0x62, 0x5a, 0xf8, 0xb8, 0x2f, 0x8a, 0xca, 0xe2, 0x7d, 0x0b, 0x4f, 0x55, 0xed, 0x63, 0xde, 0xb4, 0x79, 0xe4, 0x53, 0x8f, 0xa9, 0xd4, 0xcd, 0xe2, 0x46, 0x83, 0x60, 0x81, 0x1a, 0x83, 0x07, 0xeb, 0xce, 0x18, 0xca, 0x9e, 0x22, 0xc4, 0x99, 0xb2, 0xd0, 0xd0, 0x05, 0x51, 0x6e, 0x54, 0x7e, 0xd2, 0x49, 0x8e, 0xe5, 0x89, 0x9d, 0xf7, 0x10, 0x3c, 0xb8, 0x07, 0x96, 0x86, 0x20, 0xff, 0x77, 0xd7, 0x25, 0x41, 0xac, 0x5d, 0x0b, 0x83, 0x1c, 0xa3, 0x3d, 0x66, 0x2e, 0x3e, 0x18, 0xe3, 0xea, 0x2f, 0xa0, 0xf3, 0x0e, 0x30, 0xb2, 0x9f, 0xbd, 0xaf, 0xaa, 0x17, 0x01, 0x06, 0x0b, 0xc1, 0x52, 0x6f, 0x19, 0x62, 0x44, 0xb1, 0xb3, 0xcd, 0x02, 0xe3, 0xc3, 0x76, 0x4a, 0x5d, 0x6f, 0xd9, 0xaa, 0xf3, 0x63, 0xa2, 0xb8, 0xda, 0x4e, 0x08, 0x9b, 0xa0, 0xb5, 0xe6, 0x61, 0xe7, 0x15, 0x26, 0x27, 0x06, 0x09, 0x3b, 0x4f, 0x74, 0x14, 0xaa, 0x28, 0xf3, 0x8f, 0x75, 0x59, 0xd4, 0xa0, 0x8d, 0x4a, 0x4a, 0x76, 0xcc, 0xb2, 0xc3, 0x95, 0xe8, 0xf1, 0xbe, 0xc5, 0x3a, 0x5c, 0x97, 0x0b, 0x07, 0xec, 0x19, 0x1f, 0x0a, 0x65, 0xf5, 0xc0, 0x09, 0x67, 0x9f, 0x3b, 0x17, 0x87, 0x11, 0x01, 0xf9, 0x9a, 0xd3, 0x1e, 0xfd, 0xb5, 0x25, 0xb9, 0x4b, 0xda, 0x50, 0xda, 0x6e, 0xac, 0xc2, 0xfa, 0x09, 0x1a, 0xac, 0xce, 0x25, 0xf1, 0x11, 0x56, 0x63, 0x31, 0x92, 0x35, 0x40, 0xc7, 0x4a, 0x35, 0x39, 0xab, 0x04, 0x9d, 0x2f, 0xa9, 0xe8, 0x14, 0xe6, 0x95, 0x91, 0x69, 0x28, 0x8e, 0x49, 0x2a, 0x64, 0x14, 0x0b, 0xc9, 0x93, 0x44, 0xc4, 0x77, 0x3e, 0x4f, 0xb9, 0x97, 0x1e, 0xd8, 0x3f, 0x0c, 0x7a, 0xc0, 0x36, 0x3a, 0x52, 0x1a, 0x17, 0xb3, 0x80, 0xc1, 0x83, 0xcb, 0x4f, 0xce, 0xba, 0x3a, 0x53, 0x0f, 0xa6, 0x3f, 0x70, 0xc7, 0x75, 0xbf, 0x2a, 0x3b, 0xc1, 0xac, 0x08, 0x3a, 0xe0, 0x30, 0xc0, 0x22, 0xc0, 0x5a, 0x82, 0xc2, 0x4a, 0x93, 0xe7, 0xba, 0x3d, 0x5b, 0x8a, 0x4f, 0x76, 0xe6, 0x94, 0x58, 0x55, 0x35, 0x65, 0x8c, 0xb7, 0x6a, 0x09, 0x9d, 0x35, 0x79, 0xd1, 0xd5, 0x25, 0xad, 0xc3, 0xca, 0x98, 0x46, 0xb7, 0x90, 0x6a, 0x0a, 0x28, 0xc9, 0x84, 0x91, 0x59, 0x94, 0x24, 0xa9, 0x9f, 0x52, 0x32, 0x04, 0x72, 0x06, 0x1f, 0x0e, 0xd7, 0xa1, 0x47, 0xd7, 0xbd, 0x6f, 0x5f, 0xed, 0x7a, 0x0f, 0x28, 0x6f, 0x56, 0x68, 0x15, 0x17, 0xf4, 0xd1, 0x80, 0xd2, 0xfb, 0xa3, 0xeb, 0x2f, 0x13, 0x67, 0x58, 0x95, 0xde, 0xba, 0xc2, 0x85, 0xc0, 0x44, 0xc6, 0x46, 0xe0, 0xd5, 0xb4, 0x0e, 0xde, 0x3c, 0xef, 0x53, 0xc1, 0x64, 0x66, 0x0f, 0x5d, 0xd3, 0x4a, 0x99, 0x44, 0xc8, 0x3c, 0x87, 0x75, 0x79, 0x96, 0x88, 0x52, 0x73, 0x25, 0xe3, 0x8c, 0xe3, 0xbd, 0xaa, 0x54, 0x49, 0x83, 0x37, 0xcb, 0xa9, 0xa6, 0x43, 0x81, 0x5f, 0x48, 0x96, 0xa6, 0x69, 0x26, 0x4c, 0x4a, 0x61, 0x3b, 0xce, 0x84, 0x48, 0x75, 0x92, 0x42, 0x63, 0xe2, 0x3f, 0x61, 0xf8, 0xdf, 0x62, 0xa9, 0x89, 0xd2, 0x24, 0x8d, 0x5f, 0x1e, 0xe3, 0xfb, 0xf4, 0x3a, 0x2e, 0xfc, 0xb6, 0x7b, 0xfd, 0x76, 0x37, 0x50, 0xa2, 0x8a, 0x32, 0x53, 0xd0, 0x9a, 0xd3, 0x85, 0xaf, 0xcb, 0xec, 0xf9, 0xfd, 0xe8, 0x8d, 0xcb, 0xe2, 0xc0, 0x7b, 0x86, 0xb3, 0x15, 0xda, 0xf3, 0x33, 0x8a, 0x4c, 0x5c, 0xd8, 0x66, 0x85, 0x21, 0x96, 0xc5, 0xb6, 0x89, 0xda, 0xed, 0xc8, 0xe5, 0xf1, 0x20, 0xa9, 0x01, 0xab, 0x68, 0x54, 0x5e, 0x64, 0x85, 0x90, 0x45, 0x25, 0xca, 0x12, 0xc1, 0xbc, 0xaa, 0x10, 0xd8, 0x2a, 0x95, 0x16, 0x88, 0x61, 0x58, 0xb6, 0x55, 0x4d, 0x75, 0x05, 0x49, 0xc6, 0x64, 0x12, 0x49, 0xf2, 0x12, 0x0b, 0x0f, 0x8c, 0xc5, 0x1f, 0x4b, 0x27, 0xb0, 0x1a, 0xff, 0xa7, 0xeb, 0x56, 0x23, 0xd9, 0x66, 0xc0, 0x2f, 0x96, 0xc1, 0x23, 0x43, 0x18, 0x73, 0x8d, 0x8b, 0x2d, 0xd7, 0x33, 0x67, 0xb8, 0x4c, 0xbe, 0xcf, 0x29, 0x11, 0x49, 0x99, 0xc7, 0xcf, 0x6b, 0x27, 0xec, 0x09, 0xd3, 0xf9, 0xfc, 0x58, 0xe0, 0x42, 0xc7, 0x9c, 0x9b, 0x61, 0x56, 0x81, 0xb6, 0x8f, 0x87, 0x4a, 0x36, 0xa3, 0xd5, 0x60, 0xe9, 0xc1, 0x70, 0xd9, 0xd2, 0x06, 0x6c, 0x11, 0xbc, 0x1a, 0x1d, 0xe5, 0xb6, 0xa8, 0x07, 0x21, 0xad, 0xcc, 0xdb, 0xed, 0xf4, 0x2c, 0xcf, 0x39, 0x84, 0x59, 0x9e, 0xb1, 0xc3, 0x31, 0xe5, 0x51, 0x88, 0x48, 0x76, 0x48, 0xaf, 0x5b, 0x8d, 0xaf, 0xda, 0xf7, 0xaf, 0xdf, 0x11, 0xb3, 0xea, 0x87, 0x69, 0x21, 0x0e, 0x7f, 0xf1, 0xa7, 0xd9, 0x03, 0x1d, 0x1e, 0x81, 0x22, 0xbf, 0x9a, 0xd8, 0x11, 0xd3, 0xbe, 0x24, 0x66, 0x85, 0x5d, 0x76, 0xf6, 0xc1, 0x6c, 0x2d, 0xe8, 0xd7, 0x9d, 0x3e, 0x77, 0x80, 0x3b, 0x78, 0xb2, 0xeb, 0xda, 0xbc, 0xe9, 0xcc, 0x19, 0x31, 0xba, 0x35, 0x1d, 0xf4, 0xb3, 0xee, 0x98, 0x69, 0xb3, 0xae, 0x03, 0xc8, 0x18, 0x1e, 0x03, 0xdd, 0x59, 0x41, 0xf9, 0x64, 0x09, 0x11, 0x93, 0x1e, 0xa2, 0x54, 0x80, 0x7d, 0x24, 0x49, 0xac, 0xd3, 0x83, 0x4e, 0x73, 0xce, 0xa3, 0xbb, 0x28, 0x80, 0x8e, 0xba, 0x6e, 0x35, 0xbe, 0x7a, 0xf5, 0x7e, 0xf7, 0xbc, 0x12, 0x83, 0xc9, 0xbd, 0x07, 0x48, 0x99, 0x10, 0xb2, 0x3d, 0x97, 0x0e, 0x97, 0xaa, 0xf8, 0x5c, 0x43, 0x2e, 0x53, 0x9d, 0x44, 0xd5, 0x5a, 0x2a, 0x25, 0x88, 0x84, 0xb4, 0x3a, 0x69, 0x8a, 0xbc, 0x48, 0x55, 0xf6, 0xa7, 0x84, 0x74, 0xa7, 0xca, 0x52, 0xb0, 0xdc, 0xbb, 0x9c, 0xff, 0xf9, 0xc1, 0xff, 0x81, 0x45, 0x87, 0x20, 0x8e, 0x93, 0xe8, 0x37, 0x27, 0xe4, 0xfe, 0xcb, 0xab, 0x94, 0x99, 0xb5, 0xcd, 0x83, 0x30, 0x03, 0x91, 0x02, 0x4d, 0x74, 0xc1, 0x9a, 0x9c, 0x91, 0x8f, 0xf0, 0xa1, 0x07, 0xac, 0xf7, 0xcc, 0x38, 0xe0, 0x9b, 0xee, 0x65, 0xea, 0xc5, 0x65, 0x18, 0xe1, 0xd8, 0x81, 0x0e, 0xce, 0xbc, 0xe5, 0xbb, 0xe3, 0xed, 0xdd, 0x4f, 0xce, 0xed, 0x4b, 0xcf, 0xdd, 0x07, 0xc7, 0xe7, 0x4e, 0xc0, 0xfe, 0x9e, 0x0f, 0xd8, 0x96, 0x5d, 0xa5, 0xcc, 0xe8, 0xbf, 0x81, 0xe6, 0xf3, 0x19, 0x22, 0xf3, 0xec, 0xd3, 0x27, 0xdc, 0x5d, 0x66, 0x97, 0xe1, 0x2f, 0x01, 0xe5, 0xf6, 0x0a, 0xbd, 0x48, 0xaf, 0x3c, 0xfd, 0x00, 0xb3, 0xa2, 0xd3, 0xd8, 0x2c, 0xdc, 0x19, 0x21, 0xed, 0x00, 0x15, 0x89, 0xa5, 0x47, 0x48, 0x4f, 0xe5, 0x3a, 0x6d, 0x2d, 0xe1, 0x42, 0x2c, 0xc9, 0xb6, 0x68, 0x2a, 0x0e, 0xb6, 0x55, 0xc2, 0x99, 0x5d, 0x9d, 0x0b, 0xad, 0x40, 0x3f, 0xf2, 0xb0, 0x29, 0x44, 0x5b, 0x50, 0x55, 0x41, 0x5e, 0x68, 0xce, 0x32, 0x5d, 0x88, 0xbc, 0x0c, 0x12, 0xa5, 0x41, 0xf5, 0xef, 0x04, 0x4f, 0x65, 0x2c, 0x14, 0xd0, 0xf4, 0xaa, 0x6a, 0x2b, 0xfa, 0x6f, 0x9c, 0x65, 0xec, 0x17, 0xac, 0x33, 0x7a, 0x76, 0xe8, 0x13, 0x1f, 0x7f, 0x3d, 0xfb, 0xdc, 0x8b, 0xb1, 0x9f, 0xf0, 0x3a, 0x3e, 0xc7, 0xb7, 0x86, 0x61, 0x19, 0xe8, 0xf3, 0x61, 0xcf, 0xb9, 0xe0, 0xda, 0x20, 0xea, 0x42, 0x00, 0x4b, 0x99, 0x89, 0x24, 0x0b, 0x20, 0x20, 0x13, 0xce, 0x84, 0x90, 0xa1, 0x94, 0xa9, 0x08, 0x04, 0x15, 0x5e, 0x31, 0xbc, 0xcf, 0x38, 0x02, 0xcc, 0x43, 0x4d, 0xc7, 0x89, 0x4c, 0xdc, 0x07, 0x16, 0x33, 0x2f, 0xf0, 0x93, 0x87, 0xe4, 0x21, 0xca, 0xf0, 0x83, 0xf2, 0x90, 0x89, 0x30, 0xb9, 0x3f, 0xa4, 0xe2, 0x77, 0x22, 0xfd, 0x85, 0xc7, 0xfe, 0xf9, 0x33, 0xa6, 0x3d, 0xe7, 0x31, 0xd0, 0x7c, 0x4e, 0x89, 0xd3, 0x9e, 0x81, 0x2b, 0x1a, 0xef, 0xb2, 0x78, 0x80, 0x8e, 0x61, 0x99, 0x3c, 0x6c, 0xbf, 0x15, 0x60, 0x82, 0x95, 0x3a, 0x78, 0xfe, 0xda, 0x7f, 0x4a, 0x46, 0x6e, 0xf2, 0xa2, 0xca, 0x6b, 0x48, 0x18, 0xaa, 0xf6, 0xab, 0xb6, 0x52, 0x2b, 0x3a, 0xeb, 0x34, 0x4d, 0xd1, 0xc8, 0x42, 0x15, 0x32, 0x87, 0xc9, 0x4c, 0x2a, 0x21, 0x53, 0x04, 0x32, 0x8d, 0x5f, 0x84, 0x88, 0x80, 0xec, 0x3a, 0xf6, 0x33, 0xfa, 0x95, 0xc0, 0x50, 0x68, 0x18, 0x9d, 0x27, 0xc6, 0x88, 0xbc, 0xca, 0x8f, 0x2a, 0x80, 0x0e, 0x85, 0x2c, 0x88, 0x6f, 0x81, 0x25, 0x0e, 0x4f, 0x8f, 0x2c, 0xb1, 0xa6, 0xfd, 0x2f, 0x57, 0xe9, 0x69, 0x32, 0xcd, 0x1e, 0x2e, 0xad, 0xf3, 0x3a, 0xf1, 0xc9, 0x9d, 0x57, 0xbe, 0xba, 0xae, 0x31, 0x78, 0xc9, 0xe3, 0x54, 0x6f, 0x60, 0x46, 0xb3, 0x72, 0xf0, 0x13, 0xe7, 0x53, 0xa4, 0xdc, 0x23, 0x42, 0x55, 0xa7, 0x63, 0x0a, 0xeb, 0xb2, 0xb8, 0xb6, 0x07, 0x32, 0x8d, 0x3a, 0x17, 0xa0, 0xc7, 0x94, 0x7b, 0xd4, 0x40, 0x17, 0x8b, 0xfe, 0x2d, 0xe5, 0x10, 0x25, 0x18, 0x31, 0x24, 0x5c, 0x8a, 0x97, 0x41, 0x8c, 0x8b, 0x16, 0x92, 0x2e, 0x57, 0x08, 0x68, 0x65, 0x6b, 0x44, 0x8b, 0x80, 0x6f, 0x0c, 0x63, 0x09, 0x65, 0x85, 0x95, 0xd1, 0xb1, 0x96, 0x31, 0x96, 0x24, 0x7e, 0x1f, 0x3c, 0xba, 0x8e, 0xe7, 0xbf, 0xfe, 0x40, 0xf5, 0x71, 0x24, 0x99, 0x29, 0x9a, 0x4d, 0x8b, 0x63, 0x8c, 0xdf, 0x7b, 0xe4, 0x17, 0x4e, 0x55, 0x58, 0xbd, 0xbf, 0x72, 0xf2, 0xdd, 0xe4, 0x7c, 0x11, 0xa9, 0xcb, 0xc7, 0xc3, 0x69, 0x25, 0x8e, 0x1e, 0x16, 0x55, 0x84, 0xb5, 0xc7, 0x8f, 0xb1, 0xc0, 0x42, 0x3b, 0x86, 0x51, 0x10, 0xa6, 0x2e, 0x17, 0xc7, 0x63, 0xfa, 0x10, 0x26, 0xc7, 0x2c, 0x55, 0x3c, 0x62, 0x59, 0x14, 0xf1, 0xc4, 0x08, 0x0d, 0xc5, 0xc9, 0x12, 0xed, 0xcb, 0x24, 0x0b, 0xd9, 0x7d, 0x1a, 0x27, 0xe1, 0xbd, 0xef, 0xdc, 0xfa, 0x77, 0xec, 0xc7, 0xc0, 0x3f, 0xba, 0xbe, 0x1f, 0x84, 0xf8, 0xb1, 0x28, 0x49, 0xf1, 0xad, 0xeb, 0x70, 0x91, 0xec, 0x82, 0x7a, 0x31, 0x33, 0x08, 0x95, 0x3f, 0x4f, 0xe0, 0xfb, 0x83, 0xb9, 0xc0, 0xba, 0xd9, 0xf7, 0x6c, 0x02, 0x9f, 0xf2, 0xf9, 0x9c, 0xb2, 0xfa, 0x9f, 0x47, 0x69, 0xc4, 0xd1, 0x4c, 0x71, 0x85, 0x9d, 0xa5, 0x88, 0x2f, 0x0a, 0x21, 0x32, 0x25, 0xb6, 0x87, 0x5d, 0x55, 0x0a, 0x7f, 0xf1, 0x51, 0xd2, 0x29, 0x2e, 0x3e, 0xd3, 0x52, 0xe5, 0x78, 0xd6, 0xf6, 0xe5, 0xfc, 0xde, 0x55, 0x5c, 0xe8, 0x0c, 0xb4, 0xec, 0x10, 0xde, 0x01, 0x61, 0xbd, 0x43, 0xca, 0xbe, 0x8a, 0x8b, 0xcf, 0x65, 0xe3, 0x9e, 0xf1, 0xd9, 0x9b, 0xe6, 0xdd, 0xce, 0x4a, 0x68, 0x58, 0x33, 0x2e, 0x1c, 0xbb, 0x0c, 0x6a, 0xda, 0xa1, 0x3a, 0x61, 0xc3, 0x3c, 0xf1, 0xf5, 0x6a, 0x54, 0xff, 0xb2, 0xc7, 0x36, 0x83, 0x42, 0xa1, 0x23, 0xc1, 0xd6, 0x56, 0x0e, 0x13, 0xad, 0x02, 0xa3, 0x17, 0x58, 0x6a, 0xad, 0xa2, 0x43, 0xc2, 0x82, 0x72, 0x07, 0x45, 0xa7, 0x21, 0x5a, 0xc0, 0x3c, 0xaa, 0xa6, 0x8a, 0xc1, 0x3d, 0xe2, 0x92, 0x1b, 0xc1, 0xab, 0x0c, 0x40, 0x99, 0x27, 0xd8, 0x7e, 0x52, 0x44, 0x59, 0x1e, 0x29, 0xae, 0x05, 0x8f, 0x22, 0xf5, 0x4b, 0xdb, 0xfe, 0x87, 0xeb, 0xd8, 0x15, 0xd9, 0x26, 0xcc, 0xe2, 0x51, 0xf5, 0xf0, 0xba, 0x38, 0x2e, 0xbb, 0x98, 0x01, 0x01, 0xa0, 0x47, 0x14, 0xe3, 0xcb, 0xfc, 0x6b, 0x59, 0xc7, 0xbd, 0x9f, 0x9d, 0x20, 0x49, 0x32, 0x5a, 0x93, 0x26, 0x4f, 0x6a, 0x3a, 0xe9, 0x94, 0xb0, 0x35, 0x6b, 0x62, 0x12, 0x9a, 0x6d, 0xd6, 0xda, 0xf2, 0x1d, 0x48, 0xd0, 0xa8, 0x51, 0xaa, 0x20, 0x92, 0x9c, 0x13, 0x4f, 0x2c, 0x62, 0x95, 0x46, 0xda, 0xe8, 0x28, 0x4c, 0xe2, 0x63, 0xac, 0x41, 0x41, 0x04, 0xf3, 0xc1, 0x40, 0x7c, 0x1e, 0x25, 0x0e, 0x78, 0xc8, 0x8b, 0x30, 0x3d, 0xf8, 0xc9, 0x6d, 0x9a, 0x38, 0x2f, 0x1f, 0xae, 0x3a, 0x38, 0x7b, 0xfb, 0xe6, 0x75, 0xfb, 0xee, 0xc3, 0xce, 0x75, 0x49, 0xae, 0x38, 0xcc, 0xe1, 0x0e, 0xef, 0x19, 0x3c, 0xe7, 0x80, 0x48, 0xce, 0x74, 0x26, 0xed, 0x70, 0xec, 0x3d, 0xd7, 0xd9, 0x32, 0xa7, 0x0e, 0x73, 0x9d, 0xbe, 0xc7, 0x97, 0x97, 0xfe, 0x3f, 0x4e, 0x6c, 0xfe, 0x85, 0xd7, 0xb2, 0xeb, 0x56, 0xe4, 0xdb, 0xb6, 0xdb, 0xf9, 0x86, 0xfb, 0xee, 0xb2, 0x42, 0x50, 0x83, 0x63, 0xcc, 0xe3, 0x0a, 0xe9, 0x32, 0x81, 0xe6, 0x43, 0xb9, 0x2c, 0xc3, 0xe4, 0xb8, 0xe3, 0x6c, 0x0f, 0xd1, 0xdc, 0x79, 0x5e, 0xe7, 0xcb, 0x84, 0x2f, 0xc6, 0xf5, 0x26, 0xbc, 0x3f, 0x1e, 0x02, 0x01, 0x58, 0xe3, 0x71, 0xfc, 0xe3, 0x31, 0xfc, 0x4f, 0x64, 0xdb, 0x33, 0x2b, 0x72, 0xb3, 0xcd, 0x3c, 0xd9, 0xb6, 0xb8, 0x62, 0x32, 0x94, 0x09, 0x21, 0x6f, 0xf9, 0x78, 0x32, 0x30, 0x8b, 0xc1, 0x1a, 0x60, 0xe8, 0x05, 0x9f, 0x3a, 0xdb, 0x63, 0xcf, 0x12, 0xd0, 0x42, 0xe8, 0xb6, 0x54, 0x64, 0x59, 0xc2, 0xd2, 0x30, 0x49, 0xbe, 0x92, 0x99, 0xff, 0x8f, 0x6e, 0xdb, 0x33, 0xab, 0x12, 0x8f, 0xdd, 0x85, 0x12, 0x8a, 0x03, 0x74, 0xb4, 0x01, 0xd9, 0xb0, 0x95, 0x20, 0xc3, 0x22, 0x86, 0x61, 0x1d, 0xfb, 0x8b, 0x8b, 0xcd, 0x27, 0x98, 0x8b, 0x7d, 0xe6, 0x20, 0xea, 0x62, 0x51, 0x02, 0x4d, 0x96, 0x59, 0xbc, 0xfc, 0x87, 0x36, 0xe4, 0xb7, 0xd8, 0xf6, 0xcd, 0x7a, 0xe6, 0xed, 0xbb, 0x57, 0xaf, 0x11, 0x03, 0xa0, 0x5e, 0x20, 0x3d, 0xfd, 0xde, 0xa1, 0x0f, 0xde, 0x70, 0xe9, 0x17, 0xd3, 0x53, 0x1a, 0x8e, 0x6a, 0x42, 0x46, 0xac, 0x43, 0xee, 0x0d, 0x2b, 0x95, 0x22, 0xac, 0xcb, 0xb0, 0x1d, 0x5f, 0x53, 0x6c, 0xab, 0x6a, 0x4d, 0xcd, 0x08, 0x74, 0x1e, 0x53, 0x77, 0x94, 0xe4, 0xa1, 0x8a, 0xb9, 0x8e, 0x0a, 0x1a, 0xbb, 0x4e, 0xb6, 0xc6, 0xe0, 0x43, 0x79, 0x66, 0x88, 0xed, 0x79, 0xdb, 0x16, 0x67, 0xaa, 0x40, 0xe8, 0x1a, 0x55, 0x28, 0x48, 0x9a, 0x82, 0xa0, 0x26, 0xcf, 0xeb, 0xa6, 0x03, 0xd6, 0x96, 0xa7, 0x83, 0x3c, 0x26, 0xe0, 0xa3, 0xba, 0x38, 0x8b, 0xca, 0xc8, 0x30, 0x0d, 0xa3, 0xc3, 0x6d, 0x78, 0x38, 0x5c, 0x87, 0x25, 0xef, 0x5e, 0x7f, 0x68, 0x5f, 0xed, 0x3c, 0x1f, 0x08, 0x79, 0x99, 0x97, 0x71, 0x76, 0xfd, 0x8b, 0x81, 0x51, 0xeb, 0xca, 0xb9, 0xf3, 0x35, 0x9d, 0x86, 0xed, 0x38, 0x08, 0x50, 0xe8, 0x7d, 0x7c, 0x04, 0x80, 0x1f, 0x0e, 0x85, 0x34, 0xbc, 0xe2, 0x45, 0xa9, 0xce, 0x90, 0x90, 0x82, 0xcb, 0x52, 0x55, 0x88, 0xcc, 0x69, 0xc8, 0x8f, 0x51, 0x99, 0xa7, 0x09, 0x98, 0xc6, 0x0d, 0x3f, 0x86, 0x2a, 0x0e, 0xa4, 0x2f, 0xe4, 0x43, 0x20, 0x1e, 0x5e, 0xc6, 0x0f, 0x87, 0xf4, 0xd6, 0x0b, 0x94, 0xf9, 0x2d, 0x7e, 0x1b, 0xae, 0x63, 0x24, 0xef, 0xde, 0xbe, 0xdb, 0xad, 0x08, 0x6c, 0xeb, 0x84, 0xf5, 0x06, 0x35, 0xba, 0x72, 0x4a, 0xf9, 0xd0, 0xe6, 0x33, 0x13, 0xc8, 0x96, 0xbf, 0x80, 0x69, 0x31, 0x30, 0xc9, 0x7e, 0x01, 0x0d, 0x33, 0x4f, 0x69, 0x2d, 0x44, 0x37, 0xb0, 0xa6, 0xfa, 0x9c, 0xd5, 0x35, 0x68, 0x3f, 0x95, 0xbe, 0x51, 0xc2, 0x80, 0xe7, 0x35, 0x15, 0xc0, 0x15, 0xd2, 0x12, 0xca, 0x3a, 0xb4, 0xd9, 0x7c, 0x78, 0xb2, 0x56, 0x75, 0x96, 0xab, 0x20, 0x89, 0x83, 0x2c, 0x4c, 0x74, 0x65, 0x7f, 0xa4, 0xca, 0xd3, 0x3c, 0x13, 0xb9, 0xe5, 0xfc, 0x45, 0x2a, 0xb8, 0xc9, 0x53, 0x9f, 0x98, 0xe7, 0x41, 0xc4, 0x37, 0x8c, 0xb1, 0x3f, 0xf9, 0xd7, 0x95, 0xf3, 0x58, 0xbb, 0xa6, 0x61, 0xf5, 0x2e, 0x3e, 0x07, 0x31, 0xe9, 0x7b, 0x76, 0x71, 0x66, 0xd0, 0x63, 0x00, 0x7d, 0x0f, 0xb4, 0x67, 0xb3, 0xd7, 0xfb, 0xc6, 0x19, 0x46, 0x3a, 0xbf, 0x60, 0x8b, 0xf3, 0xe4, 0xc8, 0x7d, 0xca, 0x89, 0x83, 0x80, 0xf9, 0xa7, 0xe7, 0xb3, 0xa4, 0xbe, 0x9f, 0x40, 0x35, 0x74, 0x86, 0xcb, 0x6c, 0x41, 0x60, 0x5d, 0x36, 0x60, 0x20, 0x32, 0xa3, 0x0c, 0x78, 0x51, 0x40, 0xa9, 0x66, 0xaa, 0x84, 0x01, 0x52, 0x99, 0xb2, 0xd2, 0x71, 0x43, 0x79, 0x2b, 0x2a, 0xe8, 0x31, 0x10, 0x38, 0x32, 0xcf, 0x93, 0x48, 0x99, 0x1c, 0xbf, 0xc7, 0x44, 0xc8, 0x24, 0x8e, 0x32, 0xc6, 0x45, 0xc6, 0x22, 0xff, 0xca, 0x1c, 0xf8, 0xfb, 0xd7, 0x6f, 0x5f, 0xc1, 0xb2, 0xc9, 0x0c, 0x54, 0xc9, 0x88, 0x98, 0xcd, 0x10, 0xb4, 0x7d, 0xfb, 0x70, 0x47, 0x3c, 0x8d, 0x8f, 0x1f, 0xed, 0xe3, 0xf1, 0x0b, 0xfa, 0xb0, 0x37, 0x79, 0xa9, 0xc1, 0x89, 0x8b, 0x13, 0x62, 0xb6, 0x3e, 0x9b, 0x8e, 0x72, 0xc0, 0x54, 0x1f, 0xd1, 0x76, 0xa5, 0xc1, 0x86, 0x3a, 0x5b, 0x92, 0x62, 0xd3, 0x24, 0x9d, 0x34, 0xe7, 0xba, 0x2d, 0x4c, 0x73, 0x2a, 0x5b, 0x3a, 0x0a, 0x38, 0xa9, 0x9c, 0xba, 0x17, 0x68, 0x7f, 0x16, 0x5d, 0x8e, 0xdf, 0x42, 0xd5, 0xf0, 0xb3, 0x3a, 0x35, 0x4a, 0x16, 0x89, 0xc8, 0x21, 0xd6, 0x6e, 0x58, 0x14, 0x87, 0x41, 0x18, 0x5c, 0x67, 0xd9, 0x07, 0x4a, 0xf6, 0xec, 0x16, 0x8f, 0xda, 0x62, 0xd8, 0x30, 0x2d, 0xeb, 0xe2, 0x2d, 0x97, 0xd5, 0xf1, 0x5c, 0x06, 0xe1, 0x06, 0xb8, 0x77, 0x5c, 0xdf, 0x60, 0xf3, 0x79, 0x30, 0xd8, 0x9e, 0xbe, 0xbb, 0xf0, 0x2a, 0x1d, 0xae, 0x51, 0x56, 0xb5, 0x3c, 0x11, 0xa7, 0x52, 0x25, 0x48, 0x48, 0x19, 0x53, 0xf1, 0x26, 0x2c, 0xab, 0xa8, 0x36, 0x1a, 0x96, 0xe5, 0x4d, 0x77, 0x8a, 0x9b, 0xa2, 0x55, 0x45, 0x91, 0x9e, 0x84, 0xce, 0xbb, 0x53, 0xd3, 0xa9, 0xb3, 0x2e, 0xf2, 0x4a, 0x9c, 0x1b, 0x59, 0x75, 0xa6, 0x08, 0x84, 0xe1, 0x32, 0x4e, 0x79, 0x14, 0x97, 0x55, 0x14, 0xb3, 0x90, 0x62, 0x64, 0x26, 0xb3, 0x2c, 0x8c, 0xa2, 0x34, 0x48, 0x0f, 0xf7, 0xe9, 0xef, 0xae, 0x8b, 0xd7, 0x1f, 0xba, 0x76, 0x87, 0x58, 0x35, 0x62, 0x9d, 0xc1, 0x6d, 0xfe, 0xba, 0xba, 0x54, 0x0a, 0x68, 0x0b, 0x51, 0x89, 0x2f, 0x33, 0xb6, 0x9a, 0xcb, 0x8c, 0xb8, 0xc0, 0x86, 0x4f, 0x0b, 0xf8, 0xb1, 0xc7, 0x32, 0xdb, 0x39, 0x42, 0x59, 0xab, 0x53, 0x0d, 0xea, 0xd8, 0x98, 0x72, 0x4b, 0x67, 0x99, 0xf6, 0x63, 0x3e, 0x6b, 0x4b, 0xf9, 0x73, 0xea, 0x85, 0x69, 0x5b, 0x83, 0x4d, 0xd8, 0x51, 0x91, 0x6a, 0xd3, 0x55, 0xb6, 0x23, 0x2d, 0x6f, 0xa1, 0x68, 0x74, 0x93, 0xe7, 0x95, 0xa9, 0x94, 0xe1, 0x91, 0x4c, 0x94, 0x4a, 0x64, 0x94, 0xfa, 0x87, 0x8f, 0xf8, 0xf1, 0xaf, 0xaf, 0xdb, 0x67, 0x64, 0x1b, 0x08, 0xd6, 0x02, 0xa5, 0xd9, 0x5f, 0x3c, 0x18, 0x45, 0x12, 0xc6, 0x43, 0x1c, 0x60, 0x54, 0xbf, 0x39, 0x22, 0x68, 0x8f, 0x1c, 0xdc, 0x84, 0x11, 0xd9, 0xfa, 0x99, 0x4f, 0x52, 0xc5, 0x7e, 0x45, 0xb6, 0xd9, 0x54, 0x7e, 0x2e, 0x45, 0x93, 0x1a, 0x88, 0xad, 0xfc, 0x40, 0x4f, 0x49, 0x93, 0xa9, 0x24, 0x6a, 0x6a, 0x49, 0xdc, 0x3f, 0x2f, 0x0b, 0x6a, 0xb2, 0x53, 0x4a, 0x94, 0x92, 0xac, 0xd1, 0x2a, 0x93, 0x85, 0x31, 0xa5, 0xa1, 0x56, 0x99, 0xc2, 0x64, 0xa7, 0xf6, 0x84, 0x2d, 0x26, 0x23, 0x1e, 0x4b, 0x48, 0x01, 0xa9, 0x45, 0x76, 0x0c, 0x92, 0xf0, 0x10, 0xa5, 0xc9, 0x95, 0x3e, 0x7b, 0xf5, 0x66, 0x87, 0x2d, 0xe6, 0x43, 0x3e, 0xf3, 0x69, 0xf0, 0x41, 0xee, 0x99, 0x07, 0xd7, 0x19, 0x7f, 0x76, 0x40, 0x3f, 0xdc, 0xc5, 0x81, 0x9a, 0xfe, 0x65, 0x8e, 0xff, 0x26, 0xce, 0x02, 0x6c, 0x79, 0x9d, 0x99, 0x2c, 0x32, 0x59, 0x9a, 0x17, 0x60, 0xf3, 0xb9, 0x09, 0x0a, 0x5e, 0x14, 0xc5, 0x7d, 0x49, 0x3a, 0x46, 0xe7, 0x45, 0x91, 0x03, 0xf7, 0xf1, 0x9d, 0x2a, 0xae, 0xf0, 0x6b, 0x28, 0x0b, 0x7d, 0x32, 0x59, 0x55, 0x22, 0x26, 0x3c, 0xe0, 0x53, 0xfd, 0x90, 0xc4, 0x22, 0x17, 0x52, 0xc6, 0x50, 0x9f, 0xe2, 0xc8, 0x63, 0x5f, 0xe8, 0x3b, 0x28, 0x9b, 0x8c, 0x25, 0xff, 0x70, 0x3e, 0x83, 0x6d, 0xbd, 0x6b, 0xe8, 0x6c, 0x10, 0x8a, 0x06, 0xb2, 0xd3, 0x59, 0xe6, 0x75, 0xa4, 0xf3, 0x40, 0x2a, 0x7b, 0x9c, 0xa7, 0xd9, 0xfb, 0xb4, 0x23, 0xe6, 0x29, 0xb2, 0xed, 0xe3, 0x2c, 0xd1, 0x39, 0x8c, 0x32, 0x3c, 0xcc, 0xe8, 0xbc, 0x1d, 0xa6, 0xc1, 0x5d, 0x91, 0x09, 0x24, 0x7e, 0xf5, 0x39, 0x8f, 0x72, 0xec, 0xb0, 0xbc, 0x80, 0x5f, 0xc2, 0x1c, 0x5f, 0x17, 0x4c, 0x55, 0x15, 0x53, 0xa6, 0x60, 0xc5, 0xa9, 0x4c, 0x54, 0x9c, 0x2b, 0xa3, 0x8a, 0x63, 0x05, 0x29, 0xca, 0x28, 0x7b, 0x20, 0x63, 0xdb, 0x88, 0x70, 0xca, 0x33, 0x1e, 0x40, 0x7f, 0xa6, 0xec, 0xf6, 0xe0, 0xfa, 0xf1, 0x95, 0x08, 0xf2, 0xfe, 0x43, 0xfb, 0x7a, 0xc7, 0x40, 0x8c, 0x8d, 0x67, 0xa0, 0x39, 0xd7, 0xa1, 0x47, 0x68, 0x9b, 0x46, 0x80, 0x3f, 0x24, 0x9b, 0x19, 0xfd, 0xe5, 0xe7, 0x03, 0xd0, 0x95, 0x71, 0x70, 0x2e, 0xec, 0x3a, 0xec, 0x38, 0xca, 0xa9, 0xda, 0xa3, 0xa6, 0xba, 0x3c, 0x77, 0xed, 0xc9, 0x16, 0x85, 0x80, 0x62, 0x74, 0xa7, 0xb6, 0xc3, 0xfe, 0xc2, 0x67, 0xe7, 0x76, 0x3b, 0x8e, 0x69, 0x75, 0x49, 0xfb, 0xab, 0x2b, 0xba, 0xa2, 0x6c, 0xbb, 0x96, 0xe2, 0x9e, 0xd2, 0x81, 0xc2, 0x6f, 0x24, 0x2d, 0x4f, 0x86, 0x1d, 0x74, 0xce, 0x40, 0x49, 0x24, 0x56, 0xa7, 0x91, 0x47, 0x7d, 0x90, 0xf7, 0x58, 0xd4, 0x22, 0x82, 0xa8, 0xf9, 0xa2, 0x7f, 0xe4, 0x5b, 0x57, 0xe3, 0xbb, 0xa6, 0xf9, 0xb0, 0x9b, 0x5d, 0xd7, 0xf3, 0xcc, 0x85, 0xfb, 0x03, 0xf6, 0xd2, 0xe0, 0x2d, 0xbd, 0xd7, 0x7b, 0xab, 0x6f, 0x6c, 0x4d, 0x38, 0x45, 0x35, 0xcf, 0x8c, 0x93, 0x3b, 0x79, 0xc6, 0xff, 0x58, 0x3e, 0xb1, 0xcf, 0x2b, 0x3a, 0x71, 0xb1, 0xca, 0xb3, 0x39, 0x35, 0x80, 0xee, 0xad, 0xf0, 0x8a, 0xda, 0x3b, 0x65, 0x23, 0x54, 0x59, 0x14, 0xb2, 0x4c, 0x4b, 0x04, 0x30, 0xf8, 0x8b, 0x88, 0x57, 0x43, 0x87, 0x65, 0x6d, 0x49, 0x15, 0x06, 0x94, 0xfc, 0xca, 0x4d, 0x5e, 0xe4, 0x26, 0x61, 0x08, 0x60, 0xf6, 0x34, 0x07, 0x0f, 0xcd, 0xf4, 0xbd, 0x88, 0x04, 0xbb, 0x11, 0x3f, 0x33, 0x90, 0xeb, 0x32, 0xfc, 0xd6, 0x36, 0x67, 0xba, 0x40, 0xc1, 0x38, 0x74, 0x18, 0x6f, 0xa0, 0xaa, 0x6d, 0x69, 0xfe, 0xe4, 0xc2, 0x30, 0xee, 0xce, 0x06, 0x4c, 0x12, 0xa2, 0x86, 0x81, 0x7c, 0x2d, 0xcb, 0x47, 0xc6, 0x05, 0x9f, 0x95, 0x74, 0xde, 0x64, 0xb3, 0xfc, 0x30, 0x32, 0xde, 0x0e, 0x2f, 0xb6, 0x1e, 0x41, 0x9b, 0xda, 0x6f, 0x10, 0xad, 0xa9, 0x61, 0xa1, 0xa9, 0xb5, 0x6a, 0x0a, 0x23, 0x55, 0x8a, 0x98, 0xa6, 0x5a, 0xa1, 0x14, 0x44, 0xab, 0x6a, 0xb5, 0x60, 0xe0, 0x1f, 0x9a, 0x32, 0x0f, 0x46, 0x65, 0x1a, 0x8c, 0x0c, 0x78, 0xc3, 0x11, 0xb3, 0x45, 0x96, 0x32, 0x76, 0xfb, 0x70, 0x1b, 0x7c, 0x9e, 0x07, 0xff, 0xd6, 0x2e, 0x8b, 0x77, 0xcd, 0xfb, 0x37, 0x1f, 0x76, 0xdc, 0x05, 0xdd, 0x75, 0xc5, 0xb0, 0xba, 0xeb, 0x00, 0x6a, 0x05, 0x62, 0x85, 0x25, 0x09, 0x94, 0x5f, 0xcd, 0x8a, 0x2d, 0x45, 0x95, 0xfa, 0x5f, 0xb6, 0x35, 0xed, 0x4b, 0xb3, 0x41, 0x63, 0x75, 0x3a, 0x77, 0x51, 0xdd, 0xf0, 0xa8, 0xae, 0x33, 0x01, 0xf9, 0x9c, 0x00, 0x36, 0x6a, 0x04, 0x2f, 0x18, 0xde, 0xc4, 0x19, 0xf0, 0xaf, 0xc8, 0xa5, 0xe2, 0x52, 0x6a, 0x15, 0xe5, 0x59, 0x21, 0x59, 0x91, 0xa4, 0x39, 0x58, 0x87, 0x31, 0x99, 0xd4, 0x15, 0xcf, 0x58, 0xc0, 0x82, 0x82, 0x92, 0x58, 0x9c, 0xfb, 0x87, 0x30, 0x4c, 0xd8, 0xe7, 0xb4, 0xf1, 0x5f, 0x5e, 0x45, 0x1b, 0xdf, 0x35, 0x1f, 0x3e, 0xec, 0x08, 0x0d, 0x27, 0x43, 0xa7, 0xa0, 0xeb, 0xe4, 0x8c, 0xe3, 0xe0, 0xcf, 0x3e, 0x4c, 0x5b, 0xa6, 0xcb, 0xe4, 0x4c, 0x8b, 0x19, 0x56, 0x44, 0xb6, 0x2f, 0x10, 0x92, 0x68, 0xe3, 0xd9, 0x76, 0x53, 0x9f, 0xdb, 0xfa, 0xb4, 0x75, 0x0c, 0xb6, 0xdb, 0x81, 0x93, 0x4d, 0xcd, 0x15, 0xf5, 0xd6, 0xa2, 0xd5, 0x6d, 0x85, 0x15, 0x75, 0x23, 0x4e, 0x35, 0xd4, 0x41, 0x63, 0x15, 0x81, 0x6d, 0x6d, 0xca, 0xa9, 0x07, 0x08, 0x9e, 0x8d, 0x6d, 0x9d, 0x56, 0x05, 0xa8, 0xd4, 0x39, 0xb8, 0x35, 0x18, 0xbf, 0x92, 0xd4, 0xba, 0xc5, 0xfd, 0x2b, 0x17, 0x23, 0xec, 0xea, 0xe1, 0x31, 0xe2, 0x54, 0xab, 0x67, 0xb0, 0x0e, 0x11, 0xd3, 0x9c, 0x99, 0x31, 0x03, 0x26, 0xc2, 0xa1, 0x3f, 0x47, 0x82, 0xcb, 0x2f, 0xcf, 0x67, 0xf6, 0x9c, 0x54, 0x0c, 0x01, 0xc8, 0x56, 0x3c, 0x61, 0xfb, 0x8f, 0xdb, 0xf3, 0xc7, 0xf6, 0x41, 0x4a, 0xb5, 0xd6, 0xb9, 0x6a, 0x1e, 0xdb, 0xb5, 0x4a, 0xea, 0x5f, 0xaa, 0x5a, 0x38, 0x10, 0x21, 0x5b, 0x1b, 0x32, 0xba, 0xc5, 0x73, 0x5b, 0x61, 0xe7, 0x75, 0xf9, 0xa9, 0x61, 0x95, 0xce, 0xb4, 0xcc, 0x80, 0x26, 0xa9, 0x96, 0x8a, 0xba, 0xc4, 0xe3, 0x2b, 0x1b, 0x3d, 0xdf, 0xb5, 0x90, 0xd5, 0x0b, 0x07, 0xfe, 0xd1, 0x39, 0xee, 0xd0, 0x1b, 0x9f, 0xff, 0x5a, 0xe2, 0x6a, 0xe1, 0x23, 0x1d, 0xd2, 0xac, 0x04, 0x36, 0x37, 0x69, 0x56, 0xf1, 0x3a, 0x33, 0xd6, 0x06, 0xbc, 0xeb, 0x3a, 0xce, 0x63, 0x91, 0x1c, 0x34, 0xaf, 0x79, 0x53, 0xc4, 0xa9, 0x64, 0x61, 0xda, 0xb0, 0x02, 0x51, 0x3a, 0xd2, 0x89, 0x4c, 0x38, 0x16, 0x5e, 0x59, 0x1d, 0x35, 0xf3, 0x82, 0xe4, 0xfe, 0x81, 0xdd, 0x7d, 0x91, 0xef, 0xfe, 0x75, 0x09, 0xf3, 0x5f, 0x5d, 0x95, 0x32, 0xb0, 0xb6, 0x0d, 0xbe, 0x37, 0x73, 0x36, 0x4f, 0x2b, 0x41, 0x3c, 0xfb, 0x7a, 0xe2, 0x6a, 0xf8, 0x58, 0x2e, 0xe7, 0xf9, 0xfd, 0xb0, 0x2f, 0xb3, 0xb0, 0xe4, 0x2f, 0xb3, 0x07, 0x6e, 0xd4, 0xb9, 0x6e, 0x60, 0x53, 0x0e, 0x5e, 0x9f, 0xa9, 0x46, 0x8a, 0x22, 0x6c, 0xf2, 0x83, 0xf1, 0xe2, 0x54, 0xc5, 0x4a, 0xfe, 0x39, 0x88, 0xe2, 0x20, 0x66, 0x51, 0x18, 0xab, 0x87, 0x23, 0xf4, 0xe4, 0xf1, 0xe1, 0x0f, 0xfe, 0x6d, 0x1c, 0x04, 0x5e, 0x90, 0x06, 0x7e, 0xcc, 0x44, 0xf8, 0x57, 0xbf, 0x9e, 0x49, 0x81, 0x6d, 0xff, 0xcd, 0x75, 0xfb, 0xac, 0x7d, 0xfb, 0x7a, 0x87, 0x77, 0x0f, 0x32, 0x85, 0x48, 0xed, 0xfa, 0x0e, 0x68, 0xe3, 0xb4, 0x1a, 0xca, 0x1e, 0x83, 0x3c, 0xce, 0x36, 0x7f, 0xe5, 0x4d, 0x17, 0x1f, 0xa2, 0xfa, 0x53, 0x7f, 0xee, 0xa1, 0x47, 0x4e, 0x94, 0x7d, 0xc4, 0x7a, 0x64, 0x54, 0x70, 0x1b, 0xe4, 0x76, 0x3b, 0x35, 0x81, 0x29, 0x4c, 0x42, 0xc7, 0x12, 0xc2, 0xee, 0x2e, 0xc2, 0x49, 0x85, 0xc5, 0xa7, 0xda, 0x52, 0xd0, 0x91, 0x1b, 0x1e, 0x27, 0x12, 0xa9, 0xa1, 0x90, 0xf7, 0x4a, 0x9e, 0x10, 0xa0, 0x8d, 0xe1, 0x88, 0x0e, 0x3c, 0x91, 0x39, 0x04, 0xab, 0x08, 0x22, 0x23, 0x59, 0xcc, 0x38, 0x00, 0xf2, 0x3a, 0x79, 0x66, 0xed, 0x72, 0x1c, 0xee, 0x5f, 0x26, 0x43, 0x19, 0x9d, 0x15, 0xa1, 0x8c, 0x0a, 0x96, 0x60, 0xd8, 0x04, 0x5b, 0x57, 0x7f, 0x64, 0xae, 0x0f, 0x5b, 0xfb, 0x79, 0xfa, 0xd4, 0x97, 0xf0, 0x19, 0xb6, 0x19, 0x75, 0x0d, 0x36, 0xb6, 0x37, 0x77, 0x3b, 0xdd, 0x3d, 0xd3, 0xf6, 0xca, 0xd5, 0x63, 0xbf, 0x20, 0x00, 0x84, 0x04, 0x40, 0x23, 0x11, 0xcd, 0xa9, 0xf1, 0x02, 0xaa, 0xb4, 0x69, 0x8c, 0x0d, 0x7c, 0x4c, 0xe9, 0x5a, 0xf0, 0x46, 0x98, 0xac, 0x41, 0x70, 0xc3, 0xd6, 0xf3, 0x13, 0x8a, 0x69, 0x80, 0xcc, 0x58, 0x26, 0xd4, 0x5d, 0x03, 0x13, 0xaf, 0x4b, 0x83, 0xbc, 0x7b, 0xf5, 0xee, 0x4d, 0xfb, 0x6a, 0xc7, 0x67, 0xe6, 0x62, 0x9d, 0x79, 0x6b, 0xef, 0xf8, 0x13, 0xd5, 0x4b, 0x1b, 0x04, 0x6b, 0x7f, 0xa2, 0xc2, 0x5b, 0x12, 0x32, 0x20, 0xc5, 0x30, 0x79, 0xf2, 0x19, 0x80, 0x13, 0x1b, 0x72, 0xc5, 0xca, 0xb5, 0xa5, 0xc4, 0x35, 0x68, 0xfe, 0xb9, 0x24, 0x4f, 0xd5, 0xd0, 0xcf, 0xe7, 0xae, 0xa3, 0x58, 0xdd, 0x01, 0x33, 0x8a, 0xf3, 0xb9, 0xec, 0xba, 0x36, 0xeb, 0xa8, 0x87, 0x1f, 0xbe, 0x38, 0x03, 0xe9, 0x5a, 0xdd, 0x29, 0x40, 0x60, 0x6d, 0x4a, 0x28, 0x6a, 0xdd, 0x95, 0x51, 0x54, 0x0a, 0x84, 0x06, 0xa3, 0xc1, 0x36, 0xe5, 0x09, 0x1a, 0xd4, 0xc6, 0x6f, 0x50, 0xd1, 0x34, 0xe1, 0xd1, 0x31, 0x4c, 0xe3, 0xe3, 0x75, 0x08, 0xf2, 0xea, 0x43, 0xb7, 0xeb, 0x97, 0xc9, 0xf5, 0x5d, 0xa8, 0xb3, 0xd9, 0xb8, 0x5f, 0xab, 0x70, 0x31, 0xa2, 0x1f, 0x00, 0x1f, 0xf3, 0x6a, 0x16, 0xd8, 0xca, 0xc6, 0x61, 0xbd, 0x49, 0x0a, 0x71, 0x3a, 0xe7, 0xd4, 0x2b, 0xae, 0x83, 0x00, 0x2b, 0x30, 0x8e, 0x01, 0xe6, 0x82, 0x0c, 0x2b, 0xb2, 0xe6, 0xa8, 0x52, 0x25, 0x10, 0x77, 0x43, 0x66, 0x22, 0x26, 0x94, 0x9f, 0x2b, 0x38, 0x20, 0xa2, 0xf2, 0x38, 0x53, 0xfe, 0xf6, 0xfc, 0xdd, 0x2f, 0xfa, 0x2c, 0xbe, 0x19, 0x41, 0xc8, 0x36, 0x40, 0xb9, 0x6b, 0x46, 0x01, 0xdd, 0xe9, 0xfa, 0x5f, 0x61, 0xbf, 0x8f, 0xe7, 0xef, 0x3d, 0xf8, 0x24, 0xfc, 0xe7, 0xfa, 0x3d, 0xf3, 0xf7, 0x50, 0xbd, 0x54, 0xc0, 0xc9, 0x54, 0x7d, 0x06, 0xed, 0xd7, 0x77, 0x39, 0x88, 0x6f, 0x50, 0x9a, 0xa3, 0x14, 0x22, 0x0e, 0x0e, 0xb0, 0x0b, 0x7c, 0x5f, 0xb0, 0x38, 0x7c, 0xb8, 0x4f, 0xd2, 0x90, 0x1d, 0x53, 0x6a, 0x8c, 0x8c, 0xe2, 0x23, 0xa3, 0x23, 0xeb, 0xe0, 0x3e, 0x0b, 0x0e, 0xbf, 0xc9, 0xb6, 0xbf, 0xbe, 0x0e, 0x41, 0x5e, 0xbf, 0x7d, 0xbf, 0x63, 0x86, 0x5f, 0x2e, 0x6c, 0x5d, 0xfd, 0x19, 0x9f, 0xb9, 0x2b, 0x5b, 0xb9, 0xfd, 0x8c, 0x9e, 0x8c, 0xbb, 0xd0, 0x97, 0xd3, 0xb4, 0x7d, 0x09, 0xbe, 0xc5, 0x7c, 0xee, 0x2f, 0x10, 0xd5, 0x60, 0x57, 0xa0, 0xec, 0x34, 0xa9, 0xa0, 0x32, 0x5b, 0x27, 0x2e, 0x95, 0x5f, 0xb5, 0xf6, 0x30, 0x0d, 0x71, 0xb8, 0x2e, 0x5a, 0x10, 0xca, 0xb6, 0x42, 0x28, 0x68, 0x73, 0xea, 0xd1, 0x8a, 0x8b, 0x53, 0x71, 0x82, 0x24, 0x53, 0x55, 0xa2, 0x4a, 0x11, 0x46, 0x2c, 0x65, 0x82, 0xca, 0x87, 0xdb, 0x22, 0xa9, 0x12, 0x11, 0x1b, 0x25, 0x21, 0xde, 0x38, 0x84, 0xdc, 0x4b, 0x16, 0xdf, 0x27, 0xe1, 0x95, 0x09, 0x1e, 0x6b, 0xd7, 0xe0, 0xac, 0xd3, 0x38, 0xd8, 0x42, 0x3f, 0x8f, 0x0a, 0x02, 0xed, 0x67, 0x03, 0x69, 0x51, 0x5b, 0x1f, 0x88, 0xd7, 0xdc, 0x05, 0xf0, 0x48, 0xfd, 0x15, 0x8f, 0x35, 0x83, 0xfb, 0x12, 0xaa, 0x04, 0xef, 0xe3, 0x0c, 0xf5, 0x02, 0x2c, 0xac, 0xc1, 0x10, 0xcf, 0x74, 0x9c, 0x9b, 0x48, 0x99, 0x48, 0xe8, 0x35, 0x09, 0xe1, 0x52, 0xa6, 0x31, 0x94, 0x89, 0xca, 0x52, 0x9d, 0x72, 0xea, 0x73, 0x8c, 0x12, 0x44, 0x60, 0xc6, 0x38, 0xb0, 0x50, 0xc7, 0x95, 0xe0, 0x0c, 0xba, 0x27, 0x53, 0x82, 0xe9, 0x14, 0x21, 0x30, 0x95, 0x60, 0x91, 0x40, 0xc8, 0x48, 0x70, 0xf8, 0x18, 0xff, 0x92, 0xe3, 0x55, 0xe9, 0x46, 0xe0, 0xc7, 0x87, 0xb7, 0x6f, 0x76, 0x6c, 0xf4, 0xcd, 0xc8, 0xa9, 0x8b, 0x69, 0xc5, 0xbb, 0x5e, 0x47, 0x83, 0x55, 0xd7, 0x33, 0xc7, 0xe7, 0xce, 0xe8, 0x79, 0x83, 0x47, 0x1d, 0xba, 0x3f, 0x2f, 0xd2, 0x85, 0x16, 0xe9, 0x5e, 0xe1, 0x0d, 0x22, 0x94, 0x55, 0xb9, 0xaa, 0xa8, 0x3f, 0x82, 0xa4, 0x65, 0x55, 0x02, 0x2c, 0x75, 0x9e, 0x83, 0x29, 0x1b, 0x43, 0x85, 0x59, 0x6d, 0x59, 0x0b, 0x61, 0x4e, 0xf8, 0x0d, 0x40, 0x28, 0x33, 0x21, 0x93, 0x24, 0xbe, 0x17, 0x9c, 0xff, 0xa8, 0x4c, 0x48, 0xcc, 0x37, 0x8d, 0x62, 0x69, 0x92, 0x7b, 0x1e, 0x96, 0xc9, 0x57, 0x83, 0x37, 0x56, 0xe3, 0x7f, 0x7f, 0xa5, 0x75, 0xaf, 0x5f, 0xbf, 0x7b, 0xbf, 0xf3, 0x67, 0x63, 0xa8, 0xb6, 0x80, 0x7a, 0x12, 0x66, 0xd7, 0x5b, 0xc1, 0x8b, 0x01, 0x16, 0x93, 0x3f, 0xb0, 0x5f, 0x09, 0xdd, 0x23, 0x1d, 0xa7, 0x11, 0x61, 0x3c, 0x9b, 0xea, 0x4c, 0x45, 0x9b, 0xaa, 0xa9, 0x54, 0xd7, 0x08, 0xca, 0x61, 0x41, 0xd9, 0x34, 0x5d, 0x61, 0x3a, 0x45, 0xd5, 0x2f, 0x59, 0x06, 0xc5, 0x12, 0x6b, 0x9d, 0xeb, 0xa2, 0xe8, 0xba, 0x4a, 0x88, 0x83, 0x48, 0x39, 0x0b, 0x45, 0xaa, 0x45, 0xa8, 0x93, 0x54, 0x9c, 0x02, 0x3f, 0x55, 0x05, 0x7b, 0x38, 0xc4, 0x87, 0xc4, 0xe1, 0x61, 0xc4, 0x39, 0x3f, 0xc6, 0xc7, 0xbb, 0x27, 0xeb, 0xae, 0x1b, 0x7f, 0xf2, 0xee, 0xcd, 0x87, 0x06, 0x51, 0x6d, 0x70, 0x2f, 0x1c, 0xc4, 0xd1, 0x71, 0x19, 0x9b, 0x85, 0x43, 0xed, 0x9f, 0x17, 0xc3, 0x00, 0x97, 0x0e, 0x95, 0xf7, 0xb8, 0x3e, 0x77, 0x3f, 0x3f, 0xdd, 0x5d, 0xec, 0xf1, 0x6e, 0x53, 0x9f, 0x95, 0x2d, 0x0b, 0x6c, 0x1f, 0x2b, 0x38, 0xdb, 0x4d, 0xca, 0x68, 0xea, 0xe0, 0xd2, 0x5b, 0xcd, 0x12, 0x75, 0xc6, 0x74, 0x55, 0x45, 0x95, 0x9d, 0x6d, 0x55, 0xb5, 0x2d, 0x56, 0x29, 0x89, 0x9e, 0xb6, 0xd1, 0x55, 0x51, 0x96, 0x27, 0x44, 0xeb, 0x54, 0x27, 0x00, 0xfd, 0x16, 0x11, 0x2d, 0xc9, 0x65, 0x9c, 0x88, 0x8c, 0x4b, 0x96, 0x65, 0xd8, 0x89, 0xd7, 0xe1, 0x23, 0xd9, 0xb5, 0x8e, 0x76, 0xc2, 0x84, 0x6b, 0xa0, 0x9e, 0x21, 0x60, 0x2e, 0xd4, 0x95, 0xbb, 0x8a, 0xde, 0xb6, 0x1d, 0x83, 0xfc, 0x5f, 0x46, 0xfe, 0x91, 0x83, 0x3c, 0x3a, 0x8f, 0x0a, 0x8a, 0xf5, 0x59, 0x50, 0x49, 0xa0, 0xa5, 0xfc, 0x64, 0x44, 0x9e, 0x9f, 0x37, 0x26, 0x62, 0x4b, 0xa5, 0x55, 0xae, 0x0a, 0x48, 0xb1, 0x3a, 0xd7, 0x2d, 0x14, 0x0c, 0xf9, 0xb4, 0x2c, 0x8b, 0x06, 0x02, 0x46, 0x21, 0x06, 0xb0, 0x48, 0x15, 0xf2, 0x54, 0x82, 0x0b, 0xc7, 0x52, 0x89, 0xd8, 0xb6, 0x9e, 0x1b, 0x95, 0x48, 0x1e, 0x69, 0x25, 0x8e, 0x64, 0x55, 0xfc, 0x95, 0x4a, 0x83, 0x6f, 0xf6, 0xd9, 0xdb, 0xe6, 0xd5, 0xce, 0x5f, 0xa8, 0x7b, 0xb5, 0x77, 0x2f, 0xeb, 0x00, 0x91, 0x0d, 0x82, 0x3c, 0x22, 0x06, 0x60, 0xc7, 0x7b, 0x1e, 0x5f, 0x66, 0x42, 0x94, 0x61, 0xe8, 0x87, 0xfe, 0xd3, 0xb6, 0x84, 0x7d, 0xee, 0x55, 0x76, 0x60, 0x01, 0x55, 0x83, 0x57, 0xb2, 0xd6, 0xb6, 0x87, 0xa4, 0xa9, 0x25, 0xb9, 0x89, 0x74, 0x76, 0xdb, 0xea, 0x9a, 0xc1, 0xb2, 0xac, 0xae, 0x64, 0x55, 0xb7, 0xa7, 0x92, 0x18, 0x7f, 0x4b, 0x4d, 0x69, 0xd4, 0x52, 0x69, 0xd2, 0x3c, 0x8b, 0x53, 0x7e, 0xfb, 0x87, 0x63, 0xe8, 0xff, 0x94, 0xa6, 0x49, 0xfa, 0xf0, 0x83, 0x9f, 0xb0, 0x34, 0x43, 0xf4, 0x3b, 0x66, 0x51, 0xf0, 0x70, 0x0c, 0xbd, 0x43, 0x7c, 0x1d, 0x3e, 0x5a, 0xbb, 0xb8, 0xc1, 0x02, 0x77, 0x39, 0x5b, 0x5c, 0x8f, 0xce, 0x2e, 0xc6, 0x11, 0x11, 0x1c, 0x7a, 0x90, 0x2f, 0x90, 0xd4, 0x9e, 0x58, 0x0d, 0x5b, 0xc7, 0xf9, 0x33, 0x35, 0xb3, 0x97, 0xa5, 0x9d, 0xa3, 0x61, 0x01, 0x3f, 0x6b, 0x02, 0x1e, 0x05, 0x92, 0x89, 0xd4, 0xc1, 0x27, 0x4c, 0x02, 0xe2, 0xe2, 0x34, 0xd9, 0x87, 0xd1, 0xfd, 0xf1, 0x18, 0x3e, 0xf8, 0x81, 0x90, 0x47, 0xa6, 0xb8, 0x97, 0xa4, 0x41, 0x6a, 0x64, 0x78, 0x7b, 0x78, 0xd8, 0xff, 0x70, 0x14, 0x31, 0xb0, 0xf0, 0x3e, 0x08, 0x1f, 0xc2, 0x7b, 0x16, 0xdd, 0xc2, 0xb4, 0x3b, 0x95, 0x3d, 0x48, 0xc6, 0x7d, 0x3f, 0x4c, 0x0e, 0xf7, 0x91, 0xfb, 0x22, 0x8a, 0xae, 0x63, 0x58, 0x6f, 0x5f, 0xbf, 0x79, 0xd5, 0xec, 0x68, 0xa2, 0x0b, 0x63, 0xf0, 0x15, 0x9d, 0x0b, 0xb2, 0xa7, 0x27, 0x97, 0x81, 0x97, 0x00, 0x32, 0xb0, 0xdb, 0x10, 0xa1, 0x7d, 0x9b, 0xb0, 0x63, 0x50, 0x70, 0xc3, 0x34, 0x39, 0x7b, 0x84, 0x22, 0x55, 0xe6, 0xa7, 0xbc, 0x02, 0x3e, 0xca, 0xdc, 0x44, 0x45, 0x5d, 0x41, 0x50, 0x63, 0x5d, 0x16, 0xa5, 0x92, 0x67, 0xe0, 0x25, 0x79, 0x48, 0x9b, 0x04, 0xb2, 0xcc, 0xe8, 0x53, 0x6d, 0x8a, 0x73, 0x51, 0x00, 0x47, 0x20, 0xc4, 0x78, 0x8e, 0xc8, 0x96, 0x29, 0x10, 0xe3, 0xf2, 0x1c, 0x95, 0xa5, 0x42, 0x8c, 0x38, 0xe7, 0xa6, 0x10, 0x85, 0x30, 0x91, 0xd0, 0x26, 0xba, 0x0b, 0x82, 0x30, 0x3a, 0x1e, 0x83, 0xc3, 0x75, 0x09, 0x83, 0xb7, 0xef, 0x00, 0xfc, 0x4b, 0xbf, 0x8c, 0xa0, 0xfb, 0x90, 0xd2, 0x6c, 0x15, 0xd4, 0x41, 0xb7, 0x7d, 0x44, 0x88, 0x5e, 0xe9, 0x69, 0xa6, 0x82, 0x25, 0xee, 0xe0, 0xa5, 0xd9, 0xc1, 0x97, 0xf4, 0xfd, 0x7d, 0x21, 0x81, 0xf3, 0xb9, 0x3e, 0x67, 0xe7, 0x4a, 0x93, 0x78, 0x86, 0xb6, 0x66, 0xde, 0xb9, 0x2d, 0x8f, 0x46, 0xe4, 0x8d, 0x3a, 0x65, 0x42, 0xb3, 0x9c, 0xba, 0x1b, 0x9d, 0x63, 0x8a, 0xfd, 0xc3, 0x63, 0x79, 0x2c, 0x2a, 0x59, 0x66, 0x89, 0x8e, 0xa9, 0x48, 0x35, 0xf6, 0xe3, 0xd0, 0x0f, 0x0e, 0xc9, 0x81, 0xa6, 0x9e, 0xb1, 0x22, 0x39, 0xec, 0x7f, 0x4b, 0x15, 0xc5, 0xb7, 0xbb, 0xed, 0xc3, 0xbb, 0x37, 0x6f, 0x76, 0x2b, 0x5c, 0xb4, 0x38, 0x34, 0x6f, 0xc2, 0x75, 0xfc, 0x7e, 0x02, 0xde, 0x9b, 0xf1, 0x93, 0xc7, 0xfa, 0xf4, 0xd5, 0xea, 0x18, 0x72, 0x21, 0x58, 0xf2, 0xbe, 0xc8, 0x4f, 0xd5, 0x89, 0xb2, 0x05, 0xd4, 0x35, 0x7e, 0xae, 0xe9, 0xc8, 0xa2, 0xa3, 0xb6, 0xc8, 0xf6, 0xc4, 0x73, 0x82, 0xc3, 0xb6, 0xa3, 0x46, 0xcf, 0x0a, 0x0e, 0x14, 0x8d, 0xcc, 0x15, 0x8d, 0xda, 0x11, 0xa9, 0x3d, 0x48, 0x92, 0x99, 0xb9, 0xe1, 0xdf, 0x43, 0xbc, 0x70, 0xf6, 0x22, 0xe5, 0x29, 0xbc, 0x58, 0x55, 0x8a, 0xf1, 0xbb, 0x30, 0x0d, 0x83, 0x94, 0x05, 0x49, 0xe0, 0x83, 0x8d, 0x45, 0x61, 0xe0, 0x5d, 0x17, 0xd2, 0xde, 0x7e, 0x78, 0xff, 0xaa, 0x7d, 0xce, 0x32, 0xf3, 0xb3, 0x65, 0xce, 0x47, 0xcb, 0xb8, 0xb5, 0x4c, 0x1a, 0x43, 0x96, 0xa5, 0x39, 0x2c, 0x03, 0x9e, 0xc7, 0x69, 0x19, 0x15, 0x61, 0x55, 0x64, 0x20, 0xf8, 0x22, 0xef, 0x0a, 0x59, 0x64, 0x05, 0x2f, 0xb3, 0xbc, 0xca, 0x59, 0x09, 0xaf, 0x15, 0xaa, 0x4c, 0x0a, 0x29, 0xc3, 0x3f, 0x44, 0xfb, 0x8c, 0x87, 0x41, 0xfc, 0x32, 0x11, 0x47, 0xce, 0x0c, 0xb8, 0xc7, 0x6f, 0x0a, 0xd8, 0xdf, 0x0c, 0x8f, 0xef, 0x5a, 0x84, 0x34, 0x1f, 0xef, 0x17, 0x9a, 0x65, 0x74, 0xd6, 0x7e, 0x62, 0x93, 0xbf, 0x4c, 0x4b, 0x6f, 0xd6, 0x79, 0x59, 0x67, 0x08, 0x37, 0x3a, 0xd8, 0x18, 0x3c, 0x9f, 0x52, 0xad, 0xfc, 0xe7, 0xcc, 0x23, 0xc5, 0xa3, 0xa7, 0x44, 0x48, 0x59, 0x6f, 0x23, 0x6a, 0xb6, 0xe3, 0x25, 0x65, 0xff, 0x16, 0x5b, 0xf2, 0x87, 0x32, 0x3d, 0xf5, 0x56, 0x6c, 0xdc, 0x50, 0xd2, 0xa7, 0x35, 0x4d, 0x5d, 0xe1, 0xa7, 0x32, 0x6a, 0x94, 0xa9, 0x72, 0x6c, 0x53, 0x48, 0x98, 0xba, 0xb2, 0xa3, 0x5d, 0xf4, 0x89, 0x8a, 0xb1, 0x2a, 0xec, 0xc7, 0x32, 0x3d, 0x26, 0xd9, 0x73, 0x95, 0x58, 0xcf, 0xc0, 0x23, 0xd9, 0x85, 0x20, 0xe5, 0x73, 0x36, 0xcf, 0x34, 0x74, 0xc2, 0x27, 0x9c, 0x70, 0xa1, 0xab, 0xc1, 0xba, 0x5c, 0x07, 0x02, 0xd4, 0x67, 0x24, 0xdd, 0x56, 0xf0, 0xae, 0xe9, 0xe7, 0x46, 0xeb, 0x7d, 0xa1, 0x4f, 0x76, 0xa0, 0x97, 0xb1, 0xb2, 0xd3, 0x56, 0x3d, 0x3e, 0xf6, 0x59, 0x14, 0x8f, 0x7d, 0x17, 0x5b, 0xf8, 0x6e, 0x0a, 0x4a, 0xee, 0x6c, 0xa4, 0x99, 0x0e, 0x45, 0xc9, 0x7a, 0xd3, 0x42, 0x91, 0x6e, 0x3f, 0x47, 0xe1, 0xfd, 0x64, 0xad, 0xae, 0x6a, 0xdb, 0xe3, 0xaa, 0x25, 0xb8, 0x73, 0x29, 0x98, 0x60, 0xe1, 0x75, 0xfb, 0xec, 0x5d, 0x47, 0x3d, 0x32, 0x2b, 0x7c, 0x34, 0x71, 0x3a, 0x02, 0x9c, 0xf0, 0x20, 0x25, 0x3d, 0x21, 0x90, 0xf9, 0xf4, 0xea, 0x04, 0x75, 0xed, 0x4c, 0x30, 0xcd, 0x27, 0xbe, 0xbc, 0xf8, 0xa4, 0xb3, 0xd9, 0x34, 0xbd, 0x94, 0xc7, 0xaa, 0x2a, 0x6e, 0x38, 0x40, 0xb2, 0x2a, 0xdc, 0x07, 0xa3, 0xf2, 0x38, 0xcf, 0x23, 0x90, 0x26, 0xc8, 0xcc, 0x2a, 0xe6, 0x2a, 0x92, 0x5a, 0x57, 0x35, 0xe2, 0x73, 0xdd, 0x95, 0x3a, 0x51, 0x15, 0x48, 0x64, 0x58, 0xf0, 0x5c, 0xea, 0x4a, 0x57, 0x4c, 0x04, 0xa7, 0x34, 0x11, 0xf2, 0x2e, 0xe6, 0x1a, 0x34, 0xfa, 0x68, 0x8a, 0xa4, 0x48, 0x75, 0x56, 0x24, 0x52, 0xa5, 0x85, 0xd4, 0x99, 0x60, 0x7f, 0x4a, 0x8f, 0xc7, 0x2f, 0xce, 0xe1, 0xbf, 0x79, 0x25, 0xbe, 0x6f, 0xda, 0x9d, 0x19, 0x20, 0xbc, 0xbc, 0x8b, 0x83, 0x78, 0xe6, 0xbb, 0xdc, 0x9b, 0xb0, 0xe9, 0xbc, 0x99, 0x2d, 0x02, 0x04, 0x0b, 0x2b, 0xd0, 0xf3, 0xcc, 0x2f, 0x54, 0xe9, 0xde, 0x2e, 0xc4, 0x7a, 0xcb, 0x09, 0x9c, 0xda, 0x27, 0x0f, 0xd5, 0x5b, 0x52, 0xbc, 0xa8, 0x37, 0x5f, 0xd8, 0x0c, 0x01, 0x94, 0x4d, 0x13, 0x5b, 0x46, 0x69, 0x73, 0x21, 0x9d, 0x6d, 0xc0, 0x68, 0x48, 0x52, 0x37, 0x15, 0x4f, 0x8c, 0xcc, 0xdb, 0x53, 0x65, 0xb2, 0x93, 0xce, 0x54, 0x09, 0xe9, 0x93, 0xe5, 0x46, 0xc4, 0x42, 0xde, 0x1f, 0xd2, 0xeb, 0x7a, 0x64, 0xac, 0x5d, 0xd3, 0x05, 0x4c, 0x9f, 0xad, 0x50, 0xcf, 0x17, 0x7f, 0xa0, 0x54, 0xf1, 0xea, 0x2e, 0xc3, 0x34, 0xc3, 0x67, 0x0b, 0xa7, 0x9a, 0x0a, 0xd6, 0x7f, 0xa9, 0x48, 0x41, 0xae, 0xaa, 0xf3, 0x63, 0xa4, 0x26, 0xfb, 0x60, 0x08, 0x4d, 0x8e, 0x3b, 0x37, 0x5b, 0xed, 0x55, 0xfb, 0x38, 0x1e, 0xaa, 0x91, 0x25, 0x65, 0xb7, 0xda, 0xa2, 0x20, 0x5a, 0x52, 0x52, 0x87, 0x8c, 0x9d, 0xcf, 0x06, 0xf8, 0x84, 0x71, 0xda, 0x68, 0x7d, 0xa2, 0xf1, 0x94, 0x55, 0x95, 0x21, 0xd2, 0x19, 0x70, 0x46, 0xac, 0x44, 0x9e, 0x65, 0x19, 0x68, 0x31, 0xfb, 0xfc, 0xa4, 0xfa, 0x5b, 0xeb, 0x89, 0xdf, 0xbd, 0x87, 0x8a, 0x01, 0x08, 0x7a, 0xcb, 0xc8, 0xa7, 0x15, 0x81, 0x99, 0x9a, 0xd1, 0x5c, 0x6f, 0xb8, 0x98, 0x0b, 0x65, 0x7c, 0x38, 0x73, 0x98, 0x21, 0x7a, 0xf5, 0x84, 0x19, 0xc6, 0x7a, 0xec, 0x46, 0x70, 0xa9, 0xa8, 0xa1, 0x22, 0x53, 0x26, 0x0f, 0x75, 0xde, 0x52, 0xe5, 0x66, 0x50, 0x17, 0xa1, 0x09, 0x73, 0x91, 0xd3, 0xcc, 0xc9, 0xb4, 0x36, 0x52, 0xb6, 0x65, 0x6a, 0x47, 0xba, 0x64, 0x34, 0xfd, 0xa4, 0x0c, 0xef, 0x23, 0x46, 0x34, 0x84, 0x8a, 0x1e, 0x79, 0x94, 0x64, 0x82, 0x27, 0x0f, 0x41, 0xc6, 0x03, 0x8e, 0xa8, 0xc6, 0xd2, 0x28, 0x8d, 0x8e, 0xf1, 0x1f, 0x53, 0x6a, 0xd2, 0xe2, 0x69, 0x92, 0x24, 0xe1, 0x33, 0x66, 0x3d, 0xe7, 0xae, 0x37, 0x3b, 0x98, 0x71, 0x99, 0x00, 0xe5, 0x03, 0x95, 0xb2, 0x0f, 0x6c, 0xe0, 0x30, 0x03, 0xd8, 0x2f, 0xa6, 0x11, 0x9c, 0xa3, 0xe7, 0xee, 0xc4, 0x40, 0xb4, 0x3e, 0x73, 0xd8, 0x9e, 0x43, 0x12, 0x9f, 0xc4, 0xb9, 0x3e, 0x45, 0x5e, 0x06, 0x5a, 0x9e, 0x09, 0x11, 0x02, 0xd9, 0xa9, 0x94, 0x13, 0x36, 0xe5, 0x49, 0x53, 0x28, 0x3b, 0x70, 0xc7, 0x14, 0x91, 0x52, 0xde, 0xc3, 0xf1, 0xe8, 0x24, 0x6e, 0x7a, 0x17, 0xf9, 0x60, 0xee, 0x31, 0x54, 0x65, 0xc2, 0xa9, 0x49, 0xd7, 0xe4, 0x49, 0x9e, 0x69, 0x3f, 0xd9, 0x3f, 0xa4, 0x69, 0x9c, 0x24, 0xe9, 0x9f, 0xfc, 0xc3, 0xc3, 0x83, 0x9f, 0xbe, 0xbc, 0x01, 0x7f, 0x0c, 0x82, 0xf8, 0xba, 0x28, 0x86, 0x20, 0xf6, 0xfe, 0xfd, 0xce, 0x79, 0x7a, 0x98, 0xd1, 0xa1, 0x7e, 0x3d, 0xde, 0x7b, 0x03, 0x36, 0x1c, 0x1c, 0x36, 0xdb, 0x41, 0x35, 0xc2, 0x75, 0x8d, 0xe3, 0xe0, 0x75, 0x41, 0xe7, 0xf1, 0xf8, 0xe4, 0xb2, 0x67, 0x90, 0xfd, 0xe7, 0xe6, 0x8c, 0xc5, 0x08, 0x22, 0x5f, 0x1b, 0x15, 0xca, 0xfc, 0xe5, 0xcb, 0xe8, 0x1f, 0xb4, 0xca, 0xfd, 0x17, 0xd5, 0x49, 0xdf, 0x8a, 0x1d, 0xef, 0x9b, 0xd7, 0xd8, 0x63, 0x2b, 0xe1, 0x61, 0x3f, 0x99, 0x11, 0xa8, 0x48, 0x93, 0x92, 0x00, 0x83, 0x78, 0xf6, 0xa6, 0xd9, 0xe6, 0xe5, 0xa6, 0x5f, 0x26, 0xc4, 0xf7, 0x66, 0xeb, 0x22, 0xa1, 0x38, 0x06, 0xa0, 0x3e, 0x93, 0xd2, 0xaa, 0x3f, 0x7b, 0xb4, 0x36, 0xae, 0xb5, 0x5b, 0xde, 0xb1, 0x34, 0xb5, 0xed, 0x94, 0x34, 0x27, 0x82, 0x17, 0xa3, 0xf1, 0xdf, 0x08, 0x2d, 0x01, 0xa3, 0x94, 0x46, 0x65, 0x59, 0x2e, 0xc0, 0x48, 0x24, 0x78, 0xa6, 0x32, 0x80, 0x10, 0x95, 0x1c, 0x05, 0xe4, 0xd9, 0x73, 0x7d, 0x83, 0x7f, 0x79, 0x31, 0x7e, 0xb4, 0x6b, 0xfd, 0xd9, 0xae, 0xd1, 0xff, 0xd9, 0x2e, 0xff, 0x13, 0xbb, 0x3e, 0x51, 0xd4, 0x74, 0x0c, 0x63, 0x5b, 0x3d, 0x9f, 0x9a, 0x3d, 0x5b, 0x6a, 0xf5, 0xa4, 0x60, 0xbd, 0x45, 0x35, 0xfb, 0x49, 0x63, 0x87, 0xe6, 0x09, 0xdb, 0x5b, 0x47, 0xc0, 0x41, 0xaf, 0xe8, 0xad, 0x0b, 0x14, 0xea, 0xb3, 0x56, 0xfc, 0x64, 0xda, 0x06, 0x92, 0x46, 0xe7, 0xb5, 0xc9, 0x2b, 0xad, 0xaa, 0x9c, 0x4e, 0x84, 0x61, 0x53, 0x26, 0xb3, 0x88, 0x5f, 0x37, 0x64, 0xe8, 0x7d, 0xdb, 0xd9, 0xa9, 0x05, 0x33, 0x74, 0xa6, 0xbb, 0x2e, 0xbe, 0x3f, 0xcc, 0x50, 0x10, 0x3d, 0xb5, 0x6a, 0x31, 0x33, 0x39, 0xab, 0x3b, 0xb0, 0x91, 0x6c, 0x71, 0x3e, 0xc1, 0x7b, 0x4e, 0xa5, 0xed, 0xd4, 0xd1, 0x74, 0xd6, 0xf6, 0xc0, 0xe5, 0xd4, 0x6e, 0x42, 0x73, 0x4b, 0x09, 0x37, 0x5b, 0x3b, 0x82, 0x8d, 0xc3, 0x39, 0xf5, 0xf3, 0x64, 0x1d, 0x71, 0x8f, 0x36, 0xa5, 0x6f, 0xeb, 0x0a, 0xc8, 0x2e, 0x28, 0x27, 0x9c, 0x57, 0x15, 0x9e, 0x40, 0x36, 0x81, 0xf5, 0xa6, 0xd6, 0x9d, 0xcc, 0x11, 0xdc, 0x44, 0x20, 0x42, 0x96, 0x1d, 0xfd, 0xdb, 0x38, 0x4c, 0xae, 0x4b, 0x5a, 0x59, 0xbb, 0xa6, 0x91, 0x8a, 0x32, 0x99, 0xb9, 0x08, 0x84, 0x62, 0x67, 0x1c, 0x28, 0xe1, 0xcd, 0x96, 0x71, 0x70, 0xd9, 0x34, 0x3b, 0xde, 0xc2, 0x67, 0x90, 0x90, 0xe5, 0xf3, 0xba, 0x76, 0xea, 0xcc, 0xa5, 0x31, 0x13, 0xe4, 0xaf, 0xc6, 0x9e, 0x2a, 0xa9, 0xad, 0x2d, 0xf2, 0x6c, 0xf3, 0xf7, 0xca, 0x2e, 0x41, 0x7c, 0x8b, 0xba, 0x2e, 0xb4, 0x8d, 0x00, 0x2d, 0x48, 0x16, 0xb5, 0x33, 0x29, 0x63, 0x5a, 0x93, 0x37, 0x85, 0x36, 0x55, 0x9b, 0x28, 0x4a, 0x09, 0x1b, 0xa3, 0xb0, 0x0a, 0xf1, 0x1d, 0xa9, 0x23, 0xa0, 0x10, 0x93, 0xfc, 0x9e, 0xaa, 0x46, 0xaf, 0xf4, 0xd7, 0xbb, 0x06, 0x9c, 0x63, 0xc5, 0xda, 0x22, 0xf1, 0x6c, 0x98, 0x59, 0xc7, 0x85, 0x3f, 0x9e, 0xb5, 0xbb, 0x33, 0xa2, 0x36, 0xe9, 0x35, 0x68, 0xb1, 0xe5, 0xb3, 0x13, 0x41, 0x5a, 0x87, 0x27, 0x3b, 0xac, 0x80, 0x44, 0x34, 0xf1, 0xc0, 0x9c, 0xde, 0x7d, 0x21, 0xb6, 0x6d, 0xd5, 0x50, 0xa9, 0x74, 0xd1, 0x96, 0x12, 0x46, 0xe5, 0xad, 0x6c, 0x80, 0x2f, 0xa7, 0x86, 0x62, 0xb0, 0xd0, 0x5a, 0x15, 0x27, 0x6d, 0xda, 0xbc, 0xd1, 0x4d, 0xde, 0x94, 0x1c, 0x6b, 0xd1, 0xc8, 0x84, 0x5a, 0x11, 0xf6, 0x46, 0x06, 0x41, 0x20, 0x58, 0x92, 0xf1, 0x8c, 0xea, 0xad, 0xae, 0x8b, 0xcd, 0xd6, 0xae, 0x8b, 0xdf, 0xf7, 0xfe, 0x62, 0xe8, 0x14, 0x70, 0xf0, 0x56, 0xe6, 0xb9, 0x0c, 0x06, 0x41, 0x7d, 0x3a, 0xc0, 0x78, 0x68, 0x69, 0x43, 0xdd, 0x69, 0xd3, 0xe7, 0xfe, 0x52, 0xba, 0xdc, 0x0e, 0xa6, 0xa9, 0x17, 0xf2, 0xfc, 0xc4, 0x7d, 0x9b, 0x6d, 0xd2, 0xb2, 0xda, 0x26, 0x32, 0x88, 0x46, 0x0b, 0x8a, 0xc3, 0x20, 0x85, 0x9c, 0xce, 0xa9, 0xb5, 0x34, 0xb0, 0x95, 0x7e, 0x03, 0x70, 0x57, 0x02, 0x21, 0x70, 0x4a, 0x14, 0xc8, 0x14, 0x33, 0x52, 0x25, 0x91, 0x24, 0xcf, 0x65, 0x10, 0x74, 0x31, 0x63, 0x77, 0x47, 0x44, 0xb1, 0xdf, 0x5d, 0x25, 0x35, 0xdf, 0x77, 0xcd, 0x9b, 0x57, 0xa0, 0xf5, 0x17, 0x97, 0xf2, 0x1c, 0x74, 0x50, 0x31, 0x63, 0xd5, 0x79, 0x2b, 0x48, 0xe2, 0x34, 0x52, 0x35, 0xa0, 0x1d, 0xb5, 0xb6, 0xa5, 0x4d, 0xfb, 0xc7, 0x3e, 0x6a, 0xb0, 0x29, 0x67, 0x0f, 0x02, 0x9e, 0xab, 0x13, 0x50, 0xed, 0x7c, 0xbe, 0x6d, 0xce, 0x30, 0xa5, 0xad, 0x02, 0x76, 0x48, 0x4e, 0xe5, 0xd9, 0xb0, 0x42, 0x84, 0x8a, 0xa5, 0x30, 0xd7, 0xc0, 0x56, 0x49, 0x07, 0x9b, 0x67, 0x5d, 0x54, 0x05, 0x24, 0x4b, 0xa6, 0x8b, 0xa8, 0xc8, 0x59, 0x2e, 0xb1, 0xc9, 0x80, 0x28, 0xba, 0x12, 0xc9, 0x31, 0x3b, 0x31, 0x16, 0x0b, 0x1d, 0x84, 0x71, 0xaa, 0x59, 0x1c, 0xc5, 0xd9, 0x27, 0x60, 0xff, 0x3f, 0x5e, 0xb7, 0x18, 0x3b, 0x9a, 0x31, 0xe1, 0x01, 0xf7, 0xa0, 0x4c, 0x0c, 0x54, 0x8b, 0xbf, 0x0a, 0xec, 0xa8, 0x15, 0x64, 0xbe, 0x1f, 0xd7, 0xbe, 0x5f, 0x1d, 0x4b, 0x1b, 0x21, 0x5d, 0xa6, 0x7e, 0x18, 0x67, 0x43, 0x35, 0xb8, 0x6c, 0xf6, 0x29, 0xc3, 0xa8, 0xcf, 0x80, 0x38, 0x22, 0x53, 0xd5, 0x13, 0xaa, 0xe7, 0x1b, 0xce, 0xeb, 0xc7, 0x0e, 0x7f, 0x20, 0x61, 0x69, 0x07, 0x86, 0x30, 0xfa, 0x01, 0xca, 0xbe, 0x95, 0xc4, 0xb1, 0xe8, 0xf8, 0xb6, 0x6d, 0x39, 0xa0, 0xb0, 0x31, 0x95, 0xd4, 0xa5, 0xc4, 0x3a, 0xa5, 0xfa, 0xfe, 0xaa, 0x83, 0xe2, 0x04, 0x88, 0xe6, 0x82, 0xab, 0x9c, 0xf3, 0xeb, 0x86, 0x6d, 0x5a, 0xbb, 0xfc, 0xcb, 0xe2, 0xb9, 0x7c, 0x76, 0xc1, 0xed, 0x67, 0x6f, 0x59, 0x3d, 0xe6, 0xf9, 0xcb, 0xda, 0xc3, 0x63, 0x10, 0x2e, 0xc6, 0x59, 0xe0, 0x2d, 0x97, 0xc2, 0x17, 0x37, 0x06, 0x82, 0xc6, 0x12, 0x49, 0x4b, 0x14, 0xa9, 0x15, 0xe6, 0x64, 0xeb, 0xc5, 0x88, 0x07, 0x5b, 0xa4, 0x6f, 0x72, 0x2a, 0x9c, 0xad, 0xed, 0x78, 0x43, 0xa8, 0xb1, 0xa2, 0xa8, 0x63, 0xdb, 0x1d, 0x83, 0x10, 0x07, 0x5c, 0x2f, 0x0c, 0x0d, 0x5a, 0x2e, 0x5b, 0xa1, 0xed, 0x9c, 0xcd, 0xba, 0x33, 0x94, 0x6f, 0xa4, 0x31, 0x4a, 0xb0, 0x0b, 0x5b, 0xaf, 0x29, 0x1a, 0x9d, 0x66, 0x74, 0xe6, 0x0e, 0xc2, 0x76, 0x25, 0x78, 0x50, 0x53, 0xdd, 0xe0, 0x8d, 0x0b, 0x1b, 0x7b, 0x10, 0xf6, 0x71, 0x11, 0xdc, 0x5f, 0x98, 0xe1, 0x20, 0x87, 0x03, 0x55, 0xe6, 0x0f, 0x60, 0x23, 0x7c, 0xa4, 0x3c, 0xce, 0x67, 0x01, 0xfa, 0x06, 0x91, 0xc6, 0x88, 0xc7, 0xc1, 0x85, 0x15, 0x8d, 0x04, 0x05, 0xc6, 0x4b, 0xdb, 0xe9, 0x4e, 0xf6, 0xd0, 0xe4, 0x72, 0xca, 0x98, 0xca, 0xb2, 0xa4, 0x09, 0xe6, 0x00, 0x7d, 0x12, 0x64, 0x5a, 0x69, 0x2a, 0x6c, 0xd1, 0x54, 0x3f, 0x86, 0x57, 0x20, 0xab, 0x29, 0x38, 0xab, 0x34, 0x51, 0x34, 0xa7, 0x40, 0xc6, 0x58, 0xc1, 0x47, 0x26, 0x78, 0xc4, 0x18, 0x75, 0x1f, 0x5f, 0x09, 0xf6, 0x64, 0xd7, 0x0a, 0x77, 0x01, 0x35, 0x56, 0x3e, 0x6f, 0x88, 0x68, 0x06, 0x8f, 0x26, 0x12, 0x08, 0xe6, 0x1a, 0x71, 0x99, 0xdd, 0x05, 0x1f, 0xf9, 0x97, 0x59, 0x53, 0xac, 0x43, 0x44, 0x66, 0x59, 0x9b, 0xad, 0x94, 0xa0, 0x79, 0x9a, 0xf1, 0x0a, 0x60, 0xb0, 0xf3, 0x25, 0x40, 0x16, 0xad, 0xb1, 0x8d, 0x6c, 0xca, 0x12, 0xda, 0xa4, 0x55, 0x65, 0xde, 0xc4, 0x5a, 0x42, 0x2e, 0x6b, 0x1a, 0xf0, 0x6a, 0x47, 0x0a, 0xe5, 0x85, 0x4e, 0x95, 0x8e, 0x4d, 0x5a, 0x98, 0x8c, 0x0e, 0x2a, 0xa0, 0x55, 0xb2, 0x34, 0x04, 0xb1, 0xf7, 0x1e, 0xe2, 0xeb, 0xa8, 0x22, 0x88, 0xe2, 0xbb, 0xe6, 0xfd, 0x6e, 0x19, 0x1d, 0x03, 0x40, 0x74, 0xbc, 0x9e, 0xc4, 0x33, 0xeb, 0x0d, 0x1b, 0x57, 0x10, 0x63, 0xc7, 0x37, 0x9f, 0x25, 0x3e, 0x7e, 0xce, 0xed, 0xac, 0x7b, 0x82, 0xb8, 0x73, 0x9d, 0x9c, 0x6a, 0x5e, 0x51, 0xdb, 0x71, 0x9b, 0x69, 0x3a, 0xe3, 0xec, 0x9a, 0xb2, 0x6b, 0x11, 0xb4, 0x0b, 0x03, 0xc9, 0x55, 0x9d, 0xbb, 0x73, 0x4d, 0xfd, 0xfb, 0x42, 0xb0, 0xae, 0x68, 0xf0, 0xed, 0x2a, 0x2b, 0xb0, 0x7f, 0x72, 0x56, 0xb2, 0x82, 0x9b, 0xa4, 0x64, 0x67, 0x71, 0x92, 0x85, 0x3a, 0x9d, 0x0b, 0x5d, 0x28, 0x78, 0x4f, 0x15, 0xb2, 0xcc, 0x8b, 0x54, 0xb2, 0x8f, 0xe8, 0x71, 0xdd, 0x70, 0x54, 0x58, 0xf7, 0xa1, 0xd9, 0xd9, 0x82, 0x61, 0x4a, 0x73, 0x20, 0x3a, 0x2f, 0x8b, 0x3b, 0x32, 0x36, 0x1a, 0x33, 0x01, 0x28, 0x10, 0xac, 0x57, 0x9a, 0xfd, 0xfa, 0x0b, 0x52, 0x45, 0x07, 0x4b, 0x25, 0xb6, 0x58, 0x54, 0xd7, 0x8c, 0x9d, 0x54, 0x19, 0x1b, 0x91, 0xc7, 0xb1, 0x12, 0xc9, 0x6d, 0x18, 0x46, 0x81, 0x17, 0x05, 0x22, 0xc8, 0x53, 0xc1, 0xf0, 0x76, 0x55, 0x92, 0x29, 0x0e, 0x53, 0x92, 0x43, 0xc6, 0x63, 0x96, 0xe6, 0x54, 0xdd, 0x91, 0x87, 0x51, 0x14, 0xc4, 0xf1, 0x6d, 0xea, 0xf3, 0xbf, 0x70, 0xee, 0x09, 0xe3, 0xfe, 0xeb, 0xab, 0x46, 0xae, 0xbd, 0x7f, 0xdd, 0xbe, 0x79, 0xbd, 0x03, 0x4d, 0x5c, 0xfc, 0xd5, 0x5d, 0x7d, 0xd0, 0x27, 0xaa, 0x66, 0xf1, 0x1d, 0xc7, 0x75, 0xdd, 0x99, 0xce, 0xa6, 0xe7, 0x15, 0x14, 0x12, 0xf4, 0xd1, 0x59, 0x67, 0xa7, 0x27, 0x91, 0xed, 0x4f, 0x0e, 0xf8, 0x0a, 0xb5, 0x43, 0x1a, 0xb0, 0x07, 0x99, 0x61, 0x95, 0x65, 0x02, 0x9a, 0x2b, 0x03, 0xa1, 0xe5, 0x79, 0x9a, 0xc7, 0x2a, 0x8c, 0x12, 0xce, 0xee, 0x79, 0x72, 0xc4, 0xdb, 0x8f, 0x02, 0x1e, 0xa7, 0x61, 0x12, 0x26, 0x87, 0x54, 0xf0, 0xcc, 0x7d, 0x19, 0xc7, 0xc7, 0x20, 0x63, 0x41, 0x9c, 0x1e, 0x92, 0x90, 0x47, 0xa9, 0xf2, 0x65, 0x1a, 0x88, 0x3d, 0xa5, 0x20, 0x19, 0x8d, 0x2f, 0x38, 0xbe, 0x38, 0x06, 0x61, 0x14, 0xee, 0x83, 0xfb, 0xf0, 0xe8, 0x5e, 0x87, 0x21, 0xaf, 0xbb, 0x37, 0x3b, 0x97, 0xca, 0xe1, 0x80, 0xf7, 0xa3, 0xb3, 0x5e, 0xd6, 0x99, 0x2a, 0xe1, 0x8c, 0xe3, 0x5d, 0xf8, 0xb2, 0x5c, 0x7c, 0x33, 0xf6, 0x13, 0x76, 0xe0, 0x65, 0xf4, 0x20, 0x3e, 0x7f, 0xce, 0xe3, 0xef, 0xf3, 0xca, 0x0e, 0xd0, 0xa8, 0xdb, 0xb3, 0xc5, 0xfc, 0xc7, 0x34, 0x15, 0x0d, 0xc6, 0xb6, 0xa9, 0x81, 0xe2, 0x69, 0x38, 0x14, 0x4d, 0x95, 0xa3, 0x0a, 0xa4, 0xa6, 0x43, 0x80, 0x2e, 0x4e, 0x2c, 0x6f, 0x79, 0x2d, 0x6b, 0x45, 0x64, 0xa4, 0x3a, 0x26, 0x2a, 0xd6, 0xf8, 0x9d, 0x00, 0x52, 0xe4, 0x51, 0x44, 0xe9, 0x31, 0x48, 0x99, 0x9f, 0x41, 0xb4, 0xf9, 0x59, 0x1a, 0x44, 0x57, 0x62, 0x3e, 0xd9, 0x05, 0x8d, 0xc9, 0x27, 0x41, 0x47, 0x63, 0xb4, 0xcf, 0x16, 0x0e, 0x11, 0xcd, 0x61, 0x04, 0x95, 0xcc, 0x39, 0x1e, 0x65, 0xa9, 0xa8, 0xa8, 0x67, 0x72, 0x97, 0x9f, 0xf3, 0xf8, 0x76, 0x20, 0x36, 0xd9, 0x45, 0x30, 0x62, 0x09, 0xa3, 0xcd, 0x11, 0x34, 0x8f, 0xa3, 0xd6, 0xec, 0x53, 0xdb, 0x8a, 0x66, 0xcb, 0x4d, 0x29, 0xaa, 0x2f, 0x26, 0x40, 0x37, 0xcd, 0x06, 0xf6, 0x14, 0xda, 0x4e, 0x15, 0x25, 0x07, 0x2a, 0x7b, 0x92, 0x56, 0x15, 0x8c, 0x40, 0x33, 0xa1, 0x6a, 0x02, 0x21, 0x61, 0x64, 0x72, 0xe0, 0xd7, 0xb5, 0x30, 0xbd, 0x7f, 0xfd, 0x16, 0xeb, 0x70, 0x76, 0xc0, 0x19, 0x69, 0xda, 0x1f, 0x42, 0x70, 0x3f, 0x2e, 0xeb, 0x02, 0x0a, 0x72, 0x59, 0x5d, 0x88, 0x34, 0x9a, 0x25, 0xed, 0xcf, 0x7c, 0xfe, 0x22, 0x9d, 0x43, 0x84, 0xf1, 0xb1, 0xc0, 0x8a, 0x04, 0x99, 0x3d, 0x96, 0x6e, 0x68, 0xb0, 0x37, 0xf0, 0xa2, 0xd9, 0x92, 0x8a, 0x05, 0x08, 0xf1, 0x06, 0xff, 0x5b, 0x08, 0x6f, 0xd2, 0x52, 0xc2, 0x4d, 0x15, 0xdc, 0x7b, 0xd4, 0x54, 0x3c, 0x96, 0xd7, 0xe7, 0xbc, 0xa9, 0x74, 0x19, 0x9c, 0x8c, 0xac, 0x8a, 0x93, 0xc0, 0x92, 0x96, 0xc9, 0x91, 0x49, 0xf1, 0x38, 0xcb, 0xeb, 0x37, 0x9c, 0x02, 0x3e, 0xe7, 0xb3, 0xb7, 0x54, 0xc6, 0x4e, 0x93, 0x25, 0x1c, 0xee, 0xb3, 0x69, 0x99, 0x3c, 0xe6, 0x62, 0x3f, 0xb9, 0xc0, 0x4b, 0x04, 0x67, 0xea, 0x7d, 0xa7, 0xc1, 0x49, 0x5f, 0x16, 0x91, 0xed, 0x4b, 0x5e, 0x9d, 0x63, 0x43, 0x83, 0x6a, 0xc4, 0xa9, 0xd6, 0x92, 0x7a, 0xaa, 0xa9, 0x81, 0xb5, 0xb6, 0xcd, 0xfc, 0xd0, 0x8d, 0x79, 0x48, 0x71, 0x0c, 0xc1, 0x39, 0x0f, 0x05, 0xa7, 0x32, 0x68, 0x59, 0x55, 0x55, 0x59, 0x85, 0x29, 0x57, 0x2c, 0x4b, 0x8b, 0x58, 0xea, 0x0c, 0xc8, 0x5f, 0xc6, 0x70, 0x54, 0x2c, 0xa5, 0x80, 0x28, 0x03, 0xda, 0x0b, 0x84, 0x33, 0x3f, 0x4c, 0xd3, 0x94, 0x25, 0x49, 0xfc, 0x5c, 0x3c, 0x7b, 0xce, 0x67, 0x1f, 0xde, 0xee, 0x26, 0x06, 0x47, 0x39, 0xdc, 0x66, 0x7e, 0x19, 0x9c, 0xb2, 0xd2, 0xd4, 0x3c, 0x2a, 0xe1, 0x19, 0xed, 0x20, 0x06, 0x8f, 0xa6, 0xe6, 0x7d, 0x3e, 0xbe, 0x0b, 0x22, 0xba, 0xb2, 0x2a, 0x93, 0x56, 0xe1, 0xa9, 0x7d, 0xac, 0xf0, 0x6b, 0xf2, 0x6d, 0x06, 0x6c, 0xbb, 0xe9, 0xb3, 0x6d, 0xac, 0x39, 0xb5, 0x8a, 0x90, 0xd7, 0x8c, 0x6a, 0xa8, 0x19, 0xc1, 0x0e, 0x2d, 0x68, 0x4c, 0x7e, 0xb2, 0x32, 0x06, 0x0b, 0x50, 0x56, 0x3a, 0x31, 0x39, 0xa2, 0x83, 0x36, 0x69, 0x2e, 0xb3, 0x22, 0x4f, 0xa8, 0x4d, 0xf9, 0x6a, 0x92, 0x4f, 0x76, 0x39, 0x3e, 0xdd, 0x7b, 0x40, 0x25, 0x99, 0x13, 0x3c, 0xd4, 0x23, 0x5c, 0x71, 0xc7, 0x5d, 0x10, 0xc9, 0x28, 0x2d, 0xec, 0x6d, 0xb3, 0x0e, 0x3f, 0xef, 0xf6, 0xc1, 0x1e, 0x2b, 0x69, 0x54, 0x23, 0x34, 0x89, 0xd5, 0xce, 0xc4, 0x1b, 0xa9, 0xe4, 0xef, 0xf1, 0xa1, 0x1e, 0xef, 0x79, 0xd8, 0xd2, 0x8d, 0x1d, 0x6d, 0x2f, 0x90, 0x65, 0x8a, 0xde, 0xb0, 0xa6, 0x35, 0x19, 0x11, 0x7f, 0x88, 0x1b, 0x1a, 0x6a, 0x88, 0x3d, 0x57, 0x1e, 0x4f, 0x74, 0xb9, 0x03, 0x09, 0x1d, 0x0d, 0x8e, 0x0d, 0xf9, 0x22, 0x04, 0x82, 0xc3, 0x55, 0xed, 0xe1, 0xef, 0x01, 0xf5, 0xbd, 0x33, 0xae, 0xc3, 0x82, 0xa0, 0x3c, 0x50, 0x24, 0x73, 0x7d, 0x17, 0xc1, 0xcb, 0x9d, 0x9c, 0xd9, 0xb0, 0xcf, 0x9c, 0xe4, 0x5e, 0x44, 0xcf, 0xfb, 0x65, 0x36, 0x7e, 0x7f, 0x93, 0xfc, 0xe4, 0x66, 0x1c, 0x8a, 0x90, 0xfb, 0x71, 0xe6, 0x66, 0xb1, 0x14, 0x52, 0xc5, 0x82, 0x07, 0x91, 0xcf, 0x94, 0x64, 0x2a, 0x8e, 0xb9, 0x8f, 0x25, 0x95, 0xd2, 0x14, 0xdb, 0x20, 0x86, 0x40, 0x11, 0xc7, 0x4c, 0x30, 0xb0, 0x0b, 0x2e, 0x0e, 0x5a, 0x20, 0xa0, 0xf1, 0x2c, 0xa4, 0x3a, 0xaa, 0x88, 0x86, 0x0f, 0xff, 0x85, 0x38, 0xf6, 0x37, 0x57, 0x25, 0xe1, 0xc8, 0x34, 0xbf, 0x1f, 0xfc, 0xd5, 0xa3, 0x59, 0xe5, 0x88, 0xcb, 0xa3, 0x4b, 0x13, 0x4e, 0xe6, 0xd9, 0x65, 0x8e, 0x59, 0xbf, 0xa8, 0xde, 0xb9, 0x3c, 0x55, 0xef, 0xec, 0x19, 0xde, 0x7d, 0xe6, 0xe3, 0x7d, 0x87, 0x3c, 0xc8, 0x84, 0x7f, 0x97, 0x30, 0x16, 0x46, 0x99, 0x80, 0x06, 0xa1, 0xe3, 0x56, 0x19, 0xe2, 0xdd, 0x1f, 0xd2, 0xf4, 0x8e, 0x45, 0x19, 0xde, 0x7e, 0xcc, 0xa3, 0x98, 0xb3, 0x44, 0x04, 0x59, 0x72, 0xf4, 0xb3, 0x87, 0x9b, 0x38, 0x8c, 0x03, 0xc7, 0x73, 0x6f, 0x0f, 0x77, 0xb7, 0xc9, 0xe1, 0xfe, 0xa7, 0xfd, 0x9f, 0xbf, 0x0f, 0x5e, 0x1e, 0xff, 0xe8, 0xfa, 0x77, 0xe1, 0xe1, 0x45, 0x24, 0xc3, 0x87, 0x38, 0x48, 0x7f, 0x4c, 0x9c, 0xeb, 0x50, 0xf1, 0x0d, 0xad, 0xc4, 0x9e, 0xfb, 0x3d, 0xc4, 0xf2, 0xe0, 0xf5, 0xcc, 0xeb, 0x11, 0xb3, 0xcc, 0x64, 0xd8, 0x4c, 0xe9, 0x9c, 0x99, 0x72, 0x8e, 0x1e, 0x9b, 0xfc, 0xcb, 0xe7, 0x1d, 0xfd, 0xf6, 0xfa, 0x94, 0x4d, 0x67, 0x52, 0xa3, 0x08, 0x6d, 0xa7, 0x6c, 0xab, 0xf3, 0x6e, 0xa9, 0x33, 0x97, 0x4e, 0x1c, 0xa8, 0x39, 0xab, 0xb5, 0x12, 0xbb, 0xc8, 0x4b, 0x13, 0xe0, 0xc7, 0x54, 0xcb, 0x4a, 0x5d, 0x81, 0x48, 0x6a, 0x7d, 0x28, 0x32, 0x45, 0xf4, 0xb8, 0xd0, 0x86, 0x0a, 0x96, 0x80, 0x1e, 0x2a, 0x10, 0x5a, 0xb1, 0x88, 0x1d, 0x82, 0xe4, 0x67, 0x97, 0x5d, 0x57, 0xe6, 0x6d, 0x6d, 0x63, 0x1e, 0x5b, 0xfd, 0xcb, 0x44, 0x99, 0x5f, 0xcf, 0x77, 0x17, 0xc8, 0x95, 0xd1, 0x19, 0x18, 0xf3, 0xf9, 0x3a, 0xf2, 0x99, 0x41, 0x64, 0xb3, 0x65, 0x34, 0x9f, 0xe1, 0x22, 0x76, 0x99, 0xa2, 0x02, 0x82, 0x27, 0x25, 0xad, 0xa1, 0x3a, 0x09, 0x49, 0x72, 0x9b, 0x8d, 0x03, 0x9b, 0xca, 0x9a, 0x6d, 0x14, 0x54, 0xdb, 0x94, 0xb9, 0x85, 0xfc, 0xae, 0x94, 0xc6, 0xd6, 0xea, 0xe7, 0xa2, 0xb1, 0x3a, 0xc5, 0xd4, 0x8d, 0xc8, 0xca, 0x82, 0xe6, 0xec, 0x33, 0x22, 0xf9, 0x79, 0x86, 0x38, 0x16, 0x0b, 0x11, 0xa7, 0x01, 0xbf, 0x4b, 0xe3, 0xe4, 0xb9, 0x8a, 0xe1, 0x67, 0x7c, 0xf6, 0xb6, 0x79, 0xbd, 0x23, 0x8c, 0xb8, 0xd0, 0x44, 0x76, 0xb8, 0x8c, 0x32, 0xc2, 0x3e, 0x1f, 0xfa, 0x0b, 0x0d, 0x28, 0xf0, 0x38, 0x1d, 0xf8, 0xd1, 0x1d, 0x4c, 0xae, 0x58, 0xcd, 0x82, 0x45, 0xfa, 0xd4, 0x40, 0xf7, 0xd8, 0xd2, 0x6f, 0x75, 0xcb, 0xa9, 0xd9, 0xe6, 0x61, 0xb7, 0x4f, 0x17, 0x56, 0x34, 0x6d, 0x9a, 0xd5, 0x6d, 0x4a, 0xe7, 0x0f, 0x6d, 0xd2, 0xda, 0x29, 0xa9, 0xad, 0x6c, 0x2b, 0x20, 0x87, 0x2e, 0x21, 0x5e, 0x4e, 0x2a, 0xe1, 0xd0, 0x2d, 0x34, 0x38, 0x29, 0xa7, 0x11, 0xe8, 0x54, 0xc3, 0x58, 0xea, 0xac, 0x91, 0x9c, 0x4b, 0x71, 0x94, 0x2f, 0xf9, 0x03, 0x56, 0xba, 0x7f, 0x25, 0x2a, 0x92, 0x5d, 0xb0, 0xc2, 0xe9, 0x5d, 0x00, 0x08, 0x5d, 0x7f, 0x30, 0x39, 0xe2, 0x42, 0x1b, 0x6a, 0x30, 0x5c, 0xf4, 0x2b, 0xcc, 0x03, 0xa1, 0x62, 0xfd, 0x65, 0x59, 0xec, 0x90, 0x86, 0xa7, 0x06, 0x3a, 0x3b, 0x12, 0xf5, 0x7c, 0x24, 0x89, 0xa9, 0x1a, 0x2a, 0x47, 0x27, 0x91, 0x59, 0xda, 0x53, 0x0a, 0x58, 0xa8, 0xed, 0xa5, 0x52, 0x2d, 0x84, 0x4b, 0x93, 0x26, 0x74, 0x88, 0xdb, 0x84, 0x95, 0x56, 0xb5, 0x27, 0xa8, 0x31, 0x49, 0x45, 0x79, 0x14, 0xaa, 0x5b, 0x50, 0x0c, 0x93, 0x53, 0xb6, 0x3b, 0x23, 0xa0, 0xe7, 0x85, 0xd6, 0x3e, 0x01, 0x4f, 0x28, 0x7d, 0x5b, 0x85, 0xe5, 0x5f, 0x57, 0x3f, 0x00, 0xbb, 0xde, 0xbd, 0x6d, 0x69, 0x88, 0xcb, 0x4a, 0x23, 0x6c, 0xc1, 0x83, 0xe1, 0xb0, 0x19, 0xe4, 0x10, 0x32, 0xb3, 0xf7, 0xac, 0x8a, 0x5e, 0x67, 0xc6, 0x57, 0xe8, 0x4e, 0x43, 0xe3, 0xc9, 0x1c, 0x82, 0x4b, 0xe6, 0x5c, 0x1c, 0xd2, 0x65, 0xb0, 0x83, 0xca, 0xf2, 0xcf, 0x2d, 0x25, 0x44, 0xed, 0x05, 0x0f, 0x74, 0x09, 0x11, 0xd4, 0x0b, 0x55, 0x69, 0xd2, 0x27, 0xb4, 0xee, 0xb6, 0xe6, 0x33, 0xea, 0x48, 0xad, 0x54, 0x67, 0x87, 0xb2, 0xb5, 0xed, 0xa9, 0x36, 0x5d, 0x73, 0x32, 0x85, 0xaa, 0x73, 0x2c, 0x68, 0xa1, 0x0b, 0xe8, 0x66, 0xf0, 0x45, 0x5d, 0x14, 0xd2, 0x18, 0x9e, 0x65, 0x44, 0x1b, 0xa3, 0xe8, 0x78, 0xa5, 0x65, 0x6f, 0xa9, 0x72, 0xec, 0xa9, 0xb1, 0x60, 0x5a, 0x69, 0x76, 0x21, 0x3c, 0xb4, 0x78, 0x13, 0xdc, 0xe5, 0xb8, 0xbf, 0x3a, 0x2f, 0x7a, 0x9f, 0x15, 0xa7, 0x93, 0x3e, 0x9f, 0xb2, 0x13, 0x0d, 0x54, 0x26, 0xea, 0xdb, 0xd4, 0xd8, 0x42, 0xdd, 0xa9, 0xeb, 0x8a, 0x13, 0x24, 0x26, 0x6d, 0xaa, 0xa4, 0xb1, 0xb3, 0xfd, 0xba, 0xc6, 0x9c, 0x68, 0xf2, 0x7a, 0xd1, 0x75, 0x5d, 0x55, 0xc2, 0xbd, 0xac, 0xd1, 0xac, 0x52, 0x15, 0x45, 0xe7, 0x38, 0x2f, 0x1f, 0xe2, 0x2c, 0xcb, 0x6f, 0x93, 0x10, 0xc1, 0xc2, 0x0b, 0xbd, 0x2c, 0x3c, 0xee, 0x5f, 0xee, 0x5f, 0xde, 0x05, 0x7e, 0x70, 0xdd, 0x48, 0xa1, 0xf7, 0x74, 0x44, 0x76, 0xf1, 0xe0, 0x90, 0x0b, 0xbb, 0x70, 0xa7, 0xa7, 0xeb, 0x7b, 0x00, 0x7c, 0x97, 0x9e, 0xe4, 0xe7, 0xaf, 0x8f, 0x7d, 0xdd, 0x17, 0x55, 0xf6, 0x94, 0xf2, 0xa0, 0x22, 0xb1, 0xed, 0x3c, 0xaf, 0x91, 0x36, 0x2c, 0xdb, 0xda, 0x67, 0x4a, 0xdd, 0x60, 0x49, 0x2a, 0xd5, 0x28, 0x30, 0x42, 0xfc, 0x91, 0x42, 0x57, 0x46, 0x50, 0xee, 0x8a, 0x9f, 0x38, 0xd7, 0x34, 0x9b, 0xc6, 0x44, 0xf9, 0x3d, 0x33, 0x52, 0x07, 0x2c, 0xcd, 0xe4, 0x2f, 0xe6, 0xbd, 0x5e, 0x3d, 0x82, 0xc1, 0xda, 0x66, 0x10, 0x96, 0xe7, 0x8b, 0xb9, 0x60, 0x2b, 0xb1, 0x19, 0x4b, 0xf1, 0xb2, 0x5c, 0x00, 0x1d, 0xe6, 0xf2, 0xeb, 0x63, 0x5f, 0x69, 0xc0, 0x55, 0x45, 0xa7, 0x7f, 0x67, 0x0b, 0xf1, 0x0d, 0x9d, 0x2a, 0x3f, 0x1d, 0x46, 0x94, 0x10, 0x26, 0x76, 0x0e, 0x43, 0x43, 0xd7, 0x31, 0xe1, 0x61, 0x74, 0x63, 0x24, 0xcf, 0x8a, 0x40, 0xa7, 0x80, 0x7b, 0xa5, 0x28, 0x58, 0x67, 0x59, 0x9a, 0xca, 0x8c, 0x7b, 0x76, 0x2c, 0x63, 0xc8, 0x05, 0xcb, 0xb2, 0x3b, 0x30, 0xc4, 0x23, 0x0b, 0xb2, 0xf4, 0x2e, 0xba, 0x3b, 0x06, 0x0f, 0xd7, 0x8d, 0x3a, 0x79, 0xff, 0xfe, 0xcd, 0x9b, 0x1d, 0xc3, 0x26, 0x9a, 0xe7, 0x05, 0x7f, 0x69, 0xb0, 0xf2, 0xc5, 0xf4, 0xc3, 0x0a, 0x3f, 0x79, 0x03, 0xa2, 0x00, 0x9f, 0x27, 0xba, 0x86, 0x63, 0xec, 0xbf, 0x60, 0xf8, 0x5b, 0x2d, 0x9c, 0x9d, 0xf5, 0x57, 0x64, 0xf6, 0x00, 0x93, 0xfc, 0x46, 0xcc, 0x5e, 0xb4, 0x01, 0xc1, 0x46, 0x53, 0xca, 0xa2, 0x94, 0xb5, 0x44, 0x80, 0x52, 0xba, 0x4d, 0x73, 0xdd, 0x28, 0xad, 0xba, 0xbc, 0xc9, 0x59, 0x4b, 0xb9, 0x8f, 0x5c, 0x1a, 0x26, 0xb0, 0xab, 0xf2, 0x4c, 0x05, 0x39, 0x93, 0x26, 0x33, 0x7e, 0x52, 0xf0, 0x24, 0x91, 0x71, 0xc8, 0x68, 0x0a, 0x65, 0xcc, 0xae, 0xab, 0xab, 0xda, 0xec, 0xa2, 0x3b, 0x38, 0x56, 0xcf, 0xeb, 0x11, 0x8b, 0xf9, 0x4c, 0x3d, 0xb8, 0x86, 0x0d, 0x9c, 0x46, 0x12, 0x78, 0x9e, 0x0b, 0x68, 0xb1, 0x0d, 0xe2, 0x5f, 0xb0, 0xfb, 0xc2, 0xde, 0x50, 0xf4, 0xd8, 0x67, 0x46, 0x8e, 0x7a, 0xec, 0x0e, 0xd9, 0xea, 0xfd, 0xec, 0x04, 0x43, 0x7b, 0x4c, 0x41, 0xe6, 0x2a, 0x68, 0x96, 0xaa, 0x6d, 0xb1, 0x22, 0x1b, 0xec, 0x40, 0xe2, 0x8c, 0x8a, 0xae, 0x95, 0xca, 0x5b, 0x03, 0x1b, 0x65, 0x0c, 0xa3, 0x2a, 0x5b, 0xb4, 0xae, 0x13, 0xa1, 0xfd, 0x98, 0xc6, 0xc8, 0x05, 0x0f, 0x5f, 0x9c, 0x6b, 0x7e, 0xf3, 0x1e, 0xfb, 0xf0, 0xae, 0xd9, 0xcd, 0x54, 0x0a, 0xbc, 0x6c, 0xe5, 0xc1, 0xd0, 0x63, 0xf4, 0x25, 0x15, 0x23, 0x71, 0x67, 0xde, 0x5e, 0xb3, 0x4f, 0xbe, 0x3f, 0x6e, 0xa5, 0x48, 0xf4, 0xe5, 0x4d, 0x70, 0x9f, 0x1c, 0xe2, 0x94, 0x89, 0x30, 0x8c, 0x8e, 0x4e, 0x68, 0xa7, 0x25, 0x1d, 0x52, 0x57, 0xf2, 0x24, 0x8c, 0x93, 0x43, 0x00, 0x2d, 0x9c, 0x49, 0xba, 0x6e, 0x43, 0xb1, 0x90, 0x65, 0x4e, 0xf2, 0x42, 0x44, 0x7e, 0x0a, 0xb0, 0x7f, 0x08, 0x7e, 0x7c, 0xe0, 0xc1, 0xc3, 0x4f, 0xf7, 0xe1, 0x21, 0xf4, 0xb0, 0xec, 0xfc, 0x40, 0x25, 0x69, 0x22, 0x83, 0xbb, 0xdb, 0xe3, 0x43, 0xcc, 0x65, 0x44, 0x32, 0x33, 0x61, 0xfc, 0x57, 0x72, 0x3a, 0xdf, 0xec, 0x33, 0xb2, 0xcd, 0xe6, 0xb1, 0xa9, 0x69, 0x78, 0x1c, 0x5c, 0x4a, 0xc1, 0xb1, 0x2d, 0xad, 0x3d, 0xb9, 0x2b, 0x7d, 0x63, 0x71, 0x66, 0x17, 0xd8, 0x31, 0x3c, 0x25, 0xbb, 0xdd, 0xa1, 0xf7, 0xf6, 0x94, 0x2e, 0x13, 0x71, 0x26, 0x38, 0x55, 0xfb, 0xca, 0x38, 0x4b, 0xb2, 0xbb, 0x38, 0x0c, 0x0f, 0x34, 0x39, 0xf9, 0x28, 0xd3, 0x43, 0x66, 0x2b, 0xbc, 0x59, 0x00, 0xba, 0xab, 0xa8, 0xfd, 0x25, 0x92, 0xd1, 0x31, 0x8e, 0x12, 0x80, 0x44, 0x44, 0xd9, 0x7c, 0xcd, 0x05, 0x18, 0x95, 0x79, 0x48, 0xb3, 0x17, 0xec, 0x98, 0xc5, 0x49, 0x9a, 0x46, 0xf1, 0x31, 0x65, 0x59, 0x1c, 0xa5, 0xc2, 0x09, 0x62, 0x3f, 0xc3, 0x17, 0xf1, 0x75, 0xe9, 0x9c, 0x0f, 0xef, 0xa8, 0xd6, 0x63, 0x9c, 0x57, 0x77, 0x1a, 0x27, 0x0f, 0x7f, 0x56, 0x68, 0xcb, 0x65, 0xa2, 0x1c, 0x0e, 0xdd, 0x28, 0x38, 0xd8, 0xae, 0x69, 0x67, 0xf4, 0x27, 0x62, 0xc9, 0x83, 0xfb, 0xff, 0x2d, 0x0c, 0x81, 0xce, 0x61, 0x7b, 0x49, 0x75, 0x34, 0x6d, 0x59, 0x9d, 0x4a, 0x2b, 0x5e, 0x10, 0xbf, 0x4e, 0x1d, 0xcb, 0x9b, 0xba, 0xa3, 0xe9, 0xa0, 0x5d, 0x05, 0x61, 0xd2, 0xe4, 0x76, 0xa4, 0x42, 0xdd, 0xe5, 0x34, 0x7a, 0x9d, 0x06, 0xcb, 0x45, 0x50, 0x30, 0x27, 0x1a, 0xa1, 0x54, 0x40, 0xa4, 0x9d, 0x55, 0x09, 0xf2, 0xd1, 0xc8, 0x4e, 0x96, 0x4d, 0x49, 0xcd, 0x66, 0xf7, 0x3b, 0x38, 0x9e, 0xb1, 0x42, 0x67, 0xa9, 0x48, 0x43, 0x2c, 0x86, 0xeb, 0x42, 0xd9, 0x87, 0x0f, 0xaf, 0xa9, 0x47, 0x95, 0xd3, 0xe0, 0x50, 0xbe, 0xf6, 0x86, 0x5a, 0x01, 0x9d, 0xdf, 0xf0, 0xa0, 0x09, 0xfa, 0x54, 0x9f, 0x13, 0x49, 0xba, 0xc9, 0xa6, 0xb0, 0x97, 0x05, 0x1e, 0x29, 0x15, 0xef, 0x1d, 0x1d, 0xe7, 0xa7, 0x3b, 0xf7, 0xfe, 0xc1, 0xf5, 0x0e, 0x81, 0x13, 0x47, 0x11, 0xcb, 0x83, 0xd4, 0x63, 0x69, 0x6a, 0x12, 0xce, 0xef, 0xb4, 0xe0, 0xa0, 0x23, 0x61, 0x73, 0x60, 0xa6, 0x2e, 0x0a, 0x60, 0x23, 0x4c, 0x89, 0x40, 0x17, 0x99, 0x54, 0xbe, 0x62, 0xf0, 0x35, 0x8d, 0xcc, 0x33, 0xec, 0x3e, 0x3a, 0x1c, 0x8f, 0xd7, 0x55, 0xb1, 0xc0, 0x32, 0x2a, 0x8b, 0xe0, 0x3e, 0x9b, 0xbd, 0x89, 0x7b, 0xd3, 0xc8, 0xc6, 0x89, 0x53, 0x6f, 0xaa, 0xe3, 0xbb, 0x33, 0x1d, 0x2f, 0x81, 0x1d, 0xbb, 0xae, 0x33, 0xd9, 0xb9, 0x04, 0xce, 0x65, 0x79, 0x6c, 0x08, 0xb7, 0x93, 0x43, 0xe9, 0x6c, 0x25, 0x3f, 0xd7, 0xe0, 0x11, 0x67, 0x2a, 0x59, 0xb1, 0xb8, 0xbf, 0x35, 0x82, 0x43, 0x4b, 0x0a, 0x7b, 0x71, 0x8a, 0xa5, 0xc0, 0x45, 0x5b, 0x70, 0x40, 0x63, 0x49, 0x43, 0x86, 0x5a, 0xc8, 0x65, 0x00, 0x49, 0x5e, 0xd1, 0x59, 0x20, 0xd5, 0xf2, 0xd7, 0x39, 0xf4, 0x74, 0x4b, 0xbc, 0xac, 0x28, 0x54, 0x96, 0xe9, 0x04, 0x4f, 0xfc, 0xc8, 0xd3, 0x2b, 0xef, 0x21, 0xdd, 0xec, 0x72, 0xd8, 0x65, 0xa5, 0xbb, 0x2c, 0xd9, 0xb4, 0x42, 0xaa, 0x4c, 0x34, 0x01, 0x8a, 0xf7, 0x54, 0x34, 0xec, 0x2d, 0x34, 0x25, 0x7a, 0x71, 0x27, 0x33, 0x4c, 0xc6, 0x4e, 0x5b, 0x7b, 0xb4, 0xcb, 0xf6, 0x81, 0xdb, 0x44, 0x95, 0xa1, 0xb4, 0x8e, 0xa6, 0x64, 0xd5, 0x76, 0x27, 0x58, 0x46, 0x94, 0x31, 0xb7, 0xa9, 0x81, 0x9c, 0x3a, 0x6f, 0xe1, 0xce, 0xed, 0x30, 0xa6, 0x2a, 0xed, 0xe5, 0x5f, 0x34, 0x7b, 0xd8, 0xfe, 0x1a, 0x6c, 0x56, 0x0e, 0xe6, 0x95, 0x20, 0x27, 0x34, 0xea, 0xb5, 0xca, 0xe5, 0x29, 0xaf, 0xa4, 0x82, 0x1a, 0xe5, 0xe2, 0xcb, 0x1b, 0x12, 0xbf, 0xb5, 0x8a, 0xe5, 0x43, 0xf3, 0x76, 0x37, 0x00, 0x10, 0x80, 0xe1, 0x93, 0x6f, 0x63, 0xd7, 0xb4, 0x5d, 0x1d, 0x3b, 0xf5, 0x94, 0xfc, 0xf6, 0xa1, 0xaf, 0x27, 0x44, 0xb5, 0x7e, 0x15, 0xae, 0xc7, 0x9e, 0xee, 0x5d, 0x1a, 0x6e, 0xd2, 0x34, 0xa5, 0x79, 0xea, 0x51, 0x9e, 0xcb, 0x5c, 0x98, 0xf3, 0xd1, 0xd0, 0x7d, 0x8f, 0x2d, 0xbe, 0x28, 0x44, 0x22, 0xe8, 0x92, 0x22, 0xa9, 0x8b, 0x24, 0x4f, 0x21, 0x60, 0xb2, 0x26, 0xe3, 0xb9, 0xd2, 0x5c, 0x23, 0x00, 0xeb, 0xd4, 0xe8, 0x34, 0xd3, 0x3a, 0x29, 0xf3, 0xec, 0xc4, 0x74, 0x01, 0x75, 0x0d, 0x58, 0xc4, 0xa6, 0x12, 0x59, 0x40, 0x93, 0xe4, 0xf8, 0x3e, 0x39, 0xa6, 0x6e, 0x92, 0xb0, 0x24, 0x7a, 0xb8, 0x6e, 0x5e, 0x39, 0x99, 0xc5, 0xfd, 0xcb, 0x32, 0x5b, 0x48, 0x34, 0x74, 0xf9, 0x12, 0xdd, 0x61, 0x06, 0xf2, 0x8b, 0x98, 0x6c, 0xcc, 0xe8, 0xda, 0xa8, 0x86, 0xdd, 0xc7, 0x81, 0xf3, 0x4f, 0xa2, 0x65, 0xdc, 0x4b, 0x59, 0x6a, 0x43, 0xd7, 0xc6, 0x26, 0x67, 0x71, 0x0e, 0x9a, 0xfc, 0xdc, 0x14, 0x01, 0xc0, 0x21, 0x91, 0xb6, 0x21, 0xa4, 0xae, 0x03, 0x48, 0x32, 0xaa, 0xea, 0x06, 0xc1, 0xaf, 0x2b, 0x1a, 0x39, 0xac, 0xf2, 0x22, 0x87, 0x00, 0xd3, 0x51, 0x8b, 0x00, 0xcd, 0x75, 0xa4, 0x65, 0xa9, 0xe8, 0xba, 0x3d, 0x86, 0x05, 0x58, 0xd0, 0x4d, 0xb2, 0xb9, 0x81, 0x86, 0xd1, 0xec, 0x08, 0xa5, 0x4d, 0x0d, 0x32, 0x0f, 0xe1, 0x55, 0xbb, 0xeb, 0x03, 0x96, 0xc5, 0xce, 0xc7, 0xd2, 0x5b, 0x88, 0xde, 0x53, 0x3f, 0xd9, 0xea, 0x7b, 0x24, 0x59, 0xd6, 0xde, 0xb3, 0x25, 0xf8, 0x5f, 0xe9, 0x58, 0x9a, 0x16, 0x4e, 0xe7, 0xeb, 0x5b, 0x85, 0xba, 0x69, 0x6c, 0x5b, 0xea, 0x53, 0x23, 0xd9, 0xe3, 0xec, 0x50, 0x00, 0x88, 0x7a, 0xe4, 0x57, 0x16, 0x54, 0x6c, 0x2e, 0x58, 0xd3, 0xf9, 0x5f, 0x65, 0x2a, 0xea, 0x42, 0xed, 0xe8, 0x1c, 0x1a, 0xdb, 0x8f, 0x94, 0x1b, 0x8d, 0x37, 0x49, 0x6c, 0xbb, 0x67, 0x22, 0xe5, 0xf7, 0xf1, 0xfd, 0x5d, 0x80, 0x20, 0xc2, 0xae, 0xbb, 0xfc, 0xcb, 0xda, 0xb5, 0xf6, 0x97, 0x15, 0xce, 0x82, 0x4b, 0xa6, 0xc9, 0x77, 0x7a, 0x3b, 0x72, 0x9d, 0x86, 0x59, 0xb1, 0x5f, 0xa1, 0xf5, 0xf3, 0x85, 0x8e, 0xfe, 0xec, 0x4c, 0x5e, 0x52, 0xcb, 0xcd, 0x36, 0x78, 0xb8, 0xb5, 0x57, 0x19, 0x3f, 0xa5, 0xa9, 0x1e, 0x2f, 0xff, 0x25, 0xf5, 0x4c, 0x73, 0xcc, 0xb7, 0xf2, 0x38, 0xaa, 0x42, 0xb5, 0x03, 0xa3, 0x75, 0x4e, 0x97, 0x5b, 0x1a, 0x55, 0xd1, 0xe5, 0x7a, 0x79, 0x45, 0x13, 0xff, 0xb0, 0xa8, 0x15, 0xb4, 0x99, 0x8a, 0x95, 0x2a, 0x05, 0xe5, 0x81, 0xaf, 0xf5, 0xd7, 0x87, 0x1d, 0xa8, 0x20, 0x0d, 0x02, 0x75, 0x97, 0xfe, 0x32, 0x2d, 0xd4, 0x2d, 0x37, 0x52, 0x83, 0x9c, 0x19, 0x2e, 0x08, 0x55, 0x5f, 0xbb, 0xec, 0x77, 0x9e, 0x49, 0x8a, 0xd5, 0x5b, 0x56, 0x1b, 0xfe, 0xb2, 0x57, 0x89, 0xe4, 0x4f, 0xf4, 0x97, 0x26, 0xba, 0xda, 0xe4, 0x9b, 0x6d, 0x92, 0xa0, 0xf6, 0x7d, 0x28, 0x66, 0x52, 0x69, 0x65, 0x4d, 0x97, 0x9a, 0xc1, 0xaa, 0x54, 0x57, 0x39, 0x8d, 0x85, 0x66, 0x09, 0xf6, 0x1d, 0xe1, 0x0f, 0x48, 0x63, 0x1e, 0x94, 0xa7, 0xed, 0x32, 0x8e, 0xcc, 0x0f, 0x58, 0x72, 0x7b, 0x73, 0x5d, 0x75, 0xa9, 0xb5, 0x8b, 0x34, 0xe4, 0x85, 0xd3, 0x29, 0xf4, 0xea, 0xba, 0x2b, 0x2c, 0x9b, 0x2e, 0x60, 0x55, 0x20, 0xf8, 0xa0, 0xc1, 0x5f, 0xbb, 0x15, 0x71, 0x1e, 0x20, 0x9e, 0x1f, 0x17, 0x22, 0xad, 0x3b, 0x71, 0x7e, 0x6c, 0x6f, 0x3c, 0x6f, 0xbd, 0xd0, 0xf5, 0x63, 0xe7, 0x44, 0xfb, 0x08, 0xfe, 0x56, 0x49, 0x77, 0x96, 0xe7, 0xd7, 0x76, 0xd8, 0x1a, 0x2d, 0xc7, 0x86, 0x6e, 0x7d, 0x84, 0xdb, 0x72, 0x2a, 0x24, 0x38, 0x9d, 0xb2, 0x3c, 0x57, 0x19, 0x35, 0x46, 0x73, 0x99, 0x31, 0x44, 0xb5, 0xc3, 0x75, 0x75, 0x54, 0x1f, 0x5a, 0x1a, 0x12, 0xda, 0x0f, 0xf0, 0xd0, 0x4a, 0x47, 0x7d, 0x3e, 0xcd, 0x42, 0xc5, 0xa2, 0x5b, 0x1c, 0x07, 0x80, 0xde, 0xf7, 0x2b, 0xa3, 0x62, 0xa4, 0x81, 0xcf, 0x5f, 0xa4, 0x80, 0x8b, 0x6a, 0x9b, 0x85, 0xd7, 0x6c, 0xe3, 0xba, 0xdb, 0xc7, 0xc9, 0xe4, 0x4f, 0x17, 0x75, 0xda, 0x7e, 0x89, 0x74, 0x5b, 0x77, 0x75, 0x6b, 0x4a, 0x6a, 0x7a, 0xa4, 0x21, 0x26, 0x25, 0x8d, 0xed, 0xa5, 0xc9, 0xc4, 0x55, 0xc5, 0xe9, 0xe5, 0x16, 0x9e, 0xa3, 0x29, 0xb6, 0x79, 0x78, 0x92, 0x15, 0x07, 0x6c, 0x82, 0x9a, 0xd1, 0x7c, 0xca, 0x38, 0x7b, 0x36, 0xb5, 0xfd, 0x9c, 0xbf, 0xc8, 0x2e, 0xa8, 0x4b, 0xaa, 0x95, 0xed, 0x7d, 0x88, 0x31, 0xa8, 0x65, 0x9a, 0x04, 0xed, 0x02, 0x15, 0x27, 0x40, 0x23, 0x38, 0xd5, 0x3a, 0x71, 0xc3, 0x3f, 0xdf, 0x6a, 0x8f, 0xf7, 0xe0, 0xda, 0x41, 0xe5, 0x8f, 0xb3, 0x4c, 0xce, 0x5b, 0xf1, 0xe5, 0x56, 0x2b, 0xf0, 0x74, 0x53, 0xf1, 0x76, 0x10, 0x01, 0x16, 0x5f, 0x97, 0xb9, 0xad, 0xcb, 0xb1, 0x97, 0xdb, 0x3c, 0xf6, 0xd4, 0x51, 0x8d, 0x4b, 0x49, 0x83, 0xcb, 0x33, 0x44, 0xe5, 0xa6, 0xaa, 0xf2, 0x4c, 0xea, 0x58, 0x18, 0xc9, 0xb4, 0xa0, 0x56, 0xb3, 0xab, 0x26, 0x8e, 0x7d, 0xe8, 0xe8, 0x96, 0x03, 0x9a, 0x0b, 0xea, 0x32, 0x1a, 0x34, 0xcc, 0xd7, 0x85, 0x39, 0x93, 0xe3, 0x0d, 0xd0, 0x98, 0x6c, 0xe8, 0x47, 0x46, 0x97, 0x3b, 0xd2, 0x80, 0xf9, 0x4f, 0xd7, 0xe2, 0x30, 0x11, 0xdb, 0x10, 0x78, 0xcf, 0xa7, 0x53, 0x45, 0x97, 0x33, 0x9c, 0x49, 0x5d, 0xaa, 0xa2, 0xee, 0xda, 0x13, 0x55, 0xde, 0x77, 0x5d, 0x7d, 0xee, 0xba, 0x36, 0xec, 0x60, 0x05, 0xcb, 0x4f, 0xba, 0x85, 0x4e, 0xcb, 0x43, 0x79, 0x23, 0x25, 0x42, 0x17, 0xcb, 0xa1, 0xa1, 0x55, 0x2a, 0x32, 0x91, 0xdc, 0x26, 0x61, 0x92, 0xa5, 0x11, 0x16, 0xdd, 0xd1, 0x89, 0x42, 0x79, 0xf4, 0x23, 0x96, 0x1c, 0xef, 0x83, 0xe3, 0x6f, 0x26, 0xf5, 0xcf, 0xac, 0xc5, 0xee, 0x7d, 0xb3, 0x73, 0x48, 0x7e, 0xb1, 0x7e, 0x72, 0xd9, 0x68, 0x68, 0x4c, 0xa8, 0xb7, 0xf8, 0x13, 0x8d, 0x79, 0xf2, 0x7b, 0x80, 0x25, 0x8d, 0xd7, 0xa4, 0x85, 0xb9, 0x8e, 0x17, 0x1a, 0xab, 0xbc, 0xdd, 0x69, 0x49, 0x3e, 0xb3, 0xa3, 0xad, 0xe1, 0x18, 0x06, 0x14, 0x29, 0x00, 0xe3, 0x0d, 0xd5, 0x11, 0xb5, 0x88, 0x4b, 0x16, 0x3c, 0xf4, 0xe3, 0xda, 0x6c, 0x9b, 0xb0, 0xb5, 0x05, 0x6f, 0x34, 0x41, 0xa7, 0xea, 0xca, 0x0a, 0xab, 0xd8, 0x9c, 0xea, 0xae, 0x36, 0xd8, 0x65, 0x15, 0xe2, 0x59, 0x65, 0x8a, 0xbc, 0xa2, 0x5b, 0xdd, 0x4d, 0x61, 0x0a, 0x9a, 0x13, 0x2a, 0xa1, 0x06, 0x8e, 0xf7, 0xc7, 0xeb, 0x8e, 0xfc, 0xac, 0x5d, 0xf3, 0xda, 0x33, 0xf8, 0x8a, 0xb9, 0x94, 0xb5, 0x19, 0x67, 0xdf, 0xf1, 0x8c, 0x61, 0x76, 0x1e, 0x17, 0x74, 0xca, 0xe2, 0xad, 0xd8, 0x6b, 0x66, 0x58, 0x7d, 0x03, 0xbd, 0x39, 0x98, 0xc7, 0x39, 0x6a, 0x15, 0x20, 0x8c, 0x4a, 0xc4, 0x4c, 0x2d, 0x2c, 0x8b, 0x02, 0x49, 0xb7, 0x05, 0x7d, 0xcd, 0xc7, 0x9e, 0xe8, 0xc2, 0x36, 0x70, 0x6e, 0x97, 0xb9, 0xb5, 0x0d, 0xb7, 0x17, 0xca, 0x56, 0x35, 0x68, 0x53, 0x6b, 0x27, 0x5e, 0xeb, 0x46, 0x34, 0x1d, 0xd8, 0xa1, 0xbd, 0xdc, 0x02, 0x31, 0x0f, 0x9f, 0x10, 0x4f, 0xd4, 0xec, 0x24, 0xe1, 0x47, 0x04, 0xb1, 0xeb, 0xfc, 0xf5, 0xaa, 0x43, 0x6c, 0x5e, 0x17, 0xb3, 0x1a, 0xac, 0xbb, 0xc9, 0x01, 0x04, 0x52, 0xf4, 0x02, 0xcb, 0x60, 0xfe, 0x65, 0xa2, 0xf6, 0x82, 0xd9, 0xa1, 0x8b, 0x02, 0x40, 0xb4, 0x48, 0xb6, 0x4c, 0xd3, 0x46, 0xa6, 0x6c, 0x8d, 0x98, 0xdd, 0x58, 0xda, 0x26, 0xb0, 0xed, 0xf5, 0x95, 0x36, 0x70, 0x51, 0xe2, 0xa3, 0x7c, 0x3c, 0x5f, 0xb1, 0x1b, 0x8c, 0x8a, 0x40, 0xda, 0xee, 0x63, 0x3d, 0x08, 0xd9, 0x4b, 0x63, 0x93, 0x4a, 0xeb, 0xc3, 0xa2, 0xa9, 0xcb, 0x13, 0xcc, 0x69, 0x62, 0x3c, 0xe1, 0xb7, 0x52, 0x9a, 0x52, 0xcb, 0x34, 0x00, 0x30, 0xf2, 0xeb, 0xee, 0x8e, 0xb2, 0x76, 0x19, 0xba, 0x3a, 0x69, 0xc5, 0xbb, 0x67, 0x74, 0x65, 0x03, 0x8d, 0x5c, 0x9f, 0x7c, 0x8f, 0xad, 0x3d, 0xa4, 0xf2, 0x48, 0xd7, 0x09, 0x4e, 0x74, 0x29, 0x4c, 0xcf, 0x7a, 0xe7, 0xe2, 0x3c, 0x9e, 0xfb, 0x51, 0x02, 0x87, 0xee, 0xeb, 0xa9, 0xeb, 0xa7, 0x0a, 0xd3, 0xda, 0x56, 0xe6, 0x58, 0xde, 0xdb, 0x7c, 0x04, 0x48, 0x8b, 0xec, 0xf5, 0xe3, 0xfc, 0x85, 0xa7, 0xbb, 0x1c, 0x9a, 0x8f, 0x05, 0xde, 0x36, 0x1a, 0x58, 0x92, 0x4c, 0x63, 0x6b, 0xe8, 0xc2, 0xa2, 0xf2, 0x5c, 0x17, 0x95, 0xe2, 0xba, 0xc8, 0xf2, 0xeb, 0x26, 0x8d, 0x7d, 0x78, 0xf5, 0xf6, 0xed, 0xfb, 0x57, 0x94, 0xda, 0x36, 0x17, 0xc6, 0xe9, 0x2a, 0x11, 0xc6, 0xc6, 0xcb, 0x7a, 0x71, 0xd9, 0x4a, 0xcd, 0x48, 0xdc, 0x9d, 0x20, 0x53, 0xe8, 0xf6, 0xf3, 0x95, 0xad, 0xde, 0xc5, 0x1d, 0x96, 0x71, 0xf4, 0x5d, 0x33, 0x0e, 0x76, 0x1e, 0x97, 0x39, 0x6f, 0xcc, 0x89, 0x12, 0x6f, 0xc5, 0xb9, 0xcd, 0xbb, 0xf6, 0xdc, 0xd5, 0x27, 0x99, 0xc3, 0x69, 0x05, 0x6f, 0xbb, 0xb6, 0x8b, 0xb1, 0xb6, 0x9a, 0xe3, 0x29, 0x4b, 0x7e, 0xc8, 0x8e, 0xfa, 0x98, 0x41, 0x6d, 0x81, 0xdd, 0xcb, 0x73, 0x2e, 0x45, 0xd8, 0xa4, 0xc6, 0x94, 0x7e, 0xca, 0x4a, 0x9d, 0xa4, 0x49, 0x14, 0x65, 0x87, 0xc4, 0xbb, 0xe7, 0xf7, 0xd2, 0x81, 0x70, 0x0e, 0x7e, 0x8a, 0xd3, 0x63, 0x74, 0x7c, 0xb8, 0xae, 0x63, 0xc7, 0x5a, 0xf6, 0x7a, 0xe7, 0x53, 0xb9, 0xd4, 0x44, 0x85, 0xb3, 0xd3, 0x74, 0x99, 0xb6, 0x6b, 0x1c, 0x16, 0x0e, 0xe5, 0x35, 0x7b, 0x17, 0x7a, 0x15, 0xc0, 0xb8, 0x7e, 0x5e, 0x3c, 0xbb, 0x07, 0x2d, 0xc7, 0xef, 0xf7, 0x64, 0x3b, 0x92, 0x2c, 0xda, 0xd3, 0xc9, 0x1e, 0x36, 0x58, 0xd7, 0x41, 0xa9, 0x74, 0x9d, 0xdd, 0x56, 0xf6, 0xca, 0x39, 0x9a, 0x1e, 0x54, 0xb7, 0xdd, 0xb9, 0x6d, 0x3b, 0x51, 0xca, 0x53, 0x58, 0x9d, 0xb1, 0xe8, 0xba, 0xa6, 0x36, 0xdd, 0x29, 0x01, 0x8e, 0x9e, 0x8d, 0x80, 0xaf, 0x45, 0x97, 0x81, 0x46, 0x2b, 0x23, 0xec, 0x40, 0xa5, 0xc4, 0x0f, 0x82, 0xf0, 0x2b, 0x0d, 0x8d, 0x7f, 0x0f, 0xeb, 0xde, 0xbd, 0x6e, 0x77, 0x8b, 0xcb, 0x16, 0x7f, 0x35, 0x66, 0x1a, 0x3c, 0xcf, 0x9d, 0xc4, 0x62, 0x0b, 0x31, 0x17, 0xe1, 0x0e, 0x17, 0xe3, 0xb8, 0xce, 0x6a, 0x5b, 0xe6, 0xe6, 0x49, 0x20, 0x98, 0xf9, 0x8b, 0x2f, 0x1c, 0xa0, 0xe5, 0x3e, 0x12, 0xbe, 0xa8, 0xb4, 0x5f, 0xdc, 0x87, 0x8a, 0x1f, 0x8f, 0x3c, 0x96, 0x87, 0x7d, 0x1a, 0x84, 0x7e, 0x10, 0x8b, 0xe4, 0x8f, 0xde, 0x5d, 0x7c, 0x7f, 0x1f, 0x27, 0x3f, 0x1e, 0xfd, 0xfb, 0xe0, 0x27, 0xff, 0xee, 0x3b, 0xff, 0xe6, 0x0f, 0x7f, 0xf8, 0x3e, 0x79, 0x08, 0x52, 0x3f, 0xbb, 0xbf, 0x95, 0xbf, 0xb1, 0x8e, 0xfb, 0x2b, 0xad, 0xfa, 0xdf, 0x8c, 0x22, 0x6f, 0xba, 0x0f, 0x3b, 0x07, 0x88, 0xe1, 0xaf, 0x70, 0x16, 0x73, 0xa0, 0xa2, 0x17, 0xba, 0x85, 0x79, 0x72, 0x2e, 0xf3, 0xec, 0x4e, 0x3e, 0x02, 0x81, 0xcb, 0x06, 0x7f, 0xc4, 0xd7, 0x9f, 0x96, 0x9a, 0xd2, 0x9a, 0xa4, 0x2d, 0xa6, 0x08, 0x10, 0x4f, 0xb6, 0xfa, 0x61, 0xbb, 0x02, 0x40, 0xd6, 0x5b, 0xbe, 0xdb, 0x92, 0x60, 0x9d, 0x95, 0x6d, 0xf1, 0x78, 0x9b, 0xfd, 0xc9, 0x42, 0x0a, 0xdd, 0x43, 0xa7, 0x11, 0xfb, 0x80, 0x8b, 0x1a, 0x5c, 0xbf, 0xcc, 0xe9, 0x3c, 0xda, 0xce, 0x27, 0x48, 0x72, 0xba, 0x81, 0x4e, 0x27, 0xb1, 0x16, 0x69, 0x2c, 0x39, 0xcf, 0xae, 0xd3, 0xcf, 0xd6, 0xae, 0xc1, 0x40, 0x3a, 0xcf, 0x24, 0x91, 0x07, 0xba, 0x4a, 0xdb, 0xf3, 0xcc, 0x8a, 0x1d, 0xe5, 0xcf, 0xbe, 0x0b, 0x57, 0x0e, 0x17, 0x5a, 0x9f, 0x6c, 0x1d, 0x3f, 0x6b, 0xd7, 0x2c, 0xcb, 0x53, 0x55, 0x3d, 0x36, 0x82, 0x60, 0x47, 0xd9, 0x5a, 0xee, 0x46, 0xd9, 0x83, 0x32, 0x0b, 0x93, 0x79, 0x63, 0x2b, 0x83, 0xe9, 0xda, 0x17, 0xba, 0xc1, 0xde, 0x5e, 0xf3, 0x00, 0xa0, 0xaf, 0x6b, 0xc3, 0xec, 0x44, 0x1d, 0x6e, 0xe8, 0x30, 0x8d, 0x6e, 0x36, 0x86, 0x2a, 0x6b, 0x4c, 0xa6, 0xb3, 0x13, 0xe8, 0x23, 0xe2, 0x21, 0x53, 0xa0, 0x55, 0x54, 0xc9, 0xfd, 0x5c, 0xba, 0xf4, 0x39, 0x7f, 0xbd, 0xea, 0x76, 0x7c, 0xf1, 0x2e, 0x17, 0x17, 0xd4, 0x02, 0xaa, 0x6c, 0x59, 0xc0, 0xae, 0xe8, 0x72, 0x25, 0xec, 0xae, 0x71, 0xa6, 0xba, 0x9c, 0x15, 0x0a, 0xda, 0xc5, 0x92, 0xbc, 0x80, 0x5d, 0x79, 0xde, 0x23, 0xea, 0x13, 0x63, 0x04, 0xfa, 0x29, 0xea, 0x68, 0x39, 0x6d, 0x2c, 0x51, 0xd2, 0x20, 0x46, 0xb2, 0x4a, 0xd7, 0x8a, 0x2e, 0x79, 0xa4, 0xf1, 0xd0, 0x89, 0xd6, 0x50, 0xd9, 0x42, 0x49, 0xa5, 0x69, 0xd6, 0x22, 0x8d, 0x5e, 0x53, 0x78, 0xa9, 0xd6, 0x74, 0x55, 0xb5, 0x28, 0x0d, 0xa7, 0x5a, 0x38, 0x0a, 0x62, 0x42, 0xd1, 0xb5, 0x1d, 0xc2, 0xc4, 0x99, 0xb8, 0x0f, 0xfd, 0x34, 0x8a, 0x92, 0x2b, 0x19, 0xbe, 0xb5, 0x6b, 0x5e, 0x8d, 0x37, 0x30, 0x1f, 0x14, 0x03, 0x44, 0x83, 0xaa, 0x73, 0x06, 0x2c, 0x4d, 0x84, 0xed, 0x81, 0x81, 0x0d, 0xc3, 0x62, 0x08, 0x34, 0x9a, 0x88, 0x24, 0x48, 0xe1, 0x6c, 0x76, 0x51, 0xba, 0xe3, 0xb1, 0xc1, 0xd6, 0x50, 0xa6, 0x03, 0x52, 0x45, 0x42, 0x98, 0xd0, 0x47, 0x38, 0x45, 0xda, 0x72, 0x52, 0x1a, 0xb4, 0xd3, 0x2a, 0x59, 0x68, 0x8d, 0xaf, 0x20, 0x51, 0x72, 0x05, 0xf6, 0x1e, 0x24, 0xe2, 0xa5, 0xe2, 0x0a, 0x1a, 0x8c, 0xd2, 0x8a, 0x85, 0xca, 0xb3, 0x0c, 0xf6, 0x9b, 0x3b, 0x9a, 0x53, 0x40, 0x2d, 0x33, 0x59, 0x16, 0x70, 0xdb, 0xf3, 0x72, 0x65, 0x94, 0x7e, 0xf3, 0xe6, 0xcd, 0x8e, 0xa6, 0x21, 0x83, 0x0c, 0x13, 0xa5, 0x87, 0x68, 0x71, 0x7a, 0x6f, 0x1c, 0xcc, 0x68, 0x2e, 0xb4, 0xa5, 0xe8, 0x48, 0x8c, 0xd3, 0x65, 0x8f, 0x0e, 0x16, 0xe6, 0x70, 0x99, 0xbe, 0x38, 0xce, 0xb4, 0x91, 0xea, 0xb4, 0x15, 0x1a, 0x15, 0xcd, 0xa3, 0x5e, 0xd9, 0xce, 0x34, 0xa5, 0xbd, 0x49, 0x5b, 0xdb, 0xb1, 0x84, 0x54, 0x38, 0x0c, 0x2a, 0x09, 0xc1, 0x52, 0x51, 0x61, 0x95, 0x32, 0x27, 0xd0, 0x4b, 0x4e, 0x77, 0x66, 0xe7, 0x9a, 0x4b, 0xad, 0x79, 0x52, 0xd0, 0xc0, 0xb8, 0x3c, 0x96, 0x32, 0x32, 0x22, 0xc9, 0xa8, 0x1d, 0xe9, 0xca, 0x28, 0x4d, 0x76, 0x79, 0x9c, 0x4d, 0x6c, 0x9c, 0xa9, 0x22, 0x62, 0x30, 0x34, 0xa5, 0x64, 0x30, 0x34, 0x6b, 0x12, 0xe1, 0x8d, 0xce, 0x66, 0xfd, 0x91, 0x68, 0xff, 0xc0, 0x57, 0x42, 0xcd, 0xa7, 0x8c, 0x07, 0x5d, 0x6f, 0x90, 0x6f, 0xf4, 0x3e, 0x23, 0x12, 0xf2, 0x68, 0xd9, 0x56, 0x93, 0x49, 0xc5, 0x1b, 0x24, 0x9d, 0x6b, 0x55, 0x1a, 0x9b, 0x7b, 0x6b, 0x68, 0xc0, 0x18, 0xd6, 0x58, 0x5e, 0x73, 0x3f, 0xd7, 0x40, 0x0c, 0xea, 0x19, 0xe6, 0x8a, 0x1b, 0x29, 0x79, 0x0e, 0x7f, 0xd6, 0x8a, 0x6a, 0x81, 0x7f, 0x3a, 0xfa, 0x2c, 0xfe, 0x3e, 0x4e, 0xe3, 0x28, 0xe3, 0xe9, 0xb3, 0xc7, 0xb4, 0xcf, 0xf8, 0xeb, 0x6d, 0xf3, 0x66, 0x07, 0x62, 0xe8, 0x20, 0x6c, 0x71, 0xee, 0x8e, 0x74, 0x2a, 0xcb, 0x01, 0xf8, 0x34, 0xd4, 0x74, 0xb5, 0x57, 0x2e, 0xad, 0x97, 0x65, 0x5e, 0x10, 0xbe, 0x2f, 0xa0, 0x28, 0xdb, 0x58, 0x3f, 0x00, 0x22, 0x75, 0xb6, 0x6c, 0xdd, 0xeb, 0xb6, 0xd8, 0xb9, 0xd9, 0xc6, 0x7a, 0xd8, 0xee, 0x16, 0xd6, 0xd6, 0x0c, 0xcb, 0xab, 0xb0, 0xd7, 0x9a, 0xd5, 0x6d, 0x0c, 0x40, 0x54, 0xa5, 0x1d, 0x14, 0x94, 0x57, 0x74, 0x2f, 0x47, 0x6d, 0xaa, 0x2e, 0x34, 0x65, 0xd1, 0x66, 0x79, 0x01, 0xdc, 0xa0, 0xd3, 0x67, 0x5d, 0x1a, 0x56, 0x96, 0x26, 0xc0, 0x1e, 0x13, 0xd0, 0xd0, 0x3c, 0x4b, 0x19, 0x67, 0xbf, 0xbb, 0xce, 0x5f, 0x64, 0xd7, 0xe0, 0x39, 0xd3, 0x42, 0x49, 0x45, 0x8f, 0xea, 0xa6, 0xe8, 0x4a, 0xac, 0xde, 0xa7, 0x51, 0xb5, 0xde, 0xbc, 0xd0, 0x51, 0x6d, 0x2f, 0x20, 0x5f, 0x1c, 0xd7, 0xb7, 0x63, 0x5d, 0x9f, 0x8e, 0x9f, 0x29, 0xe3, 0xb1, 0xf5, 0xb5, 0x7c, 0x3c, 0x61, 0x79, 0x6a, 0xd1, 0x6c, 0x3e, 0x3e, 0x6a, 0x09, 0xa7, 0x15, 0x00, 0x90, 0xda, 0xf6, 0xfd, 0x11, 0xc6, 0x6f, 0x75, 0xc1, 0x35, 0x27, 0x08, 0xc9, 0x65, 0x1a, 0x33, 0x4a, 0xdc, 0x51, 0xbb, 0x04, 0xa3, 0x31, 0x3a, 0x5c, 0xc5, 0x5a, 0x49, 0xaa, 0x8b, 0x39, 0x5c, 0xeb, 0xaf, 0xee, 0xed, 0x6e, 0x9e, 0xbc, 0x81, 0x5a, 0x4d, 0x99, 0xd7, 0x1b, 0xce, 0x98, 0x63, 0x27, 0xf7, 0xd1, 0x4d, 0xd3, 0x10, 0x6a, 0x0e, 0x63, 0x7c, 0xfa, 0x45, 0xa2, 0x6a, 0x9f, 0x57, 0xc5, 0x19, 0xef, 0xda, 0x50, 0x4e, 0xfe, 0xb4, 0x71, 0xde, 0x6d, 0xf5, 0xe5, 0x74, 0x16, 0xbd, 0xc1, 0xe3, 0xd3, 0xf8, 0x3b, 0x65, 0x4b, 0x86, 0xa5, 0xed, 0x26, 0x6e, 0x4b, 0x0a, 0x64, 0x26, 0xa7, 0x74, 0x5c, 0x7d, 0x94, 0xf2, 0x1e, 0x66, 0xc8, 0x88, 0xa6, 0xea, 0x83, 0xde, 0x1b, 0x21, 0x21, 0x33, 0xa1, 0xa2, 0x8f, 0x31, 0xe7, 0xcf, 0x65, 0xde, 0x9e, 0xf3, 0x17, 0xec, 0xf2, 0xc6, 0x71, 0x84, 0x46, 0xc1, 0xd2, 0x63, 0x76, 0x98, 0x1f, 0x75, 0x06, 0xf7, 0x23, 0x07, 0x05, 0x9e, 0x97, 0x99, 0xaf, 0xde, 0x2f, 0xc7, 0x25, 0xef, 0xe9, 0xea, 0x0c, 0xfb, 0x9b, 0xc7, 0xde, 0xe2, 0xb6, 0x54, 0xd1, 0xb6, 0x64, 0xe6, 0x74, 0x0d, 0x5b, 0xdb, 0x6c, 0xa5, 0x62, 0xaa, 0xc1, 0x02, 0x2c, 0x6c, 0x96, 0x9b, 0xa8, 0x70, 0x6d, 0xef, 0x86, 0xb5, 0xc5, 0xf7, 0x04, 0x1e, 0xf8, 0xb6, 0xa1, 0x8c, 0x5c, 0x5e, 0xb5, 0x3a, 0xe7, 0xd4, 0x27, 0x9d, 0x21, 0x0e, 0x28, 0xba, 0xb5, 0x23, 0xbb, 0x63, 0x49, 0x9c, 0x5e, 0x75, 0x2c, 0xf6, 0xe1, 0xed, 0xeb, 0x6e, 0xc7, 0x2e, 0xc3, 0xc7, 0xfc, 0xd3, 0xd7, 0x53, 0x88, 0x97, 0x81, 0xe0, 0x84, 0x88, 0xff, 0xe2, 0xc3, 0xac, 0xe9, 0x26, 0x29, 0xab, 0xa3, 0x9d, 0xc0, 0x84, 0x65, 0x24, 0x4c, 0xc1, 0x73, 0x6c, 0x75, 0x41, 0x91, 0xe8, 0x28, 0x73, 0x29, 0x8b, 0x3c, 0xbe, 0xa7, 0x3b, 0x0d, 0x74, 0xe1, 0xd1, 0xdc, 0x8b, 0x5b, 0xc9, 0x03, 0x79, 0x0b, 0x2a, 0x75, 0x8c, 0x83, 0xdf, 0x4c, 0xa5, 0x88, 0x4b, 0xfd, 0x67, 0x57, 0x8d, 0xf5, 0xb0, 0xb6, 0x89, 0x01, 0x2c, 0x71, 0x18, 0x2e, 0x9c, 0x0f, 0x03, 0xbc, 0xd5, 0xd3, 0xb0, 0x8b, 0x11, 0xdb, 0x0a, 0x9f, 0x0c, 0xe3, 0x45, 0xd0, 0x0d, 0x36, 0x1c, 0xa8, 0x42, 0xa7, 0x2f, 0x58, 0x96, 0x88, 0x00, 0xfd, 0xfe, 0xb7, 0xbf, 0xc5, 0xbf, 0xf7, 0xe3, 0xea, 0x19, 0xf9, 0x1f, 0x68, 0xd6, 0xba, 0x60, 0x6e, 0x4f, 0xb3, 0x91, 0xa9, 0x64, 0x7b, 0x45, 0x54, 0x7e, 0xbc, 0xd0, 0x60, 0xf9, 0xc5, 0xcc, 0xbb, 0x8f, 0x17, 0x13, 0xed, 0x53, 0xca, 0xe8, 0xa8, 0xed, 0x7e, 0xb9, 0xf2, 0x29, 0x0f, 0x4c, 0xe8, 0xd8, 0x6c, 0xda, 0xd9, 0x06, 0xe7, 0x5c, 0x13, 0x24, 0x96, 0x85, 0x29, 0x2b, 0x55, 0x16, 0xa7, 0xb2, 0xa2, 0xf3, 0x87, 0x53, 0x4d, 0x67, 0x2c, 0x34, 0x55, 0xcc, 0x24, 0x92, 0xff, 0x88, 0x5d, 0x26, 0x99, 0x34, 0xf7, 0xe1, 0x41, 0xc6, 0x2c, 0xf9, 0xb3, 0xfc, 0xcc, 0xb6, 0x7f, 0x75, 0xa5, 0xdf, 0x60, 0x5b, 0xcf, 0x97, 0xc5, 0xa1, 0x3b, 0xb1, 0x60, 0xdf, 0x65, 0x1e, 0x17, 0xf1, 0xec, 0x15, 0xb1, 0x1b, 0x07, 0x3e, 0x3d, 0xa5, 0x17, 0x49, 0x9d, 0x6d, 0xbd, 0x57, 0xcd, 0x76, 0x3f, 0x0a, 0x8d, 0x9a, 0x51, 0x12, 0x32, 0x9b, 0xca, 0x21, 0x10, 0x9c, 0xb5, 0x88, 0xa4, 0x66, 0x19, 0x0d, 0x40, 0x8a, 0x81, 0x0f, 0x3c, 0xce, 0x32, 0x2e, 0xb8, 0x89, 0x0d, 0x95, 0xf6, 0x29, 0x01, 0x1d, 0x16, 0x05, 0x87, 0x87, 0x63, 0x1a, 0x1e, 0x32, 0x1e, 0x1e, 0xd8, 0x93, 0x6d, 0xff, 0xe6, 0x57, 0x55, 0xe7, 0xfe, 0xb7, 0xf8, 0xed, 0xdd, 0xce, 0x60, 0xe9, 0x99, 0xd9, 0xb0, 0xfe, 0x62, 0xd8, 0xc8, 0xfc, 0x7e, 0xe8, 0x3d, 0xc1, 0xe8, 0xae, 0x6c, 0xea, 0x06, 0x71, 0x3c, 0x7c, 0x3d, 0x38, 0x90, 0x6c, 0x93, 0x8b, 0xa8, 0x60, 0x7a, 0xd8, 0x7c, 0xb9, 0x09, 0xbc, 0xf8, 0x7b, 0x16, 0x04, 0x74, 0x63, 0xed, 0xf1, 0x05, 0xe3, 0x3f, 0xa4, 0xd1, 0x1f, 0x82, 0xbb, 0x63, 0xc2, 0x0f, 0x0f, 0x37, 0x2f, 0xa2, 0x1f, 0x5f, 0xf8, 0x9e, 0x7b, 0xb8, 0x8d, 0xff, 0xf4, 0xc7, 0xc3, 0x5d, 0xf8, 0x10, 0x1e, 0xff, 0x7c, 0xff, 0x0d, 0x9b, 0xec, 0x53, 0xaf, 0x75, 0xcf, 0x58, 0xf6, 0x8c, 0xd7, 0xde, 0xed, 0xa8, 0xce, 0x9e, 0xaa, 0xf9, 0x10, 0x94, 0x3d, 0x46, 0x23, 0x40, 0x69, 0xb3, 0x21, 0x86, 0x81, 0x3d, 0x8e, 0x78, 0x15, 0x3b, 0x90, 0x2f, 0xe3, 0xe0, 0x8c, 0x3e, 0x65, 0x1d, 0x0d, 0x58, 0xc9, 0x7c, 0x93, 0x38, 0xf7, 0x47, 0xf7, 0xa7, 0x9b, 0x5b, 0xf6, 0xdd, 0xf7, 0xb7, 0xc9, 0x1f, 0xfd, 0xfb, 0x3d, 0x0b, 0xc2, 0xe8, 0x65, 0xf4, 0xa7, 0xf8, 0xc7, 0xc3, 0xc3, 0xc1, 0x0b, 0x82, 0x20, 0xf9, 0xee, 0xfe, 0xe5, 0x6f, 0x1b, 0xb4, 0xf8, 0x17, 0x2c, 0x33, 0xd7, 0x29, 0xce, 0x77, 0xaf, 0x3e, 0x80, 0x0d, 0xb3, 0x61, 0x99, 0x5d, 0x6f, 0x59, 0xa6, 0x79, 0xf2, 0x07, 0xff, 0x32, 0xae, 0x3e, 0x48, 0x63, 0x0f, 0x38, 0xf4, 0xbf, 0x68, 0x86, 0xfe, 0x38, 0x27, 0x7f, 0x9f, 0xb1, 0x4c, 0x0b, 0x95, 0x97, 0xf9, 0xf9, 0x5c, 0x00, 0xe4, 0x35, 0xc0, 0xbb, 0x90, 0xc0, 0x79, 0xd9, 0xd5, 0x4d, 0x8c, 0x58, 0x27, 0x8f, 0x6d, 0xa5, 0x8a, 0xa8, 0x60, 0xa5, 0x32, 0xea, 0x9c, 0xa7, 0xf2, 0xac, 0xcf, 0x59, 0x25, 0xeb, 0x42, 0xe6, 0x51, 0x25, 0xa3, 0x2c, 0xce, 0xd2, 0x24, 0x70, 0x83, 0x28, 0x7d, 0x38, 0xa4, 0x19, 0xff, 0x35, 0xeb, 0xfe, 0xc9, 0x75, 0x11, 0x9b, 0xa6, 0xb2, 0x8c, 0xcb, 0xe8, 0xf4, 0x30, 0x06, 0x50, 0xb2, 0xac, 0x2b, 0xcd, 0x4e, 0xa6, 0xa6, 0x5b, 0x77, 0x5e, 0xe9, 0x62, 0x7a, 0xbc, 0x46, 0x63, 0x6b, 0xdd, 0x2f, 0x7b, 0x1b, 0xc5, 0x96, 0xc1, 0xc7, 0xff, 0x06, 0xb5, 0x93, 0x99, 0x6d, 0xa2, 0xce, 0x23, 0x49, 0xae, 0xdb, 0x9f, 0x9b, 0xf4, 0xe9, 0xe2, 0xfa, 0xa6, 0xab, 0x8b, 0xaa, 0xe4, 0x9c, 0x32, 0xf8, 0x34, 0x15, 0xa2, 0x32, 0x2d, 0xcd, 0x82, 0x2a, 0x6d, 0x3b, 0x31, 0xc9, 0x97, 0x84, 0x86, 0x61, 0xeb, 0x3c, 0x4f, 0xb4, 0x04, 0x1f, 0x16, 0xc4, 0xf8, 0xaf, 0x3c, 0x53, 0x22, 0xbb, 0x86, 0xa9, 0x27, 0xed, 0xe5, 0x80, 0x13, 0x9a, 0x89, 0xee, 0x1d, 0x9a, 0x26, 0x8f, 0x26, 0x5b, 0xdb, 0xbb, 0x51, 0xa6, 0x95, 0x8d, 0x66, 0xe2, 0x9f, 0x0c, 0x1a, 0xb3, 0x05, 0x99, 0xaa, 0xa4, 0x6a, 0x31, 0x1a, 0xba, 0x5b, 0x3f, 0xa6, 0xa8, 0xe8, 0x42, 0xd5, 0xed, 0x48, 0xc9, 0x16, 0xf9, 0x89, 0xed, 0x38, 0xc2, 0x9e, 0xd9, 0xda, 0x18, 0x6e, 0xda, 0xc7, 0x39, 0xaf, 0x19, 0xf8, 0x48, 0x25, 0x6d, 0xae, 0x8e, 0x06, 0x11, 0x50, 0xfb, 0x9c, 0x81, 0xf0, 0x6c, 0x4e, 0xa6, 0xd5, 0xe6, 0x9c, 0x6a, 0x23, 0x33, 0x55, 0x3c, 0x6b, 0xd7, 0xb3, 0xfe, 0x7a, 0xbb, 0xc3, 0x5b, 0xe7, 0x74, 0x30, 0xe6, 0xfa, 0xbe, 0xd7, 0x4f, 0x23, 0x73, 0x67, 0xc7, 0xf7, 0x68, 0x2e, 0x8b, 0xe3, 0x5f, 0xb0, 0xdb, 0x7c, 0xea, 0xf8, 0x5e, 0xbd, 0x89, 0xad, 0x17, 0xef, 0xb1, 0xad, 0x8c, 0x18, 0xf1, 0x79, 0xeb, 0x8e, 0xb3, 0xa3, 0x4e, 0xb7, 0x8b, 0x7d, 0xb7, 0x03, 0xf6, 0xdc, 0x36, 0x41, 0xdb, 0xd2, 0xbe, 0x8d, 0x8e, 0xd8, 0xec, 0x1c, 0xe9, 0xe7, 0xaa, 0xed, 0x36, 0x03, 0xed, 0xc0, 0x5a, 0xba, 0x01, 0xbe, 0xae, 0xea, 0xaa, 0xa8, 0xe9, 0x34, 0x2d, 0x6f, 0x0a, 0xb9, 0x9d, 0x6f, 0xd2, 0x65, 0x61, 0x22, 0xbb, 0x36, 0x43, 0x40, 0x76, 0x21, 0x4c, 0x39, 0xcb, 0x44, 0x06, 0xd0, 0xfa, 0xf3, 0x1c, 0x20, 0xc9, 0x44, 0xb7, 0xbb, 0xfb, 0xd4, 0x3f, 0xe1, 0x4e, 0xb3, 0xf1, 0xfd, 0x71, 0x9e, 0x16, 0xa0, 0xca, 0x53, 0xdf, 0xf7, 0x3e, 0x7f, 0x6c, 0x45, 0x3d, 0xcb, 0xd3, 0xd6, 0x32, 0x7c, 0x7e, 0x7a, 0xaa, 0xcf, 0x12, 0xaa, 0x65, 0x4b, 0x34, 0xda, 0x36, 0xb3, 0xda, 0x56, 0x0c, 0x97, 0xf6, 0xec, 0xaf, 0xa6, 0x22, 0x62, 0x3a, 0x98, 0xe9, 0x68, 0x60, 0x0b, 0x9d, 0x6a, 0x76, 0x9a, 0x8e, 0xd9, 0x28, 0x89, 0x57, 0xe1, 0x17, 0x62, 0xca, 0xb3, 0xd2, 0x0f, 0xb0, 0x8b, 0xab, 0xfc, 0x4a, 0x7f, 0xbd, 0xa3, 0x91, 0xbb, 0x4e, 0x4f, 0x03, 0x49, 0xe0, 0xb3, 0x89, 0x71, 0x7f, 0xc0, 0xda, 0xf3, 0x2f, 0x1e, 0xf7, 0x1d, 0x22, 0x54, 0x3d, 0x98, 0xf1, 0xf8, 0xe5, 0x41, 0xe0, 0x3e, 0xb3, 0x79, 0x61, 0x8a, 0x62, 0x94, 0xee, 0x6d, 0xad, 0x22, 0xa3, 0xdc, 0x29, 0xd6, 0x13, 0x6d, 0xad, 0x90, 0xcc, 0xa2, 0x14, 0x71, 0xab, 0x8b, 0xd2, 0x4e, 0x91, 0x68, 0xb1, 0xc6, 0x6a, 0x18, 0x42, 0x37, 0xcf, 0xe9, 0x46, 0x56, 0x6d, 0xae, 0xc0, 0x15, 0xb3, 0x18, 0x8b, 0xce, 0x28, 0xad, 0x68, 0xdc, 0xba, 0xca, 0x24, 0x10, 0x89, 0x7a, 0x97, 0x04, 0x4f, 0x1f, 0x9e, 0x63, 0x8e, 0xcf, 0xf9, 0x8b, 0x6e, 0x20, 0xf2, 0x7b, 0x77, 0x46, 0xfc, 0x5d, 0x57, 0x7f, 0x80, 0x16, 0x83, 0x59, 0x30, 0x6e, 0x99, 0xe0, 0x21, 0x4e, 0x27, 0x4c, 0xab, 0xf3, 0xf9, 0x1d, 0x4b, 0x34, 0xd7, 0x43, 0x88, 0x72, 0xbb, 0xf6, 0xb6, 0x06, 0x29, 0x86, 0xac, 0xa7, 0x51, 0x02, 0xb0, 0x12, 0xea, 0x12, 0x72, 0x58, 0x14, 0xf7, 0x26, 0x93, 0x7e, 0x16, 0x25, 0x51, 0xe6, 0x50, 0xa1, 0xb6, 0xc4, 0x5f, 0x2f, 0xd3, 0xf7, 0x49, 0x1a, 0x84, 0xaa, 0x14, 0x39, 0x0b, 0x8d, 0x16, 0x60, 0xc0, 0xd2, 0x8b, 0x0d, 0xcd, 0x99, 0xc8, 0xb2, 0x20, 0x4a, 0x8e, 0x7e, 0x7a, 0x1f, 0x26, 0xd8, 0x11, 0x71, 0xfc, 0x84, 0x89, 0xd7, 0x0d, 0xba, 0xfb, 0xf0, 0xee, 0xfd, 0xbb, 0xdd, 0xec, 0xce, 0xcb, 0x85, 0xca, 0xfb, 0x38, 0xf7, 0x04, 0x5d, 0x10, 0x3e, 0x41, 0x5d, 0x93, 0x7d, 0xf3, 0x32, 0x62, 0x5d, 0xf6, 0x24, 0x3a, 0xfb, 0x71, 0x1a, 0xfd, 0x65, 0x64, 0x9b, 0xfb, 0x9e, 0xe6, 0x91, 0x0b, 0xda, 0x33, 0x74, 0x3d, 0x03, 0x75, 0x34, 0x52, 0x22, 0x4e, 0xab, 0xc7, 0x26, 0xfd, 0x6d, 0xa4, 0x02, 0xfd, 0xcb, 0xa9, 0x99, 0xb6, 0x35, 0x45, 0xd7, 0xa8, 0xac, 0x35, 0x39, 0x35, 0xe0, 0x52, 0x75, 0x47, 0xa1, 0x81, 0xa5, 0x74, 0xc7, 0xb4, 0x91, 0x60, 0xf9, 0x15, 0xc8, 0x34, 0x5d, 0xc0, 0x4a, 0x75, 0x70, 0x01, 0x0f, 0x7e, 0x43, 0x1f, 0xfb, 0x73, 0x3e, 0x83, 0x5d, 0xee, 0xe2, 0x32, 0xdf, 0x9d, 0x00, 0x19, 0x50, 0x9d, 0x33, 0x35, 0x49, 0xb3, 0x9e, 0xdb, 0x52, 0xb1, 0xc5, 0x5a, 0x29, 0x40, 0x97, 0x41, 0x83, 0x3d, 0x70, 0xe1, 0xad, 0x4f, 0x9a, 0xec, 0xaa, 0x34, 0x8d, 0x83, 0x3b, 0xd9, 0x2d, 0x76, 0xb6, 0x12, 0x66, 0xc3, 0x43, 0x3b, 0x35, 0x59, 0x7c, 0xbc, 0x6d, 0xb4, 0xb5, 0x0d, 0xfa, 0x9b, 0x88, 0xd1, 0x45, 0x6d, 0xeb, 0x93, 0xc8, 0xc1, 0x6d, 0x51, 0xe9, 0xfc, 0xd4, 0x16, 0x90, 0x73, 0xc6, 0x34, 0x27, 0xd8, 0xd9, 0xe4, 0x95, 0xa8, 0x94, 0xa0, 0x49, 0x77, 0xc7, 0xeb, 0xab, 0x58, 0x68, 0x68, 0x09, 0x55, 0xcb, 0xd2, 0x6d, 0x57, 0x06, 0x3a, 0xd3, 0x33, 0xe0, 0x21, 0x2e, 0xb4, 0xf3, 0x38, 0x8c, 0xbe, 0xbb, 0xae, 0xac, 0xc7, 0x92, 0x64, 0x1f, 0xc7, 0xab, 0x3f, 0x86, 0xb0, 0x4c, 0x54, 0x0c, 0x5b, 0x5d, 0x50, 0x8d, 0xfd, 0x89, 0x9e, 0x8c, 0xbd, 0xb1, 0xb8, 0x91, 0x41, 0xd3, 0x84, 0xa2, 0xa4, 0xe1, 0xb9, 0x31, 0x84, 0x65, 0x5b, 0x68, 0x41, 0xd1, 0xbb, 0x2a, 0x99, 0xaf, 0x74, 0xae, 0x7c, 0xaa, 0x75, 0xcc, 0x0e, 0x2a, 0x3e, 0x55, 0xbc, 0x3a, 0xc3, 0x90, 0xca, 0x14, 0x26, 0xbf, 0xd9, 0x42, 0x18, 0x20, 0x31, 0xd6, 0x52, 0x1c, 0x34, 0x84, 0x5f, 0xfc, 0x45, 0x47, 0xf4, 0x37, 0x57, 0xb1, 0xc0, 0x2c, 0xba, 0x8e, 0x07, 0x28, 0x6f, 0x7a, 0xc7, 0x9b, 0x26, 0xba, 0xfd, 0x6a, 0x5d, 0x26, 0xc4, 0xea, 0x0b, 0xac, 0x71, 0x46, 0x6a, 0x53, 0x9a, 0xe7, 0x2f, 0x8e, 0x6d, 0xf7, 0x85, 0x90, 0x27, 0xcd, 0x8d, 0xd0, 0x70, 0x98, 0xa8, 0x9b, 0x4c, 0x50, 0x8d, 0xa9, 0x1d, 0x7a, 0xd1, 0x34, 0x8a, 0xe6, 0xcf, 0xd0, 0x1d, 0x0d, 0x87, 0xac, 0x28, 0x44, 0x59, 0xa8, 0xa8, 0xa8, 0xec, 0x7d, 0x05, 0x74, 0xd1, 0x5c, 0x92, 0x00, 0x1b, 0x92, 0x4c, 0x97, 0x40, 0x46, 0x82, 0x99, 0xae, 0xac, 0x0c, 0xab, 0x33, 0x72, 0x99, 0xaa, 0x74, 0x6c, 0xa2, 0xe3, 0x9d, 0x04, 0x4d, 0x16, 0xc9, 0x75, 0xb7, 0x4b, 0xc3, 0xac, 0x57, 0xbb, 0x4f, 0x4a, 0x1e, 0x7e, 0xa5, 0x6a, 0x65, 0x34, 0x33, 0x4d, 0x25, 0xa0, 0xc7, 0xd0, 0x5f, 0x2e, 0xfd, 0x3e, 0xa5, 0xe9, 0x17, 0x8f, 0xc7, 0x63, 0x36, 0xc7, 0x0d, 0x42, 0x4f, 0x4d, 0x10, 0xed, 0x36, 0x72, 0x4a, 0x03, 0x05, 0x69, 0x15, 0x56, 0x4d, 0x49, 0x35, 0xb3, 0x65, 0xaa, 0xf1, 0x8a, 0x30, 0x51, 0x16, 0x7d, 0x97, 0x79, 0x3f, 0x1e, 0xc3, 0x98, 0xdf, 0x25, 0xcf, 0x4d, 0xa4, 0x05, 0x72, 0xfc, 0xa3, 0xeb, 0x50, 0xd1, 0xda, 0x46, 0x9a, 0xf3, 0xb2, 0x38, 0xbc, 0x1f, 0x66, 0x48, 0xce, 0xcb, 0x20, 0x9e, 0x24, 0xa7, 0xe7, 0xac, 0xe0, 0x85, 0x97, 0x0b, 0xac, 0xf7, 0x1f, 0x0b, 0xfe, 0x7a, 0xc4, 0x6d, 0xef, 0x3f, 0x89, 0xe6, 0xfc, 0xf6, 0x5d, 0xf6, 0x96, 0xae, 0x1a, 0x75, 0xb6, 0x22, 0xd2, 0x89, 0xaa, 0x4a, 0x69, 0x2a, 0xed, 0x88, 0x2f, 0xbd, 0xc1, 0xf3, 0x7a, 0xe7, 0x69, 0x48, 0x2d, 0xf3, 0x3f, 0xd6, 0x99, 0x7a, 0xc3, 0x8d, 0xe0, 0xd4, 0x5d, 0x69, 0xf1, 0xae, 0xa6, 0x9d, 0x4f, 0x97, 0x2e, 0x00, 0xc3, 0x0b, 0x29, 0x85, 0x50, 0x5c, 0xa6, 0xd8, 0x35, 0x92, 0x0b, 0x7b, 0xff, 0xa1, 0xc6, 0x2a, 0xd4, 0x3a, 0xa2, 0x04, 0x0e, 0x17, 0x9e, 0xd2, 0x31, 0xf7, 0x15, 0x54, 0x66, 0xa8, 0xa4, 0xe0, 0x40, 0x7b, 0x23, 0x44, 0xae, 0x32, 0x16, 0xeb, 0x8c, 0x33, 0x7c, 0xc1, 0xa8, 0xea, 0x39, 0x75, 0xbe, 0x9c, 0xd5, 0xfd, 0xed, 0xbb, 0xec, 0xed, 0x8e, 0x26, 0x03, 0xcf, 0xb3, 0x33, 0x7f, 0x9c, 0x11, 0x6c, 0xb8, 0xbf, 0x6e, 0x9f, 0xd1, 0x61, 0xe0, 0x27, 0x03, 0x85, 0x57, 0x6e, 0xec, 0x67, 0xfb, 0x42, 0xc9, 0x2a, 0xa7, 0x02, 0x75, 0x4b, 0x3a, 0x08, 0xbf, 0xb7, 0x5e, 0x7d, 0xdb, 0xce, 0x02, 0xe8, 0xb3, 0xe3, 0x3b, 0x88, 0x14, 0x37, 0x19, 0x75, 0x1b, 0x54, 0x35, 0x15, 0xe5, 0x30, 0x9d, 0x94, 0x1c, 0x50, 0x22, 0x62, 0x1a, 0x93, 0x93, 0xd7, 0xd5, 0x43, 0x95, 0x97, 0x45, 0xa9, 0xf7, 0x99, 0xd1, 0x9c, 0xe0, 0x23, 0x34, 0x22, 0x78, 0x99, 0x88, 0x58, 0xc4, 0xe9, 0xcb, 0xe4, 0x3a, 0xd5, 0xf2, 0xfe, 0xc3, 0x07, 0x1a, 0x1c, 0xef, 0xf8, 0xd4, 0xc3, 0x48, 0x83, 0xd4, 0x07, 0x2a, 0x17, 0x70, 0xec, 0x80, 0x6e, 0xce, 0x3e, 0x96, 0x94, 0x82, 0xde, 0xcf, 0xe0, 0xc0, 0xc2, 0xa3, 0x42, 0x79, 0xcb, 0x95, 0xff, 0xea, 0x7b, 0xc7, 0xff, 0xe1, 0x87, 0x87, 0xe3, 0x8b, 0xef, 0x0e, 0x81, 0x17, 0xca, 0xf0, 0xde, 0x0f, 0x5e, 0x7c, 0xf7, 0xdd, 0x77, 0xf7, 0x0f, 0x7f, 0xbe, 0xf9, 0x31, 0x44, 0x20, 0xca, 0x92, 0xc3, 0xf1, 0xa5, 0xf7, 0xbd, 0x17, 0x1d, 0x02, 0xe7, 0x4f, 0x0f, 0x37, 0xe1, 0x8d, 0x49, 0x78, 0xe0, 0xa7, 0xfa, 0xa4, 0x7f, 0xf3, 0x4c, 0x6b, 0xac, 0xc5, 0xff, 0xe2, 0x3a, 0x0c, 0xf9, 0x80, 0x48, 0xb6, 0x3a, 0xdc, 0x0c, 0x66, 0x74, 0xa1, 0xa5, 0x7d, 0x36, 0xfb, 0x0e, 0xd5, 0xd0, 0xfe, 0x2a, 0x9a, 0x70, 0x7b, 0x47, 0x60, 0x5e, 0x54, 0x6a, 0x2b, 0x5b, 0xa1, 0xd3, 0xf6, 0xc7, 0x11, 0xf1, 0x0d, 0xb7, 0x77, 0xf8, 0x5a, 0x16, 0x52, 0xda, 0x53, 0xdd, 0x50, 0xc5, 0x9c, 0xba, 0x09, 0xca, 0xb2, 0xf4, 0x79, 0x95, 0x65, 0xa4, 0x4d, 0xce, 0x55, 0x26, 0xee, 0xb6, 0x14, 0x69, 0x92, 0x08, 0xe5, 0xff, 0x05, 0xdb, 0xfe, 0xe6, 0xba, 0x28, 0x6d, 0x6d, 0x9b, 0xbc, 0x71, 0x02, 0x37, 0x5c, 0x0d, 0x75, 0x36, 0x5e, 0xd8, 0x30, 0x4e, 0x5f, 0xbd, 0x8d, 0x6d, 0xbb, 0x35, 0x9b, 0xa6, 0x76, 0xef, 0x65, 0x41, 0xcc, 0x2a, 0xcb, 0x34, 0xdd, 0xd3, 0x90, 0x8b, 0xc7, 0xd1, 0x46, 0x8d, 0xb2, 0x37, 0xe1, 0x52, 0x0e, 0x5c, 0xd1, 0x11, 0x19, 0xc5, 0x02, 0x50, 0x2f, 0xe2, 0xf8, 0x25, 0x5d, 0x6b, 0xc0, 0x74, 0xa9, 0x44, 0x59, 0xd1, 0xee, 0xd2, 0x42, 0xfb, 0x3a, 0x09, 0x18, 0x3f, 0x0a, 0x1d, 0x47, 0x2c, 0x4c, 0x59, 0x1a, 0xf9, 0xc7, 0xf0, 0x10, 0x86, 0x2c, 0xcc, 0x92, 0x38, 0x8c, 0x7f, 0xbd, 0xf2, 0xe3, 0xa7, 0xe7, 0x7d, 0xd6, 0xee, 0x08, 0x12, 0x26, 0x3c, 0xf5, 0x76, 0xec, 0x0a, 0x07, 0x7e, 0xcc, 0x76, 0xb4, 0xf5, 0x64, 0xb1, 0x02, 0xb1, 0xcd, 0x31, 0xbd, 0x19, 0xc0, 0xee, 0x2d, 0x74, 0x2c, 0x83, 0xb3, 0xfe, 0xd1, 0x3b, 0xde, 0xbf, 0x4c, 0x1e, 0x6e, 0x92, 0xd0, 0x7f, 0x71, 0xf7, 0xdd, 0x31, 0xbd, 0x79, 0xe0, 0xbe, 0xf7, 0xe0, 0xbc, 0x74, 0x8e, 0x87, 0x1f, 0x7e, 0xef, 0x7c, 0x1f, 0x1f, 0x9c, 0xbb, 0xc4, 0xf3, 0x83, 0xc3, 0x35, 0x97, 0x3d, 0xc2, 0x5f, 0xc5, 0x33, 0x76, 0xfd, 0x45, 0x7f, 0xb5, 0x3b, 0xe0, 0xdb, 0x30, 0xf6, 0x2b, 0x50, 0xdf, 0xdf, 0xa6, 0x8c, 0x0b, 0xba, 0xff, 0xdb, 0x35, 0x34, 0x17, 0xce, 0x85, 0xcf, 0xb8, 0x4f, 0x07, 0x33, 0xde, 0xc2, 0x26, 0xb3, 0x75, 0x15, 0x4c, 0x3f, 0x7a, 0xbf, 0xff, 0xf1, 0x8f, 0x0f, 0x87, 0xfd, 0x9f, 0xfd, 0x17, 0x69, 0xe2, 0x3c, 0xec, 0x93, 0xc3, 0x77, 0xdf, 0xbd, 0x74, 0xfe, 0x78, 0xfb, 0xe2, 0xc7, 0x20, 0xfe, 0xee, 0xbb, 0xe3, 0xc3, 0xfd, 0x4f, 0x77, 0x7f, 0xf4, 0xe2, 0x1f, 0xbf, 0x77, 0xf7, 0x87, 0xf0, 0xe6, 0xcf, 0x77, 0xec, 0xfe, 0x0f, 0xc7, 0x1f, 0x82, 0xfd, 0x4f, 0x2f, 0x7d, 0x3f, 0xce, 0xfe, 0xf4, 0xfd, 0x3e, 0xfc, 0xf1, 0xf7, 0xe9, 0xe1, 0xcf, 0x77, 0x0f, 0x8c, 0xdd, 0x46, 0xfe, 0xaf, 0x9d, 0x4e, 0xc3, 0xae, 0xff, 0xf6, 0x1a, 0x16, 0x4c, 0x8d, 0x5e, 0xe0, 0x1f, 0x2b, 0x8d, 0xf8, 0xa7, 0x3b, 0xb2, 0x7b, 0xba, 0xbc, 0x86, 0xaa, 0xe2, 0xc6, 0xd5, 0xb9, 0x80, 0x29, 0xba, 0xae, 0x70, 0x28, 0xb1, 0x08, 0xad, 0x49, 0xb7, 0x11, 0xcd, 0x4f, 0x4d, 0x9b, 0xc4, 0x82, 0xb1, 0x02, 0x35, 0x15, 0x62, 0x6e, 0x67, 0x7d, 0xed, 0xd6, 0x08, 0xf2, 0xc8, 0x7e, 0xed, 0xcd, 0x26, 0x94, 0xc5, 0xb7, 0x63, 0xb7, 0x5a, 0xcb, 0x12, 0xed, 0xe4, 0x23, 0xf0, 0xdc, 0x1a, 0xf4, 0x2a, 0x37, 0x0d, 0x1d, 0x0d, 0x4a, 0xa9, 0xa9, 0x50, 0x02, 0x3c, 0x0a, 0x02, 0xd3, 0xde, 0x41, 0xc7, 0x95, 0x0c, 0xee, 0x18, 0x4f, 0xbf, 0x6c, 0x2b, 0xf8, 0xc6, 0xfd, 0xb5, 0xd9, 0xc5, 0x60, 0xc8, 0x74, 0x99, 0xd6, 0x69, 0xea, 0x3d, 0x77, 0x9c, 0x87, 0x65, 0xf5, 0x60, 0xc6, 0x04, 0xbf, 0xcd, 0xcb, 0x44, 0x97, 0x0d, 0xd1, 0xc8, 0x2a, 0x9a, 0x08, 0x3a, 0x3d, 0xa5, 0xf5, 0xe9, 0xec, 0x05, 0x46, 0x69, 0xaa, 0x40, 0xda, 0xee, 0x78, 0xa9, 0xcf, 0x91, 0xe5, 0xb7, 0xa0, 0xf7, 0x60, 0x1f, 0xf9, 0xd6, 0x11, 0xbd, 0x15, 0xad, 0xc8, 0xc7, 0xba, 0x1d, 0x5b, 0x0b, 0xd7, 0x6e, 0x87, 0x1a, 0x1d, 0x9d, 0x1c, 0xe6, 0xaa, 0x35, 0x0a, 0x81, 0x4f, 0x88, 0xa6, 0xd2, 0x20, 0x8a, 0x74, 0x49, 0x14, 0x87, 0xe6, 0x91, 0x3c, 0x4b, 0xf9, 0x55, 0x15, 0x2d, 0x64, 0xd7, 0xfb, 0xd7, 0xdd, 0x8e, 0xba, 0x30, 0x07, 0xc7, 0x35, 0x13, 0x33, 0x00, 0x76, 0x0e, 0x18, 0xec, 0x21, 0x3b, 0x7d, 0x1f, 0x94, 0x51, 0x7c, 0x1d, 0x42, 0xf6, 0x45, 0x75, 0xa6, 0xe9, 0xb3, 0xa7, 0x33, 0xb7, 0xc7, 0x7e, 0xad, 0xb4, 0x85, 0x46, 0x6d, 0x7b, 0xea, 0xa8, 0x5f, 0xc2, 0x94, 0x75, 0x47, 0x77, 0x4c, 0xb4, 0x34, 0xaf, 0xaa, 0x56, 0x67, 0xaa, 0x14, 0xe8, 0xf0, 0xbe, 0x45, 0x8a, 0x40, 0x9c, 0xb2, 0x04, 0xcc, 0x30, 0x8b, 0x55, 0x72, 0x78, 0x88, 0x1e, 0x0e, 0xca, 0x83, 0x1e, 0x4b, 0xbd, 0x30, 0x66, 0x0f, 0xbe, 0x13, 0x39, 0x77, 0xb1, 0x77, 0x78, 0x99, 0xdc, 0xba, 0x87, 0xe3, 0x95, 0x2b, 0xf1, 0x55, 0xb3, 0x1b, 0xf8, 0x0a, 0x7f, 0x79, 0x8e, 0xbd, 0x15, 0x15, 0x0a, 0x8c, 0xc4, 0x4a, 0xbf, 0x5e, 0xb0, 0x18, 0xfd, 0x0b, 0xc2, 0x19, 0x56, 0xa5, 0xeb, 0x7e, 0x4e, 0x26, 0x6d, 0x2d, 0x9c, 0xad, 0x63, 0x21, 0xed, 0xf2, 0x58, 0x91, 0x58, 0x7f, 0x1c, 0x10, 0x51, 0x3f, 0x8d, 0x4e, 0x2b, 0xb6, 0x26, 0x46, 0xaa, 0x6f, 0xa6, 0xb5, 0x5a, 0x59, 0x43, 0x21, 0xde, 0x4a, 0xb8, 0xcd, 0xd4, 0x9d, 0x49, 0xaa, 0xe6, 0xff, 0x2f, 0xee, 0xcb, 0x9a, 0x1b, 0x37, 0xb2, 0x2e, 0x15, 0xfd, 0xb9, 0xed, 0xf6, 0x26, 0x0a, 0x28, 0x88, 0x02, 0x89, 0x35, 0x13, 0xb9, 0x61, 0x23, 0x96, 0x2a, 0xd7, 0xf2, 0x08, 0x06, 0x27, 0x02, 0x0f, 0xf3, 0x03, 0x26, 0x66, 0x79, 0x98, 0xf9, 0x27, 0x40, 0xe0, 0x01, 0x3f, 0x7b, 0xee, 0x49, 0x50, 0xb5, 0xb9, 0xdc, 0x9a, 0x6a, 0xf6, 0x17, 0x43, 0x5b, 0x14, 0x49, 0xc9, 0xd1, 0xba, 0x9d, 0x99, 0x37, 0xcf, 0xdd, 0xce, 0xa9, 0x2a, 0x95, 0xd5, 0xb9, 0xae, 0x41, 0x35, 0x96, 0x2b, 0x75, 0xe4, 0x16, 0xb3, 0xdc, 0x98, 0xf3, 0xd8, 0xec, 0x12, 0xcb, 0x3a, 0x41, 0xf6, 0xf5, 0xc2, 0x16, 0x33, 0x79, 0xcc, 0x37, 0xc6, 0xf3, 0xc9, 0x1b, 0x1a, 0x50, 0xb3, 0xfa, 0x33, 0xfa, 0xac, 0xbc, 0xf3, 0x17, 0x29, 0x2a, 0x67, 0xc7, 0x8a, 0x0a, 0xf4, 0x76, 0x76, 0x9e, 0xe0, 0xb4, 0xf5, 0x3d, 0x83, 0x27, 0x42, 0x9c, 0x50, 0xb9, 0x2d, 0xae, 0x65, 0x32, 0x99, 0xa1, 0x17, 0xb3, 0xb4, 0x34, 0x71, 0xa5, 0xcd, 0xf2, 0x13, 0x3e, 0x2e, 0x8c, 0x6d, 0x50, 0xe5, 0x04, 0xef, 0xfb, 0x8e, 0x17, 0x2a, 0x2f, 0xb5, 0xae, 0xab, 0x9c, 0x6e, 0x40, 0x11, 0xe9, 0xf0, 0x91, 0x65, 0xe8, 0x8a, 0x38, 0xa6, 0x5f, 0x51, 0xe8, 0x7c, 0x27, 0xc9, 0x0c, 0xd9, 0xf5, 0x86, 0x0c, 0x23, 0x37, 0x08, 0x75, 0xd4, 0xd9, 0xf7, 0xe8, 0x24, 0x09, 0x82, 0x19, 0x66, 0x3d, 0x7b, 0x5f, 0x37, 0x73, 0x5f, 0xae, 0x92, 0xa2, 0x74, 0x89, 0x9d, 0x21, 0x54, 0xe6, 0x97, 0xa7, 0x46, 0x57, 0x4d, 0x51, 0xb6, 0xfa, 0xd4, 0xf4, 0xb4, 0x6e, 0xda, 0xe7, 0x26, 0xe5, 0xe1, 0x21, 0x4d, 0x6b, 0x0a, 0xb3, 0xea, 0x43, 0xaa, 0xf2, 0x47, 0x08, 0x4d, 0xca, 0x30, 0x4a, 0x1e, 0x65, 0x14, 0x07, 0x21, 0x7f, 0xf2, 0xf7, 0x3f, 0x3d, 0x45, 0xca, 0x0f, 0x22, 0x93, 0xbe, 0x78, 0x13, 0x90, 0x5b, 0xfc, 0x2f, 0xb7, 0x40, 0x0f, 0x32, 0xee, 0x5d, 0x77, 0xe7, 0x4f, 0xab, 0xcb, 0xe6, 0xf5, 0x8c, 0x7a, 0x18, 0x18, 0xee, 0x20, 0x78, 0xb8, 0x0e, 0x8b, 0xc7, 0x9d, 0x69, 0xfd, 0xf6, 0xc4, 0xe6, 0x2e, 0x87, 0xe4, 0x84, 0xb6, 0xaa, 0x35, 0xb6, 0x89, 0xbe, 0xbd, 0x72, 0xa6, 0x5d, 0x13, 0x02, 0xcf, 0xf2, 0x2e, 0xe8, 0xfa, 0x6b, 0xb6, 0xfd, 0x57, 0xd9, 0xf7, 0x04, 0x1d, 0x4b, 0x5d, 0x1b, 0x72, 0x30, 0x5d, 0xa7, 0xfb, 0xc2, 0x94, 0x45, 0x45, 0xf7, 0xb5, 0x41, 0x5f, 0x66, 0x45, 0x2e, 0x43, 0xeb, 0x24, 0x3d, 0xb0, 0x7f, 0x0f, 0xb7, 0xc7, 0x66, 0x1b, 0x99, 0x70, 0x31, 0x0c, 0xe4, 0x25, 0x76, 0xda, 0x8a, 0xbb, 0x3e, 0x23, 0x43, 0x07, 0x42, 0xfe, 0xd3, 0xb7, 0xfb, 0xba, 0x17, 0x88, 0x95, 0x59, 0x51, 0xaf, 0x2d, 0xca, 0xa4, 0x2f, 0x30, 0x7b, 0xd8, 0x76, 0xe8, 0xab, 0x53, 0x6c, 0x9f, 0xf3, 0x6f, 0xf6, 0x33, 0x0c, 0x17, 0x5c, 0xbb, 0x87, 0xb7, 0xae, 0x68, 0x24, 0x49, 0x21, 0xf3, 0x52, 0x51, 0x4c, 0x47, 0x1b, 0x1b, 0x5c, 0xf8, 0x20, 0xf3, 0xc3, 0xd8, 0x08, 0xcb, 0x54, 0x16, 0x89, 0xf4, 0xa6, 0xc6, 0x6e, 0xa4, 0x36, 0xdf, 0x13, 0xc8, 0x9f, 0x36, 0x2c, 0x0f, 0x54, 0xef, 0xfa, 0x93, 0x7d, 0x35, 0x6d, 0xd0, 0xfe, 0xec, 0x7e, 0xc4, 0xf7, 0xfe, 0x62, 0x3f, 0x73, 0x7c, 0xee, 0x6e, 0x03, 0x06, 0xa7, 0xd6, 0x2a, 0x81, 0xd7, 0xcd, 0x27, 0x89, 0x90, 0xeb, 0x92, 0x6d, 0x44, 0x3a, 0x1d, 0x54, 0x46, 0x9b, 0x06, 0x42, 0x43, 0xf6, 0xa9, 0xe8, 0xab, 0xce, 0x7e, 0x56, 0x14, 0x45, 0xcb, 0x0b, 0x6d, 0xda, 0xbc, 0xd6, 0x74, 0xd0, 0x8a, 0x12, 0x3d, 0x12, 0x65, 0x5e, 0xe6, 0x68, 0xe6, 0x89, 0x43, 0x25, 0x54, 0xf6, 0x62, 0xd3, 0xe9, 0x0b, 0xeb, 0x05, 0xbb, 0x2e, 0xcf, 0xea, 0x1f, 0x5b, 0x3c, 0x76, 0xb9, 0xd0, 0x93, 0xf7, 0x2c, 0x1a, 0x62, 0x7f, 0xe0, 0xf8, 0x56, 0x48, 0x84, 0xde, 0xae, 0x0b, 0x7e, 0xb0, 0x03, 0xc3, 0xd1, 0xc9, 0x2a, 0xcb, 0x35, 0x02, 0x53, 0x48, 0xb2, 0x10, 0x76, 0x94, 0x27, 0xa7, 0x7f, 0x15, 0x6d, 0x54, 0x99, 0xb5, 0x65, 0xda, 0x4a, 0xd9, 0x2a, 0x85, 0x7e, 0x2a, 0xd5, 0x50, 0xb8, 0x52, 0x72, 0xda, 0x75, 0x91, 0x04, 0x54, 0x54, 0x84, 0x2e, 0x33, 0x91, 0x9b, 0x34, 0x96, 0xe0, 0x47, 0x53, 0xf4, 0xdf, 0x56, 0xe4, 0x1b, 0xe9, 0xca, 0xd6, 0xf4, 0x9e, 0xe1, 0x8b, 0xdf, 0x12, 0xbc, 0x90, 0x5d, 0x6f, 0xde, 0xb7, 0x1f, 0xee, 0xd6, 0xd5, 0xe0, 0x5f, 0xab, 0xf5, 0x8d, 0x07, 0x85, 0xce, 0xa8, 0x21, 0xd1, 0xf7, 0x61, 0xf2, 0x2f, 0x88, 0x63, 0xe8, 0x0d, 0x39, 0x7f, 0xc4, 0xd0, 0x18, 0x86, 0x32, 0x62, 0x27, 0xa4, 0xa0, 0x48, 0xb3, 0x3c, 0x95, 0xea, 0xaa, 0xb4, 0x46, 0xb0, 0x1e, 0x3a, 0x43, 0x7d, 0xd5, 0x96, 0x75, 0x92, 0x1c, 0x7e, 0xd1, 0x29, 0xff, 0xf1, 0x87, 0x43, 0xe0, 0xfe, 0xc7, 0xef, 0xbb, 0xdf, 0x9d, 0x5f, 0x1f, 0xff, 0x16, 0xc7, 0xc1, 0xcf, 0xf7, 0xbe, 0xf3, 0xab, 0xff, 0x0b, 0x8b, 0x83, 0x98, 0x62, 0xcb, 0xe0, 0x37, 0x2d, 0x76, 0xd9, 0xf1, 0x31, 0x7a, 0x4a, 0xbf, 0x5d, 0x78, 0xba, 0xb5, 0xe4, 0x42, 0xd6, 0xbd, 0xeb, 0x29, 0x92, 0x5e, 0xa0, 0x44, 0x39, 0x2d, 0xb4, 0x54, 0x23, 0xf2, 0xdd, 0x48, 0x56, 0x4d, 0x00, 0x24, 0xe8, 0x07, 0x61, 0x04, 0x1c, 0x3d, 0xc8, 0x8b, 0x7e, 0x36, 0xff, 0xbd, 0x13, 0xd0, 0x08, 0xc1, 0xa4, 0x8b, 0x6e, 0x8a, 0xba, 0x61, 0x64, 0x70, 0xf6, 0x5b, 0x14, 0x45, 0x71, 0x12, 0x25, 0x9c, 0x37, 0x36, 0x91, 0x6a, 0xec, 0x49, 0x93, 0x79, 0x73, 0x25, 0x7b, 0x2a, 0x78, 0x2a, 0x4d, 0x99, 0x94, 0x76, 0xe3, 0xb6, 0x7d, 0x5c, 0x60, 0xa8, 0x29, 0x47, 0x8b, 0x27, 0x82, 0x9d, 0xae, 0xe1, 0x61, 0x9e, 0xd3, 0xbe, 0x54, 0x79, 0x20, 0x45, 0xea, 0x64, 0x37, 0xb5, 0x76, 0x6f, 0x76, 0x19, 0x70, 0x3b, 0x9b, 0x61, 0x5c, 0x96, 0xd1, 0x9c, 0x97, 0x09, 0x25, 0x17, 0xf2, 0x20, 0x23, 0x2a, 0x12, 0x2e, 0x5b, 0x0d, 0x61, 0xe0, 0x61, 0x22, 0x40, 0xf2, 0x99, 0x96, 0x86, 0x9d, 0xf5, 0xae, 0x36, 0xd3, 0xae, 0xf3, 0x20, 0xb4, 0x76, 0xcc, 0xce, 0xaf, 0xe7, 0x86, 0x02, 0x6c, 0x34, 0x31, 0xe6, 0x4d, 0xb1, 0x09, 0x86, 0xd0, 0x6b, 0xbd, 0x5d, 0xdd, 0x12, 0x7d, 0xd3, 0x7d, 0x61, 0xfd, 0x67, 0xc5, 0xe1, 0x47, 0x04, 0x61, 0x4b, 0x43, 0x48, 0x86, 0x4c, 0x26, 0x77, 0x69, 0x4a, 0xa3, 0x7e, 0x09, 0x44, 0x76, 0x14, 0xd9, 0x8d, 0xde, 0xe3, 0x75, 0x4b, 0xb7, 0x99, 0x19, 0x41, 0x0d, 0x74, 0x61, 0x8c, 0xcd, 0xae, 0xe3, 0x4e, 0x23, 0x81, 0x61, 0x82, 0x56, 0x60, 0x83, 0x73, 0x09, 0x91, 0x4c, 0x8b, 0x33, 0x4c, 0xeb, 0xfc, 0x39, 0xef, 0xcc, 0x7d, 0x59, 0xd4, 0xa7, 0xe7, 0x22, 0x92, 0xb8, 0xa6, 0xf0, 0xaf, 0x95, 0xf6, 0x76, 0xe3, 0xbc, 0xb3, 0x5e, 0x51, 0x2b, 0x5c, 0xcf, 0x8d, 0xe5, 0xe3, 0x46, 0x8d, 0xa5, 0x6f, 0xaf, 0xe5, 0xb4, 0xae, 0xca, 0x75, 0x5b, 0x95, 0xf4, 0x1b, 0x06, 0x81, 0x29, 0xd4, 0xae, 0x92, 0x42, 0x15, 0x26, 0x15, 0x32, 0xe0, 0xe4, 0x12, 0x05, 0xbb, 0xa9, 0xc9, 0x6f, 0xb3, 0x8b, 0x1c, 0x84, 0xef, 0x9b, 0x19, 0x4c, 0x68, 0xde, 0xc4, 0xd8, 0x30, 0xb2, 0x55, 0x4c, 0x83, 0x63, 0xbc, 0x75, 0x41, 0xaf, 0xc7, 0xd9, 0xcc, 0x8e, 0xa1, 0x8f, 0x3f, 0x2b, 0x71, 0xa2, 0x4d, 0x18, 0x43, 0xa8, 0x5b, 0x36, 0xb8, 0xbd, 0xb2, 0xe0, 0x23, 0xb7, 0x08, 0x0e, 0xf8, 0xad, 0x76, 0x84, 0x55, 0x2a, 0x02, 0x59, 0x28, 0x8d, 0xfe, 0x6d, 0xd5, 0x36, 0xa5, 0x2c, 0x35, 0xf9, 0x0f, 0x08, 0x69, 0xa3, 0xa6, 0x94, 0x8b, 0xb2, 0xd0, 0x21, 0x5a, 0x5d, 0xb4, 0xac, 0x7c, 0x99, 0x58, 0xa2, 0x42, 0x95, 0x21, 0x17, 0x7c, 0x38, 0xa6, 0xec, 0xa6, 0x21, 0x54, 0xb2, 0xab, 0x7b, 0x7f, 0x47, 0x81, 0xf3, 0x72, 0x61, 0xbe, 0xeb, 0xc1, 0xab, 0x3b, 0x8b, 0x47, 0x2e, 0x62, 0xc1, 0xf0, 0xa9, 0xe3, 0x5d, 0xce, 0x14, 0x8c, 0x71, 0xee, 0x9f, 0x9d, 0xd1, 0x0c, 0xce, 0x6c, 0xc8, 0x63, 0x4e, 0x23, 0x73, 0x30, 0x76, 0x55, 0x6f, 0x59, 0xd2, 0xd6, 0x92, 0xfa, 0x77, 0xd7, 0x99, 0xb8, 0xad, 0x95, 0xf6, 0x63, 0x13, 0xd2, 0xb5, 0xbf, 0xaf, 0xc2, 0x4d, 0x10, 0xa7, 0xba, 0xa3, 0x6d, 0x08, 0x26, 0xda, 0xae, 0xea, 0x6a, 0x05, 0x42, 0x7f, 0x01, 0x1a, 0x16, 0x2d, 0xf7, 0x06, 0x31, 0x0b, 0x2a, 0x2f, 0x4a, 0x79, 0xa9, 0x60, 0x7b, 0xc9, 0x58, 0xea, 0xdc, 0xb8, 0x5e, 0x64, 0x97, 0x43, 0x3e, 0xdc, 0x9d, 0x38, 0x77, 0xbd, 0x01, 0x84, 0xe3, 0xeb, 0x99, 0x1c, 0xa1, 0x59, 0xa6, 0x33, 0xc8, 0x30, 0xd6, 0xe9, 0xcc, 0xd0, 0x14, 0x4d, 0x78, 0x84, 0x1c, 0x3f, 0x04, 0x61, 0x39, 0x9b, 0xb7, 0x21, 0x54, 0xdc, 0x63, 0x75, 0x5b, 0x9f, 0xae, 0xa9, 0xfb, 0x4e, 0x9e, 0x9e, 0x0b, 0xb5, 0xf6, 0x59, 0x95, 0xaa, 0x2b, 0xe9, 0xc2, 0x4a, 0x45, 0x54, 0xe8, 0x02, 0x14, 0xf0, 0xfa, 0x91, 0x07, 0x51, 0x88, 0xb4, 0x40, 0xc6, 0xb4, 0x26, 0x2f, 0xc9, 0x3c, 0x16, 0x8b, 0x8c, 0x47, 0x49, 0xae, 0x52, 0x45, 0xc0, 0xff, 0x81, 0xc0, 0xc7, 0x13, 0x39, 0x1f, 0x96, 0x44, 0xec, 0xa6, 0xb1, 0x46, 0xb2, 0xab, 0x6f, 0xef, 0xe8, 0x10, 0x0d, 0xce, 0xc4, 0x21, 0x0c, 0xe2, 0xe1, 0x38, 0x61, 0xa6, 0x9b, 0xee, 0x2d, 0x8a, 0x5a, 0x68, 0x99, 0x84, 0x43, 0xc8, 0xf8, 0x4f, 0xd4, 0xf7, 0x96, 0x0e, 0x99, 0x43, 0x73, 0xe7, 0xd4, 0x6c, 0x74, 0xc8, 0x96, 0xea, 0x1e, 0x86, 0x89, 0x2b, 0xc3, 0xae, 0x25, 0x8e, 0xa8, 0xec, 0x62, 0x76, 0x09, 0x9a, 0x32, 0xd1, 0x97, 0x5f, 0xa3, 0x15, 0xb8, 0xd9, 0x62, 0xb6, 0xd6, 0xb4, 0x49, 0x87, 0xd6, 0xda, 0x2a, 0xd5, 0x75, 0x61, 0xd0, 0xc0, 0xa8, 0x74, 0x6e, 0x92, 0x44, 0xc4, 0xf2, 0x78, 0xdb, 0xd0, 0xf0, 0x66, 0xd7, 0x79, 0xf5, 0xe7, 0x61, 0x00, 0xf4, 0xc5, 0x0c, 0x2a, 0xea, 0xe8, 0x74, 0xd4, 0xdc, 0x95, 0xae, 0x65, 0x6f, 0xc4, 0x3c, 0xc5, 0x9f, 0x10, 0xf1, 0xb8, 0x2b, 0x31, 0xb6, 0x47, 0x9b, 0xc9, 0x44, 0xe6, 0x74, 0x1d, 0x6b, 0xcc, 0xbb, 0xcd, 0x93, 0x6c, 0xee, 0xe3, 0x44, 0x80, 0xfe, 0x84, 0xda, 0x60, 0x04, 0x27, 0x59, 0x5a, 0x76, 0x20, 0xb5, 0xcd, 0x8b, 0x40, 0x82, 0xa7, 0xcb, 0x91, 0x83, 0x2c, 0x33, 0x0c, 0x70, 0xd2, 0x0b, 0x90, 0xe7, 0x10, 0x02, 0xc9, 0xca, 0x24, 0x25, 0x60, 0xcf, 0xc2, 0xe4, 0xc8, 0x6e, 0x62, 0xc8, 0x24, 0xbb, 0xde, 0x74, 0xed, 0x1f, 0x77, 0xdc, 0x35, 0x8e, 0x47, 0x50, 0xf1, 0x32, 0x0e, 0x17, 0x28, 0x99, 0xbb, 0x10, 0xe3, 0xc1, 0x63, 0xe6, 0x9f, 0x1e, 0xee, 0x67, 0xaf, 0xf9, 0xae, 0x94, 0x95, 0x9d, 0x24, 0xab, 0x31, 0x96, 0x43, 0xcb, 0x41, 0x7f, 0x6e, 0xc9, 0xca, 0x5a, 0xf7, 0x55, 0x7f, 0x02, 0xd7, 0x4c, 0xd3, 0xf3, 0x87, 0xdf, 0x7f, 0xfb, 0xf9, 0x07, 0x67, 0xe7, 0xfe, 0xf0, 0x63, 0xf4, 0x8f, 0x7f, 0x25, 0xad, 0xf3, 0xa7, 0x46, 0x96, 0xef, 0xc6, 0xf7, 0x6f, 0xfe, 0x20, 0x0c, 0xcc, 0x30, 0xc0, 0xe3, 0xd1, 0x4d, 0x06, 0x0a, 0xda, 0xc9, 0x77, 0x3c, 0xe7, 0x85, 0x42, 0x85, 0x1d, 0x0b, 0xd9, 0x6e, 0x2f, 0x04, 0x9b, 0xcd, 0x15, 0xd5, 0x6e, 0xec, 0xb3, 0xdb, 0xa0, 0xcb, 0x73, 0x77, 0x66, 0x1b, 0xa8, 0x56, 0x97, 0xad, 0xaa, 0xd0, 0x0e, 0x51, 0x16, 0xa0, 0xc2, 0xe8, 0x78, 0x05, 0xfa, 0xb4, 0x98, 0x40, 0x18, 0x2d, 0x7b, 0x14, 0x3b, 0xf7, 0x4f, 0x4f, 0x8f, 0xc7, 0x27, 0x1e, 0xb3, 0xfd, 0xab, 0xa7, 0x24, 0xfe, 0x64, 0xdb, 0x4d, 0x2c, 0x55, 0x9b, 0x6d, 0x66, 0x5e, 0xa7, 0xd5, 0xa1, 0xe0, 0x65, 0x3a, 0x7b, 0x04, 0x41, 0xa6, 0xf5, 0xcb, 0x9e, 0xfb, 0x6f, 0xa5, 0x16, 0x2b, 0x64, 0x08, 0xea, 0x5a, 0xd7, 0x1b, 0xfe, 0x20, 0xe0, 0x7b, 0xda, 0x12, 0x89, 0x1d, 0x0a, 0xeb, 0x76, 0x67, 0xaa, 0x8d, 0x01, 0x89, 0x2e, 0x67, 0xab, 0xdf, 0xd5, 0x69, 0x8c, 0xf8, 0x19, 0x5a, 0x5d, 0xf2, 0x88, 0xda, 0xd0, 0x3f, 0xaa, 0x32, 0x65, 0x45, 0x77, 0x5d, 0x4f, 0x77, 0x33, 0xaf, 0x6a, 0x13, 0x05, 0x51, 0x72, 0x90, 0x21, 0x61, 0xc5, 0x2c, 0x8d, 0xd8, 0x4d, 0x6d, 0x8c, 0x5d, 0xfb, 0xf6, 0x75, 0x7f, 0xf7, 0x72, 0x21, 0x09, 0x43, 0xc5, 0x9e, 0x77, 0x11, 0x14, 0x8d, 0x2e, 0x3e, 0x13, 0x06, 0xc3, 0x57, 0xf2, 0xda, 0xb2, 0xa2, 0x42, 0xd3, 0x6c, 0x8c, 0x7d, 0x5d, 0x6b, 0xf3, 0xa5, 0x48, 0x91, 0x36, 0xf9, 0x31, 0x09, 0x7f, 0x4a, 0xc3, 0x7d, 0x12, 0x87, 0x52, 0x1c, 0xa2, 0x28, 0x54, 0x2c, 0x3a, 0x26, 0x3b, 0xee, 0xc6, 0xa1, 0xf3, 0xff, 0xa6, 0x01, 0x70, 0xab, 0xfe, 0xeb, 0x66, 0xdb, 0x65, 0xb5, 0xbd, 0x8b, 0xf6, 0x81, 0xef, 0xde, 0xe8, 0x1a, 0xdb, 0xbb, 0x78, 0x79, 0x2e, 0x24, 0xd1, 0x5e, 0xf5, 0x07, 0x46, 0x81, 0xb6, 0x18, 0x3d, 0x0a, 0xb8, 0x2f, 0xff, 0x5f, 0x4a, 0x4a, 0xdf, 0x9d, 0xb2, 0xc2, 0xa4, 0xd2, 0x9b, 0xbb, 0x09, 0xd3, 0x13, 0xe4, 0x4e, 0x0c, 0x5f, 0x47, 0x72, 0x24, 0x84, 0xa8, 0xdc, 0xb3, 0xeb, 0x2f, 0x3e, 0xfa, 0x4d, 0x3d, 0x36, 0x9b, 0x75, 0x5a, 0xd6, 0x65, 0x5e, 0x16, 0x6f, 0x3d, 0xcf, 0x96, 0x84, 0xc6, 0xdf, 0x99, 0x9c, 0x00, 0x08, 0x39, 0x45, 0x7e, 0x40, 0x91, 0xb9, 0xc3, 0x78, 0x58, 0x22, 0x4c, 0x52, 0xf6, 0x71, 0x5b, 0x77, 0x14, 0x66, 0x65, 0x08, 0x47, 0xc3, 0xac, 0x6e, 0xfa, 0x94, 0xf0, 0x7f, 0x45, 0x37, 0x5b, 0xdd, 0xf7, 0x69, 0xc6, 0xe3, 0xb0, 0x66, 0xb2, 0x34, 0xbc, 0xa0, 0xab, 0xb9, 0x6e, 0x0a, 0xc1, 0xcb, 0x20, 0x57, 0x4a, 0x26, 0x3c, 0x35, 0x11, 0xe4, 0xdd, 0x65, 0x46, 0x6f, 0xd2, 0xa3, 0x7f, 0x38, 0x7a, 0x37, 0x5a, 0x46, 0x86, 0x91, 0x1f, 0xf9, 0xc4, 0x30, 0xee, 0x0d, 0xde, 0xb5, 0x2c, 0x26, 0x86, 0xf5, 0xe2, 0xad, 0x9b, 0x9e, 0xa3, 0x8d, 0xca, 0x46, 0x82, 0x27, 0xc3, 0x38, 0xf8, 0x7c, 0x18, 0xf9, 0x8e, 0x53, 0x78, 0x15, 0xd0, 0x9f, 0xa2, 0xe5, 0x21, 0xd3, 0x87, 0xbc, 0xc8, 0x9b, 0x63, 0x4e, 0x80, 0xff, 0x00, 0x4a, 0x9c, 0xba, 0xa2, 0x40, 0x32, 0xc9, 0x9a, 0x48, 0x1c, 0x40, 0xbf, 0x90, 0xc4, 0xfb, 0x2c, 0x3f, 0xfa, 0x8c, 0xe2, 0xc8, 0x50, 0x24, 0xb9, 0x60, 0x04, 0xa3, 0xb2, 0x38, 0x12, 0x75, 0x99, 0x04, 0x0f, 0x2c, 0x3e, 0xee, 0x79, 0x9a, 0xee, 0x62, 0x3f, 0x88, 0x02, 0xee, 0x07, 0x0f, 0x49, 0xec, 0x7b, 0x5e, 0x78, 0x20, 0xbf, 0x76, 0xa3, 0x65, 0x1f, 0xde, 0xbe, 0x7e, 0x7f, 0x37, 0xb8, 0xd3, 0x99, 0xd0, 0xbd, 0x37, 0x50, 0x40, 0x66, 0x86, 0x81, 0x22, 0xcc, 0x75, 0x74, 0x06, 0xda, 0x98, 0x90, 0xd0, 0x5b, 0x87, 0x09, 0x1a, 0x4a, 0x5f, 0x31, 0x4a, 0x1e, 0x08, 0x9c, 0x2b, 0x45, 0x6e, 0x44, 0xf3, 0x22, 0xaf, 0x0c, 0x54, 0x1a, 0x64, 0x89, 0x8b, 0xad, 0x4e, 0x0d, 0x3f, 0xe5, 0x79, 0x59, 0x12, 0x34, 0x29, 0xab, 0x84, 0x53, 0x7c, 0x5c, 0x0a, 0x49, 0x6f, 0xf3, 0x38, 0xc9, 0x6b, 0x28, 0xc0, 0x8a, 0x30, 0x67, 0x29, 0xd8, 0xe1, 0x92, 0xb2, 0xa6, 0xb8, 0x33, 0x3a, 0xa4, 0xc7, 0xf8, 0x58, 0x64, 0x49, 0x9c, 0x3c, 0xf9, 0xc1, 0xd3, 0x31, 0x0b, 0xf7, 0x41, 0x1c, 0xdc, 0x48, 0x5e, 0x02, 0x79, 0xec, 0xb7, 0x77, 0x3e, 0xe4, 0x32, 0x06, 0x8a, 0x99, 0x07, 0xcc, 0x97, 0x4d, 0x84, 0x1d, 0xb9, 0xc3, 0x08, 0x31, 0x32, 0xd7, 0x75, 0xc1, 0x23, 0xfc, 0xe5, 0x83, 0x70, 0xf1, 0x70, 0x0f, 0xd6, 0xd6, 0x4d, 0x83, 0xc7, 0x50, 0x64, 0xf5, 0xdc, 0x8c, 0x7f, 0x45, 0xf7, 0x68, 0x01, 0x69, 0xe5, 0xc6, 0xe4, 0x51, 0x10, 0x08, 0x29, 0xaa, 0xac, 0xd2, 0x45, 0x5d, 0x08, 0x4b, 0x9b, 0x06, 0x89, 0x9e, 0xac, 0x2a, 0x9a, 0x3c, 0x36, 0x86, 0x80, 0x57, 0xa9, 0x05, 0xd9, 0x68, 0xb4, 0x10, 0x14, 0x58, 0x6b, 0xef, 0xfe, 0xfe, 0x97, 0x78, 0x9f, 0x24, 0xe9, 0x57, 0x5c, 0x55, 0xdf, 0xed, 0x41, 0x60, 0x97, 0x41, 0x85, 0xd3, 0x40, 0x43, 0xd3, 0x5c, 0x9f, 0xaf, 0x0f, 0xb1, 0x7c, 0xe3, 0xb1, 0x5e, 0x96, 0x65, 0x47, 0xf0, 0x8a, 0x4e, 0xd1, 0xd5, 0xe5, 0xb7, 0x56, 0xfc, 0xaf, 0x29, 0x9a, 0x42, 0xb7, 0x6d, 0x0c, 0xe2, 0x2a, 0x5a, 0x23, 0x28, 0xa3, 0x96, 0x79, 0x9c, 0x97, 0xbc, 0xca, 0x59, 0xc6, 0xf8, 0x83, 0x9b, 0x26, 0x26, 0x93, 0x5c, 0x67, 0x8c, 0x82, 0x53, 0x28, 0x91, 0x96, 0x4c, 0x30, 0x95, 0x62, 0x3e, 0x89, 0x8c, 0x12, 0x89, 0x7e, 0x02, 0x55, 0x2b, 0xfb, 0xdc, 0x83, 0xfc, 0xcf, 0x1b, 0xd7, 0x8c, 0x6e, 0x34, 0x88, 0x40, 0xb9, 0xd0, 0xb2, 0xb2, 0x72, 0x50, 0x2e, 0x45, 0x9d, 0xbe, 0x3b, 0x13, 0x84, 0x74, 0x26, 0x36, 0x79, 0x50, 0x83, 0xa2, 0x0f, 0xe9, 0x6b, 0xf5, 0x47, 0x0c, 0x43, 0xfa, 0x74, 0xfd, 0xed, 0x0c, 0xb2, 0x71, 0x5b, 0xe4, 0xd2, 0x54, 0xe8, 0x60, 0x79, 0xce, 0x0e, 0x37, 0x36, 0x88, 0x41, 0x75, 0xa2, 0xcd, 0x65, 0xd3, 0xa3, 0x9b, 0xaf, 0x2b, 0x6d, 0xc4, 0x46, 0x91, 0x66, 0x5b, 0x97, 0xdd, 0xb3, 0x1e, 0x0a, 0x3a, 0x1f, 0x0d, 0x85, 0xe2, 0x7a, 0xab, 0xf2, 0xc6, 0x4d, 0x93, 0xd1, 0x75, 0x58, 0x97, 0xb5, 0x2a, 0xe8, 0xf4, 0x1a, 0xa3, 0x6f, 0xbb, 0xa9, 0x61, 0x97, 0x0f, 0x12, 0x0c, 0xfc, 0xfd, 0x3e, 0x05, 0xcf, 0xf4, 0xf7, 0x43, 0xe8, 0x8f, 0x8c, 0x20, 0xcc, 0xb8, 0x10, 0x24, 0x41, 0x82, 0x6e, 0x74, 0x90, 0xda, 0xf7, 0x3d, 0xab, 0xfd, 0x32, 0xcd, 0xab, 0xd5, 0x11, 0xb5, 0x24, 0x5c, 0xb6, 0xc7, 0xea, 0x74, 0x82, 0x94, 0x81, 0x6d, 0x87, 0x2b, 0xcc, 0x36, 0x32, 0xd2, 0x16, 0xba, 0x69, 0x4e, 0xcf, 0xd3, 0xfb, 0xaa, 0x90, 0xb0, 0x27, 0xb3, 0xff, 0x17, 0x74, 0x56, 0xc9, 0xcc, 0x60, 0x66, 0x84, 0x3e, 0x53, 0xd0, 0x22, 0xca, 0x08, 0x52, 0x56, 0x0d, 0x61, 0x95, 0x12, 0xfa, 0x5d, 0x64, 0x97, 0x14, 0xe6, 0xb6, 0x9b, 0xfa, 0x7d, 0xf7, 0xee, 0x8e, 0x9c, 0x81, 0x67, 0x0c, 0x32, 0xa8, 0xee, 0x6c, 0x5c, 0x8f, 0xfc, 0xbb, 0xe1, 0x20, 0x5a, 0x00, 0xd5, 0xc2, 0x99, 0x31, 0x73, 0x39, 0x7f, 0x0d, 0xf6, 0x77, 0xb1, 0xc0, 0x00, 0x56, 0x86, 0x08, 0xda, 0x54, 0x96, 0xbe, 0xba, 0xb9, 0xe6, 0xe2, 0xe8, 0xb4, 0xd8, 0xc1, 0x1e, 0x30, 0xee, 0xb6, 0x86, 0x13, 0xb4, 0x12, 0xac, 0x12, 0xa0, 0xab, 0xce, 0x8e, 0x2a, 0xab, 0x28, 0x16, 0x2b, 0xa2, 0x2c, 0x63, 0xb9, 0x79, 0x62, 0x52, 0xc6, 0x2c, 0x50, 0x2c, 0x93, 0x11, 0x0f, 0x02, 0x16, 0x10, 0x00, 0x49, 0xa2, 0x63, 0xfa, 0xd9, 0x5e, 0xfc, 0x5f, 0xb7, 0x9d, 0x33, 0x6b, 0x1b, 0x67, 0xe3, 0x78, 0xe1, 0x20, 0x57, 0x30, 0x2e, 0xc4, 0x6d, 0x1d, 0x8a, 0x61, 0x26, 0xf2, 0xf2, 0xfe, 0x65, 0x22, 0x8b, 0xa0, 0x0c, 0x75, 0xb5, 0x4d, 0x5c, 0x2c, 0xd8, 0xba, 0x5c, 0xd9, 0xac, 0xcd, 0x09, 0x62, 0x70, 0x79, 0x81, 0xa3, 0x56, 0x80, 0x3e, 0x7e, 0xe3, 0xc3, 0xe8, 0x54, 0xae, 0x0c, 0xe0, 0x49, 0x5b, 0xb5, 0xd0, 0x55, 0x4a, 0x65, 0x24, 0x93, 0x44, 0xa6, 0x4f, 0x49, 0x1a, 0xa7, 0x8c, 0x82, 0x04, 0x9d, 0x81, 0x3e, 0x38, 0xd7, 0xe9, 0x41, 0x44, 0x2c, 0xe1, 0xec, 0x3f, 0x45, 0x28, 0xcf, 0x72, 0xab, 0xdf, 0xb9, 0x8c, 0xb0, 0x21, 0x5f, 0xc0, 0x74, 0x04, 0x09, 0x17, 0xf8, 0x7d, 0xcf, 0xb0, 0x11, 0x25, 0x41, 0xb0, 0xf0, 0x5e, 0x2e, 0x23, 0x88, 0x78, 0x3d, 0xe3, 0xf9, 0xcf, 0x60, 0xd9, 0xaa, 0x33, 0x6c, 0xa9, 0xa9, 0xb6, 0xab, 0xcd, 0xc9, 0xe2, 0x62, 0xd1, 0xa1, 0x2d, 0x53, 0x5e, 0xcb, 0xf0, 0xb6, 0x7b, 0x87, 0x42, 0x81, 0xac, 0x35, 0x8a, 0x6b, 0x8c, 0x72, 0x36, 0x6d, 0x25, 0x09, 0x2c, 0x0a, 0x5e, 0x09, 0x23, 0x21, 0x74, 0x58, 0xe4, 0xb9, 0xd4, 0x79, 0x64, 0x22, 0xa5, 0x8c, 0xa2, 0x88, 0x9a, 0x76, 0x61, 0x1c, 0xc9, 0x38, 0x81, 0x97, 0x79, 0x91, 0xa2, 0xe5, 0xa5, 0x35, 0x23, 0xbb, 0xd8, 0x3c, 0x9d, 0xc9, 0x37, 0x32, 0x0a, 0xab, 0x8d, 0x25, 0xd9, 0x65, 0xb4, 0x23, 0x69, 0xad, 0xd0, 0xca, 0x6e, 0x66, 0x7f, 0x99, 0xbd, 0x95, 0xc2, 0x6d, 0xda, 0xb1, 0x97, 0x4f, 0x3c, 0xa0, 0x05, 0xfd, 0x8d, 0x14, 0x7c, 0x5e, 0x7d, 0x63, 0x84, 0x2c, 0x31, 0xe6, 0xe3, 0x4c, 0xd1, 0xe8, 0xeb, 0x3c, 0x7b, 0x83, 0x19, 0xb3, 0x8e, 0xa5, 0x36, 0x61, 0x5c, 0x15, 0x5d, 0x88, 0x86, 0x61, 0xd1, 0x66, 0xb5, 0x6e, 0x4a, 0x72, 0xf4, 0x74, 0x29, 0x94, 0xa2, 0xd0, 0xb5, 0xda, 0x17, 0x52, 0x92, 0x1f, 0xae, 0xe9, 0x46, 0x67, 0x4c, 0xc4, 0x3a, 0xe5, 0x2c, 0x65, 0x81, 0xff, 0xd2, 0x80, 0xd9, 0x4b, 0xeb, 0xf5, 0xfe, 0xc3, 0xdd, 0xc8, 0x3d, 0x0e, 0xfd, 0x02, 0xf2, 0x19, 0xc3, 0xc5, 0x9f, 0x18, 0x81, 0x10, 0x33, 0x50, 0xc8, 0x79, 0x5e, 0x21, 0x22, 0x4d, 0x31, 0x29, 0xb9, 0xcc, 0x2f, 0x75, 0xa1, 0x2c, 0xf5, 0xcc, 0x73, 0x89, 0x4c, 0x3c, 0x0f, 0xe9, 0x6f, 0xd5, 0xdb, 0x7c, 0x63, 0xd2, 0xb1, 0xcb, 0x55, 0x6c, 0x04, 0x48, 0xf4, 0xbf, 0x53, 0xb7, 0xa5, 0x55, 0xa2, 0x30, 0x04, 0xaa, 0xb4, 0xae, 0xba, 0x9e, 0xac, 0x93, 0x68, 0x7c, 0x26, 0x3f, 0x82, 0x86, 0x6e, 0x48, 0x1c, 0x12, 0x36, 0x31, 0xe8, 0xe4, 0x14, 0x9a, 0x73, 0x76, 0x63, 0x8e, 0x11, 0x76, 0x4d, 0xf4, 0x77, 0x9f, 0x61, 0x00, 0xe3, 0xce, 0xd9, 0x10, 0x34, 0xa4, 0x97, 0xb4, 0x2d, 0x7d, 0x0c, 0x38, 0x3a, 0x28, 0x34, 0x51, 0x50, 0xea, 0x7e, 0x35, 0xda, 0x5e, 0x6c, 0x4c, 0x5c, 0xd7, 0x7c, 0xdc, 0x33, 0x5b, 0x7c, 0x7b, 0x9d, 0xc1, 0xba, 0x52, 0x15, 0x36, 0x1b, 0x17, 0xa3, 0xe5, 0xd9, 0xb5, 0x79, 0x3a, 0x9b, 0x87, 0x6b, 0xc9, 0x17, 0xf6, 0x96, 0x2d, 0x22, 0x37, 0x0d, 0x18, 0x23, 0xc8, 0x2e, 0x7b, 0x85, 0xd2, 0x6b, 0x46, 0x7b, 0x12, 0x7c, 0x7e, 0x3c, 0xb9, 0x69, 0x70, 0x0e, 0x94, 0x55, 0xef, 0x20, 0x93, 0xc7, 0xf8, 0xca, 0x3d, 0x0c, 0x85, 0x8c, 0xae, 0x70, 0x91, 0x2a, 0x30, 0x04, 0x19, 0x29, 0x80, 0x99, 0x08, 0xf3, 0xfb, 0xe4, 0x3a, 0xd8, 0xb2, 0x7e, 0x5e, 0x60, 0xda, 0x19, 0x94, 0x38, 0xad, 0x2e, 0x5e, 0xd3, 0x40, 0xf2, 0x0e, 0xed, 0x2b, 0xcf, 0x49, 0x10, 0xdd, 0xe6, 0xe5, 0x26, 0x65, 0x8e, 0x44, 0x78, 0xcb, 0xc8, 0x1c, 0x6e, 0xc9, 0xba, 0xd1, 0x8f, 0x64, 0x74, 0x45, 0x67, 0x8c, 0xee, 0x38, 0x14, 0x28, 0x4e, 0x15, 0x59, 0x6a, 0x1a, 0xd0, 0x81, 0x82, 0x78, 0x5d, 0x9a, 0xbc, 0x24, 0x18, 0x99, 0xf1, 0x90, 0x27, 0xc1, 0x8d, 0x39, 0x10, 0xd8, 0xe5, 0x38, 0x8c, 0xe0, 0xfb, 0xc5, 0x37, 0x9c, 0x4f, 0x6c, 0xf0, 0x90, 0xe2, 0xa1, 0x5b, 0x6b, 0x1c, 0xc5, 0xe8, 0xce, 0x7c, 0xf6, 0xcd, 0xc5, 0xb9, 0x80, 0x1d, 0xe9, 0xb3, 0x15, 0xdb, 0x88, 0xd3, 0xe8, 0x0e, 0xb3, 0x33, 0x8e, 0x74, 0xca, 0x8a, 0x0c, 0xcd, 0xb4, 0xc6, 0xae, 0x53, 0x26, 0xaf, 0xa5, 0x24, 0x7d, 0xba, 0xda, 0x89, 0xb0, 0xd3, 0x28, 0x7b, 0x1f, 0xd4, 0xe4, 0x5b, 0x54, 0xa7, 0x74, 0x9a, 0xa1, 0x14, 0x40, 0xee, 0x92, 0xfc, 0xa7, 0xc8, 0xe8, 0x2b, 0x21, 0x50, 0x25, 0x58, 0x14, 0x1f, 0xa3, 0xd0, 0x8f, 0xd2, 0xe3, 0xaf, 0x37, 0xb1, 0xc5, 0x83, 0x87, 0x00, 0x54, 0x41, 0x74, 0xba, 0xce, 0xcb, 0x79, 0x31, 0xde, 0x05, 0xbd, 0x53, 0x17, 0x46, 0x8e, 0xd1, 0x2c, 0xde, 0x5f, 0x77, 0x21, 0x6d, 0x83, 0xdf, 0xb6, 0x89, 0xd1, 0x40, 0xa2, 0xb0, 0xbb, 0xb2, 0x03, 0x59, 0xba, 0xf4, 0x6b, 0xf8, 0x49, 0x3f, 0xe3, 0xdb, 0xdb, 0x12, 0x7a, 0x34, 0x5a, 0xb7, 0xba, 0x6f, 0x41, 0xad, 0xae, 0xc8, 0x48, 0xe3, 0xd1, 0x7a, 0x41, 0x13, 0xdc, 0x60, 0x72, 0x57, 0x43, 0xc7, 0xab, 0x0a, 0xdd, 0xe0, 0x17, 0x46, 0x46, 0x45, 0x3b, 0x5a, 0xae, 0x17, 0xfd, 0xc6, 0x4b, 0xeb, 0x45, 0xff, 0xd1, 0x3c, 0x3b, 0xe3, 0x82, 0x29, 0x76, 0x42, 0x82, 0x67, 0x3e, 0x9d, 0xc9, 0x8b, 0xd0, 0x01, 0x5b, 0xf9, 0x5f, 0xa7, 0x09, 0x60, 0x97, 0xcd, 0x09, 0x9f, 0x36, 0xf1, 0x9d, 0x16, 0xcd, 0xea, 0xd7, 0x13, 0xd6, 0xf1, 0xb6, 0x28, 0xb7, 0x5d, 0x09, 0x71, 0xb5, 0x56, 0x17, 0xe4, 0x27, 0x65, 0xa7, 0x95, 0x62, 0x9a, 0x40, 0xbd, 0x50, 0x98, 0x5a, 0x0f, 0x95, 0xca, 0xa2, 0x8c, 0xf3, 0xf4, 0x18, 0x24, 0x7e, 0xe2, 0xb2, 0xc7, 0x30, 0x89, 0xb2, 0x54, 0x8a, 0x48, 0xd2, 0xaa, 0x25, 0xee, 0x53, 0x70, 0x1b, 0xc7, 0xae, 0x9d, 0x90, 0xbe, 0xa3, 0xeb, 0x62, 0xa1, 0x68, 0xf2, 0xf9, 0x9f, 0xed, 0x41, 0xd8, 0xf0, 0x32, 0x72, 0xd0, 0x9b, 0xd0, 0x47, 0x82, 0x3c, 0xc7, 0x65, 0x61, 0xeb, 0x45, 0x08, 0x9f, 0x7e, 0x77, 0xde, 0x15, 0xc5, 0x2b, 0x63, 0x2b, 0x9a, 0x68, 0xe9, 0x46, 0xe1, 0xe1, 0x88, 0x2f, 0x0c, 0x06, 0x77, 0xcd, 0x67, 0x8f, 0xe0, 0x5f, 0x99, 0xb9, 0xfa, 0x74, 0x37, 0x97, 0xb7, 0xe1, 0x0e, 0x6b, 0x1b, 0xb9, 0x79, 0x0f, 0x2c, 0x0a, 0x97, 0xe5, 0xec, 0x42, 0x11, 0xc4, 0x99, 0x69, 0xd5, 0x40, 0x19, 0x34, 0x5c, 0xcc, 0x78, 0x01, 0x9b, 0xdf, 0x7c, 0x5e, 0x07, 0x97, 0xd3, 0x0d, 0xcd, 0x87, 0xcb, 0x78, 0xf6, 0x76, 0x5a, 0xc7, 0x81, 0xd1, 0x06, 0xe2, 0x03, 0x32, 0x11, 0x98, 0xe8, 0x13, 0x12, 0x23, 0xe9, 0x22, 0x94, 0x61, 0x96, 0xd2, 0xfa, 0xc8, 0x54, 0xfa, 0xb4, 0x4a, 0x84, 0xe9, 0xb9, 0x0f, 0xfd, 0xbb, 0xb2, 0x0c, 0x8e, 0xec, 0x97, 0x98, 0x87, 0xb4, 0x42, 0x0f, 0x0f, 0x21, 0x8f, 0x33, 0x2e, 0x12, 0xef, 0xe9, 0x1f, 0x3b, 0x71, 0x0c, 0x7c, 0x76, 0x1f, 0x3e, 0x65, 0xe1, 0x6f, 0x87, 0x27, 0xe7, 0xe1, 0x98, 0x32, 0xf1, 0x9b, 0xad, 0x9e, 0x91, 0x6d, 0xff, 0xe7, 0xa6, 0x75, 0x43, 0x2f, 0xc1, 0x9d, 0x99, 0x09, 0x62, 0xf8, 0x03, 0x79, 0x47, 0xa8, 0x62, 0xb3, 0xd9, 0xa1, 0xe0, 0x72, 0x71, 0xe7, 0xd5, 0x9b, 0xfc, 0x6f, 0x1d, 0x35, 0x5f, 0x4c, 0x74, 0x3f, 0xf3, 0xbc, 0xb9, 0x0a, 0xfe, 0xd9, 0x6a, 0x7b, 0xa7, 0xf7, 0x51, 0xc6, 0xd8, 0x73, 0x0d, 0x66, 0x0b, 0xcf, 0xd4, 0x36, 0xf8, 0x42, 0x0e, 0x44, 0x19, 0xc0, 0x7c, 0x5b, 0xbe, 0x88, 0x41, 0x11, 0x94, 0xd3, 0xb9, 0xeb, 0x0a, 0xc2, 0x8e, 0xd0, 0x3d, 0x84, 0xa2, 0x8d, 0x94, 0x68, 0x91, 0xa6, 0xab, 0xec, 0x23, 0x60, 0xbc, 0x39, 0x1b, 0x67, 0x6d, 0x9b, 0x56, 0x77, 0xf2, 0xbc, 0xd9, 0xe7, 0xbe, 0x8f, 0x7a, 0xcb, 0xb8, 0x18, 0x02, 0x50, 0x98, 0x34, 0x58, 0x9c, 0x6f, 0x8e, 0x95, 0x8d, 0x17, 0xdc, 0x65, 0x61, 0xd5, 0xa8, 0xed, 0xa8, 0x59, 0xbc, 0x68, 0x03, 0x19, 0x7b, 0x8d, 0x6d, 0x99, 0x46, 0x38, 0x0b, 0x4c, 0x50, 0x23, 0x66, 0xa3, 0x1b, 0xac, 0xd4, 0x70, 0x22, 0x2d, 0x44, 0x86, 0x31, 0x0b, 0x1e, 0x0a, 0x11, 0x2b, 0x3a, 0x59, 0x2a, 0x21, 0x48, 0x9c, 0x46, 0x71, 0x4c, 0x11, 0x19, 0xc5, 0x9b, 0x07, 0xc9, 0x83, 0x90, 0xed, 0x0f, 0xc7, 0xe4, 0x36, 0xb9, 0x3c, 0x78, 0x33, 0x68, 0xb3, 0x93, 0xf3, 0x00, 0x3f, 0x8b, 0xb3, 0x8c, 0x66, 0x21, 0xff, 0xee, 0x78, 0x0e, 0xf9, 0x12, 0xcf, 0x73, 0x5c, 0xba, 0x0d, 0xce, 0x82, 0x02, 0xcc, 0xf1, 0x62, 0xd8, 0x42, 0xf7, 0xf6, 0xd5, 0xef, 0x6f, 0xd8, 0xc3, 0x86, 0x64, 0x9d, 0xfd, 0xb6, 0x35, 0x50, 0x29, 0x3b, 0xef, 0x42, 0xdf, 0x90, 0x57, 0x54, 0xd6, 0xa1, 0xc0, 0x6f, 0x56, 0x96, 0x49, 0xb8, 0x83, 0x41, 0x9d, 0xce, 0x50, 0x68, 0x31, 0x79, 0x4a, 0xb1, 0x75, 0x76, 0xc8, 0xb2, 0x84, 0xf6, 0x34, 0xd7, 0x4c, 0x13, 0x28, 0x36, 0xc2, 0x88, 0x24, 0x0d, 0xc5, 0xc1, 0xe7, 0x31, 0x8b, 0x5e, 0xe2, 0xc2, 0x7f, 0x69, 0xbd, 0xc8, 0xae, 0xc9, 0xb2, 0x5f, 0x70, 0x97, 0x31, 0x2e, 0xce, 0x74, 0x1b, 0x8f, 0x96, 0x84, 0xe6, 0x8c, 0x32, 0x35, 0xe3, 0x50, 0xcf, 0x5b, 0x61, 0x24, 0xed, 0xd2, 0x8f, 0x24, 0x78, 0x3b, 0x51, 0xd4, 0x50, 0x54, 0xae, 0xc1, 0xb1, 0x60, 0x49, 0x75, 0xa0, 0x3c, 0xb9, 0x99, 0x62, 0xa7, 0xd9, 0x1b, 0x4b, 0x9e, 0xd9, 0x35, 0x12, 0x44, 0x69, 0x20, 0xdd, 0x42, 0x41, 0xa6, 0x43, 0xa7, 0x58, 0x5e, 0xd1, 0xf1, 0xec, 0x0a, 0xae, 0xe9, 0x29, 0xc5, 0x54, 0x48, 0x5a, 0x10, 0xd8, 0x2f, 0xe8, 0x3a, 0x43, 0x9d, 0x49, 0xb1, 0x18, 0x63, 0x72, 0xf4, 0xd8, 0xdf, 0x78, 0xc6, 0xfa, 0x1e, 0x44, 0x48, 0x84, 0x9d, 0x9c, 0x8b, 0xe7, 0x8d, 0x04, 0x38, 0x2e, 0xd0, 0xa8, 0xa1, 0xd8, 0xd2, 0x99, 0x09, 0x89, 0x98, 0x6f, 0x74, 0xb4, 0x4c, 0xf3, 0x70, 0x2f, 0x44, 0x66, 0xa0, 0x30, 0xdf, 0xda, 0xf6, 0x2a, 0x8b, 0x0c, 0xbb, 0x7c, 0x6b, 0xf0, 0xc8, 0x8b, 0xd6, 0x0a, 0x7a, 0x81, 0x63, 0x71, 0x23, 0xaf, 0x6a, 0xe8, 0x52, 0xeb, 0x69, 0xb5, 0x1a, 0xd0, 0xfa, 0xa7, 0x6d, 0x84, 0x75, 0xcb, 0xab, 0x48, 0xf7, 0x08, 0xd0, 0xc8, 0x18, 0x10, 0x99, 0x18, 0x69, 0x78, 0xe4, 0xc8, 0x2f, 0x7d, 0xe3, 0x7f, 0xbf, 0x71, 0xcd, 0xc8, 0x36, 0x8f, 0x60, 0xc6, 0x80, 0x24, 0x22, 0x45, 0x9c, 0x3e, 0xc1, 0xab, 0xd9, 0xa6, 0x1a, 0x41, 0xa1, 0x69, 0xd6, 0xbf, 0xe8, 0x68, 0x29, 0xca, 0x12, 0xb3, 0xc4, 0x92, 0x5d, 0x65, 0xbe, 0x1b, 0x63, 0x3b, 0x77, 0xae, 0x79, 0x7c, 0x7a, 0x66, 0xd7, 0x3e, 0x1d, 0xd5, 0x64, 0x3a, 0x2d, 0x62, 0xba, 0xd7, 0x8a, 0xbe, 0xd1, 0x47, 0xf0, 0x8f, 0x1f, 0x0c, 0x68, 0x5b, 0xb4, 0x89, 0x73, 0x68, 0x0a, 0x09, 0x28, 0x18, 0xb0, 0x34, 0x65, 0x21, 0x7b, 0xca, 0x0e, 0xb1, 0x4c, 0x93, 0x24, 0x4b, 0x0e, 0x3c, 0x49, 0x6f, 0xca, 0xc2, 0x81, 0x48, 0xad, 0xfd, 0x70, 0xe7, 0x21, 0xf5, 0x3b, 0xbb, 0x0e, 0x64, 0xe4, 0xbc, 0x61, 0x40, 0xd1, 0x8c, 0x5c, 0x05, 0x68, 0x40, 0x98, 0xcf, 0x8c, 0x8b, 0x05, 0x5d, 0xfc, 0x75, 0x65, 0x74, 0x08, 0xad, 0x7e, 0xe5, 0xba, 0xa0, 0xca, 0x59, 0xa1, 0xac, 0x74, 0xaa, 0x4e, 0x90, 0xc0, 0xb3, 0x14, 0x34, 0xfd, 0xa9, 0x3f, 0x75, 0x7d, 0x73, 0x02, 0xee, 0xc8, 0x6d, 0x0d, 0xba, 0xe9, 0x84, 0x3e, 0xe5, 0xa2, 0xd4, 0x7d, 0x23, 0xab, 0xb2, 0x8e, 0x55, 0xd5, 0xc4, 0x3d, 0x2d, 0x51, 0x0c, 0x8a, 0x54, 0x95, 0xeb, 0xe6, 0x48, 0xab, 0x56, 0x57, 0x52, 0x52, 0x08, 0x5a, 0xa8, 0x1a, 0x8d, 0x1f, 0x79, 0xc2, 0xb5, 0x08, 0xd3, 0x20, 0xb9, 0xad, 0x79, 0xcc, 0x0e, 0x80, 0xdf, 0xad, 0x67, 0x8c, 0x96, 0xb9, 0xab, 0x87, 0xa6, 0x23, 0x82, 0x57, 0xb3, 0x4b, 0xa1, 0xf4, 0x44, 0xce, 0x72, 0xbd, 0x40, 0xd6, 0x80, 0x3c, 0xc8, 0x4c, 0xe8, 0x7f, 0x3d, 0xb3, 0x71, 0x99, 0x16, 0x72, 0x9d, 0xb4, 0x64, 0xaf, 0x5e, 0xfd, 0x6d, 0xf7, 0xcb, 0x3e, 0xf4, 0x7e, 0x08, 0xfd, 0xc3, 0xdf, 0xd2, 0x83, 0xff, 0xf4, 0xb4, 0x4b, 0xe2, 0xa3, 0xb7, 0x7f, 0xf5, 0xe3, 0xde, 0x8d, 0x0e, 0xc1, 0xef, 0xfb, 0xdf, 0x5d, 0xc1, 0x54, 0x98, 0x3a, 0x71, 0x12, 0xa4, 0xea, 0x70, 0xf8, 0x31, 0x4e, 0x42, 0x5a, 0x8f, 0x57, 0x87, 0xf4, 0x57, 0xf7, 0xb7, 0x9f, 0xd3, 0xa7, 0xfb, 0x87, 0xbf, 0x87, 0x5e, 0xf2, 0xdb, 0x2b, 0xe7, 0xa7, 0x7f, 0xf8, 0x0f, 0x87, 0xfb, 0x84, 0xbc, 0x62, 0xc6, 0xdd, 0x7d, 0xc0, 0xbe, 0xd8, 0x8e, 0xff, 0xe3, 0xa6, 0xd2, 0x59, 0xd7, 0xbd, 0x41, 0x92, 0xc0, 0xa3, 0x10, 0x93, 0x0d, 0x74, 0x8d, 0x09, 0xf4, 0x31, 0xba, 0xcc, 0x30, 0xc8, 0x11, 0xa3, 0x7e, 0xe6, 0xb2, 0xad, 0x54, 0xc6, 0x3e, 0x3e, 0xb9, 0xb6, 0x86, 0xb6, 0xcb, 0xab, 0x13, 0x22, 0xe9, 0xba, 0xa9, 0x30, 0x8c, 0x4a, 0x9b, 0x31, 0x96, 0xe1, 0xf1, 0x5f, 0x07, 0x1d, 0x7f, 0x01, 0x44, 0x6e, 0x4b, 0xe7, 0x77, 0xdd, 0xfb, 0x0f, 0xef, 0xde, 0xde, 0x21, 0x63, 0xcf, 0x66, 0xf4, 0x2f, 0x32, 0xac, 0xd8, 0x0c, 0xd9, 0x46, 0x7a, 0x33, 0xdb, 0xd6, 0x4d, 0x0a, 0x6e, 0x9c, 0x8b, 0xff, 0xd5, 0xd5, 0xb6, 0x2b, 0xb3, 0xaa, 0xa6, 0x40, 0x86, 0x42, 0x2b, 0xda, 0x94, 0x0d, 0x08, 0x91, 0x1b, 0xd3, 0x63, 0x14, 0x0e, 0xca, 0x42, 0x56, 0x78, 0xa2, 0xb3, 0xcd, 0xc4, 0x4a, 0xf7, 0xa2, 0x2f, 0xdb, 0x52, 0xd2, 0x76, 0xed, 0xfb, 0x36, 0x6e, 0x20, 0xca, 0x4c, 0xbf, 0x50, 0x66, 0x39, 0xfd, 0xe7, 0xbd, 0x1d, 0x36, 0xab, 0xc0, 0x56, 0x58, 0x9c, 0xe2, 0x5a, 0x06, 0x86, 0x3c, 0x4b, 0x8a, 0xc2, 0x4d, 0xe0, 0x3f, 0xdd, 0x6c, 0xd9, 0x87, 0xfe, 0x6e, 0x81, 0x3e, 0xbb, 0xe3, 0x22, 0x08, 0xe3, 0x9e, 0xc3, 0xac, 0x78, 0xa3, 0x63, 0x75, 0x36, 0x0c, 0xa8, 0x5b, 0xa0, 0x5f, 0xf6, 0x75, 0x31, 0xb7, 0x28, 0xc1, 0x42, 0x5e, 0xe7, 0x0d, 0xf4, 0xa3, 0x4b, 0x58, 0xd1, 0x18, 0x51, 0xd5, 0x35, 0xef, 0xdb, 0x53, 0xdd, 0xf7, 0x86, 0x77, 0x11, 0x4a, 0x66, 0x88, 0xa0, 0xeb, 0xa2, 0xa6, 0x93, 0xd8, 0x15, 0xd0, 0xa5, 0xd0, 0xa7, 0x98, 0xce, 0xe2, 0xa9, 0x17, 0x75, 0xd3, 0x93, 0x35, 0x3c, 0x93, 0xcc, 0xa4, 0x5c, 0x94, 0x51, 0x98, 0x85, 0x4a, 0x3e, 0x1d, 0x42, 0x95, 0x85, 0x71, 0x78, 0x3c, 0x1e, 0x9e, 0xc2, 0xbf, 0xdd, 0xb6, 0x23, 0xc9, 0x8d, 0x7c, 0xe8, 0xee, 0x1c, 0x63, 0x96, 0x79, 0xba, 0x18, 0x73, 0x36, 0xbe, 0xb7, 0x9c, 0xfd, 0x65, 0xa1, 0xe0, 0x13, 0x04, 0x8c, 0x8b, 0x0f, 0x7d, 0x10, 0x82, 0x26, 0xd7, 0xdf, 0x70, 0xc6, 0xb3, 0x71, 0xbd, 0x8b, 0xbb, 0xde, 0xf3, 0xdf, 0xe4, 0xcf, 0x79, 0xa9, 0xd5, 0xfd, 0x81, 0x3f, 0xec, 0x65, 0x9c, 0x99, 0xe2, 0xa0, 0x8d, 0x7f, 0x50, 0x32, 0x2f, 0x0e, 0x52, 0xab, 0x50, 0x3d, 0xe8, 0x7d, 0x68, 0x52, 0x4b, 0xfe, 0x9c, 0x17, 0x3a, 0xe1, 0xfb, 0x3a, 0x0a, 0xb2, 0x94, 0x63, 0xac, 0x20, 0x8a, 0xc3, 0x48, 0x96, 0x26, 0x4e, 0x1e, 0xf3, 0x88, 0x1c, 0x49, 0xfa, 0x2a, 0xbd, 0xe7, 0xec, 0x10, 0x3f, 0x86, 0xda, 0x8d, 0x9c, 0xe8, 0xf3, 0x1d, 0x79, 0x5b, 0x7a, 0xb8, 0xeb, 0x5f, 0xbf, 0xbd, 0xf3, 0xc7, 0x95, 0x93, 0xf7, 0xa0, 0x27, 0x64, 0x40, 0x46, 0x9f, 0xaf, 0x1e, 0x99, 0x39, 0x7a, 0x14, 0x71, 0x0e, 0x67, 0x02, 0x24, 0x14, 0x92, 0x82, 0x43, 0xfe, 0x8b, 0xe9, 0xf6, 0xb2, 0xb4, 0xbd, 0x12, 0x91, 0x55, 0xee, 0xdd, 0xfa, 0x0a, 0xae, 0xc9, 0x8f, 0xce, 0x0e, 0x73, 0xda, 0xfe, 0x45, 0x24, 0x40, 0xaa, 0xd6, 0x08, 0xd5, 0xb5, 0x79, 0xa3, 0x31, 0xf2, 0x63, 0x89, 0x7a, 0x8d, 0x29, 0xc0, 0x3e, 0xa3, 0x73, 0xa6, 0x23, 0xcc, 0x71, 0x72, 0x95, 0x14, 0x2a, 0x35, 0x89, 0x62, 0x91, 0xe2, 0x49, 0x26, 0xb2, 0x84, 0x0e, 0x74, 0x72, 0x13, 0xe4, 0xb7, 0x76, 0x39, 0x13, 0x5f, 0xcd, 0x38, 0xcf, 0x0b, 0x5d, 0x66, 0x1e, 0x07, 0x30, 0x81, 0x45, 0xf4, 0xe1, 0x4c, 0xeb, 0x36, 0x38, 0x06, 0xb9, 0x9f, 0xcf, 0xd8, 0x93, 0x87, 0xcb, 0x65, 0xa7, 0x2c, 0x91, 0xd5, 0x26, 0x8b, 0x7d, 0x25, 0x7b, 0x7a, 0x66, 0xcf, 0xbc, 0xf6, 0x67, 0xaa, 0x5c, 0xe8, 0xac, 0x4d, 0x41, 0x30, 0xa3, 0x3a, 0xde, 0x28, 0xb4, 0x0d, 0x30, 0x9e, 0xf2, 0xd8, 0x98, 0x34, 0xcb, 0x82, 0xfb, 0x38, 0x7e, 0x92, 0xf2, 0x18, 0x1e, 0x93, 0xc7, 0xf0, 0x18, 0x1f, 0x59, 0xf2, 0x27, 0x41, 0xc7, 0x3f, 0x49, 0x86, 0x7c, 0xe7, 0x9c, 0x19, 0xd9, 0xf6, 0xe6, 0xce, 0x77, 0x41, 0x28, 0x0c, 0xce, 0x31, 0x67, 0x74, 0x39, 0xf2, 0xde, 0xd3, 0x6a, 0xec, 0x87, 0xce, 0xc7, 0x0f, 0xbf, 0xd2, 0x4b, 0x7d, 0xd6, 0xce, 0x03, 0xc9, 0xa4, 0x55, 0x28, 0x6f, 0x41, 0x44, 0x23, 0x0c, 0x5d, 0x5a, 0xac, 0x48, 0x54, 0x06, 0x82, 0xb4, 0xbc, 0x00, 0x67, 0x7e, 0x13, 0x61, 0xfd, 0x8a, 0xb2, 0xb7, 0x10, 0x92, 0x0e, 0xa4, 0xa8, 0x4d, 0x8d, 0x79, 0xc1, 0xdc, 0x94, 0xe8, 0x22, 0x54, 0xe5, 0x63, 0xc4, 0x0a, 0x99, 0x67, 0x80, 0x5b, 0x89, 0xcc, 0x58, 0x9a, 0xd1, 0x4d, 0xc0, 0xd8, 0x4b, 0xe3, 0x73, 0x2f, 0x2d, 0xd9, 0x9b, 0x3b, 0xba, 0xbc, 0xac, 0xde, 0xf7, 0x0a, 0xbe, 0xe4, 0xd1, 0xf7, 0x50, 0x9a, 0xe0, 0x1f, 0x3f, 0x9c, 0xb6, 0x0f, 0xbf, 0x94, 0x4b, 0xe5, 0xb4, 0x5f, 0x62, 0x65, 0x85, 0xad, 0x05, 0x5d, 0xc9, 0x5b, 0xe6, 0x9e, 0xf0, 0x48, 0x89, 0xa7, 0x0c, 0x1d, 0x49, 0x82, 0xf0, 0xa3, 0xb1, 0xd5, 0x09, 0x5d, 0x2a, 0x99, 0xd5, 0x65, 0x69, 0x8e, 0x80, 0x27, 0xf6, 0x37, 0x6d, 0xeb, 0x0b, 0x12, 0xf8, 0x6d, 0x4a, 0xc6, 0x61, 0x16, 0x1c, 0xe4, 0x7e, 0x90, 0x4b, 0x55, 0xfc, 0x51, 0x4a, 0x9e, 0xc4, 0x41, 0x7c, 0x9b, 0x67, 0xec, 0x3f, 0xbc, 0x01, 0x37, 0x12, 0x45, 0xcf, 0xbe, 0x37, 0xcd, 0x2b, 0x39, 0xc2, 0xc9, 0x3f, 0x4f, 0xae, 0x43, 0x60, 0x04, 0x24, 0x86, 0x67, 0x47, 0x4c, 0x0e, 0xe6, 0xdf, 0xbf, 0x06, 0x5a, 0xf7, 0x41, 0x8e, 0xf2, 0x52, 0x53, 0xd5, 0xe5, 0x09, 0x8d, 0x49, 0x98, 0x15, 0xee, 0xb7, 0x36, 0xc5, 0xa6, 0xec, 0xa1, 0x2c, 0xd4, 0xf7, 0xb2, 0xed, 0x2c, 0x81, 0x52, 0xde, 0x13, 0x46, 0x69, 0x72, 0xf2, 0x97, 0xbd, 0x2a, 0xeb, 0x2a, 0x53, 0xd0, 0x0b, 0xd0, 0xb2, 0x2f, 0xb6, 0x6a, 0x56, 0xd1, 0x68, 0x59, 0x98, 0xa4, 0x78, 0x0a, 0x74, 0x21, 0x09, 0x95, 0xc6, 0x51, 0xfc, 0x70, 0xf4, 0x0f, 0xaf, 0x6e, 0x9b, 0x3a, 0xe8, 0x5e, 0x77, 0x04, 0x8b, 0x57, 0x83, 0x3d, 0xb7, 0xd0, 0x19, 0xf2, 0x70, 0xa5, 0x79, 0xfe, 0x04, 0xed, 0x50, 0xc7, 0x5c, 0x2e, 0xe3, 0x02, 0x80, 0x4c, 0xb1, 0x1a, 0x1e, 0x36, 0x76, 0x43, 0x11, 0xc6, 0xdf, 0x15, 0x96, 0x69, 0x61, 0x93, 0xca, 0x43, 0x6f, 0x98, 0xad, 0x08, 0x16, 0xd7, 0x4e, 0xef, 0xad, 0x3a, 0x68, 0x75, 0x97, 0x41, 0x3e, 0x6e, 0x9b, 0x02, 0xbb, 0xbe, 0xda, 0xa2, 0x99, 0xba, 0xe4, 0x65, 0x53, 0x21, 0x25, 0x7e, 0x32, 0x1b, 0x31, 0x34, 0x38, 0x7a, 0x0a, 0x89, 0x26, 0xe3, 0xaa, 0x01, 0xf7, 0x5f, 0x41, 0xbb, 0xc1, 0xdc, 0xd8, 0x96, 0x64, 0xed, 0xf2, 0xb7, 0x3f, 0x7b, 0x9a, 0x28, 0x9c, 0xb6, 0x7f, 0xb6, 0x0b, 0xad, 0xec, 0xcd, 0x14, 0x08, 0x65, 0xaf, 0x8c, 0x50, 0x87, 0x87, 0xa9, 0x1e, 0x02, 0x60, 0x98, 0x45, 0x80, 0x4f, 0x84, 0xc4, 0x8b, 0x7d, 0x6c, 0x94, 0xae, 0x9b, 0x90, 0xcd, 0x36, 0x5a, 0x6c, 0x03, 0x37, 0xcc, 0x19, 0x34, 0x55, 0xfe, 0x5c, 0x4b, 0xb3, 0xdf, 0xca, 0x84, 0xe2, 0x4e, 0x5b, 0x55, 0x2b, 0x69, 0xb5, 0xc8, 0xba, 0x8a, 0x60, 0x7f, 0x6e, 0x2a, 0x45, 0x68, 0x32, 0x93, 0xb9, 0xd1, 0xa2, 0x54, 0x8d, 0x2c, 0x33, 0x29, 0x32, 0x2e, 0x6f, 0xdb, 0x89, 0xaf, 0xdf, 0xfc, 0x01, 0x56, 0xb5, 0x75, 0xc5, 0x52, 0xe0, 0x6b, 0xfd, 0x5a, 0xa4, 0xd7, 0xbf, 0x3e, 0xc0, 0x72, 0x02, 0xe9, 0x62, 0xc2, 0x95, 0x33, 0x92, 0x3c, 0xd8, 0x89, 0xe4, 0xc2, 0x69, 0x5b, 0x19, 0x55, 0x55, 0x85, 0x2a, 0x72, 0x99, 0x13, 0xfc, 0xcf, 0xeb, 0xbc, 0x2e, 0x8b, 0x13, 0x79, 0xf2, 0x53, 0x59, 0x14, 0xb4, 0xc5, 0x8a, 0xba, 0x24, 0xb4, 0x9b, 0x33, 0x10, 0x99, 0x8b, 0x93, 0x3a, 0xc9, 0xda, 0x34, 0xa0, 0x74, 0x11, 0x35, 0x05, 0x9c, 0x15, 0x67, 0xc5, 0x31, 0xfc, 0x61, 0xef, 0xf8, 0xbf, 0xfb, 0xa1, 0x1f, 0xc5, 0x3f, 0x3d, 0xee, 0x7f, 0xfe, 0xe5, 0x71, 0xf7, 0xe4, 0xc4, 0xfb, 0xc8, 0xbb, 0x71, 0x27, 0xbe, 0x79, 0x77, 0x37, 0x9f, 0xf9, 0x36, 0x91, 0x7a, 0xb6, 0xf2, 0xec, 0x90, 0x2e, 0x33, 0xdc, 0x37, 0xcc, 0xce, 0x70, 0x4e, 0x96, 0x08, 0x7a, 0x36, 0x7c, 0x76, 0x2e, 0x60, 0x98, 0xbf, 0x72, 0x0b, 0x73, 0x94, 0xca, 0xc0, 0x5e, 0x02, 0xb2, 0x95, 0x66, 0x13, 0xdf, 0x41, 0x8a, 0xbb, 0xbb, 0x8a, 0xb1, 0xd9, 0x6e, 0xcd, 0x12, 0x8d, 0xc0, 0xed, 0x01, 0x33, 0x25, 0x80, 0x59, 0xa9, 0xed, 0xe5, 0xa4, 0xcd, 0x48, 0x11, 0xab, 0xa9, 0x50, 0xc3, 0xcd, 0x0b, 0xd5, 0x9d, 0x9a, 0x54, 0x82, 0x75, 0xac, 0x52, 0x55, 0x4e, 0x71, 0xb5, 0x16, 0xd9, 0x5e, 0x32, 0x99, 0xdd, 0xc4, 0x5a, 0xb8, 0xd9, 0x85, 0x39, 0x25, 0xb3, 0x78, 0x04, 0xa5, 0xc0, 0x06, 0xbd, 0x3a, 0x40, 0x89, 0xeb, 0x30, 0xd0, 0x85, 0x6d, 0x16, 0x63, 0x3e, 0xaa, 0x4a, 0xa3, 0xb1, 0xfd, 0x3a, 0xbf, 0xb4, 0x63, 0x92, 0xc0, 0xa2, 0xe5, 0x16, 0xb6, 0x75, 0x3f, 0x3b, 0xd4, 0x88, 0x79, 0x03, 0xf1, 0x3c, 0xdf, 0x83, 0xe3, 0x65, 0xdb, 0xae, 0xee, 0x5b, 0x02, 0x4f, 0x65, 0x81, 0x96, 0x1e, 0x65, 0xba, 0x9e, 0x5e, 0x50, 0x44, 0xdd, 0x76, 0x55, 0xa1, 0x75, 0x57, 0x53, 0x08, 0x0a, 0x6d, 0x2f, 0x86, 0xd8, 0xd3, 0xe4, 0x92, 0xa0, 0x89, 0x16, 0x22, 0x09, 0x04, 0x4f, 0xbe, 0x0a, 0xa8, 0xff, 0x85, 0xf5, 0x7a, 0x0f, 0x19, 0xe2, 0x09, 0xfe, 0xdc, 0xd6, 0x9f, 0x57, 0x7f, 0xdc, 0x9c, 0xbc, 0xbf, 0x39, 0x79, 0xfb, 0xe1, 0x48, 0x9e, 0x7f, 0xd9, 0x3c, 0xff, 0x8c, 0x0f, 0x2d, 0x17, 0xf4, 0xf5, 0x64, 0x59, 0xd4, 0x61, 0xbb, 0xaa, 0x3e, 0x96, 0xa5, 0x71, 0x9e, 0xe4, 0x26, 0xdd, 0x7b, 0x3d, 0x5c, 0xad, 0x25, 0x9b, 0xcf, 0xed, 0xeb, 0x4d, 0x2c, 0x56, 0xdb, 0x14, 0x90, 0x40, 0xdf, 0x1f, 0xfd, 0x72, 0x9d, 0x96, 0x1a, 0xe7, 0x53, 0x69, 0xa9, 0xc1, 0x24, 0x9f, 0xdd, 0xec, 0x39, 0xc8, 0x2e, 0x72, 0x87, 0x06, 0x76, 0xb0, 0xc9, 0x90, 0x49, 0x0e, 0x3a, 0x9f, 0xdd, 0x89, 0x5f, 0x3f, 0x9c, 0xe8, 0x43, 0x0f, 0x65, 0xeb, 0xd9, 0x71, 0x9d, 0xe7, 0x0f, 0x11, 0x72, 0xa2, 0x1c, 0x0d, 0xc7, 0x51, 0x6f, 0x7e, 0x03, 0xea, 0x86, 0x96, 0xf0, 0xff, 0xb4, 0x55, 0xde, 0x01, 0xee, 0xaf, 0x74, 0x9a, 0xdb, 0x8b, 0x8f, 0x03, 0x31, 0xcd, 0x36, 0x47, 0x67, 0x47, 0xe9, 0xec, 0x2f, 0x14, 0xd0, 0x56, 0x25, 0xdf, 0x89, 0x8e, 0x8a, 0x13, 0xc6, 0x2a, 0xe8, 0xb0, 0xbe, 0x58, 0x6c, 0x7f, 0x69, 0xbd, 0xfe, 0x78, 0x7d, 0x47, 0x48, 0x97, 0xfe, 0xe0, 0x8b, 0x8f, 0x84, 0xd4, 0x48, 0xdb, 0x0d, 0xe4, 0xff, 0xc3, 0x65, 0x18, 0x46, 0x0f, 0x6a, 0x8e, 0xc3, 0x72, 0x59, 0xbd, 0x8b, 0xff, 0xb1, 0x11, 0x1a, 0x38, 0x11, 0xc2, 0x94, 0x27, 0x7d, 0x2d, 0x23, 0xd5, 0x96, 0x32, 0x07, 0x8b, 0x01, 0x84, 0xd8, 0x76, 0xb2, 0x80, 0xfa, 0x47, 0x51, 0x14, 0x5c, 0xd9, 0xd1, 0x76, 0x7a, 0x2a, 0x55, 0x41, 0xc7, 0x4a, 0x94, 0xa2, 0x13, 0x25, 0xd2, 0xfa, 0x55, 0x2d, 0x40, 0x82, 0x21, 0xb3, 0xc4, 0x07, 0x4b, 0x32, 0x9d, 0x2f, 0x95, 0x64, 0x3a, 0x4b, 0x74, 0x26, 0x93, 0x30, 0x0b, 0xe2, 0xd0, 0x4d, 0x6e, 0x4b, 0xe6, 0x5b, 0xbb, 0x8c, 0x19, 0x66, 0x3e, 0xb9, 0x90, 0xe4, 0x99, 0xa7, 0xf3, 0x64, 0xbb, 0x3f, 0xc0, 0xfa, 0x6f, 0xb8, 0xc3, 0x51, 0xd6, 0xa4, 0x60, 0xed, 0x32, 0xcc, 0xee, 0x67, 0xb9, 0x7d, 0x34, 0x7e, 0x5c, 0x25, 0x29, 0x6b, 0xbb, 0x40, 0xa7, 0x4d, 0x78, 0xad, 0x40, 0x66, 0xce, 0x80, 0xc3, 0xf5, 0xca, 0xcc, 0xd8, 0x6e, 0x4d, 0xb7, 0xb6, 0xee, 0xa2, 0x31, 0xa8, 0x24, 0x9a, 0x0e, 0x9d, 0x7e, 0x01, 0x5d, 0xce, 0x4a, 0x00, 0xaf, 0x94, 0x18, 0x98, 0x23, 0x47, 0xaf, 0xe3, 0x0e, 0x93, 0x8e, 0x4d, 0x44, 0x71, 0xcb, 0x31, 0xcb, 0x92, 0x9b, 0xf8, 0x3e, 0x28, 0x88, 0xee, 0xee, 0x7c, 0xc3, 0x97, 0x15, 0xfd, 0x1d, 0xae, 0x27, 0x2c, 0xcb, 0x3a, 0x0a, 0xb6, 0x7c, 0x21, 0xa7, 0x78, 0x19, 0xd8, 0x8a, 0x7c, 0xfe, 0xc8, 0xcf, 0x66, 0x71, 0x3e, 0x55, 0xcb, 0xb6, 0xfe, 0x6e, 0x6c, 0xbb, 0x46, 0xa3, 0xab, 0x65, 0xdb, 0x48, 0x9b, 0x90, 0xdc, 0x56, 0x6a, 0x6f, 0x6c, 0x35, 0xba, 0xb7, 0xfc, 0xc9, 0x1a, 0x44, 0xb5, 0x36, 0xf0, 0x14, 0x56, 0xbb, 0xac, 0x40, 0x8d, 0xda, 0x4a, 0x8c, 0x26, 0x10, 0x72, 0x6f, 0x39, 0xdd, 0x65, 0x06, 0x0d, 0xed, 0x3c, 0x91, 0xb9, 0xa2, 0x20, 0x33, 0xa0, 0x75, 0xbc, 0x89, 0xef, 0xc3, 0x9a, 0xe5, 0xac, 0xcc, 0x3b, 0x5f, 0x5c, 0xf4, 0x55, 0x39, 0xcb, 0xcc, 0x09, 0x73, 0x10, 0xb8, 0x3d, 0xcf, 0xde, 0xe2, 0x90, 0xa7, 0x10, 0x66, 0x34, 0x68, 0x6b, 0x61, 0x17, 0xef, 0x13, 0x4c, 0xc4, 0xf0, 0x15, 0x72, 0xc1, 0x06, 0x52, 0x79, 0xa7, 0xf6, 0x3a, 0x57, 0x95, 0x7f, 0xcc, 0x04, 0xdb, 0x19, 0xc7, 0x6a, 0x9b, 0x73, 0x27, 0xcf, 0x4d, 0xf6, 0x66, 0xb4, 0x56, 0xaa, 0x2c, 0xc9, 0x46, 0x82, 0xc0, 0xb4, 0x45, 0x4b, 0xad, 0xcb, 0x8a, 0x80, 0x21, 0xc8, 0xaa, 0x30, 0x75, 0x95, 0x56, 0xb4, 0x74, 0x89, 0x51, 0xa9, 0x62, 0x82, 0x56, 0x2b, 0xb9, 0x8d, 0x13, 0x94, 0xcc, 0xfa, 0xf0, 0xf6, 0x6e, 0xf8, 0xc4, 0x09, 0xb1, 0x09, 0x90, 0x2d, 0xce, 0xec, 0x70, 0xe1, 0x41, 0x8a, 0xcc, 0xf1, 0xa6, 0xad, 0x49, 0x8e, 0x7c, 0xbf, 0xf3, 0xf1, 0x57, 0x76, 0xb9, 0xc8, 0x6c, 0x33, 0x2d, 0xec, 0x29, 0x6d, 0x32, 0xbb, 0xa5, 0xa3, 0x4e, 0x4f, 0x84, 0xf1, 0x5a, 0x50, 0x7c, 0xd2, 0x9a, 0x28, 0x89, 0x03, 0x84, 0x6c, 0x1b, 0x08, 0x9e, 0xb5, 0x66, 0xe4, 0xc2, 0x79, 0x56, 0x86, 0x9c, 0x6b, 0x23, 0x73, 0x2e, 0xb5, 0x4c, 0x72, 0x1d, 0x4a, 0x16, 0x24, 0x1e, 0xfd, 0x6a, 0xa2, 0xb9, 0x12, 0x4c, 0x2b, 0x19, 0x07, 0x22, 0x83, 0x3e, 0xd9, 0x6d, 0xa7, 0x6b, 0x13, 0x8c, 0x86, 0x76, 0x28, 0x84, 0xe4, 0xd6, 0xe7, 0xa1, 0xb2, 0x79, 0xbe, 0x8c, 0xab, 0x3f, 0x7b, 0x9f, 0x24, 0xe5, 0x9e, 0x9f, 0x20, 0x5b, 0xe6, 0xdb, 0x04, 0x5c, 0x55, 0xab, 0x06, 0x30, 0xca, 0xb6, 0x77, 0x1f, 0x01, 0xe0, 0xdb, 0x66, 0x9b, 0x7f, 0x01, 0x88, 0x92, 0x96, 0x80, 0x97, 0xe0, 0x7c, 0xc7, 0xac, 0x23, 0xcc, 0x39, 0xad, 0x5a, 0x41, 0x37, 0xb8, 0x6e, 0x4d, 0x6d, 0xa9, 0xa0, 0x95, 0x29, 0x2b, 0x3a, 0x6a, 0xb4, 0x7a, 0x5a, 0x90, 0x6f, 0xe1, 0x42, 0x60, 0x7c, 0x82, 0xcb, 0xdf, 0xb3, 0x2c, 0x4b, 0x6f, 0x4d, 0xdf, 0xff, 0xf1, 0xe6, 0xf5, 0x57, 0xeb, 0x35, 0x4d, 0xfe, 0xf3, 0x44, 0xd9, 0x38, 0x10, 0xc2, 0xf0, 0xc7, 0xe1, 0xbc, 0x60, 0x42, 0x84, 0xf0, 0x08, 0x5f, 0x68, 0x97, 0x2e, 0x23, 0xd6, 0xab, 0x04, 0x3d, 0xcb, 0xf3, 0x7a, 0x41, 0x88, 0xb2, 0xc3, 0x7a, 0x75, 0x49, 0x01, 0xce, 0x34, 0xd5, 0xa0, 0x8d, 0x45, 0xb6, 0x25, 0xa1, 0xf7, 0x52, 0x89, 0x2c, 0xd2, 0x19, 0xba, 0x01, 0x62, 0x0a, 0xb9, 0x4c, 0x76, 0x34, 0xca, 0x80, 0x81, 0xc0, 0xba, 0x41, 0xa3, 0x75, 0x96, 0xab, 0x9c, 0x63, 0x34, 0x1a, 0xf6, 0x04, 0x69, 0x1c, 0xb2, 0x64, 0x17, 0x3f, 0xc6, 0xb7, 0xc5, 0xcc, 0xb0, 0x0b, 0x10, 0xca, 0x65, 0xc6, 0x75, 0x91, 0xad, 0x3f, 0xcf, 0x1f, 0x39, 0x3e, 0xf0, 0x44, 0x68, 0x77, 0x1e, 0xd0, 0xf2, 0x01, 0xcd, 0x28, 0xe6, 0x32, 0x72, 0x25, 0x0c, 0x8c, 0x70, 0x85, 0x04, 0xb1, 0x24, 0x66, 0x81, 0x4f, 0x14, 0x81, 0xb5, 0xd6, 0xe5, 0x9f, 0xe0, 0x38, 0x36, 0xfc, 0xa4, 0x31, 0x16, 0xc8, 0x4c, 0xc1, 0xc3, 0x22, 0xef, 0x4c, 0xaa, 0x32, 0x4c, 0x08, 0x67, 0x52, 0x33, 0xda, 0x98, 0x19, 0xdb, 0xff, 0x98, 0x65, 0x4a, 0xc8, 0x87, 0xc3, 0x63, 0x7a, 0x74, 0x93, 0x43, 0x90, 0x70, 0x99, 0xc8, 0xdd, 0x2e, 0xfc, 0x3a, 0x66, 0xfe, 0x6f, 0x37, 0xae, 0xd9, 0xfb, 0xf6, 0x0e, 0x54, 0xe3, 0xb8, 0x8e, 0xc1, 0x9c, 0x46, 0x50, 0x6a, 0xe1, 0xe4, 0x41, 0x1c, 0x66, 0x5b, 0xc5, 0x7c, 0x67, 0x25, 0xcc, 0xb1, 0x78, 0xd3, 0x97, 0xf5, 0x32, 0xb0, 0xc2, 0xd9, 0x92, 0x2d, 0xf6, 0x61, 0xdd, 0x7e, 0x52, 0xad, 0xb9, 0xf6, 0xb8, 0x15, 0xb8, 0x64, 0xdb, 0x6d, 0xee, 0x11, 0xf5, 0x31, 0x6d, 0xef, 0x38, 0xdd, 0x6e, 0xcc, 0x12, 0xb6, 0x9f, 0x8c, 0xce, 0x5d, 0xd1, 0xe4, 0x86, 0x91, 0x6b, 0xcc, 0x92, 0x3a, 0xa7, 0x63, 0x5a, 0xf0, 0x9a, 0x1c, 0x22, 0xc5, 0x9a, 0x1c, 0x54, 0xc9, 0x37, 0x29, 0xd7, 0x6c, 0x76, 0xad, 0xee, 0x0c, 0x64, 0xe1, 0xc3, 0x3e, 0x3a, 0x63, 0xe3, 0xe2, 0xfa, 0x14, 0x56, 0x82, 0x12, 0x7a, 0x72, 0xe8, 0xf4, 0xa1, 0x01, 0xda, 0xff, 0xaa, 0xd5, 0x94, 0x90, 0x14, 0xba, 0x07, 0xd0, 0xb1, 0x7e, 0xed, 0x7f, 0xc3, 0x1f, 0x6b, 0xb6, 0x33, 0xb6, 0xfd, 0xed, 0x57, 0xcd, 0x9a, 0x12, 0xee, 0x51, 0x6f, 0x72, 0x43, 0xd5, 0xd5, 0x63, 0x7e, 0xec, 0x79, 0x29, 0x6b, 0x44, 0x6f, 0x59, 0x0d, 0x75, 0xa8, 0x36, 0xcf, 0xf2, 0x50, 0xe5, 0x27, 0xc9, 0x4b, 0x28, 0xd7, 0xb0, 0xdb, 0xb2, 0x6e, 0x6f, 0x5b, 0x88, 0x36, 0x2e, 0x17, 0x44, 0x25, 0x28, 0x85, 0x51, 0x6c, 0x72, 0x41, 0xe3, 0x25, 0xe1, 0xc4, 0xcb, 0x04, 0x8a, 0x5a, 0xfb, 0x31, 0x9d, 0x2b, 0xd0, 0xd6, 0x5e, 0x2c, 0x6b, 0xed, 0xb8, 0xd0, 0xf7, 0x1d, 0x85, 0xb7, 0x41, 0x52, 0x66, 0x79, 0x96, 0xc4, 0x22, 0xda, 0x33, 0x9e, 0xfb, 0x49, 0x9e, 0x2a, 0x75, 0xdc, 0x87, 0x47, 0x57, 0xbe, 0x12, 0xfb, 0xc4, 0x8d, 0x5e, 0x3d, 0xa6, 0x0f, 0xf1, 0xa3, 0x0e, 0x1f, 0x1e, 0xf7, 0xf2, 0x1f, 0xbc, 0x88, 0xcc, 0xdf, 0x8e, 0x7b, 0x16, 0x8b, 0x50, 0x14, 0xb1, 0x4c, 0x7f, 0x8d, 0xb2, 0x97, 0xf8, 0x34, 0xff, 0xc4, 0x82, 0xf4, 0xdd, 0x91, 0xd8, 0xdb, 0x37, 0xdd, 0xeb, 0x77, 0x77, 0x10, 0xa4, 0x9c, 0xcf, 0xe4, 0x39, 0x66, 0xf8, 0x90, 0x95, 0xde, 0xe0, 0x3b, 0x9e, 0x08, 0x1e, 0xfe, 0x29, 0x53, 0x8a, 0xe2, 0x26, 0x26, 0xf6, 0x2b, 0xe0, 0xfa, 0x3a, 0x69, 0x7b, 0x2b, 0x64, 0xd0, 0x36, 0x14, 0xdd, 0x53, 0x84, 0x6c, 0x28, 0x8a, 0xe1, 0x7d, 0x88, 0x8a, 0x5f, 0x5b, 0x36, 0x7d, 0x1b, 0x9f, 0xb4, 0xc9, 0xc8, 0xee, 0xae, 0xca, 0xd2, 0x9c, 0x69, 0x1e, 0xf3, 0x14, 0xcd, 0x60, 0x26, 0x29, 0x92, 0x30, 0x66, 0x87, 0x03, 0x05, 0x60, 0x3c, 0x89, 0xd2, 0x34, 0xf4, 0xe3, 0x23, 0x7b, 0x38, 0x3e, 0x66, 0xaf, 0x0e, 0xf1, 0x71, 0xf7, 0xe0, 0x3b, 0xee, 0x6d, 0xe7, 0xec, 0x2d, 0xf9, 0x10, 0x18, 0xe1, 0x0b, 0x36, 0x0d, 0xbe, 0x80, 0x53, 0x9c, 0xe6, 0xed, 0xbb, 0x7d, 0x02, 0x93, 0xab, 0x23, 0x40, 0xb8, 0x23, 0xe8, 0x27, 0xcf, 0xd8, 0x03, 0xb1, 0xf3, 0x09, 0xe2, 0x92, 0xa7, 0x46, 0x5d, 0x31, 0x95, 0xb1, 0x42, 0x3c, 0x74, 0x99, 0x5d, 0xf3, 0x34, 0x79, 0x0b, 0xbe, 0xee, 0x8e, 0x6e, 0xa7, 0xa2, 0x00, 0x5d, 0x77, 0xc7, 0xe9, 0x56, 0x56, 0x75, 0x48, 0x4e, 0x24, 0x2d, 0x4c, 0x5e, 0x66, 0xc6, 0x32, 0xfd, 0x9b, 0xe4, 0x3e, 0x51, 0xf9, 0xde, 0x79, 0x3a, 0x84, 0x52, 0xa9, 0x7d, 0x90, 0x40, 0x9b, 0x81, 0x7b, 0x07, 0xf6, 0xd2, 0x88, 0xe3, 0x0b, 0xe7, 0x0c, 0x76, 0x4d, 0xfe, 0x2c, 0x28, 0xf6, 0x9a, 0x31, 0x1d, 0xe1, 0x2f, 0x70, 0x89, 0x62, 0x7b, 0x1a, 0xa6, 0xeb, 0x9b, 0x69, 0xa1, 0x37, 0xe4, 0x2d, 0x9f, 0xc1, 0x07, 0xf2, 0xa4, 0x15, 0xa8, 0x17, 0xb7, 0x94, 0xc0, 0xc6, 0xea, 0x61, 0x15, 0x0e, 0x9b, 0x3c, 0xbf, 0x36, 0x40, 0xb7, 0xfa, 0x80, 0x17, 0xa5, 0x65, 0xe0, 0x6d, 0xba, 0x4c, 0x59, 0xed, 0x86, 0xd2, 0xd0, 0xb7, 0x18, 0xe2, 0xc4, 0x74, 0xb9, 0xa1, 0xd8, 0x6e, 0xba, 0x10, 0xfd, 0x62, 0x82, 0xc2, 0xb1, 0xcc, 0x4a, 0x95, 0x29, 0x3a, 0x65, 0xfc, 0xc0, 0x6e, 0x2c, 0x93, 0xbd, 0xfd, 0xf0, 0xba, 0x23, 0xf4, 0x01, 0x7a, 0x2a, 0xdf, 0x05, 0x41, 0xcb, 0xd9, 0xe7, 0x66, 0x58, 0x66, 0xe3, 0xf8, 0x7c, 0x1a, 0x09, 0xcd, 0x1b, 0x82, 0x8e, 0xeb, 0x48, 0x71, 0xe7, 0x57, 0x15, 0x09, 0xc8, 0x61, 0x63, 0x60, 0xee, 0x54, 0xdb, 0x5e, 0x31, 0xc8, 0x4c, 0x10, 0xec, 0x23, 0x40, 0x78, 0xd5, 0x88, 0xea, 0xba, 0x53, 0x0f, 0x69, 0xa1, 0x46, 0x22, 0xa5, 0x58, 0x55, 0x42, 0x46, 0x32, 0x4c, 0x6b, 0x2e, 0x29, 0x40, 0xa6, 0x75, 0xea, 0xc9, 0x27, 0x52, 0x68, 0x52, 0x68, 0xa9, 0x64, 0x52, 0xc8, 0x42, 0xc4, 0xd2, 0xc4, 0x84, 0xa7, 0xe8, 0xfe, 0x3e, 0xd2, 0x09, 0xa4, 0xfd, 0xf9, 0x14, 0xdc, 0xb8, 0x13, 0x3f, 0xbc, 0xb9, 0x23, 0x07, 0xef, 0xba, 0xae, 0xe7, 0x1a, 0xdf, 0x25, 0x80, 0x3f, 0xbb, 0x74, 0x99, 0x91, 0x91, 0x67, 0xba, 0xdd, 0x26, 0xfc, 0xc0, 0x7e, 0x0e, 0x91, 0x06, 0xbc, 0x1c, 0x91, 0xe1, 0x99, 0xad, 0xd2, 0xe6, 0xa9, 0xdd, 0xfe, 0xa9, 0xb7, 0x59, 0x7c, 0xdb, 0x4a, 0xdb, 0x5d, 0x11, 0x70, 0xd7, 0xd9, 0xea, 0x0b, 0xb9, 0xc2, 0x42, 0x77, 0x79, 0xd1, 0x15, 0x64, 0xf4, 0x01, 0x5d, 0x64, 0x79, 0xd9, 0x01, 0xcb, 0x17, 0x0d, 0xc1, 0xf8, 0xbe, 0xa1, 0x88, 0xc6, 0xf4, 0xba, 0x2b, 0x4b, 0x42, 0x8d, 0x05, 0xc5, 0x39, 0xd2, 0x64, 0x4a, 0x0b, 0xba, 0xd6, 0xbf, 0xce, 0xe2, 0x7c, 0xf7, 0x2d, 0x0d, 0xbb, 0xa6, 0x8b, 0x75, 0x86, 0xc3, 0xb2, 0x4c, 0x93, 0x7d, 0xc5, 0x6c, 0x57, 0xba, 0xb3, 0x20, 0x3d, 0x45, 0x8f, 0xe9, 0xf9, 0xc7, 0xe0, 0x9a, 0x24, 0x10, 0xb9, 0x38, 0xf6, 0x84, 0x11, 0x06, 0xae, 0x4f, 0xe8, 0xcb, 0xa3, 0x6d, 0x94, 0xa3, 0x4b, 0xf4, 0x24, 0x5a, 0x14, 0xcb, 0x0b, 0xba, 0x8f, 0x29, 0x06, 0x93, 0x85, 0x84, 0xec, 0x44, 0x21, 0x4b, 0x15, 0xa4, 0x04, 0x02, 0x25, 0xb7, 0xcd, 0x6e, 0x32, 0x45, 0x0d, 0x3d, 0x10, 0x71, 0xca, 0x0e, 0x49, 0xc2, 0x5d, 0xce, 0x1e, 0x19, 0xc5, 0xca, 0x29, 0x4f, 0x8f, 0x82, 0x45, 0x3a, 0xf0, 0xa3, 0x94, 0xf3, 0xab, 0x5f, 0xfc, 0xdf, 0xb7, 0x79, 0xfd, 0x77, 0x6d, 0xf7, 0xe1, 0xfd, 0x9d, 0xe5, 0x5a, 0x5c, 0xa0, 0xba, 0xb9, 0x35, 0xdb, 0xd3, 0xab, 0xcf, 0xbe, 0xe1, 0xfb, 0x73, 0x90, 0x79, 0xdd, 0x8c, 0x97, 0x07, 0x0a, 0xde, 0x55, 0x11, 0x67, 0xea, 0x29, 0x60, 0x2c, 0x38, 0xa6, 0xc8, 0xc0, 0x84, 0xe9, 0x41, 0xfb, 0xd9, 0x9e, 0xa2, 0xb8, 0xd0, 0x24, 0xc1, 0x31, 0xf2, 0xe9, 0xcf, 0x0e, 0xd2, 0x80, 0x1d, 0x8a, 0xd0, 0xf7, 0x8f, 0x51, 0x9a, 0x48, 0x37, 0x3c, 0xa4, 0x07, 0x26, 0x08, 0xde, 0xc7, 0xce, 0x91, 0x60, 0xe1, 0x3f, 0xa7, 0xe7, 0x22, 0xeb, 0xc6, 0xdb, 0xce, 0xda, 0xbb, 0x16, 0x99, 0xe0, 0x65, 0x00, 0xd5, 0x9d, 0x87, 0x23, 0x87, 0x7f, 0x37, 0xd9, 0x79, 0xfa, 0xa2, 0x68, 0xda, 0x7e, 0x23, 0xef, 0x39, 0x08, 0x08, 0x6d, 0x78, 0x2e, 0x5e, 0xd1, 0xbf, 0x74, 0xa7, 0x45, 0x14, 0x21, 0x86, 0x59, 0xc2, 0xb3, 0x98, 0xa9, 0x38, 0xca, 0x62, 0xa1, 0xc2, 0x94, 0x16, 0xc8, 0xa4, 0x49, 0x16, 0x71, 0x76, 0x0c, 0xa3, 0x20, 0x49, 0xd3, 0x24, 0x3e, 0xa6, 0x41, 0x28, 0x09, 0x34, 0xa6, 0x22, 0x61, 0x5c, 0x32, 0x49, 0x4e, 0x3f, 0xd3, 0xf4, 0x03, 0x82, 0x6b, 0x8c, 0x87, 0xf1, 0x51, 0x44, 0x09, 0x4b, 0x68, 0xe1, 0x52, 0x99, 0x24, 0x8f, 0x2c, 0x86, 0xc0, 0x92, 0x1f, 0x85, 0xfe, 0xe1, 0xe9, 0xe1, 0xc6, 0x75, 0xeb, 0xdf, 0x77, 0x7f, 0xdc, 0x79, 0x66, 0xe1, 0xcc, 0x9b, 0x21, 0xb9, 0x49, 0xb1, 0x8a, 0xb0, 0x05, 0x5b, 0xc8, 0x10, 0x11, 0x8a, 0x1c, 0x26, 0xc1, 0x38, 0x9f, 0x99, 0x3f, 0x30, 0x08, 0x99, 0x39, 0x7c, 0x61, 0xae, 0x3b, 0x7c, 0xb3, 0x15, 0xfb, 0xdf, 0xfd, 0xf8, 0x53, 0xd5, 0xf6, 0x3b, 0x65, 0x96, 0xc9, 0xba, 0xd7, 0x7f, 0x10, 0xc8, 0x9a, 0x6d, 0xf0, 0x62, 0x81, 0xf0, 0x72, 0xa5, 0xc5, 0xb8, 0x3e, 0x6d, 0x08, 0x99, 0xa0, 0xe5, 0x73, 0x18, 0xb3, 0x3d, 0x59, 0x57, 0x52, 0x37, 0x74, 0x5f, 0x57, 0x56, 0xc5, 0xcb, 0x8e, 0xb0, 0xf7, 0x4d, 0xdf, 0xf5, 0x98, 0x60, 0x47, 0x03, 0x2d, 0x0a, 0x2c, 0xf8, 0x22, 0x47, 0xd3, 0xd7, 0x88, 0xab, 0xab, 0xbe, 0x47, 0x24, 0xd7, 0xd5, 0x39, 0x4a, 0xbb, 0x4d, 0x23, 0x75, 0x57, 0x88, 0x6e, 0xdf, 0xab, 0x5a, 0x90, 0x07, 0x2d, 0x44, 0x48, 0x87, 0x31, 0x8d, 0x18, 0x57, 0xb1, 0x3c, 0xc4, 0xb7, 0x17, 0x6d, 0xdf, 0xbd, 0x79, 0xdd, 0xbe, 0xbb, 0x13, 0xde, 0xf2, 0x75, 0xf4, 0x69, 0xc7, 0xb1, 0xfc, 0xd1, 0x13, 0xe7, 0xed, 0xed, 0xd9, 0xb1, 0x44, 0x86, 0x13, 0x78, 0xf0, 0xc0, 0x8f, 0xb1, 0x3f, 0xa6, 0x50, 0xb1, 0x55, 0xe2, 0xd4, 0xc4, 0x68, 0xd5, 0x31, 0x70, 0xf6, 0x27, 0x08, 0x03, 0x72, 0x28, 0x6e, 0x16, 0x68, 0x8b, 0xc8, 0xca, 0xea, 0xa4, 0xf9, 0x89, 0x19, 0x34, 0xca, 0xf5, 0x15, 0x99, 0xad, 0x54, 0x1b, 0x91, 0x69, 0x64, 0xd4, 0xa9, 0x61, 0x45, 0x7c, 0x92, 0x92, 0x7c, 0x63, 0x49, 0x51, 0x4d, 0xa1, 0xb8, 0x89, 0x84, 0x49, 0x29, 0xc2, 0x39, 0xc6, 0x51, 0x98, 0x44, 0xc7, 0xe3, 0x6d, 0xdd, 0x8c, 0xdd, 0xbb, 0x0f, 0xef, 0xbe, 0xa0, 0xd0, 0xfc, 0x06, 0xe1, 0xcc, 0x3a, 0xe0, 0x32, 0x5f, 0x10, 0x13, 0xcc, 0x0e, 0x18, 0x86, 0xa6, 0xe5, 0x7e, 0x4f, 0xe7, 0x25, 0x81, 0x80, 0x84, 0x90, 0xae, 0x30, 0x8a, 0xcb, 0xa3, 0xca, 0x9e, 0x22, 0xf6, 0xfb, 0x2b, 0xc6, 0x62, 0xce, 0x8f, 0xfc, 0x90, 0x06, 0x3a, 0x4b, 0x64, 0x1a, 0xde, 0x2b, 0x01, 0x1e, 0xc6, 0x94, 0x5c, 0xe2, 0xaf, 0x4f, 0xdf, 0xbb, 0x1d, 0xdf, 0xdf, 0x76, 0x01, 0xc0, 0xb6, 0x8b, 0x8b, 0x32, 0xa6, 0xbf, 0xba, 0x0c, 0x22, 0x3c, 0x66, 0x19, 0xc4, 0x38, 0x5c, 0xc0, 0xe6, 0xbd, 0x8d, 0x3f, 0x6e, 0x4f, 0x23, 0xf9, 0x17, 0xdf, 0xf3, 0xce, 0xa3, 0xeb, 0x8d, 0xeb, 0x7f, 0xd2, 0xe9, 0xfa, 0xda, 0xb6, 0x9b, 0x64, 0x1b, 0xba, 0xee, 0x7d, 0x4b, 0x0e, 0x12, 0xe1, 0xe5, 0xd9, 0x70, 0x41, 0x41, 0x98, 0x4f, 0xa0, 0x6a, 0xfe, 0x56, 0x7f, 0xd5, 0x7c, 0xd5, 0x6d, 0xe0, 0xe7, 0x75, 0x98, 0x76, 0x87, 0xac, 0x3a, 0x25, 0xad, 0x52, 0x28, 0x25, 0x45, 0x8d, 0xcc, 0x93, 0x5c, 0x25, 0xde, 0x11, 0xfd, 0x57, 0xb4, 0x4f, 0x7d, 0x72, 0x89, 0x71, 0x7c, 0x44, 0x64, 0xc9, 0xf4, 0x3d, 0xcf, 0xe8, 0x66, 0x88, 0x12, 0xf2, 0xf8, 0x01, 0x7d, 0x42, 0xf7, 0xc1, 0xab, 0x98, 0xc5, 0xe9, 0xf1, 0xfb, 0x41, 0xff, 0x77, 0xaf, 0x1b, 0x6c, 0xf3, 0xc8, 0x33, 0x0a, 0x7f, 0x71, 0xc8, 0x38, 0xef, 0xec, 0x79, 0xe3, 0xc2, 0x5e, 0xd2, 0x6d, 0xd8, 0x51, 0x98, 0xa8, 0x09, 0xf1, 0xa9, 0xc4, 0x70, 0x93, 0xc7, 0x39, 0x33, 0x79, 0x22, 0x0f, 0xf2, 0x40, 0x48, 0x22, 0x08, 0x32, 0x95, 0x0a, 0xa4, 0x4f, 0xe3, 0x28, 0x97, 0x51, 0x98, 0x62, 0xf6, 0x03, 0x3d, 0xe9, 0x11, 0x5d, 0xd7, 0xbf, 0xa5, 0x84, 0x0f, 0x85, 0x47, 0xa8, 0xff, 0x95, 0xc9, 0xa2, 0x2c, 0x8c, 0xe3, 0xbf, 0xb6, 0x90, 0x6c, 0xfb, 0xaf, 0xb7, 0x5d, 0x00, 0x64, 0x5b, 0xf7, 0xfe, 0x4e, 0x38, 0x56, 0x28, 0x04, 0x9c, 0x99, 0x14, 0x89, 0x6e, 0xa5, 0x0a, 0xdf, 0x65, 0xdb, 0xfb, 0xc9, 0xf9, 0xf4, 0xf0, 0xfd, 0xeb, 0x8b, 0x7f, 0xef, 0xfe, 0xfb, 0x4b, 0xeb, 0x6e, 0xe3, 0x37, 0xe9, 0x3e, 0x90, 0xff, 0x37, 0x33, 0x3b, 0x43, 0x0e, 0xd6, 0xf1, 0x08, 0x46, 0xae, 0x17, 0x43, 0xc0, 0xd8, 0x01, 0x36, 0x5e, 0x3c, 0x76, 0x5e, 0xbe, 0x2d, 0x53, 0x4c, 0x7e, 0xd0, 0xc6, 0xd2, 0xa7, 0xad, 0x2d, 0xfa, 0xca, 0xed, 0xd4, 0xf0, 0xae, 0x03, 0xdb, 0x49, 0x49, 0xc1, 0x40, 0x99, 0x63, 0x94, 0x0e, 0x1d, 0x9c, 0xf4, 0xa5, 0x52, 0x0a, 0xde, 0x72, 0xba, 0x15, 0xa4, 0xe1, 0x5a, 0x49, 0x5a, 0x6d, 0xa1, 0xa5, 0x96, 0x41, 0x7e, 0xa0, 0xd8, 0x46, 0x4a, 0x42, 0x68, 0x2a, 0x05, 0x35, 0x9e, 0x2f, 0x33, 0xc6, 0x83, 0x7d, 0x12, 0xbe, 0x8a, 0x6f, 0xec, 0xd7, 0x84, 0x5d, 0xf4, 0xd7, 0x1b, 0x46, 0xc8, 0xd1, 0x5b, 0x17, 0x6f, 0xf6, 0xb8, 0x73, 0x19, 0x07, 0xb3, 0x0e, 0x83, 0x33, 0x9e, 0x97, 0xc1, 0xfb, 0xb6, 0x4c, 0xb1, 0x56, 0xd5, 0xd6, 0xf3, 0xa7, 0x33, 0x24, 0x0c, 0x44, 0xfb, 0x5c, 0x7d, 0x41, 0xff, 0x69, 0x41, 0xd1, 0x4a, 0xa1, 0xc2, 0x22, 0x07, 0x43, 0xa1, 0x92, 0x8a, 0xc2, 0x38, 0x85, 0x2c, 0x71, 0x69, 0x30, 0x10, 0x63, 0x02, 0xc5, 0x2b, 0x09, 0x15, 0x69, 0x27, 0x02, 0x53, 0xad, 0x56, 0xa9, 0x56, 0x51, 0x92, 0x06, 0x84, 0x6d, 0x58, 0x86, 0x58, 0x2d, 0x60, 0x32, 0xb8, 0x31, 0xa1, 0x4a, 0x37, 0xeb, 0x1f, 0x77, 0x90, 0x8b, 0xa2, 0x6b, 0x98, 0x82, 0x1a, 0x3e, 0xd9, 0xb2, 0x99, 0xb7, 0xfa, 0x33, 0xca, 0x31, 0x8c, 0x36, 0x22, 0x07, 0x7f, 0xad, 0x59, 0xbf, 0x4a, 0xf6, 0xd8, 0xde, 0x0f, 0x68, 0x65, 0x37, 0xc6, 0xaa, 0x86, 0x6e, 0x64, 0x7f, 0xcf, 0x75, 0x96, 0xad, 0x32, 0x5d, 0x7c, 0x2c, 0x2b, 0x59, 0x7d, 0xc0, 0xa6, 0xb0, 0x85, 0x96, 0x0a, 0x12, 0x44, 0x50, 0xef, 0xb5, 0xaa, 0x44, 0x49, 0x04, 0x26, 0x1a, 0x02, 0xd8, 0x75, 0xae, 0x8b, 0xb4, 0xae, 0xe8, 0x58, 0xb2, 0x38, 0x46, 0x93, 0xc8, 0x6d, 0xb3, 0x3d, 0xd6, 0xae, 0xc9, 0x41, 0x2a, 0xf8, 0x42, 0x11, 0x99, 0x3f, 0xfa, 0x60, 0x5f, 0x9c, 0x5c, 0x5c, 0x61, 0xce, 0xea, 0x0d, 0x00, 0xfb, 0x03, 0xa8, 0x95, 0xbf, 0x4e, 0xf6, 0x94, 0x1b, 0x19, 0xde, 0x09, 0xb3, 0x46, 0xb9, 0x25, 0xeb, 0xca, 0x9a, 0x36, 0xdf, 0x46, 0x7d, 0x50, 0x78, 0x47, 0x76, 0xb5, 0xdb, 0xc6, 0x1f, 0xed, 0x68, 0x8c, 0x02, 0xa7, 0x55, 0x69, 0x2b, 0x66, 0x30, 0x0e, 0xc5, 0x27, 0x2b, 0x08, 0x8b, 0xd2, 0x75, 0x82, 0x3e, 0xd4, 0xaa, 0xad, 0x33, 0x5d, 0x72, 0x69, 0x04, 0xcb, 0x32, 0xf1, 0xf2, 0xcc, 0xd2, 0x0b, 0xeb, 0xd5, 0xbd, 0x79, 0x43, 0xfb, 0x70, 0x72, 0x3d, 0xa4, 0xbb, 0xed, 0xe4, 0x01, 0xbd, 0x64, 0xe7, 0x75, 0x71, 0x40, 0x40, 0xb6, 0x52, 0x24, 0x03, 0xa3, 0xfc, 0x0b, 0x34, 0x0f, 0xfc, 0x85, 0xd6, 0x0d, 0x3d, 0xec, 0xeb, 0x95, 0xbe, 0xd0, 0xe6, 0x53, 0x0d, 0x66, 0x7b, 0x34, 0xa6, 0x1d, 0x9f, 0x55, 0x35, 0xae, 0xf5, 0xdb, 0x18, 0xec, 0x7e, 0xd0, 0x8f, 0xea, 0xda, 0xbc, 0xd8, 0xb8, 0x77, 0x4c, 0x07, 0xbd, 0x29, 0x0a, 0x5e, 0x21, 0x71, 0x4b, 0x06, 0xe6, 0x7a, 0xe3, 0x9f, 0xc0, 0x94, 0xa0, 0x29, 0x30, 0x95, 0xc5, 0xa2, 0x4c, 0x66, 0x22, 0xf3, 0x6f, 0x2c, 0xdf, 0x5a, 0xbb, 0xe6, 0x65, 0xf5, 0xd6, 0xe1, 0x42, 0xc1, 0xe5, 0xc8, 0xc0, 0xc4, 0x45, 0xd6, 0x78, 0xce, 0x62, 0x66, 0xc2, 0x90, 0xc3, 0xba, 0x8e, 0xfe, 0x40, 0xb6, 0xcc, 0x7c, 0x5d, 0xf9, 0x66, 0x94, 0xe3, 0x31, 0xcc, 0x8a, 0x58, 0x51, 0x47, 0x4c, 0x16, 0xe7, 0x8d, 0x2e, 0x90, 0x52, 0xcd, 0xaf, 0xd3, 0x22, 0x42, 0x22, 0x87, 0xb0, 0x55, 0x30, 0x5a, 0x59, 0x28, 0x0c, 0xf7, 0x63, 0x79, 0x94, 0x65, 0x6c, 0x69, 0x4a, 0x74, 0xe4, 0x57, 0x8d, 0xae, 0x14, 0x88, 0xbe, 0xbb, 0xbc, 0xaf, 0x74, 0x53, 0x66, 0x85, 0x89, 0x43, 0xe8, 0x25, 0xca, 0x23, 0x05, 0x03, 0x02, 0xf2, 0x06, 0xb7, 0xad, 0x57, 0x8f, 0x99, 0xa5, 0x61, 0x58, 0x18, 0x45, 0xd3, 0xc3, 0x38, 0xcc, 0x3e, 0x7a, 0xf1, 0x27, 0x8a, 0xb5, 0x51, 0x92, 0x41, 0xe3, 0x98, 0xe3, 0xf1, 0xe9, 0xc2, 0x3c, 0x6f, 0x3d, 0xfb, 0x6c, 0xa6, 0x30, 0xce, 0x67, 0x98, 0xa7, 0xb0, 0xe7, 0x6b, 0x53, 0xc9, 0x6e, 0x39, 0x9d, 0xab, 0xdc, 0x58, 0x7e, 0x99, 0x6b, 0xd5, 0xf2, 0x99, 0x08, 0x24, 0xb7, 0x99, 0x54, 0xf0, 0xab, 0xb7, 0x18, 0xe9, 0x57, 0x20, 0x8a, 0x46, 0xe6, 0xdb, 0xe4, 0xda, 0x86, 0xae, 0x46, 0xa2, 0xd9, 0x47, 0x14, 0x98, 0x09, 0xd4, 0x05, 0xc2, 0x58, 0x2d, 0xb3, 0x2c, 0x46, 0xdb, 0xd8, 0x8b, 0x3c, 0x56, 0x2f, 0xac, 0x17, 0xec, 0x5a, 0x66, 0xe6, 0x01, 0x7e, 0xb8, 0xde, 0xe5, 0x3c, 0x12, 0xb6, 0xf7, 0x91, 0x0f, 0xb1, 0xdc, 0x11, 0xe3, 0x65, 0xeb, 0xf2, 0x9b, 0xc9, 0x36, 0xb3, 0xda, 0xdf, 0x70, 0xd8, 0x7a, 0x71, 0x31, 0xeb, 0x88, 0xf4, 0x0e, 0x32, 0x36, 0xb6, 0x9d, 0xe0, 0x64, 0x13, 0xdf, 0x32, 0x00, 0x23, 0x95, 0x15, 0x03, 0x3f, 0xe5, 0x64, 0x1f, 0xf9, 0x41, 0x45, 0xd0, 0x17, 0xac, 0x7d, 0x99, 0x29, 0xb9, 0xae, 0xb2, 0x92, 0xdc, 0xa3, 0xd4, 0x64, 0x8a, 0xaa, 0xb5, 0xb2, 0x35, 0x77, 0xcc, 0x71, 0xd2, 0x0f, 0xf2, 0x42, 0x9b, 0xd2, 0x24, 0x2a, 0xce, 0x8e, 0x32, 0x8d, 0xc9, 0x35, 0x1e, 0x6e, 0xba, 0x9d, 0xfb, 0xfe, 0xdd, 0xdb, 0x0e, 0xd3, 0x58, 0x74, 0x11, 0x1b, 0xc2, 0x1e, 0x74, 0x91, 0x9d, 0xc7, 0x0b, 0xc6, 0x5e, 0xe8, 0xf5, 0xba, 0x1a, 0xf4, 0xa3, 0x0e, 0xae, 0xef, 0xf1, 0x01, 0x0d, 0x9a, 0x62, 0x5c, 0x9e, 0xf9, 0xe4, 0xee, 0x1f, 0xd2, 0x28, 0x7e, 0xda, 0xc7, 0xe9, 0xc3, 0x2b, 0xbe, 0xfb, 0x3d, 0xb8, 0x4d, 0x67, 0xe8, 0x5f, 0xbf, 0x9d, 0x5f, 0xb0, 0xee, 0x75, 0xfb, 0xe1, 0x6e, 0xf1, 0x7d, 0x3a, 0x5e, 0xfe, 0xc8, 0x39, 0xb9, 0x3c, 0xe6, 0x9c, 0xa1, 0xde, 0x3b, 0x5c, 0xfe, 0xd9, 0x06, 0xdd, 0x15, 0xa2, 0x2a, 0xea, 0x96, 0x0e, 0x59, 0x6d, 0x19, 0x5a, 0x40, 0xaf, 0xd3, 0xd7, 0x27, 0xd9, 0xd4, 0x68, 0xb2, 0x2a, 0x7a, 0x89, 0xa2, 0x2d, 0xed, 0x88, 0xac, 0x12, 0x75, 0x45, 0x11, 0x99, 0x4a, 0xfa, 0x02, 0x39, 0x06, 0x91, 0x1a, 0xce, 0xa4, 0x09, 0xf5, 0x49, 0xd2, 0x0a, 0x45, 0x12, 0x42, 0xb0, 0x1a, 0xa2, 0xb0, 0x6a, 0x5f, 0xa9, 0xac, 0x28, 0x4a, 0x15, 0xb9, 0x71, 0x40, 0x00, 0x33, 0xf8, 0x8a, 0x21, 0xe3, 0x7b, 0xb1, 0x70, 0xff, 0xfa, 0x35, 0xd9, 0x85, 0xf2, 0x33, 0x83, 0xac, 0x34, 0xe7, 0xe4, 0x3c, 0x06, 0x08, 0x48, 0xfd, 0x89, 0xe8, 0x69, 0x1b, 0xe9, 0xb9, 0x12, 0xb9, 0xec, 0x32, 0x4c, 0x9a, 0x6d, 0x6c, 0xeb, 0x36, 0xf0, 0xc4, 0xf5, 0x95, 0xdb, 0xfe, 0xe0, 0xad, 0xa1, 0x05, 0x85, 0x6a, 0x4b, 0x05, 0x05, 0x61, 0x69, 0x8d, 0x22, 0x8d, 0xee, 0x4a, 0x5d, 0xc9, 0x52, 0xe6, 0x15, 0x3d, 0x77, 0x09, 0x94, 0x2b, 0xf3, 0x8c, 0xe9, 0x96, 0xa9, 0x28, 0x3b, 0xfe, 0xf6, 0xb4, 0xdf, 0x7b, 0x69, 0xa6, 0x65, 0x7a, 0xe0, 0x09, 0xdb, 0xf8, 0x43, 0xff, 0x94, 0xe8, 0xf9, 0xee, 0x93, 0x06, 0xdb, 0x46, 0xe7, 0xb2, 0xac, 0x90, 0xde, 0xbc, 0xd0, 0x45, 0x36, 0xd8, 0xb6, 0x67, 0xfe, 0xcf, 0x39, 0xbc, 0x77, 0x85, 0x24, 0xdb, 0x38, 0xc6, 0xe8, 0xac, 0x13, 0xb1, 0x6d, 0x99, 0x19, 0x41, 0x11, 0x74, 0x2e, 0x02, 0xfb, 0x97, 0x1b, 0x57, 0x6d, 0xc5, 0x0a, 0x30, 0xcc, 0x77, 0x25, 0xa4, 0x0e, 0xe8, 0x44, 0x29, 0x2d, 0xcb, 0x38, 0xd3, 0x86, 0x1c, 0xc5, 0x51, 0x24, 0x86, 0x22, 0x3c, 0x54, 0xd2, 0x84, 0x21, 0xa4, 0xcc, 0x8c, 0x3a, 0x8a, 0x48, 0xb2, 0x23, 0x43, 0xe0, 0x99, 0xb0, 0x97, 0x92, 0x8e, 0x2f, 0xed, 0xc5, 0xb7, 0xdd, 0x1d, 0xb9, 0x70, 0xcf, 0x35, 0xde, 0x3c, 0x4f, 0xcc, 0x59, 0xaf, 0xb4, 0x3a, 0x36, 0x9f, 0x83, 0x57, 0xae, 0x43, 0x1f, 0x52, 0xbc, 0xc6, 0x7d, 0xd7, 0xf9, 0x54, 0xa2, 0xa6, 0xbd, 0x58, 0x17, 0x45, 0x0d, 0x89, 0x1e, 0xe8, 0xce, 0xf5, 0x4d, 0x5f, 0x9b, 0x1e, 0xdf, 0xe8, 0x86, 0xeb, 0x04, 0xf9, 0xc6, 0xcc, 0x36, 0x22, 0x67, 0x42, 0xf4, 0xa2, 0x6f, 0x9a, 0x2a, 0x6d, 0x93, 0x5e, 0x0b, 0xda, 0xbd, 0x00, 0x1f, 0x45, 0xde, 0xb7, 0xfa, 0x20, 0x2b, 0x99, 0x96, 0x79, 0xd2, 0xf5, 0xb9, 0xae, 0xeb, 0x88, 0x3c, 0x4b, 0x2a, 0x0f, 0x5a, 0x1a, 0xc5, 0x22, 0xf6, 0x2a, 0xd8, 0x3f, 0x1c, 0x6e, 0x4a, 0x81, 0xf4, 0x6f, 0xde, 0xb7, 0x6f, 0xee, 0x16, 0xcf, 0x45, 0x65, 0x93, 0x5d, 0x60, 0xd5, 0x19, 0x04, 0xd1, 0x68, 0xac, 0xf2, 0x5d, 0x70, 0x07, 0xb1, 0x75, 0x76, 0x9c, 0xd1, 0x77, 0xcc, 0x55, 0xa2, 0xf3, 0x79, 0xb4, 0x87, 0xf9, 0x47, 0xae, 0xa5, 0x23, 0x44, 0xa1, 0x7d, 0x59, 0x64, 0xc5, 0xe3, 0x41, 0x82, 0xf7, 0x4d, 0xed, 0x95, 0x61, 0xe4, 0xf8, 0xe2, 0x23, 0xf9, 0x73, 0x65, 0x7c, 0xf2, 0xf2, 0xe6, 0x49, 0xe5, 0xa0, 0x86, 0xa3, 0x70, 0x07, 0x9c, 0xad, 0xc2, 0x93, 0x95, 0xbe, 0x4f, 0xa3, 0x88, 0x53, 0xc8, 0xa6, 0x62, 0xc2, 0xc2, 0x3c, 0x35, 0x47, 0x26, 0x52, 0xee, 0xf9, 0xfc, 0x21, 0x3a, 0xee, 0x58, 0x18, 0x3e, 0x05, 0x8f, 0xfe, 0x97, 0x94, 0x71, 0xdf, 0x3b, 0x4c, 0xd1, 0xbf, 0x81, 0xbc, 0x01, 0x73, 0x27, 0x3a, 0x3a, 0xe3, 0xb4, 0xf2, 0x99, 0xd1, 0x33, 0x3b, 0x83, 0x56, 0x73, 0x9a, 0x7c, 0xf2, 0x93, 0x20, 0xae, 0x05, 0x7b, 0xd0, 0xc4, 0xd6, 0x71, 0xf0, 0xce, 0x8b, 0x63, 0xdc, 0xe5, 0xbc, 0x5c, 0xee, 0x83, 0xd0, 0xe5, 0xea, 0xef, 0x89, 0x71, 0x7c, 0xf6, 0x14, 0x99, 0x20, 0x32, 0x99, 0xf1, 0x7e, 0x7d, 0x80, 0x16, 0xde, 0x9e, 0xff, 0xe8, 0x09, 0xfe, 0xf3, 0xdf, 0xbd, 0xf4, 0x97, 0xe3, 0x8f, 0x47, 0xe7, 0xf1, 0xa7, 0xf0, 0xf7, 0xa7, 0x20, 0xda, 0xef, 0xff, 0x7e, 0x8c, 0xb3, 0x3c, 0x77, 0x7f, 0xcb, 0xee, 0x7f, 0x3d, 0xc6, 0x0f, 0x07, 0xe7, 0x78, 0xfc, 0x8f, 0x92, 0xc5, 0x79, 0x5c, 0xd6, 0x95, 0x79, 0x78, 0x3c, 0xfe, 0xf4, 0x93, 0x39, 0x44, 0xe9, 0x3e, 0xff, 0xc2, 0x33, 0x7e, 0x39, 0x4c, 0xf1, 0x7f, 0x01, 0xe1, 0x73, 0x62, 0x94, 0xf5, 0xfe, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x0b, 0x6c, 0xd4, 0xbd, 0xe9, 0x92, 0xe4, 0xc8, 0xd2, 0x1d, 0x56, 0xdf, 0xdc, 0x59, 0xbb, 0xab, 0x2b, 0x1b, 0x28, 0x54, 0x15, 0x32, 0xb1, 0x46, 0x20, 0x02, 0x11, 0xd8, 0x12, 0x4b, 0x77, 0xf5, 0x62, 0xfa, 0x23, 0x24, 0x41, 0x12, 0x46, 0x23, 0x25, 0xf1, 0xa3, 0x99, 0x4c, 0xc6, 0x45, 0x1f, 0x4d, 0xe2, 0x8b, 0x00, 0x86, 0x1f, 0xf8, 0xc3, 0xa7, 0x93, 0x44, 0x4a, 0x7a, 0x19, 0xe9, 0x78, 0x20, 0xab, 0xa7, 0x7b, 0xb6, 0x9a, 0xbe, 0x79, 0x49, 0x33, 0xd6, 0x9d, 0xc9, 0xce, 0xcc, 0xaa, 0x9e, 0x9b, 0x5e, 0x1e, 0x71, 0xfc, 0x1c, 0x0f, 0x77, 0x8f, 0xff, 0x74, 0x75, 0x75, 0xf5, 0xff, 0x9d, 0xbf, 0x6e, 0xaf, 0x46, 0xfb, 0xea, 0xea, 0xdb, 0xab, 0xff, 0xf0, 0xd9, 0x7b, 0x78, 0x7a, 0xf5, 0xaf, 0xfe, 0xfe, 0xef, 0x9b, 0x77, 0xdd, 0xbb, 0x37, 0x6f, 0x8f, 0x6d, 0xdb, 0x3d, 0x3e, 0xbe, 0x79, 0xfb, 0x78, 0x35, 0x8d, 0xee, 0x69, 0x9d, 0xd6, 0xc9, 0xb6, 0x2c, 0xdb, 0x5a, 0xdd, 0x95, 0x59, 0xee, 0x68, 0xcd, 0x56, 0xbf, 0xae, 0xeb, 0x64, 0x59, 0xe3, 0x69, 0x1a, 0x87, 0x69, 0x1d, 0x6d, 0xab, 0x9f, 0x07, 0xab, 0x3f, 0x8d, 0x62, 0x99, 0x76, 0x82, 0x6b, 0x59, 0x35, 0x75, 0x7d, 0xac, 0x72, 0x3c, 0x46, 0x6d, 0x7d, 0xd4, 0x5d, 0x59, 0xab, 0xf6, 0xd8, 0x35, 0x55, 0xd3, 0x75, 0x4d, 0xab, 0xba, 0xb6, 0xc9, 0xcb, 0xe2, 0xd8, 0x74, 0x4d, 0x97, 0xc7, 0x1d, 0xfd, 0x9f, 0x75, 0x5d, 0xd9, 0xa8, 0xa6, 0xa8, 0x8b, 0x46, 0x77, 0xc7, 0xa4, 0xec, 0x78, 0x51, 0x15, 0x4d, 0x97, 0x89, 0xf6, 0x78, 0xe4, 0xa9, 0x6c, 0x3c, 0x25, 0x54, 0x5a, 0x49, 0x15, 0xc4, 0xfe, 0x5d, 0xc0, 0xfc, 0x87, 0xbf, 0xff, 0xa7, 0xff, 0xfa, 0xd3, 0x67, 0xbd, 0xfa, 0x7f, 0xbf, 0xd6, 0xb2, 0x77, 0x6f, 0xde, 0xbf, 0xfd, 0x78, 0xc5, 0x7a, 0x87, 0xad, 0x9a, 0x4d, 0x16, 0x73, 0xd6, 0x79, 0x71, 0xac, 0x45, 0xcf, 0xcb, 0x3c, 0x8d, 0xeb, 0xea, 0x0e, 0xbd, 0x63, 0x8f, 0x33, 0x5f, 0xd7, 0xd9, 0x62, 0x96, 0x60, 0xb3, 0xe5, 0x08, 0xcd, 0x99, 0x3d, 0xee, 0xd2, 0x03, 0x17, 0x8e, 0x3a, 0x3c, 0xc8, 0xf0, 0xe1, 0x36, 0x7a, 0xe9, 0x6a, 0x25, 0xad, 0xc0, 0xbd, 0x8f, 0x7c, 0xf7, 0xee, 0xe1, 0x21, 0xf4, 0xf8, 0x83, 0x08, 0xe3, 0xd8, 0x3f, 0xb0, 0xf8, 0xc0, 0x6f, 0x0f, 0xf7, 0x9a, 0xf3, 0x38, 0x70, 0x6e, 0x82, 0xf0, 0x65, 0x14, 0x04, 0xaf, 0x2c, 0xc7, 0xb9, 0xb5, 0xd4, 0x3d, 0x8b, 0xd8, 0x37, 0x7f, 0xf8, 0xf5, 0xbf, 0xfc, 0xa3, 0x7f, 0xf4, 0x4f, 0xbf, 0xb0, 0xee, 0x3f, 0x7f, 0x66, 0xc9, 0x6b, 0x63, 0xdd, 0xbf, 0x78, 0xc6, 0xba, 0xb7, 0x57, 0xe3, 0x0a, 0x33, 0xec, 0xc5, 0x59, 0x47, 0xab, 0xb7, 0x97, 0x75, 0x99, 0xa6, 0xc9, 0x72, 0x5c, 0xd1, 0x3b, 0x8e, 0x18, 0x67, 0x87, 0x0d, 0xd6, 0x62, 0xf7, 0x3d, 0xef, 0xd7, 0x79, 0x74, 0x7b, 0x31, 0x8e, 0xcb, 0xbc, 0xde, 0x78, 0x81, 0xcf, 0x82, 0x28, 0x3a, 0x44, 0xfb, 0x3b, 0xe1, 0x84, 0x3a, 0xd5, 0x99, 0x0a, 0xef, 0x1c, 0x3f, 0xfc, 0xee, 0xd5, 0xfe, 0xf5, 0xed, 0xc1, 0xbb, 0x3d, 0x38, 0x87, 0xe0, 0xf6, 0x70, 0xf8, 0xc9, 0xbe, 0xfb, 0xf6, 0xfb, 0x3b, 0xcf, 0xbb, 0x7f, 0x88, 0xe2, 0xbb, 0x87, 0xc0, 0x75, 0xef, 0xc2, 0x03, 0x8f, 0xb8, 0x2f, 0xfe, 0xd8, 0xaa, 0x27, 0xd3, 0x4e, 0xcf, 0x98, 0xf6, 0x1f, 0x9f, 0x35, 0x6d, 0x85, 0x2d, 0xcc, 0x62, 0xe3, 0xbc, 0xda, 0x96, 0x66, 0x23, 0xad, 0x4a, 0xfb, 0x6c, 0xda, 0x3c, 0x8e, 0xce, 0x80, 0xdf, 0xf3, 0x32, 0xf5, 0xf3, 0x3c, 0x88, 0x51, 0xf0, 0xd1, 0x12, 0xab, 0xb5, 0x0b, 0xc3, 0x9f, 0xd8, 0x2d, 0x63, 0x7e, 0xf0, 0xe2, 0x70, 0x08, 0x3c, 0xdf, 0x77, 0x62, 0x3f, 0xb9, 0x51, 0xde, 0x2e, 0x8e, 0xdd, 0x20, 0x72, 0x19, 0x93, 0x3f, 0xbd, 0xbe, 0xbe, 0xbd, 0xfe, 0x36, 0xf2, 0xf7, 0xb6, 0x73, 0x1f, 0x04, 0xbe, 0x08, 0xa3, 0xe4, 0xc1, 0xfb, 0xde, 0xdd, 0x47, 0xf6, 0x8b, 0x43, 0xf8, 0x27, 0x0c, 0x33, 0xa6, 0xfd, 0xf7, 0x5f, 0x98, 0xf6, 0x7f, 0x7e, 0x66, 0x86, 0xf5, 0xe7, 0xbc, 0xf6, 0xfe, 0xca, 0x75, 0xa7, 0x79, 0x9e, 0x96, 0x71, 0x66, 0xce, 0x64, 0xeb, 0xc5, 0xd2, 0x7a, 0x19, 0xad, 0xc9, 0xe1, 0xda, 0x75, 0xd7, 0xc5, 0x5e, 0x97, 0x71, 0x5d, 0xf0, 0xc7, 0xc8, 0x61, 0xf6, 0xb6, 0xdd, 0x86, 0x5d, 0x96, 0x17, 0xd5, 0xf1, 0x58, 0x37, 0x75, 0x7b, 0xac, 0xab, 0xb6, 0xae, 0x9b, 0xb6, 0x6d, 0xb0, 0xe9, 0x1a, 0x3c, 0xa9, 0x9b, 0xa6, 0xc9, 0xda, 0x1a, 0x7f, 0xb6, 0x69, 0x6d, 0xbe, 0x85, 0x6f, 0xe2, 0x55, 0x8e, 0xa7, 0x8d, 0xd2, 0xe2, 0x88, 0x1f, 0x2a, 0xf1, 0x33, 0xf4, 0x73, 0x52, 0x65, 0x4d, 0x96, 0x37, 0xf8, 0x01, 0x9d, 0x1d, 0xf3, 0x2c, 0x53, 0x79, 0x50, 0xa4, 0x32, 0x11, 0x22, 0x09, 0xf8, 0x33, 0x76, 0x3d, 0xeb, 0xb2, 0xf7, 0x57, 0x93, 0x1e, 0x7a, 0xe6, 0xcc, 0x80, 0x10, 0x6e, 0x39, 0xb3, 0x65, 0x4d, 0xd3, 0x70, 0x5a, 0xdd, 0x89, 0x5b, 0xfd, 0x38, 0x5b, 0xc3, 0x6a, 0xaf, 0x83, 0xc5, 0x5d, 0xc7, 0x71, 0xf1, 0x8d, 0x33, 0x8c, 0xc0, 0xae, 0x0a, 0x76, 0x1d, 0xab, 0x1a, 0x30, 0x52, 0x37, 0xc7, 0xe6, 0xfc, 0x39, 0x8d, 0x6d, 0xe6, 0xb1, 0xd6, 0x64, 0x2a, 0xcc, 0xa2, 0x2f, 0x7a, 0xd6, 0x34, 0x3a, 0xc5, 0x5b, 0x69, 0xab, 0xf1, 0xdd, 0x44, 0xb5, 0xe5, 0x66, 0xbe, 0x84, 0xcd, 0x1a, 0x3f, 0x51, 0xd4, 0x75, 0x81, 0x35, 0x9d, 0x87, 0x39, 0xd9, 0x95, 0xe4, 0x6e, 0x72, 0xa1, 0xbf, 0x3e, 0x62, 0x2d, 0x2e, 0xc3, 0xa4, 0xd7, 0x7e, 0x02, 0x64, 0x8c, 0xb6, 0x33, 0xb1, 0xc9, 0x75, 0x5d, 0x7b, 0x7b, 0x93, 0x99, 0x37, 0x4f, 0x0e, 0x9b, 0xf0, 0xa6, 0xe3, 0x3c, 0xfd, 0x24, 0xec, 0x2a, 0x61, 0xce, 0xf1, 0x48, 0xfe, 0x28, 0x61, 0x1a, 0x19, 0x52, 0x93, 0x39, 0x6d, 0x46, 0x0f, 0xe4, 0xb9, 0x6c, 0x33, 0x89, 0xac, 0xc2, 0x27, 0x2f, 0x3a, 0x7c, 0x37, 0xab, 0x15, 0x99, 0x9f, 0x92, 0xd1, 0x65, 0x5a, 0xc2, 0x18, 0xfc, 0x2f, 0xad, 0x55, 0xad, 0x74, 0x5a, 0x66, 0x25, 0xbe, 0x14, 0xe7, 0x07, 0x95, 0x30, 0x1e, 0xc5, 0xd1, 0x85, 0xfe, 0x82, 0x5d, 0xb0, 0x04, 0x50, 0xdf, 0x5b, 0xa3, 0xcd, 0x2d, 0xdb, 0x5d, 0xe1, 0x17, 0x4b, 0x8f, 0xb6, 0x0b, 0xc7, 0x61, 0xb3, 0x4d, 0x8c, 0xe1, 0x95, 0xeb, 0xce, 0xd3, 0x74, 0x7e, 0x13, 0xf8, 0x48, 0xfe, 0x2a, 0x4b, 0xf8, 0xab, 0x52, 0xc6, 0xa6, 0x5a, 0x1f, 0x8f, 0x9b, 0xbb, 0x1a, 0xf3, 0xf2, 0x68, 0xfc, 0x56, 0xb7, 0x8d, 0xca, 0xf0, 0xb0, 0xb9, 0xb0, 0xc9, 0xe1, 0xb6, 0xba, 0xa3, 0x5f, 0x80, 0x6e, 0xaa, 0xba, 0x2d, 0x75, 0xd1, 0xa8, 0xba, 0x29, 0x3a, 0xfa, 0xeb, 0x5d, 0x93, 0xd5, 0xf4, 0x5a, 0x25, 0xaa, 0x14, 0x79, 0x22, 0x93, 0x44, 0x5e, 0xe6, 0xaf, 0xf7, 0x1f, 0xba, 0x2b, 0x7c, 0x58, 0xc7, 0x62, 0x6e, 0x3f, 0x01, 0x15, 0x5d, 0xdb, 0xb6, 0x26, 0x77, 0x1c, 0x06, 0xe7, 0xe4, 0x9e, 0x2c, 0x97, 0x59, 0xd6, 0xc0, 0x56, 0x4b, 0xf7, 0xd3, 0xd0, 0x5b, 0x40, 0x91, 0x9f, 0xf7, 0x57, 0x69, 0x0c, 0xa2, 0x25, 0x58, 0xe0, 0x43, 0x2b, 0x99, 0xd3, 0x67, 0x6f, 0xf1, 0xa1, 0x95, 0x59, 0x54, 0x69, 0x96, 0xc7, 0x45, 0xa1, 0xda, 0x22, 0xa5, 0xcd, 0x55, 0x14, 0xf0, 0x46, 0x5d, 0x77, 0xac, 0xad, 0x54, 0xab, 0xcb, 0x0a, 0xe6, 0x6b, 0xac, 0x40, 0xf2, 0x5f, 0x9b, 0xc9, 0x2c, 0xcb, 0xb5, 0xcc, 0x52, 0x56, 0xa4, 0x3a, 0x0d, 0x65, 0xcc, 0x93, 0x84, 0x47, 0xfb, 0x0b, 0xf7, 0x17, 0xd9, 0x45, 0xa1, 0x0a, 0x20, 0xc1, 0xc6, 0xc9, 0x3d, 0xe9, 0x75, 0xed, 0xd7, 0x85, 0x2d, 0x7c, 0xe6, 0x8c, 0xad, 0xee, 0xb2, 0x4c, 0xcb, 0xaa, 0x57, 0x97, 0xad, 0x40, 0xcc, 0xf5, 0xe7, 0xfd, 0x95, 0x97, 0xea, 0x58, 0x62, 0x8b, 0xc1, 0x32, 0x3c, 0xe4, 0xe4, 0x22, 0x49, 0x6e, 0x31, 0x1b, 0x2a, 0x4b, 0xc9, 0x62, 0x42, 0x90, 0x94, 0x00, 0xa3, 0x55, 0x3a, 0xc3, 0xde, 0x8a, 0xb1, 0xfc, 0x52, 0x6c, 0x1e, 0xa5, 0x8b, 0x34, 0xad, 0x9a, 0x22, 0x48, 0x43, 0xc6, 0x78, 0xa2, 0x92, 0x28, 0x57, 0x4d, 0x92, 0xc4, 0x69, 0xa4, 0x13, 0x19, 0x06, 0x5a, 0xc0, 0x2e, 0xc6, 0x7f, 0x61, 0xd7, 0xff, 0xfd, 0xb5, 0xfe, 0xfa, 0xf0, 0xa6, 0xb9, 0x5a, 0xc6, 0x81, 0x02, 0xd9, 0x32, 0x9a, 0xaf, 0x93, 0x8b, 0x07, 0x78, 0x6c, 0xe9, 0xcf, 0xce, 0x59, 0xd9, 0xc9, 0xe9, 0xdd, 0x93, 0x70, 0x6c, 0xe1, 0xba, 0x62, 0x5a, 0xf8, 0xa8, 0x77, 0x86, 0x56, 0x00, 0x10, 0xb1, 0xe5, 0x6b, 0xec, 0xb4, 0x56, 0x34, 0x2a, 0xc5, 0xea, 0x91, 0x22, 0x17, 0x59, 0xee, 0xcb, 0x14, 0x88, 0xa6, 0xf8, 0xcb, 0x44, 0xec, 0x93, 0x30, 0x96, 0xb1, 0xcf, 0x42, 0xcf, 0xf3, 0xa2, 0x38, 0x88, 0xe2, 0xdb, 0x1f, 0x11, 0xb8, 0xa3, 0x5b, 0x3f, 0x3a, 0xb8, 0xec, 0xc0, 0xbd, 0xe0, 0x3e, 0xf4, 0x11, 0x1d, 0x7e, 0x07, 0xeb, 0xff, 0xe5, 0x65, 0x3e, 0x23, 0xdb, 0xb8, 0xcd, 0x18, 0xb6, 0x12, 0x5b, 0x98, 0xf9, 0xe2, 0x96, 0x65, 0x31, 0x1b, 0x7f, 0xfc, 0xcc, 0xa3, 0x7e, 0x0e, 0x65, 0x0b, 0x85, 0x32, 0x77, 0x57, 0x94, 0xc0, 0xfa, 0xaa, 0xe6, 0x55, 0x85, 0xfd, 0x74, 0x34, 0xa0, 0x48, 0xeb, 0x12, 0x58, 0x90, 0xd7, 0xed, 0x86, 0x8e, 0x06, 0x25, 0x69, 0x87, 0x51, 0x18, 0xc0, 0x97, 0x6a, 0x09, 0xe2, 0x5b, 0xa5, 0x34, 0x10, 0xbf, 0x05, 0x91, 0x52, 0x22, 0xc3, 0x26, 0x04, 0x86, 0xa4, 0x84, 0x86, 0x32, 0x53, 0x51, 0x96, 0x69, 0x29, 0x62, 0x3b, 0x42, 0x24, 0xbc, 0x8b, 0x2f, 0xdb, 0x63, 0x1f, 0xde, 0x75, 0x57, 0xfd, 0xe4, 0x8c, 0x96, 0x8b, 0x9d, 0x76, 0x62, 0x7a, 0xd4, 0xcc, 0x39, 0x9d, 0x5c, 0xd0, 0x0b, 0xb0, 0x0f, 0x36, 0x9c, 0xac, 0xc1, 0x5d, 0xad, 0x5f, 0x39, 0x6f, 0x17, 0xe5, 0x39, 0x61, 0xfc, 0x51, 0xc8, 0xfa, 0x08, 0x5b, 0x9a, 0x46, 0x00, 0xc7, 0x61, 0x44, 0xd6, 0xd0, 0x63, 0xd3, 0xe6, 0x31, 0x36, 0x4f, 0xdd, 0x68, 0x5a, 0x9c, 0x65, 0x42, 0xf0, 0x91, 0x61, 0xaf, 0xb5, 0x99, 0x2e, 0xb4, 0x56, 0xb1, 0xaa, 0x33, 0xfc, 0x91, 0x46, 0x99, 0xd4, 0x4d, 0xa6, 0x63, 0xa5, 0x13, 0x91, 0xe6, 0x5a, 0x27, 0x3a, 0x95, 0x92, 0xcb, 0xc4, 0xdb, 0x27, 0xe0, 0x61, 0x17, 0xfa, 0x0b, 0x76, 0x4d, 0xd6, 0xac, 0x17, 0xae, 0xfb, 0x79, 0x9d, 0x1c, 0xdb, 0x5a, 0x04, 0x5f, 0xfb, 0x9e, 0x8d, 0x83, 0xc6, 0x9e, 0x5a, 0x27, 0x8e, 0x0d, 0xf6, 0x99, 0xe3, 0x7a, 0x04, 0xb6, 0x11, 0x98, 0x58, 0x94, 0x65, 0x75, 0xcc, 0xaa, 0xa3, 0x20, 0x58, 0x07, 0xd8, 0xb7, 0x04, 0x84, 0x0d, 0xed, 0x33, 0x98, 0xa0, 0xc8, 0x48, 0xe3, 0x31, 0x38, 0x84, 0x62, 0x73, 0x8e, 0x37, 0xf3, 0x14, 0x3f, 0xc9, 0xeb, 0xb6, 0x02, 0xf2, 0x89, 0xbc, 0x10, 0x64, 0x17, 0xac, 0xcb, 0xb4, 0x8a, 0xb0, 0xbf, 0x84, 0x8a, 0x99, 0x4c, 0xd3, 0x7d, 0x12, 0x81, 0x46, 0x8a, 0x84, 0x45, 0xf1, 0x65, 0x3c, 0xf8, 0x63, 0xfb, 0x11, 0x96, 0xd9, 0x8e, 0x4d, 0x5f, 0xee, 0x89, 0x30, 0xd1, 0xb1, 0xf1, 0x87, 0x63, 0x5e, 0x39, 0xd6, 0x89, 0x5e, 0xdb, 0x88, 0x69, 0xf4, 0x13, 0x96, 0x63, 0xd6, 0x6a, 0x0f, 0x58, 0x81, 0x65, 0xac, 0xa8, 0x32, 0x51, 0x23, 0x44, 0x77, 0x09, 0x30, 0xbc, 0xed, 0xf0, 0x6f, 0x05, 0x9f, 0x54, 0x75, 0x2e, 0x75, 0xd7, 0xca, 0xae, 0x55, 0xbe, 0x00, 0xb6, 0x67, 0x6e, 0x51, 0x94, 0x2a, 0xd9, 0xc7, 0x45, 0xa4, 0x2b, 0x2c, 0xdc, 0xe4, 0x10, 0x79, 0xd8, 0x78, 0xaf, 0xa2, 0x20, 0xb4, 0xb0, 0x03, 0x03, 0xfe, 0x8a, 0x79, 0xbf, 0xcb, 0xa8, 0xfe, 0xc7, 0xcb, 0x10, 0xe4, 0xe3, 0x23, 0x56, 0xe3, 0xaf, 0x91, 0x42, 0x6f, 0x48, 0x31, 0x83, 0x16, 0x63, 0xcf, 0xf5, 0x23, 0x63, 0x03, 0x14, 0x8d, 0x2b, 0x6c, 0x3d, 0x9c, 0x7a, 0xee, 0xde, 0x38, 0x7e, 0xe4, 0xbe, 0xba, 0x07, 0x2d, 0x14, 0x0f, 0x9e, 0xef, 0x80, 0x00, 0x05, 0xa9, 0xe4, 0xe0, 0xfd, 0x89, 0x67, 0x07, 0x77, 0xb1, 0xeb, 0xdc, 0x84, 0x37, 0xc1, 0xfd, 0xee, 0xcf, 0xd1, 0xc2, 0xdf, 0x67, 0x8b, 0xd9, 0x33, 0xb6, 0x3d, 0xb3, 0x22, 0xc9, 0xb6, 0xc1, 0x15, 0x10, 0x2a, 0x88, 0x5f, 0xc3, 0x30, 0xf4, 0xf4, 0x64, 0xd0, 0xce, 0x3a, 0x2c, 0x83, 0x00, 0xf5, 0x87, 0x34, 0xc3, 0x0e, 0x84, 0xcf, 0x5c, 0x88, 0x19, 0x36, 0x38, 0x40, 0x11, 0xdb, 0xe2, 0x97, 0x7c, 0xe6, 0xaf, 0xb0, 0xed, 0x42, 0x66, 0xf5, 0xf1, 0xc3, 0xc7, 0xab, 0x71, 0x01, 0x50, 0x0c, 0x02, 0x00, 0x88, 0xcf, 0x3e, 0x30, 0x52, 0x64, 0xa7, 0xc1, 0x5a, 0xf1, 0x44, 0xaf, 0x7c, 0xd6, 0x63, 0xef, 0x62, 0xf7, 0xe9, 0xc5, 0x5e, 0x06, 0x7e, 0x46, 0x94, 0x1b, 0x44, 0x6a, 0x62, 0xc2, 0xe0, 0x12, 0x4d, 0x93, 0x68, 0x2d, 0x74, 0x0a, 0x94, 0x90, 0x0d, 0xfd, 0xd3, 0xb4, 0x45, 0x82, 0xdd, 0x16, 0x23, 0x84, 0x83, 0x18, 0xca, 0x06, 0x51, 0x0c, 0x60, 0x58, 0x76, 0x2a, 0x4b, 0x15, 0x84, 0x4e, 0x5a, 0xea, 0x24, 0x2d, 0x85, 0x50, 0x4a, 0x6a, 0x99, 0x4a, 0x41, 0xd8, 0x11, 0xee, 0x85, 0x90, 0xb1, 0x4a, 0x92, 0x50, 0x48, 0xe6, 0xf1, 0x7d, 0x12, 0x30, 0x76, 0xb8, 0x0c, 0x45, 0xc8, 0xae, 0xc9, 0x39, 0x71, 0x30, 0xe0, 0x11, 0xc8, 0xb8, 0x32, 0xf2, 0x0b, 0x60, 0x72, 0xed, 0xdd, 0x19, 0x70, 0xc2, 0xd9, 0x7a, 0xd2, 0x88, 0xda, 0xf6, 0x3c, 0x9f, 0xb4, 0x06, 0xd3, 0xda, 0x10, 0x85, 0x50, 0xe4, 0x08, 0x36, 0x55, 0x1f, 0xc9, 0xb8, 0x3a, 0x35, 0xd4, 0xb0, 0x39, 0x1a, 0x8a, 0x4f, 0xa4, 0xb7, 0x49, 0x9b, 0x9f, 0x79, 0x71, 0x4e, 0xcc, 0xde, 0x90, 0x7c, 0xc0, 0x63, 0x9a, 0x6a, 0x0d, 0xe3, 0x74, 0x0e, 0x4a, 0x9c, 0x2b, 0x99, 0x72, 0xf1, 0xa0, 0x52, 0x5f, 0x02, 0x37, 0xb8, 0xd4, 0x3b, 0x4f, 0xb2, 0x24, 0x8a, 0x3c, 0x80, 0x63, 0xc8, 0xbe, 0xb0, 0xeb, 0x3f, 0x7d, 0x25, 0x8a, 0xbc, 0x69, 0xda, 0x8f, 0x6f, 0x1f, 0xaf, 0x2c, 0xd2, 0x28, 0xda, 0x9d, 0x80, 0x7d, 0xd3, 0xcc, 0xc8, 0x43, 0x86, 0x6e, 0x2c, 0x5a, 0x43, 0xb0, 0x8c, 0x8b, 0x03, 0x91, 0xc6, 0xd7, 0x69, 0x5e, 0xf9, 0xe4, 0xae, 0xa7, 0x05, 0xb1, 0x6e, 0xde, 0xf1, 0x17, 0xe2, 0x00, 0xfc, 0xd6, 0x4a, 0xc8, 0x97, 0x9e, 0x4e, 0x3c, 0xa9, 0x0f, 0x7b, 0x19, 0x00, 0xf8, 0xbe, 0x4d, 0x94, 0x4a, 0x95, 0x3a, 0x68, 0x91, 0x83, 0xff, 0x49, 0x1e, 0x86, 0xfc, 0x5e, 0x15, 0xbe, 0x97, 0x94, 0xa5, 0x0c, 0x95, 0xfc, 0xc1, 0x7f, 0x60, 0xf7, 0x50, 0x6e, 0xdf, 0xe9, 0xd0, 0x8b, 0x59, 0x5c, 0x1e, 0x44, 0x98, 0xbc, 0x90, 0x4e, 0xf2, 0xa3, 0xf2, 0xa2, 0xbd, 0xc2, 0x97, 0x7e, 0xd8, 0xf9, 0xbb, 0xf0, 0xe0, 0xfb, 0xf6, 0x85, 0x96, 0x75, 0x6f, 0xbb, 0xe6, 0x4a, 0x83, 0x10, 0xba, 0x0e, 0xe4, 0xf4, 0xe8, 0xb0, 0xd9, 0x5d, 0x27, 0x86, 0xdd, 0x36, 0x80, 0x12, 0x8f, 0x23, 0x5b, 0xc1, 0x19, 0x41, 0xff, 0x27, 0x68, 0x6a, 0x97, 0xe9, 0x7e, 0x74, 0x17, 0x48, 0xb3, 0x75, 0xde, 0x01, 0xf4, 0xca, 0x63, 0x53, 0xe5, 0x15, 0xc8, 0x08, 0x82, 0x73, 0xd7, 0xb4, 0xc0, 0x7d, 0x80, 0x24, 0xfe, 0xc1, 0xbf, 0x19, 0x98, 0x6f, 0xd7, 0x6e, 0x02, 0xad, 0x3b, 0x76, 0x58, 0xae, 0x45, 0x57, 0x76, 0x94, 0x18, 0xa9, 0x4b, 0xf2, 0x2a, 0x27, 0xe5, 0xd3, 0x66, 0x79, 0x77, 0xac, 0x19, 0x7e, 0x28, 0xab, 0xda, 0xaa, 0x13, 0x15, 0x3f, 0xe6, 0x45, 0x9e, 0x69, 0x21, 0x79, 0xec, 0x71, 0x76, 0x59, 0x06, 0xe4, 0x0d, 0x16, 0xce, 0xc7, 0xf6, 0xca, 0x5e, 0x2d, 0xc6, 0x5c, 0x97, 0xf3, 0x09, 0x08, 0x39, 0xb3, 0x65, 0x1d, 0x01, 0x89, 0x0b, 0x80, 0x7f, 0x9d, 0x9d, 0x15, 0x02, 0x66, 0xb5, 0x86, 0x5f, 0x48, 0xeb, 0x5d, 0xa2, 0x72, 0xd0, 0x3f, 0x68, 0x8e, 0x3c, 0xc7, 0x06, 0xcb, 0x55, 0xd1, 0xe6, 0xc0, 0x71, 0x95, 0x56, 0x78, 0x3b, 0x2c, 0xca, 0x2c, 0xc7, 0x3a, 0xed, 0x62, 0x09, 0x1f, 0xe4, 0x91, 0xd6, 0xd8, 0x6e, 0xc7, 0xb2, 0x2c, 0xe2, 0x14, 0x6e, 0x64, 0xba, 0xc8, 0xb5, 0x2a, 0xe2, 0x3c, 0xef, 0x58, 0x1a, 0x86, 0x92, 0x1d, 0x11, 0x49, 0xa2, 0x54, 0xf8, 0xa9, 0x1f, 0xb0, 0x2a, 0xf6, 0xfc, 0x28, 0xf8, 0x84, 0x20, 0xff, 0x70, 0x99, 0xdf, 0xda, 0xe6, 0x5d, 0xf3, 0xe1, 0x4a, 0x8f, 0xb3, 0xbd, 0x6a, 0x1b, 0xe4, 0x57, 0x73, 0x6b, 0x05, 0xb3, 0x07, 0x1f, 0x5e, 0x57, 0xb0, 0x60, 0xdb, 0x61, 0x9c, 0x01, 0x0f, 0xd7, 0x65, 0x72, 0x27, 0x6b, 0xf9, 0xd9, 0xc4, 0x9d, 0xa6, 0x88, 0xdd, 0x26, 0xf5, 0x91, 0xd2, 0x57, 0x0d, 0xe9, 0xe9, 0x23, 0x47, 0x68, 0x0b, 0xe0, 0xa4, 0xac, 0x03, 0x5c, 0x1c, 0xe1, 0x24, 0xa6, 0x8f, 0x25, 0xf9, 0x52, 0xe4, 0x8d, 0x3a, 0x1e, 0xb3, 0x5a, 0xc0, 0x95, 0xcd, 0x5d, 0xc8, 0x64, 0x16, 0xeb, 0x9b, 0x50, 0x83, 0x72, 0xc8, 0x02, 0xdc, 0x38, 0x17, 0xf8, 0x2d, 0xf0, 0x34, 0x4d, 0xdc, 0x8c, 0x0b, 0x7d, 0xf0, 0x1f, 0xee, 0xd9, 0xe1, 0x36, 0xf4, 0xbe, 0xb9, 0x28, 0xa6, 0xbd, 0x69, 0xdf, 0xbf, 0xb9, 0x5a, 0x35, 0x44, 0x58, 0x0f, 0x8b, 0x98, 0xab, 0xa1, 0x2b, 0x87, 0x71, 0x5d, 0x5c, 0x7e, 0x9a, 0xb1, 0xe9, 0xd6, 0x4f, 0x5f, 0xb6, 0x49, 0x25, 0xc0, 0x58, 0xbd, 0x62, 0xc9, 0xde, 0x04, 0x3e, 0x7b, 0x88, 0x58, 0x2c, 0xee, 0xe3, 0x43, 0xf8, 0xca, 0x0f, 0xfe, 0xab, 0xe0, 0xfe, 0xd7, 0xc6, 0xb4, 0xdf, 0xb4, 0x6d, 0x40, 0x20, 0xe3, 0x2e, 0x39, 0x8d, 0xbe, 0x5c, 0x7a, 0xb0, 0xb6, 0x2f, 0xe8, 0xd3, 0x89, 0xa4, 0xe9, 0x8e, 0x7b, 0x89, 0x0f, 0x56, 0x9f, 0xb2, 0x83, 0x10, 0x82, 0x8b, 0x03, 0xec, 0x94, 0xe1, 0xcb, 0x00, 0xf0, 0x6d, 0xbf, 0xfe, 0x1d, 0x6e, 0x71, 0xb1, 0x6d, 0x5f, 0xbd, 0xdf, 0x20, 0xab, 0x1f, 0x9b, 0x2b, 0x30, 0x0e, 0xac, 0x37, 0x8b, 0x54, 0xb3, 0x3b, 0xd9, 0xbd, 0xd6, 0xe0, 0x26, 0x50, 0x01, 0xe0, 0x1f, 0x13, 0xde, 0x58, 0x97, 0x1e, 0x2a, 0x94, 0x6b, 0x6c, 0x3c, 0xc8, 0x54, 0x40, 0x0c, 0xe2, 0xdf, 0x2e, 0x27, 0x41, 0x53, 0x43, 0x59, 0x97, 0x95, 0xce, 0x8e, 0x50, 0x35, 0xc7, 0xa3, 0x14, 0xf5, 0xdf, 0xc6, 0xac, 0xdf, 0xb3, 0xee, 0xab, 0xf7, 0xdb, 0x9b, 0xe6, 0xcd, 0xdb, 0xee, 0x4a, 0x9c, 0x9c, 0x45, 0x0f, 0xfd, 0x6a, 0x8b, 0x85, 0x2f, 0x27, 0xe6, 0x22, 0x5c, 0x33, 0x7d, 0x5a, 0xd8, 0x80, 0xd0, 0x36, 0x2c, 0xee, 0x69, 0x71, 0xed, 0x85, 0x3b, 0x78, 0x3e, 0x3d, 0xa9, 0x9c, 0xdd, 0xbd, 0x14, 0x55, 0x95, 0x56, 0xe0, 0xfd, 0xb5, 0x38, 0xa6, 0x4d, 0x5a, 0xec, 0xc1, 0x1e, 0xb1, 0xe3, 0x8e, 0x5d, 0xda, 0x74, 0x5d, 0x9c, 0x51, 0x80, 0xeb, 0xa2, 0x36, 0xcf, 0x55, 0xee, 0x65, 0x69, 0x05, 0xe9, 0x59, 0xa6, 0x89, 0x0e, 0x41, 0x1e, 0x45, 0xe0, 0x27, 0x3e, 0xcf, 0x22, 0x00, 0x88, 0xd2, 0xb1, 0x48, 0x63, 0x56, 0xee, 0x83, 0xc0, 0xdf, 0xbb, 0xde, 0x9d, 0x8e, 0xc3, 0xc8, 0xbb, 0x7f, 0x08, 0x0e, 0xf7, 0xee, 0xfe, 0xc1, 0xbd, 0x6c, 0xbf, 0xbd, 0xf9, 0xf0, 0xee, 0x8a, 0x33, 0xcd, 0x34, 0x36, 0x93, 0x9e, 0x11, 0xbd, 0x6d, 0x67, 0x19, 0x57, 0xc4, 0x6c, 0xe7, 0xd7, 0x3a, 0x46, 0xb8, 0xa3, 0xa1, 0x96, 0xa3, 0xbe, 0x89, 0xee, 0xf7, 0xb1, 0x17, 0xfb, 0x71, 0x24, 0x12, 0x7f, 0x2f, 0x7c, 0x10, 0x75, 0x1e, 0x25, 0x7b, 0x7e, 0xf0, 0xa1, 0x36, 0x03, 0x3f, 0x0c, 0xa2, 0x43, 0x1c, 0x22, 0xde, 0x09, 0x66, 0x1d, 0xee, 0xee, 0x1e, 0x20, 0x36, 0xef, 0xbd, 0xeb, 0x83, 0xb7, 0x3b, 0xfc, 0xe8, 0xc6, 0xb7, 0xb6, 0xe7, 0xfb, 0x3f, 0xf1, 0xfd, 0x73, 0x04, 0x13, 0x5e, 0xfb, 0x27, 0x97, 0xed, 0x37, 0xb2, 0x6d, 0x9e, 0xdc, 0x81, 0x59, 0xdc, 0x5e, 0x16, 0x4e, 0x26, 0x39, 0x8e, 0x35, 0xf6, 0xe3, 0xd0, 0xff, 0x4a, 0xcb, 0x80, 0x35, 0x8f, 0xc3, 0x7c, 0x12, 0xd3, 0xbc, 0x63, 0x49, 0x2c, 0xa0, 0x9f, 0x39, 0xa4, 0x74, 0xcc, 0xe3, 0x3d, 0x0f, 0xfd, 0x30, 0x81, 0xbe, 0x76, 0xc3, 0xc0, 0xf7, 0x83, 0x34, 0x94, 0x49, 0xf8, 0x20, 0xee, 0xc5, 0x5d, 0x60, 0x05, 0x87, 0xc3, 0x3e, 0xb8, 0x7d, 0x38, 0xdc, 0x3a, 0x07, 0x3b, 0x48, 0xe2, 0x3b, 0xd7, 0xf3, 0x1e, 0xdc, 0xd8, 0x7d, 0xf1, 0x4c, 0x02, 0x7c, 0xb3, 0x6d, 0xb8, 0x88, 0x43, 0xbe, 0x79, 0xdb, 0x34, 0x57, 0x0e, 0x74, 0xe7, 0x3a, 0x9c, 0x80, 0x25, 0x90, 0x6b, 0xcc, 0xe1, 0x16, 0x08, 0x24, 0xd8, 0xc8, 0xb4, 0x40, 0xc1, 0xad, 0x83, 0xbd, 0xb8, 0xb0, 0x68, 0xd6, 0x60, 0xcd, 0x0b, 0xb3, 0xc5, 0x64, 0x39, 0xdc, 0xde, 0xe5, 0x01, 0x38, 0x24, 0xa5, 0x0f, 0xa0, 0xd2, 0x08, 0xfd, 0x4d, 0x5a, 0x91, 0x38, 0x95, 0x61, 0x5a, 0xa4, 0xa9, 0xb7, 0xec, 0x2a, 0x85, 0x6a, 0x0a, 0xec, 0x86, 0x78, 0xa9, 0x56, 0x93, 0xc2, 0x76, 0xa1, 0xd9, 0xa2, 0x56, 0x97, 0x90, 0xd5, 0x10, 0xdd, 0x45, 0xa2, 0xb3, 0x2c, 0x53, 0x19, 0x5e, 0xe6, 0x3a, 0x0b, 0x54, 0xa0, 0x38, 0xe0, 0x09, 0x5c, 0xf2, 0x22, 0x0e, 0x69, 0xec, 0xd2, 0x93, 0x35, 0x4d, 0xa0, 0x1c, 0x96, 0x8b, 0x4f, 0x3e, 0xcf, 0x0b, 0x78, 0x17, 0xa5, 0x85, 0xd7, 0x71, 0xec, 0x11, 0x01, 0xdc, 0x7e, 0x45, 0xac, 0xc3, 0x2b, 0x92, 0xa6, 0x62, 0x5c, 0x60, 0xb8, 0xde, 0x95, 0x94, 0x25, 0xae, 0xcc, 0x17, 0xe5, 0x8a, 0xf1, 0xb9, 0x21, 0x46, 0xb1, 0xe1, 0x1a, 0x63, 0x62, 0x2e, 0x4d, 0x86, 0x2b, 0xce, 0xcf, 0xb9, 0x03, 0xca, 0x26, 0x83, 0x45, 0x53, 0x6a, 0x8e, 0x5e, 0xb4, 0xdc, 0x08, 0xd6, 0x56, 0x45, 0x45, 0xdd, 0x94, 0xb0, 0x4d, 0x10, 0x8d, 0xa9, 0x13, 0x9d, 0x44, 0x5a, 0x41, 0xde, 0x0a, 0x70, 0x82, 0x5c, 0x5c, 0xe8, 0xaf, 0xae, 0xbb, 0x5a, 0xc0, 0x16, 0x4f, 0x16, 0x76, 0x19, 0xf0, 0xe2, 0x34, 0x71, 0x3d, 0xac, 0x1a, 0xae, 0x72, 0x87, 0x93, 0x86, 0x02, 0x05, 0x7c, 0x2c, 0xe3, 0x00, 0xea, 0x05, 0xce, 0xff, 0xe9, 0x24, 0x03, 0xe8, 0x98, 0x1f, 0x29, 0x3f, 0x4c, 0x99, 0x8e, 0xa3, 0xc9, 0x99, 0x12, 0xf3, 0x6d, 0x4d, 0x1a, 0x8b, 0x7c, 0xd7, 0x2a, 0x93, 0x07, 0xaf, 0xeb, 0x3c, 0x4d, 0x29, 0x0d, 0xd2, 0x94, 0xf8, 0xe4, 0x62, 0x4b, 0xa8, 0x96, 0x79, 0x99, 0x82, 0x8b, 0x95, 0x5c, 0xa6, 0x42, 0x8b, 0x7d, 0x22, 0x25, 0xcb, 0x14, 0x93, 0x22, 0x92, 0x91, 0x64, 0x61, 0x64, 0x87, 0xb7, 0x7b, 0xee, 0xed, 0x83, 0x0b, 0xfd, 0x05, 0xbb, 0xd8, 0xc8, 0x66, 0xbe, 0x50, 0xbe, 0xe7, 0xe4, 0x8e, 0xae, 0x0b, 0x05, 0xe0, 0xd2, 0x99, 0x93, 0xc5, 0x9d, 0x61, 0x3a, 0x2d, 0x60, 0x92, 0xbd, 0x03, 0x44, 0x99, 0x27, 0xf6, 0x89, 0x88, 0x80, 0x3f, 0x82, 0xf4, 0x57, 0x95, 0xf9, 0xfd, 0x9b, 0xd4, 0xa3, 0x49, 0xa6, 0x82, 0x4b, 0x42, 0x09, 0x6c, 0x09, 0xf0, 0x76, 0xcb, 0x25, 0x6c, 0x1a, 0xa0, 0xce, 0x2b, 0xd0, 0x65, 0x95, 0x36, 0x6d, 0x45, 0x8b, 0x54, 0xc1, 0x78, 0x4d, 0xc9, 0x90, 0x12, 0xc4, 0xbf, 0x28, 0x2a, 0xd5, 0xe4, 0x5a, 0x97, 0xa5, 0x82, 0xbb, 0x74, 0x8a, 0x6d, 0x7b, 0x38, 0x30, 0xf7, 0xb9, 0x2c, 0xf1, 0x73, 0xfe, 0x7a, 0xd7, 0x5c, 0xb9, 0x0c, 0xac, 0x78, 0xa1, 0xfc, 0xf0, 0x7a, 0x5a, 0x47, 0x47, 0xdb, 0xce, 0xda, 0xaf, 0x93, 0x9e, 0xe8, 0x38, 0x69, 0x9a, 0xb9, 0x5e, 0x5c, 0x04, 0x38, 0x6c, 0x39, 0x3a, 0x44, 0xdb, 0x4c, 0x33, 0xd9, 0x54, 0x92, 0x32, 0x64, 0x58, 0x71, 0xce, 0xdd, 0x6f, 0x89, 0x46, 0xb8, 0x64, 0x73, 0x1a, 0x5e, 0x9b, 0xe5, 0xb8, 0xad, 0x3e, 0x6c, 0x24, 0x32, 0xd0, 0x9c, 0x4c, 0x50, 0x4e, 0x28, 0xa3, 0x53, 0x8c, 0x0a, 0xd4, 0x2c, 0x6b, 0x4a, 0x05, 0x6b, 0x8f, 0x71, 0x7d, 0xf4, 0x2b, 0xc1, 0x8f, 0xa9, 0xe0, 0xd0, 0x7c, 0xa9, 0x0a, 0x2f, 0xf4, 0xd7, 0x3b, 0x8a, 0xd2, 0x6b, 0x0f, 0x0a, 0xbc, 0x3a, 0x8e, 0xcb, 0x9c, 0x81, 0x92, 0xc5, 0xcc, 0x9e, 0x9c, 0xc9, 0x9a, 0x2d, 0x4d, 0x56, 0x5a, 0x27, 0x0b, 0xe1, 0x7b, 0x64, 0x96, 0x76, 0x17, 0xf7, 0x67, 0xbb, 0x28, 0xfb, 0x7d, 0xdc, 0x64, 0xda, 0x11, 0x8e, 0xd2, 0x9b, 0x20, 0xa3, 0xc5, 0x58, 0x1f, 0xcf, 0x59, 0x1e, 0x93, 0xa4, 0x53, 0x75, 0x61, 0x36, 0x13, 0x44, 0x81, 0xce, 0x09, 0x37, 0xea, 0x56, 0x15, 0xba, 0x42, 0x60, 0x83, 0xc3, 0x14, 0xc0, 0xa3, 0xc2, 0x8b, 0x1c, 0x81, 0x2e, 0x8b, 0x34, 0xe5, 0x89, 0x05, 0x09, 0x51, 0xce, 0x9f, 0xc3, 0x8d, 0x67, 0xfc, 0xf5, 0xf8, 0xe6, 0xe3, 0x15, 0x98, 0x30, 0x4c, 0x1b, 0x46, 0xbe, 0xb2, 0x65, 0xc4, 0xe3, 0x6a, 0x91, 0x6e, 0xb1, 0xe6, 0xde, 0x1d, 0x1d, 0x12, 0x6a, 0x0c, 0x9b, 0x0d, 0xaf, 0x3e, 0x3b, 0x27, 0x84, 0xf6, 0x34, 0xa7, 0x30, 0xc7, 0x27, 0x36, 0xbc, 0x1d, 0x1f, 0x35, 0x6d, 0xd6, 0x98, 0xe7, 0xf8, 0x2a, 0xe8, 0xa1, 0xdc, 0x8e, 0x62, 0x72, 0x45, 0x40, 0xa9, 0xf3, 0x16, 0xae, 0x51, 0x65, 0x5b, 0x22, 0x6e, 0xc3, 0xee, 0xe2, 0x58, 0x50, 0x4e, 0x2b, 0xca, 0xb2, 0x43, 0xa6, 0x39, 0xe4, 0x68, 0xa6, 0x75, 0x2a, 0x03, 0x21, 0x83, 0x48, 0xb0, 0xe8, 0xb9, 0x5c, 0xc1, 0x33, 0xfe, 0x22, 0xbb, 0xe6, 0x7e, 0x35, 0x34, 0x1e, 0x5b, 0x48, 0xdb, 0x2e, 0x5e, 0x2d, 0xe0, 0xfa, 0xa0, 0x89, 0x83, 0x6d, 0xb3, 0x05, 0x8f, 0x1c, 0xeb, 0xcf, 0x72, 0xc6, 0xcf, 0x94, 0xcc, 0x2e, 0xe7, 0x74, 0x66, 0x52, 0xd1, 0x0e, 0x23, 0x51, 0x6d, 0xcc, 0x81, 0xe4, 0xda, 0xb0, 0x51, 0x35, 0xdb, 0xa2, 0x34, 0xa7, 0x4c, 0x75, 0x46, 0xcb, 0xaf, 0x20, 0xdf, 0xe5, 0x65, 0x6d, 0xa2, 0x80, 0xae, 0x8d, 0x57, 0xdb, 0x8a, 0x32, 0x73, 0xba, 0x12, 0xaa, 0x80, 0xe3, 0xe0, 0x39, 0x60, 0x7d, 0xaa, 0xa5, 0xf2, 0x01, 0xf4, 0x8c, 0x5d, 0xea, 0xaf, 0x77, 0x1f, 0xae, 0x9c, 0xb9, 0xb7, 0x96, 0x49, 0x5b, 0xc3, 0xc4, 0xac, 0xde, 0x9a, 0xe8, 0xa4, 0x85, 0x4d, 0x93, 0x43, 0xd6, 0xcc, 0xe0, 0x91, 0xd6, 0x8a, 0xd0, 0x0c, 0x13, 0x2d, 0x77, 0x78, 0x3a, 0xdb, 0x05, 0x1e, 0x16, 0x72, 0x3b, 0x6d, 0xd9, 0x60, 0x91, 0x0e, 0x95, 0xb6, 0x44, 0xb0, 0xdc, 0xb0, 0xdc, 0xd8, 0x94, 0x9a, 0x5d, 0x47, 0x1e, 0xcb, 0x8c, 0x25, 0xa2, 0x2d, 0x29, 0x61, 0xdc, 0x56, 0xe6, 0xcd, 0x0a, 0x7f, 0x01, 0x7b, 0xb3, 0x2d, 0xe8, 0xaf, 0x69, 0xa9, 0xab, 0xaa, 0x2c, 0xf3, 0x34, 0x04, 0x74, 0x40, 0x7e, 0x26, 0x97, 0xe5, 0x40, 0x8c, 0x5d, 0x2b, 0x08, 0x3d, 0x16, 0x20, 0xd4, 0x09, 0x36, 0xd9, 0x04, 0xcc, 0xc0, 0xaa, 0xd4, 0xd3, 0xb4, 0xd0, 0x89, 0xd9, 0x04, 0xaa, 0xbf, 0x4c, 0xe0, 0x22, 0x13, 0x5b, 0xe7, 0x5e, 0x3f, 0xd9, 0x95, 0x15, 0xa5, 0x2e, 0x4d, 0xf0, 0xa2, 0x0d, 0xb6, 0xa1, 0x62, 0x6e, 0xce, 0x65, 0x78, 0x6d, 0x0e, 0x34, 0xeb, 0x73, 0xa8, 0x02, 0xb0, 0x67, 0x9b, 0xa1, 0xc6, 0xab, 0xe6, 0x1c, 0x83, 0x34, 0x77, 0x23, 0x63, 0xd9, 0xc1, 0xb3, 0xd8, 0x7a, 0x15, 0x96, 0x63, 0x11, 0xe9, 0xb8, 0xd3, 0xad, 0x3e, 0x1e, 0xe3, 0x4c, 0x8a, 0x42, 0xe4, 0x49, 0x7c, 0x19, 0x4f, 0x7c, 0xf7, 0xf6, 0xed, 0x15, 0x19, 0x70, 0x62, 0x40, 0x05, 0xa8, 0x16, 0x36, 0x59, 0x24, 0xa9, 0x81, 0x11, 0xbf, 0x75, 0x58, 0xf1, 0x94, 0x82, 0xa4, 0xf8, 0x45, 0xfb, 0xcb, 0xf8, 0x85, 0xcc, 0x31, 0x89, 0xed, 0x74, 0x3b, 0x07, 0x6c, 0x72, 0x08, 0x51, 0x82, 0x8c, 0x12, 0xda, 0x93, 0x6c, 0x2b, 0x9a, 0xb4, 0xc1, 0x8a, 0x53, 0x8d, 0x6e, 0x4b, 0xdd, 0x66, 0x40, 0xf5, 0x02, 0xb8, 0xa3, 0x75, 0xcc, 0xf0, 0x6e, 0xb4, 0x97, 0x89, 0x0a, 0xf6, 0xbf, 0xc9, 0xa5, 0xfe, 0xd5, 0x65, 0x3c, 0x91, 0x6c, 0x63, 0x40, 0x75, 0xb7, 0x27, 0x2d, 0x3d, 0xda, 0x9c, 0x5b, 0x13, 0x42, 0xb1, 0xe5, 0x7e, 0x5e, 0xf4, 0xf1, 0x6b, 0x9e, 0x58, 0x80, 0x73, 0x10, 0x7a, 0x54, 0xe4, 0x33, 0x22, 0x1c, 0x06, 0x16, 0x8f, 0xe7, 0x6c, 0xd5, 0x11, 0xc6, 0xe4, 0x79, 0xdb, 0x14, 0xcd, 0x76, 0x7c, 0x9b, 0xcb, 0x86, 0x52, 0x3e, 0x29, 0xb0, 0x30, 0x4c, 0x72, 0x2e, 0xb5, 0x1f, 0x0b, 0x19, 0x86, 0xd1, 0x6d, 0x14, 0x45, 0x77, 0xc9, 0x1d, 0x78, 0x3e, 0x02, 0x97, 0x0c, 0xd2, 0x7b, 0x95, 0xde, 0xed, 0xf7, 0xe7, 0x53, 0x79, 0xd8, 0xf6, 0xef, 0x2f, 0xd3, 0x65, 0xef, 0xde, 0xbe, 0xfb, 0xf0, 0x78, 0xb5, 0xb2, 0xde, 0x7d, 0x52, 0xce, 0x30, 0x62, 0x9e, 0xed, 0x79, 0x39, 0xc1, 0xcc, 0x61, 0xe9, 0xc7, 0x13, 0x08, 0x22, 0xe3, 0xb6, 0xc5, 0x39, 0x3f, 0x81, 0x93, 0x9c, 0x66, 0xd8, 0xb9, 0x6a, 0x78, 0xee, 0x58, 0x54, 0xb9, 0x31, 0x8f, 0x9c, 0x05, 0x14, 0xaf, 0xd9, 0xf3, 0xc4, 0xf6, 0xab, 0xbe, 0x2e, 0xce, 0xa4, 0xc2, 0xba, 0x0f, 0x57, 0x6c, 0xe5, 0xf3, 0xda, 0x4f, 0xfd, 0x09, 0x9c, 0xb7, 0xb7, 0x98, 0x06, 0xee, 0x8f, 0x88, 0x6e, 0x0b, 0xe5, 0x54, 0x49, 0x72, 0x6a, 0x6c, 0x38, 0xe7, 0xa4, 0x67, 0xf7, 0x13, 0xad, 0x22, 0x14, 0xa1, 0x3d, 0x66, 0xce, 0x6e, 0x0d, 0x0a, 0x98, 0xa8, 0xdc, 0xb6, 0xb9, 0x39, 0xf8, 0x2c, 0x0c, 0xf7, 0x78, 0x42, 0x13, 0x03, 0x1c, 0x40, 0xfd, 0x52, 0x95, 0x5b, 0xd5, 0x81, 0x6e, 0xe2, 0x0e, 0xa2, 0x8d, 0x18, 0x74, 0x49, 0x31, 0xbb, 0xac, 0x69, 0xef, 0x6a, 0x99, 0xe9, 0xfc, 0x50, 0x8a, 0x48, 0xe3, 0xf7, 0x78, 0xe0, 0x17, 0xa2, 0xbe, 0xb1, 0xcb, 0xed, 0xf1, 0xb1, 0x81, 0x8c, 0xce, 0xcc, 0x10, 0xc8, 0xb8, 0xbb, 0x30, 0x70, 0x0d, 0x1b, 0xb0, 0xef, 0x2c, 0xeb, 0xcc, 0x2d, 0x7d, 0x9a, 0xa7, 0x99, 0x54, 0xf4, 0xa7, 0xfc, 0x0e, 0xb1, 0x2a, 0x5a, 0x90, 0xda, 0x14, 0x14, 0xd4, 0x02, 0x00, 0xf1, 0x54, 0x4d, 0x60, 0x76, 0x60, 0xf1, 0x09, 0xf5, 0xcd, 0x41, 0x53, 0x43, 0x87, 0x9f, 0x94, 0x4e, 0x2d, 0x94, 0x89, 0xe3, 0x88, 0xd8, 0x74, 0x24, 0xd5, 0x25, 0x0a, 0x81, 0xba, 0xd5, 0xaa, 0x95, 0x52, 0x65, 0xba, 0x29, 0x75, 0x1d, 0xd6, 0x8a, 0xce, 0x15, 0xa1, 0x89, 0x2e, 0x3b, 0x3f, 0x7b, 0xf3, 0xbe, 0x6b, 0xaf, 0x2c, 0x22, 0xbd, 0x50, 0xcb, 0xae, 0x26, 0xc2, 0x61, 0xb1, 0x71, 0x5c, 0x2c, 0x0e, 0x4c, 0xd4, 0x3d, 0x23, 0x1f, 0x2e, 0x96, 0x6d, 0x53, 0x36, 0x64, 0xe9, 0x3f, 0x67, 0xc1, 0x74, 0x22, 0xb8, 0xc5, 0xe9, 0xc2, 0xb0, 0xa9, 0xd6, 0xb8, 0x02, 0x40, 0x41, 0x27, 0x83, 0xcd, 0x93, 0xaf, 0xc8, 0x6f, 0x54, 0x0b, 0x51, 0xc2, 0x16, 0x92, 0x28, 0x30, 0x2f, 0x2b, 0x6b, 0xad, 0x32, 0x0a, 0xdd, 0x05, 0x60, 0x14, 0xd0, 0x42, 0x29, 0xe3, 0x0c, 0x81, 0x4d, 0xa8, 0x28, 0x95, 0x86, 0x2d, 0x92, 0x4c, 0xbd, 0x50, 0xb5, 0x90, 0x5d, 0xf0, 0x12, 0x9d, 0xb6, 0x8c, 0x2b, 0x23, 0xd7, 0x2c, 0x33, 0x10, 0x9e, 0x20, 0xd2, 0xb6, 0x97, 0x95, 0x78, 0xa3, 0x03, 0x8b, 0xb7, 0x52, 0xac, 0x9f, 0x59, 0x70, 0x5e, 0x6e, 0xec, 0x63, 0xa3, 0x8c, 0xc7, 0x8d, 0xf9, 0x1e, 0x0d, 0xbb, 0x6f, 0xcf, 0x18, 0xbf, 0x45, 0x64, 0x55, 0x6f, 0xec, 0xaa, 0xa3, 0x85, 0x49, 0xf1, 0xb9, 0x29, 0xca, 0x9a, 0xbc, 0x46, 0xbf, 0x88, 0xae, 0x20, 0x7c, 0xa9, 0x80, 0xa7, 0x1a, 0x7f, 0x45, 0x13, 0x84, 0x6a, 0xd0, 0x45, 0x75, 0x48, 0xc2, 0x5f, 0x9c, 0x51, 0x7f, 0x35, 0x7a, 0xbc, 0xff, 0xf0, 0xee, 0x11, 0xfc, 0x43, 0xaf, 0xdc, 0x9e, 0xb1, 0xb3, 0x6c, 0x2e, 0x10, 0xdb, 0xcc, 0x33, 0x3c, 0x68, 0x3e, 0x33, 0x4e, 0xcf, 0x66, 0x8d, 0x07, 0xf3, 0x23, 0x4f, 0x0f, 0x37, 0xa1, 0x04, 0x5f, 0xe0, 0x07, 0xe0, 0x5d, 0x94, 0x66, 0xba, 0x10, 0xe6, 0x10, 0x36, 0xbd, 0x73, 0xf1, 0x52, 0x87, 0x2a, 0x92, 0xc2, 0x73, 0x98, 0x3c, 0x24, 0x5e, 0x12, 0x3d, 0xdc, 0x09, 0xef, 0xf5, 0x0f, 0xf7, 0x7b, 0xd7, 0xe6, 0x77, 0xdf, 0xc6, 0x37, 0x37, 0xce, 0xab, 0xfb, 0xbb, 0xbb, 0xdd, 0xcb, 0x87, 0xe0, 0xe1, 0xe1, 0xa8, 0x12, 0xfe, 0x2a, 0xf2, 0x05, 0x77, 0x77, 0x3f, 0x78, 0xaf, 0xfc, 0xc0, 0x8e, 0xfd, 0x1f, 0xc2, 0x83, 0xff, 0x33, 0x7a, 0xfc, 0xaf, 0x17, 0xae, 0xc6, 0x0f, 0x1f, 0xaf, 0x40, 0x3b, 0xec, 0x75, 0xa4, 0x02, 0x82, 0x79, 0xab, 0xfd, 0xc3, 0xb2, 0x5b, 0x0d, 0xf7, 0x18, 0x20, 0x68, 0x2c, 0x06, 0x25, 0x0d, 0x8e, 0x02, 0x3e, 0xec, 0xe8, 0xa7, 0x9c, 0x0e, 0x69, 0x32, 0xb3, 0x14, 0x1b, 0x3a, 0x81, 0xdf, 0x48, 0xfe, 0xa7, 0x3a, 0x1d, 0xda, 0x65, 0xc4, 0x46, 0x0c, 0x6d, 0x04, 0xe3, 0x2f, 0xf1, 0x0d, 0xdd, 0x16, 0x6d, 0x09, 0xd7, 0x69, 0x62, 0x20, 0x2d, 0x79, 0x4b, 0xd4, 0x45, 0x55, 0x67, 0x19, 0xfe, 0xb2, 0xac, 0x88, 0x84, 0xc4, 0x45, 0x9d, 0x33, 0xa5, 0xe8, 0x18, 0x1f, 0xf0, 0xc1, 0x6e, 0x2f, 0x5c, 0x8d, 0x74, 0x0e, 0x73, 0x9a, 0x40, 0x3d, 0x6c, 0x77, 0xb2, 0x11, 0xd1, 0xd6, 0x61, 0x01, 0x92, 0xb8, 0x94, 0x5a, 0x9c, 0x57, 0xb6, 0x82, 0x57, 0x81, 0x65, 0x81, 0xf6, 0x63, 0x35, 0x4e, 0xa0, 0x24, 0x67, 0xbb, 0xe8, 0x1c, 0x86, 0x38, 0x88, 0x82, 0x92, 0xa6, 0x1c, 0x01, 0xfe, 0x6d, 0x4d, 0x4c, 0x23, 0x06, 0x22, 0x89, 0xea, 0xd2, 0x39, 0xd3, 0x27, 0x3b, 0x29, 0x49, 0x00, 0xb3, 0x0b, 0x2a, 0x3d, 0x0a, 0x10, 0xd3, 0x1b, 0x63, 0x3b, 0xf0, 0xb0, 0xd9, 0x8a, 0x95, 0xf2, 0x5a, 0x97, 0xe6, 0x57, 0xa3, 0x73, 0xed, 0xcb, 0x42, 0xe5, 0x82, 0x3f, 0x77, 0x26, 0xf8, 0x9c, 0xbf, 0x3e, 0x42, 0x6b, 0x5a, 0xe6, 0xe4, 0x8f, 0x5c, 0x04, 0xa7, 0xf4, 0x7a, 0xb2, 0x5c, 0x77, 0x2b, 0xd5, 0x9c, 0xf9, 0x3c, 0x0d, 0xf3, 0xd2, 0x4f, 0x74, 0x48, 0xb1, 0x8e, 0x4f, 0xb4, 0x64, 0xbc, 0xc9, 0x8b, 0xb2, 0x32, 0xdc, 0x03, 0xe0, 0x56, 0x01, 0x1d, 0x38, 0xa9, 0xad, 0x86, 0x0b, 0x98, 0x20, 0xf2, 0x0c, 0x9f, 0x0b, 0xec, 0x37, 0x03, 0xd6, 0xed, 0xd3, 0x54, 0x52, 0xad, 0x41, 0x5c, 0xa9, 0x22, 0x2a, 0xba, 0x4e, 0x89, 0xa8, 0x84, 0x52, 0xa9, 0xb2, 0x4c, 0x84, 0x3c, 0x06, 0x95, 0x8f, 0x43, 0xcf, 0xb6, 0xc2, 0xc3, 0xdd, 0x83, 0xe3, 0xb3, 0x07, 0x3f, 0x48, 0x78, 0xcc, 0xfe, 0xfc, 0x5a, 0x7c, 0xce, 0x67, 0x64, 0x1b, 0x73, 0x4f, 0xd6, 0xa4, 0x5d, 0xee, 0xd8, 0xda, 0x71, 0xa8, 0x94, 0x00, 0x46, 0x52, 0x9d, 0x95, 0x35, 0xb2, 0xed, 0xb4, 0xc2, 0xdd, 0x92, 0xc4, 0x9f, 0xd2, 0x57, 0xe0, 0x20, 0xb2, 0x2a, 0x09, 0x3d, 0x00, 0x24, 0x0d, 0xdf, 0x12, 0x05, 0xc7, 0xa6, 0x3d, 0x66, 0x32, 0xcb, 0xf3, 0xcc, 0x30, 0x65, 0x5a, 0x8d, 0xe9, 0x86, 0x25, 0x00, 0xcb, 0x54, 0x6d, 0x65, 0x06, 0x29, 0xab, 0x9b, 0x88, 0xe2, 0x7a, 0xa5, 0xeb, 0xa7, 0xd2, 0x33, 0xbf, 0x16, 0x49, 0x9a, 0x24, 0xa9, 0x88, 0x42, 0x15, 0x4a, 0xce, 0x58, 0xf0, 0x70, 0xeb, 0xdd, 0x5f, 0x96, 0x39, 0xfd, 0xf0, 0xf8, 0xf8, 0xe1, 0xc3, 0x95, 0x00, 0x9b, 0x72, 0xe6, 0xc5, 0x86, 0x6d, 0x60, 0xbe, 0xeb, 0x68, 0x0d, 0xfd, 0x7a, 0xb2, 0xa1, 0x69, 0x96, 0xc1, 0x99, 0x1c, 0x87, 0x52, 0xa9, 0xdc, 0x76, 0xf4, 0xfc, 0xc4, 0x87, 0xed, 0x71, 0x77, 0xfb, 0xda, 0x95, 0x49, 0x16, 0x86, 0x3f, 0xc5, 0x1e, 0xdf, 0xbb, 0x4c, 0x07, 0x89, 0xe5, 0xc6, 0xe2, 0x2e, 0x60, 0x77, 0x8c, 0xc7, 0x71, 0x92, 0xf8, 0x22, 0xf6, 0xee, 0x7d, 0x2b, 0xdb, 0x8b, 0x57, 0xde, 0x21, 0x70, 0x3c, 0x59, 0x06, 0xaf, 0xf7, 0x2a, 0xdc, 0x45, 0x87, 0x28, 0x0a, 0xbc, 0xfb, 0xd0, 0xbd, 0xbd, 0x3b, 0x08, 0xa6, 0x24, 0xf3, 0x0f, 0x8c, 0xc5, 0x51, 0xf0, 0x10, 0xf8, 0x51, 0xe4, 0xdd, 0x3a, 0x87, 0x28, 0x84, 0x0b, 0xef, 0xae, 0xf7, 0x3f, 0x1e, 0x2e, 0x5b, 0x8d, 0x1f, 0xbb, 0x8f, 0x57, 0xfd, 0x08, 0xba, 0xa1, 0xc7, 0x81, 0xb3, 0x41, 0x23, 0x2c, 0xb3, 0x71, 0x58, 0x84, 0x3b, 0x5a, 0xa7, 0xd9, 0x5e, 0x98, 0xad, 0x4f, 0xb6, 0xe6, 0x8b, 0xb3, 0x32, 0xe7, 0x49, 0x46, 0x53, 0x2c, 0xcb, 0x0a, 0x3a, 0x32, 0xdb, 0x12, 0x53, 0xe5, 0x56, 0xb1, 0xd8, 0x6c, 0xff, 0xc3, 0xf2, 0xc4, 0x63, 0x9a, 0x13, 0x0d, 0x51, 0x39, 0xa8, 0x70, 0x96, 0xa6, 0x54, 0x53, 0xa5, 0xb2, 0xb4, 0x04, 0xb9, 0xc0, 0x5a, 0x84, 0x6c, 0x2e, 0x72, 0x45, 0xf9, 0x36, 0x9d, 0xf9, 0xa9, 0x8e, 0x18, 0x43, 0x80, 0xa6, 0x80, 0x76, 0x1f, 0x69, 0x99, 0x88, 0x38, 0x09, 0x0e, 0x7c, 0x5b, 0x8d, 0xff, 0xdb, 0x65, 0xab, 0x91, 0x6c, 0xc3, 0xef, 0x7c, 0xb1, 0x34, 0x1b, 0x1c, 0x30, 0xc4, 0x11, 0xa6, 0xf5, 0x27, 0xc0, 0x89, 0x00, 0x53, 0x5c, 0x80, 0xff, 0x0e, 0x5f, 0x80, 0x8f, 0x0e, 0xb8, 0x88, 0x3d, 0xff, 0x1c, 0xcf, 0xa0, 0xa6, 0xcb, 0xda, 0x54, 0x35, 0x36, 0x06, 0x1e, 0x3f, 0x2b, 0x69, 0xcc, 0xce, 0x45, 0x71, 0xad, 0xa9, 0x12, 0x81, 0x50, 0x29, 0x29, 0x5a, 0x9b, 0x43, 0xc2, 0xce, 0xe4, 0x1d, 0xcb, 0xae, 0x68, 0x3b, 0x2a, 0x24, 0xeb, 0x5a, 0xad, 0xdb, 0x2e, 0x03, 0x01, 0x91, 0xd8, 0xa8, 0x25, 0x82, 0x19, 0x65, 0x0d, 0x52, 0x25, 0x82, 0x24, 0xda, 0x5f, 0xa8, 0x3a, 0xe9, 0x1c, 0x17, 0xe4, 0x63, 0x1a, 0x81, 0x17, 0xda, 0x75, 0x1d, 0x6c, 0x29, 0xfb, 0x0f, 0x5e, 0xb2, 0xed, 0xf9, 0x0e, 0x7b, 0xa9, 0x32, 0xe1, 0xb9, 0x36, 0x7c, 0xf1, 0x09, 0xf3, 0xcf, 0xc9, 0x9d, 0x33, 0x3f, 0x3e, 0xbf, 0x2c, 0xeb, 0x2e, 0xaf, 0x37, 0x72, 0x89, 0x6f, 0x55, 0xda, 0xa8, 0xb3, 0x6c, 0xe3, 0x9a, 0x35, 0x1c, 0x47, 0x07, 0xf8, 0xd0, 0x34, 0xd0, 0xd2, 0xb9, 0x02, 0xdc, 0x0b, 0xc9, 0x10, 0xe5, 0xe2, 0xcb, 0xea, 0x77, 0x36, 0xbb, 0x2c, 0x7c, 0xf8, 0x09, 0x1f, 0xd8, 0xfc, 0x61, 0x51, 0x89, 0x92, 0x4d, 0xaf, 0x2c, 0x6d, 0xbb, 0xe7, 0xef, 0x9c, 0xcd, 0x9a, 0xa8, 0xc6, 0x11, 0xbe, 0xdd, 0x6d, 0x15, 0x05, 0x55, 0x4d, 0x45, 0x8d, 0x86, 0x7f, 0x90, 0x8c, 0x69, 0x8f, 0x9b, 0x9e, 0xc9, 0x37, 0xc9, 0x66, 0xec, 0x83, 0x79, 0x56, 0xca, 0x59, 0x42, 0x39, 0x2b, 0x23, 0xa5, 0xc9, 0xe6, 0x14, 0xa4, 0x2a, 0x03, 0xad, 0x52, 0x60, 0x61, 0x5d, 0x01, 0xec, 0x87, 0x55, 0x20, 0xc9, 0x88, 0xf4, 0x47, 0x78, 0xad, 0x4a, 0x24, 0x4f, 0xf4, 0x65, 0x59, 0xd3, 0xb7, 0x4d, 0xf7, 0x01, 0xbc, 0x6a, 0x3d, 0xad, 0xc4, 0x2a, 0xdc, 0x79, 0x63, 0x1f, 0xab, 0x18, 0xc0, 0xa7, 0xcc, 0x33, 0x3c, 0xf0, 0x4f, 0xcf, 0xf0, 0x30, 0x2e, 0xa0, 0x2a, 0x2e, 0x45, 0x32, 0x53, 0xf8, 0x47, 0xfe, 0xa8, 0xea, 0xfa, 0xd0, 0x9a, 0xe2, 0x60, 0xb5, 0x65, 0xe2, 0x6a, 0x43, 0xef, 0xa9, 0x8a, 0xc0, 0x64, 0xe2, 0xf0, 0x56, 0xf5, 0xf4, 0x50, 0x98, 0x67, 0x61, 0xab, 0x0b, 0x9e, 0x17, 0xba, 0x50, 0xd8, 0x77, 0x4d, 0x06, 0x11, 0xaa, 0xf1, 0x20, 0x79, 0x7a, 0xab, 0x54, 0x12, 0x28, 0x16, 0x33, 0xef, 0x42, 0xbe, 0x68, 0xec, 0x72, 0xc1, 0xdc, 0x05, 0x00, 0x7f, 0xe9, 0x6d, 0x3c, 0xeb, 0x5d, 0x4e, 0x0f, 0xbd, 0x8d, 0x07, 0xc2, 0x76, 0xd7, 0xb1, 0xcc, 0x33, 0xf3, 0x30, 0x5b, 0xb3, 0xc0, 0xb3, 0x2d, 0x5b, 0x05, 0x8f, 0x49, 0x43, 0x15, 0xc9, 0x49, 0x59, 0x73, 0x4c, 0x9b, 0x8d, 0x0b, 0x13, 0xa2, 0x98, 0xcc, 0x9b, 0xa4, 0xa5, 0x57, 0x64, 0x94, 0xf7, 0x56, 0xb5, 0xc1, 0x18, 0xd2, 0x05, 0x0d, 0xf4, 0x67, 0x55, 0x94, 0x6d, 0x58, 0xe9, 0xb2, 0x52, 0x09, 0x7e, 0x43, 0x92, 0xf0, 0x46, 0x27, 0x5a, 0x56, 0xd8, 0x6a, 0x80, 0x0f, 0x9e, 0x24, 0xc9, 0x65, 0x35, 0x8d, 0x6f, 0x9b, 0x37, 0x1f, 0xaf, 0x56, 0xc7, 0x5e, 0xa7, 0x81, 0xb1, 0x15, 0x68, 0xbf, 0x82, 0x23, 0xe2, 0xf3, 0xbb, 0xf8, 0xf0, 0x8e, 0x63, 0x5b, 0xeb, 0x49, 0x03, 0x48, 0xc6, 0x79, 0xb2, 0xc7, 0xc1, 0x9e, 0x3f, 0x15, 0xec, 0xdf, 0x44, 0x79, 0x72, 0x3c, 0x66, 0x89, 0xa9, 0xa8, 0xad, 0x4c, 0x76, 0xea, 0x9c, 0x7c, 0xf3, 0x0b, 0x9d, 0x16, 0x94, 0x78, 0x6b, 0x25, 0xe9, 0xe8, 0xd6, 0x24, 0x09, 0x60, 0x4d, 0x1b, 0x51, 0xe1, 0x70, 0x42, 0x49, 0x82, 0x92, 0xe7, 0x0a, 0x14, 0x53, 0x4b, 0x2a, 0xf7, 0x53, 0x79, 0x96, 0x01, 0xf3, 0x35, 0x25, 0xac, 0xd2, 0xf0, 0x75, 0x10, 0x0b, 0x3f, 0xfe, 0x14, 0xa1, 0xff, 0xe1, 0x42, 0x9f, 0x91, 0x6d, 0xfd, 0xc8, 0xed, 0x71, 0xea, 0x41, 0xea, 0x99, 0x73, 0xb2, 0xd6, 0x51, 0x6b, 0x2c, 0x3b, 0x17, 0x6b, 0xae, 0x1f, 0x1c, 0x70, 0xc4, 0x11, 0x11, 0x8d, 0x4f, 0xd6, 0xa8, 0xad, 0x4f, 0x9a, 0x0c, 0xe0, 0xad, 0x28, 0xaf, 0x53, 0x49, 0x62, 0xf9, 0x19, 0x15, 0x36, 0xb6, 0x59, 0x46, 0x48, 0x28, 0x41, 0xfc, 0x28, 0xb7, 0x43, 0x18, 0x08, 0x8a, 0x98, 0x81, 0x2e, 0xe6, 0x75, 0x46, 0xdc, 0x50, 0xc1, 0xde, 0x46, 0x24, 0x09, 0xd5, 0x86, 0xa4, 0x29, 0xe0, 0x0f, 0x21, 0x20, 0xcd, 0x60, 0x25, 0xf6, 0x55, 0xae, 0x08, 0xf0, 0xb5, 0x0a, 0xf0, 0x1c, 0x3f, 0x12, 0xec, 0x2f, 0xac, 0x91, 0x7b, 0xdb, 0x36, 0xef, 0xda, 0xf7, 0x57, 0xa0, 0x17, 0x0b, 0x28, 0xc7, 0x3c, 0xe3, 0x43, 0xd3, 0x29, 0x0b, 0xa3, 0x53, 0xa4, 0x85, 0xb6, 0xde, 0xd6, 0x5c, 0x31, 0x31, 0xaa, 0xd5, 0x74, 0x06, 0xca, 0x1d, 0x5b, 0x08, 0x09, 0xf3, 0xbc, 0x3b, 0x88, 0x30, 0xba, 0xdf, 0x5f, 0x3f, 0x44, 0x71, 0x6c, 0xdd, 0xb3, 0x57, 0x07, 0xe7, 0x75, 0x70, 0x6f, 0xdf, 0xda, 0xdf, 0xec, 0xef, 0x62, 0x3f, 0x96, 0xda, 0x7e, 0x1d, 0x3c, 0xf0, 0xdb, 0x3b, 0x9e, 0x3d, 0x84, 0x07, 0x4f, 0xa8, 0xc4, 0xf9, 0xf1, 0x80, 0xcf, 0x1b, 0x89, 0x7b, 0x2b, 0x39, 0x30, 0x1f, 0xe1, 0x1b, 0xe1, 0x9d, 0x1f, 0x02, 0xcf, 0xe5, 0x81, 0xc7, 0x0f, 0xd9, 0xcb, 0x4c, 0x27, 0xbb, 0x40, 0xc5, 0xaf, 0x0f, 0x11, 0xff, 0x3c, 0x43, 0xf0, 0x6f, 0x2f, 0x43, 0x10, 0x3a, 0x73, 0xb7, 0x7a, 0x9b, 0x2d, 0x88, 0xbd, 0x53, 0xaf, 0x67, 0xee, 0x00, 0xd4, 0x9d, 0xf5, 0xb4, 0x4c, 0x27, 0xaa, 0x70, 0x71, 0x80, 0x8d, 0xeb, 0x88, 0xad, 0x37, 0xe0, 0xbb, 0xd3, 0xa7, 0x4c, 0xd6, 0x0e, 0x9c, 0x91, 0x32, 0x39, 0x8a, 0xaa, 0x8f, 0x7c, 0xb3, 0xf0, 0x9a, 0x3a, 0x05, 0x9d, 0x6f, 0x15, 0x6d, 0xad, 0x26, 0xad, 0x53, 0x84, 0xe8, 0xa6, 0xe9, 0xe8, 0xfc, 0x45, 0x64, 0x65, 0x9a, 0xab, 0x56, 0x85, 0x35, 0x5c, 0x95, 0xa9, 0x9a, 0x72, 0xa5, 0xa9, 0x48, 0x93, 0x7b, 0xf0, 0x49, 0x19, 0x23, 0x7e, 0x6b, 0x1d, 0x53, 0x9d, 0x52, 0x1a, 0x30, 0x2e, 0x94, 0x14, 0xc9, 0x41, 0xb2, 0x38, 0xbc, 0x2c, 0x43, 0x60, 0xec, 0x72, 0xb5, 0x63, 0x73, 0x77, 0xe9, 0x99, 0x3b, 0x2d, 0xf3, 0x04, 0x09, 0xb3, 0x68, 0xdb, 0x61, 0xf6, 0x4a, 0x67, 0x49, 0x03, 0x16, 0xa1, 0x63, 0xf1, 0x93, 0x3b, 0xac, 0x7a, 0xfa, 0x94, 0xc5, 0x02, 0x82, 0x00, 0xd6, 0x28, 0x2b, 0x9c, 0xdf, 0x81, 0x2c, 0x66, 0x9f, 0xd2, 0x56, 0xd4, 0x5d, 0x51, 0x50, 0xae, 0x38, 0xcb, 0x1b, 0x25, 0xb1, 0x24, 0x53, 0xca, 0x08, 0x63, 0x37, 0xb5, 0x69, 0xa1, 0x28, 0x17, 0x10, 0x91, 0x51, 0xa6, 0xe2, 0x4a, 0xe9, 0x7d, 0xc0, 0x44, 0x9a, 0x45, 0x9a, 0x84, 0xb3, 0x8c, 0xd2, 0xc8, 0xd3, 0xfb, 0x48, 0xb2, 0x24, 0xf1, 0x44, 0xb8, 0x7f, 0xd6, 0xae, 0x67, 0xfc, 0xd5, 0xb5, 0x6f, 0xaf, 0x58, 0xbf, 0x20, 0x7c, 0x2d, 0x90, 0x2f, 0x1a, 0x40, 0x0f, 0x5d, 0xa6, 0xd9, 0xa9, 0xa7, 0x33, 0x3f, 0x87, 0xe1, 0x8d, 0x2d, 0x80, 0xd9, 0xcc, 0xfd, 0x3c, 0x8f, 0x4f, 0x1c, 0xbf, 0x4e, 0xea, 0x3a, 0xc1, 0xbf, 0x08, 0xd5, 0xfa, 0x8c, 0x20, 0x86, 0xf5, 0x9a, 0xa4, 0xe9, 0x76, 0xd2, 0xa9, 0xd2, 0x94, 0x64, 0x4b, 0x51, 0x17, 0x8c, 0xa8, 0x06, 0x01, 0xa0, 0x32, 0x09, 0x47, 0xdd, 0x70, 0x89, 0xd0, 0x7c, 0x54, 0x54, 0x75, 0x9b, 0x40, 0x43, 0x2b, 0x2f, 0x83, 0xab, 0x64, 0x2a, 0xc3, 0x34, 0x91, 0x51, 0xc4, 0xe2, 0x0b, 0xfd, 0x45, 0x76, 0xb9, 0xcb, 0xb8, 0xc5, 0x60, 0x40, 0xdf, 0xa2, 0xad, 0xd9, 0xb1, 0xe6, 0xd3, 0xe2, 0xb8, 0xd0, 0x61, 0x78, 0x63, 0xc4, 0x16, 0x03, 0xbd, 0x67, 0xf3, 0xf2, 0x79, 0x1e, 0x5f, 0xa6, 0x2a, 0x39, 0x1f, 0x6c, 0x12, 0x97, 0xa7, 0x72, 0x9c, 0x73, 0x0d, 0x74, 0x7b, 0xcc, 0xb7, 0x3a, 0xdb, 0x9a, 0x33, 0x50, 0xc6, 0xfd, 0xf6, 0x2e, 0x6f, 0xa9, 0x26, 0x9c, 0xf2, 0x55, 0xda, 0x84, 0x68, 0xa0, 0x09, 0x7e, 0x01, 0x09, 0xbc, 0xdc, 0xe4, 0x70, 0x2a, 0xa2, 0x01, 0x6f, 0x2b, 0xc2, 0x98, 0xf4, 0x20, 0xdd, 0x03, 0x75, 0xbf, 0x3c, 0x97, 0xef, 0x7e, 0xce, 0x5f, 0x6f, 0xba, 0xab, 0x59, 0x0f, 0xc3, 0x48, 0x05, 0x1d, 0xc3, 0x32, 0xd9, 0x0b, 0xd6, 0xdd, 0xcc, 0x10, 0xaf, 0x40, 0xf2, 0x4f, 0xeb, 0xe4, 0xf4, 0x27, 0x8d, 0xd5, 0xe8, 0xc0, 0x69, 0x36, 0xfb, 0x79, 0x7f, 0x21, 0x92, 0x1d, 0xcf, 0x69, 0xd2, 0xba, 0x32, 0x7d, 0x2c, 0xe6, 0x88, 0xac, 0x31, 0x60, 0x58, 0xd3, 0xf1, 0x0b, 0xac, 0xc0, 0x3a, 0x54, 0x4d, 0xd1, 0xe8, 0x94, 0xce, 0x39, 0x5b, 0x93, 0x22, 0x6e, 0xcb, 0x2d, 0xe7, 0xd6, 0x76, 0x58, 0x95, 0x44, 0xa0, 0xb3, 0x12, 0x1c, 0xb8, 0xa8, 0x10, 0xbe, 0x55, 0x43, 0x55, 0xc4, 0x47, 0x55, 0x49, 0x2e, 0xe3, 0x38, 0x7a, 0x8e, 0x79, 0x3c, 0xe7, 0x2f, 0xd8, 0x35, 0x80, 0x4a, 0xcd, 0x84, 0x18, 0x03, 0x58, 0xbe, 0xe5, 0x70, 0x3d, 0xe9, 0x79, 0x70, 0x07, 0x7b, 0xea, 0xb9, 0xb3, 0xda, 0x36, 0x07, 0xf8, 0x4f, 0x50, 0xeb, 0xc3, 0xcf, 0x59, 0xe2, 0x5d, 0x9a, 0x82, 0xde, 0x1f, 0x4d, 0xf9, 0xba, 0xe9, 0x74, 0x31, 0x94, 0x97, 0x04, 0x17, 0x59, 0x8b, 0x57, 0x85, 0x44, 0xdc, 0x92, 0x35, 0x53, 0x14, 0x8e, 0x01, 0x15, 0x75, 0x5a, 0xd4, 0x8a, 0x00, 0x3e, 0x45, 0xf0, 0x2e, 0x34, 0xa8, 0x7f, 0xae, 0xf0, 0x4f, 0x01, 0xbc, 0xe8, 0x10, 0xc7, 0xb8, 0x94, 0x92, 0xab, 0x28, 0x41, 0x80, 0x4e, 0x58, 0xec, 0xf9, 0x6c, 0x7f, 0xe1, 0xb9, 0xcb, 0xdb, 0xee, 0xf1, 0x3d, 0xec, 0x32, 0x1d, 0x14, 0xeb, 0xcc, 0x27, 0x17, 0xa6, 0x2c, 0x6e, 0x3f, 0x39, 0x54, 0x5a, 0x45, 0x98, 0xbf, 0xac, 0x03, 0xfb, 0x75, 0x42, 0xff, 0x26, 0x4f, 0x0a, 0x62, 0x54, 0x64, 0x14, 0xa3, 0x96, 0x25, 0x65, 0x8e, 0xc3, 0xea, 0xdc, 0x30, 0x0f, 0x03, 0x8e, 0x79, 0x5a, 0x33, 0x09, 0xde, 0x44, 0x66, 0xa7, 0x52, 0x35, 0xa9, 0x61, 0xc0, 0x65, 0x96, 0x26, 0x6a, 0x0f, 0x09, 0x43, 0x55, 0xd1, 0x69, 0xac, 0xdd, 0x88, 0x05, 0xa9, 0x62, 0x9c, 0x85, 0x22, 0x54, 0x3c, 0x4d, 0x38, 0x8b, 0x7e, 0xd8, 0x1f, 0x62, 0x76, 0xf8, 0xe1, 0xe1, 0x42, 0x7f, 0xc1, 0xae, 0x13, 0xb3, 0x2d, 0xdb, 0x75, 0x7b, 0xaa, 0x0c, 0x5e, 0x5d, 0x06, 0x11, 0x06, 0xdd, 0xec, 0x80, 0x7e, 0x98, 0xf6, 0x17, 0xfb, 0xd7, 0x05, 0xec, 0xd4, 0x71, 0x50, 0x91, 0x7e, 0x26, 0x8f, 0x9d, 0x73, 0x04, 0x66, 0x1f, 0x91, 0x4a, 0xa1, 0x3c, 0x1b, 0xad, 0xc7, 0x22, 0xa5, 0xd3, 0x33, 0x50, 0x10, 0xca, 0x14, 0x9b, 0x6e, 0x2b, 0x3a, 0x04, 0x4c, 0x88, 0x17, 0x57, 0x69, 0x0b, 0x5b, 0x54, 0x2b, 0xb1, 0x16, 0xcb, 0x44, 0x28, 0xa5, 0xb2, 0x58, 0x22, 0x56, 0x03, 0x38, 0xa0, 0x39, 0x3d, 0x0e, 0xb5, 0xc4, 0xc3, 0xcb, 0xa2, 0x33, 0xec, 0xea, 0xda, 0xab, 0xc9, 0x82, 0xd4, 0xb2, 0x16, 0x66, 0x99, 0xb2, 0x23, 0x0a, 0x5a, 0xd6, 0x32, 0x5b, 0x93, 0x1e, 0xf8, 0x70, 0x3a, 0x39, 0xcb, 0x69, 0x76, 0x4f, 0x7a, 0xb4, 0x68, 0xa9, 0xf2, 0x75, 0xe8, 0x07, 0x6e, 0x0d, 0xbb, 0xd8, 0x17, 0x07, 0xb1, 0xf7, 0x7c, 0x7d, 0x10, 0xc1, 0x5e, 0x62, 0x67, 0x58, 0xc1, 0x6b, 0x3f, 0xda, 0xc7, 0x11, 0xc4, 0x54, 0xc2, 0xc2, 0x8c, 0x07, 0x91, 0x17, 0xf9, 0xe6, 0x23, 0x46, 0x51, 0x7c, 0xf0, 0x38, 0x3b, 0xbc, 0x4c, 0x0e, 0x0f, 0x77, 0x87, 0x20, 0x4a, 0x52, 0x2c, 0x3c, 0xf7, 0xc1, 0xf5, 0x42, 0x80, 0xdf, 0x1f, 0xe7, 0xef, 0xff, 0xd9, 0x45, 0xd9, 0x81, 0xb7, 0xdd, 0xfb, 0x0f, 0xef, 0x10, 0x9f, 0xd7, 0x85, 0x8e, 0x96, 0xa6, 0x11, 0x1c, 0x11, 0x0c, 0x63, 0xb6, 0x35, 0x56, 0xe1, 0xec, 0x9c, 0x00, 0x25, 0xbf, 0xe1, 0x33, 0x3a, 0x80, 0x79, 0x9d, 0x66, 0x55, 0x29, 0x32, 0x84, 0x5d, 0x55, 0x20, 0xbe, 0x2a, 0xb0, 0xe0, 0x63, 0xab, 0xc1, 0xf3, 0x21, 0x21, 0x73, 0xea, 0xbe, 0xad, 0xbb, 0xae, 0xe9, 0xf0, 0x76, 0x03, 0xc1, 0xdc, 0x55, 0xac, 0xab, 0x13, 0x99, 0xe6, 0xb2, 0x28, 0x64, 0x5a, 0x05, 0x8d, 0xac, 0x24, 0x7e, 0x23, 0x9e, 0xc8, 0x42, 0x5e, 0x80, 0xcb, 0x63, 0x9b, 0xed, 0x5d, 0x16, 0x84, 0x56, 0x6a, 0x25, 0x22, 0xd8, 0xb9, 0xf1, 0xc3, 0x6d, 0xe0, 0xfb, 0xde, 0x17, 0x96, 0xfd, 0x3f, 0x9f, 0x59, 0x61, 0xff, 0x19, 0xcb, 0xde, 0x7e, 0xf8, 0xf0, 0xe1, 0x0a, 0x14, 0x63, 0x64, 0x88, 0xc6, 0x10, 0xd2, 0x74, 0xa8, 0xd9, 0x03, 0x04, 0xe7, 0x05, 0x14, 0x4b, 0x0c, 0xae, 0xa6, 0x5a, 0x68, 0xc8, 0x67, 0xe6, 0x9e, 0xa0, 0xb3, 0x07, 0xcb, 0x7c, 0x67, 0xea, 0x77, 0x4c, 0x83, 0x36, 0xec, 0x5e, 0xf1, 0xca, 0x7f, 0xd8, 0x3f, 0xec, 0x0f, 0xdc, 0x91, 0xbe, 0xc7, 0x22, 0xec, 0x22, 0xeb, 0xe1, 0xfb, 0xef, 0x7f, 0xba, 0x76, 0x1c, 0x2b, 0xb2, 0x43, 0xdb, 0xd5, 0x71, 0x74, 0xb7, 0x0b, 0x1e, 0x82, 0xdd, 0xdd, 0x4f, 0xf7, 0x9e, 0x7f, 0x27, 0x62, 0x2b, 0xb6, 0xbe, 0x0d, 0xee, 0xee, 0xfd, 0x38, 0x78, 0x11, 0x82, 0x7d, 0xb1, 0xfb, 0x9b, 0x87, 0xc3, 0xef, 0xd4, 0x41, 0xc2, 0x6d, 0xff, 0xd3, 0x65, 0x34, 0xff, 0xed, 0xc7, 0xee, 0xca, 0x39, 0xb1, 0x81, 0x39, 0xf3, 0x0c, 0x76, 0x01, 0x31, 0x66, 0xbb, 0xd4, 0x67, 0xb0, 0xba, 0xd4, 0x43, 0xe1, 0x40, 0x73, 0xae, 0x0e, 0xd8, 0x07, 0x78, 0xff, 0xe7, 0x50, 0xb2, 0xcb, 0xcb, 0xf2, 0x2c, 0x8c, 0x35, 0xa5, 0xe8, 0xb1, 0xcb, 0x24, 0xb5, 0xc2, 0x64, 0x99, 0x9f, 0xb4, 0x35, 0xa5, 0xa8, 0x5c, 0x40, 0x9e, 0x8f, 0x10, 0x5d, 0x87, 0x75, 0xec, 0xa5, 0xc0, 0xf5, 0x32, 0x29, 0x0a, 0x15, 0x68, 0x2d, 0xea, 0xb2, 0x8e, 0x9b, 0x8c, 0x2b, 0x2e, 0x13, 0x1e, 0xb0, 0xbd, 0x90, 0x95, 0x4a, 0xa3, 0x3c, 0x4b, 0x39, 0x17, 0x08, 0x63, 0x51, 0xec, 0x1f, 0xbc, 0xbb, 0x28, 0x32, 0xb6, 0xfd, 0xef, 0x97, 0x01, 0x09, 0xd9, 0x86, 0xc5, 0x38, 0x4f, 0xa7, 0xc9, 0x45, 0xcc, 0x9a, 0xa9, 0x39, 0x7c, 0x72, 0xc7, 0x5e, 0xb3, 0x05, 0x5a, 0x4c, 0x6b, 0x4a, 0x79, 0xc0, 0x77, 0x03, 0x9f, 0x3e, 0x6f, 0x64, 0xda, 0xc5, 0x60, 0x20, 0x2a, 0xf4, 0xa2, 0x84, 0xef, 0x45, 0x22, 0xb5, 0x3e, 0x1c, 0x34, 0x58, 0x1e, 0x58, 0x60, 0x96, 0x15, 0x59, 0x96, 0x64, 0x3a, 0x90, 0x02, 0x31, 0xf7, 0xdb, 0x94, 0x48, 0xbd, 0x06, 0x08, 0x52, 0xe2, 0x3e, 0xc9, 0x44, 0x2b, 0x95, 0x2e, 0xb4, 0x1f, 0x82, 0x21, 0x0a, 0x59, 0xca, 0xb2, 0xac, 0x22, 0xad, 0xb1, 0x01, 0x5b, 0x50, 0x90, 0x38, 0x49, 0x0e, 0xf1, 0xfe, 0x40, 0xa9, 0xab, 0xd8, 0x89, 0x9f, 0x2b, 0xfc, 0x78, 0x66, 0x41, 0x3e, 0x12, 0xb1, 0x5a, 0xf9, 0xda, 0x83, 0xd3, 0xbb, 0xd3, 0xb4, 0x09, 0x66, 0x36, 0xe3, 0x8b, 0x3d, 0x65, 0xf7, 0xe7, 0x75, 0x3d, 0x99, 0x67, 0x20, 0x28, 0x2e, 0x9d, 0x37, 0xad, 0x7c, 0x57, 0x24, 0x54, 0x15, 0x70, 0xa4, 0xaa, 0x0d, 0xa5, 0xca, 0x22, 0xf3, 0x8e, 0x79, 0x2c, 0xcb, 0xaa, 0x50, 0x1d, 0x98, 0x48, 0xd5, 0x65, 0xf0, 0x1f, 0xe5, 0x17, 0xf3, 0x1a, 0xbb, 0x8d, 0x13, 0xf1, 0xea, 0x20, 0x95, 0xb5, 0x2a, 0x63, 0x1d, 0x17, 0xd4, 0x68, 0xdb, 0x64, 0x1a, 0x31, 0xa1, 0xa4, 0x83, 0xd1, 0x22, 0x93, 0x55, 0x9a, 0x08, 0x59, 0x44, 0xc9, 0x7d, 0x40, 0x27, 0xd2, 0xbb, 0x90, 0x1d, 0x9c, 0x3b, 0xf7, 0x32, 0x80, 0x7c, 0x7c, 0xfb, 0x06, 0xa1, 0x1a, 0x8a, 0x72, 0x76, 0xa8, 0xa2, 0x6a, 0xb6, 0x06, 0x7c, 0x6e, 0x4d, 0xed, 0x14, 0x02, 0xd4, 0x57, 0x2f, 0xe3, 0xbc, 0xd8, 0x36, 0x16, 0x20, 0xd0, 0x71, 0x81, 0xb8, 0x31, 0xa7, 0x2f, 0x82, 0x84, 0x99, 0xce, 0xcb, 0xa8, 0x02, 0x59, 0xcc, 0xea, 0xb2, 0xcb, 0x6b, 0x41, 0x1d, 0x66, 0x42, 0xe1, 0x63, 0x1f, 0xab, 0x82, 0x0a, 0xd2, 0xdb, 0xbc, 0x0b, 0x34, 0x0f, 0xeb, 0x2e, 0x51, 0x19, 0x8f, 0x85, 0x14, 0x79, 0x56, 0x55, 0x3c, 0x8c, 0xc3, 0x2c, 0xc0, 0xf6, 0x7a, 0x10, 0xae, 0xe3, 0x83, 0x65, 0xe4, 0x2a, 0xce, 0xf2, 0x5d, 0x7c, 0xe0, 0x41, 0x18, 0x07, 0xd7, 0x2c, 0x0c, 0xee, 0xef, 0xef, 0xbf, 0xd8, 0x69, 0xff, 0xe6, 0xb2, 0x70, 0xfd, 0xf8, 0xd8, 0x5c, 0x31, 0x68, 0x4e, 0xfb, 0x34, 0x2e, 0xd6, 0xca, 0xce, 0xa7, 0x2f, 0xe4, 0xba, 0xd9, 0x24, 0x3c, 0x6c, 0x72, 0x92, 0xbb, 0x9e, 0xb3, 0x23, 0xf3, 0x39, 0x13, 0x02, 0x3a, 0x4c, 0x07, 0x9c, 0x04, 0x8b, 0x4d, 0x5a, 0xd6, 0xe9, 0xd3, 0x91, 0xdf, 0x96, 0xf9, 0xa0, 0xd3, 0x25, 0x84, 0x33, 0x8a, 0xe2, 0xc4, 0x93, 0xd3, 0x0c, 0xf1, 0x5a, 0xc7, 0xd8, 0x80, 0x8c, 0x52, 0x8d, 0xaf, 0x45, 0xc2, 0x93, 0x34, 0x40, 0x2c, 0x8b, 0xe0, 0xc7, 0xd4, 0x15, 0x3a, 0x89, 0x54, 0x90, 0x25, 0xe2, 0x80, 0x5d, 0xc7, 0x0e, 0x82, 0x85, 0xa1, 0x0f, 0x19, 0x77, 0x59, 0xc2, 0xca, 0xd8, 0x75, 0x4e, 0x6e, 0xd0, 0x41, 0xed, 0x67, 0xb9, 0x0e, 0x3c, 0x20, 0xa2, 0x9d, 0xbf, 0xc1, 0x6c, 0x80, 0xca, 0xd3, 0x37, 0x2c, 0x7b, 0x57, 0xa4, 0x5b, 0x15, 0x52, 0x65, 0x5a, 0x6e, 0x4d, 0x99, 0x5f, 0x73, 0x4e, 0x7f, 0x00, 0x3f, 0x38, 0x3d, 0x4b, 0x29, 0x1f, 0xd2, 0xa6, 0x69, 0xde, 0xa6, 0x0a, 0x0f, 0x4a, 0xa4, 0x8a, 0x38, 0xbe, 0xa9, 0x2c, 0x80, 0x80, 0xc9, 0x75, 0xea, 0xe7, 0x90, 0xd5, 0xb9, 0xce, 0x21, 0xd6, 0x32, 0xe9, 0x25, 0x08, 0xd7, 0xc0, 0x1a, 0x29, 0xb8, 0x80, 0x3f, 0xbd, 0xfd, 0x85, 0xab, 0xf1, 0xe3, 0x63, 0xf3, 0xf1, 0x8a, 0x1a, 0x52, 0x49, 0x8d, 0xb9, 0xd0, 0x28, 0x24, 0x31, 0x5d, 0xc8, 0x34, 0xfb, 0xb7, 0xbe, 0xa8, 0x9d, 0xda, 0xa5, 0x5e, 0xc2, 0x1d, 0xb0, 0xac, 0xa4, 0xda, 0xe7, 0xa3, 0xf0, 0xe8, 0x1c, 0xc5, 0xcb, 0xa8, 0xb7, 0x25, 0x2c, 0xf0, 0xdf, 0x04, 0xc9, 0xaa, 0xba, 0x23, 0x38, 0x64, 0xde, 0x51, 0x55, 0x22, 0x05, 0xb6, 0xb6, 0xec, 0x2a, 0x6c, 0x29, 0x6a, 0xa8, 0x38, 0x9a, 0x66, 0x18, 0x3c, 0xa3, 0x57, 0x75, 0x52, 0xfe, 0x90, 0x85, 0xca, 0x16, 0x3f, 0x5c, 0x5f, 0xef, 0xef, 0x5e, 0xee, 0xc3, 0x57, 0x89, 0xcd, 0xfc, 0x30, 0xf2, 0x9f, 0x56, 0xe3, 0x97, 0xc5, 0x04, 0xff, 0xc7, 0x67, 0x96, 0xfc, 0x99, 0xc1, 0x0b, 0x6f, 0x11, 0xab, 0x21, 0xc7, 0x26, 0x90, 0xaa, 0x09, 0xdc, 0xf1, 0xb4, 0x6a, 0x00, 0xc9, 0x60, 0x43, 0xcf, 0x2c, 0xd6, 0x34, 0x2c, 0x9a, 0x8d, 0xd3, 0x97, 0x33, 0x18, 0x38, 0xcd, 0x60, 0xa0, 0x0e, 0x7e, 0x73, 0x78, 0x4b, 0x52, 0x93, 0x6a, 0x25, 0xb6, 0x53, 0xcb, 0xed, 0x14, 0xf7, 0x7c, 0x78, 0x06, 0x97, 0xa9, 0xcc, 0x94, 0x80, 0x04, 0xaa, 0xf0, 0x94, 0xc6, 0xca, 0xab, 0xf0, 0x42, 0xc7, 0x12, 0x48, 0x43, 0x9d, 0x9d, 0x8c, 0xb0, 0xb1, 0xe2, 0xd0, 0x64, 0xd4, 0xd6, 0x09, 0x4f, 0xe6, 0xbe, 0x54, 0x2a, 0xdd, 0xc7, 0x49, 0x14, 0x78, 0xee, 0x37, 0xcf, 0x98, 0xf5, 0xcc, 0x62, 0x84, 0x59, 0xd0, 0x2d, 0xe0, 0x4e, 0x13, 0xd5, 0x49, 0x38, 0x23, 0x07, 0xe0, 0x3b, 0xd6, 0x09, 0x8c, 0x63, 0xd2, 0xd6, 0x42, 0xe7, 0x64, 0xbf, 0x31, 0x7f, 0xc1, 0x24, 0xf2, 0x75, 0x15, 0x68, 0x40, 0x08, 0xf5, 0x49, 0xd4, 0x14, 0xca, 0xa8, 0x37, 0x2b, 0x35, 0x76, 0xe9, 0xdc, 0x50, 0xfe, 0x9c, 0x1a, 0x74, 0x5b, 0x2c, 0x47, 0x68, 0x19, 0x40, 0x7e, 0xa1, 0xf0, 0xa9, 0x8b, 0x54, 0x24, 0x89, 0x10, 0x2a, 0x0d, 0x29, 0x55, 0xc5, 0xb0, 0xd1, 0x9c, 0x24, 0x12, 0x4a, 0xf8, 0x3c, 0x15, 0x87, 0x38, 0xe6, 0x9c, 0x07, 0x3c, 0x0a, 0xe3, 0x38, 0xf4, 0x2f, 0x5b, 0x8b, 0xef, 0xde, 0x75, 0xe0, 0x20, 0xce, 0xf8, 0xd4, 0x50, 0xc0, 0x2d, 0x6e, 0xfd, 0xe2, 0x6b, 0xe6, 0xdc, 0xa1, 0x13, 0x47, 0xfa, 0xa2, 0xe3, 0x6b, 0x8b, 0x81, 0x76, 0xed, 0x5e, 0x7c, 0x7f, 0xbd, 0xfb, 0xee, 0xfe, 0xd6, 0x0d, 0xf3, 0xea, 0x21, 0x50, 0xda, 0xcf, 0xd5, 0xfe, 0xc7, 0x9b, 0xdd, 0xc3, 0xce, 0xb1, 0x6e, 0x77, 0xf6, 0xc1, 0x0b, 0xae, 0xef, 0x0e, 0x87, 0xaf, 0xaf, 0xf6, 0xf8, 0x25, 0x07, 0x49, 0x2f, 0xb4, 0xee, 0xe3, 0xdb, 0xf6, 0xdd, 0x15, 0x9f, 0x46, 0xac, 0x3f, 0xca, 0x30, 0x62, 0x83, 0xad, 0x53, 0xaf, 0xa7, 0xb1, 0x5f, 0x6d, 0x3d, 0xd9, 0x20, 0xc5, 0xab, 0x3e, 0x81, 0x28, 0x2f, 0x1c, 0xc4, 0xca, 0x42, 0x00, 0xe7, 0x83, 0x75, 0x1a, 0x38, 0xa7, 0x26, 0xe3, 0x42, 0xd3, 0x42, 0x2c, 0x8e, 0x5d, 0x73, 0x94, 0x2d, 0x60, 0x64, 0x6b, 0xed, 0xc4, 0xfe, 0x91, 0xd4, 0x99, 0xdb, 0x35, 0x54, 0x4d, 0xac, 0x2a, 0x48, 0xb9, 0xbc, 0x81, 0x9e, 0xcc, 0xa3, 0x54, 0x33, 0xb1, 0x53, 0xb7, 0xbe, 0x88, 0x40, 0x35, 0xa2, 0xc3, 0x1f, 0x71, 0xe2, 0x27, 0xeb, 0xfe, 0xf1, 0x65, 0xc4, 0xf8, 0x7d, 0xd3, 0xbe, 0x7f, 0x7b, 0xc5, 0xa9, 0x22, 0x6e, 0xa6, 0x78, 0x0d, 0x5d, 0x06, 0x44, 0x99, 0x89, 0xf3, 0xbb, 0xf3, 0x3a, 0xcf, 0x93, 0x39, 0xb1, 0xa6, 0x2d, 0xd7, 0x8f, 0xeb, 0x09, 0x66, 0x3f, 0x15, 0x92, 0x71, 0x2d, 0x94, 0xa7, 0x0f, 0x52, 0xc9, 0xa8, 0x4c, 0x33, 0x2f, 0x0a, 0x29, 0x81, 0xc8, 0x8a, 0x38, 0x67, 0x9e, 0x1f, 0x81, 0x49, 0xee, 0x35, 0xab, 0x64, 0x42, 0x0c, 0x5f, 0xa9, 0x24, 0xe3, 0x9a, 0x01, 0x77, 0x62, 0xe0, 0x60, 0xa6, 0x63, 0x26, 0x8a, 0x24, 0xcb, 0x65, 0x2e, 0xd3, 0x48, 0xe5, 0xe0, 0xcb, 0x2a, 0x2f, 0xb9, 0x17, 0xf2, 0x5c, 0x31, 0xec, 0x43, 0x09, 0x35, 0x11, 0x80, 0x65, 0xed, 0xf7, 0xbb, 0xcb, 0x22, 0xda, 0x7b, 0x4a, 0x84, 0x9c, 0xa6, 0xd5, 0xa2, 0xbe, 0x1d, 0xec, 0x25, 0xa7, 0x07, 0x35, 0xd6, 0x2b, 0xd3, 0x13, 0x5f, 0xf8, 0xaa, 0x7b, 0xe6, 0x8e, 0x76, 0x3f, 0x93, 0x18, 0xfd, 0x1c, 0x4b, 0x76, 0x6e, 0x51, 0x66, 0x67, 0x10, 0xe1, 0x65, 0xbb, 0x1d, 0xbc, 0x50, 0x23, 0xa4, 0x39, 0xcb, 0xa5, 0x6d, 0x67, 0x0e, 0x65, 0x5a, 0xea, 0xc8, 0xad, 0x0b, 0x3a, 0x84, 0xa6, 0xc3, 0xe9, 0xa6, 0xa4, 0x91, 0x21, 0x65, 0x46, 0x7a, 0xd5, 0x27, 0x3d, 0x50, 0x93, 0x3e, 0xa5, 0xca, 0xda, 0x46, 0x67, 0x99, 0x2e, 0xb3, 0x06, 0x44, 0xcc, 0x09, 0x63, 0x21, 0x82, 0x94, 0x5f, 0x98, 0x30, 0x20, 0xbb, 0x26, 0xf0, 0xfc, 0x7e, 0x1e, 0x6d, 0x17, 0x4c, 0xc3, 0x1a, 0xd8, 0x30, 0x39, 0x8b, 0xe5, 0xc0, 0x75, 0x33, 0xb0, 0x7c, 0xb5, 0x20, 0x4c, 0x57, 0x6b, 0x3a, 0xb9, 0x9f, 0x83, 0xc9, 0xf9, 0x08, 0x06, 0xa6, 0x55, 0xc7, 0x28, 0x23, 0xf3, 0xa2, 0x06, 0xc4, 0x2a, 0x33, 0xa5, 0x8d, 0x45, 0xd3, 0xca, 0x3a, 0x97, 0x0a, 0xe8, 0x51, 0xe4, 0x69, 0x4e, 0x21, 0x5b, 0x62, 0x79, 0xca, 0x8e, 0xca, 0xe5, 0xea, 0x98, 0x32, 0xfb, 0xa5, 0x2e, 0x8a, 0x14, 0xe1, 0xad, 0x4c, 0xb5, 0xc9, 0xd3, 0x35, 0x6a, 0x2b, 0x8c, 0x6e, 0xb8, 0x90, 0x51, 0x22, 0xc5, 0x9e, 0x27, 0xcf, 0x8d, 0x5f, 0x78, 0xce, 0x5f, 0x1f, 0x9a, 0x2b, 0x87, 0xf2, 0x70, 0x2e, 0xa3, 0xdc, 0x87, 0xb6, 0xc6, 0x99, 0x81, 0x0a, 0x5b, 0x27, 0x3e, 0x23, 0xa8, 0x59, 0xd4, 0x7f, 0x85, 0x0d, 0xb8, 0x32, 0x9b, 0x3b, 0x9c, 0x0e, 0x74, 0xa1, 0xba, 0xa1, 0xd3, 0x76, 0x54, 0x1b, 0x77, 0x94, 0xa6, 0x4a, 0xb3, 0xae, 0x0c, 0xc0, 0xb7, 0x99, 0x32, 0xfd, 0xe0, 0x4f, 0x0c, 0x04, 0x6f, 0x61, 0xbb, 0x15, 0x20, 0xba, 0x39, 0xe5, 0xe2, 0x72, 0x85, 0x1f, 0x52, 0x69, 0xd7, 0x14, 0x08, 0xe1, 0x2d, 0xa3, 0x54, 0x0f, 0x82, 0x79, 0x56, 0xeb, 0xb2, 0x28, 0x4b, 0xdd, 0x6a, 0xea, 0x35, 0x90, 0x1a, 0x01, 0x3c, 0x3e, 0x26, 0x3a, 0x4d, 0x9e, 0xb7, 0xeb, 0x39, 0x7f, 0xc1, 0x2e, 0xa8, 0x95, 0x11, 0x0b, 0xcd, 0x1a, 0xad, 0xc5, 0x1d, 0xc6, 0x7e, 0x82, 0x88, 0x86, 0x6a, 0xe9, 0x7b, 0x84, 0x35, 0x6b, 0x38, 0x59, 0xfa, 0x64, 0x0a, 0x79, 0x96, 0x1e, 0xcc, 0x18, 0x1b, 0x0d, 0x54, 0x64, 0xa2, 0xc6, 0x47, 0x3a, 0x32, 0x33, 0x95, 0x9a, 0xc7, 0xf3, 0xe0, 0x0f, 0xca, 0x62, 0xc1, 0x53, 0x54, 0xf1, 0x40, 0x80, 0xdf, 0xe4, 0x5b, 0x0d, 0x60, 0x9e, 0x9e, 0xc7, 0x83, 0xd0, 0x7b, 0x49, 0xab, 0x52, 0xaa, 0xea, 0x29, 0xe9, 0x74, 0x37, 0xc3, 0x8f, 0xe9, 0xa6, 0x2b, 0xab, 0x26, 0x4b, 0x5b, 0x04, 0xbe, 0x26, 0xdf, 0x72, 0x40, 0x69, 0x9a, 0x71, 0xe9, 0x5d, 0x86, 0x8b, 0x1f, 0x9a, 0x8f, 0xef, 0x9a, 0x2b, 0xed, 0x42, 0x51, 0x6a, 0x18, 0x07, 0x76, 0xc1, 0xb0, 0x99, 0xf4, 0x48, 0xc7, 0x7f, 0xbd, 0x43, 0x58, 0x69, 0x9d, 0x60, 0xa3, 0xf5, 0xcb, 0x16, 0x98, 0x5d, 0xc2, 0x5d, 0x49, 0xd9, 0x5d, 0x9e, 0xc8, 0x2a, 0xd6, 0xa9, 0x57, 0x68, 0x6a, 0xa9, 0xd5, 0x7e, 0xa5, 0x83, 0x5c, 0x47, 0x82, 0x03, 0x18, 0xf2, 0x88, 0x01, 0x2b, 0xd2, 0x94, 0x81, 0x5a, 0xc5, 0x2a, 0x66, 0x5a, 0xc6, 0x5c, 0x70, 0xe6, 0x4a, 0x88, 0x9a, 0x50, 0xee, 0xbd, 0x80, 0xf1, 0x10, 0x2f, 0xbd, 0x50, 0x88, 0x88, 0xbb, 0xf7, 0x2c, 0x78, 0xf0, 0x13, 0xff, 0x3e, 0x0e, 0x3f, 0xc3, 0xc5, 0x7f, 0x77, 0x99, 0xf2, 0xfc, 0xd0, 0x3e, 0x5e, 0x19, 0x3a, 0x08, 0x8a, 0xe8, 0x0c, 0x0e, 0xf6, 0xd0, 0xe0, 0x0c, 0x78, 0x70, 0x97, 0x7e, 0xd8, 0x78, 0x22, 0x00, 0x85, 0xc8, 0xe2, 0x64, 0xa8, 0xe4, 0x30, 0xe0, 0xdb, 0xc3, 0x70, 0x13, 0x45, 0xa5, 0x21, 0x8c, 0x58, 0x41, 0x75, 0x95, 0x48, 0x4a, 0xec, 0x66, 0xa0, 0x11, 0xe0, 0xee, 0x5e, 0x26, 0xc3, 0xe0, 0xbb, 0x28, 0x7c, 0x1d, 0x5a, 0xc1, 0x3e, 0x48, 0x0e, 0x11, 0x7b, 0xcd, 0xfe, 0x2e, 0xbc, 0xbf, 0xf3, 0xa3, 0x38, 0x09, 0x93, 0x5b, 0x29, 0x61, 0x52, 0xf2, 0x03, 0xf3, 0x98, 0x2f, 0xad, 0xf8, 0x26, 0x3a, 0x1c, 0xee, 0x0f, 0x88, 0x00, 0x11, 0x8f, 0xd3, 0x5f, 0x63, 0xfe, 0xff, 0x7c, 0xd9, 0x8a, 0x24, 0xdb, 0x98, 0xc0, 0xe2, 0x63, 0x2e, 0x77, 0x9e, 0x8a, 0xac, 0x38, 0xe9, 0xb3, 0x13, 0x78, 0xfd, 0x4c, 0x03, 0x69, 0x36, 0xd5, 0x76, 0xfa, 0xfc, 0xbb, 0xbb, 0x22, 0x87, 0x40, 0xd6, 0x58, 0x91, 0x09, 0x70, 0x8c, 0x6c, 0x4b, 0x13, 0x40, 0xa3, 0xa2, 0xe5, 0x18, 0x33, 0x3c, 0x0b, 0xcd, 0xf0, 0xa0, 0x9a, 0x1f, 0x44, 0x9e, 0x7a, 0x71, 0x2c, 0x93, 0xbd, 0x97, 0xdc, 0xa5, 0xca, 0x97, 0x69, 0xa0, 0xf3, 0xb8, 0x80, 0xd4, 0xac, 0x55, 0xfe, 0xf0, 0x3a, 0x0c, 0x58, 0x02, 0xc9, 0xcd, 0xc0, 0xd6, 0x10, 0x07, 0x62, 0x20, 0x22, 0x60, 0x87, 0xa5, 0x6e, 0xc2, 0xa3, 0xcb, 0x4a, 0x87, 0x61, 0xd7, 0xc7, 0x2b, 0xb7, 0xa7, 0x0a, 0xf6, 0x5e, 0x0f, 0x54, 0x8d, 0x4f, 0x9e, 0xa1, 0x39, 0x0c, 0xdb, 0x33, 0x6b, 0xf3, 0x96, 0x6d, 0x3f, 0xb1, 0xff, 0xed, 0xbd, 0x1b, 0x2a, 0x89, 0x36, 0xa5, 0xc3, 0xd8, 0x4d, 0xe5, 0x53, 0xa3, 0x92, 0xa2, 0x13, 0x5b, 0xd3, 0x10, 0x82, 0x7d, 0x44, 0x55, 0x48, 0x5c, 0x01, 0x2b, 0xd2, 0xdc, 0x24, 0xf7, 0xdb, 0x18, 0x9b, 0xb3, 0xa0, 0x4a, 0x4d, 0x20, 0xa1, 0x4a, 0x5a, 0xa1, 0x8b, 0x2e, 0x85, 0x9c, 0xd6, 0x65, 0x92, 0x25, 0xba, 0x95, 0x32, 0x56, 0x52, 0xaa, 0x38, 0x22, 0xfe, 0xb5, 0x67, 0xfc, 0x6f, 0x91, 0x2d, 0x20, 0xdb, 0x56, 0x78, 0x66, 0x13, 0x5e, 0x5c, 0xaf, 0x7a, 0x24, 0x59, 0xed, 0x70, 0x68, 0x50, 0x0b, 0x40, 0x49, 0x52, 0x7a, 0x3e, 0x9f, 0x4d, 0x7f, 0x3a, 0xa5, 0x76, 0x89, 0x12, 0x53, 0xe6, 0xb1, 0x36, 0xdd, 0x4a, 0x86, 0x3b, 0x1e, 0xb7, 0xb3, 0x69, 0x95, 0x9b, 0x13, 0x8b, 0xb4, 0x36, 0x9d, 0x81, 0x8d, 0x68, 0x0b, 0x93, 0x2d, 0x01, 0x28, 0xd2, 0x5c, 0xa1, 0x5a, 0x67, 0xd4, 0x9c, 0xa0, 0x53, 0x83, 0x98, 0xc0, 0xf9, 0x9c, 0x92, 0x07, 0x49, 0xa6, 0x8b, 0x8c, 0xba, 0xcc, 0xd5, 0x1e, 0xa1, 0x40, 0xf0, 0x94, 0x33, 0x9e, 0x44, 0x17, 0xa2, 0xc8, 0xe3, 0xfb, 0x37, 0x8f, 0x57, 0x02, 0x52, 0xb3, 0x07, 0x34, 0x9e, 0x5c, 0xcb, 0x19, 0xf4, 0xe0, 0xc2, 0x84, 0xf1, 0x34, 0xc1, 0xac, 0x09, 0xda, 0x65, 0x1c, 0xb9, 0x33, 0x30, 0x93, 0x90, 0x3c, 0x31, 0x3d, 0x4c, 0xf8, 0x35, 0xe8, 0xf9, 0xfb, 0xdd, 0x8f, 0xc1, 0x4f, 0x2f, 0xbd, 0xd7, 0x2f, 0xf7, 0x37, 0xd6, 0xc3, 0x4f, 0x2f, 0x6f, 0x7f, 0xf8, 0xe1, 0xc6, 0xba, 0x7b, 0x19, 0x5d, 0x3f, 0x44, 0xf7, 0x37, 0xd7, 0x3f, 0xbe, 0x3e, 0x58, 0xbb, 0x17, 0xaf, 0xbe, 0xbf, 0xdb, 0x27, 0xd7, 0xd7, 0xf2, 0xda, 0x73, 0xdc, 0xc3, 0x7d, 0xe4, 0x3c, 0xfc, 0x60, 0x41, 0x56, 0x1f, 0x6c, 0x71, 0x9f, 0x59, 0xd9, 0xeb, 0xf0, 0xc7, 0x17, 0xdf, 0xb3, 0x78, 0xc7, 0xad, 0xd8, 0x0e, 0x02, 0xb1, 0xdb, 0xbd, 0xc0, 0x92, 0xbd, 0xbd, 0x7d, 0xf9, 0xb0, 0xf3, 0xa2, 0xbb, 0xbd, 0xef, 0x1f, 0xd8, 0x6f, 0x78, 0xed, 0xaf, 0xb1, 0xee, 0xf1, 0xcd, 0xd5, 0x20, 0x16, 0x87, 0x53, 0x2f, 0xa7, 0x38, 0xb1, 0x45, 0xaf, 0xb6, 0xbb, 0xae, 0x27, 0x6b, 0x74, 0x11, 0xa9, 0x81, 0xf9, 0xf6, 0x30, 0xfd, 0xba, 0x49, 0x70, 0x97, 0xa7, 0x49, 0x41, 0x87, 0xb8, 0xd4, 0x03, 0x2e, 0xcd, 0x74, 0x3f, 0x49, 0x7a, 0x0c, 0xda, 0xab, 0x43, 0x20, 0xdb, 0xd2, 0x8e, 0x6d, 0x47, 0x27, 0x1a, 0x55, 0xd5, 0xd5, 0x2d, 0x64, 0x41, 0x8b, 0xef, 0xe8, 0xb6, 0x89, 0xda, 0xb4, 0x04, 0xd6, 0xa7, 0x01, 0x68, 0x15, 0xef, 0x34, 0x09, 0x1c, 0xe5, 0x87, 0x3c, 0xd4, 0xb9, 0x1b, 0x32, 0xce, 0xbe, 0xc4, 0x91, 0x7f, 0x7d, 0xb9, 0x75, 0x6f, 0xaf, 0x96, 0x41, 0xf7, 0xf8, 0xa7, 0x5f, 0x4e, 0x8b, 0xb5, 0xf6, 0x3f, 0x73, 0x8e, 0x65, 0x70, 0x01, 0x89, 0x66, 0xea, 0xce, 0x30, 0x0a, 0x0e, 0xe4, 0x04, 0x69, 0x19, 0x19, 0xf4, 0xdb, 0xee, 0x2e, 0xb8, 0x3b, 0x78, 0xe1, 0x75, 0xe0, 0xf9, 0x0f, 0xae, 0x1d, 0x24, 0x2a, 0xfb, 0x21, 0xd5, 0x59, 0x90, 0xa9, 0xbc, 0x78, 0x15, 0x26, 0x37, 0x07, 0xd7, 0xf9, 0xd1, 0xdf, 0xef, 0xaf, 0xbd, 0x97, 0xae, 0x73, 0x67, 0x5b, 0x6e, 0xf2, 0xea, 0x90, 0x07, 0x77, 0x77, 0xfe, 0xe1, 0xa7, 0xf0, 0x1b, 0x5f, 0x78, 0xfb, 0x9b, 0xe0, 0xf5, 0xfe, 0xe6, 0xe1, 0x79, 0x66, 0xfc, 0x4f, 0x2e, 0x63, 0xc6, 0xb0, 0x0e, 0xf1, 0x8d, 0x36, 0x99, 0x29, 0x05, 0x01, 0xac, 0xac, 0x82, 0x9a, 0x29, 0x3e, 0x55, 0x81, 0x68, 0xe1, 0xcc, 0xfd, 0xca, 0xb1, 0xfb, 0xa6, 0xad, 0x5a, 0x44, 0x4c, 0xdb, 0x9e, 0x2b, 0x28, 0x29, 0x52, 0xa7, 0x55, 0x15, 0x15, 0x34, 0x79, 0x27, 0xad, 0x74, 0x47, 0x0d, 0x14, 0x5d, 0x9e, 0x1e, 0x9b, 0x82, 0x4a, 0x1b, 0xe1, 0xc9, 0x8e, 0x52, 0x23, 0x55, 0xd6, 0x41, 0xda, 0xe5, 0xad, 0xcf, 0x25, 0xb4, 0xc0, 0x9d, 0x28, 0x53, 0xc9, 0x23, 0xc8, 0xb6, 0x0c, 0x7f, 0x53, 0x15, 0x2a, 0x3d, 0x24, 0x65, 0x1a, 0xf2, 0x88, 0x87, 0x2c, 0x7f, 0x08, 0x32, 0x3f, 0x86, 0x23, 0x0f, 0xc1, 0xc3, 0x8d, 0x77, 0xd9, 0xc8, 0x02, 0x63, 0xd9, 0xbb, 0xab, 0x7e, 0xe8, 0xb1, 0xe7, 0xa6, 0x51, 0xbb, 0x0b, 0x77, 0x10, 0x0b, 0x74, 0x3f, 0x4e, 0x1c, 0x38, 0x0f, 0x77, 0x39, 0x74, 0x5c, 0x68, 0x31, 0xc7, 0x1d, 0x7a, 0xed, 0x08, 0xac, 0x57, 0x2c, 0x4b, 0xdb, 0xd2, 0x2f, 0x1d, 0x16, 0xba, 0xb1, 0x75, 0x78, 0xe9, 0xc8, 0x87, 0x7c, 0x7f, 0x17, 0x27, 0x37, 0x5e, 0x68, 0xd9, 0xd1, 0x8b, 0xbf, 0x65, 0x17, 0xfc, 0xc5, 0xa5, 0xfa, 0x6f, 0x3f, 0xc0, 0x6b, 0x96, 0xed, 0x4e, 0x33, 0xb8, 0x3e, 0x73, 0x2c, 0x6a, 0x6d, 0x1f, 0x27, 0xb0, 0x14, 0x3a, 0xa7, 0x81, 0x3a, 0x5b, 0x46, 0xd6, 0x53, 0x5d, 0x2a, 0x74, 0xc0, 0x30, 0x4d, 0x9f, 0x95, 0x7e, 0x17, 0x5b, 0xf2, 0x80, 0x44, 0x35, 0x08, 0xa1, 0xa0, 0x0a, 0xf5, 0xe6, 0x53, 0xed, 0x55, 0xbd, 0x1d, 0xb2, 0x9d, 0x2b, 0x70, 0x0d, 0xad, 0x34, 0x3d, 0x91, 0x80, 0xc7, 0x86, 0xca, 0x78, 0xc0, 0xa0, 0x33, 0x5d, 0x17, 0x4d, 0x71, 0xa8, 0x14, 0x36, 0x9d, 0xa4, 0x87, 0x52, 0xea, 0x20, 0x8a, 0x64, 0x4c, 0x67, 0x4f, 0xfb, 0x38, 0x0e, 0xf6, 0x17, 0x46, 0x00, 0xd8, 0x35, 0x4d, 0x1c, 0x54, 0x7f, 0x5a, 0x81, 0xf5, 0x8b, 0x7d, 0xb6, 0x87, 0x4c, 0x9b, 0x4c, 0x1f, 0xfc, 0xaa, 0xb1, 0xc5, 0x9c, 0x7e, 0x72, 0xc7, 0xcf, 0x4a, 0xbf, 0x11, 0x01, 0xca, 0xa3, 0xa9, 0x95, 0xab, 0xa5, 0xb1, 0x2f, 0xcf, 0xeb, 0xa7, 0xa2, 0x6f, 0xea, 0x40, 0x33, 0xf4, 0xb8, 0x3e, 0x4f, 0x3a, 0x84, 0x79, 0x12, 0xe6, 0xe7, 0x92, 0x38, 0x31, 0x85, 0x07, 0x33, 0x36, 0x8a, 0xea, 0xda, 0x2b, 0x51, 0xab, 0x8c, 0x08, 0xa5, 0xe6, 0x8d, 0x06, 0x2d, 0x76, 0xa8, 0xa1, 0x4e, 0x44, 0x07, 0xec, 0xc7, 0xcb, 0x1a, 0xfa, 0xdf, 0x7e, 0x6c, 0xdf, 0xb4, 0xdd, 0x95, 0x66, 0xb3, 0x18, 0xa0, 0x33, 0x97, 0x71, 0xd0, 0xf3, 0xec, 0x8e, 0xe3, 0xba, 0x70, 0xa6, 0x17, 0xb1, 0x7e, 0x56, 0xf6, 0x77, 0xce, 0x89, 0xf4, 0xdb, 0x20, 0xaf, 0x9d, 0x70, 0xb1, 0x5b, 0x32, 0x37, 0xd5, 0xee, 0xae, 0x54, 0xb7, 0x85, 0xe2, 0xaa, 0xcc, 0x44, 0xca, 0x7c, 0xff, 0x88, 0x8d, 0x02, 0xae, 0x92, 0xa8, 0x22, 0x23, 0xf2, 0x15, 0xf9, 0x22, 0xcb, 0xdc, 0x80, 0xab, 0x20, 0x2e, 0xa3, 0x8a, 0x3f, 0x38, 0x87, 0xfb, 0xc4, 0xf5, 0xbc, 0x3f, 0xb3, 0x6a, 0x7f, 0x35, 0x67, 0xf3, 0xab, 0x39, 0xc9, 0xc7, 0x77, 0x8f, 0x57, 0x94, 0x36, 0x9d, 0x6d, 0x04, 0xea, 0x4f, 0xf5, 0x63, 0xa7, 0xf3, 0x33, 0x0d, 0x5c, 0x39, 0xa7, 0xc5, 0x39, 0x3f, 0x67, 0xc4, 0x99, 0xb6, 0x6d, 0xf2, 0x9a, 0xa9, 0x8c, 0x26, 0x52, 0x52, 0xd5, 0x9f, 0xfa, 0x71, 0x3f, 0x2f, 0x2c, 0x53, 0x4f, 0xc5, 0x66, 0x58, 0x75, 0x15, 0xb8, 0xbe, 0x06, 0xbd, 0x2f, 0x42, 0x2a, 0x32, 0x28, 0x33, 0xa5, 0x9b, 0xc8, 0x45, 0xc8, 0x7e, 0x15, 0x88, 0x34, 0xbd, 0x0f, 0xd8, 0x8d, 0xef, 0x3c, 0xdc, 0x27, 0xf8, 0xb5, 0x30, 0x3f, 0xf6, 0xc2, 0xe0, 0xc9, 0xb6, 0x7f, 0xff, 0x8c, 0x6d, 0xcf, 0xac, 0x48, 0xb2, 0x6d, 0xe9, 0x47, 0x62, 0xc2, 0xd0, 0x63, 0xd3, 0xe7, 0x39, 0xd6, 0x05, 0xd0, 0x38, 0x12, 0x77, 0x86, 0xd3, 0x56, 0x3c, 0x7b, 0x4a, 0xb9, 0xe2, 0xd9, 0x2e, 0xc1, 0x17, 0x04, 0x40, 0xa8, 0x8f, 0x54, 0x99, 0x5e, 0xf3, 0x26, 0xdd, 0xea, 0xff, 0x88, 0x6f, 0x49, 0x08, 0xec, 0x96, 0x11, 0x68, 0x62, 0x4d, 0x16, 0x69, 0xda, 0x48, 0xe8, 0xd1, 0xb4, 0x61, 0x1c, 0xdf, 0xd1, 0x22, 0x8d, 0xa5, 0xf0, 0x44, 0x94, 0x44, 0x41, 0x22, 0x88, 0x82, 0x2a, 0x25, 0xa1, 0x17, 0x54, 0xc2, 0x3d, 0x2f, 0x61, 0x41, 0x14, 0xa7, 0x71, 0x10, 0xde, 0xf1, 0x6f, 0xfe, 0x54, 0x61, 0xea, 0x1f, 0xfb, 0xed, 0x11, 0x21, 0xf7, 0xca, 0x4c, 0xff, 0xd8, 0xa6, 0x32, 0x4e, 0x34, 0x56, 0x6e, 0x22, 0xea, 0x61, 0x2f, 0xdb, 0x74, 0x4a, 0x88, 0x39, 0xc4, 0x53, 0xea, 0x1f, 0xff, 0xec, 0xcd, 0xf3, 0x10, 0x51, 0x72, 0x1d, 0x22, 0xf3, 0x96, 0x82, 0xdc, 0x9a, 0x2b, 0xea, 0x2d, 0x7f, 0xb0, 0x7d, 0x65, 0x9f, 0x0a, 0xcf, 0xca, 0xad, 0xa8, 0xd3, 0x14, 0x3f, 0x12, 0xe2, 0xe4, 0x45, 0x6b, 0x1a, 0x09, 0x9f, 0xaa, 0x3e, 0xa9, 0x70, 0x41, 0x21, 0x8a, 0x54, 0xac, 0x96, 0x4a, 0xe4, 0x59, 0xaa, 0x9f, 0x1b, 0xde, 0xf8, 0xc7, 0x3e, 0x33, 0x76, 0x7d, 0x39, 0x6b, 0x93, 0x40, 0xd0, 0x05, 0xc4, 0x9f, 0x7a, 0xbe, 0x1a, 0x13, 0xb7, 0x37, 0x5d, 0xf3, 0x26, 0x35, 0xc2, 0xe3, 0x4d, 0x3a, 0xbe, 0x56, 0x25, 0xd1, 0x48, 0xea, 0x9b, 0xde, 0x9a, 0x73, 0x1b, 0xfa, 0x97, 0x3c, 0xa7, 0xeb, 0xa3, 0x21, 0x93, 0xf5, 0x31, 0xa3, 0xd3, 0x6b, 0x2a, 0x0a, 0xa9, 0x29, 0xc7, 0xa5, 0x9e, 0xba, 0x92, 0xb7, 0x89, 0xa9, 0x3a, 0xa5, 0x26, 0x28, 0xea, 0x53, 0x2b, 0x8c, 0x71, 0xa0, 0xa5, 0xaa, 0x54, 0x60, 0xd2, 0x00, 0x92, 0x4c, 0x6b, 0x76, 0x11, 0x8a, 0x3c, 0x36, 0x8f, 0x6f, 0xde, 0xbf, 0xbf, 0x72, 0xfa, 0xbe, 0x1f, 0xdc, 0x81, 0x86, 0x3f, 0x2d, 0x34, 0xf3, 0x64, 0x30, 0x0f, 0xe6, 0x09, 0x49, 0xed, 0xd5, 0xb6, 0x67, 0xae, 0x85, 0x05, 0x22, 0x36, 0xaf, 0x66, 0xda, 0x97, 0xb3, 0xe3, 0x32, 0x4b, 0xb3, 0xb4, 0xe0, 0x0f, 0x1c, 0xbf, 0xe0, 0xbb, 0x57, 0x96, 0xdc, 0xef, 0x84, 0xd8, 0x3f, 0xb8, 0x49, 0x72, 0x1d, 0xf9, 0xfe, 0x1f, 0xa2, 0xc3, 0x5f, 0x1d, 0xd3, 0xbe, 0x16, 0x45, 0x1e, 0x9b, 0xf7, 0xf0, 0x1a, 0xc8, 0xa2, 0x1e, 0x11, 0x94, 0xe7, 0x65, 0x3d, 0xe9, 0xde, 0xd2, 0x50, 0xd6, 0xe3, 0x32, 0xce, 0x78, 0xda, 0x9f, 0xf8, 0x6f, 0xe4, 0xc3, 0x27, 0x1a, 0x79, 0x22, 0xa9, 0xe6, 0x2a, 0xd3, 0x49, 0x5d, 0x65, 0xda, 0x2c, 0x44, 0x0f, 0x3e, 0x32, 0x2a, 0x86, 0x6a, 0x0c, 0x80, 0x1d, 0x31, 0x36, 0x58, 0x91, 0x2b, 0x29, 0xc8, 0x75, 0x25, 0xd4, 0x4c, 0x43, 0x85, 0xd0, 0x6d, 0xa6, 0x42, 0xa8, 0x97, 0x4c, 0x80, 0x93, 0xe8, 0x87, 0xbd, 0xe6, 0x2c, 0x56, 0x51, 0x7a, 0x80, 0x50, 0x63, 0xee, 0xc3, 0xad, 0x7f, 0x38, 0x44, 0x0f, 0x87, 0xdf, 0x46, 0x91, 0xaf, 0x5f, 0x91, 0xb0, 0x6d, 0x80, 0x3f, 0x66, 0xa7, 0xb7, 0x99, 0x3d, 0xc3, 0x31, 0x78, 0x7a, 0xb2, 0x58, 0xef, 0xea, 0xc5, 0x76, 0x58, 0xcf, 0xd8, 0x6f, 0x24, 0xc5, 0xa1, 0x46, 0xcb, 0xf2, 0xb8, 0xe9, 0x9a, 0x3a, 0xca, 0x4c, 0x0a, 0xfc, 0x68, 0xa2, 0x32, 0xf5, 0x43, 0x0a, 0xca, 0xd3, 0xe5, 0x5b, 0xc1, 0x08, 0x56, 0x5d, 0xd6, 0xd5, 0x79, 0x0a, 0x37, 0x17, 0xd8, 0x3e, 0x35, 0xbc, 0x2d, 0x94, 0x66, 0x69, 0xa8, 0xa9, 0x79, 0x3a, 0x4d, 0x83, 0x48, 0x50, 0x47, 0x24, 0xc3, 0xf3, 0xe0, 0x55, 0x18, 0xc5, 0xb1, 0x97, 0x9a, 0xb1, 0x9b, 0x0f, 0xc1, 0x65, 0x6a, 0xf4, 0xb1, 0xf9, 0xd0, 0x5e, 0xcd, 0xd6, 0x60, 0x33, 0x36, 0x8e, 0xd0, 0x99, 0xcc, 0x19, 0xd6, 0xa9, 0x5f, 0x47, 0xe7, 0xb7, 0x3c, 0x35, 0x8f, 0xee, 0x20, 0xa8, 0x2f, 0x48, 0xdf, 0x70, 0x57, 0xb0, 0xad, 0x7d, 0x3d, 0xd3, 0x3e, 0x4d, 0x5e, 0x8c, 0x22, 0x41, 0xed, 0x05, 0x32, 0x94, 0x91, 0x2f, 0xa5, 0x4c, 0x8d, 0xba, 0x8c, 0xd5, 0x3d, 0x3e, 0xb1, 0x07, 0x3f, 0x08, 0xce, 0xef, 0xdc, 0x34, 0xf1, 0x42, 0xa8, 0x42, 0xc1, 0x85, 0xe0, 0xaf, 0xc4, 0x73, 0x91, 0xed, 0xe2, 0x81, 0x27, 0xc6, 0x36, 0x6d, 0x5b, 0xf3, 0x64, 0x71, 0xbd, 0x70, 0x04, 0x37, 0x7b, 0x59, 0x46, 0xfe, 0x39, 0xfb, 0x77, 0x7e, 0x39, 0x73, 0x93, 0xad, 0xd6, 0x0e, 0x9f, 0x55, 0x42, 0x12, 0xa7, 0x34, 0x0d, 0x99, 0x86, 0x45, 0xc0, 0x9e, 0x34, 0x14, 0x42, 0x89, 0x58, 0x50, 0x4e, 0x4a, 0xa6, 0x08, 0xe6, 0x81, 0x2f, 0xe9, 0xa9, 0x40, 0xbc, 0xc6, 0x1b, 0x4c, 0xbd, 0x8e, 0x84, 0x9f, 0xc8, 0x44, 0xa5, 0x5a, 0xe3, 0x37, 0x91, 0x46, 0x0c, 0xbf, 0x0d, 0x10, 0xe2, 0x3b, 0xef, 0xf5, 0x6f, 0x6e, 0xce, 0x3f, 0x31, 0x52, 0xf4, 0x19, 0xbf, 0x81, 0x8e, 0x5c, 0xf5, 0xd6, 0xca, 0xf4, 0xbc, 0x5a, 0x2e, 0x64, 0x27, 0xe2, 0xf4, 0x44, 0x75, 0x4b, 0x5c, 0xf3, 0x69, 0xb0, 0x46, 0xea, 0x6c, 0x72, 0x61, 0xa9, 0x6d, 0xaf, 0x5f, 0xe4, 0x8d, 0xb7, 0x52, 0x70, 0x5a, 0x84, 0x35, 0x91, 0xa7, 0x6d, 0x6c, 0x34, 0xe5, 0x43, 0x04, 0x4d, 0x91, 0x20, 0x90, 0x81, 0xeb, 0xd2, 0x42, 0xaa, 0x5c, 0x53, 0xe5, 0x4e, 0xaa, 0x28, 0x13, 0x47, 0x67, 0x6f, 0x2a, 0x3d, 0x96, 0x34, 0x69, 0x2d, 0x8b, 0x75, 0x28, 0x99, 0x12, 0xd4, 0x67, 0x81, 0x6f, 0x6d, 0x8d, 0x6c, 0x52, 0x06, 0x74, 0x10, 0xca, 0x21, 0x02, 0xd8, 0x65, 0xe3, 0x88, 0x8d, 0x5d, 0x34, 0x2e, 0x6f, 0xa6, 0x6a, 0x09, 0x44, 0xb6, 0x15, 0xe6, 0x38, 0x83, 0xa3, 0x27, 0x9a, 0x5c, 0x03, 0x65, 0xbd, 0xd0, 0x44, 0x51, 0x67, 0xa1, 0x89, 0x65, 0xc6, 0xae, 0x65, 0xcb, 0x1b, 0x9b, 0x56, 0x4f, 0x6c, 0x34, 0xca, 0x41, 0x9e, 0x3b, 0x13, 0xe8, 0x49, 0xfb, 0x44, 0x84, 0xa9, 0xdc, 0xef, 0x3c, 0xec, 0xf6, 0xdc, 0x2b, 0xb9, 0x0d, 0xc7, 0x2e, 0x0c, 0xa3, 0xa4, 0x61, 0x81, 0x8d, 0x06, 0x23, 0xa1, 0xf4, 0x42, 0xa7, 0xca, 0xa2, 0x49, 0x5a, 0x4d, 0x23, 0x05, 0xc1, 0xd5, 0xd2, 0x88, 0xe6, 0x8a, 0xc2, 0xd9, 0x17, 0xfa, 0x0b, 0x1a, 0x54, 0xd0, 0x80, 0x46, 0xaa, 0x02, 0x5f, 0x2c, 0x66, 0x2d, 0xd6, 0xe2, 0x02, 0x39, 0x1c, 0xeb, 0xb4, 0x92, 0x67, 0x00, 0x20, 0x8b, 0x65, 0x3b, 0x94, 0x2d, 0xfe, 0xbc, 0x46, 0xe4, 0x3e, 0x2e, 0x29, 0xa5, 0x2a, 0x98, 0x6e, 0x8f, 0x9e, 0x69, 0x76, 0xcc, 0x24, 0xb1, 0x7e, 0xc2, 0x8c, 0xc0, 0x50, 0xff, 0xbc, 0xd9, 0x60, 0x84, 0x32, 0xe4, 0x4d, 0x11, 0xb5, 0x5e, 0xd9, 0xa6, 0x1d, 0x13, 0xa0, 0x5c, 0x15, 0xe2, 0x76, 0x06, 0xa4, 0x81, 0x59, 0x79, 0x24, 0xc9, 0x4f, 0x29, 0xdc, 0x85, 0x6d, 0x99, 0xca, 0x20, 0xdd, 0xb3, 0x58, 0x32, 0x3f, 0x79, 0x7e, 0x70, 0xc1, 0x73, 0xfe, 0x82, 0x5d, 0xb3, 0x03, 0xb0, 0x27, 0x36, 0xcc, 0x35, 0xd4, 0xb5, 0x03, 0x66, 0xbc, 0x80, 0xfa, 0xbb, 0xb3, 0xbb, 0x8e, 0x33, 0x4d, 0x32, 0x38, 0xad, 0x0b, 0x21, 0xc8, 0x67, 0xe9, 0x03, 0xaa, 0x7d, 0x29, 0xa9, 0xc8, 0x6c, 0x6b, 0xf1, 0x4f, 0xb7, 0x56, 0xf8, 0x88, 0x4c, 0xc8, 0x4d, 0x67, 0x2e, 0x45, 0x62, 0x28, 0x00, 0x41, 0xed, 0x74, 0x32, 0x6f, 0x18, 0x55, 0xa2, 0xd1, 0xf8, 0x0c, 0x68, 0x98, 0xd2, 0x34, 0xd7, 0x75, 0x74, 0x52, 0x5f, 0x96, 0x6d, 0x92, 0x9a, 0xfa, 0x90, 0x2c, 0xa2, 0xa1, 0xa9, 0x59, 0xa8, 0xc5, 0x81, 0xca, 0xe7, 0xe2, 0xe8, 0x17, 0x59, 0xba, 0xaf, 0xd5, 0xd5, 0x8f, 0xdd, 0xdb, 0x77, 0x1f, 0x3e, 0x12, 0x27, 0xa6, 0x59, 0x05, 0x8b, 0x35, 0x2d, 0xee, 0xb8, 0x68, 0x9b, 0x46, 0x66, 0xf0, 0xd5, 0x71, 0x6c, 0x53, 0xe6, 0xbe, 0x9e, 0x98, 0xbb, 0xfc, 0x02, 0x4c, 0xcc, 0x60, 0x6c, 0x98, 0x53, 0x1d, 0x2b, 0xd0, 0xc3, 0x63, 0x93, 0x94, 0x34, 0xfc, 0x2f, 0x30, 0xa5, 0x58, 0x4d, 0xc7, 0xbb, 0xed, 0x60, 0x8d, 0xd7, 0x8d, 0xee, 0xba, 0xaa, 0x93, 0x75, 0xae, 0xca, 0x14, 0x4f, 0x20, 0xba, 0xf3, 0x2e, 0xd7, 0x95, 0xd6, 0x55, 0xa8, 0x14, 0x0d, 0x96, 0x50, 0xd2, 0xcf, 0x39, 0xe5, 0x9c, 0x95, 0x9f, 0xa7, 0x51, 0x52, 0xc4, 0x01, 0x8f, 0x12, 0x2f, 0xf0, 0x1f, 0xf6, 0x77, 0x97, 0x21, 0x7e, 0x07, 0x55, 0x6d, 0xd9, 0xab, 0x75, 0x72, 0x4f, 0xce, 0x34, 0x83, 0xf7, 0xda, 0xa3, 0x86, 0x8e, 0xb6, 0x10, 0x01, 0x18, 0x22, 0x36, 0x87, 0xeb, 0xa8, 0x1d, 0x72, 0x9d, 0xa8, 0x9c, 0xc2, 0xd1, 0xd6, 0x60, 0x0d, 0x23, 0xb3, 0x7e, 0xb2, 0x0f, 0xf7, 0xf1, 0xc1, 0x3b, 0xdc, 0xdc, 0x87, 0xbb, 0xe0, 0xbb, 0x60, 0x17, 0x05, 0x81, 0x73, 0xeb, 0x46, 0x37, 0x81, 0xe7, 0xfd, 0xe5, 0x95, 0x77, 0x73, 0xed, 0xbb, 0x2f, 0xae, 0xa3, 0xe0, 0x2e, 0x7c, 0xe5, 0x7e, 0xc7, 0x5e, 0xde, 0xed, 0x5e, 0xbd, 0xfc, 0xee, 0xdb, 0x30, 0x7a, 0x79, 0xfd, 0x63, 0xe8, 0x79, 0xe1, 0xf5, 0x75, 0xe8, 0x5c, 0x5f, 0xef, 0x39, 0x63, 0xe9, 0x0b, 0xee, 0x04, 0xf2, 0x3b, 0x8b, 0xdf, 0xee, 0xc3, 0x7b, 0x91, 0x44, 0x37, 0xf1, 0x1f, 0xe6, 0x7a, 0xbe, 0x1a, 0xf1, 0xc9, 0x36, 0x1b, 0x1b, 0x87, 0xcd, 0x34, 0xba, 0x51, 0xf7, 0x0b, 0x56, 0xe5, 0x3a, 0xd9, 0xd4, 0x2a, 0xbe, 0x4c, 0xce, 0x8c, 0xe0, 0x33, 0x2d, 0xeb, 0x4a, 0x6a, 0x14, 0xca, 0xdb, 0x5e, 0x27, 0xcb, 0xb5, 0x61, 0xe0, 0xf5, 0xc1, 0xf6, 0xdc, 0x57, 0x77, 0x2f, 0xfe, 0x72, 0xfd, 0xe2, 0x3b, 0xe7, 0xc7, 0x57, 0x41, 0xe0, 0xc5, 0x2f, 0xbe, 0x8f, 0xaf, 0xc3, 0x17, 0xd6, 0xeb, 0x6f, 0xaf, 0xc3, 0xdb, 0xf8, 0xf0, 0xed, 0xb7, 0x2f, 0xae, 0xff, 0x72, 0x1d, 0x1e, 0xf8, 0xed, 0xeb, 0x17, 0x8c, 0x5d, 0xdf, 0xc7, 0xf6, 0x4b, 0x1e, 0x7d, 0xc3, 0x6e, 0xbe, 0x62, 0x00, 0x00, 0x6c, 0xfb, 0xef, 0x2e, 0xe3, 0x8e, 0xb0, 0xed, 0xfd, 0x87, 0xab, 0xa1, 0x07, 0x86, 0x50, 0xa2, 0xc3, 0x1c, 0x52, 0x9f, 0xcf, 0xad, 0x5d, 0xcb, 0x3e, 0xa7, 0xf6, 0xf1, 0x25, 0x4e, 0x03, 0x3f, 0x9d, 0x10, 0x65, 0x4f, 0x83, 0xa0, 0xd7, 0xd6, 0xf7, 0xd6, 0xfd, 0xcb, 0x6b, 0xfb, 0xe5, 0x8f, 0xd6, 0x0f, 0xf1, 0x0f, 0xd6, 0xab, 0xdb, 0x97, 0x2f, 0xf7, 0xdf, 0xbe, 0x70, 0x5e, 0x5b, 0x7f, 0xf7, 0xcd, 0x8f, 0x7f, 0xb9, 0xf6, 0x85, 0x62, 0x87, 0x07, 0xf7, 0x10, 0x5d, 0x96, 0x1d, 0x81, 0x75, 0xfa, 0x32, 0x7c, 0x24, 0x75, 0x3d, 0x52, 0xdd, 0x5f, 0xdf, 0x2f, 0xf0, 0x8f, 0x3d, 0xe3, 0x1f, 0xee, 0xf4, 0x0e, 0x22, 0x00, 0xe5, 0x7c, 0x4e, 0xae, 0x65, 0x0a, 0x57, 0xed, 0x89, 0xea, 0xc3, 0x3f, 0x41, 0xe4, 0x4d, 0x1c, 0x5b, 0xa2, 0x3e, 0xb7, 0x1f, 0x97, 0xa6, 0x72, 0x22, 0x6b, 0xb8, 0x4f, 0x59, 0x8f, 0x2c, 0xa1, 0x47, 0x1a, 0xa2, 0x01, 0xea, 0x58, 0xcb, 0x20, 0x6b, 0x8b, 0x48, 0xe7, 0x25, 0x94, 0x27, 0x2f, 0xe9, 0x51, 0xb4, 0x09, 0xfe, 0x48, 0xb4, 0xce, 0x11, 0xc2, 0xf2, 0x5a, 0x53, 0x37, 0x21, 0x00, 0xc4, 0xcf, 0x12, 0x1d, 0x7b, 0x3a, 0x26, 0xc6, 0xe2, 0x02, 0x21, 0x2f, 0xbc, 0x0e, 0xc1, 0xd8, 0x05, 0x04, 0x01, 0x5d, 0xa4, 0x0a, 0x63, 0x40, 0x09, 0xa3, 0x43, 0x6a, 0x67, 0x42, 0x60, 0xa3, 0x66, 0xcf, 0x05, 0x5b, 0xd0, 0xe5, 0x54, 0x47, 0x07, 0x49, 0xcd, 0x3e, 0x6f, 0x4c, 0xa8, 0xcc, 0xbc, 0x1a, 0x92, 0x31, 0x59, 0x2d, 0x4d, 0x2d, 0x6e, 0x9b, 0x6d, 0x83, 0x43, 0x8c, 0x58, 0x4b, 0xcd, 0x08, 0xac, 0x66, 0xbb, 0x36, 0x60, 0x1b, 0xc7, 0x93, 0xd2, 0xe8, 0x1a, 0x7d, 0x8e, 0x78, 0x26, 0xac, 0x57, 0x45, 0x5b, 0x35, 0x8d, 0xc4, 0x6f, 0x81, 0xce, 0x03, 0x9a, 0xa8, 0xad, 0x69, 0x84, 0xb6, 0x0e, 0x85, 0xf4, 0xa3, 0x0b, 0x95, 0xcc, 0x9b, 0xb7, 0xef, 0xdf, 0xbd, 0xbf, 0xb2, 0x1c, 0x20, 0xbc, 0xd6, 0x23, 0x9c, 0x06, 0x16, 0xc2, 0xac, 0x19, 0x8b, 0xd3, 0x1a, 0x27, 0xfd, 0xfb, 0x0c, 0x6b, 0x97, 0x0a, 0x90, 0x46, 0x9d, 0x81, 0xe5, 0x82, 0x64, 0x94, 0x3a, 0xcf, 0x8b, 0x07, 0x4d, 0x6d, 0xff, 0x45, 0x5e, 0x64, 0x15, 0x62, 0xd5, 0x5d, 0x75, 0xcc, 0xdb, 0x82, 0x17, 0x4a, 0x55, 0x59, 0x56, 0x30, 0x68, 0x6f, 0x9e, 0x26, 0x78, 0x95, 0x09, 0x1d, 0xfb, 0x61, 0xbc, 0x67, 0x05, 0xb0, 0x5d, 0x26, 0xd7, 0x2c, 0xf6, 0xfd, 0xc3, 0x6b, 0x7e, 0x97, 0x04, 0xfe, 0xde, 0xe7, 0xfe, 0x43, 0x74, 0x48, 0x7e, 0xb7, 0xfd, 0xf8, 0x6b, 0xcb, 0x55, 0x1f, 0xdf, 0x7e, 0x00, 0x75, 0xa4, 0xaa, 0x25, 0x10, 0x7c, 0xb0, 0xc6, 0x7e, 0xd0, 0x27, 0xa1, 0x29, 0x57, 0x7c, 0x02, 0xe0, 0x0f, 0xfd, 0x40, 0x07, 0xbf, 0x5f, 0xa6, 0xc3, 0xb1, 0xfd, 0x5c, 0xfd, 0x5a, 0x26, 0xf8, 0xd0, 0x2e, 0x0c, 0x49, 0xcb, 0x14, 0x28, 0x9e, 0xc9, 0xb6, 0x80, 0x6e, 0xa9, 0xd2, 0xba, 0x2a, 0x8a, 0xe4, 0xce, 0xd7, 0x89, 0xe8, 0xea, 0x26, 0x16, 0x47, 0x5f, 0xc7, 0xc1, 0x81, 0xc7, 0x60, 0x8c, 0x5c, 0x49, 0x76, 0xeb, 0x5e, 0x47, 0x2c, 0xce, 0x03, 0x3f, 0x0a, 0x5c, 0xb1, 0xf3, 0xc3, 0x7d, 0x18, 0xb9, 0x7f, 0xb4, 0xd5, 0xfe, 0xf9, 0x65, 0xa1, 0x0d, 0xd6, 0x75, 0x8f, 0x57, 0x9a, 0x0a, 0xa3, 0xfb, 0x01, 0x9b, 0xad, 0x07, 0x12, 0xf6, 0x03, 0x84, 0x0d, 0x45, 0x6b, 0x6a, 0x65, 0x1d, 0xb1, 0x44, 0x4f, 0x2b, 0x1b, 0x57, 0x3e, 0xdb, 0xd3, 0xc9, 0x72, 0x07, 0x04, 0x75, 0xd7, 0xa2, 0xc3, 0x5e, 0xaf, 0x8a, 0x88, 0x5d, 0x45, 0x41, 0xaa, 0x41, 0x0d, 0xc3, 0x24, 0x07, 0xd3, 0xa0, 0xee, 0x83, 0xa6, 0x29, 0x93, 0xdc, 0x4e, 0x20, 0x05, 0x7c, 0x96, 0x94, 0x32, 0x3f, 0x6a, 0xa1, 0xda, 0x28, 0x83, 0x73, 0xbb, 0x18, 0x4a, 0x40, 0xf3, 0x28, 0xe2, 0x7e, 0x2a, 0x93, 0x38, 0x51, 0xd8, 0x60, 0xb9, 0x64, 0x9a, 0xcb, 0x20, 0xd0, 0x71, 0xca, 0x24, 0x0b, 0x83, 0x2c, 0x88, 0xe2, 0xd0, 0x87, 0x4c, 0xd8, 0xef, 0x2f, 0x73, 0xdb, 0xe3, 0x3b, 0xb0, 0x11, 0x73, 0x4e, 0x8d, 0xbd, 0x34, 0xcc, 0xb3, 0x58, 0xf5, 0xec, 0xf0, 0x69, 0x62, 0x2b, 0x9d, 0x62, 0x70, 0x48, 0x34, 0x7b, 0x9d, 0x19, 0x37, 0xb5, 0x16, 0xbd, 0x3b, 0x98, 0x62, 0x5d, 0xa0, 0xcb, 0xce, 0xe3, 0x71, 0xc8, 0xff, 0xee, 0xd6, 0xb7, 0x5e, 0xdf, 0x05, 0xd1, 0xde, 0xd9, 0xff, 0x25, 0x7e, 0x91, 0xec, 0x5e, 0xdb, 0x22, 0x7a, 0xb5, 0x8b, 0x00, 0x97, 0x0f, 0xdf, 0x3c, 0xdc, 0xba, 0x3f, 0x5d, 0xbf, 0xbe, 0x8f, 0x5f, 0xd8, 0xd7, 0x89, 0x0c, 0x63, 0x27, 0x71, 0x6e, 0xbd, 0xe8, 0x10, 0x3a, 0xb7, 0xd6, 0x8e, 0xff, 0xf8, 0x3d, 0xb5, 0x6c, 0xdd, 0x47, 0x9e, 0x7f, 0xb7, 0x13, 0xbf, 0x3b, 0xc5, 0x11, 0x6e, 0xfb, 0x17, 0x97, 0xc5, 0xed, 0xc7, 0x8f, 0xcd, 0x95, 0x33, 0x2c, 0x0b, 0xcd, 0xc7, 0xb6, 0x4f, 0x80, 0x8c, 0xd3, 0xc9, 0x76, 0xfb, 0xc1, 0xb2, 0x86, 0xe1, 0xd3, 0x75, 0x4c, 0x4f, 0x4d, 0x0a, 0xf6, 0xa7, 0xa9, 0x43, 0x37, 0x50, 0x31, 0xf2, 0xdc, 0xb8, 0x4a, 0x43, 0x31, 0x1a, 0xba, 0x99, 0x62, 0xe3, 0xbf, 0x54, 0xb7, 0x5f, 0x9b, 0xf9, 0xfb, 0x6d, 0x6a, 0x32, 0xfe, 0xa0, 0x28, 0xda, 0x33, 0xc3, 0xae, 0x52, 0xe1, 0x02, 0x1c, 0x5b, 0xc5, 0x53, 0x45, 0xa7, 0x33, 0xd8, 0x96, 0x79, 0xa3, 0x13, 0x3f, 0xe2, 0xf2, 0x77, 0x6c, 0xfb, 0x97, 0x97, 0xc5, 0x6d, 0xb2, 0x6d, 0x99, 0x38, 0xa7, 0xea, 0x09, 0xb6, 0x2c, 0x82, 0x01, 0x50, 0x84, 0x19, 0x8f, 0x6d, 0xdb, 0x5f, 0x54, 0x16, 0x7f, 0x31, 0x75, 0x68, 0x57, 0x88, 0xc2, 0xcc, 0x97, 0xab, 0xcd, 0x95, 0x38, 0x5b, 0x92, 0x38, 0x7b, 0x1a, 0x90, 0x2d, 0x1b, 0xa9, 0x14, 0x59, 0x27, 0x69, 0xa2, 0xa1, 0xca, 0x12, 0x7c, 0x27, 0x01, 0x72, 0x88, 0x94, 0x51, 0x10, 0x60, 0x10, 0xd5, 0x49, 0xea, 0x26, 0xec, 0xce, 0x05, 0xa0, 0xec, 0xe3, 0x03, 0x54, 0xb5, 0x8b, 0xc7, 0xd8, 0x8b, 0x42, 0xba, 0x13, 0xe8, 0x7c, 0xc3, 0xd1, 0xc5, 0x23, 0x87, 0x60, 0x5b, 0xfb, 0xe6, 0xe3, 0x55, 0x3f, 0xb1, 0xde, 0xd1, 0xc3, 0x32, 0xf4, 0x0b, 0x08, 0x55, 0xcf, 0xa6, 0x11, 0x41, 0x0d, 0x9b, 0x6f, 0xb6, 0x9d, 0xfe, 0xe4, 0x80, 0x7f, 0xb9, 0x90, 0xdf, 0x08, 0x78, 0xd6, 0xc0, 0x57, 0x30, 0xcd, 0xbe, 0xb7, 0x77, 0x80, 0xbf, 0xa2, 0x3e, 0x16, 0xe0, 0xf1, 0x4d, 0x07, 0xa3, 0xba, 0xa6, 0xf5, 0xda, 0xed, 0x88, 0xad, 0xd5, 0xbc, 0x2d, 0xa5, 0x68, 0xe3, 0x26, 0x11, 0x71, 0xce, 0x78, 0xa9, 0x23, 0x59, 0xb0, 0x08, 0xbc, 0xf7, 0x10, 0x7a, 0xbe, 0x1f, 0x78, 0xe0, 0x2c, 0x9e, 0xa9, 0x93, 0x66, 0x69, 0xf8, 0x8a, 0x85, 0x42, 0xe9, 0xe4, 0x26, 0x8a, 0x7c, 0x6f, 0x7f, 0xc7, 0xb8, 0x8a, 0xf7, 0xe2, 0x33, 0xcf, 0xfd, 0xbb, 0xcb, 0xac, 0x7b, 0x47, 0x21, 0xee, 0x4a, 0xf3, 0xf1, 0x69, 0x9e, 0x12, 0xf0, 0x1e, 0xc0, 0x01, 0xe8, 0x9c, 0x39, 0x1f, 0x18, 0x95, 0x21, 0x50, 0x76, 0x61, 0x5e, 0x97, 0x81, 0x6f, 0x53, 0x95, 0xe8, 0x4b, 0xac, 0x37, 0xf7, 0x2f, 0x7f, 0xf8, 0x8b, 0xf5, 0xfd, 0xb7, 0xdf, 0xde, 0x84, 0x87, 0xeb, 0xef, 0xbe, 0xcf, 0x54, 0xa1, 0xb3, 0xbf, 0x8a, 0x7a, 0xfc, 0xc1, 0xd7, 0xc5, 0xa7, 0x34, 0x8f, 0xef, 0xba, 0xe6, 0x8a, 0x53, 0xc2, 0xdb, 0x82, 0x3d, 0x8c, 0x71, 0x0e, 0x26, 0x49, 0xc9, 0x6f, 0x97, 0x8a, 0x8c, 0x17, 0xae, 0x67, 0x7a, 0x38, 0x59, 0xe7, 0x8a, 0x71, 0x3a, 0x9e, 0xc2, 0x33, 0xeb, 0xe6, 0xe1, 0x70, 0xef, 0xc9, 0x24, 0x4d, 0xa4, 0xa2, 0x3a, 0x31, 0x1a, 0x03, 0xaa, 0x44, 0x2a, 0x20, 0xac, 0xb1, 0x26, 0xdb, 0x18, 0xb2, 0x4b, 0xb9, 0x7b, 0xe7, 0xb5, 0xb3, 0xf7, 0xef, 0x9c, 0x30, 0x4d, 0xa1, 0x11, 0xd2, 0xb2, 0x8c, 0x0b, 0x9a, 0x78, 0x92, 0x45, 0xd4, 0xcf, 0x1a, 0x05, 0x51, 0x22, 0x00, 0xa1, 0xe0, 0x25, 0x54, 0xf5, 0x54, 0xd3, 0xe4, 0xce, 0xd7, 0x11, 0xa0, 0x35, 0xe7, 0x74, 0xa2, 0x9d, 0xf0, 0xc3, 0x65, 0xf5, 0xc6, 0xc6, 0x2e, 0x93, 0x13, 0x5f, 0xb7, 0xfc, 0x77, 0xbf, 0x38, 0xcb, 0x80, 0x7d, 0x65, 0x52, 0xdf, 0xdb, 0x7b, 0x93, 0x29, 0x2a, 0xa1, 0x97, 0x27, 0x3a, 0xd7, 0xee, 0xf1, 0x60, 0x72, 0xe2, 0x11, 0xe5, 0xb4, 0xa9, 0x35, 0x3a, 0x89, 0x24, 0x55, 0x8e, 0xd0, 0x03, 0x17, 0x94, 0xef, 0x81, 0x46, 0x16, 0x41, 0x28, 0x10, 0xd5, 0xa8, 0x44, 0x2b, 0xc5, 0x43, 0x94, 0x72, 0x95, 0x78, 0x51, 0x2a, 0x22, 0x7c, 0x97, 0xa2, 0x77, 0x2a, 0x29, 0x79, 0xc0, 0x11, 0x13, 0x32, 0x21, 0x42, 0x16, 0xc4, 0x07, 0x1a, 0x9b, 0xeb, 0x05, 0xf7, 0x49, 0x14, 0xf8, 0x0c, 0x41, 0xe0, 0x9b, 0x4b, 0xfd, 0x45, 0x9c, 0x84, 0xb9, 0xd4, 0xd8, 0x4f, 0xd4, 0xdf, 0xd2, 0xb3, 0xeb, 0x4c, 0xa7, 0xd9, 0x5a, 0x68, 0x5a, 0x2a, 0x5d, 0xf3, 0x03, 0x36, 0x32, 0x60, 0x31, 0xf6, 0x08, 0x04, 0x2e, 0x16, 0xa9, 0xc1, 0x16, 0x6a, 0x97, 0xac, 0x4d, 0xa2, 0xf8, 0xd8, 0x1e, 0x8b, 0xf3, 0xe1, 0xd9, 0x96, 0xdc, 0xde, 0xaa, 0x72, 0xb7, 0x71, 0x58, 0xb5, 0x6e, 0xeb, 0xf3, 0x55, 0x46, 0x6d, 0x9b, 0x50, 0x61, 0x64, 0x4b, 0xb3, 0xb1, 0x74, 0xa3, 0xda, 0xaa, 0x12, 0x05, 0x35, 0xa9, 0x39, 0x30, 0x35, 0x55, 0x35, 0x9e, 0xa7, 0x1d, 0xfd, 0x07, 0x0b, 0xfc, 0x5e, 0x12, 0xdf, 0xb9, 0xf4, 0x42, 0x92, 0xcd, 0x2e, 0xcb, 0xea, 0xa9, 0x7e, 0x8e, 0x5b, 0x8e, 0xcd, 0xe7, 0x15, 0xa1, 0x8d, 0xaf, 0x90, 0xef, 0x36, 0x18, 0x89, 0xb6, 0x21, 0x51, 0xc7, 0xc9, 0x62, 0x10, 0xaa, 0xd3, 0x38, 0xad, 0xa7, 0xb3, 0x5d, 0x5b, 0x75, 0xd6, 0xd1, 0x5c, 0x93, 0x50, 0x6f, 0x63, 0xe7, 0xa4, 0xe9, 0x93, 0x6f, 0xeb, 0xa7, 0x54, 0x88, 0x29, 0x3c, 0xa6, 0x81, 0x8d, 0x34, 0x88, 0x07, 0x56, 0x32, 0x9a, 0xe5, 0x55, 0x77, 0xa2, 0x06, 0xfe, 0x37, 0x99, 0x69, 0x9d, 0xef, 0xa8, 0x1a, 0x19, 0xbf, 0x02, 0xae, 0xb3, 0x92, 0x5a, 0xf1, 0x5a, 0xe8, 0xda, 0x54, 0x27, 0x4c, 0x1e, 0x54, 0xca, 0x2f, 0x0b, 0xd8, 0xef, 0xdb, 0x77, 0x8f, 0x57, 0x9c, 0xd2, 0x8d, 0x20, 0x91, 0xc3, 0x72, 0x72, 0x11, 0xa8, 0x47, 0x67, 0x64, 0xbd, 0xe5, 0xae, 0xee, 0x32, 0x0e, 0x3d, 0x0d, 0x7d, 0x19, 0xa8, 0x2b, 0x0f, 0x78, 0x09, 0xfd, 0xc8, 0xed, 0x93, 0xb3, 0x4e, 0xd3, 0xee, 0x6f, 0x8d, 0x14, 0x7f, 0x06, 0x3c, 0xbe, 0x9a, 0x67, 0xbd, 0xef, 0x1e, 0x3f, 0x74, 0x57, 0x16, 0x17, 0xdb, 0xb1, 0x12, 0x15, 0x62, 0xb9, 0x13, 0x5e, 0x9a, 0x72, 0x7e, 0xb6, 0x6c, 0x3b, 0xef, 0xa9, 0xce, 0xdf, 0x9c, 0x4b, 0x81, 0x9b, 0xe0, 0xbb, 0x34, 0x6b, 0xae, 0x12, 0x54, 0x93, 0x2b, 0x69, 0xfa, 0x84, 0x7f, 0x28, 0x6b, 0xdd, 0xc1, 0x63, 0x6d, 0xa7, 0xb2, 0x62, 0x2b, 0xa9, 0xf0, 0x42, 0x1e, 0x17, 0x0a, 0x00, 0x51, 0x15, 0xc7, 0x5c, 0x56, 0xca, 0x57, 0x76, 0x21, 0xb1, 0xf5, 0x64, 0xc6, 0x54, 0x98, 0x31, 0x91, 0xc7, 0x5d, 0xe1, 0x47, 0xf7, 0x79, 0x20, 0x05, 0xcb, 0xa2, 0x30, 0xc1, 0xb7, 0x42, 0x50, 0x9c, 0x8c, 0x0a, 0xd7, 0xee, 0xbc, 0x07, 0xef, 0xb2, 0x2e, 0xd7, 0xc7, 0xf7, 0xd4, 0xe5, 0xea, 0xcc, 0xf8, 0xe0, 0xf0, 0x97, 0x5e, 0x07, 0x02, 0x42, 0xb7, 0x5f, 0x35, 0x65, 0x80, 0x56, 0x8b, 0x66, 0x0f, 0xad, 0x7c, 0xfa, 0x55, 0xdb, 0xe4, 0x8d, 0xc7, 0x92, 0xea, 0x78, 0x9e, 0x33, 0x47, 0x93, 0xa2, 0xa8, 0x11, 0x34, 0xda, 0x52, 0x71, 0x66, 0x12, 0x5b, 0x66, 0x26, 0x3b, 0xb6, 0x4a, 0x99, 0x76, 0xd7, 0x6e, 0x3b, 0x50, 0xa4, 0xef, 0x31, 0x4d, 0x25, 0x09, 0x2d, 0xa0, 0x31, 0x4c, 0xbd, 0x2c, 0xcb, 0x9a, 0x0c, 0xf2, 0xae, 0x62, 0x61, 0x24, 0x79, 0x4e, 0xad, 0xe5, 0x69, 0x42, 0x57, 0x5b, 0x88, 0x24, 0xbe, 0x30, 0x99, 0x45, 0x76, 0x41, 0x73, 0x0e, 0x2e, 0x0d, 0x18, 0xa5, 0x94, 0x5c, 0xef, 0x52, 0xbf, 0xc5, 0x70, 0xa2, 0x81, 0x9c, 0x3d, 0x60, 0xfe, 0xe7, 0xfc, 0xdc, 0x17, 0x65, 0x30, 0x24, 0xd5, 0x8e, 0x9a, 0x86, 0x0e, 0x25, 0xe7, 0xe9, 0x8e, 0xad, 0x29, 0x84, 0x3c, 0x5f, 0xcf, 0x64, 0xfa, 0x31, 0x8c, 0x46, 0xa3, 0xb9, 0xd2, 0xca, 0xdc, 0xcf, 0xb4, 0xcd, 0xd5, 0xa3, 0xa1, 0xcb, 0x4d, 0x51, 0xd1, 0x98, 0x1b, 0x4d, 0xa3, 0x7c, 0x75, 0x9b, 0x28, 0x88, 0xd2, 0xb4, 0x54, 0x52, 0x47, 0x3a, 0x8e, 0x63, 0xce, 0x44, 0x4c, 0x67, 0x86, 0x97, 0x05, 0xe9, 0x0f, 0x74, 0xb7, 0xe7, 0x15, 0x9b, 0xf5, 0x70, 0xb2, 0x48, 0x8e, 0x59, 0x34, 0xa5, 0x6c, 0xa6, 0x26, 0x3c, 0x1b, 0xa8, 0x42, 0x0b, 0x73, 0xb2, 0xf1, 0x6c, 0x42, 0xac, 0x1e, 0x17, 0x4a, 0x19, 0x4f, 0x33, 0xa9, 0xb8, 0xd3, 0x2e, 0x16, 0xb1, 0x12, 0x05, 0x0b, 0xa1, 0xbe, 0x0a, 0xa9, 0x82, 0x43, 0x18, 0xe6, 0x32, 0x8a, 0x15, 0x87, 0x70, 0xd9, 0x73, 0x84, 0x43, 0xf0, 0x7a, 0x9f, 0x41, 0xb7, 0x78, 0x3c, 0x08, 0xe2, 0x20, 0x0c, 0xfc, 0x84, 0x73, 0x16, 0xa7, 0xa1, 0x00, 0xc4, 0xc7, 0x21, 0xc4, 0x8d, 0x90, 0x91, 0x47, 0x81, 0x30, 0xbe, 0x53, 0x34, 0x14, 0x9d, 0xf1, 0x18, 0x40, 0x1f, 0xee, 0x13, 0xf5, 0xf9, 0x3e, 0xfb, 0xb7, 0x97, 0xed, 0xb3, 0x0f, 0xef, 0xdf, 0x34, 0xd8, 0x67, 0xfd, 0x89, 0x46, 0x93, 0x2d, 0x74, 0x77, 0x80, 0xe6, 0x6c, 0x5a, 0x35, 0x40, 0x1f, 0x60, 0x09, 0x04, 0x99, 0x59, 0x7f, 0x5a, 0xd6, 0x5f, 0x69, 0xd2, 0x5d, 0x9e, 0x95, 0x00, 0xbd, 0x23, 0xe8, 0x2d, 0x5d, 0x8a, 0x66, 0x6a, 0xa6, 0xa9, 0xe2, 0xa5, 0x01, 0xc1, 0x02, 0xa6, 0x4b, 0xea, 0x23, 0xa1, 0xcb, 0x55, 0xe0, 0x28, 0x7e, 0xec, 0xaa, 0xa6, 0xcb, 0xf1, 0x5c, 0x74, 0x40, 0xc1, 0x3a, 0xab, 0x75, 0xd5, 0x41, 0xd8, 0x75, 0x31, 0x83, 0xc8, 0x91, 0x9d, 0x90, 0x4d, 0x95, 0x64, 0x22, 0xc9, 0xa0, 0x6a, 0x79, 0x96, 0x5b, 0x64, 0xe5, 0xe1, 0xd6, 0x7f, 0x78, 0xb8, 0x8c, 0xf2, 0x7f, 0xf8, 0xf0, 0x78, 0xf5, 0xd4, 0xdb, 0xc4, 0x0c, 0xed, 0x80, 0xe3, 0x98, 0xa6, 0x22, 0x1f, 0xf0, 0x11, 0x9b, 0x53, 0x03, 0x9b, 0x99, 0x46, 0x47, 0xbe, 0x30, 0xad, 0x50, 0x14, 0x14, 0x6e, 0x4c, 0x92, 0xff, 0xa8, 0x4c, 0xcf, 0xb5, 0x39, 0x96, 0x3f, 0x8f, 0x73, 0xa4, 0x4a, 0x09, 0x41, 0x3c, 0xbf, 0x0e, 0xac, 0x6f, 0xdd, 0xf0, 0xce, 0xb5, 0xee, 0x5e, 0xfe, 0x95, 0x67, 0x87, 0xf0, 0x5a, 0x7d, 0xd9, 0x5e, 0x23, 0xdb, 0x08, 0xfb, 0xd6, 0xc5, 0xd0, 0x0c, 0xc7, 0x94, 0x79, 0x9a, 0x6e, 0xa7, 0x99, 0x81, 0x0a, 0x6f, 0x47, 0xf4, 0xd3, 0x56, 0xc0, 0x7a, 0xfa, 0xd4, 0x0b, 0x85, 0x90, 0xa6, 0x4d, 0x83, 0x72, 0x55, 0xd5, 0xba, 0x96, 0x54, 0x33, 0x9d, 0x66, 0xb9, 0xc8, 0xc4, 0xc6, 0xff, 0x9b, 0x22, 0xcb, 0xf2, 0x82, 0x06, 0x97, 0x45, 0xaa, 0x91, 0x49, 0xae, 0xf2, 0xb4, 0x50, 0x81, 0xa2, 0xaa, 0x62, 0x95, 0x36, 0xa5, 0xc0, 0xce, 0x4a, 0x85, 0xc6, 0x0f, 0x09, 0x6c, 0x30, 0x50, 0x10, 0x59, 0xaa, 0x54, 0x52, 0xdf, 0x13, 0xa7, 0x8b, 0xee, 0xb0, 0xd9, 0x20, 0x04, 0x2f, 0xdc, 0x6b, 0x1f, 0xdb, 0x77, 0xa0, 0xfb, 0x74, 0x91, 0x0a, 0x1b, 0x7a, 0x9b, 0xb9, 0x9a, 0xcd, 0x0b, 0x82, 0x9a, 0x1e, 0x10, 0xcf, 0x2c, 0xea, 0x82, 0x9a, 0x1c, 0x08, 0xec, 0xd5, 0x01, 0xe3, 0xb7, 0x68, 0xbc, 0x2f, 0xcd, 0xe0, 0x70, 0xc7, 0xf1, 0x6f, 0x3c, 0x4b, 0xf4, 0x77, 0xbd, 0x76, 0x61, 0x4c, 0xfb, 0xf8, 0xfe, 0xe3, 0x47, 0x88, 0x19, 0x6b, 0x71, 0x1d, 0x68, 0x94, 0xd5, 0x1d, 0x60, 0x8f, 0x19, 0x79, 0x38, 0x8c, 0x3d, 0xdc, 0xd8, 0xf7, 0x60, 0x5d, 0xc2, 0x76, 0x08, 0x53, 0x1c, 0x4b, 0xf4, 0xab, 0x09, 0x71, 0x8e, 0xb5, 0x50, 0x5a, 0xbc, 0x38, 0xd6, 0x15, 0xdd, 0x90, 0xd8, 0x1d, 0x69, 0x48, 0x4f, 0x7d, 0xec, 0xba, 0xac, 0x6b, 0xbb, 0xee, 0x48, 0xfb, 0xac, 0xcd, 0x0b, 0xba, 0x13, 0x18, 0xbc, 0x0a, 0xe4, 0xa2, 0xac, 0xc2, 0x40, 0x75, 0x69, 0x27, 0xd2, 0x26, 0x2b, 0xe9, 0x52, 0x42, 0x00, 0x7f, 0x4d, 0xfd, 0x4d, 0x05, 0x93, 0x12, 0x52, 0x4e, 0xe8, 0x48, 0x85, 0xd4, 0x17, 0x1a, 0x86, 0x8c, 0x25, 0x10, 0x6e, 0xd4, 0x88, 0xe1, 0x7a, 0x97, 0xc5, 0xb4, 0x8f, 0x1f, 0x1f, 0xaf, 0x26, 0xc7, 0xa2, 0xed, 0x46, 0x69, 0x47, 0xc7, 0xb6, 0xd8, 0xc9, 0x72, 0x26, 0x57, 0x5b, 0x23, 0x15, 0xeb, 0xe2, 0x6b, 0xb2, 0xec, 0xc5, 0x71, 0x58, 0xff, 0x79, 0x64, 0xa3, 0x1b, 0x64, 0xb6, 0xd1, 0xcb, 0x47, 0x9a, 0xb3, 0x49, 0xd5, 0xee, 0x4d, 0xad, 0xf5, 0x79, 0xfc, 0x77, 0x73, 0x2e, 0xac, 0xa0, 0xe1, 0x80, 0xe6, 0x90, 0xd7, 0x10, 0x4b, 0x33, 0x12, 0x10, 0xb4, 0x11, 0x61, 0x5d, 0x97, 0x4d, 0xa7, 0x44, 0x49, 0xb9, 0xbe, 0x32, 0xa3, 0x6b, 0x31, 0x75, 0x13, 0x65, 0x3a, 0xcf, 0xd2, 0x5a, 0x85, 0x4a, 0x30, 0x2e, 0x93, 0xe4, 0xc2, 0xd9, 0xa9, 0xc6, 0x2e, 0x57, 0x9f, 0xe6, 0xd9, 0x79, 0xba, 0x4f, 0x85, 0x9a, 0x4b, 0xfa, 0xd5, 0x5e, 0x17, 0x3d, 0x2e, 0xb3, 0x49, 0x44, 0x5a, 0x60, 0x26, 0xf3, 0xfa, 0x79, 0x64, 0xdb, 0x66, 0x2b, 0xd1, 0xec, 0x90, 0xba, 0x3e, 0x4f, 0xe4, 0xdc, 0x5a, 0x0c, 0xb7, 0x9b, 0x3d, 0x0b, 0x13, 0x99, 0xf3, 0x8d, 0x43, 0x52, 0x46, 0xe1, 0x7c, 0x90, 0x98, 0xd3, 0x25, 0x02, 0xe0, 0x27, 0x69, 0x21, 0x5a, 0xfc, 0x3a, 0xf0, 0x7b, 0x10, 0x5d, 0xc3, 0x35, 0xf5, 0xac, 0xa9, 0x96, 0xc6, 0xb4, 0xd1, 0x95, 0x5b, 0xc2, 0x97, 0x16, 0xa8, 0xff, 0x65, 0x93, 0x1b, 0xde, 0x75, 0xdd, 0xbb, 0xab, 0xd9, 0xf4, 0x7b, 0xae, 0xf3, 0x36, 0xfe, 0x6a, 0xa1, 0x52, 0x25, 0xbd, 0xd5, 0x8a, 0x53, 0xb7, 0x2e, 0x23, 0x51, 0x76, 0x2e, 0x45, 0xee, 0xa9, 0x5e, 0x69, 0x16, 0xeb, 0x8e, 0x20, 0xbf, 0xde, 0xee, 0xd3, 0x6a, 0x4b, 0xfa, 0xe8, 0x9f, 0x55, 0x2c, 0x6d, 0x53, 0xf6, 0xb7, 0xbb, 0x08, 0x15, 0xc1, 0x65, 0x61, 0xea, 0xe7, 0xb6, 0x9b, 0x59, 0x61, 0x21, 0xdf, 0x3a, 0x16, 0x68, 0x08, 0x02, 0x64, 0x02, 0xcb, 0x0a, 0x4d, 0x2d, 0x7a, 0x45, 0x99, 0x02, 0x6a, 0x33, 0x55, 0x11, 0xd8, 0xc8, 0x83, 0x48, 0x2f, 0x4a, 0x85, 0x18, 0xbb, 0x00, 0x89, 0x80, 0x3f, 0x67, 0xea, 0xfb, 0x71, 0x2b, 0xdd, 0x77, 0xc0, 0x33, 0xfa, 0xe5, 0xb3, 0x4a, 0x7e, 0x7c, 0x77, 0x20, 0x3e, 0xb9, 0x8c, 0x24, 0xd3, 0x98, 0xb3, 0x83, 0xf8, 0x32, 0x43, 0xcb, 0x2a, 0x3a, 0x0a, 0x93, 0x4a, 0xcb, 0x2c, 0xa4, 0xab, 0xc0, 0x74, 0x93, 0x1d, 0x21, 0x22, 0x53, 0x69, 0x53, 0x15, 0x81, 0x14, 0x05, 0x3e, 0x64, 0x2e, 0xd3, 0xf8, 0xfa, 0x3a, 0xdc, 0xfb, 0xf6, 0xfe, 0xc1, 0x7e, 0xb0, 0xf7, 0xe9, 0x21, 0xbc, 0x76, 0x13, 0xdb, 0xbb, 0x76, 0xf9, 0x73, 0xe8, 0x31, 0x5e, 0x14, 0xcf, 0xde, 0x75, 0x6f, 0xa9, 0xf8, 0x65, 0x58, 0xfa, 0x01, 0x9b, 0x6c, 0xa1, 0xad, 0x34, 0x9f, 0x6c, 0xa6, 0xa9, 0xcb, 0xfa, 0x04, 0x6e, 0x32, 0x20, 0x4e, 0xf7, 0xbd, 0xd6, 0x9f, 0xe6, 0x1c, 0x0c, 0xfa, 0xa9, 0x51, 0x9e, 0x1a, 0x9d, 0x0c, 0x97, 0x2a, 0xeb, 0xa7, 0xfb, 0x64, 0xb7, 0x79, 0xed, 0x8d, 0x3a, 0x57, 0x3a, 0x6e, 0x53, 0x62, 0x5b, 0x9a, 0x72, 0x5b, 0xea, 0x4e, 0x17, 0xca, 0x8c, 0x5f, 0xa3, 0xe3, 0xeb, 0x26, 0x83, 0x0e, 0xd7, 0x39, 0x35, 0x7e, 0xe5, 0x5a, 0x8a, 0x34, 0xaa, 0xa4, 0x07, 0x45, 0x16, 0xba, 0x5f, 0xda, 0x76, 0xd9, 0xd1, 0x93, 0xb1, 0xad, 0xef, 0x59, 0x3f, 0x6a, 0xa1, 0xf5, 0x49, 0x7c, 0x31, 0x02, 0x91, 0xf6, 0x1f, 0x98, 0xa3, 0xad, 0x39, 0xfe, 0x99, 0xbe, 0x3c, 0x08, 0x2d, 0xce, 0x2d, 0xbc, 0xb0, 0x10, 0x91, 0x2c, 0xc9, 0x93, 0x2d, 0x81, 0x85, 0x0d, 0x94, 0x40, 0x41, 0xfb, 0x32, 0x88, 0x3c, 0x3f, 0x88, 0x14, 0x45, 0xb1, 0x20, 0x7e, 0xe0, 0x3e, 0x07, 0x06, 0x1e, 0x12, 0xfc, 0xf7, 0x65, 0x82, 0xc5, 0x0e, 0x73, 0xe4, 0x5d, 0x1a, 0xd2, 0x6c, 0x8a, 0x38, 0x8a, 0xa3, 0xf0, 0x90, 0x06, 0x1c, 0x1c, 0x2c, 0x70, 0x83, 0xe8, 0x10, 0xb2, 0x4f, 0xb6, 0xfd, 0xc3, 0x85, 0x7e, 0xfb, 0xf0, 0xf6, 0xea, 0x37, 0xcb, 0x41, 0x4e, 0x62, 0x5e, 0xf5, 0x89, 0x2e, 0x56, 0xa4, 0x11, 0x1c, 0xa0, 0x92, 0x74, 0xa1, 0x69, 0x6f, 0xd9, 0xf6, 0xc4, 0x84, 0xde, 0xed, 0x83, 0xc3, 0xb1, 0x86, 0x50, 0x4c, 0xb1, 0x12, 0x39, 0x96, 0x62, 0xdc, 0xb4, 0x22, 0xd7, 0x89, 0xbc, 0xf5, 0x65, 0x02, 0x1b, 0x7c, 0xdf, 0xbb, 0x0b, 0x03, 0x27, 0xf4, 0x5e, 0x04, 0x7f, 0x75, 0xff, 0x24, 0x6c, 0xab, 0x2e, 0xf4, 0x1b, 0x6c, 0x03, 0xe9, 0x45, 0x50, 0x16, 0xce, 0x7c, 0x3a, 0x09, 0x21, 0xd8, 0x32, 0x9c, 0x96, 0x45, 0x0c, 0x5c, 0x8c, 0xe2, 0x64, 0x8b, 0x61, 0x80, 0x0f, 0xb1, 0xdd, 0x38, 0x95, 0xb1, 0xda, 0xf8, 0xe6, 0xd2, 0xb3, 0x3f, 0xde, 0x28, 0x7f, 0xa3, 0xaf, 0x8b, 0xd3, 0x57, 0xef, 0xde, 0x34, 0x2d, 0xdd, 0x66, 0x67, 0xd3, 0x80, 0x69, 0xb8, 0xe8, 0xe4, 0xd8, 0x04, 0x24, 0xd4, 0x1d, 0x09, 0xe7, 0x59, 0x93, 0xcb, 0x26, 0x77, 0x72, 0x4f, 0xab, 0xfb, 0x65, 0xb1, 0xcf, 0xae, 0x48, 0xe8, 0x0e, 0xe4, 0xa3, 0xb9, 0xc2, 0xb4, 0x7a, 0x1a, 0x99, 0xbd, 0x6d, 0x38, 0x93, 0x37, 0x36, 0x2d, 0xe5, 0xdb, 0xd0, 0x5b, 0xda, 0x94, 0xbe, 0xce, 0x0d, 0x80, 0x16, 0xad, 0xaa, 0x29, 0xaa, 0x35, 0xba, 0x14, 0xb9, 0x6a, 0xcc, 0x74, 0x69, 0x95, 0x20, 0x9c, 0xe9, 0x54, 0x7b, 0x49, 0xa6, 0x12, 0x46, 0xcb, 0x36, 0xa1, 0xcc, 0xd1, 0x65, 0x3a, 0xcd, 0xd8, 0xe5, 0x5a, 0x27, 0x7c, 0x78, 0x18, 0x36, 0xad, 0x76, 0x8f, 0x30, 0x3d, 0x39, 0x00, 0x78, 0x40, 0xc7, 0x09, 0x41, 0x8e, 0x26, 0x4b, 0x8f, 0x80, 0x98, 0x2f, 0x29, 0xff, 0xd3, 0x7c, 0xc7, 0xf3, 0xf0, 0xec, 0x7a, 0xeb, 0xc6, 0x23, 0xa2, 0x6c, 0xc4, 0x5a, 0xfb, 0x69, 0xc0, 0xb9, 0x11, 0x66, 0x66, 0x02, 0xe9, 0xcf, 0xf7, 0x0c, 0xd4, 0xa5, 0x49, 0x87, 0x20, 0x90, 0x97, 0x0d, 0x0d, 0x11, 0x54, 0x02, 0xdc, 0xa4, 0x6c, 0x4a, 0x95, 0x37, 0x74, 0x3f, 0x72, 0x08, 0xa0, 0xe1, 0xe1, 0x85, 0xd3, 0x88, 0xde, 0xd1, 0x61, 0xa1, 0xbb, 0x02, 0x16, 0xcc, 0x6e, 0x62, 0xe0, 0x4d, 0x27, 0x62, 0x52, 0x6c, 0xb2, 0x47, 0x87, 0x6e, 0x83, 0xd7, 0xdc, 0xb2, 0x5d, 0x0d, 0x1a, 0xf9, 0xc5, 0x25, 0x03, 0x37, 0xa6, 0x9c, 0x73, 0xcb, 0x7f, 0xab, 0x8a, 0xaa, 0xa5, 0x33, 0xc3, 0x3d, 0x68, 0x1a, 0x51, 0x24, 0xd3, 0xed, 0xca, 0x48, 0x99, 0x99, 0x3c, 0x56, 0x40, 0x83, 0x95, 0xa8, 0x28, 0x17, 0x74, 0x38, 0xed, 0xd2, 0x36, 0x07, 0xb3, 0xca, 0x4a, 0xd5, 0x95, 0x25, 0x68, 0x48, 0x59, 0x82, 0x14, 0x17, 0x90, 0xd3, 0xa9, 0xa7, 0xf2, 0x4c, 0x86, 0x0a, 0xec, 0x0a, 0xee, 0x12, 0xcf, 0xdf, 0x46, 0xf2, 0x9c, 0xbf, 0x60, 0x17, 0x73, 0x27, 0xd6, 0x2f, 0xeb, 0x02, 0x78, 0x80, 0x15, 0x93, 0xa0, 0x8b, 0x8b, 0xf8, 0x4a, 0x31, 0x7b, 0x1d, 0xe9, 0x96, 0xc5, 0x95, 0x6b, 0x50, 0xac, 0x2f, 0xb0, 0xb1, 0x50, 0x85, 0xa9, 0x12, 0x39, 0x56, 0x5b, 0xe7, 0x53, 0x4d, 0x83, 0x02, 0xcf, 0x97, 0xab, 0xd4, 0x5a, 0x91, 0x03, 0x45, 0xbe, 0x05, 0x6c, 0xd9, 0x2a, 0x2c, 0x42, 0x99, 0xd0, 0x0c, 0x95, 0x9a, 0x26, 0xfd, 0x36, 0x75, 0x44, 0xad, 0x42, 0x34, 0x09, 0xdc, 0x5c, 0x64, 0xa2, 0x8b, 0x22, 0x8a, 0xca, 0xac, 0x84, 0x48, 0x0b, 0x44, 0x1a, 0x13, 0xdb, 0xc7, 0xff, 0x2e, 0xe3, 0xfa, 0xef, 0xde, 0xbe, 0x7d, 0x07, 0xe5, 0xb9, 0xcc, 0x74, 0xbf, 0x85, 0xcb, 0x75, 0xcf, 0xc4, 0xf9, 0xb9, 0x19, 0x5f, 0xe3, 0x9c, 0x34, 0xc8, 0x3d, 0x03, 0x17, 0x71, 0xa1, 0xd1, 0x56, 0x73, 0x45, 0xa6, 0x35, 0x69, 0xbe, 0x9c, 0x48, 0x79, 0xd2, 0x08, 0xd5, 0xa2, 0x3e, 0xd2, 0xfd, 0x89, 0x34, 0xe8, 0x35, 0x6d, 0x69, 0x32, 0x7b, 0x97, 0x63, 0x6d, 0x55, 0x79, 0xae, 0xe3, 0x44, 0x81, 0x52, 0x94, 0x3e, 0xe2, 0x58, 0xce, 0xcb, 0x22, 0xa1, 0x4e, 0x64, 0x89, 0x88, 0x56, 0xd4, 0x45, 0x98, 0x1f, 0x82, 0x80, 0xa5, 0x1e, 0xcd, 0x60, 0x66, 0x61, 0x1c, 0xb8, 0xa1, 0x0e, 0x99, 0x08, 0x99, 0x47, 0xf7, 0xa0, 0x05, 0x7e, 0x10, 0xfe, 0xce, 0x78, 0x83, 0xaf, 0xb7, 0xee, 0xfd, 0xe3, 0x1b, 0x6a, 0x52, 0x60, 0xc0, 0x8f, 0x95, 0xe0, 0x03, 0x1e, 0x64, 0xb6, 0x66, 0x7f, 0x70, 0xba, 0x4b, 0xf5, 0x73, 0x16, 0x15, 0x74, 0x56, 0x39, 0x15, 0x16, 0xeb, 0x8a, 0x0e, 0xaa, 0xb1, 0x9f, 0xe8, 0x1e, 0xc5, 0x82, 0xe6, 0x03, 0x1e, 0x0d, 0xc9, 0xa7, 0x26, 0x21, 0x93, 0x07, 0xca, 0x6a, 0x9a, 0xd4, 0x50, 0x75, 0x3c, 0x91, 0x4c, 0xe6, 0x22, 0xd2, 0x42, 0x04, 0x49, 0x28, 0xa2, 0x88, 0x49, 0x25, 0x62, 0xe0, 0x04, 0x8f, 0x7d, 0xb1, 0x97, 0x62, 0xff, 0xcb, 0xf2, 0x84, 0x3f, 0xd1, 0x5e, 0xf8, 0xcc, 0x5e, 0x7b, 0xec, 0xde, 0x5c, 0x9d, 0xeb, 0xdb, 0x69, 0xba, 0x8b, 0x69, 0x9e, 0x01, 0x7e, 0x98, 0x72, 0x77, 0xa3, 0xa5, 0x4f, 0xf3, 0xba, 0xf5, 0xcd, 0x98, 0x97, 0xdc, 0xb0, 0x49, 0x4e, 0x7b, 0xed, 0xdc, 0xa2, 0x66, 0xf8, 0xbe, 0xd1, 0x9c, 0xda, 0x2c, 0xc1, 0x6c, 0x23, 0x93, 0x94, 0xdc, 0xc9, 0x92, 0x24, 0x4f, 0x33, 0x3f, 0x2b, 0x68, 0x3a, 0x3f, 0xfe, 0x0d, 0x65, 0x8d, 0xf0, 0x27, 0xd2, 0xae, 0x28, 0x7d, 0x88, 0x15, 0x6b, 0x1f, 0xbb, 0xd6, 0x8f, 0xfb, 0xe0, 0xee, 0xfe, 0x2e, 0x4c, 0x23, 0x71, 0xc7, 0xe9, 0x6a, 0x3b, 0x06, 0xc7, 0x85, 0xdc, 0xdb, 0xc7, 0xcf, 0xdd, 0x18, 0xf9, 0xcc, 0x5e, 0x23, 0xbb, 0x9e, 0xf2, 0x8a, 0xb6, 0xed, 0x7e, 0xca, 0x30, 0x3a, 0xe7, 0x84, 0xe3, 0xb8, 0x15, 0xb8, 0xd3, 0x8f, 0x2c, 0x3f, 0x7f, 0x83, 0x7c, 0x96, 0x54, 0x82, 0x12, 0x58, 0x24, 0xa5, 0xa9, 0x54, 0x55, 0x9f, 0x27, 0xaa, 0xd2, 0x08, 0x55, 0xba, 0x29, 0x4c, 0x9a, 0x41, 0x22, 0xc4, 0xb7, 0x82, 0x94, 0xd1, 0x25, 0xeb, 0x54, 0xff, 0x97, 0xba, 0xc0, 0xbd, 0x84, 0xa7, 0x01, 0x13, 0x3b, 0x29, 0x22, 0xb6, 0xc3, 0xd6, 0xa2, 0x49, 0x9d, 0x21, 0xf5, 0x93, 0xc4, 0x0f, 0xb1, 0x0a, 0xef, 0x9c, 0xd7, 0xbf, 0x37, 0x73, 0xf4, 0xab, 0x79, 0xc8, 0xe3, 0xfb, 0x06, 0x9c, 0x1f, 0x08, 0xb2, 0xae, 0x8b, 0x3b, 0x3b, 0x74, 0x2b, 0x0e, 0x16, 0x9c, 0xb9, 0xe3, 0xf3, 0x77, 0xea, 0x55, 0x41, 0xc4, 0x0c, 0xe7, 0xdf, 0x6e, 0x3c, 0x53, 0xe6, 0x8e, 0xf8, 0xed, 0x1a, 0x81, 0x5a, 0x9c, 0xdb, 0x4b, 0xda, 0x9f, 0x67, 0x17, 0xa7, 0xdb, 0xc8, 0xbd, 0x3a, 0x85, 0x2e, 0xa3, 0xfb, 0x8c, 0x52, 0x45, 0xd7, 0xae, 0x64, 0x6d, 0x99, 0x37, 0x6d, 0x46, 0xf3, 0x11, 0x69, 0x72, 0x91, 0xe6, 0x71, 0x20, 0xa2, 0x6b, 0xdf, 0xbd, 0xbb, 0xf7, 0x40, 0x60, 0xbc, 0xdf, 0xde, 0x6d, 0x5f, 0x8d, 0x91, 0x64, 0x1b, 0x35, 0x22, 0x5b, 0xab, 0xb5, 0xd0, 0x2d, 0x39, 0x1a, 0xb8, 0x8f, 0x17, 0xf3, 0x3c, 0xfe, 0x51, 0xbd, 0xaa, 0x49, 0xf1, 0x57, 0x1b, 0x81, 0xac, 0xce, 0x01, 0xcd, 0x98, 0xd3, 0x3e, 0x4d, 0x31, 0x27, 0xa9, 0x4d, 0x43, 0x55, 0xd5, 0xf6, 0xaa, 0x6e, 0x02, 0x23, 0x4b, 0x11, 0xac, 0x69, 0x7c, 0x76, 0x03, 0x51, 0x0d, 0xd8, 0x97, 0x89, 0xa0, 0xcb, 0x1f, 0x40, 0xda, 0x32, 0x29, 0xb2, 0x14, 0xfb, 0x50, 0x8b, 0x43, 0xec, 0x25, 0xfe, 0xc3, 0xc1, 0xbf, 0x30, 0xa6, 0x3d, 0x7e, 0x68, 0xaf, 0x98, 0x45, 0x75, 0xfc, 0x16, 0x4d, 0x69, 0x98, 0xdc, 0xe5, 0x04, 0xc9, 0xb9, 0xb2, 0xd1, 0x9d, 0x46, 0x36, 0x8e, 0xd6, 0xc9, 0x32, 0x57, 0x96, 0xba, 0x2b, 0x5d, 0x24, 0xf6, 0xe9, 0x96, 0xc5, 0x9d, 0xe9, 0x07, 0xda, 0x64, 0xa7, 0x31, 0xec, 0x3c, 0x1d, 0x85, 0x5c, 0x06, 0x67, 0xc8, 0xed, 0x6e, 0xaa, 0xba, 0x20, 0x97, 0x9a, 0xd1, 0x07, 0x65, 0x0b, 0x81, 0x59, 0x53, 0x63, 0xbc, 0x4a, 0x3a, 0x45, 0xed, 0xbe, 0x44, 0xfe, 0x21, 0xf0, 0x40, 0xfb, 0x65, 0x59, 0x42, 0x53, 0x47, 0xf8, 0x57, 0x2a, 0x44, 0x6a, 0x2a, 0x9c, 0xe6, 0x7c, 0x7f, 0xd9, 0xcd, 0x61, 0xc6, 0xae, 0x99, 0x6e, 0xec, 0xe8, 0xcd, 0x1d, 0x9f, 0xd6, 0xb8, 0x68, 0xea, 0x4e, 0xd3, 0x40, 0xf8, 0xde, 0xe9, 0x9d, 0x85, 0x13, 0x14, 0xf6, 0xd4, 0x81, 0x01, 0xfa, 0xff, 0x69, 0x44, 0xbd, 0xc9, 0x15, 0x53, 0x45, 0xf8, 0x46, 0x40, 0x8e, 0xb4, 0xbd, 0xb2, 0xa7, 0xeb, 0x9c, 0xb7, 0x61, 0xe0, 0xa6, 0x93, 0x97, 0x8e, 0xa3, 0xe8, 0x4a, 0x92, 0x86, 0x86, 0x33, 0x34, 0x52, 0x2b, 0xf6, 0x5d, 0x26, 0x18, 0x3e, 0xb8, 0x6e, 0x23, 0xd3, 0xff, 0x5a, 0x57, 0x99, 0x59, 0xbf, 0x74, 0x89, 0x07, 0xd6, 0xa5, 0xa2, 0xc6, 0x0b, 0x59, 0xc8, 0x94, 0xc7, 0x97, 0x65, 0x78, 0xde, 0xbd, 0xfb, 0xf8, 0xe6, 0xb1, 0xbb, 0x82, 0x19, 0x13, 0x94, 0x8a, 0x3d, 0x81, 0x61, 0x9c, 0x34, 0x8d, 0xcf, 0x76, 0xa6, 0xf1, 0x04, 0xa4, 0xa4, 0xdb, 0x3b, 0x66, 0xcb, 0x76, 0x34, 0xa3, 0xf1, 0x36, 0xbd, 0xa3, 0xc7, 0xd3, 0x16, 0xb4, 0x77, 0x45, 0x56, 0x29, 0xba, 0xb5, 0x29, 0x13, 0x15, 0x83, 0x6d, 0x05, 0xcc, 0x10, 0x5d, 0x01, 0x6f, 0xd0, 0x9c, 0x9e, 0x8e, 0xee, 0x88, 0x01, 0xd3, 0x4a, 0x92, 0x06, 0x6c, 0xa9, 0xe9, 0x74, 0xd3, 0x55, 0x08, 0x03, 0x09, 0x39, 0x95, 0x53, 0x90, 0x8e, 0xbb, 0xd8, 0xcd, 0x65, 0xc8, 0xb4, 0x96, 0x31, 0x8d, 0x98, 0x2e, 0x75, 0xaa, 0x64, 0xa9, 0xdb, 0x32, 0x0b, 0x58, 0x12, 0x04, 0x77, 0xe1, 0xfe, 0xe1, 0xe1, 0xfe, 0xb2, 0x95, 0xf8, 0xe1, 0xcd, 0xbb, 0x2b, 0xc8, 0x93, 0xd1, 0x61, 0x74, 0xb7, 0xbd, 0x4b, 0xd7, 0xab, 0x70, 0x28, 0xb2, 0x93, 0x76, 0xa8, 0x9c, 0x60, 0xe8, 0x07, 0xd7, 0x85, 0xdf, 0x6c, 0x97, 0x12, 0x3f, 0x3f, 0xf3, 0x2b, 0xa3, 0x3e, 0x6b, 0xd3, 0x45, 0x42, 0x14, 0xf7, 0x7c, 0x3d, 0x4e, 0x73, 0x7e, 0x42, 0xc3, 0x45, 0x69, 0x25, 0xaa, 0x46, 0x68, 0x04, 0xb0, 0x2c, 0xf7, 0x5b, 0xac, 0x36, 0x95, 0x88, 0xb8, 0x2d, 0x7d, 0x4f, 0x25, 0x08, 0x68, 0x5a, 0x64, 0x22, 0x2e, 0x12, 0x25, 0xb0, 0x40, 0x83, 0x04, 0xfa, 0x3c, 0x89, 0x22, 0xc5, 0x1e, 0xa4, 0x14, 0xc9, 0x3e, 0xe4, 0xe1, 0x9e, 0xb3, 0xe7, 0x0e, 0x3d, 0x9f, 0x59, 0x89, 0x64, 0xd7, 0xa2, 0xc7, 0x69, 0x99, 0xed, 0x95, 0x4d, 0xb3, 0x06, 0x5d, 0xe3, 0xfd, 0x69, 0x1a, 0x04, 0x74, 0xf6, 0x69, 0xd1, 0xba, 0x5f, 0xa1, 0xd0, 0xd6, 0xd3, 0xa4, 0xf5, 0xf2, 0x59, 0x11, 0x2e, 0x65, 0x52, 0xb7, 0x0b, 0x22, 0x29, 0x6d, 0x90, 0x1e, 0xeb, 0xe6, 0xbc, 0xcb, 0xb6, 0xb1, 0xf4, 0xcd, 0x81, 0x9a, 0x42, 0xc9, 0x4e, 0x96, 0x9a, 0xfa, 0x90, 0x22, 0xc7, 0x82, 0xa3, 0xb3, 0x97, 0x22, 0xa5, 0xe2, 0xd5, 0xb4, 0xc8, 0xa8, 0x7f, 0xab, 0x8b, 0x29, 0xa1, 0xa0, 0x55, 0x90, 0xe8, 0x34, 0x92, 0x74, 0xf4, 0xa4, 0x12, 0x19, 0x78, 0x7e, 0xe4, 0xc6, 0xc1, 0xe1, 0xee, 0x42, 0x7f, 0x7d, 0x84, 0x32, 0x13, 0x94, 0xc9, 0x37, 0x03, 0xa4, 0x18, 0x28, 0xd4, 0x4a, 0xd7, 0x8b, 0xb3, 0x79, 0xb5, 0x67, 0x9a, 0xfe, 0xc2, 0xf9, 0xa7, 0x1b, 0x12, 0x7e, 0xc6, 0x7d, 0xb0, 0xfc, 0xc4, 0xf4, 0x10, 0x52, 0x6a, 0xea, 0xa9, 0x29, 0x8d, 0xec, 0xe2, 0xed, 0xb9, 0x41, 0x2d, 0x37, 0x43, 0x55, 0x33, 0x53, 0x2e, 0x98, 0x86, 0x5d, 0xd2, 0x61, 0x13, 0x15, 0x71, 0x27, 0x5a, 0xa0, 0x47, 0x9e, 0x02, 0x15, 0x95, 0x29, 0x6c, 0x4f, 0xa8, 0x2d, 0x39, 0x80, 0x6e, 0xe1, 0x42, 0x28, 0x10, 0x46, 0x6c, 0x2d, 0x37, 0x0a, 0x22, 0x37, 0xba, 0xb0, 0x64, 0xda, 0xd8, 0xe5, 0xf4, 0x58, 0x70, 0xa0, 0xf9, 0xfd, 0x68, 0x0e, 0x75, 0x1d, 0x46, 0x13, 0x2d, 0x49, 0x40, 0x13, 0xeb, 0x9f, 0x16, 0x61, 0xff, 0xfa, 0xb4, 0x82, 0x97, 0xdb, 0x7d, 0xf7, 0xc7, 0xa3, 0x36, 0x25, 0xee, 0xe6, 0x24, 0x97, 0x52, 0xe0, 0xdb, 0x64, 0x0d, 0xc2, 0x74, 0x42, 0x7b, 0xba, 0x5a, 0x24, 0x2d, 0x40, 0x9d, 0xf3, 0xa2, 0x35, 0x6d, 0xf3, 0x66, 0x10, 0x4c, 0xa9, 0x0a, 0x1a, 0xd0, 0x9c, 0xaa, 0xc4, 0xd4, 0xbd, 0xb7, 0x89, 0xca, 0x55, 0x42, 0x0b, 0x15, 0x41, 0x5c, 0xc6, 0xdb, 0xb0, 0xf3, 0xe8, 0xb2, 0x26, 0xf9, 0x77, 0x1f, 0xdf, 0x76, 0x6f, 0x1e, 0xaf, 0x06, 0x46, 0x73, 0x1c, 0xcf, 0xfd, 0x4c, 0xe6, 0x4f, 0xb2, 0xd5, 0x7c, 0x9d, 0xb6, 0x3c, 0xaa, 0x19, 0xfe, 0x68, 0xb9, 0xf6, 0x34, 0xb8, 0xa7, 0x89, 0x59, 0xec, 0xfb, 0xbf, 0xd1, 0xad, 0xcd, 0x5f, 0xa5, 0xa5, 0xbf, 0x16, 0x17, 0xdf, 0x37, 0x6f, 0xdf, 0xb4, 0x88, 0x64, 0xae, 0xb5, 0xc0, 0x43, 0x10, 0xcf, 0x0b, 0xa4, 0x0b, 0x62, 0x16, 0x9b, 0x18, 0x22, 0x5b, 0x7f, 0x62, 0xe3, 0x3a, 0xd2, 0xd4, 0x4a, 0x17, 0xba, 0x73, 0xe5, 0x60, 0x8f, 0x34, 0xbf, 0x93, 0x7c, 0x48, 0x43, 0xda, 0x38, 0xe5, 0x1c, 0x4b, 0x79, 0xe4, 0xd8, 0x62, 0x1e, 0x5d, 0xf4, 0xd6, 0x1d, 0x29, 0xf3, 0x4d, 0xbd, 0x4c, 0x5d, 0x43, 0x17, 0xc2, 0x4b, 0x93, 0x7c, 0x04, 0x11, 0xa6, 0x6b, 0x30, 0xa9, 0x7b, 0x9e, 0x2e, 0x81, 0x38, 0x76, 0x19, 0x0d, 0x58, 0x6d, 0xa8, 0x0d, 0xdb, 0x34, 0xd3, 0x03, 0x3a, 0x9b, 0xb8, 0xad, 0xba, 0x96, 0x9a, 0x2e, 0x00, 0x92, 0x05, 0xe7, 0xe1, 0x81, 0x1f, 0xdc, 0xe7, 0xee, 0x2c, 0x7d, 0xce, 0xb2, 0x47, 0x30, 0x8f, 0x61, 0xa2, 0x33, 0x98, 0xde, 0xa5, 0xf4, 0x22, 0x5d, 0xf7, 0x66, 0xa6, 0x53, 0x0c, 0x5b, 0xf2, 0x9e, 0x2a, 0x00, 0x9f, 0x66, 0x89, 0xf4, 0x1b, 0x8f, 0x64, 0xfd, 0x0e, 0xe2, 0x50, 0xd1, 0x8d, 0x1b, 0xb2, 0x04, 0xcf, 0x3f, 0x66, 0xf9, 0x91, 0x3e, 0x59, 0xd3, 0xa5, 0x5d, 0x57, 0x52, 0x4a, 0xbf, 0x6d, 0x05, 0x35, 0x90, 0xd3, 0xa9, 0x66, 0x87, 0xc0, 0xd4, 0x60, 0x79, 0xf1, 0x50, 0xc4, 0xaa, 0xac, 0xfd, 0x22, 0xce, 0xaa, 0x52, 0x66, 0x09, 0x62, 0x72, 0x22, 0x2a, 0x1d, 0xea, 0x20, 0x2b, 0x63, 0x96, 0xe4, 0x11, 0x4b, 0x22, 0xa9, 0x92, 0x38, 0x02, 0x82, 0x1c, 0xec, 0xc3, 0xfd, 0x97, 0xd5, 0x80, 0xff, 0xd7, 0x67, 0x36, 0xfc, 0x99, 0xe2, 0x02, 0xd8, 0x85, 0x8d, 0xc6, 0xa8, 0x0f, 0x79, 0xea, 0x41, 0x32, 0x20, 0x33, 0x29, 0x1d, 0xcc, 0x06, 0x3e, 0xd3, 0x48, 0x3d, 0x67, 0x21, 0x3e, 0x32, 0xf2, 0xd3, 0xcc, 0xe8, 0xdc, 0x7d, 0xfe, 0xd4, 0xbf, 0x85, 0x40, 0x76, 0xc4, 0xa7, 0x34, 0x17, 0x41, 0xb0, 0x63, 0x59, 0x00, 0x16, 0x0a, 0x84, 0x2f, 0xb0, 0x8e, 0xb3, 0x7c, 0x31, 0x87, 0x84, 0xf0, 0x1f, 0xfe, 0xd4, 0x9d, 0x96, 0xb2, 0x4e, 0xb3, 0xf4, 0x98, 0xe7, 0x69, 0x29, 0x4b, 0xe5, 0x37, 0x45, 0xa7, 0x7d, 0xb0, 0x92, 0x50, 0x27, 0x32, 0xce, 0xe2, 0x42, 0xa7, 0x12, 0xbc, 0x83, 0x05, 0xfc, 0xf0, 0xe0, 0x47, 0x51, 0x10, 0x1e, 0xbc, 0xf0, 0xd6, 0x71, 0x2e, 0x02, 0xc6, 0xf7, 0x6d, 0xf7, 0xf6, 0x6a, 0x5d, 0x96, 0xd5, 0x75, 0x47, 0x36, 0x4d, 0x33, 0x48, 0x06, 0x03, 0xf8, 0xe3, 0xd5, 0x34, 0xd1, 0x9b, 0x78, 0x49, 0xcd, 0xba, 0xae, 0x4b, 0x63, 0x64, 0xa9, 0xd2, 0x7d, 0xeb, 0x93, 0xa4, 0xf4, 0x87, 0x32, 0x99, 0x0f, 0x6a, 0xbe, 0x3d, 0x53, 0xde, 0xe4, 0x8e, 0xb2, 0xf8, 0x59, 0x5d, 0xc0, 0x1d, 0x8d, 0xf4, 0x62, 0x29, 0xa5, 0xe1, 0xc7, 0x79, 0x44, 0xa5, 0x81, 0x8d, 0x89, 0xe2, 0x2a, 0xa6, 0x3b, 0xef, 0xa2, 0x3c, 0xab, 0xb0, 0xe4, 0x9a, 0xba, 0x2c, 0xeb, 0x36, 0x24, 0xda, 0x55, 0xea, 0x2a, 0x2f, 0xbd, 0x82, 0xee, 0xfd, 0x03, 0xf9, 0x50, 0xe9, 0xa5, 0x47, 0x15, 0xc6, 0x2e, 0xba, 0xf2, 0x92, 0xc6, 0x00, 0xc2, 0x12, 0x58, 0x60, 0x2d, 0x13, 0x75, 0xc6, 0x53, 0x03, 0xab, 0x4b, 0xa9, 0x70, 0xb2, 0x72, 0xb3, 0x07, 0x86, 0x41, 0x8d, 0xc2, 0xe6, 0x61, 0x97, 0xf1, 0x2a, 0x25, 0x12, 0x5c, 0xa9, 0xe3, 0x76, 0xec, 0x69, 0xae, 0xd7, 0xd2, 0x54, 0x31, 0xac, 0x73, 0xf1, 0xd4, 0xa5, 0x9a, 0xd5, 0xf5, 0xa7, 0x0e, 0x20, 0xd9, 0x14, 0x54, 0x80, 0xa0, 0x11, 0x13, 0x8a, 0xe6, 0xa9, 0x8f, 0xb5, 0xa0, 0x0b, 0x31, 0x6a, 0xca, 0x17, 0x9b, 0xa0, 0x91, 0x82, 0xa3, 0xc1, 0x5e, 0x44, 0xb7, 0x28, 0xfb, 0x32, 0xa5, 0xff, 0x9f, 0x3f, 0xb3, 0xe1, 0xcf, 0xcc, 0x09, 0x7c, 0xdf, 0x3e, 0x5e, 0x9d, 0xe6, 0x09, 0x42, 0x0b, 0x1b, 0x4a, 0x0f, 0xfd, 0x69, 0x76, 0xf8, 0xb2, 0x50, 0xda, 0x83, 0x73, 0x67, 0xec, 0xc1, 0x87, 0xa7, 0x85, 0xf1, 0x5f, 0xce, 0x0a, 0xbc, 0xf1, 0x4b, 0x82, 0x0b, 0x81, 0x8f, 0xd3, 0x04, 0x7e, 0xcb, 0x0f, 0x29, 0xb5, 0x9a, 0xc9, 0x48, 0x84, 0xb1, 0x50, 0x61, 0x18, 0x30, 0x28, 0xc7, 0x38, 0x60, 0x71, 0x93, 0xe2, 0x1b, 0x71, 0x4c, 0xc9, 0x00, 0xce, 0xaf, 0xc3, 0x28, 0xf4, 0xe3, 0x7d, 0x18, 0xde, 0x25, 0x5c, 0xde, 0x72, 0xc1, 0x12, 0x1d, 0xf3, 0xc8, 0x73, 0x62, 0x2e, 0xa4, 0x8c, 0x0f, 0xf1, 0x73, 0x2a, 0xfa, 0xd7, 0xa6, 0x3d, 0xe7, 0xb2, 0xc7, 0xab, 0x69, 0x58, 0x18, 0xb8, 0x21, 0x9b, 0x6d, 0x00, 0x46, 0x6f, 0x5b, 0x3d, 0x63, 0x83, 0x86, 0x91, 0x34, 0x7d, 0x19, 0x40, 0xc8, 0xe9, 0x2a, 0xc2, 0x5f, 0xf4, 0xc8, 0x30, 0x2e, 0x68, 0x26, 0x52, 0x92, 0x6c, 0x77, 0xbc, 0x91, 0xcf, 0x0c, 0xa1, 0xda, 0x63, 0xf1, 0xf9, 0xe6, 0xae, 0xac, 0x96, 0xb7, 0x79, 0x2a, 0x8a, 0x20, 0x0f, 0x03, 0x1e, 0x2a, 0x3f, 0x04, 0x9f, 0xf0, 0x98, 0xb6, 0x49, 0x56, 0x0a, 0x5d, 0x29, 0xf5, 0x10, 0xaa, 0x38, 0x0c, 0x5f, 0xfa, 0x2e, 0xa1, 0x85, 0x4c, 0x1f, 0x6c, 0x76, 0x77, 0xc7, 0xe2, 0x2f, 0x4d, 0x7b, 0x2e, 0xa1, 0xff, 0xac, 0xd7, 0x40, 0xab, 0x16, 0xea, 0xa2, 0x63, 0xb6, 0x4b, 0x6c, 0xd7, 0x5a, 0x6c, 0xcb, 0x9a, 0x6d, 0x62, 0xf9, 0x90, 0x65, 0xc3, 0xaa, 0x39, 0xdd, 0xc3, 0x62, 0x46, 0x4d, 0xff, 0xec, 0xbb, 0x9b, 0x38, 0x0e, 0x24, 0x67, 0x3e, 0xe7, 0x3c, 0x39, 0x84, 0x82, 0xe5, 0x42, 0xe5, 0x54, 0xfb, 0xb7, 0x3f, 0x48, 0x8f, 0x6e, 0xad, 0x67, 0x32, 0x94, 0xe2, 0x90, 0x1e, 0x34, 0x7e, 0x48, 0x66, 0x31, 0xe4, 0x89, 0x82, 0xe0, 0x0a, 0x6d, 0xa9, 0xee, 0x33, 0x8f, 0xe5, 0x9e, 0xf2, 0xf1, 0x33, 0xb1, 0xd6, 0x49, 0xac, 0x0b, 0x26, 0x1d, 0x2a, 0x03, 0x4c, 0x7c, 0x1f, 0xec, 0x23, 0x89, 0x12, 0x77, 0xcf, 0x1d, 0xca, 0xee, 0x5c, 0x3c, 0xa7, 0xc7, 0xd8, 0xb6, 0xda, 0xce, 0xc9, 0x35, 0xc3, 0x85, 0x1c, 0x0b, 0xbc, 0xc9, 0x9a, 0x41, 0x32, 0x46, 0xba, 0x48, 0x9c, 0x51, 0xc7, 0x0c, 0xf5, 0x3b, 0x51, 0x0f, 0xde, 0xe7, 0x7d, 0xad, 0x3b, 0xaa, 0xdc, 0xa4, 0x9e, 0x76, 0x91, 0xb0, 0x44, 0x46, 0xd0, 0xfb, 0x58, 0x55, 0x61, 0x2c, 0x99, 0xf4, 0x23, 0x81, 0x75, 0x29, 0x5d, 0x9f, 0xea, 0xfc, 0x42, 0xae, 0x54, 0x7a, 0x48, 0x99, 0xa7, 0xb8, 0x9f, 0xa5, 0x3c, 0x4d, 0xc3, 0x28, 0x03, 0xa7, 0xd2, 0x8c, 0xda, 0x2d, 0xe2, 0x34, 0x3b, 0x08, 0xc1, 0xe5, 0x21, 0x8d, 0x79, 0x8c, 0x0d, 0xca, 0x6e, 0x79, 0x14, 0x47, 0x3c, 0x49, 0xf7, 0xb1, 0xbf, 0x3f, 0xc4, 0xd1, 0x85, 0x3e, 0x03, 0xe2, 0x43, 0x8e, 0x0d, 0x83, 0xc5, 0xe9, 0x16, 0x12, 0x04, 0xea, 0xd9, 0x02, 0x22, 0x4e, 0x88, 0x6e, 0x34, 0x77, 0xd4, 0xa5, 0xb2, 0x46, 0x90, 0x47, 0x97, 0x4e, 0xd3, 0xe6, 0x71, 0x58, 0x1d, 0xac, 0xda, 0xd3, 0x74, 0xb3, 0x77, 0xef, 0xfe, 0xab, 0x13, 0x90, 0xaf, 0x4d, 0xec, 0x18, 0xdb, 0x16, 0xc4, 0xb0, 0xc1, 0x9a, 0xb5, 0xeb, 0xb8, 0x74, 0x11, 0x30, 0x5d, 0x4d, 0x7d, 0x42, 0x78, 0xe6, 0x1a, 0x38, 0x49, 0x37, 0x1c, 0xd1, 0x65, 0x6f, 0x23, 0xbe, 0xcb, 0xa7, 0xc9, 0x66, 0x93, 0xcb, 0x99, 0xbd, 0xf3, 0x42, 0xce, 0x63, 0x26, 0xdd, 0x24, 0xbc, 0xe7, 0x6c, 0x27, 0x9c, 0xbd, 0xf3, 0xc2, 0x0d, 0x83, 0xbf, 0xf0, 0xd0, 0x46, 0x34, 0x7a, 0xf1, 0xf0, 0x62, 0xef, 0x3f, 0x84, 0xf7, 0xd7, 0x3e, 0x8b, 0xee, 0xdc, 0xd0, 0x66, 0x62, 0xaf, 0x10, 0x7c, 0xa5, 0x97, 0x08, 0x7f, 0xef, 0xbe, 0x7a, 0xf1, 0xc2, 0xe2, 0xaf, 0x58, 0x74, 0x1b, 0xeb, 0x57, 0xfb, 0xd7, 0x0f, 0xf2, 0xd5, 0xab, 0x38, 0x7e, 0xf1, 0x4b, 0x0c, 0xf9, 0xe6, 0x4f, 0x5d, 0x39, 0xfb, 0x4c, 0xa8, 0xee, 0xba, 0x37, 0x57, 0xac, 0x3f, 0x77, 0x33, 0x8d, 0xe7, 0x2b, 0xed, 0x38, 0xdb, 0x7a, 0xe2, 0x07, 0xea, 0x23, 0x9f, 0x67, 0xba, 0x3f, 0x67, 0x80, 0x73, 0x05, 0x50, 0xc6, 0x72, 0x00, 0x9b, 0xa0, 0x56, 0x2c, 0x2b, 0x8f, 0xb9, 0x49, 0xe9, 0x9b, 0x83, 0x5b, 0xe7, 0x27, 0x1d, 0xed, 0x62, 0x16, 0xa7, 0x85, 0xe4, 0xff, 0xa5, 0xfc, 0xf6, 0xd5, 0xd1, 0xfa, 0xcd, 0xbb, 0xf7, 0x57, 0xc3, 0x6c, 0x03, 0x44, 0x2c, 0xac, 0x43, 0xac, 0x4b, 0x6a, 0xd5, 0x9d, 0x29, 0xf5, 0x61, 0x6d, 0x91, 0x79, 0x34, 0x8f, 0x96, 0xa5, 0x29, 0xf0, 0xe9, 0xfe, 0xd3, 0xb5, 0x8a, 0x85, 0xb9, 0xf0, 0x9d, 0x26, 0x18, 0xd0, 0x05, 0x0a, 0xed, 0xa7, 0x5b, 0x80, 0x9e, 0xfe, 0xa4, 0x9b, 0x14, 0xb6, 0xaa, 0x97, 0xa7, 0xd4, 0x08, 0x25, 0x23, 0x3f, 0x85, 0x76, 0x3a, 0xbc, 0xa0, 0x8a, 0xff, 0xba, 0x6b, 0x9e, 0x6e, 0x48, 0x3e, 0xb6, 0x65, 0x9d, 0xa8, 0x63, 0x24, 0x35, 0xf6, 0x31, 0xbf, 0xac, 0xb3, 0xc9, 0xd8, 0xc5, 0xfa, 0x69, 0x5a, 0xad, 0x71, 0x35, 0xe3, 0x25, 0x2c, 0x36, 0x19, 0xf6, 0xb1, 0x02, 0x21, 0x07, 0x83, 0x2c, 0xd6, 0x42, 0xe3, 0x48, 0x11, 0xca, 0x87, 0xe5, 0xe9, 0xba, 0x01, 0x4a, 0x58, 0x99, 0xce, 0x26, 0x73, 0x83, 0x07, 0x0d, 0xf8, 0x3d, 0x97, 0x18, 0xd4, 0xa6, 0x99, 0xe9, 0x78, 0x2e, 0x32, 0x38, 0x77, 0xf0, 0xd6, 0xdb, 0xdd, 0xdb, 0x34, 0x8c, 0xba, 0x35, 0x62, 0x9b, 0x4a, 0x6f, 0xe9, 0xf6, 0x92, 0xed, 0xb2, 0x78, 0x3c, 0xa5, 0xd9, 0x96, 0x4d, 0x51, 0x1e, 0x9b, 0x04, 0x04, 0x24, 0x11, 0x32, 0x4f, 0x33, 0x79, 0x19, 0x86, 0xbc, 0xf9, 0xf8, 0xee, 0xca, 0xed, 0x6d, 0x10, 0xac, 0xd3, 0xec, 0x9a, 0xda, 0x2a, 0x48, 0xce, 0xd5, 0x26, 0x0d, 0xfa, 0xeb, 0x9a, 0x46, 0xe1, 0xba, 0xdb, 0xdd, 0xce, 0xe6, 0xba, 0x48, 0x33, 0x51, 0x03, 0xbf, 0xe9, 0xaa, 0xfd, 0x34, 0x0a, 0x85, 0xae, 0x47, 0x38, 0x97, 0x31, 0x7e, 0xaa, 0xc4, 0xa2, 0x2b, 0x21, 0x0a, 0x93, 0xd8, 0x37, 0x25, 0x7f, 0x5b, 0x96, 0xf1, 0x08, 0xf1, 0xa9, 0xaa, 0x86, 0x7a, 0xa3, 0xda, 0x48, 0xab, 0x54, 0xa7, 0x01, 0x73, 0xaf, 0xef, 0x41, 0xe6, 0x22, 0x84, 0x92, 0x78, 0xff, 0xcd, 0xdf, 0xe0, 0x22, 0x3b, 0x63, 0x9b, 0x65, 0xf5, 0xb6, 0x33, 0xb9, 0xbd, 0x35, 0x12, 0xbf, 0xb7, 0x68, 0xe8, 0x97, 0xe5, 0xac, 0xec, 0x77, 0xbb, 0x2c, 0xc4, 0x36, 0xe5, 0x51, 0x1c, 0xcd, 0x49, 0xcc, 0x76, 0x6d, 0xf5, 0x53, 0x6a, 0x71, 0xcb, 0x32, 0x6e, 0x85, 0x13, 0xf4, 0x8e, 0x3a, 0x5f, 0x65, 0x4d, 0xd3, 0xe7, 0xa8, 0x85, 0xb7, 0x90, 0x4a, 0x36, 0x5c, 0x95, 0x89, 0x2c, 0xca, 0x2c, 0x4e, 0xa8, 0x3f, 0x3e, 0x26, 0x5a, 0x96, 0x71, 0x99, 0x89, 0x88, 0x8e, 0x61, 0x42, 0xd7, 0xe3, 0xc9, 0x3e, 0xb8, 0x4c, 0x7a, 0xbe, 0x7f, 0xdb, 0xbe, 0xe9, 0x1e, 0xaf, 0xc4, 0x40, 0x4d, 0x06, 0x6c, 0x6b, 0x8d, 0x3c, 0xf1, 0x13, 0x90, 0x82, 0x9e, 0xd9, 0xe7, 0x9e, 0x83, 0xe1, 0xc4, 0xb9, 0x91, 0xa1, 0x44, 0xbc, 0xf0, 0xc2, 0xb6, 0xec, 0xbf, 0x11, 0x48, 0xfc, 0x17, 0x46, 0x90, 0xb7, 0xef, 0x3e, 0x5c, 0xd1, 0x32, 0xa4, 0xa3, 0x8a, 0xf3, 0xa0, 0xc3, 0xf3, 0x8c, 0xf3, 0xe9, 0xe9, 0x25, 0x7d, 0xe3, 0x44, 0xbd, 0x85, 0x3f, 0x7f, 0x83, 0x56, 0xa4, 0xb9, 0xf8, 0xf8, 0x7c, 0x54, 0xf1, 0xa9, 0x44, 0xc2, 0x0c, 0xa0, 0xa0, 0x5d, 0x64, 0x16, 0x69, 0xae, 0xcd, 0x9d, 0xf7, 0x40, 0x09, 0xba, 0xec, 0xb8, 0x31, 0x47, 0x32, 0x2d, 0x49, 0x84, 0x2c, 0x03, 0x7a, 0xa4, 0x51, 0x99, 0x67, 0x74, 0x41, 0x50, 0x93, 0xd3, 0xd5, 0x8a, 0x69, 0x9b, 0x95, 0x4a, 0xe5, 0x29, 0x35, 0x37, 0xa4, 0x92, 0x5d, 0x88, 0x20, 0x64, 0xd7, 0x36, 0xa8, 0x92, 0x12, 0xdf, 0x82, 0x4e, 0x2a, 0xc4, 0x67, 0x23, 0x78, 0x16, 0x6b, 0xdc, 0xd4, 0xe6, 0xb0, 0x4d, 0x45, 0x74, 0xb6, 0xb3, 0x8a, 0x5d, 0xaa, 0x42, 0x2a, 0x75, 0x61, 0xdb, 0xd8, 0xf3, 0x6d, 0x39, 0x9e, 0x6f, 0x7d, 0xcb, 0xcc, 0xa4, 0x47, 0x1a, 0xcc, 0x43, 0x3d, 0xe2, 0x39, 0x1d, 0x76, 0x26, 0x79, 0xda, 0xaa, 0x94, 0x4b, 0x10, 0xae, 0x94, 0x27, 0x89, 0xc3, 0x89, 0x32, 0xc6, 0xb7, 0x82, 0xc5, 0xe1, 0x2e, 0x8b, 0xa2, 0xd0, 0x83, 0x31, 0xa0, 0xcb, 0x54, 0x66, 0x11, 0x87, 0x5e, 0xec, 0xc4, 0x9e, 0x1b, 0x3d, 0x77, 0xe1, 0xec, 0x73, 0xfe, 0x7a, 0x0f, 0xe6, 0x38, 0x01, 0xe1, 0x49, 0xa3, 0x4c, 0x7a, 0x1d, 0x46, 0xa0, 0x09, 0xe1, 0x22, 0xde, 0x04, 0x3e, 0xf6, 0x78, 0x53, 0xac, 0x43, 0x6f, 0xde, 0x74, 0xe9, 0xcd, 0x91, 0x42, 0xf7, 0x4d, 0x92, 0xf0, 0xd4, 0xdc, 0x5f, 0x09, 0x2c, 0x0c, 0x4c, 0x2a, 0x98, 0x32, 0xf7, 0x99, 0x6c, 0x5b, 0x1a, 0x59, 0x9c, 0xe7, 0x79, 0xfe, 0x84, 0x8a, 0x34, 0x10, 0x4b, 0x53, 0xe1, 0x95, 0x99, 0x11, 0xce, 0x4c, 0x1b, 0x17, 0xec, 0x6e, 0x2b, 0xdd, 0xb4, 0x82, 0xe0, 0x11, 0x4a, 0x94, 0xc0, 0xff, 0x48, 0x53, 0x10, 0xa9, 0x5a, 0x57, 0xd2, 0xe5, 0x69, 0x49, 0x7c, 0xa9, 0xbf, 0x60, 0xd7, 0x6a, 0x48, 0x14, 0x33, 0x59, 0x6d, 0x77, 0xb4, 0x6d, 0x73, 0x43, 0xe4, 0xd3, 0x6c, 0x21, 0xbc, 0xc9, 0xac, 0xd1, 0xe6, 0x96, 0xf3, 0xd9, 0x9b, 0x3b, 0x2a, 0xae, 0x54, 0x54, 0xc3, 0xa7, 0xab, 0x63, 0xae, 0x4d, 0xad, 0x9c, 0x36, 0x37, 0x6c, 0x21, 0xb2, 0x69, 0xaa, 0x11, 0x3b, 0x5f, 0x19, 0x99, 0x99, 0x9c, 0x16, 0xbe, 0x22, 0x73, 0x69, 0xf5, 0x76, 0x23, 0x68, 0xad, 0x72, 0x42, 0x7e, 0x6d, 0xee, 0x44, 0x6a, 0x69, 0xd9, 0x12, 0xea, 0x23, 0x2e, 0x34, 0xe6, 0x58, 0x98, 0xcb, 0x84, 0x49, 0x29, 0x2e, 0x4b, 0xed, 0x3c, 0x36, 0x6f, 0x3f, 0xd2, 0xf5, 0x61, 0x2b, 0x5f, 0x47, 0x6b, 0x74, 0x99, 0x43, 0xd3, 0x7b, 0xf5, 0x69, 0xa1, 0xeb, 0x21, 0x2c, 0x53, 0xd1, 0xb2, 0x9c, 0xf4, 0x0a, 0x1e, 0x42, 0xd5, 0x7f, 0xd4, 0x9a, 0x65, 0x69, 0x0b, 0x3b, 0x8d, 0x51, 0x51, 0xa3, 0xa0, 0x0b, 0x2c, 0x8f, 0x39, 0x4d, 0xf0, 0xd2, 0x14, 0xaf, 0x3b, 0xd3, 0x17, 0xd2, 0x51, 0xd6, 0x46, 0x51, 0xde, 0xa0, 0xf6, 0xda, 0xb6, 0xab, 0x8a, 0x8e, 0xae, 0x8a, 0xd4, 0x75, 0x87, 0xef, 0xe0, 0x77, 0xd1, 0x14, 0x90, 0x37, 0xd8, 0x78, 0x07, 0xc5, 0x32, 0xae, 0xcd, 0xb1, 0x8b, 0x86, 0x78, 0x2d, 0xf2, 0x24, 0x55, 0x70, 0x7e, 0xc6, 0x15, 0x74, 0x78, 0x18, 0x1d, 0x0e, 0xfb, 0x2f, 0x53, 0x3b, 0x5f, 0x3b, 0xa1, 0xfe, 0xfd, 0x63, 0x7b, 0xa5, 0x4f, 0x60, 0xbe, 0x0e, 0x51, 0xc5, 0xd3, 0xd2, 0x3b, 0x6c, 0x85, 0x55, 0xd6, 0xd4, 0x83, 0x23, 0x6b, 0xd2, 0x6b, 0x27, 0x36, 0x4c, 0xcb, 0x2f, 0x94, 0xe7, 0x4e, 0x14, 0x42, 0x2a, 0x4b, 0x65, 0x54, 0x88, 0xcf, 0xe9, 0xe4, 0xb2, 0x6d, 0x10, 0x58, 0x0d, 0xd8, 0x67, 0x6d, 0x26, 0xf3, 0x5c, 0xe5, 0x59, 0x5e, 0x16, 0xe7, 0x38, 0xd0, 0x42, 0xb2, 0x55, 0x58, 0x91, 0x09, 0x35, 0x28, 0xa8, 0xa0, 0xcd, 0x9b, 0x2a, 0x4d, 0x13, 0x0d, 0x0b, 0x92, 0x1d, 0xb4, 0xd9, 0xbd, 0x4e, 0x53, 0x2f, 0xd0, 0x51, 0x14, 0xa7, 0x1c, 0x64, 0x3f, 0x21, 0x61, 0x14, 0xf1, 0xcb, 0x54, 0x27, 0xcc, 0x62, 0x13, 0x5f, 0x4e, 0xa4, 0x9f, 0x1d, 0xbe, 0x4e, 0xf3, 0x04, 0x66, 0xc8, 0xac, 0x45, 0xcf, 0xec, 0xb4, 0x9e, 0x56, 0x5a, 0x99, 0x30, 0xfb, 0x97, 0xaa, 0xb3, 0xa0, 0x3b, 0x49, 0x68, 0x0e, 0x14, 0x5d, 0xf3, 0x10, 0x73, 0x19, 0x53, 0x9d, 0x26, 0x56, 0x9e, 0xa0, 0xf2, 0x00, 0x9d, 0xa5, 0xad, 0x68, 0xea, 0x12, 0x12, 0x1b, 0x9e, 0x91, 0xb2, 0xd5, 0x32, 0xa7, 0x16, 0x65, 0x44, 0x62, 0x95, 0x66, 0x31, 0x96, 0x59, 0xa2, 0x68, 0xfa, 0x8b, 0x90, 0x71, 0x72, 0x73, 0xa0, 0xe0, 0x95, 0x6a, 0xb9, 0x67, 0x32, 0x88, 0x95, 0xbf, 0xe7, 0x71, 0xf4, 0x09, 0xeb, 0xff, 0xe1, 0xb2, 0x48, 0xf6, 0xd8, 0x7e, 0x6c, 0x3e, 0x5e, 0x81, 0x23, 0xd2, 0x9d, 0xef, 0xdc, 0x25, 0xae, 0x6b, 0x4d, 0x2e, 0xdd, 0x76, 0x4c, 0x23, 0x36, 0xd6, 0x55, 0xd3, 0x45, 0xd5, 0x20, 0x5a, 0x8b, 0xa3, 0x5d, 0xca, 0x35, 0x32, 0x46, 0x5d, 0xca, 0xd6, 0x7f, 0x1b, 0x2d, 0x31, 0xef, 0x1f, 0xdf, 0xbe, 0x7f, 0x83, 0x9d, 0x46, 0x17, 0x6f, 0x33, 0x6b, 0x5d, 0x69, 0x4c, 0x9e, 0x76, 0x6d, 0x32, 0x60, 0xb1, 0x06, 0x06, 0x10, 0xb4, 0x1d, 0xad, 0x27, 0x3d, 0x38, 0xab, 0x11, 0x67, 0xcb, 0xc9, 0x1d, 0x46, 0xca, 0x61, 0xed, 0x62, 0x29, 0x24, 0xf6, 0x3a, 0xe2, 0x8e, 0x96, 0xc2, 0x03, 0x98, 0xa4, 0x12, 0x08, 0x9e, 0x45, 0xaa, 0xa4, 0x8a, 0x3e, 0x3a, 0xd8, 0x2b, 0x54, 0xa4, 0x64, 0x9a, 0x8b, 0xe0, 0xa0, 0x74, 0x1e, 0xd3, 0x35, 0x91, 0x29, 0x96, 0x29, 0x22, 0x85, 0xca, 0x0b, 0x3c, 0x2b, 0x74, 0x88, 0xc7, 0xaa, 0x90, 0xd1, 0xbd, 0x0b, 0xba, 0xc1, 0xee, 0xfd, 0x5b, 0x80, 0x3f, 0x4b, 0x23, 0x27, 0x0e, 0xdd, 0xe0, 0xb0, 0x7f, 0xd8, 0x5f, 0xc6, 0x1a, 0x1f, 0x49, 0x51, 0xb3, 0xb5, 0x5f, 0xd8, 0xb0, 0xb8, 0x74, 0xc1, 0xdb, 0x02, 0xce, 0x38, 0xd9, 0xd6, 0x6f, 0x9d, 0x4b, 0xf3, 0x4f, 0x85, 0x73, 0xbb, 0x8c, 0xd3, 0x3c, 0x1e, 0x6d, 0x0e, 0x97, 0xaa, 0xb4, 0x11, 0xa6, 0x94, 0x40, 0x36, 0x51, 0x80, 0xf0, 0x2a, 0x0c, 0x63, 0x4c, 0x68, 0x51, 0xaa, 0xa6, 0xe1, 0x4d, 0x50, 0xaa, 0x92, 0xee, 0x69, 0x25, 0xba, 0x08, 0x6c, 0xc1, 0x46, 0x6b, 0x95, 0x54, 0x2d, 0x35, 0x7f, 0x6a, 0xa6, 0x82, 0xdf, 0x6b, 0x19, 0x87, 0xd7, 0xfe, 0x87, 0xcb, 0x94, 0xa7, 0xb1, 0x6d, 0x9c, 0x46, 0x6b, 0xa1, 0x5b, 0xee, 0x01, 0x7c, 0x7c, 0x61, 0xb3, 0xb5, 0xfc, 0xd6, 0x35, 0x10, 0xdb, 0x14, 0xd5, 0x6d, 0x8e, 0x52, 0x96, 0x98, 0xe9, 0x57, 0x55, 0x56, 0xd5, 0x9a, 0xae, 0x9e, 0xda, 0x28, 0xa2, 0xa9, 0xe3, 0x6c, 0x53, 0x33, 0xa5, 0x3e, 0x35, 0xf3, 0xe6, 0xa8, 0x2e, 0x15, 0x74, 0xb1, 0x91, 0x51, 0x5e, 0x60, 0x57, 0x86, 0x70, 0x74, 0x94, 0x68, 0x2f, 0xfa, 0x73, 0x2b, 0xf2, 0x74, 0xe1, 0x7e, 0x7b, 0xff, 0xe1, 0x23, 0x5d, 0xd2, 0x8a, 0x9d, 0xc5, 0x66, 0x88, 0x68, 0x07, 0x74, 0xa4, 0xa7, 0xfe, 0x5c, 0x8d, 0xbd, 0xb7, 0xd2, 0x00, 0x7e, 0x3a, 0x82, 0xa7, 0x7b, 0x40, 0xa1, 0x4a, 0x6d, 0x31, 0x40, 0x80, 0xf7, 0x90, 0xde, 0xcb, 0xce, 0xb7, 0x76, 0xfe, 0xfe, 0xbb, 0x9f, 0xbe, 0x7b, 0xf8, 0xe9, 0x95, 0xfd, 0xad, 0xf3, 0xca, 0x7a, 0xf9, 0xfa, 0xc5, 0x8f, 0x3f, 0xbc, 0xbe, 0xfe, 0xc9, 0x72, 0x6f, 0x6f, 0xef, 0xac, 0x97, 0xdf, 0xbd, 0xb4, 0xb2, 0x03, 0x73, 0xa2, 0x57, 0xc1, 0xe1, 0x10, 0xbc, 0x7c, 0xb5, 0xe7, 0x0f, 0x2f, 0xdc, 0x57, 0xf7, 0x37, 0xa1, 0x1b, 0xc9, 0xd7, 0x92, 0x7d, 0x67, 0xb3, 0x97, 0xf7, 0x8e, 0xe5, 0x45, 0xde, 0x2e, 0x8a, 0x05, 0x8f, 0xdc, 0xfb, 0x1f, 0x5f, 0x73, 0x6f, 0x1f, 0xc9, 0xdb, 0x1f, 0xd9, 0x17, 0xd6, 0xfd, 0x9b, 0xcb, 0xf6, 0xdb, 0xbb, 0x0e, 0xd2, 0xfa, 0x8a, 0x8d, 0x7a, 0xb0, 0x7b, 0x46, 0xc7, 0x9a, 0x54, 0x5c, 0xab, 0x2d, 0x6a, 0xfb, 0x61, 0xbf, 0x7e, 0xa0, 0xfb, 0xe2, 0x56, 0x04, 0x6d, 0x8b, 0xef, 0x8a, 0x8c, 0x2e, 0xa7, 0x3a, 0xe6, 0x55, 0x92, 0xd0, 0xc8, 0x32, 0x44, 0x34, 0xb8, 0x8a, 0x77, 0x4d, 0x07, 0x01, 0x80, 0x20, 0x96, 0x35, 0x47, 0xca, 0xf5, 0x53, 0x43, 0x53, 0x57, 0x82, 0x34, 0x26, 0x8a, 0x8a, 0x7a, 0xb0, 0x3a, 0x8f, 0x6d, 0x97, 0x37, 0x79, 0xd5, 0xd1, 0x78, 0x9b, 0xb6, 0xa0, 0x77, 0xb5, 0x80, 0x7e, 0x6b, 0x4b, 0xba, 0x4f, 0xf3, 0x98, 0xfb, 0x65, 0x46, 0xb5, 0xc9, 0xfc, 0x10, 0xfa, 0x97, 0x5d, 0xad, 0xfb, 0x9e, 0xfe, 0xd2, 0xef, 0xab, 0x31, 0x1a, 0xd1, 0x49, 0x49, 0x04, 0x7b, 0x76, 0x66, 0x7b, 0xd4, 0x82, 0xea, 0x44, 0x5c, 0x9b, 0x9d, 0x68, 0xf2, 0xa1, 0x3c, 0x8f, 0x2c, 0x4c, 0x45, 0x5a, 0x6f, 0x25, 0xfa, 0xa6, 0x8c, 0x27, 0x6f, 0x54, 0x2a, 0x1b, 0xd6, 0x1c, 0xc2, 0xbb, 0x97, 0x5e, 0x78, 0x1f, 0x84, 0xbe, 0xf4, 0x13, 0x3b, 0x08, 0x0e, 0xa1, 0xf5, 0x67, 0x56, 0xe2, 0x17, 0x5e, 0xfb, 0x70, 0xd9, 0x7e, 0xa3, 0xbf, 0x64, 0x46, 0x81, 0x3b, 0x03, 0x4d, 0xff, 0x43, 0x08, 0xa0, 0x31, 0x2e, 0xab, 0x11, 0x2f, 0x02, 0x50, 0xb2, 0x4e, 0x9f, 0xdd, 0x59, 0x42, 0xf3, 0x6f, 0x07, 0x76, 0x12, 0xff, 0x6d, 0x34, 0x90, 0xbc, 0x7f, 0xf7, 0x8e, 0x66, 0x4d, 0xb3, 0xd5, 0xcc, 0x40, 0x99, 0x68, 0x22, 0xac, 0xad, 0x47, 0xb7, 0x77, 0x46, 0xcb, 0x5a, 0xe1, 0x49, 0x10, 0x13, 0x6d, 0x61, 0x7f, 0x71, 0x0b, 0x2c, 0x92, 0x59, 0xb4, 0xe7, 0xec, 0x85, 0x5b, 0x74, 0xd7, 0x51, 0x56, 0x55, 0x15, 0x28, 0x6d, 0x95, 0x42, 0x5d, 0x37, 0xd4, 0xaa, 0x4b, 0xf7, 0x94, 0x10, 0xd7, 0xc2, 0xfa, 0x33, 0xc7, 0x63, 0x2d, 0xdd, 0x25, 0xd0, 0xd2, 0x18, 0x6a, 0xc5, 0x33, 0x91, 0x51, 0x07, 0xb2, 0x22, 0xc0, 0xa1, 0xfc, 0xc7, 0x76, 0x23, 0x10, 0x1d, 0x48, 0x51, 0xf7, 0x45, 0x59, 0x8b, 0xb6, 0xec, 0xa8, 0x80, 0x50, 0x95, 0xd4, 0x2f, 0x94, 0x23, 0x6c, 0xf8, 0xbf, 0x38, 0xd6, 0xfd, 0x6a, 0xcb, 0xde, 0x83, 0x9d, 0xbe, 0x79, 0xba, 0x9e, 0x7b, 0xe4, 0xe7, 0x89, 0xa9, 0x34, 0xb9, 0x78, 0x53, 0x68, 0x5b, 0x59, 0xd9, 0x6f, 0xb4, 0xa1, 0x65, 0xc5, 0xb1, 0x80, 0x4c, 0xcb, 0x8e, 0x15, 0xdd, 0xc0, 0x42, 0xfd, 0x67, 0x66, 0x73, 0xd5, 0x9d, 0x61, 0x91, 0x5d, 0x85, 0xff, 0x38, 0x95, 0xcb, 0x95, 0x78, 0x03, 0x92, 0x07, 0x6c, 0x92, 0xf6, 0x1a, 0xdd, 0xbe, 0x68, 0x9a, 0x12, 0xf0, 0x43, 0x55, 0x07, 0xb2, 0x9c, 0x13, 0xc5, 0xac, 0x1a, 0x99, 0x64, 0x59, 0x92, 0x96, 0x95, 0x97, 0x68, 0x48, 0x6d, 0xc9, 0x43, 0x3f, 0x8e, 0xc2, 0xcb, 0xee, 0x14, 0x7b, 0xff, 0xfe, 0x4d, 0xdb, 0x7d, 0x84, 0xba, 0x86, 0x0d, 0x27, 0x1a, 0x4b, 0xd9, 0xdb, 0x43, 0x0f, 0xd9, 0x26, 0x68, 0x10, 0x8a, 0x99, 0x7c, 0x62, 0x69, 0x48, 0xed, 0xd3, 0x49, 0xf4, 0xf3, 0xa7, 0x13, 0x5e, 0xe7, 0xff, 0x6f, 0xee, 0x5b, 0x7b, 0x1b, 0x47, 0xb6, 0xed, 0x34, 0x67, 0xce, 0x3c, 0x7a, 0xc6, 0x6e, 0x37, 0x69, 0xda, 0xa6, 0x24, 0xbe, 0xaa, 0x58, 0xac, 0x07, 0xdf, 0x54, 0xbf, 0x6c, 0x20, 0x09, 0x20, 0x5e, 0x01, 0x21, 0x82, 0x7c, 0x0a, 0x10, 0x20, 0x5f, 0x82, 0x24, 0x3f, 0x85, 0x04, 0x3f, 0xf0, 0x67, 0x67, 0xaf, 0xa2, 0xdc, 0xa7, 0xbb, 0x67, 0xe6, 0x78, 0xfa, 0xe8, 0x5c, 0x9c, 0xab, 0x9e, 0x96, 0x65, 0xc9, 0x03, 0x78, 0x77, 0x55, 0xed, 0x5a, 0xfb, 0xb5, 0x16, 0xa1, 0x94, 0x7f, 0xc9, 0x8e, 0xfc, 0x66, 0xeb, 0x1e, 0xdf, 0xd3, 0xbf, 0xe3, 0x86, 0x33, 0xef, 0x34, 0x9c, 0x34, 0xe7, 0xce, 0x40, 0x2f, 0x7b, 0xbe, 0xd0, 0x5f, 0xe1, 0xf4, 0x48, 0x7f, 0x4f, 0x5c, 0x73, 0xda, 0x83, 0xdc, 0x52, 0x71, 0x9e, 0x38, 0x45, 0x6d, 0xc7, 0x99, 0xbb, 0xe4, 0x23, 0x8b, 0xba, 0xac, 0xda, 0x1a, 0xbd, 0xb7, 0x87, 0x8e, 0x42, 0x80, 0xe2, 0x3f, 0xa4, 0x75, 0x74, 0xbd, 0xb5, 0x1b, 0x87, 0xbb, 0x5a, 0x33, 0x1c, 0x2a, 0xd4, 0x64, 0xc8, 0xd3, 0x33, 0x07, 0xaf, 0xe1, 0xf2, 0xc9, 0xf7, 0xd3, 0x5b, 0xcc, 0x1b, 0x7b, 0xb0, 0x33, 0x1c, 0x19, 0xbd, 0x16, 0xfa, 0xc8, 0x7f, 0xdc, 0xc6, 0x7f, 0x79, 0xf8, 0xf5, 0x87, 0xeb, 0x9f, 0xd3, 0x37, 0x37, 0x37, 0x3f, 0xb3, 0xec, 0xf6, 0xe6, 0xaf, 0xc9, 0xb5, 0xf7, 0xc3, 0xf7, 0x3f, 0x7e, 0xf7, 0x97, 0x7b, 0xc7, 0xe3, 0xd7, 0xe1, 0xdd, 0x0f, 0x66, 0x7f, 0x7d, 0xe7, 0xfb, 0x0f, 0xc1, 0x0f, 0xbf, 0x5e, 0x5f, 0xff, 0x78, 0x73, 0xc5, 0x93, 0xeb, 0xd7, 0xe9, 0x8f, 0xea, 0xf5, 0xef, 0x24, 0x88, 0xff, 0xd8, 0xba, 0xff, 0x74, 0xd9, 0x99, 0x7b, 0x6a, 0x0f, 0x1f, 0x9f, 0x36, 0x76, 0x58, 0x7c, 0x9c, 0x6d, 0x6a, 0x95, 0x4f, 0xfe, 0xbc, 0xf8, 0x63, 0xef, 0x69, 0x72, 0x29, 0xde, 0xe0, 0x2f, 0xb3, 0xfd, 0xb3, 0x78, 0xae, 0xe7, 0x4d, 0x38, 0x8f, 0x13, 0xc5, 0x76, 0xc8, 0xae, 0x62, 0xec, 0x82, 0x56, 0xae, 0x04, 0x27, 0x4a, 0x77, 0xa8, 0x6d, 0x55, 0xf7, 0x70, 0x76, 0x26, 0x07, 0x1b, 0xd6, 0x60, 0xe2, 0xba, 0x06, 0x4b, 0x5b, 0x57, 0x76, 0xb5, 0xc9, 0x74, 0x0c, 0x0d, 0x57, 0x3a, 0x66, 0xe4, 0x49, 0xa0, 0x43, 0x00, 0xbd, 0xeb, 0x04, 0xe5, 0xfa, 0x96, 0x22, 0x37, 0x3a, 0xb1, 0x1a, 0x11, 0xba, 0xca, 0xa5, 0xd6, 0x39, 0xdb, 0x6f, 0x2f, 0xe4, 0xe5, 0xfc, 0xf8, 0xf4, 0xe1, 0xdd, 0x06, 0x24, 0x8b, 0x47, 0x97, 0x9e, 0x27, 0xe1, 0x6b, 0x4e, 0x06, 0x9e, 0x20, 0x7f, 0x21, 0x8e, 0x76, 0x16, 0xed, 0xe8, 0x1d, 0x8f, 0x62, 0x24, 0x8b, 0x5c, 0xfa, 0xca, 0x3c, 0xba, 0xe2, 0x9c, 0x71, 0x7c, 0x7d, 0x1b, 0x44, 0x49, 0x44, 0xd8, 0x31, 0x24, 0xbc, 0xfc, 0x7d, 0xb6, 0x63, 0x96, 0x78, 0xf3, 0xdf, 0x79, 0x4f, 0x7e, 0xf3, 0xfd, 0x06, 0xdb, 0xf8, 0xc9, 0x9d, 0x4e, 0x7a, 0x5a, 0xa6, 0xd3, 0xc2, 0x87, 0x9e, 0x1f, 0x79, 0x2f, 0x7a, 0x5b, 0xc7, 0xd0, 0xc2, 0xc5, 0xd1, 0xf3, 0xf4, 0xe4, 0x7a, 0x74, 0xcc, 0xfc, 0x01, 0x93, 0xad, 0x7c, 0xd2, 0xfa, 0x9f, 0x6b, 0xc5, 0x3f, 0x6c, 0xdb, 0x8b, 0xeb, 0xf6, 0x61, 0xe3, 0x60, 0x62, 0xd5, 0x72, 0x14, 0xa3, 0x8c, 0x31, 0xfa, 0x84, 0x3c, 0xc6, 0x79, 0x06, 0xc3, 0x0b, 0x12, 0xfe, 0x28, 0x6b, 0x8f, 0xe3, 0x6c, 0x13, 0x41, 0x23, 0x3b, 0x0d, 0xf8, 0xf2, 0x3a, 0x8a, 0x1e, 0xb6, 0x5b, 0x3a, 0x4b, 0xdb, 0xc0, 0xdf, 0x5d, 0x51, 0x34, 0x12, 0xdc, 0x45, 0xb7, 0xbb, 0xdd, 0xfd, 0xdd, 0x7e, 0xbf, 0xbb, 0x75, 0x83, 0xfd, 0xce, 0xf3, 0xfd, 0xed, 0x76, 0x1b, 0xdd, 0xff, 0xb2, 0x7b, 0xd8, 0x6d, 0x31, 0xc0, 0x1f, 0xed, 0xe3, 0x5d, 0x4c, 0x87, 0x95, 0xff, 0x69, 0x2f, 0x4b, 0xb6, 0xfd, 0xe7, 0xcb, 0xf2, 0x3f, 0x7f, 0x64, 0x1b, 0x7d, 0x6b, 0xa7, 0x14, 0xc6, 0x65, 0xb0, 0xc5, 0x8c, 0xc9, 0xa7, 0x4b, 0x1b, 0x5f, 0xd0, 0x98, 0x30, 0xde, 0x20, 0x1b, 0xa0, 0xb4, 0x96, 0x26, 0x4d, 0x35, 0xdd, 0x4a, 0xa9, 0x80, 0x86, 0x78, 0x96, 0x09, 0xa3, 0xb9, 0xe1, 0x32, 0x8b, 0x40, 0xb2, 0xaa, 0xe2, 0x28, 0x8e, 0x93, 0x7d, 0x26, 0x13, 0x70, 0x86, 0x64, 0xb1, 0xc8, 0x22, 0x16, 0x31, 0x1e, 0xd0, 0x9b, 0x29, 0xa3, 0xc8, 0x2e, 0x4a, 0x13, 0xb6, 0x27, 0x3f, 0x15, 0x8a, 0xb0, 0x30, 0x46, 0x2a, 0x9e, 0xde, 0x27, 0x3c, 0xe4, 0x51, 0xbc, 0x67, 0x49, 0x10, 0xbd, 0xd4, 0xca, 0xf9, 0xf7, 0xd7, 0xec, 0xb1, 0x7d, 0x7a, 0xb7, 0xd1, 0xa7, 0x71, 0x9a, 0xe9, 0x0c, 0x0d, 0x47, 0xdd, 0xcf, 0xd3, 0x88, 0x0e, 0x0a, 0x10, 0x60, 0x21, 0xa9, 0xb0, 0x50, 0x40, 0x4a, 0xae, 0x84, 0xcd, 0xc7, 0xc9, 0x3b, 0xd2, 0x81, 0x7c, 0xd6, 0x16, 0x03, 0xe5, 0xe8, 0xda, 0x09, 0x5e, 0xb7, 0x02, 0x83, 0xc8, 0xed, 0x79, 0xe4, 0x73, 0x55, 0xbc, 0x83, 0x74, 0x82, 0x05, 0x97, 0x36, 0x4b, 0x67, 0x75, 0x92, 0x6d, 0xfa, 0x0a, 0x6a, 0x6a, 0x5d, 0xa7, 0xc1, 0x54, 0x9d, 0x66, 0x04, 0xb3, 0x8d, 0x51, 0x45, 0x41, 0xb8, 0x98, 0x1b, 0xc3, 0x63, 0x53, 0x68, 0xba, 0xbe, 0x77, 0xfb, 0x34, 0xa6, 0xa5, 0xbd, 0xbd, 0x8c, 0x8b, 0xdf, 0xda, 0x45, 0x81, 0xe7, 0xa4, 0x8f, 0x13, 0x9b, 0x5d, 0xc2, 0x1f, 0x14, 0xc3, 0x20, 0x03, 0x74, 0x72, 0x5c, 0xfa, 0x0b, 0x2e, 0x74, 0x42, 0xce, 0x13, 0x85, 0xdf, 0x23, 0xe1, 0x2e, 0xfe, 0x9c, 0x2f, 0xb1, 0xed, 0xfb, 0x4a, 0x54, 0xc8, 0x6b, 0xd9, 0x64, 0x9d, 0xd5, 0x73, 0xb2, 0x85, 0x7a, 0x0a, 0xd8, 0x64, 0x7e, 0xee, 0xa2, 0x80, 0x8c, 0x1f, 0xe6, 0xf1, 0x5a, 0xc0, 0xfc, 0x0c, 0x6a, 0x5b, 0x0d, 0x58, 0xda, 0x94, 0xd2, 0x1d, 0xf2, 0xaf, 0x07, 0xad, 0x42, 0x89, 0x16, 0x63, 0xad, 0x15, 0x84, 0xc8, 0x53, 0x9d, 0x31, 0x19, 0x51, 0x18, 0x8f, 0x54, 0xfc, 0x65, 0xb1, 0x36, 0xd9, 0xf5, 0x7e, 0x83, 0x62, 0xee, 0xe9, 0x38, 0x80, 0xa8, 0x61, 0xf0, 0xa1, 0x4b, 0xeb, 0x1f, 0xbf, 0x0c, 0x07, 0xfe, 0xd6, 0x01, 0x4e, 0x78, 0x0c, 0x23, 0x6a, 0x67, 0xd6, 0x73, 0x66, 0x4b, 0x16, 0xe5, 0x73, 0xe6, 0x18, 0x3d, 0xdf, 0x9f, 0x84, 0xd6, 0xc1, 0x16, 0x85, 0x40, 0x00, 0x89, 0x47, 0x28, 0xad, 0x93, 0x11, 0x80, 0x95, 0x5d, 0xab, 0x31, 0x86, 0xac, 0xfe, 0xd4, 0x19, 0xfb, 0xb7, 0x4b, 0xd7, 0xec, 0xfd, 0x86, 0xbc, 0x85, 0x87, 0x49, 0x11, 0x50, 0x69, 0x10, 0x22, 0x81, 0xd3, 0xf8, 0xe3, 0xe2, 0x8c, 0x85, 0x5c, 0x36, 0xb7, 0x45, 0xd7, 0x99, 0x5e, 0x67, 0x9b, 0x5a, 0x5b, 0x4d, 0x5b, 0x19, 0x0d, 0xac, 0xe2, 0xfa, 0xa7, 0x3c, 0x79, 0xa6, 0x0a, 0x09, 0xe8, 0x98, 0x63, 0x24, 0x37, 0x2b, 0x24, 0x97, 0xa5, 0x25, 0xf7, 0xcd, 0x94, 0xd0, 0xa2, 0xa0, 0x90, 0x48, 0x64, 0x45, 0xa4, 0x85, 0x92, 0xf7, 0x71, 0x98, 0xb0, 0xdd, 0x6e, 0x9b, 0xa4, 0x10, 0x61, 0x0c, 0x23, 0x76, 0xd9, 0x7d, 0xf6, 0xd8, 0xbd, 0xff, 0x48, 0x7b, 0x91, 0x60, 0x15, 0x2d, 0x13, 0x04, 0x9e, 0x41, 0x7a, 0xc5, 0x69, 0xa5, 0xf8, 0xc9, 0x9b, 0x17, 0x97, 0x4f, 0xf3, 0x89, 0x31, 0x28, 0x03, 0x4d, 0xda, 0xf5, 0x75, 0xef, 0x08, 0x21, 0xb8, 0xcb, 0x8e, 0x97, 0xf8, 0xf2, 0x3f, 0xfb, 0xb8, 0xf8, 0x3e, 0xb3, 0xb6, 0x1d, 0x8f, 0x47, 0x02, 0xbd, 0x8c, 0xdc, 0x03, 0x21, 0x10, 0xa0, 0xc4, 0x89, 0x43, 0xb6, 0xcf, 0x39, 0x91, 0xcd, 0x0b, 0xe8, 0xd9, 0x66, 0x81, 0x7c, 0x25, 0x27, 0xab, 0x08, 0x4c, 0x72, 0xdd, 0xf3, 0x7f, 0x89, 0x6d, 0xdf, 0xec, 0x1b, 0x3b, 0xf0, 0x9e, 0x7b, 0xe0, 0xf0, 0x25, 0xcb, 0x08, 0xf0, 0x33, 0x70, 0x21, 0x7a, 0xb3, 0xd7, 0x3b, 0xc7, 0xa5, 0xef, 0x99, 0xee, 0x31, 0x34, 0x43, 0xfe, 0x91, 0x1d, 0xc9, 0x73, 0xf2, 0xe1, 0x93, 0x0f, 0x59, 0xdb, 0xf7, 0x6d, 0xb1, 0xb3, 0x84, 0x43, 0x54, 0x10, 0x0e, 0xe8, 0x56, 0x15, 0x27, 0x50, 0xa0, 0x28, 0xfa, 0x23, 0xb3, 0x4e, 0x42, 0xa3, 0x8f, 0xde, 0x50, 0x11, 0x32, 0xb0, 0x06, 0x33, 0xbb, 0x0a, 0x63, 0xcb, 0x46, 0xe5, 0x46, 0x27, 0x49, 0xaa, 0x90, 0x09, 0x57, 0x2c, 0x48, 0xc3, 0xeb, 0x9d, 0x64, 0x29, 0xe7, 0xc9, 0x2e, 0xdd, 0xb2, 0x24, 0x49, 0xdc, 0x0b, 0x7d, 0x23, 0xec, 0x72, 0x4f, 0xe4, 0xfd, 0xa6, 0x19, 0xb4, 0x2e, 0x9e, 0x95, 0xd9, 0xed, 0x7b, 0x67, 0x5a, 0x7a, 0x4d, 0x56, 0x79, 0xb4, 0x23, 0xf9, 0xc4, 0x4f, 0xc3, 0xe4, 0xf4, 0xe3, 0xa2, 0x9f, 0x89, 0xeb, 0xd1, 0x6b, 0xa6, 0x14, 0x88, 0xa6, 0xad, 0x5b, 0x5c, 0x19, 0x95, 0x56, 0x79, 0xbb, 0x74, 0xf5, 0xfc, 0x80, 0x80, 0x6a, 0x9d, 0x86, 0x2f, 0xba, 0x2e, 0xd3, 0x8d, 0x29, 0x94, 0xe6, 0x45, 0xa4, 0x5a, 0x03, 0xbe, 0xfa, 0xb6, 0xec, 0xa2, 0xd2, 0x30, 0x91, 0x42, 0xf9, 0x54, 0x0b, 0x32, 0x3f, 0x97, 0x26, 0xa1, 0xcb, 0x51, 0x3c, 0x28, 0x82, 0xe6, 0x09, 0x8f, 0x2e, 0x53, 0xcd, 0x79, 0x44, 0xe3, 0x68, 0xbb, 0xf1, 0x87, 0x05, 0x44, 0xfc, 0xf3, 0x38, 0x70, 0x67, 0x9c, 0x07, 0x8f, 0xbb, 0x73, 0xcf, 0xe6, 0x79, 0xd6, 0xfe, 0x4c, 0x7b, 0xd4, 0x73, 0x3c, 0xbf, 0xd7, 0x5f, 0xe6, 0xc7, 0x51, 0x2d, 0x44, 0x9f, 0x7b, 0xd5, 0x94, 0x88, 0x42, 0x51, 0x0c, 0xac, 0xbb, 0x83, 0xaa, 0x8b, 0x92, 0x42, 0x6b, 0x23, 0x0f, 0x25, 0x3a, 0x1e, 0x0f, 0x87, 0x54, 0x77, 0xba, 0x2e, 0x4b, 0xd5, 0x15, 0x79, 0xa2, 0x4a, 0x16, 0x36, 0x9c, 0x50, 0xf0, 0x5e, 0x84, 0x55, 0x2b, 0x04, 0x13, 0x79, 0x21, 0x98, 0x89, 0xd2, 0xc8, 0x8f, 0xb7, 0x2a, 0x91, 0x69, 0x9c, 0xfc, 0xba, 0xbd, 0xe5, 0xdb, 0x38, 0xd9, 0xee, 0x08, 0xc7, 0xfc, 0x13, 0x94, 0xaa, 0x1e, 0x0f, 0xef, 0xbb, 0xb7, 0x8f, 0x9b, 0x13, 0x68, 0xe6, 0x20, 0x00, 0x8a, 0x69, 0x42, 0x9b, 0x1c, 0x39, 0x9d, 0x96, 0x4f, 0x1a, 0x0a, 0xf6, 0x81, 0x51, 0x64, 0x66, 0x39, 0xe8, 0x08, 0x38, 0x3b, 0xce, 0xbf, 0xe4, 0xac, 0x7d, 0x6b, 0x34, 0x43, 0xd6, 0x3d, 0x7e, 0x38, 0x6c, 0xe0, 0xee, 0x69, 0xe5, 0xd6, 0xc7, 0xfc, 0xf9, 0x97, 0x2f, 0xbf, 0xf9, 0xf4, 0x33, 0xe3, 0x4d, 0x62, 0x08, 0x41, 0x50, 0x28, 0xd3, 0x58, 0x22, 0x9b, 0x1a, 0x6a, 0x2c, 0x9d, 0xad, 0xfc, 0x52, 0x5c, 0x8a, 0x66, 0x91, 0xda, 0xd2, 0x4e, 0xd8, 0x21, 0xd7, 0xfa, 0xd0, 0xd4, 0x48, 0xd4, 0xd1, 0x5a, 0x66, 0x90, 0xea, 0xc5, 0xf8, 0x61, 0x57, 0xd7, 0xe0, 0x41, 0xaf, 0x70, 0x6d, 0x94, 0x06, 0xac, 0x0f, 0x79, 0x57, 0xa9, 0xca, 0xe4, 0x4a, 0xe6, 0x82, 0xb6, 0xa5, 0x60, 0x5f, 0x91, 0xa2, 0x7c, 0x6b, 0x1d, 0xea, 0xf1, 0xf0, 0xb8, 0x01, 0xe3, 0x26, 0x64, 0xee, 0x7c, 0xce, 0x66, 0x02, 0x8e, 0xc7, 0x85, 0xee, 0x00, 0x9f, 0xf0, 0xe3, 0x8c, 0xe4, 0xff, 0xc2, 0x46, 0x41, 0xee, 0xde, 0x63, 0xbe, 0x26, 0x78, 0x35, 0x81, 0xfd, 0x65, 0x1a, 0x5e, 0xc7, 0xb4, 0x9f, 0x9a, 0xa6, 0x66, 0x48, 0x44, 0xa6, 0x91, 0x0e, 0xa0, 0x50, 0x9d, 0xeb, 0xd0, 0xa0, 0xbb, 0x53, 0x40, 0x66, 0x40, 0x14, 0x61, 0x91, 0xcb, 0x87, 0x54, 0xf2, 0x48, 0xee, 0x95, 0x54, 0x65, 0x91, 0x97, 0x89, 0xa0, 0x8d, 0x5c, 0x14, 0x86, 0x7e, 0xf7, 0xd4, 0x14, 0xbc, 0xd6, 0x99, 0x51, 0x21, 0xbb, 0xd1, 0x5c, 0x13, 0xcc, 0x22, 0xcc, 0x69, 0x0a, 0x02, 0x37, 0x2a, 0xcc, 0x7c, 0xc6, 0x98, 0x1f, 0xbf, 0x60, 0xd6, 0x0b, 0x4e, 0x84, 0xcc, 0x02, 0x13, 0xcf, 0x32, 0x2e, 0x13, 0x64, 0xc3, 0xfc, 0x23, 0x5b, 0x50, 0xd6, 0x70, 0x46, 0xe1, 0x2c, 0xbd, 0x3f, 0x3b, 0x84, 0x28, 0x31, 0x7c, 0xa1, 0x4f, 0x84, 0x43, 0x8e, 0xae, 0xbf, 0x8c, 0xae, 0x33, 0x2e, 0x37, 0x32, 0x83, 0xd8, 0x2c, 0x20, 0xb1, 0xd2, 0x46, 0xa4, 0xd2, 0xd8, 0x9a, 0x53, 0x96, 0xc3, 0xae, 0x24, 0x8a, 0x85, 0x94, 0x85, 0xc9, 0x33, 0x03, 0x2e, 0x7e, 0x13, 0x14, 0x05, 0x7d, 0xa4, 0xf4, 0x8e, 0xde, 0x4c, 0x8a, 0xbc, 0x92, 0x06, 0x6d, 0x91, 0x74, 0x87, 0x57, 0x42, 0xe5, 0x71, 0x26, 0x54, 0x24, 0x74, 0x6c, 0xf4, 0x3e, 0x53, 0x69, 0xc8, 0x44, 0x94, 0x0a, 0x0c, 0xb6, 0x66, 0x97, 0x65, 0xb2, 0x1e, 0xdf, 0xbe, 0x6d, 0xdf, 0xbe, 0xdd, 0x38, 0x1a, 0xfc, 0xd8, 0x7e, 0xbf, 0x0c, 0x0b, 0x64, 0x3f, 0x8f, 0xe3, 0x60, 0xe7, 0x2f, 0x86, 0xde, 0x73, 0xa0, 0x83, 0x31, 0x2c, 0xce, 0xe2, 0xd1, 0x62, 0x2e, 0x33, 0xef, 0x51, 0x9c, 0xa2, 0xff, 0x6e, 0x58, 0x96, 0x08, 0x9e, 0x05, 0x64, 0x8f, 0xed, 0xee, 0x66, 0x45, 0xae, 0x95, 0x90, 0x61, 0x41, 0x8b, 0x97, 0xa4, 0x77, 0xc1, 0x96, 0xf0, 0x3c, 0x19, 0x2b, 0x08, 0xe8, 0xef, 0x44, 0x6e, 0xb8, 0x11, 0xb4, 0xc3, 0x54, 0x4c, 0xd6, 0x30, 0x99, 0xb3, 0x98, 0xb1, 0x62, 0xaf, 0x78, 0x8e, 0xb9, 0x5c, 0x3f, 0x2b, 0x7c, 0x56, 0xc8, 0x34, 0x8c, 0xef, 0xbc, 0x90, 0x73, 0x8a, 0xbd, 0xf9, 0x5d, 0xbc, 0x8f, 0xf6, 0xbe, 0x7f, 0x99, 0x65, 0xef, 0x0e, 0x6f, 0xdf, 0xbe, 0xdf, 0x0c, 0x5c, 0x8f, 0x7a, 0x72, 0x16, 0x8a, 0xa6, 0x35, 0xed, 0xca, 0x99, 0x6c, 0x9c, 0xd0, 0xcc, 0xb9, 0x1c, 0xad, 0x4c, 0xa1, 0x7e, 0xa6, 0xb2, 0x74, 0xf9, 0xf3, 0xab, 0x9b, 0x34, 0x47, 0xb7, 0x01, 0xb4, 0x65, 0x70, 0x80, 0x5a, 0x9b, 0x9e, 0x43, 0x56, 0x0e, 0xb3, 0x4d, 0xf6, 0xe9, 0x60, 0x3b, 0xc2, 0x4b, 0xfb, 0x5e, 0x1b, 0x1d, 0xea, 0x2e, 0xa4, 0x13, 0x66, 0xca, 0x5a, 0x14, 0x3a, 0x6b, 0xf3, 0x03, 0x12, 0x04, 0x36, 0x91, 0x7e, 0x08, 0x6e, 0xfe, 0xfa, 0xea, 0xaf, 0x6f, 0x7e, 0xbe, 0xfa, 0xf9, 0x7a, 0xff, 0xb0, 0x4d, 0x62, 0x0a, 0x62, 0x08, 0x5d, 0xed, 0xfd, 0x0b, 0x95, 0xd6, 0x1f, 0xdf, 0x1f, 0x40, 0xa5, 0x67, 0xa9, 0x45, 0xfb, 0xa9, 0x27, 0x03, 0xf9, 0x9f, 0x7b, 0x10, 0xda, 0xaf, 0x8a, 0xbc, 0xa5, 0x43, 0xc1, 0xdb, 0x92, 0x07, 0xc6, 0xb4, 0x07, 0x13, 0xee, 0x7d, 0xef, 0x3e, 0x32, 0x2a, 0xde, 0xe9, 0x82, 0x6e, 0xe3, 0x12, 0xc4, 0xd8, 0xe0, 0xc7, 0x36, 0x96, 0x23, 0x3b, 0xcf, 0x73, 0xad, 0x0b, 0x4d, 0x58, 0xb3, 0xa0, 0x68, 0x45, 0x97, 0xa0, 0xcf, 0x2e, 0x29, 0x80, 0xa1, 0x93, 0x45, 0x6f, 0xe0, 0xba, 0x03, 0xc9, 0x34, 0x6d, 0x66, 0x25, 0x05, 0x7f, 0xf6, 0x8c, 0x97, 0x8d, 0x22, 0x93, 0x75, 0x6f, 0x2d, 0x75, 0xc8, 0x44, 0xd7, 0xda, 0x30, 0x83, 0xc5, 0xd1, 0x32, 0x97, 0x39, 0x6b, 0xfe, 0x0a, 0x35, 0x7a, 0x74, 0xf3, 0x20, 0x59, 0x4c, 0xff, 0xb9, 0xcc, 0x61, 0xf6, 0x03, 0xe6, 0xe2, 0x56, 0xa3, 0x68, 0x8b, 0x2e, 0xea, 0xd2, 0x36, 0x1c, 0xa0, 0x98, 0x71, 0x20, 0x27, 0xf9, 0xef, 0xea, 0xf7, 0xff, 0x11, 0xeb, 0xde, 0xbf, 0xdb, 0x60, 0x66, 0x9c, 0xd9, 0x41, 0x48, 0x7d, 0xe6, 0x75, 0x77, 0x9f, 0x53, 0xfc, 0x9f, 0x65, 0xfb, 0x1d, 0x6b, 0xe4, 0xfa, 0x0e, 0x7a, 0x04, 0x0b, 0x74, 0x3e, 0xd2, 0xae, 0xc4, 0xac, 0xd3, 0x3a, 0x44, 0xd2, 0x1c, 0xfe, 0x83, 0x59, 0xf7, 0xf6, 0x89, 0xb0, 0x16, 0x21, 0x2d, 0x48, 0x90, 0xeb, 0xd3, 0xb0, 0x9c, 0x66, 0xfa, 0x4a, 0x57, 0x00, 0x86, 0x83, 0x38, 0xb9, 0x7c, 0x72, 0x96, 0x62, 0x20, 0x63, 0x4f, 0xe4, 0x5e, 0xb8, 0x3d, 0x7c, 0x0c, 0x8a, 0x41, 0xaf, 0xbd, 0xed, 0xed, 0xee, 0x8d, 0xbf, 0xf5, 0xaf, 0x77, 0xbb, 0x5f, 0x9c, 0x5f, 0x5f, 0x27, 0xdb, 0x9f, 0x82, 0xbd, 0x7f, 0xb5, 0xbb, 0xfe, 0xf5, 0xe6, 0xd5, 0xeb, 0xe4, 0x87, 0xe0, 0x21, 0xfd, 0xe9, 0xca, 0xdf, 0xed, 0x82, 0xfd, 0x4d, 0xf8, 0xfa, 0xee, 0xbb, 0xef, 0xbd, 0xe8, 0xfe, 0x55, 0xc2, 0xef, 0x42, 0xd7, 0x7d, 0x9d, 0xdc, 0xfe, 0xd9, 0x1c, 0x24, 0x59, 0xf7, 0x5f, 0x2e, 0xf3, 0x28, 0x64, 0xdd, 0x23, 0xf4, 0x17, 0x9d, 0x19, 0xd3, 0x25, 0xec, 0x04, 0x1c, 0x89, 0xb4, 0xfe, 0x32, 0x31, 0x57, 0xf7, 0x6b, 0x45, 0x11, 0xf7, 0x9b, 0x4b, 0x21, 0xb7, 0xbb, 0xc0, 0x58, 0xdc, 0x80, 0xee, 0x11, 0x59, 0x7f, 0x8b, 0xb7, 0x2a, 0x4b, 0xc7, 0xd9, 0x9c, 0x8b, 0x18, 0x68, 0x16, 0x69, 0xd2, 0x9a, 0x80, 0x56, 0xa3, 0x80, 0xb9, 0xc8, 0xaf, 0x60, 0x8c, 0xa6, 0x53, 0x87, 0xfa, 0x60, 0x0e, 0x45, 0x99, 0x13, 0x88, 0x3e, 0xb0, 0x32, 0xaf, 0x75, 0x2e, 0x21, 0x76, 0x72, 0x38, 0xd4, 0x50, 0xba, 0x2e, 0x0a, 0x70, 0xae, 0x8a, 0x4c, 0x10, 0x94, 0xcc, 0xb3, 0x94, 0x9c, 0x70, 0x1a, 0xde, 0x5e, 0x96, 0xf5, 0x7f, 0x7c, 0xff, 0xae, 0xfb, 0xf0, 0x76, 0x63, 0x37, 0xda, 0x51, 0x33, 0xc7, 0xa7, 0xdf, 0x1b, 0x85, 0x4f, 0x5a, 0xc0, 0x7e, 0xd6, 0x50, 0x24, 0x77, 0x50, 0xc5, 0xf7, 0xb5, 0x7f, 0xfc, 0x92, 0x7c, 0x1a, 0x1e, 0xa5, 0xb4, 0xb2, 0x70, 0xbb, 0x1a, 0x05, 0x41, 0x8a, 0x9e, 0x0d, 0xa1, 0xc9, 0x82, 0xdc, 0x24, 0xc1, 0x7a, 0x82, 0x1d, 0xdd, 0xa1, 0x6d, 0x52, 0x43, 0x91, 0x38, 0x79, 0xc7, 0x43, 0x15, 0x93, 0x99, 0xe6, 0x4d, 0x56, 0x36, 0xca, 0x55, 0x71, 0x70, 0x5f, 0x18, 0x42, 0x6c, 0x79, 0x4c, 0xf7, 0x5b, 0x21, 0x91, 0x72, 0x8d, 0x73, 0x26, 0x79, 0x9c, 0xf9, 0x7b, 0xe1, 0xc7, 0x5f, 0xac, 0xdb, 0x65, 0x95, 0x51, 0x58, 0x47, 0x91, 0xb6, 0x67, 0x1b, 0xcb, 0xd6, 0x8e, 0x33, 0x8f, 0x22, 0x51, 0xe7, 0x3c, 0x1d, 0x4f, 0x77, 0xf7, 0x62, 0x5f, 0x0d, 0xe7, 0x51, 0x7a, 0x66, 0x7b, 0xcf, 0x9c, 0x67, 0x9c, 0x8c, 0xd4, 0xb1, 0xf5, 0x28, 0x58, 0xb7, 0xa6, 0xb3, 0x63, 0x76, 0x84, 0xb5, 0x2c, 0x57, 0x6a, 0x07, 0xf0, 0x9c, 0xe5, 0x0d, 0x32, 0xc1, 0x5d, 0x97, 0xe7, 0xdd, 0xa1, 0x54, 0xc6, 0x2a, 0xec, 0x60, 0xea, 0xa9, 0xd4, 0x2d, 0xd8, 0xbd, 0x0c, 0x5d, 0x73, 0xb2, 0x29, 0x53, 0xac, 0x22, 0x85, 0x3e, 0xb9, 0x0c, 0x85, 0x2c, 0xd2, 0x70, 0x1f, 0xfa, 0xd1, 0x57, 0x24, 0xe8, 0xff, 0x80, 0x65, 0xb6, 0x9b, 0x7a, 0x1d, 0xfb, 0x67, 0x2e, 0x87, 0x4d, 0x56, 0x04, 0x7a, 0x72, 0x38, 0x5b, 0x8d, 0xf8, 0x1b, 0xed, 0x28, 0x9e, 0xfc, 0x55, 0x83, 0xf8, 0x26, 0x0d, 0xf6, 0x52, 0xed, 0x23, 0x59, 0x64, 0x69, 0x76, 0x9f, 0x99, 0x68, 0xb7, 0x4f, 0xb6, 0xf7, 0xfe, 0x4d, 0xb2, 0xbd, 0xbb, 0x7d, 0x08, 0xa3, 0x84, 0xdd, 0xb1, 0xed, 0x36, 0x4b, 0x3d, 0x4e, 0x1f, 0xdc, 0x05, 0xd7, 0xfe, 0x5d, 0x94, 0x07, 0xde, 0x7d, 0x1c, 0x46, 0x77, 0x51, 0xf6, 0x6a, 0x77, 0x15, 0x04, 0xe1, 0xfd, 0xab, 0x7b, 0x91, 0x51, 0x70, 0xb6, 0x4b, 0xb6, 0x61, 0x12, 0x5d, 0x3d, 0x78, 0xbb, 0xd0, 0x7b, 0x78, 0x1d, 0xbc, 0xba, 0x8b, 0xf6, 0x3b, 0x1e, 0xf8, 0x0f, 0x5f, 0x51, 0xb4, 0x7d, 0x73, 0x0e, 0xe1, 0xfd, 0xbb, 0xb7, 0x1b, 0xc2, 0x1f, 0xac, 0xd7, 0xc2, 0x17, 0x7c, 0x19, 0xfa, 0x65, 0x1e, 0xc8, 0x93, 0x50, 0x78, 0xc6, 0xb9, 0xe0, 0xf3, 0x71, 0xd2, 0xf4, 0xc9, 0x6f, 0x07, 0x42, 0xad, 0xd0, 0x69, 0x2b, 0x1b, 0xcd, 0xba, 0x26, 0x4d, 0x9b, 0x46, 0x65, 0xb6, 0x05, 0x37, 0x5f, 0x15, 0xdf, 0x72, 0x61, 0xc9, 0xcc, 0x9a, 0x8c, 0xee, 0x6d, 0x01, 0xb6, 0xc7, 0x8e, 0x75, 0x9d, 0xe4, 0xdd, 0x03, 0xf2, 0x8f, 0x4a, 0x97, 0xe9, 0xed, 0x36, 0x60, 0xfc, 0x2e, 0xd9, 0x85, 0x6f, 0x22, 0x76, 0x95, 0xec, 0xfd, 0xdf, 0xa3, 0x40, 0xa7, 0xfd, 0xf8, 0x3f, 0x2e, 0xcb, 0x21, 0xc0, 0x36, 0xe1, 0xd1, 0xf9, 0x21, 0x1f, 0x02, 0xd9, 0x0e, 0x0f, 0x44, 0x9d, 0x74, 0xde, 0x7a, 0xf2, 0x8b, 0x64, 0xad, 0xd7, 0xcf, 0xbd, 0xfb, 0x75, 0x47, 0xd3, 0x3c, 0xde, 0x6c, 0x65, 0x59, 0x6b, 0xc3, 0x9b, 0xb4, 0xb2, 0x7d, 0x15, 0x8d, 0x6c, 0x09, 0x7b, 0x05, 0x99, 0xc7, 0x77, 0x20, 0x9b, 0x16, 0x41, 0x6b, 0x1a, 0x69, 0x19, 0x60, 0x74, 0x56, 0x72, 0x51, 0xf8, 0x01, 0x2d, 0x6e, 0xc0, 0x32, 0x55, 0xa4, 0x85, 0x8a, 0x32, 0xa1, 0x45, 0xb0, 0xe7, 0xd7, 0x6c, 0x2f, 0x30, 0x8a, 0x01, 0x08, 0x19, 0xec, 0x62, 0x11, 0x05, 0x2c, 0x4d, 0xae, 0xf6, 0xfb, 0x78, 0x1b, 0x9f, 0x6d, 0xfb, 0x7f, 0x97, 0xee, 0x48, 0xba, 0x02, 0x36, 0x8e, 0x38, 0x12, 0xf2, 0x27, 0x47, 0x8f, 0xdc, 0x16, 0x24, 0x58, 0x5c, 0xda, 0x98, 0xda, 0x3b, 0xce, 0xde, 0x42, 0x87, 0xeb, 0xb7, 0x6d, 0x32, 0xd3, 0x74, 0xe3, 0x66, 0x3e, 0xa1, 0xe1, 0xd2, 0x54, 0x26, 0xab, 0xb4, 0x2c, 0x72, 0x53, 0x3f, 0xe4, 0x42, 0x60, 0x62, 0x86, 0xb0, 0x48, 0x69, 0xc2, 0xa2, 0xae, 0x45, 0x52, 0x34, 0x45, 0xad, 0x44, 0xae, 0xab, 0xc4, 0x10, 0x3c, 0x2e, 0x6e, 0x0d, 0xb9, 0x92, 0x3c, 0x56, 0x32, 0x0d, 0x64, 0x14, 0x95, 0x4a, 0x67, 0x31, 0xdb, 0x27, 0x20, 0x97, 0xce, 0x78, 0x10, 0x6a, 0xc6, 0x65, 0xb8, 0x0d, 0xb3, 0x28, 0xde, 0xdf, 0xf9, 0x0f, 0xd7, 0xf7, 0xee, 0xa5, 0x3e, 0xf2, 0x5d, 0xfb, 0x7e, 0x33, 0x72, 0xe4, 0xc1, 0x7d, 0xf0, 0xbb, 0x7b, 0xc8, 0x15, 0x93, 0x25, 0xc8, 0xd2, 0x91, 0x47, 0x71, 0xfd, 0xdf, 0x35, 0xac, 0xbf, 0x11, 0xdf, 0xe7, 0x65, 0xd9, 0x56, 0x14, 0xc1, 0xe4, 0x79, 0xdd, 0x98, 0x4e, 0x93, 0x93, 0x8f, 0x10, 0xa0, 0xe5, 0x87, 0x2a, 0xeb, 0x14, 0x37, 0x04, 0x15, 0x2b, 0x95, 0xd1, 0x85, 0x70, 0xc8, 0x80, 0x2e, 0x2b, 0x0c, 0x56, 0x12, 0x9c, 0x34, 0x4d, 0xa7, 0x58, 0x0e, 0x57, 0x72, 0x38, 0xd0, 0xfa, 0x6d, 0xb3, 0x92, 0xfc, 0x64, 0x2a, 0x82, 0x37, 0x22, 0xcf, 0x9c, 0x90, 0x0b, 0xfa, 0x07, 0xbb, 0x8d, 0x3e, 0xed, 0xc9, 0xcb, 0x7a, 0xd1, 0x20, 0x7a, 0xfd, 0xf8, 0x11, 0x81, 0x1b, 0xa1, 0x62, 0x2e, 0x16, 0xe1, 0xad, 0x5c, 0x28, 0xa7, 0x67, 0x52, 0x3d, 0x40, 0x68, 0xbc, 0x5a, 0x3e, 0x15, 0xb7, 0x67, 0x07, 0x64, 0xe8, 0xaf, 0xb7, 0x81, 0x34, 0x9e, 0x56, 0xb7, 0x2a, 0xdd, 0x9b, 0x4c, 0xed, 0x94, 0xbe, 0x0d, 0x03, 0x77, 0xbb, 0xbb, 0x7a, 0xd8, 0xd2, 0x21, 0xe2, 0x04, 0xf9, 0x69, 0x01, 0xa4, 0x64, 0xa5, 0x0a, 0xd3, 0x1f, 0xdc, 0x8c, 0xdf, 0xff, 0xc8, 0x78, 0xba, 0x4d, 0x78, 0x7c, 0xbf, 0xbd, 0xd9, 0xde, 0x85, 0x57, 0xd7, 0xf7, 0x41, 0x98, 0xfc, 0x94, 0x84, 0xfc, 0xef, 0xdf, 0xdc, 0xff, 0xed, 0xc2, 0x5d, 0xf9, 0xd8, 0xd1, 0xda, 0x39, 0xe3, 0xa7, 0x3f, 0x47, 0xd0, 0x64, 0x31, 0x48, 0xb3, 0x38, 0xe8, 0x8d, 0xa4, 0xfb, 0x8e, 0x4f, 0xfa, 0xc4, 0x46, 0x0b, 0xc4, 0xf8, 0x48, 0xb6, 0x31, 0xae, 0x45, 0x7f, 0x23, 0xd1, 0xea, 0xdf, 0xe4, 0x75, 0x5d, 0x12, 0xf6, 0xa2, 0xf0, 0xb9, 0xa5, 0x45, 0x5b, 0x0b, 0x88, 0x35, 0x7a, 0x63, 0x70, 0x13, 0xa0, 0xa9, 0xd0, 0x12, 0x80, 0x1f, 0x6a, 0x54, 0xf3, 0xf5, 0x61, 0x2d, 0x29, 0xd2, 0x07, 0x2d, 0xb4, 0xa0, 0xe8, 0x23, 0x3b, 0x2b, 0x4b, 0xf1, 0x42, 0x43, 0xf7, 0x77, 0x93, 0x19, 0xda, 0xd6, 0x10, 0xa7, 0xd1, 0xf9, 0x2e, 0x49, 0x9c, 0x30, 0xb8, 0xcc, 0xb2, 0x0f, 0x28, 0x61, 0x6e, 0xd8, 0x7c, 0x1c, 0xe7, 0xd9, 0x4e, 0x08, 0x0d, 0xf3, 0x34, 0xcd, 0x7c, 0xa0, 0xe0, 0x73, 0xd2, 0x23, 0x1b, 0x38, 0x3b, 0x8e, 0xee, 0x4c, 0x51, 0x1d, 0x32, 0x24, 0xda, 0x87, 0x08, 0x19, 0x86, 0x07, 0xed, 0xe4, 0x6b, 0x55, 0xad, 0x79, 0x04, 0x68, 0xc9, 0x74, 0x88, 0x57, 0x0e, 0x59, 0xde, 0x1e, 0x08, 0x76, 0x14, 0x07, 0xba, 0xa8, 0x53, 0xa4, 0x13, 0x70, 0xbf, 0x11, 0xee, 0x6c, 0x93, 0x43, 0xd6, 0x96, 0x64, 0x19, 0x45, 0xdd, 0xe8, 0x99, 0x8c, 0xf3, 0x24, 0x47, 0x80, 0x50, 0x66, 0x14, 0x10, 0x14, 0xd5, 0x8e, 0x49, 0x3a, 0x71, 0x71, 0x92, 0xf1, 0x84, 0x67, 0x3f, 0xb3, 0x80, 0x1c, 0x28, 0x05, 0x3c, 0x97, 0x4d, 0xbe, 0x3e, 0x7e, 0x78, 0xf7, 0x6e, 0x83, 0x2b, 0xeb, 0x68, 0xc9, 0xb4, 0x97, 0xa3, 0xfb, 0x89, 0xd6, 0xe6, 0x6f, 0x17, 0x9a, 0x7b, 0x9a, 0x29, 0x12, 0x77, 0x4e, 0xb3, 0x65, 0x28, 0x1d, 0x7a, 0x77, 0x06, 0x85, 0x83, 0x25, 0x88, 0x45, 0xaf, 0xb1, 0xcd, 0x46, 0xae, 0xb3, 0x32, 0x79, 0x83, 0xb6, 0x33, 0xd1, 0x76, 0x19, 0xa6, 0x47, 0x78, 0x96, 0x28, 0x34, 0xa7, 0xaa, 0x94, 0x87, 0x10, 0x15, 0xdb, 0x32, 0xe9, 0xd3, 0xef, 0xaf, 0x92, 0x24, 0xda, 0x07, 0x71, 0xc0, 0x33, 0x8a, 0xac, 0x45, 0xca, 0xa2, 0x2c, 0xd9, 0xb2, 0x28, 0xf6, 0x77, 0xe1, 0x76, 0xff, 0x00, 0x69, 0x79, 0xce, 0xe3, 0x50, 0x5c, 0x46, 0x09, 0x60, 0xed, 0x5a, 0xbb, 0xfa, 0xb5, 0x78, 0x56, 0xd9, 0x9d, 0xd7, 0xd6, 0x7e, 0xc8, 0x0f, 0xb8, 0x38, 0x5b, 0xfa, 0x4c, 0x53, 0xc4, 0xc1, 0x07, 0x4c, 0xf6, 0xf9, 0xfa, 0xa6, 0x00, 0xd2, 0x3a, 0x8b, 0xa8, 0xb5, 0xcd, 0x5f, 0x85, 0x50, 0xe9, 0x4a, 0x90, 0x05, 0xc2, 0x17, 0xa9, 0x32, 0xb9, 0x4f, 0x15, 0xdd, 0x8c, 0x96, 0xda, 0x1d, 0xba, 0x99, 0x68, 0x9d, 0x56, 0x0d, 0x45, 0x6b, 0x6d, 0xc2, 0xb2, 0xa2, 0xc9, 0x2b, 0x55, 0x95, 0x48, 0x36, 0xd0, 0xbf, 0x45, 0x29, 0x33, 0x34, 0x4c, 0xaa, 0x92, 0x8e, 0xa7, 0x12, 0x01, 0x13, 0x5b, 0x50, 0x39, 0x07, 0x2f, 0x75, 0x8c, 0xbf, 0xb4, 0x5e, 0x84, 0x20, 0xbd, 0x9e, 0x36, 0x1e, 0x9d, 0x2e, 0x67, 0x3a, 0x2e, 0xbd, 0x37, 0x2e, 0x1a, 0x5a, 0x93, 0xe8, 0xed, 0xa1, 0x83, 0xc6, 0x28, 0xe2, 0x5e, 0xd8, 0xd7, 0x62, 0x93, 0x58, 0xaf, 0xcc, 0xaa, 0xb7, 0xd6, 0xb5, 0xd5, 0x2c, 0x69, 0x9b, 0x67, 0x6e, 0xa5, 0x67, 0x6d, 0xeb, 0x66, 0x25, 0xe9, 0x34, 0x6d, 0x73, 0x50, 0xdd, 0x4a, 0xd4, 0xff, 0x3c, 0x1f, 0x64, 0x97, 0xb6, 0x32, 0x6d, 0x55, 0x9a, 0x8c, 0xc5, 0x46, 0x50, 0x1c, 0xaa, 0x4d, 0x4c, 0x4e, 0x52, 0xd1, 0x9d, 0x20, 0x78, 0x9a, 0xc8, 0x28, 0x4d, 0x2f, 0xeb, 0x84, 0xb7, 0x76, 0xa1, 0xc3, 0x6c, 0x9e, 0xc0, 0xbb, 0x3f, 0x2e, 0xf3, 0x02, 0x69, 0x49, 0xcf, 0x19, 0x75, 0x0f, 0x33, 0x27, 0x0c, 0x44, 0x81, 0x58, 0xe4, 0xab, 0x0e, 0xe4, 0x32, 0x5f, 0xf9, 0xf8, 0x35, 0xc6, 0x84, 0xcc, 0xca, 0xa8, 0x5a, 0xaf, 0x7c, 0x3d, 0xb5, 0xa5, 0x24, 0xb2, 0x7a, 0x7e, 0xb0, 0x51, 0x83, 0xc9, 0xb2, 0x69, 0x95, 0xc2, 0x14, 0x76, 0xd7, 0xac, 0x55, 0xaa, 0xa6, 0xe5, 0x64, 0x22, 0xeb, 0xb4, 0x6a, 0x63, 0x10, 0x37, 0x08, 0x9d, 0xc6, 0x14, 0xa5, 0x0b, 0x23, 0x58, 0x2a, 0x52, 0x9e, 0x32, 0xc2, 0x5e, 0x17, 0xae, 0xd7, 0xe3, 0xd3, 0x86, 0xa2, 0x15, 0x4e, 0xde, 0xcf, 0x01, 0x61, 0xc8, 0xc9, 0x1b, 0x50, 0xbb, 0x06, 0x2d, 0x0f, 0x79, 0x8a, 0xb9, 0x9f, 0x3c, 0x54, 0x0d, 0xe9, 0xf2, 0x1e, 0x40, 0xae, 0xed, 0x38, 0x27, 0x9b, 0x18, 0x47, 0xc5, 0x50, 0xd5, 0x2b, 0x85, 0x3b, 0xb4, 0x73, 0xa1, 0x3a, 0x68, 0x99, 0x02, 0xe1, 0x1a, 0x65, 0x0a, 0xc6, 0xb9, 0xe6, 0x99, 0xb2, 0x73, 0xb7, 0xd6, 0x47, 0x09, 0x36, 0x27, 0x25, 0xc2, 0x02, 0x55, 0x9a, 0x52, 0x93, 0xcf, 0x50, 0xb1, 0x34, 0x19, 0x92, 0x62, 0x79, 0x51, 0x6a, 0x53, 0x69, 0x95, 0x1b, 0xda, 0xcd, 0x29, 0xb4, 0x44, 0x9d, 0x87, 0x87, 0x17, 0xed, 0x7a, 0x69, 0xbd, 0xc8, 0xae, 0x13, 0xc7, 0x6f, 0xcc, 0x16, 0xd7, 0x67, 0x13, 0x0a, 0xbc, 0xfa, 0xd8, 0x33, 0x0f, 0xb1, 0xcb, 0xa2, 0xc9, 0xc4, 0xc1, 0xd5, 0xdc, 0xf3, 0xc6, 0x7e, 0x19, 0x38, 0xad, 0xd5, 0xda, 0xa6, 0x85, 0xb9, 0x27, 0x72, 0xf2, 0x55, 0x6a, 0xd9, 0x10, 0xeb, 0xb5, 0xb0, 0xd6, 0x5a, 0x8e, 0x9e, 0xda, 0x52, 0xf4, 0x74, 0xb6, 0x5c, 0xb8, 0xce, 0x41, 0x75, 0x10, 0x29, 0x3c, 0xd8, 0x01, 0x80, 0xa6, 0x29, 0x8a, 0x2e, 0xa5, 0x13, 0x77, 0x80, 0x6b, 0x81, 0x4a, 0x6d, 0x47, 0x2b, 0x6f, 0x0c, 0xa1, 0x7e, 0xd4, 0x00, 0xe8, 0x6b, 0xc6, 0xad, 0xbc, 0xf4, 0x36, 0x7d, 0x49, 0x2d, 0xf3, 0x85, 0xf5, 0xfa, 0x88, 0xce, 0x25, 0x3a, 0x41, 0x14, 0x9a, 0x2d, 0x50, 0x29, 0x19, 0x6d, 0xcf, 0xd9, 0xf9, 0x32, 0xd6, 0x03, 0xc5, 0xd9, 0x1a, 0x4e, 0xa4, 0xb7, 0x2d, 0x68, 0xee, 0xb3, 0xae, 0x37, 0x9d, 0xaf, 0xa2, 0x4a, 0xd5, 0x4e, 0x20, 0x0b, 0xb9, 0xc3, 0xbc, 0xc8, 0xca, 0x79, 0x68, 0xd6, 0x89, 0xa0, 0x6e, 0xfd, 0x36, 0x6f, 0x3e, 0xd1, 0xe1, 0x22, 0x91, 0xac, 0x1b, 0x6b, 0x1b, 0x5d, 0x5a, 0x05, 0x38, 0x1d, 0x20, 0xe6, 0x9d, 0x2b, 0x55, 0x78, 0x75, 0x91, 0x33, 0xa5, 0x85, 0xc1, 0x77, 0x52, 0x21, 0xf0, 0x8c, 0x13, 0x71, 0x21, 0x11, 0xbf, 0xb5, 0x8b, 0xdc, 0xf9, 0x70, 0x96, 0xeb, 0x7e, 0x66, 0x2e, 0xc3, 0x13, 0x48, 0xcb, 0x1c, 0x1b, 0x96, 0xcd, 0xec, 0x4b, 0x72, 0x33, 0x07, 0x6a, 0xbb, 0x15, 0x3a, 0x8e, 0xb5, 0x1d, 0x0d, 0x5a, 0x11, 0x31, 0x2a, 0x19, 0x12, 0xeb, 0x10, 0x40, 0xb0, 0x35, 0x95, 0xe4, 0xe7, 0xb3, 0xbc, 0xc8, 0x72, 0x95, 0x93, 0x87, 0x0c, 0x8b, 0x92, 0x36, 0x99, 0xa4, 0x58, 0x8c, 0x3c, 0xbe, 0x40, 0x06, 0xb9, 0xcd, 0xb0, 0xfb, 0x84, 0x4d, 0x78, 0x25, 0xc2, 0x64, 0x99, 0x32, 0x3a, 0x53, 0x4c, 0xfe, 0x25, 0x66, 0xdb, 0x28, 0x4e, 0xa2, 0xcb, 0x10, 0xd5, 0xc7, 0xee, 0xc3, 0xc7, 0x0f, 0x1b, 0xc6, 0xd9, 0xe4, 0xf1, 0x89, 0x0f, 0x27, 0x4d, 0x91, 0xf3, 0xcc, 0x81, 0xf8, 0x7b, 0x97, 0x9e, 0x1d, 0xd7, 0x65, 0xa2, 0xa7, 0x6f, 0x4e, 0x7a, 0xec, 0x51, 0xba, 0x18, 0xc8, 0xfd, 0xe3, 0x32, 0x78, 0x1d, 0xde, 0x87, 0xdf, 0xdf, 0x3f, 0xf8, 0xd1, 0xdd, 0xd5, 0x5f, 0xae, 0x5e, 0x39, 0xdf, 0xfd, 0x92, 0x04, 0xb7, 0x3e, 0xbb, 0xba, 0xfe, 0xf5, 0xfa, 0xf6, 0xd5, 0x9d, 0x1f, 0xec, 0xb6, 0x7f, 0x32, 0xdf, 0xf1, 0x42, 0x2e, 0xe4, 0xc2, 0xfa, 0xc5, 0x23, 0x58, 0xdd, 0x37, 0x47, 0x0a, 0x55, 0x96, 0x99, 0x1c, 0xb9, 0x86, 0xb8, 0x22, 0x73, 0x84, 0xf6, 0x97, 0x71, 0x58, 0x9c, 0x41, 0x63, 0x22, 0x74, 0x74, 0xc5, 0xd0, 0x5b, 0x3d, 0x1d, 0xe4, 0xcd, 0x1d, 0xad, 0xc7, 0xe5, 0x78, 0x93, 0xb0, 0xa2, 0x44, 0x7f, 0x67, 0xa1, 0x2b, 0x9b, 0x5b, 0x2c, 0x11, 0xd4, 0x54, 0x45, 0x45, 0x57, 0x95, 0xc1, 0x10, 0x53, 0x52, 0x1f, 0xaa, 0xda, 0xa0, 0xee, 0x54, 0x15, 0x39, 0x05, 0x72, 0x74, 0x39, 0x94, 0x75, 0x91, 0xd2, 0xed, 0xd5, 0x12, 0x72, 0xd2, 0x0d, 0xd7, 0xb2, 0x3e, 0x94, 0x95, 0x06, 0x7f, 0x65, 0x5e, 0xf0, 0xa6, 0x50, 0x1a, 0xfc, 0x36, 0x81, 0xe6, 0xe4, 0xf8, 0x19, 0x45, 0xa6, 0xde, 0x85, 0x1d, 0x07, 0x8f, 0x1f, 0x3f, 0x6e, 0x96, 0xde, 0xf7, 0xd9, 0x30, 0x32, 0x08, 0xb8, 0x1e, 0xfb, 0x61, 0x00, 0x9b, 0xb6, 0x25, 0xd4, 0x9e, 0xc4, 0xf0, 0x7b, 0xf1, 0x8b, 0x3b, 0xd9, 0x09, 0x3c, 0xcb, 0x5c, 0xa9, 0x1b, 0xf8, 0x71, 0x7d, 0x1e, 0xdb, 0x5d, 0x27, 0x25, 0xe1, 0xe6, 0x2d, 0xad, 0x63, 0x76, 0xbf, 0xb6, 0x20, 0xe0, 0x96, 0xbb, 0xd3, 0x7e, 0xb9, 0xcf, 0xf8, 0xd5, 0x6d, 0x12, 0x50, 0xa4, 0x99, 0xd2, 0x0d, 0xfc, 0xbb, 0x8a, 0x5b, 0x5f, 0xac, 0xda, 0x7f, 0xbd, 0xec, 0xac, 0xc1, 0x36, 0xee, 0xda, 0xae, 0x32, 0xb0, 0xf8, 0x52, 0x5c, 0xe6, 0x92, 0x9f, 0x77, 0x30, 0xe6, 0xe5, 0xce, 0xbe, 0xdf, 0xff, 0x7e, 0x9b, 0xff, 0x4d, 0x26, 0xb2, 0x4a, 0x40, 0x66, 0xfd, 0x3c, 0x6c, 0xcc, 0x6b, 0xf8, 0xc2, 0x3a, 0x24, 0x94, 0x25, 0x9b, 0x44, 0xa8, 0x96, 0x70, 0x45, 0xdb, 0xa6, 0x46, 0xca, 0x9c, 0xa2, 0x1c, 0x53, 0x92, 0xbb, 0x88, 0xc2, 0x0c, 0xe2, 0xdd, 0x84, 0x0b, 0x5b, 0xae, 0x3a, 0x2d, 0x85, 0x34, 0x61, 0x26, 0xa3, 0x44, 0x50, 0x3c, 0x60, 0xe8, 0xa8, 0x65, 0x90, 0x3d, 0xd5, 0x38, 0xa5, 0x7b, 0x96, 0x46, 0xfe, 0x85, 0x55, 0x8c, 0xa7, 0x16, 0xb3, 0x26, 0xa7, 0xc9, 0x01, 0x0d, 0x91, 0xe7, 0x91, 0x4b, 0x3f, 0x12, 0xe8, 0x98, 0x46, 0xbf, 0xf7, 0x87, 0x13, 0x38, 0xcd, 0x5c, 0xba, 0x9f, 0x8f, 0xec, 0xf4, 0x75, 0x47, 0xae, 0x25, 0xe7, 0xb4, 0x94, 0xe7, 0x25, 0xe1, 0xdf, 0xac, 0x41, 0xc6, 0xb8, 0x03, 0x8f, 0x4d, 0x7a, 0x90, 0x4d, 0x06, 0x19, 0xa0, 0x83, 0xe5, 0xcf, 0x3b, 0x34, 0x5d, 0x05, 0x9a, 0x9b, 0x83, 0x95, 0x8d, 0x28, 0x09, 0x5c, 0xd6, 0x1d, 0x66, 0x25, 0xab, 0xac, 0x36, 0xb4, 0x6b, 0x0f, 0x25, 0x28, 0xec, 0x65, 0x55, 0x65, 0x95, 0x92, 0xb9, 0xce, 0xf2, 0xca, 0xec, 0xc9, 0xeb, 0xef, 0x83, 0x60, 0x7b, 0xa1, 0x2c, 0x04, 0x59, 0xf6, 0xb8, 0x39, 0xf9, 0xcf, 0x54, 0x8e, 0x9e, 0xa5, 0xea, 0x71, 0x67, 0xcf, 0xfa, 0xc7, 0x95, 0x71, 0xff, 0xd3, 0xd3, 0xea, 0x21, 0xc1, 0xef, 0x4e, 0x28, 0x98, 0x40, 0xfb, 0x3a, 0x15, 0xde, 0xa2, 0xf2, 0xb7, 0xd2, 0xf7, 0xb6, 0x2b, 0x1c, 0xc6, 0x5d, 0x6d, 0x40, 0x5e, 0xdf, 0x09, 0xeb, 0x1c, 0x0b, 0xc2, 0x85, 0x5c, 0x6b, 0x06, 0x2a, 0x40, 0x42, 0x4e, 0x5a, 0x73, 0x95, 0x18, 0x21, 0xe2, 0x40, 0xa3, 0xb5, 0x50, 0xc9, 0x6d, 0xa8, 0xf8, 0xf6, 0xe1, 0xee, 0x45, 0x42, 0x91, 0x6f, 0xde, 0x8d, 0xb0, 0x0d, 0xaa, 0xd6, 0x2e, 0x5b, 0x7c, 0xcc, 0xb2, 0xf6, 0xe7, 0x50, 0xd3, 0xb7, 0x57, 0xd7, 0xe8, 0x5a, 0x66, 0x4e, 0x77, 0x61, 0x67, 0xc9, 0x2d, 0xd7, 0xde, 0x7d, 0x93, 0xd5, 0xcb, 0x6c, 0x50, 0x97, 0xff, 0x8c, 0xae, 0x9e, 0x6e, 0x6a, 0xf3, 0x6c, 0xe3, 0x79, 0x66, 0xbe, 0x7b, 0x9e, 0x9e, 0x3f, 0x73, 0xbe, 0x97, 0xeb, 0xe8, 0xf2, 0x79, 0x28, 0x16, 0xca, 0x47, 0x2d, 0x2d, 0x6a, 0x07, 0x6a, 0x98, 0xce, 0xd2, 0xf9, 0xcb, 0xdc, 0xa8, 0xac, 0x20, 0x40, 0xfe, 0x15, 0xc2, 0xff, 0xf6, 0x35, 0x7b, 0xfb, 0xb8, 0xf1, 0xb0, 0x10, 0xcf, 0x14, 0x9c, 0x20, 0x56, 0x1a, 0x96, 0x4f, 0xa1, 0xcb, 0x00, 0xba, 0x36, 0x5a, 0xc1, 0xe9, 0xfc, 0x29, 0x2a, 0x39, 0x7e, 0x7f, 0x93, 0xe6, 0x96, 0x7c, 0x8e, 0x02, 0x14, 0x8a, 0x48, 0x8c, 0xd1, 0xc6, 0xd0, 0x16, 0xb3, 0xc1, 0x19, 0xfd, 0xaa, 0x19, 0xb0, 0x21, 0x08, 0x70, 0x25, 0x4f, 0x14, 0xdd, 0xc5, 0x25, 0x61, 0x27, 0xa8, 0x7a, 0x4b, 0x68, 0x21, 0xeb, 0x92, 0x97, 0x65, 0xc9, 0xd0, 0x63, 0x40, 0xe1, 0xc9, 0x3e, 0x8c, 0x40, 0x1e, 0x7e, 0x4f, 0x50, 0xea, 0x77, 0x3c, 0xc8, 0xff, 0xbc, 0x70, 0xcd, 0xc8, 0x36, 0x90, 0x1a, 0x30, 0x28, 0x94, 0xac, 0x62, 0x68, 0x0b, 0x56, 0x66, 0xe0, 0xae, 0xab, 0xf9, 0x79, 0x01, 0xf5, 0x32, 0xb9, 0x67, 0x14, 0x62, 0xf1, 0xc8, 0x42, 0x6b, 0x26, 0x04, 0x98, 0x00, 0xb2, 0x84, 0xed, 0x77, 0x31, 0x4b, 0x02, 0x16, 0x08, 0x91, 0x66, 0x0a, 0xe3, 0xad, 0x05, 0x6d, 0x54, 0x5f, 0x36, 0x1d, 0xb9, 0x8e, 0x8c, 0x19, 0x5f, 0xc9, 0xd2, 0xc4, 0xdb, 0x3c, 0x2b, 0xa5, 0x6c, 0xf5, 0x03, 0x5d, 0xe4, 0xe5, 0x5e, 0xc5, 0x2a, 0xa6, 0x7d, 0xaa, 0xbd, 0x54, 0x64, 0x19, 0x2d, 0x52, 0xa6, 0x12, 0x21, 0x28, 0x42, 0x0a, 0xc9, 0x77, 0xa4, 0x82, 0xae, 0xd8, 0x24, 0xe4, 0x17, 0xc6, 0xd1, 0x4f, 0x1f, 0x9f, 0x30, 0xab, 0xe0, 0xcd, 0xc3, 0xb8, 0x9c, 0x7a, 0xc2, 0x56, 0xb3, 0x47, 0xd8, 0x7e, 0xa0, 0x6b, 0x4c, 0x9c, 0x7c, 0x10, 0x15, 0x39, 0x8e, 0xeb, 0x91, 0xc7, 0x27, 0x73, 0xc8, 0x61, 0x7a, 0xd0, 0xae, 0x22, 0x68, 0x3c, 0x33, 0x8a, 0xcb, 0xca, 0x82, 0x22, 0x97, 0x3a, 0x2f, 0x91, 0x05, 0xe8, 0x0e, 0xf5, 0x5a, 0x97, 0x01, 0x6d, 0x41, 0xdd, 0x1d, 0xc8, 0x8d, 0x58, 0x16, 0x29, 0x02, 0x8e, 0xdd, 0x21, 0x07, 0x01, 0x98, 0xc6, 0xf8, 0x35, 0x32, 0xc9, 0x60, 0x01, 0xae, 0x2d, 0xbd, 0x14, 0xda, 0xf9, 0xbb, 0x5c, 0x1a, 0xfa, 0x98, 0x2e, 0xbf, 0xbc, 0x12, 0xa6, 0x2e, 0x08, 0x8e, 0x86, 0x22, 0xe7, 0x51, 0x24, 0x82, 0xcb, 0xea, 0xf1, 0x4f, 0x6d, 0xb7, 0x19, 0x16, 0x8f, 0x0d, 0x7a, 0xc4, 0x54, 0xb2, 0xef, 0x7b, 0x48, 0xcd, 0x2d, 0xde, 0x69, 0x9c, 0x75, 0xbf, 0x1c, 0x1d, 0xba, 0x0d, 0x46, 0x3b, 0x56, 0xc8, 0x08, 0xa6, 0x2c, 0x9f, 0x38, 0x39, 0x53, 0x0a, 0xeb, 0x15, 0x5c, 0x3d, 0x1d, 0x8e, 0x95, 0x51, 0x15, 0x9b, 0xd0, 0x3e, 0xe7, 0x71, 0xa3, 0x8d, 0x25, 0xe3, 0x8c, 0xda, 0x02, 0x83, 0x92, 0x68, 0xa1, 0xa3, 0x9f, 0xce, 0x52, 0xb4, 0xeb, 0xd0, 0xc2, 0xa6, 0xe9, 0x6d, 0x9a, 0x63, 0x1a, 0x59, 0x43, 0xe3, 0x4e, 0x6d, 0x63, 0x23, 0x8d, 0xe5, 0xc9, 0x45, 0x9d, 0x30, 0xcc, 0x12, 0x10, 0x52, 0xc4, 0xdb, 0xcb, 0xea, 0xf1, 0x30, 0x6b, 0xf4, 0x3c, 0x54, 0xac, 0xd1, 0xc9, 0xe9, 0xf3, 0x13, 0x82, 0x4b, 0x5a, 0x1e, 0x97, 0x93, 0xb7, 0xf7, 0x07, 0x8e, 0x9e, 0x54, 0x10, 0xac, 0x1e, 0x75, 0x3f, 0x3a, 0xcf, 0x6a, 0xbb, 0xb8, 0xa5, 0xab, 0x2a, 0xda, 0x37, 0xd5, 0x99, 0x8f, 0x02, 0xd7, 0xf3, 0x5e, 0xd4, 0x2a, 0x0b, 0xa4, 0x20, 0x04, 0xa8, 0x91, 0x40, 0x2d, 0x73, 0x0a, 0x8f, 0x33, 0x04, 0xd1, 0x71, 0xbb, 0xa7, 0x80, 0x32, 0xa3, 0x7b, 0xaa, 0x30, 0xa2, 0xc1, 0x70, 0xa8, 0x6a, 0xf4, 0x5a, 0xcc, 0x2f, 0x21, 0xdd, 0x01, 0x06, 0xd5, 0x24, 0x2b, 0x28, 0xa2, 0x91, 0x3b, 0x25, 0x10, 0x6a, 0x86, 0xdb, 0x97, 0xc6, 0x5d, 0x5f, 0x58, 0xad, 0xee, 0x2d, 0xad, 0xd6, 0xe8, 0x73, 0x70, 0x6d, 0xba, 0x48, 0xb7, 0x0d, 0x0b, 0x3f, 0x82, 0x02, 0xd7, 0xf1, 0xc6, 0x09, 0xfc, 0x1a, 0xcf, 0xe4, 0x1a, 0x9f, 0x8f, 0x42, 0xad, 0xed, 0x8e, 0xa6, 0xa6, 0x5f, 0x2e, 0x6e, 0x03, 0x9d, 0x76, 0x2a, 0xd6, 0x12, 0x8b, 0x65, 0xb6, 0xa1, 0x91, 0x49, 0x16, 0x46, 0xb7, 0x21, 0x41, 0xf5, 0x1d, 0x63, 0xdb, 0x5d, 0x4c, 0xb1, 0x63, 0x1c, 0xaa, 0x30, 0x49, 0x23, 0x55, 0xee, 0xb8, 0x4c, 0xe2, 0x88, 0xf3, 0x14, 0xe4, 0x72, 0x49, 0x22, 0x42, 0x95, 0xec, 0xd2, 0x24, 0x0a, 0xd3, 0x7d, 0x94, 0x66, 0x1c, 0x65, 0xfa, 0xe8, 0x33, 0xd7, 0xf1, 0xbf, 0x5f, 0x30, 0xed, 0x85, 0x15, 0xeb, 0x70, 0x43, 0x83, 0x18, 0xc5, 0x77, 0x97, 0x71, 0x22, 0xf4, 0x41, 0x38, 0x04, 0x73, 0xe4, 0x98, 0xfe, 0x64, 0xa7, 0x23, 0xb6, 0xe0, 0x6f, 0x5b, 0x1f, 0x71, 0xbe, 0x74, 0x29, 0xeb, 0x94, 0xec, 0x6b, 0xb4, 0xda, 0xe7, 0x84, 0xd6, 0xd7, 0x00, 0x13, 0xfc, 0x5d, 0x68, 0x23, 0xce, 0xb6, 0xc6, 0x30, 0x56, 0x48, 0x55, 0x64, 0x52, 0xe4, 0x92, 0x49, 0x91, 0x29, 0x05, 0x36, 0xe9, 0xb4, 0x4c, 0x54, 0x5a, 0x30, 0x6f, 0x1f, 0x29, 0x8c, 0x7f, 0xa6, 0xd1, 0xee, 0x76, 0xbf, 0x67, 0x82, 0x05, 0x69, 0xb2, 0x7b, 0x13, 0x20, 0xe5, 0xfd, 0x10, 0x3f, 0x9b, 0xf6, 0x12, 0xa1, 0xef, 0x0b, 0xab, 0x76, 0x78, 0xf7, 0x61, 0x83, 0x42, 0xe0, 0xac, 0x1d, 0x14, 0x02, 0x2d, 0xc7, 0xc1, 0x69, 0x71, 0xdc, 0x3f, 0x64, 0x2a, 0xb6, 0x13, 0xa1, 0xaf, 0x11, 0x17, 0xda, 0x1e, 0xce, 0xb6, 0xc3, 0xb4, 0xcf, 0x59, 0xab, 0xaf, 0xfd, 0xf4, 0x58, 0xf3, 0x1b, 0x96, 0x25, 0x96, 0x00, 0xa5, 0x95, 0x6d, 0xed, 0x28, 0x88, 0x6e, 0xad, 0xb0, 0x53, 0x8b, 0xce, 0x2c, 0x93, 0x96, 0x1a, 0xa7, 0x4f, 0xa5, 0x86, 0x5d, 0xa5, 0xa1, 0x1f, 0x86, 0x4a, 0x65, 0x71, 0xc8, 0x13, 0xc9, 0xb6, 0x52, 0x44, 0xe2, 0x25, 0xba, 0xc0, 0x17, 0x96, 0x0c, 0x76, 0x11, 0x9c, 0x47, 0xbf, 0x04, 0x58, 0x43, 0x7a, 0x8f, 0x96, 0xca, 0x61, 0x1a, 0xc9, 0x0e, 0xf6, 0xc7, 0xac, 0xe0, 0xb6, 0x56, 0x8d, 0x81, 0x0b, 0x14, 0x3c, 0x57, 0x36, 0xf7, 0xfa, 0xf9, 0x6e, 0x5e, 0xa9, 0x55, 0x11, 0x85, 0x82, 0xc5, 0x80, 0xc2, 0xd0, 0xf0, 0x27, 0x0d, 0x75, 0xe8, 0x82, 0xd0, 0x21, 0xcb, 0x4a, 0xc2, 0x1b, 0x42, 0xd3, 0xcd, 0x40, 0xc1, 0xa5, 0x30, 0x0c, 0x51, 0x66, 0x9a, 0x8b, 0xd8, 0x24, 0x14, 0x98, 0xf9, 0x61, 0x22, 0x23, 0x9e, 0xc4, 0x9c, 0xb3, 0x87, 0x38, 0x7a, 0xe1, 0x86, 0xfe, 0xfb, 0xde, 0xfe, 0xe9, 0xf0, 0xf4, 0x76, 0xa3, 0xed, 0x83, 0x22, 0x2f, 0xad, 0x3f, 0x75, 0x81, 0xd0, 0xe3, 0xd3, 0x6b, 0x0a, 0x67, 0xce, 0xdf, 0x80, 0x41, 0xe4, 0x74, 0x9a, 0xfb, 0x9b, 0xe0, 0xea, 0xea, 0x17, 0xf7, 0xe6, 0xf6, 0xcd, 0xed, 0xad, 0xef, 0x5d, 0x7d, 0xf7, 0xea, 0xe7, 0x2b, 0x42, 0xd0, 0xd7, 0xce, 0xeb, 0x3d, 0x77, 0xef, 0xef, 0xef, 0x7f, 0xf4, 0x6e, 0x5f, 0xbd, 0xbe, 0xbf, 0x79, 0x7d, 0xe5, 0xf9, 0xf7, 0x3f, 0xfa, 0xfe, 0xeb, 0x37, 0xbb, 0xfb, 0xbb, 0x38, 0xa6, 0xe8, 0xad, 0x45, 0xff, 0x37, 0xff, 0xf3, 0x91, 0xd9, 0x65, 0x55, 0xea, 0xa7, 0xb7, 0x1f, 0xdb, 0xa7, 0x96, 0x50, 0xfe, 0xec, 0x8f, 0x50, 0x89, 0x64, 0x0b, 0xdd, 0x68, 0x8b, 0x25, 0xa4, 0x98, 0xdc, 0xd1, 0x5b, 0x3b, 0x28, 0x84, 0xdf, 0x33, 0x7f, 0x24, 0x1f, 0xd9, 0xbb, 0x3e, 0xbd, 0xbd, 0x78, 0x14, 0xa3, 0xdd, 0xec, 0xa5, 0x50, 0xf9, 0x03, 0x27, 0x47, 0x98, 0x15, 0x62, 0x97, 0x67, 0x5c, 0x47, 0x52, 0x90, 0x97, 0x13, 0xe4, 0x0f, 0xb3, 0x80, 0xae, 0xdd, 0x1d, 0x05, 0xc8, 0x3b, 0x72, 0x8d, 0xa0, 0xeb, 0x55, 0x32, 0x55, 0x06, 0x14, 0x61, 0x65, 0x52, 0xeb, 0x22, 0xf7, 0xaf, 0x64, 0x4e, 0x60, 0x7e, 0xbf, 0xcf, 0x74, 0x61, 0x24, 0xdf, 0xf2, 0xbd, 0x36, 0x4c, 0xcb, 0x2b, 0x11, 0x99, 0x5c, 0x17, 0x85, 0x88, 0xa3, 0x78, 0x17, 0xc6, 0x97, 0xc9, 0x36, 0x3d, 0xbd, 0x05, 0x2b, 0x16, 0x38, 0xcc, 0x34, 0xda, 0x01, 0x99, 0xef, 0x83, 0xd2, 0xd7, 0xd7, 0xc3, 0xec, 0x91, 0x85, 0xdc, 0xa3, 0x78, 0xcd, 0x19, 0x06, 0x32, 0xc7, 0xf3, 0x7d, 0x4c, 0x93, 0x8c, 0xcf, 0xec, 0x4a, 0xb6, 0xd9, 0xb1, 0x15, 0x38, 0x4f, 0xe5, 0xb9, 0x39, 0x3a, 0xb7, 0x59, 0x61, 0x94, 0x6a, 0x57, 0x34, 0xd8, 0xad, 0x34, 0xda, 0xaa, 0x3d, 0xeb, 0x7f, 0x82, 0x5e, 0x44, 0x81, 0x25, 0x16, 0x8c, 0xcd, 0x25, 0x57, 0x48, 0xa5, 0xb6, 0x14, 0xae, 0x36, 0xe8, 0x76, 0xd1, 0xba, 0x46, 0x97, 0x7b, 0x96, 0x24, 0x41, 0x92, 0x26, 0x49, 0xf2, 0xa2, 0x5d, 0x2f, 0x9c, 0x32, 0xd8, 0xe5, 0x20, 0x7d, 0x3f, 0x4e, 0x33, 0x39, 0x7a, 0x46, 0xd8, 0xc2, 0xe1, 0x64, 0xa8, 0xef, 0x4e, 0xe4, 0x12, 0xe7, 0xf9, 0x78, 0x3a, 0x8e, 0x4b, 0x8f, 0x41, 0xa0, 0x1e, 0xf9, 0x1e, 0xe7, 0x99, 0x5d, 0x09, 0x86, 0x09, 0xe8, 0x00, 0x55, 0xe7, 0x23, 0x56, 0xd7, 0xf9, 0x2a, 0x13, 0x8f, 0x81, 0x6b, 0xab, 0x15, 0x9f, 0x17, 0x67, 0x0a, 0x74, 0x3b, 0xe2, 0xa4, 0x9a, 0x4e, 0x51, 0x50, 0x06, 0x2f, 0xa2, 0xa4, 0x15, 0x8d, 0x6f, 0x8d, 0xa1, 0x08, 0xda, 0x74, 0x2a, 0x97, 0xe0, 0x59, 0x92, 0xa6, 0xc8, 0x5a, 0xba, 0xd1, 0x1f, 0xaa, 0x54, 0x48, 0xce, 0x2f, 0x9b, 0xdb, 0x7d, 0x7a, 0x77, 0xe8, 0xc8, 0x2e, 0xcf, 0xf5, 0xdd, 0xe1, 0x78, 0x24, 0x6f, 0x4e, 0x8f, 0xc9, 0x39, 0x12, 0xda, 0x1d, 0xbd, 0x23, 0x18, 0xe9, 0x3d, 0x82, 0x21, 0x6c, 0x39, 0xf9, 0xf4, 0xfc, 0x89, 0x6d, 0x69, 0xb4, 0xf3, 0x5a, 0xb5, 0x02, 0x4d, 0x71, 0x5d, 0xcb, 0xb2, 0xdd, 0xf3, 0x87, 0x54, 0xa4, 0x3e, 0xfd, 0x4d, 0x45, 0x4c, 0x5b, 0x53, 0x6c, 0x69, 0x9b, 0x71, 0x16, 0x85, 0x52, 0xb1, 0x38, 0x48, 0x05, 0x79, 0x73, 0x96, 0x11, 0x0a, 0x56, 0x51, 0x01, 0xee, 0xe8, 0x58, 0xc4, 0xd9, 0x4e, 0xab, 0x90, 0x16, 0x29, 0x48, 0x4a, 0x01, 0x59, 0x09, 0xa3, 0x21, 0x73, 0x11, 0xa8, 0x84, 0xdd, 0xee, 0xc5, 0xa7, 0x53, 0xf6, 0x7f, 0x2e, 0x5b, 0x33, 0xd8, 0xe6, 0x13, 0xb2, 0x20, 0x18, 0x4c, 0xcf, 0xee, 0x32, 0x39, 0xe0, 0x08, 0x74, 0xf5, 0xa4, 0xf5, 0xec, 0x30, 0x7a, 0x90, 0x57, 0x61, 0x62, 0x9c, 0xa7, 0xc9, 0xff, 0xac, 0xa1, 0xff, 0x86, 0x9c, 0x5c, 0x2a, 0xd1, 0xf8, 0x2c, 0x8c, 0x20, 0x74, 0x94, 0x2b, 0x54, 0x53, 0xd0, 0x6c, 0x45, 0xc1, 0x87, 0xd1, 0x05, 0x05, 0x64, 0x26, 0xa5, 0xcb, 0x3c, 0xa7, 0xbf, 0xa2, 0xcc, 0x73, 0x5a, 0x03, 0xbd, 0x27, 0xf4, 0x24, 0x2b, 0x7a, 0xa7, 0xca, 0x4b, 0x51, 0x15, 0x9c, 0x90, 0x99, 0xa1, 0x10, 0x28, 0x03, 0xc3, 0x05, 0x21, 0x65, 0xb5, 0xab, 0xd2, 0x44, 0xd1, 0xcd, 0xb8, 0x4f, 0xc2, 0x6d, 0x12, 0xc7, 0xe1, 0x65, 0xde, 0xe3, 0xdd, 0xe1, 0xdd, 0x13, 0x59, 0xf6, 0xac, 0x54, 0xea, 0x38, 0xe4, 0xdf, 0x4f, 0x6b, 0x43, 0x81, 0x00, 0xa3, 0x5e, 0xef, 0x2c, 0xf6, 0x03, 0x86, 0x91, 0x79, 0x1b, 0xba, 0x38, 0xf6, 0x87, 0x6f, 0xd2, 0xa2, 0x00, 0x15, 0x38, 0x36, 0x63, 0x11, 0xd6, 0xe8, 0x7f, 0x6b, 0x8a, 0xb2, 0x06, 0x45, 0x2c, 0x05, 0x57, 0x25, 0x26, 0x2b, 0x90, 0x30, 0xb5, 0xa4, 0x35, 0x35, 0x38, 0x6e, 0x4b, 0x03, 0x32, 0x37, 0x1c, 0x3b, 0x8e, 0x0a, 0x27, 0xda, 0x58, 0x3b, 0xf4, 0x8d, 0x10, 0x36, 0x06, 0x46, 0xeb, 0x8c, 0xaa, 0x24, 0xc1, 0xb1, 0x5c, 0x19, 0xba, 0x17, 0xb8, 0x08, 0xe2, 0xbd, 0x7f, 0x99, 0xf7, 0x78, 0xf7, 0xfe, 0x69, 0x33, 0x4e, 0x68, 0x02, 0xb7, 0x63, 0x81, 0xf3, 0x30, 0xf4, 0xde, 0xec, 0x12, 0xa8, 0x9f, 0xbc, 0x81, 0x41, 0x78, 0x71, 0x61, 0x36, 0x7e, 0xe9, 0x2d, 0xad, 0xd2, 0x00, 0xba, 0x47, 0xfa, 0xf6, 0x46, 0x5b, 0x6e, 0xb6, 0xda, 0x6a, 0x05, 0x60, 0x32, 0xa4, 0xeb, 0x9e, 0x55, 0x4c, 0xd7, 0x1a, 0x45, 0xbb, 0xd6, 0x23, 0xac, 0xcc, 0x7a, 0x57, 0xea, 0x1c, 0x59, 0xd3, 0xc6, 0x32, 0x98, 0x21, 0x99, 0xaf, 0xbb, 0xf3, 0xec, 0x6e, 0xd9, 0xe5, 0x1a, 0x04, 0x37, 0x0d, 0x39, 0x4f, 0xa9, 0xcb, 0x82, 0xf6, 0x00, 0x2a, 0x14, 0x39, 0x14, 0x15, 0x2e, 0xdc, 0x89, 0x64, 0xd7, 0x2a, 0x2a, 0xeb, 0x9f, 0x5b, 0x3c, 0xd8, 0xb0, 0xaa, 0x51, 0x59, 0x75, 0x67, 0x42, 0x20, 0xeb, 0xb7, 0xc2, 0x79, 0x8e, 0x46, 0xf1, 0x73, 0xab, 0xe8, 0x5b, 0x25, 0xad, 0x8e, 0x98, 0x65, 0x64, 0xb3, 0xa2, 0x0f, 0x96, 0x76, 0xc8, 0x9c, 0x25, 0xde, 0x2c, 0xc5, 0x5c, 0xb3, 0x32, 0xf0, 0x53, 0xfc, 0x52, 0x58, 0x2a, 0x07, 0xd5, 0x29, 0x48, 0xad, 0xa4, 0x60, 0x0d, 0xc8, 0xc8, 0xc9, 0x47, 0x48, 0x9b, 0x56, 0xbe, 0xa6, 0x7b, 0x34, 0x8d, 0x53, 0x25, 0x21, 0x06, 0xc1, 0x12, 0x3f, 0x61, 0xe1, 0x65, 0xf5, 0x89, 0xa7, 0x77, 0x8f, 0x4f, 0x1b, 0x02, 0xf2, 0x04, 0xe1, 0x47, 0xd7, 0xf7, 0x26, 0x0a, 0x5c, 0x30, 0x7c, 0x36, 0xd2, 0xd7, 0x81, 0x6e, 0x36, 0x36, 0x32, 0x77, 0x78, 0xa6, 0xbb, 0x05, 0xb9, 0xde, 0x82, 0x9f, 0xf0, 0x05, 0x04, 0x20, 0x2c, 0xc3, 0x5c, 0x53, 0x83, 0xe9, 0x76, 0x75, 0x86, 0x36, 0x58, 0x39, 0x53, 0xe5, 0x35, 0x9f, 0x5e, 0x62, 0x56, 0x26, 0x5f, 0x05, 0x14, 0xe8, 0xa9, 0xea, 0x9a, 0x28, 0xb5, 0xc5, 0x0b, 0x5a, 0xef, 0x92, 0x02, 0x04, 0xef, 0xfc, 0x83, 0xad, 0xcd, 0x7a, 0x95, 0x59, 0x0a, 0x7d, 0x67, 0x95, 0xb1, 0xf8, 0xa5, 0x7d, 0xf8, 0xd2, 0x7a, 0x91, 0x5d, 0xbe, 0x7f, 0xb4, 0xbf, 0xf3, 0x33, 0xc3, 0xad, 0x3b, 0xcc, 0x68, 0xf5, 0xf6, 0x5d, 0x0d, 0x11, 0x01, 0x7a, 0x87, 0xbe, 0x1e, 0xb5, 0x4f, 0x37, 0xb7, 0xb3, 0xd0, 0xbf, 0x81, 0xb5, 0x8b, 0x20, 0xbe, 0xb6, 0x05, 0xc0, 0x6a, 0xcd, 0x7a, 0xd4, 0x77, 0xb6, 0xa0, 0x44, 0xa0, 0x1f, 0xbf, 0x66, 0x6d, 0xee, 0xf3, 0x46, 0xe6, 0x74, 0x11, 0xa8, 0xcc, 0x92, 0x45, 0x51, 0xc4, 0x25, 0x1b, 0xd3, 0x52, 0x74, 0xa6, 0x1a, 0x70, 0xa2, 0x28, 0x41, 0xee, 0x84, 0xb6, 0x9d, 0x16, 0xa0, 0x10, 0xa7, 0xfb, 0xab, 0x81, 0xc8, 0xa2, 0xce, 0x22, 0x30, 0xdd, 0x24, 0x28, 0x00, 0x5e, 0x96, 0x37, 0x7d, 0x7a, 0xff, 0xfe, 0xfd, 0xe6, 0xb8, 0x60, 0xf4, 0x0c, 0x64, 0x7a, 0x83, 0xaf, 0x09, 0x2f, 0xce, 0x84, 0x1b, 0xfd, 0x23, 0xe7, 0xbf, 0x4b, 0x8d, 0x62, 0x81, 0xf0, 0x1a, 0xba, 0xb0, 0x55, 0xa4, 0x2f, 0x7d, 0x3e, 0x59, 0xb6, 0xee, 0xa7, 0xd7, 0x32, 0x92, 0xb2, 0x30, 0x58, 0x62, 0x5d, 0x8a, 0x0e, 0x81, 0x67, 0x52, 0x14, 0x69, 0xd4, 0x61, 0x8e, 0x42, 0x49, 0x5e, 0x4a, 0x9e, 0xad, 0xc5, 0x16, 0x48, 0x0e, 0x8a, 0x24, 0x36, 0xdc, 0xec, 0x45, 0xf0, 0x35, 0xa6, 0xfa, 0x5f, 0x97, 0xad, 0x19, 0x6c, 0x5b, 0x4e, 0x88, 0x5e, 0x1c, 0xf4, 0xdc, 0x8e, 0x1e, 0x5a, 0x40, 0x7a, 0x86, 0x51, 0x41, 0x67, 0xfa, 0x43, 0xc9, 0x0e, 0x9c, 0xb1, 0xda, 0x92, 0xa2, 0xac, 0xec, 0x65, 0xb5, 0xad, 0x96, 0xe5, 0x80, 0xc0, 0x96, 0xf2, 0x6b, 0xc5, 0xf8, 0x67, 0x79, 0x01, 0x65, 0xb9, 0x52, 0xba, 0x56, 0x62, 0xac, 0x0e, 0x47, 0x0c, 0xec, 0xc4, 0x5c, 0x95, 0x32, 0xd2, 0x5a, 0x64, 0x19, 0x57, 0x42, 0xd1, 0x37, 0x74, 0x93, 0x89, 0x58, 0xb3, 0x20, 0x0b, 0x33, 0x8a, 0xd3, 0xb6, 0xd1, 0x85, 0xde, 0xfe, 0xfd, 0xfb, 0xa7, 0xb7, 0xef, 0x37, 0xa3, 0x03, 0xad, 0x7b, 0xd7, 0x67, 0x14, 0xbe, 0x8c, 0xc8, 0x0d, 0xdb, 0x9a, 0xad, 0x37, 0x8d, 0x96, 0xe4, 0xd1, 0xa1, 0xbb, 0xed, 0xeb, 0xb8, 0x8c, 0xbc, 0x62, 0x55, 0x34, 0xbc, 0x6a, 0xd6, 0x4e, 0x54, 0xeb, 0xe5, 0x30, 0x3d, 0x6d, 0xd3, 0x6a, 0x76, 0xb0, 0xfa, 0x70, 0xc8, 0x52, 0xeb, 0xfa, 0x0e, 0x4d, 0xac, 0x20, 0x11, 0x64, 0x89, 0xce, 0x69, 0xd7, 0x76, 0x35, 0x5a, 0x28, 0x4c, 0x7b, 0x90, 0xa8, 0xe7, 0x16, 0x07, 0x8a, 0x5f, 0x6a, 0x02, 0x54, 0x9d, 0xcc, 0x2b, 0xcd, 0x74, 0xa3, 0xc3, 0x54, 0xee, 0xb6, 0xfe, 0xee, 0xc2, 0x39, 0xcf, 0xa7, 0xf7, 0x56, 0xba, 0xf4, 0xa4, 0x07, 0x4d, 0xd6, 0x68, 0x0a, 0x5e, 0x3c, 0x4b, 0x13, 0x82, 0xe1, 0x48, 0x8f, 0xb0, 0xf0, 0x44, 0xf8, 0x91, 0x3b, 0x0e, 0x7d, 0xe0, 0x7e, 0xde, 0xd1, 0x68, 0x99, 0x1d, 0xdb, 0x95, 0x15, 0x9a, 0x22, 0xb2, 0xf6, 0x2c, 0x15, 0x66, 0x83, 0xb2, 0x55, 0xd1, 0xb3, 0xb5, 0x9c, 0xd9, 0x96, 0x02, 0x31, 0xef, 0x8a, 0x46, 0x16, 0xb6, 0x20, 0x5d, 0x11, 0x48, 0x44, 0x3b, 0x19, 0x1e, 0x48, 0x28, 0x36, 0x1d, 0x70, 0xb0, 0x26, 0xdb, 0xc0, 0xd7, 0x63, 0x68, 0x49, 0x91, 0xf9, 0xe6, 0x2a, 0xe5, 0x32, 0xb8, 0x70, 0x27, 0x92, 0x5d, 0xf3, 0x72, 0x74, 0x86, 0x65, 0x1e, 0x7a, 0xc7, 0x03, 0xa7, 0xc6, 0x3c, 0xa1, 0x3f, 0x62, 0x72, 0x7a, 0x77, 0x41, 0x7f, 0xa6, 0x1e, 0x30, 0xeb, 0x49, 0x96, 0x7d, 0x2e, 0xf1, 0xc9, 0x72, 0xb8, 0x7b, 0xba, 0x53, 0xed, 0x14, 0xab, 0xb4, 0x5b, 0x8f, 0x2e, 0xe2, 0xf3, 0xe0, 0xa0, 0x1d, 0x67, 0x25, 0xef, 0x7e, 0x26, 0x1c, 0x25, 0x43, 0xcd, 0x81, 0x3c, 0x47, 0x4e, 0x5b, 0x90, 0x90, 0xe2, 0xa1, 0x23, 0x07, 0x52, 0x10, 0x4a, 0xe9, 0x8c, 0xc9, 0xa5, 0x2e, 0x2a, 0x88, 0xa0, 0xa5, 0x9d, 0x46, 0x66, 0x24, 0x8d, 0x12, 0xbe, 0x8f, 0x45, 0x1a, 0xbe, 0xc8, 0x30, 0xfa, 0xc2, 0x7a, 0x7d, 0x78, 0xdb, 0xda, 0x0e, 0x4d, 0x82, 0xf0, 0xb3, 0xa3, 0x19, 0x03, 0x15, 0xf3, 0x42, 0xb0, 0x7e, 0x24, 0x44, 0x8f, 0x99, 0x0b, 0xdf, 0xd1, 0x96, 0xf6, 0x76, 0xfc, 0xaa, 0xff, 0x54, 0x58, 0x6c, 0x6f, 0xed, 0x29, 0x6d, 0x84, 0xd9, 0x59, 0xe2, 0x43, 0xdc, 0x62, 0x6b, 0x7f, 0xc0, 0xf9, 0x21, 0x56, 0x2d, 0xa0, 0xd5, 0xf3, 0xd3, 0x25, 0x4d, 0x2e, 0x12, 0xf7, 0x74, 0x53, 0x89, 0xb3, 0xbf, 0x31, 0x69, 0x13, 0x75, 0x84, 0x41, 0x8c, 0xca, 0x13, 0x43, 0x61, 0xa8, 0x11, 0x84, 0xd5, 0x0a, 0x0a, 0xab, 0x2f, 0x5b, 0x2f, 0xd8, 0xe5, 0x20, 0x00, 0x73, 0x86, 0x71, 0xa6, 0x70, 0x11, 0xf0, 0x1e, 0x85, 0x17, 0x7f, 0xa0, 0xf0, 0x72, 0x38, 0x12, 0x20, 0xd6, 0x0b, 0x2d, 0xd6, 0x97, 0x4a, 0x91, 0xeb, 0x8c, 0xe7, 0xe7, 0xcc, 0xa9, 0xed, 0x3a, 0x7a, 0xdc, 0xae, 0xcc, 0xa9, 0xdd, 0x2a, 0x8c, 0x56, 0x5b, 0x42, 0xce, 0x55, 0x9b, 0xaf, 0x03, 0x6b, 0x94, 0xb6, 0x81, 0xcc, 0x79, 0x06, 0x99, 0x9e, 0xcb, 0x83, 0x5d, 0x4d, 0x05, 0xa0, 0x5f, 0x96, 0x1d, 0xd8, 0x78, 0x28, 0x4c, 0x13, 0x14, 0xbd, 0x71, 0x71, 0xe1, 0xed, 0xfc, 0xe1, 0xfd, 0x61, 0xc3, 0x7a, 0x77, 0x1e, 0x17, 0x4e, 0x21, 0xca, 0xc9, 0x25, 0x24, 0x2c, 0x16, 0x77, 0x9a, 0x26, 0x71, 0x5c, 0xf4, 0x89, 0xf0, 0xbd, 0xbb, 0x58, 0xaa, 0x7d, 0x97, 0x11, 0xe0, 0x77, 0x9e, 0x99, 0x6e, 0x5f, 0x0b, 0x24, 0xcb, 0x90, 0xb9, 0x01, 0xd7, 0x35, 0x88, 0xfe, 0x76, 0x6d, 0x2e, 0x44, 0x53, 0x34, 0x59, 0x2e, 0xda, 0x94, 0x11, 0x18, 0x26, 0xf0, 0x51, 0x36, 0xa5, 0xe9, 0xc2, 0x82, 0x3c, 0x62, 0x56, 0x82, 0x74, 0x1e, 0x83, 0x68, 0x5d, 0xa1, 0x55, 0x51, 0x15, 0x2d, 0x97, 0x4a, 0xa3, 0x34, 0x5f, 0x56, 0x74, 0xc4, 0x0c, 0x7f, 0x23, 0xd2, 0x48, 0xa1, 0x28, 0xcd, 0x77, 0x5b, 0xba, 0x9a, 0x19, 0xc1, 0x8e, 0x0b, 0xd7, 0x0b, 0x76, 0x0d, 0x0b, 0xc1, 0xf8, 0x13, 0xaa, 0x2c, 0xfe, 0xe8, 0x11, 0xae, 0x9f, 0xd8, 0xd1, 0xe7, 0x27, 0xcf, 0xf3, 0x46, 0x17, 0xd1, 0xca, 0xc4, 0x7d, 0x7d, 0x3a, 0xfa, 0x2e, 0xb9, 0x94, 0x67, 0x06, 0xdf, 0xa2, 0x50, 0xb4, 0x5e, 0xd2, 0x2a, 0x29, 0xb6, 0x35, 0xc6, 0x24, 0x90, 0xbd, 0x27, 0xbf, 0xd6, 0x66, 0x8d, 0xd0, 0xe4, 0xf4, 0x0b, 0x48, 0x91, 0x10, 0xc2, 0x4a, 0x5b, 0xc5, 0x40, 0x34, 0xcf, 0x09, 0xdc, 0x2a, 0x5a, 0x19, 0x49, 0x0b, 0x1d, 0x87, 0x29, 0xfd, 0xdf, 0x0c, 0x83, 0x3e, 0x95, 0xca, 0x4c, 0xc1, 0x29, 0x68, 0x49, 0xca, 0x52, 0x66, 0x3e, 0x28, 0x0f, 0xb7, 0x19, 0xa7, 0xeb, 0x39, 0x71, 0x2f, 0x5d, 0xaf, 0x0f, 0x84, 0x12, 0x91, 0xe7, 0xed, 0x7d, 0x4d, 0x51, 0xd7, 0xc4, 0x75, 0xbf, 0xd0, 0xfa, 0xf9, 0x13, 0x06, 0x62, 0xfa, 0x99, 0xeb, 0xe1, 0xe8, 0x39, 0xf3, 0xc8, 0x97, 0xcf, 0x65, 0x56, 0x5e, 0xf3, 0x54, 0x28, 0x14, 0xfe, 0x2c, 0x67, 0x99, 0x15, 0x55, 0x79, 0xce, 0x4a, 0xad, 0x8a, 0x38, 0xcd, 0xca, 0x33, 0x0a, 0x98, 0xa4, 0xba, 0xb5, 0xdb, 0x43, 0xda, 0x01, 0x78, 0xc2, 0xfc, 0xad, 0xa2, 0x50, 0x93, 0x2e, 0xbc, 0x36, 0x57, 0x12, 0x3b, 0xb6, 0x86, 0x7a, 0x51, 0x99, 0x52, 0x28, 0xa3, 0xb3, 0x02, 0x6c, 0x88, 0x51, 0xc0, 0x92, 0xf0, 0xa5, 0xae, 0x88, 0x17, 0xd7, 0xeb, 0xc3, 0xc6, 0xa3, 0x88, 0x92, 0x2d, 0x20, 0x91, 0x38, 0xc1, 0x2b, 0x38, 0xfd, 0xd1, 0x67, 0xe4, 0x1c, 0x7b, 0x74, 0x66, 0xce, 0x64, 0x4e, 0x0f, 0xb3, 0xb9, 0xff, 0xd9, 0x3d, 0x8d, 0x99, 0xd5, 0x75, 0x82, 0xba, 0x3a, 0x37, 0x7a, 0xac, 0xf2, 0xcd, 0x60, 0x3d, 0xcc, 0x6d, 0x9f, 0x87, 0x5a, 0xab, 0x49, 0xb6, 0x66, 0x64, 0x2f, 0x69, 0xc2, 0x51, 0xb4, 0x31, 0x11, 0x3a, 0xdb, 0xd2, 0x19, 0x80, 0x32, 0x37, 0x5d, 0x25, 0xbb, 0x0a, 0x79, 0x2c, 0x5a, 0xd6, 0xce, 0x54, 0xa5, 0x46, 0x73, 0x7e, 0x12, 0x81, 0x34, 0xfd, 0x4b, 0xbf, 0xf1, 0xad, 0xdd, 0x03, 0x4f, 0x1f, 0x3e, 0x74, 0x1f, 0xbb, 0xcd, 0x3c, 0xcf, 0x88, 0x9a, 0xc7, 0xf5, 0xcb, 0x69, 0x26, 0x94, 0x38, 0x0c, 0xbe, 0x7d, 0xb5, 0xd8, 0x77, 0x30, 0x23, 0x73, 0x3a, 0x0d, 0xc3, 0x3c, 0x9f, 0xf0, 0xc1, 0x69, 0x7e, 0x13, 0x06, 0xf1, 0x6d, 0xb4, 0x4b, 0x08, 0x8a, 0x53, 0x54, 0xa8, 0x69, 0x63, 0x51, 0x98, 0x78, 0xa3, 0xe3, 0x22, 0x90, 0x3b, 0x1d, 0xe5, 0x86, 0x11, 0x5e, 0x52, 0x26, 0x7d, 0x93, 0xeb, 0x20, 0xd6, 0xe2, 0xd6, 0x95, 0xfc, 0x0d, 0xad, 0x72, 0x2c, 0x8a, 0x6d, 0xba, 0xd7, 0x41, 0xe4, 0xaa, 0x1f, 0x83, 0xed, 0xad, 0x52, 0x26, 0xb8, 0xfd, 0xe3, 0x62, 0x34, 0xe1, 0xa9, 0xff, 0x7e, 0xa1, 0x75, 0x8f, 0x5d, 0xfb, 0x71, 0xc3, 0xb9, 0xeb, 0x32, 0x3b, 0x99, 0x34, 0x3d, 0x8f, 0x28, 0x7d, 0x9e, 0x89, 0xfb, 0xf2, 0x61, 0x93, 0x74, 0x7f, 0x32, 0x89, 0x76, 0xd1, 0xe3, 0xe2, 0x39, 0xea, 0xa7, 0x0f, 0x14, 0x41, 0x63, 0x9e, 0x4e, 0x63, 0xcc, 0x67, 0x04, 0xb3, 0x4b, 0xbf, 0x78, 0x47, 0xd7, 0xc6, 0xd2, 0xbd, 0xa7, 0xa7, 0x85, 0x36, 0xa9, 0x66, 0x47, 0x3d, 0x79, 0xfa, 0x33, 0x25, 0x08, 0x42, 0xc2, 0xb9, 0xa5, 0xc4, 0xc6, 0xf9, 0x2a, 0x56, 0xfe, 0x68, 0x2b, 0xb7, 0x6d, 0x95, 0xc6, 0xd7, 0xfe, 0x75, 0x02, 0x1c, 0xd0, 0xa5, 0xea, 0xa4, 0x5d, 0x56, 0x63, 0xd1, 0x86, 0x28, 0x50, 0xce, 0x05, 0x25, 0x4d, 0x4b, 0x1b, 0x50, 0x93, 0x9f, 0xcc, 0x3b, 0x53, 0x34, 0x0a, 0x34, 0xa5, 0x32, 0x31, 0x90, 0x1a, 0x97, 0x72, 0xaf, 0x91, 0x26, 0xb9, 0x4c, 0xb3, 0xc3, 0xda, 0x35, 0x7a, 0xfa, 0xe8, 0x4d, 0xb3, 0x47, 0x3e, 0xc3, 0x39, 0x7a, 0x1a, 0x57, 0x17, 0xd4, 0x56, 0x34, 0x9d, 0x36, 0x32, 0x03, 0xe4, 0x12, 0x84, 0xf5, 0x97, 0xf1, 0xb3, 0x46, 0x02, 0x5b, 0x73, 0xc1, 0x25, 0x66, 0x3b, 0xe1, 0x40, 0x01, 0x8e, 0xfa, 0x73, 0x91, 0xe0, 0x98, 0x99, 0x6e, 0xcd, 0x72, 0x9f, 0x9d, 0x8a, 0xbd, 0xb8, 0x4c, 0xdb, 0x15, 0x31, 0xc0, 0x55, 0x5b, 0x2a, 0x8d, 0x10, 0x06, 0x3a, 0x9f, 0x02, 0xf9, 0xee, 0xb2, 0x6d, 0x19, 0x60, 0x57, 0xab, 0xe4, 0xae, 0xaa, 0x92, 0x22, 0xab, 0x79, 0x9a, 0x25, 0x7e, 0xfa, 0x55, 0x04, 0xfd, 0xcd, 0xbb, 0xf1, 0xe3, 0x87, 0x8f, 0x6d, 0xbb, 0xa1, 0xad, 0x38, 0x71, 0xc4, 0x9a, 0x2e, 0x1b, 0xe9, 0xc5, 0xf0, 0x39, 0xf1, 0x9a, 0x03, 0x4a, 0x97, 0xd3, 0x32, 0x30, 0x36, 0x82, 0x21, 0xf6, 0x48, 0x20, 0xf9, 0x78, 0x3a, 0xfd, 0x4b, 0x76, 0xe3, 0x37, 0xc7, 0x65, 0x1f, 0x3f, 0xa2, 0xdf, 0x14, 0x1e, 0xde, 0x39, 0xf1, 0x99, 0xe2, 0x2f, 0xd7, 0x73, 0x07, 0xda, 0x86, 0x82, 0x4f, 0xb3, 0xa0, 0x7b, 0x8c, 0x76, 0xe7, 0xc9, 0x1b, 0x8e, 0x82, 0x91, 0x23, 0xe1, 0xcf, 0x17, 0x1a, 0x44, 0x22, 0x6d, 0x56, 0xb1, 0xb1, 0xb5, 0x09, 0x02, 0x84, 0x58, 0x18, 0x00, 0xc3, 0x8e, 0x62, 0x6a, 0x74, 0xd3, 0x92, 0x8f, 0xc4, 0x2c, 0x61, 0xcb, 0xd6, 0x76, 0x02, 0xe4, 0xa2, 0x34, 0xef, 0xb2, 0x22, 0x95, 0x06, 0x45, 0x0a, 0xba, 0xc7, 0xee, 0x4d, 0xba, 0xdf, 0x05, 0x49, 0xec, 0xb3, 0x5d, 0xf2, 0x9d, 0xb3, 0xdf, 0x27, 0x8c, 0xc9, 0xe8, 0xde, 0xff, 0x5b, 0x55, 0xfa, 0x37, 0x25, 0xa5, 0x6f, 0x9d, 0xa4, 0x58, 0x6d, 0x3b, 0x1d, 0xa1, 0xc1, 0x34, 0xd0, 0xf2, 0x09, 0x76, 0x1c, 0x38, 0xeb, 0x69, 0x2b, 0xf6, 0x14, 0x7b, 0x32, 0x31, 0xcd, 0xb4, 0x4d, 0xa1, 0xcd, 0x3a, 0x9e, 0x7a, 0x8f, 0x0d, 0x9f, 0x84, 0xf9, 0x0a, 0x8a, 0xcb, 0xaa, 0x8a, 0x37, 0x56, 0xf1, 0x58, 0x5a, 0xf7, 0x8f, 0xbe, 0xcb, 0xf6, 0x2c, 0x7e, 0x8c, 0xe4, 0x6f, 0x40, 0x48, 0x5f, 0xd2, 0x5b, 0xac, 0x95, 0x89, 0x96, 0xbe, 0xe4, 0xfb, 0x28, 0x20, 0xfc, 0x94, 0x82, 0x5a, 0x34, 0x51, 0x52, 0x44, 0x19, 0xd7, 0x5c, 0xc8, 0xca, 0xe8, 0x50, 0x25, 0x09, 0xdf, 0x21, 0x80, 0xde, 0x6d, 0x77, 0x3c, 0xb9, 0x49, 0x9e, 0x6d, 0xfb, 0xbf, 0x97, 0xc5, 0x66, 0x8f, 0xed, 0xa1, 0xfb, 0xb0, 0x01, 0x0b, 0x03, 0xe8, 0x37, 0x1d, 0x47, 0x58, 0x2d, 0x67, 0xff, 0x78, 0xd4, 0xc7, 0x79, 0xa0, 0x33, 0x47, 0x7f, 0xd6, 0x51, 0xdc, 0x05, 0x00, 0x99, 0xdc, 0x0d, 0xf9, 0x47, 0xe8, 0xad, 0xdf, 0x44, 0xbc, 0xca, 0x91, 0xd4, 0x81, 0xea, 0xd9, 0xc3, 0x7a, 0xb6, 0xba, 0x40, 0x82, 0xee, 0x9b, 0x81, 0x99, 0x93, 0x4c, 0x0e, 0x1b, 0x1b, 0x98, 0xd1, 0x7d, 0x06, 0x62, 0xab, 0xfa, 0x40, 0x47, 0x0b, 0x54, 0x57, 0xe8, 0xf9, 0x83, 0x7a, 0xab, 0xc1, 0xca, 0x1e, 0x0a, 0xcb, 0xe8, 0x50, 0xd7, 0x07, 0x26, 0x91, 0x68, 0x28, 0x8a, 0xb2, 0x90, 0x5a, 0xe8, 0x28, 0x8a, 0xc3, 0x87, 0x3f, 0xf4, 0x23, 0xd7, 0x2f, 0xef, 0xc8, 0xc3, 0x06, 0x9c, 0x19, 0xd6, 0x49, 0x38, 0xbd, 0x26, 0xb8, 0x0b, 0x36, 0x36, 0xef, 0x44, 0x97, 0x17, 0xdd, 0x66, 0x60, 0x15, 0x9a, 0xc6, 0x99, 0x00, 0xe4, 0x30, 0x9f, 0x08, 0x7d, 0x4d, 0x1e, 0xc1, 0x2d, 0x5f, 0xff, 0xf0, 0xd3, 0x75, 0xc4, 0xae, 0x7f, 0xb9, 0x13, 0x0f, 0xbf, 0x7a, 0xf1, 0x4f, 0xf1, 0xed, 0xab, 0x3b, 0x27, 0x8e, 0xdf, 0x7c, 0x7f, 0xe5, 0xa5, 0x37, 0x41, 0x18, 0x07, 0xaf, 0x7f, 0x75, 0xdd, 0xad, 0x77, 0xef, 0x6f, 0x1d, 0x27, 0x0c, 0xae, 0x6f, 0xf6, 0xe1, 0xc3, 0x77, 0xd9, 0x2f, 0x4c, 0x7c, 0xf3, 0x49, 0xfb, 0xf8, 0x82, 0x5d, 0x7f, 0x77, 0x37, 0x12, 0x6e, 0x64, 0xa8, 0xa7, 0x7b, 0xb4, 0x09, 0x47, 0x6f, 0xa4, 0x73, 0x35, 0xd9, 0xa6, 0x31, 0x77, 0xd4, 0x14, 0x64, 0xf6, 0x04, 0xb9, 0x46, 0x77, 0xec, 0x09, 0x35, 0x8a, 0xc5, 0xd7, 0xda, 0x67, 0x23, 0x05, 0x02, 0x3f, 0x07, 0xfe, 0x35, 0x0b, 0xee, 0xa2, 0x70, 0x1f, 0xff, 0x25, 0x0c, 0x7f, 0xf2, 0x7e, 0xf9, 0x39, 0xba, 0x09, 0x5e, 0xfd, 0xba, 0x8f, 0xc3, 0xaf, 0x45, 0x70, 0xff, 0x89, 0x1e, 0xe4, 0x1b, 0x3b, 0x08, 0x68, 0xe3, 0xbc, 0xdb, 0x60, 0x4c, 0x15, 0xdd, 0x62, 0xd8, 0x88, 0x8b, 0xa6, 0xe0, 0x65, 0x70, 0x7d, 0x6b, 0x27, 0x39, 0x16, 0xc2, 0x56, 0x47, 0xe1, 0xc3, 0xe3, 0xf7, 0x9f, 0x6b, 0x1a, 0x15, 0x79, 0x8a, 0x0e, 0x24, 0x51, 0x0b, 0x68, 0x29, 0x52, 0x44, 0x9c, 0x67, 0x59, 0x9e, 0xb8, 0x02, 0x69, 0x6e, 0xb4, 0xa1, 0x17, 0x2d, 0xf8, 0xce, 0x1b, 0x53, 0xe6, 0x05, 0xa1, 0x61, 0x87, 0xcb, 0x52, 0x50, 0x6c, 0xa9, 0xef, 0x05, 0x05, 0x07, 0x69, 0x98, 0xfc, 0x18, 0xc6, 0x98, 0xe3, 0xd1, 0x66, 0xc7, 0xe2, 0xec, 0x17, 0x3a, 0x7a, 0x9a, 0xc5, 0x06, 0x8a, 0xba, 0xe9, 0x6e, 0x9f, 0x24, 0x11, 0x67, 0xfc, 0xab, 0x22, 0xe0, 0x37, 0xd6, 0xa3, 0xad, 0x59, 0xb4, 0x12, 0x13, 0x1a, 0x07, 0xc8, 0x1d, 0x8e, 0xee, 0x34, 0xfb, 0x83, 0x3b, 0xbb, 0x3e, 0x8a, 0x61, 0x7a, 0x59, 0x9b, 0xfe, 0x4e, 0xbf, 0x61, 0x96, 0xce, 0xf2, 0x42, 0x36, 0x95, 0xcc, 0x56, 0x75, 0x2d, 0xb4, 0xd3, 0xa7, 0x59, 0x57, 0xaf, 0x61, 0x59, 0x1e, 0x66, 0x52, 0x46, 0xa6, 0xc8, 0xf3, 0x1d, 0x37, 0x19, 0x85, 0x25, 0x14, 0x10, 0xe4, 0xb2, 0x6c, 0x58, 0xcb, 0x31, 0xc7, 0xaf, 0x8a, 0x82, 0xc5, 0x89, 0xd4, 0x84, 0xfd, 0x4b, 0x5f, 0x49, 0x2e, 0xf4, 0xbe, 0xc8, 0x74, 0x1a, 0xb3, 0x70, 0x9f, 0x28, 0x42, 0x6c, 0xe2, 0x8f, 0xc4, 0x73, 0xbf, 0xd1, 0x77, 0x90, 0x69, 0x1f, 0xdf, 0xb7, 0x4f, 0x1b, 0xba, 0x8d, 0x17, 0x02, 0x1b, 0xce, 0xcc, 0x66, 0x36, 0x2e, 0x2e, 0x19, 0xeb, 0x0c, 0x2e, 0xda, 0x32, 0xd1, 0xcb, 0x4d, 0x4e, 0x1f, 0x79, 0x3a, 0x28, 0x1a, 0x41, 0xbe, 0x69, 0xcd, 0x16, 0xdc, 0xe8, 0xbc, 0x2e, 0xaa, 0x06, 0xfa, 0x0f, 0x4d, 0x65, 0x01, 0xb1, 0x1d, 0x71, 0x41, 0x5e, 0x87, 0x42, 0xc8, 0xc3, 0xa1, 0xb6, 0x7a, 0x68, 0xa0, 0xa0, 0xd7, 0xe8, 0x71, 0xa9, 0x0f, 0xf9, 0xa1, 0x3a, 0xa4, 0x87, 0x0e, 0xba, 0xd6, 0x64, 0xe7, 0x1e, 0x59, 0x81, 0x8c, 0xfe, 0x8f, 0x03, 0x05, 0x6c, 0x70, 0x41, 0x5d, 0xad, 0x3a, 0x9d, 0xc8, 0x4c, 0xeb, 0x44, 0xc5, 0xc9, 0x2e, 0xde, 0xd1, 0xe3, 0x0b, 0xcb, 0xfe, 0x3f, 0x59, 0xc1, 0x40, 0xfa, 0xb9, 0xfe, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x81, 0x28, 0xc5, 0x7c, 0xdb, 0x92, 0xdb, 0xd8, 0x92, 0x1d, 0xcf, 0x9c, 0x33, 0xd3, 0xad, 0x6e, 0xa9, 0x28, 0xa0, 0x50, 0xe4, 0x26, 0x89, 0xdb, 0xde, 0xd8, 0x37, 0xdc, 0x88, 0x8b, 0xa4, 0x52, 0xeb, 0x11, 0x1c, 0x38, 0x06, 0x11, 0x63, 0x3b, 0xc2, 0x33, 0x7e, 0x70, 0x8c, 0x23, 0x3c, 0x9e, 0xb0, 0x7f, 0x04, 0x08, 0x3c, 0xe0, 0xc5, 0x5f, 0x67, 0x7b, 0x7c, 0xf9, 0x19, 0x7b, 0x25, 0x58, 0x52, 0xb7, 0xd4, 0x97, 0x3a, 0x32, 0xcf, 0x78, 0x50, 0x25, 0x90, 0x84, 0x28, 0x05, 0x93, 0x99, 0xb9, 0x72, 0xad, 0xdc, 0xb9, 0xf1, 0x8f, 0x9b, 0xcd, 0xe6, 0xff, 0x3c, 0x1d, 0xf7, 0x9b, 0xc1, 0xdd, 0x6c, 0xfe, 0xb0, 0xf9, 0xcf, 0x3f, 0xb9, 0x86, 0xa7, 0x9b, 0xbf, 0xfd, 0x9b, 0xbf, 0xa9, 0x1f, 0xdb, 0xc7, 0x37, 0x6f, 0xcf, 0x4d, 0x5b, 0x37, 0xcd, 0x87, 0x1f, 0xda, 0xcd, 0xb2, 0x4c, 0x33, 0xe7, 0x4e, 0xef, 0x5c, 0x16, 0x8f, 0x7b, 0x8e, 0xc3, 0xd9, 0x38, 0xf7, 0xcc, 0x63, 0xb2, 0xf3, 0x3c, 0x39, 0x0d, 0x83, 0xd7, 0x3b, 0x9e, 0x37, 0x8f, 0xdd, 0x34, 0xf5, 0xf3, 0x20, 0xc5, 0xc0, 0xf8, 0x56, 0xa9, 0x2c, 0x35, 0xa2, 0x2c, 0x0a, 0x5d, 0x64, 0xa9, 0xcd, 0x6d, 0x91, 0x17, 0x45, 0x5e, 0x26, 0xe7, 0xb2, 0xb4, 0xd9, 0xf9, 0x5c, 0xd0, 0xe9, 0x5c, 0xd9, 0xba, 0x28, 0x6d, 0x9e, 0x49, 0x69, 0xec, 0xa9, 0xce, 0xcf, 0x59, 0x26, 0x6d, 0xa0, 0x4b, 0x9e, 0x96, 0x4a, 0xa5, 0x31, 0x0f, 0xf3, 0x3c, 0xe4, 0x01, 0x4f, 0x63, 0x11, 0x09, 0x9d, 0xa6, 0x39, 0x37, 0x36, 0xb5, 0x91, 0xdc, 0xf1, 0x93, 0xe7, 0x1f, 0x8f, 0xfb, 0xfd, 0xdf, 0xfc, 0xd5, 0xdf, 0x7d, 0xfa, 0xac, 0x9b, 0xff, 0xfd, 0xd5, 0x96, 0xbd, 0x69, 0x7f, 0xf8, 0xb0, 0x11, 0x52, 0x4c, 0x9e, 0x98, 0x84, 0xe3, 0xcd, 0xb6, 0xef, 0x16, 0xd7, 0xbb, 0x0c, 0xdd, 0x85, 0xdb, 0x8b, 0x6b, 0x7b, 0xc1, 0x07, 0x98, 0xf7, 0x33, 0x1b, 0xb7, 0xb9, 0x4a, 0xca, 0xaa, 0x29, 0x2b, 0x51, 0xd5, 0x6d, 0x55, 0xd3, 0xff, 0xa4, 0xb2, 0xb6, 0xa9, 0x9a, 0xb6, 0xad, 0xce, 0x8d, 0x68, 0xf3, 0xaa, 0x4d, 0x4c, 0x96, 0x25, 0x89, 0xb5, 0x65, 0x28, 0xb3, 0xb4, 0xcd, 0x8a, 0xc0, 0xaa, 0x6f, 0x8c, 0x8d, 0x4e, 0x7b, 0xc9, 0xa3, 0x28, 0x54, 0xd2, 0xf7, 0x99, 0x7a, 0x9d, 0xf8, 0x3c, 0xf8, 0x6e, 0x17, 0x05, 0x2c, 0x94, 0x7f, 0xf6, 0xe5, 0xf1, 0xef, 0xfe, 0xf2, 0x2f, 0xff, 0xed, 0x67, 0xd6, 0xfd, 0xd7, 0x9f, 0x58, 0xf2, 0x7a, 0xb5, 0xee, 0x5f, 0x3d, 0x63, 0xdd, 0xdb, 0x8d, 0x63, 0x17, 0x67, 0x1c, 0x97, 0x65, 0x70, 0x3d, 0x3e, 0x8f, 0x0c, 0xc7, 0xd2, 0x7b, 0xa3, 0x5d, 0x3a, 0x5c, 0x63, 0xb8, 0xe8, 0x8c, 0x7c, 0xbd, 0x38, 0xce, 0xa3, 0x58, 0x38, 0x5d, 0xdc, 0x66, 0x59, 0x69, 0xe0, 0x96, 0x33, 0x9d, 0x8a, 0xaa, 0xaa, 0xab, 0xca, 0x36, 0x75, 0xdd, 0xd0, 0x13, 0xfc, 0x3e, 0x1d, 0x75, 0x93, 0xd5, 0x55, 0x52, 0xc1, 0xf6, 0x5a, 0xd4, 0x9a, 0x2e, 0x18, 0xbc, 0xc5, 0xc8, 0xa6, 0x96, 0x69, 0x1d, 0x57, 0xf8, 0xa7, 0x39, 0x2e, 0x9a, 0xeb, 0x7b, 0xeb, 0x22, 0xcc, 0x8b, 0x32, 0xcf, 0x0a, 0x25, 0xb3, 0xcc, 0x58, 0x61, 0x9e, 0x31, 0xeb, 0xbf, 0x3c, 0x6b, 0x16, 0x83, 0x51, 0x93, 0xe3, 0x8d, 0x42, 0xe2, 0xc9, 0x78, 0x61, 0xee, 0x3c, 0xf2, 0xd1, 0x61, 0x8c, 0x3b, 0x83, 0x4b, 0x6e, 0x9c, 0xc7, 0x85, 0xb9, 0x2e, 0xc2, 0x95, 0x2e, 0x76, 0xde, 0xe0, 0xb2, 0x6d, 0xaa, 0x10, 0x86, 0x65, 0x59, 0x9e, 0x2b, 0x59, 0xe1, 0xf3, 0x9d, 0xeb, 0x5a, 0xd7, 0x35, 0xd9, 0x59, 0xe1, 0x69, 0x86, 0x87, 0xbc, 0xae, 0x52, 0x58, 0x98, 0xd2, 0x75, 0xfa, 0xec, 0x4d, 0x51, 0xd7, 0x29, 0x62, 0xbf, 0xa9, 0x6d, 0x6e, 0xf2, 0xbc, 0xa9, 0x0d, 0x99, 0x92, 0x57, 0x4d, 0xdd, 0x36, 0x78, 0x4f, 0x63, 0xf0, 0xbd, 0x64, 0x08, 0xd8, 0xfc, 0xbc, 0x2f, 0xa4, 0x4a, 0x6d, 0x26, 0x3f, 0x33, 0xeb, 0x7f, 0xfe, 0xc4, 0x04, 0xe7, 0x8f, 0xf3, 0xd6, 0xfb, 0x8d, 0xe0, 0xcb, 0xe4, 0x8c, 0xc2, 0x5a, 0x67, 0x44, 0xfe, 0x0c, 0xf8, 0xec, 0x8c, 0xcf, 0xc3, 0x68, 0xe5, 0x38, 0x0f, 0xc2, 0xe9, 0xa6, 0xde, 0xe9, 0x2e, 0xfd, 0xc2, 0x2f, 0x5e, 0xc7, 0x2e, 0xd2, 0x73, 0x25, 0xb3, 0x77, 0x3b, 0x5f, 0x94, 0xd6, 0xc6, 0x75, 0x6d, 0xce, 0x55, 0x69, 0x1b, 0x03, 0x47, 0x05, 0x02, 0xc9, 0xa2, 0xa4, 0x39, 0x6a, 0xa9, 0xa4, 0xd2, 0xb1, 0x56, 0x2a, 0x0e, 0x95, 0x88, 0x95, 0xd6, 0xa9, 0x0a, 0x12, 0x6d, 0xac, 0x89, 0xb5, 0x4d, 0x65, 0x12, 0x8a, 0xc4, 0x4f, 0x53, 0x69, 0x64, 0x10, 0xfb, 0x49, 0xf0, 0xe0, 0xc7, 0x88, 0x4c, 0x11, 0xf3, 0x58, 0xc8, 0x30, 0x39, 0x8a, 0x38, 0xf6, 0x4e, 0x1f, 0x23, 0xf1, 0x3f, 0x7e, 0x66, 0xdb, 0x7f, 0xfb, 0x99, 0x6d, 0xcf, 0xba, 0xec, 0xfd, 0x66, 0xee, 0x04, 0x73, 0xbb, 0xc1, 0x11, 0xac, 0x43, 0xa4, 0x8d, 0xb6, 0x1b, 0x2d, 0x1b, 0xbb, 0x7e, 0x60, 0xb3, 0xc3, 0xfa, 0xee, 0x6a, 0xdb, 0x20, 0xe7, 0xb1, 0xef, 0x9c, 0x0e, 0x99, 0xc6, 0xac, 0xdc, 0xf2, 0x24, 0x49, 0xa4, 0xc2, 0xe9, 0x28, 0x13, 0x25, 0x54, 0xa2, 0x8c, 0x54, 0x4a, 0x02, 0x29, 0x24, 0xcc, 0x93, 0x06, 0x76, 0x49, 0x65, 0x14, 0x9d, 0xb5, 0xd2, 0xf4, 0x52, 0x18, 0x3a, 0xb4, 0xc5, 0x29, 0x34, 0x3a, 0xb4, 0xc2, 0x9a, 0xc8, 0xea, 0x28, 0xd1, 0xa1, 0x34, 0x89, 0xaf, 0xb5, 0x0a, 0xf0, 0x65, 0x08, 0x2d, 0xad, 0x38, 0x28, 0xc1, 0xc3, 0xc0, 0x3f, 0x3c, 0x63, 0xd7, 0x33, 0x3e, 0x6b, 0xeb, 0xc7, 0xcd, 0x04, 0x48, 0x1c, 0x99, 0xe3, 0xba, 0xcb, 0xb2, 0xf0, 0x8e, 0x03, 0x16, 0x6d, 0xd7, 0x75, 0xcc, 0x0e, 0x33, 0xb2, 0x6b, 0x99, 0x61, 0xe9, 0xc5, 0x71, 0xd8, 0x30, 0x4c, 0xc2, 0xe5, 0xe3, 0x6a, 0xe6, 0x36, 0x2c, 0xc2, 0xb3, 0x94, 0x88, 0x42, 0x38, 0xad, 0xac, 0x25, 0x70, 0x23, 0x45, 0xc4, 0xc9, 0x3a, 0x4f, 0xeb, 0x0a, 0x2f, 0x28, 0x9f, 0x44, 0x23, 0x6b, 0x1c, 0x11, 0x82, 0xb1, 0xad, 0x11, 0x7d, 0x06, 0x29, 0x98, 0x67, 0x79, 0x55, 0x34, 0xa9, 0x31, 0x55, 0x9e, 0xd5, 0x45, 0x5b, 0x66, 0x16, 0xd9, 0x06, 0x84, 0x2d, 0x0f, 0x69, 0x7a, 0xce, 0x91, 0xb6, 0xda, 0x18, 0xe5, 0x1f, 0x79, 0xc2, 0xf7, 0xf2, 0x36, 0x7f, 0x91, 0x5d, 0xac, 0x9f, 0x7b, 0x87, 0xf3, 0x65, 0x99, 0x11, 0x88, 0x2e, 0xf2, 0x68, 0x9a, 0x1c, 0xde, 0x2d, 0xd6, 0xf2, 0xc1, 0x59, 0x86, 0xc1, 0x76, 0x0e, 0x12, 0x6d, 0x41, 0xa2, 0x4d, 0x76, 0xbe, 0x86, 0xe6, 0x56, 0xe4, 0x65, 0x41, 0x88, 0x7e, 0x36, 0x70, 0x8b, 0xc5, 0xb3, 0xea, 0x40, 0xb9, 0x74, 0x06, 0x10, 0xd4, 0xc0, 0x8b, 0x73, 0x8a, 0x94, 0x49, 0x71, 0x05, 0x78, 0x52, 0x11, 0xa4, 0x34, 0x75, 0x81, 0x84, 0x02, 0xc8, 0x20, 0x68, 0x6b, 0xdd, 0xd4, 0x8d, 0x2d, 0x6b, 0x9b, 0x16, 0xb6, 0x28, 0xea, 0x02, 0xd9, 0x96, 0x1b, 0x3c, 0x9e, 0x8b, 0x06, 0xc9, 0x98, 0xd9, 0x5c, 0x14, 0x59, 0x92, 0xaa, 0xcf, 0xec, 0xfa, 0x5f, 0x3f, 0xb1, 0xc1, 0xfd, 0x63, 0xf0, 0xbe, 0x6d, 0x7e, 0xf8, 0x61, 0x33, 0xba, 0x93, 0xd7, 0x0d, 0x76, 0x1e, 0xac, 0x98, 0xc5, 0x85, 0x4d, 0x6c, 0xe4, 0x96, 0xf5, 0xbc, 0xb7, 0x9e, 0x1d, 0x17, 0x6f, 0x1c, 0x7e, 0x8c, 0xc5, 0x8e, 0x62, 0xb1, 0xef, 0xbc, 0xad, 0xcd, 0x8a, 0xb2, 0x6c, 0xd2, 0x73, 0xa9, 0x33, 0x42, 0xc2, 0x14, 0x90, 0xd1, 0xb4, 0x4d, 0x7b, 0x6e, 0xd3, 0xd6, 0xd6, 0x6d, 0xdb, 0xd8, 0x16, 0xfe, 0x68, 0xf0, 0x41, 0x1b, 0x51, 0xd8, 0x24, 0xd9, 0xcb, 0x24, 0x88, 0x85, 0xb8, 0x17, 0xd1, 0xf7, 0xde, 0xfd, 0xf1, 0x00, 0x80, 0xf7, 0x83, 0x23, 0x3b, 0xf2, 0x03, 0x8f, 0x7e, 0x06, 0xf3, 0x3f, 0x81, 0xfb, 0x7f, 0x79, 0x5b, 0x30, 0xbe, 0xa9, 0xeb, 0x4d, 0x6f, 0x51, 0xb7, 0x1c, 0x77, 0xe2, 0x28, 0x67, 0xde, 0x30, 0x39, 0x03, 0x1c, 0x06, 0x2b, 0xa9, 0xbc, 0xd9, 0x8e, 0x79, 0xbc, 0xeb, 0xc6, 0xa7, 0x6a, 0x36, 0x4c, 0x1e, 0xef, 0x9d, 0x59, 0x6c, 0xc3, 0xbc, 0x3c, 0xd7, 0x67, 0x72, 0x08, 0xd0, 0x0d, 0xc6, 0x21, 0xaa, 0xe0, 0x09, 0x04, 0x5c, 0x46, 0x30, 0x0f, 0x6c, 0x94, 0x75, 0x95, 0x55, 0x74, 0xa9, 0xa6, 0x3f, 0x25, 0x4e, 0x6d, 0x5d, 0x97, 0x8d, 0x6d, 0x80, 0x85, 0x4d, 0xa6, 0xcb, 0xa6, 0x3e, 0xe4, 0x89, 0x50, 0x47, 0x7d, 0xf2, 0x90, 0x5a, 0xf8, 0x09, 0xb4, 0x88, 0xa4, 0x59, 0x93, 0x35, 0x4e, 0x84, 0x4c, 0xc4, 0x33, 0xc0, 0xf8, 0x4c, 0x30, 0x92, 0x5d, 0xe3, 0x34, 0xcd, 0x96, 0xc1, 0x6f, 0xbd, 0xed, 0xe0, 0x2a, 0xcf, 0x99, 0xdc, 0xa5, 0x43, 0x7d, 0xee, 0xfa, 0xb9, 0x1b, 0x96, 0x8b, 0x37, 0x7b, 0xe2, 0x8b, 0x2a, 0xbd, 0x4d, 0xb3, 0xe2, 0x5c, 0xa6, 0x67, 0x5b, 0x51, 0x21, 0xab, 0xab, 0xd5, 0xc0, 0xa6, 0x5e, 0x4d, 0xaa, 0x4f, 0x80, 0x0c, 0x55, 0x51, 0x04, 0xd2, 0x55, 0xd4, 0x70, 0x18, 0xa5, 0xb5, 0x0c, 0xac, 0x8c, 0xe4, 0xc9, 0x17, 0x36, 0x01, 0x72, 0x36, 0x36, 0xd7, 0x79, 0x6a, 0x65, 0x28, 0x45, 0x19, 0x2b, 0x23, 0xb4, 0x8a, 0x44, 0x7c, 0x8a, 0xa5, 0xbf, 0xe3, 0xf2, 0x47, 0x9f, 0xfd, 0x87, 0xdb, 0x40, 0xff, 0x0d, 0x12, 0xed, 0x93, 0x2b, 0xba, 0x5f, 0x02, 0x78, 0x40, 0xbf, 0xb8, 0xd8, 0x69, 0x1e, 0x66, 0x24, 0x9c, 0xe3, 0xce, 0x43, 0xef, 0x5e, 0xee, 0x76, 0x92, 0x9c, 0x06, 0xff, 0xc0, 0x37, 0xb2, 0xd2, 0xcc, 0x46, 0xa9, 0x94, 0xa8, 0x02, 0x8d, 0x52, 0xb5, 0xaf, 0xf4, 0x51, 0xc7, 0x52, 0x59, 0x75, 0x5f, 0x64, 0xdc, 0x88, 0x63, 0x9e, 0xcb, 0x9d, 0xc9, 0xc3, 0x4c, 0xb1, 0x5f, 0x0d, 0xbe, 0x5f, 0x8e, 0xc7, 0x0f, 0xb7, 0xfa, 0x0d, 0xb6, 0xf5, 0xce, 0x82, 0xd0, 0x1b, 0x5d, 0xde, 0xbb, 0x00, 0xf9, 0xbe, 0x97, 0xfd, 0xd0, 0xc3, 0x3d, 0x7d, 0xdf, 0x23, 0x03, 0x71, 0xee, 0x65, 0x37, 0x39, 0x8b, 0x43, 0x47, 0xd7, 0xbb, 0x9e, 0xe7, 0x7e, 0xcd, 0x67, 0xfc, 0x7f, 0x3d, 0x60, 0x5b, 0xf2, 0x99, 0x6d, 0xff, 0xf8, 0xb5, 0xc4, 0xf1, 0x4d, 0xf3, 0xe1, 0xfd, 0xe3, 0x86, 0x03, 0x47, 0x16, 0x80, 0xdf, 0xe8, 0x39, 0x6c, 0x06, 0x0c, 0x4e, 0xa8, 0xde, 0xcb, 0x04, 0x36, 0xc5, 0x2c, 0xe0, 0x11, 0xb9, 0x86, 0xea, 0x6d, 0x2f, 0xa3, 0xbc, 0x4c, 0xcc, 0xf2, 0x35, 0x3e, 0xb7, 0x5a, 0x5b, 0x99, 0xea, 0x34, 0xcf, 0x6d, 0x09, 0x22, 0x9b, 0x9a, 0xac, 0xb2, 0xaa, 0xa8, 0xe0, 0x4d, 0x20, 0x5c, 0x5d, 0x16, 0xd6, 0x12, 0x29, 0xc9, 0xaa, 0xac, 0x4c, 0xf3, 0x22, 0xc5, 0xd5, 0x2c, 0x05, 0xe8, 0xa3, 0x2c, 0xe4, 0x45, 0x6d, 0xb3, 0x34, 0x2f, 0xb3, 0xb0, 0xcc, 0x5a, 0xa2, 0x2b, 0x48, 0xd3, 0x34, 0x8d, 0xea, 0x02, 0xff, 0x95, 0x51, 0x1a, 0xc8, 0x8a, 0x00, 0xe5, 0x5e, 0x70, 0xf2, 0x83, 0x1b, 0x2d, 0x7b, 0xfb, 0xfe, 0xfd, 0xbb, 0x0d, 0x0a, 0x34, 0x63, 0x2e, 0x5b, 0xba, 0x4f, 0xbc, 0x10, 0x64, 0x71, 0x1c, 0x9f, 0x18, 0x24, 0x31, 0xc9, 0x2b, 0x83, 0xbc, 0xa0, 0xc6, 0x5d, 0x2f, 0x6e, 0xf3, 0x84, 0xf0, 0xba, 0x04, 0xd1, 0x3b, 0xb7, 0x67, 0xa2, 0xc5, 0xf8, 0xc4, 0x35, 0x18, 0x22, 0xe0, 0xf1, 0x5c, 0x81, 0x29, 0xad, 0xe8, 0x81, 0x0b, 0xe7, 0xba, 0x41, 0x21, 0x38, 0x17, 0x3a, 0x7e, 0x08, 0x93, 0x08, 0xdf, 0x41, 0xca, 0x65, 0x66, 0x15, 0x48, 0xbd, 0x96, 0x51, 0x26, 0x53, 0x6b, 0x74, 0x10, 0xc8, 0x7b, 0x11, 0x04, 0x51, 0x9c, 0xe9, 0x4c, 0x95, 0x36, 0x20, 0xc6, 0xec, 0x07, 0xfe, 0xe9, 0xb6, 0x5c, 0x7b, 0x5b, 0x37, 0x9b, 0xb1, 0x1b, 0x60, 0xc5, 0x38, 0xb9, 0x60, 0x90, 0x1d, 0x77, 0x61, 0x22, 0x54, 0xcc, 0x4c, 0x06, 0x38, 0x20, 0x5d, 0x3f, 0xcf, 0x3f, 0xc7, 0xde, 0xdd, 0x3f, 0x44, 0xe1, 0x3e, 0x88, 0x0f, 0x11, 0xf3, 0xb9, 0x07, 0x8a, 0x74, 0x8a, 0x03, 0xa1, 0x84, 0x7c, 0x60, 0x27, 0xae, 0xee, 0x78, 0x18, 0x1e, 0x79, 0xf0, 0x10, 0x2a, 0x16, 0x1e, 0x23, 0x7c, 0xca, 0x03, 0x3f, 0x44, 0x9c, 0xc7, 0xc9, 0xe9, 0x14, 0x24, 0xd1, 0xc3, 0x69, 0xef, 0xed, 0x18, 0x8f, 0x8e, 0x61, 0x1c, 0xef, 0xf7, 0xbf, 0x0e, 0xfd, 0x14, 0x8f, 0x7f, 0x7d, 0x5b, 0xc1, 0xfe, 0xd2, 0xb6, 0x79, 0x9c, 0x97, 0xc1, 0xfe, 0xdc, 0xb6, 0x2f, 0x09, 0x96, 0x48, 0x12, 0xff, 0x00, 0x82, 0x65, 0x4c, 0x60, 0xa0, 0x58, 0x8c, 0xb1, 0xe0, 0xb1, 0x16, 0x3e, 0x11, 0x08, 0xd2, 0x34, 0x43, 0x50, 0x26, 0x29, 0x9c, 0x03, 0x3e, 0xa5, 0xe0, 0x9a, 0x14, 0xb0, 0x99, 0x15, 0x61, 0xaa, 0x8f, 0x47, 0x93, 0x17, 0x26, 0x13, 0x05, 0xbc, 0x0d, 0x4d, 0x97, 0x24, 0xb9, 0x40, 0xd9, 0x16, 0xf8, 0x77, 0xea, 0x94, 0x80, 0x7c, 0x06, 0x16, 0x04, 0x4d, 0x70, 0x2e, 0x42, 0xef, 0x33, 0xbb, 0xfe, 0xfb, 0xd7, 0x16, 0xec, 0xb7, 0xf5, 0xbb, 0x47, 0x88, 0x98, 0xd9, 0x8a, 0x69, 0x96, 0x1e, 0x47, 0x15, 0x18, 0x2e, 0x82, 0x81, 0x97, 0xd8, 0x0b, 0x73, 0x84, 0x5c, 0xa6, 0x65, 0x46, 0x0e, 0x0e, 0x9d, 0x10, 0x0e, 0x92, 0x71, 0xf4, 0xae, 0x59, 0xe6, 0x6d, 0x4f, 0xea, 0x5c, 0x20, 0x8d, 0x4a, 0x90, 0x8f, 0xb6, 0xb6, 0xfa, 0x04, 0x29, 0x63, 0xd3, 0xa6, 0xc9, 0x93, 0xc2, 0x94, 0x67, 0xdb, 0x82, 0x5c, 0x00, 0xf2, 0x4d, 0x53, 0x67, 0x4d, 0x06, 0x71, 0x9a, 0xda, 0x2a, 0x89, 0xc9, 0x88, 0xac, 0x8c, 0x39, 0xe3, 0x36, 0x8a, 0x84, 0x8d, 0x74, 0x74, 0x00, 0x8c, 0xc6, 0x2a, 0x39, 0xf3, 0x80, 0x80, 0x9f, 0xbf, 0x64, 0x3e, 0x3b, 0x46, 0x87, 0xd3, 0xce, 0x3d, 0xf9, 0x87, 0xe3, 0xc3, 0x6d, 0xc5, 0xfa, 0xed, 0xfb, 0x76, 0xe3, 0x82, 0x34, 0x3a, 0xd3, 0xdc, 0xc3, 0x67, 0x20, 0x23, 0x13, 0xf4, 0x0a, 0x3c, 0xb8, 0x4c, 0x2e, 0x77, 0x3a, 0xaf, 0xe7, 0xa0, 0x57, 0x9f, 0x57, 0xea, 0xae, 0x13, 0xdb, 0xb4, 0x00, 0xc1, 0x42, 0xb5, 0xae, 0x91, 0x52, 0x25, 0x11, 0x8e, 0x8f, 0xd2, 0xeb, 0xfa, 0x4b, 0x25, 0x9a, 0x0a, 0x5a, 0xb6, 0x5e, 0x4f, 0xb3, 0x86, 0x8e, 0x9c, 0x44, 0x0c, 0xf8, 0x4b, 0xb9, 0x16, 0xf0, 0x8a, 0x87, 0x6d, 0x91, 0xd6, 0x16, 0x3c, 0x25, 0x85, 0x26, 0xcf, 0x0b, 0xd4, 0xf1, 0x3a, 0x65, 0xa8, 0x7e, 0xec, 0x98, 0xc8, 0x38, 0x14, 0x37, 0x06, 0xe2, 0x7b, 0xea, 0x14, 0xcc, 0xc2, 0xc2, 0x33, 0x43, 0xe7, 0x80, 0x6b, 0xcd, 0x24, 0xa1, 0x5d, 0xde, 0x8d, 0xa3, 0x00, 0x7d, 0x1c, 0x86, 0x65, 0xf8, 0x05, 0x3d, 0x0d, 0x94, 0x83, 0x61, 0x28, 0xd6, 0xc4, 0x45, 0xce, 0x2a, 0x45, 0xac, 0xd5, 0x0a, 0x4f, 0xaa, 0xd5, 0x26, 0x5d, 0x57, 0xba, 0xce, 0x6b, 0x9d, 0x36, 0x57, 0xb1, 0x09, 0xae, 0x6c, 0x6c, 0x1d, 0x54, 0x2b, 0x61, 0xa9, 0x10, 0x7f, 0xba, 0x11, 0xd0, 0x03, 0xa5, 0x4a, 0x0a, 0x55, 0x10, 0xbf, 0x3f, 0xc9, 0x24, 0x0a, 0x65, 0x10, 0xed, 0x4e, 0xaf, 0x4e, 0xbb, 0xf8, 0x3e, 0x38, 0x1d, 0x83, 0xdd, 0x8d, 0xfe, 0xfa, 0xf0, 0x6e, 0x63, 0x05, 0xf7, 0xc6, 0xcb, 0xdc, 0xbb, 0x72, 0xec, 0xa1, 0x2d, 0xc1, 0xe7, 0xb9, 0x18, 0x2f, 0x23, 0x1b, 0xa9, 0x7a, 0x2d, 0x83, 0xf4, 0x10, 0x98, 0x20, 0x95, 0x76, 0x18, 0xe6, 0x27, 0xb1, 0xb6, 0x85, 0xe8, 0x25, 0xd5, 0x4c, 0x72, 0x93, 0xfc, 0x05, 0xea, 0x4b, 0x2a, 0xb2, 0x01, 0xab, 0x37, 0x15, 0x8c, 0x6b, 0x9e, 0x38, 0x48, 0x11, 0xd4, 0xb2, 0x88, 0xf1, 0x57, 0x99, 0x49, 0x1a, 0x68, 0x17, 0x2b, 0xa4, 0x6e, 0x52, 0x1d, 0x9a, 0x22, 0x35, 0xc2, 0xe2, 0xeb, 0xd0, 0x0f, 0x99, 0xc6, 0x0b, 0x88, 0xa0, 0x40, 0xf2, 0xd0, 0x17, 0x71, 0x22, 0x4f, 0x0f, 0x87, 0xf8, 0xf8, 0x10, 0x44, 0x37, 0xfa, 0x0b, 0x76, 0xcd, 0x17, 0xf0, 0x7c, 0x54, 0x67, 0x3b, 0x21, 0xc1, 0x3a, 0xce, 0x20, 0x64, 0x16, 0x67, 0xf1, 0xac, 0x37, 0x0c, 0xfd, 0x3c, 0x0c, 0x17, 0xd7, 0xba, 0x3d, 0xe8, 0xa4, 0x75, 0x17, 0xbc, 0xe9, 0xc9, 0x2e, 0xca, 0xa3, 0x12, 0xf9, 0x75, 0x5e, 0x9b, 0x02, 0xe7, 0x86, 0xb4, 0x31, 0x62, 0xb2, 0xf2, 0xeb, 0x8a, 0x67, 0x9f, 0xda, 0x04, 0x4a, 0x57, 0x59, 0xa0, 0xf7, 0x36, 0xca, 0x60, 0xb2, 0x8d, 0x4f, 0xae, 0x02, 0x90, 0xc7, 0xea, 0x14, 0x1b, 0x00, 0x3b, 0x7c, 0x94, 0xe4, 0x2a, 0xe6, 0x90, 0x0a, 0x40, 0x9d, 0xd0, 0xbe, 0x14, 0x2c, 0x8e, 0x13, 0x7e, 0x17, 0x31, 0xe1, 0x47, 0x71, 0x7c, 0x5b, 0x67, 0xe7, 0x1d, 0x80, 0xe3, 0x71, 0x83, 0xea, 0xdc, 0x53, 0x26, 0xf5, 0xa8, 0x57, 0x48, 0x27, 0xca, 0xa4, 0x89, 0x21, 0xc1, 0x16, 0x68, 0x36, 0x5c, 0xa1, 0x5f, 0x67, 0x76, 0x2f, 0xce, 0xcc, 0x9d, 0x19, 0x5e, 0x04, 0xfd, 0x7f, 0xfd, 0xd2, 0x3f, 0x79, 0x3b, 0xff, 0xf7, 0xec, 0xf4, 0xcd, 0x81, 0xed, 0x5f, 0x06, 0xf7, 0xbf, 0x67, 0xce, 0x2e, 0x60, 0xce, 0x89, 0xc7, 0x2f, 0x8f, 0xdf, 0xbf, 0xdc, 0xee, 0xbf, 0x61, 0xaf, 0x5e, 0x07, 0xbb, 0x3f, 0xdf, 0x1f, 0x82, 0x6f, 0x5f, 0xfd, 0x21, 0x38, 0xbc, 0x3e, 0xec, 0x77, 0x6e, 0xb0, 0x67, 0xc9, 0xab, 0xd3, 0xab, 0x38, 0x89, 0x5e, 0xca, 0xc3, 0xc9, 0x88, 0x3b, 0x1e, 0xec, 0x45, 0x78, 0x77, 0xcc, 0x52, 0x1e, 0x07, 0xdf, 0x69, 0xfe, 0xf2, 0x21, 0x09, 0xee, 0x98, 0x1f, 0x1f, 0x8e, 0x77, 0xec, 0xb4, 0xc2, 0xfd, 0x7f, 0xba, 0xad, 0x48, 0xc3, 0xba, 0xf7, 0x3f, 0x6c, 0x38, 0x65, 0x98, 0x0b, 0x9c, 0xb7, 0x2e, 0x14, 0x26, 0xfd, 0xf9, 0xe2, 0xe7, 0x67, 0xa0, 0xbf, 0x4d, 0xc0, 0x6c, 0x6d, 0x16, 0x03, 0x0d, 0xce, 0x2d, 0xfc, 0x43, 0x15, 0x59, 0x35, 0xa0, 0xbf, 0x6d, 0x5b, 0x95, 0xb5, 0x80, 0xd2, 0x5c, 0x9b, 0x58, 0xc8, 0xb6, 0xa6, 0x2d, 0x8b, 0x9a, 0x30, 0xa6, 0x6e, 0x65, 0x01, 0x2f, 0x17, 0xcd, 0xd9, 0x98, 0xb6, 0x2e, 0x81, 0x9b, 0x75, 0x16, 0x24, 0xb6, 0x2e, 0x72, 0x90, 0x63, 0x3f, 0x4f, 0x7c, 0x53, 0x66, 0x0a, 0x1e, 0x0c, 0x12, 0x3f, 0x38, 0x9d, 0xa2, 0xf8, 0x78, 0xb3, 0xdf, 0x3e, 0x34, 0x1b, 0xe6, 0x0e, 0xae, 0x43, 0x1d, 0x2b, 0x48, 0x35, 0x0e, 0xfa, 0xe1, 0x0c, 0x62, 0x71, 0x46, 0x07, 0xdc, 0x11, 0x74, 0xca, 0xba, 0x62, 0x71, 0xe7, 0x2f, 0xe9, 0x7e, 0x22, 0x6d, 0x64, 0x4c, 0x02, 0x86, 0x04, 0x49, 0x9c, 0x16, 0x86, 0x55, 0x69, 0x91, 0x56, 0xd9, 0xd9, 0x64, 0x79, 0x5a, 0xe4, 0x59, 0x98, 0x67, 0x67, 0x52, 0x93, 0xb9, 0xb5, 0x28, 0x58, 0xd9, 0x39, 0x97, 0x79, 0x80, 0xfa, 0x56, 0xe1, 0xeb, 0x50, 0x74, 0xa9, 0xb1, 0x47, 0xa9, 0x0a, 0x9b, 0xc7, 0x46, 0xee, 0x5f, 0xc7, 0x82, 0x07, 0x89, 0xf4, 0x8d, 0xf6, 0x65, 0x1e, 0x07, 0x51, 0xc2, 0x3f, 0x95, 0xe9, 0xbf, 0xbf, 0xd9, 0x6f, 0x1f, 0xa0, 0xac, 0x21, 0x64, 0x5c, 0x6b, 0x97, 0xae, 0x17, 0x8b, 0x5c, 0x7a, 0x07, 0xcc, 0x18, 0x85, 0x0c, 0x66, 0xb2, 0x0b, 0x48, 0x49, 0xc7, 0x9c, 0x85, 0x34, 0xb6, 0x05, 0x6d, 0xfe, 0xe8, 0xbf, 0x2d, 0x2c, 0x2a, 0xca, 0x90, 0xda, 0x57, 0x6b, 0x2b, 0xae, 0x3d, 0x48, 0x92, 0x9d, 0x4d, 0x6d, 0xdb, 0xb4, 0xd6, 0x7e, 0xa6, 0x55, 0x90, 0x59, 0x5f, 0x5b, 0x73, 0x54, 0x29, 0x04, 0x18, 0x53, 0x26, 0x36, 0xa5, 0xcd, 0x54, 0x9e, 0xd9, 0x58, 0x07, 0x99, 0x8e, 0xf1, 0x0f, 0x77, 0x6d, 0xaa, 0x4c, 0x11, 0xab, 0xbc, 0xb4, 0x5b, 0x95, 0x66, 0xc7, 0x58, 0xa5, 0x49, 0x64, 0x8f, 0x4a, 0x44, 0xc7, 0x93, 0x1b, 0xec, 0x9c, 0x5b, 0x2d, 0x7b, 0xdf, 0xd4, 0x1b, 0xeb, 0x7a, 0x03, 0x90, 0x83, 0x51, 0x36, 0x89, 0xd1, 0xb1, 0x48, 0x2d, 0xc6, 0x17, 0xde, 0xf3, 0xd1, 0x3a, 0x9c, 0x68, 0xb1, 0x58, 0xbe, 0x68, 0x63, 0x6d, 0xe1, 0x9d, 0xb2, 0xac, 0x0d, 0x74, 0x3e, 0xc1, 0x64, 0xb5, 0xca, 0xd0, 0x2b, 0x6d, 0x04, 0x9c, 0x40, 0x62, 0x57, 0x96, 0x94, 0x76, 0x95, 0x41, 0x79, 0x22, 0x64, 0xf1, 0x5b, 0x67, 0x6d, 0xb5, 0x16, 0xb9, 0xb6, 0x3e, 0x97, 0xf4, 0x2e, 0xd3, 0xca, 0x2c, 0x3f, 0xf3, 0xc4, 0xa6, 0xe0, 0x8f, 0xf0, 0x96, 0x54, 0xb9, 0x6f, 0x6d, 0x24, 0x4c, 0x9c, 0xc4, 0xa7, 0xf0, 0x10, 0xee, 0x6f, 0xb6, 0xec, 0x5d, 0xbb, 0xf1, 0x58, 0x67, 0xbb, 0xc9, 0x9b, 0x49, 0x41, 0xcf, 0xd3, 0x65, 0x9e, 0x85, 0xe0, 0x63, 0xcf, 0xbb, 0x89, 0x7b, 0x2e, 0x18, 0xc8, 0x2f, 0x34, 0xe7, 0x48, 0x80, 0x96, 0x25, 0xca, 0x15, 0x6c, 0x6b, 0xcf, 0x29, 0x92, 0xac, 0x26, 0xea, 0x8b, 0xcf, 0xdd, 0xd6, 0xbc, 0x45, 0x0d, 0x6e, 0x5a, 0x3a, 0x2a, 0x5c, 0x45, 0xfe, 0x55, 0xba, 0x3d, 0xe3, 0x55, 0x06, 0xa3, 0x64, 0x98, 0xc6, 0xd0, 0x72, 0x3c, 0x57, 0xd0, 0xd1, 0xc7, 0x24, 0xbc, 0x03, 0x35, 0x09, 0x7c, 0x19, 0x7a, 0x27, 0x1e, 0x72, 0x1e, 0x28, 0x5f, 0x3c, 0xc4, 0x91, 0xcb, 0xf6, 0xec, 0x78, 0xbb, 0xcf, 0x90, 0x6b, 0xb6, 0x5f, 0x96, 0xd1, 0xf3, 0x40, 0xf3, 0x17, 0xdb, 0x59, 0xe1, 0x4d, 0x13, 0x6c, 0xa2, 0x8a, 0x00, 0xf0, 0x9c, 0x67, 0xfc, 0x59, 0xbe, 0xe4, 0x21, 0xdb, 0x3c, 0x07, 0xc9, 0x87, 0xb7, 0x8a, 0xb5, 0x73, 0xd0, 0x50, 0x17, 0x18, 0x27, 0xc4, 0x63, 0xbb, 0x1a, 0x81, 0xf8, 0x5c, 0x7b, 0x2d, 0xe5, 0xda, 0x72, 0x21, 0x3c, 0xa9, 0x0b, 0x5c, 0x46, 0x8d, 0xa0, 0x70, 0xa5, 0xf7, 0x21, 0x0f, 0xab, 0xdc, 0x36, 0xc2, 0xc8, 0xac, 0x56, 0x01, 0xb8, 0x56, 0x60, 0x34, 0xf8, 0x08, 0x52, 0x91, 0xfb, 0x41, 0x14, 0xc6, 0xce, 0x8d, 0x7d, 0xfd, 0x77, 0x6f, 0xde, 0xbf, 0xad, 0x37, 0xde, 0x4f, 0x0e, 0x54, 0x00, 0xa0, 0x04, 0x83, 0x28, 0x83, 0xb4, 0x59, 0xc6, 0xee, 0x7a, 0xf4, 0x60, 0x25, 0x23, 0x79, 0x14, 0xc2, 0x13, 0x9a, 0x6d, 0xde, 0x32, 0x11, 0x73, 0x69, 0xc4, 0x4b, 0xcd, 0xfc, 0x9d, 0x7b, 0xf0, 0x8f, 0xc7, 0xd3, 0x3e, 0xfe, 0xee, 0x74, 0xff, 0xed, 0xef, 0x5e, 0x3d, 0xf8, 0x27, 0xf7, 0x9b, 0xf8, 0x18, 0x7c, 0x1b, 0x7e, 0x17, 0xbf, 0xf8, 0xf6, 0xfb, 0xe3, 0xe9, 0xf7, 0xc9, 0x4b, 0x1e, 0xbf, 0x32, 0xdf, 0x26, 0x2f, 0x50, 0x89, 0x4f, 0x87, 0x43, 0xe4, 0xf3, 0x7d, 0x18, 0x05, 0x7e, 0xe4, 0xfd, 0xce, 0x65, 0x47, 0x26, 0x0e, 0xe6, 0x14, 0xb3, 0x70, 0x7f, 0xfc, 0xfe, 0xfe, 0x2e, 0x08, 0x5e, 0x04, 0xdf, 0xf2, 0xe8, 0x75, 0xfc, 0x84, 0x22, 0xff, 0x70, 0x1b, 0x17, 0x79, 0x7c, 0xf3, 0x7e, 0x73, 0x59, 0x16, 0x3e, 0x4f, 0x13, 0x62, 0xd1, 0x4e, 0x1e, 0x82, 0x6e, 0x02, 0x9f, 0x9f, 0x89, 0x3d, 0xa2, 0x1c, 0x4c, 0xb3, 0xf5, 0x80, 0x2e, 0x5f, 0xb4, 0x13, 0xb6, 0x59, 0x01, 0x99, 0x49, 0xe1, 0x06, 0xdc, 0x2f, 0xc0, 0x43, 0xe8, 0x11, 0x58, 0xa2, 0xa8, 0x80, 0xaf, 0xc4, 0x91, 0xe4, 0x19, 0x11, 0x2e, 0x2a, 0xe6, 0xd5, 0xb5, 0x2b, 0x02, 0x9e, 0x6c, 0x10, 0x93, 0x85, 0xe4, 0x92, 0x02, 0xb8, 0xb6, 0xd4, 0x9e, 0x4b, 0x44, 0x92, 0x8a, 0x1d, 0xe4, 0x69, 0x9a, 0x94, 0x4a, 0x18, 0x9e, 0x70, 0xc5, 0xc3, 0x84, 0x03, 0x27, 0x6f, 0xe3, 0x22, 0x64, 0x97, 0xe5, 0xce, 0x65, 0x84, 0xaa, 0xec, 0x38, 0x34, 0xb5, 0x43, 0x69, 0x35, 0x7b, 0xb6, 0x73, 0x67, 0xa7, 0x77, 0x19, 0x39, 0x09, 0x65, 0x9c, 0x7f, 0x44, 0xc5, 0x6b, 0x51, 0xdb, 0xc2, 0xac, 0x92, 0x16, 0x92, 0x60, 0xdc, 0x95, 0x1b, 0x42, 0x43, 0x27, 0x55, 0x56, 0x27, 0xd4, 0xdf, 0x96, 0x3a, 0x51, 0x09, 0x2c, 0xcb, 0x9e, 0x98, 0x71, 0x53, 0xe7, 0xa6, 0xc9, 0xf3, 0x0a, 0xd2, 0x14, 0xbc, 0xd9, 0xe6, 0x69, 0x56, 0x43, 0x89, 0x83, 0x8e, 0x65, 0xe0, 0x5d, 0x50, 0x3f, 0xca, 0x16, 0xb0, 0xd0, 0x28, 0x03, 0xa3, 0x14, 0x28, 0x8a, 0xf0, 0xb9, 0x88, 0xfd, 0xdb, 0xa2, 0xf1, 0xf1, 0xed, 0x87, 0x1f, 0xea, 0x0d, 0x03, 0x77, 0x84, 0xb3, 0xc0, 0x3f, 0x96, 0xb1, 0xb7, 0x13, 0x1b, 0x3c, 0xf0, 0x7f, 0x0b, 0x9b, 0x00, 0x2d, 0xa3, 0x1d, 0x2f, 0x8e, 0x80, 0x95, 0x0e, 0x32, 0x8c, 0x8d, 0xee, 0x62, 0x99, 0xed, 0x3c, 0x24, 0x7e, 0x6c, 0xb8, 0xf6, 0x52, 0xa9, 0x52, 0x15, 0xc7, 0x31, 0x8f, 0xfd, 0x6d, 0x16, 0x6a, 0xb5, 0x57, 0x07, 0x6b, 0x76, 0x60, 0xef, 0xa9, 0xda, 0xef, 0xfc, 0xa3, 0x35, 0x2f, 0xed, 0xd1, 0x24, 0xd0, 0xff, 0xe6, 0x18, 0x05, 0xfc, 0x21, 0x0e, 0x7d, 0x57, 0x25, 0x5c, 0x7e, 0x1b, 0x04, 0xbb, 0xd3, 0x1f, 0xd1, 0x0a, 0xf9, 0x17, 0xb7, 0x45, 0xe3, 0xfb, 0xfa, 0x71, 0x43, 0xe4, 0x89, 0x79, 0x5d, 0xe7, 0xcc, 0xcb, 0xd2, 0xd3, 0x82, 0x0c, 0x35, 0xab, 0xbc, 0x71, 0x41, 0x14, 0x42, 0xcf, 0x40, 0xd0, 0xa0, 0x8a, 0x33, 0x62, 0x29, 0xfd, 0x47, 0x51, 0xb3, 0xcd, 0xb2, 0x6c, 0xf5, 0x17, 0x51, 0xe3, 0x62, 0xc5, 0xfc, 0xfa, 0xba, 0xb0, 0xb4, 0xae, 0x26, 0x65, 0xa0, 0xc7, 0x75, 0xf2, 0xd4, 0x33, 0x50, 0x59, 0x06, 0x1e, 0x4d, 0x0d, 0x70, 0x00, 0x4d, 0xd6, 0xc0, 0xb5, 0x0d, 0xb5, 0x23, 0x1b, 0x6b, 0xa8, 0xab, 0xec, 0x6b, 0x14, 0xfd, 0x12, 0xe2, 0x2e, 0xb5, 0x0d, 0x55, 0xc9, 0x23, 0xd7, 0x4a, 0xe7, 0xf0, 0xbb, 0x7f, 0x5b, 0x34, 0x92, 0x5d, 0x8b, 0x58, 0x48, 0xae, 0xcc, 0xb3, 0x85, 0x9a, 0x01, 0xd9, 0x9a, 0x1c, 0xcf, 0x19, 0xed, 0xb2, 0x4c, 0x1c, 0xa5, 0x7a, 0x14, 0x70, 0xd7, 0x32, 0x4d, 0x16, 0x84, 0x79, 0xe4, 0x1f, 0xed, 0x4a, 0x23, 0x94, 0x32, 0x04, 0x64, 0x59, 0xae, 0xf5, 0x6c, 0xad, 0xd7, 0x15, 0xe0, 0xbf, 0x92, 0xd4, 0xad, 0x5b, 0xbb, 0x90, 0x60, 0xff, 0xaa, 0x4a, 0xab, 0x75, 0x49, 0xad, 0xa2, 0x56, 0x2b, 0x9d, 0xc8, 0x78, 0x64, 0x65, 0x61, 0x49, 0xbc, 0x51, 0xd3, 0xbf, 0x28, 0x0d, 0x75, 0xf8, 0x6a, 0x63, 0x72, 0x98, 0x66, 0xb5, 0x0e, 0x21, 0xbf, 0x85, 0x14, 0xc9, 0x8d, 0x6b, 0x16, 0xef, 0xdf, 0xd5, 0x1b, 0x87, 0x3b, 0x28, 0xc6, 0xa0, 0xc1, 0x8e, 0x37, 0x77, 0xdc, 0x19, 0x18, 0x35, 0x87, 0x5d, 0x44, 0x26, 0xcc, 0xc3, 0xe3, 0xea, 0xa8, 0x2f, 0xd1, 0x23, 0x2b, 0xce, 0xab, 0x41, 0xf8, 0xdc, 0x25, 0x51, 0xfb, 0xab, 0xcf, 0x9a, 0xfa, 0x5a, 0x8c, 0xaf, 0x18, 0x82, 0xc7, 0x8c, 0x2e, 0x50, 0xfb, 0xa7, 0x6a, 0x72, 0x5b, 0x99, 0xd2, 0x90, 0x82, 0x23, 0xa4, 0x29, 0xc9, 0x67, 0x25, 0x9c, 0x6d, 0x93, 0x46, 0x51, 0x03, 0xb9, 0x48, 0x4a, 0xad, 0xb2, 0xf4, 0x9c, 0x99, 0x5c, 0x4a, 0x99, 0xc4, 0xe9, 0x8d, 0xfe, 0x82, 0x5d, 0x13, 0xfc, 0x04, 0x48, 0x5c, 0xd8, 0x34, 0x7a, 0xce, 0x3c, 0x8d, 0x0b, 0x64, 0xa7, 0x5d, 0x06, 0xe1, 0xc2, 0x43, 0xac, 0xeb, 0x16, 0xb6, 0x0c, 0xe3, 0xe7, 0x9c, 0x18, 0xa8, 0x58, 0x22, 0x68, 0xe0, 0xae, 0x55, 0xcb, 0x10, 0x8e, 0x54, 0x28, 0xd2, 0x2b, 0xfe, 0xa5, 0x75, 0x63, 0xaf, 0x76, 0xad, 0x56, 0xaf, 0x0d, 0xe4, 0x06, 0xb4, 0xa3, 0x7a, 0xb2, 0xb2, 0xb6, 0xf4, 0x64, 0x7d, 0x2b, 0xe1, 0x4a, 0x6d, 0x1b, 0x5b, 0x52, 0x08, 0x82, 0x72, 0x5a, 0x5b, 0x28, 0x1f, 0xc8, 0x93, 0x70, 0x1e, 0xf3, 0xdb, 0xd0, 0xe3, 0x3d, 0x88, 0x15, 0xf8, 0x07, 0xea, 0xb2, 0x98, 0xe6, 0xcb, 0x85, 0xcf, 0xbc, 0x97, 0x73, 0x3f, 0x5e, 0xc4, 0xe5, 0x32, 0xcc, 0x17, 0x52, 0xa0, 0xf8, 0x1b, 0x08, 0x6e, 0x21, 0xd9, 0x30, 0x0a, 0x61, 0x7b, 0xd1, 0xe3, 0x85, 0xb5, 0xdb, 0xfd, 0x71, 0x6b, 0x42, 0xf7, 0xfe, 0xb5, 0xc3, 0x5e, 0x84, 0xbb, 0xd0, 0x71, 0x94, 0x0d, 0xfe, 0x34, 0xed, 0xd3, 0xcf, 0xd0, 0xe3, 0xc6, 0x46, 0xea, 0x0f, 0xb4, 0x06, 0xbf, 0x01, 0xd1, 0x98, 0x11, 0x03, 0xf4, 0x40, 0x4b, 0x4a, 0xa8, 0xcf, 0x93, 0x45, 0x5a, 0x5d, 0xe0, 0xb0, 0x79, 0x9e, 0x9c, 0xbe, 0xbb, 0x50, 0x97, 0x15, 0xd6, 0xda, 0x05, 0xc5, 0x81, 0xf5, 0xbd, 0xdd, 0x9a, 0xa4, 0x30, 0x21, 0x34, 0xb1, 0xc8, 0x54, 0xab, 0xd2, 0x22, 0x2b, 0xc3, 0x22, 0x33, 0xa0, 0xc9, 0xba, 0x90, 0x29, 0x68, 0x61, 0x2d, 0x93, 0x80, 0xc0, 0x02, 0x78, 0x42, 0xe4, 0xf1, 0xa1, 0x3d, 0xc7, 0x75, 0x5b, 0xe8, 0xa4, 0x48, 0xb3, 0x58, 0x06, 0xda, 0xe8, 0xb0, 0x88, 0xab, 0x36, 0x36, 0xd6, 0xb7, 0xa1, 0xd2, 0x26, 0x49, 0xa1, 0x48, 0xb3, 0xcc, 0xf7, 0xa4, 0x7b, 0x08, 0xa1, 0xe4, 0x82, 0xd3, 0xf1, 0xf5, 0x73, 0xf8, 0xf1, 0x4c, 0x9e, 0xfd, 0xd0, 0xbc, 0xdd, 0x8c, 0x9d, 0xb7, 0x4c, 0x40, 0x46, 0xc7, 0x01, 0x99, 0x62, 0xc3, 0xc0, 0x29, 0x99, 0xbc, 0x91, 0xb0, 0x71, 0x72, 0x17, 0x01, 0x75, 0xf3, 0x65, 0x8b, 0xe7, 0x0e, 0x5a, 0x84, 0x96, 0xde, 0xcf, 0x14, 0x7e, 0xb9, 0xb1, 0xd4, 0x84, 0x03, 0xc6, 0xa5, 0xa8, 0xd3, 0xd7, 0xa2, 0xdc, 0x28, 0x88, 0xb3, 0x02, 0x66, 0xe5, 0xda, 0x44, 0x85, 0x29, 0x0a, 0x4a, 0xb3, 0x2a, 0x2b, 0x69, 0xf1, 0xba, 0x28, 0x91, 0x74, 0x59, 0x23, 0xab, 0x20, 0x89, 0x52, 0x62, 0x53, 0x2f, 0x42, 0xf3, 0x10, 0x1f, 0x38, 0xf7, 0x45, 0x14, 0x47, 0x8e, 0x48, 0x4e, 0xd4, 0xc1, 0x8a, 0x6f, 0xcb, 0x33, 0xb2, 0xab, 0x1b, 0x7a, 0x67, 0xa0, 0xd4, 0x5a, 0x46, 0xc8, 0x14, 0xb0, 0x61, 0xd7, 0x65, 0x1c, 0x52, 0x14, 0x75, 0x6b, 0xe9, 0xa0, 0x5c, 0xc6, 0x9f, 0xb5, 0x78, 0xb6, 0x5a, 0x53, 0x79, 0x4d, 0x85, 0xad, 0xe4, 0xf9, 0x4c, 0x2a, 0x34, 0x25, 0x7c, 0xcc, 0x2a, 0x9e, 0x64, 0x52, 0xe1, 0x23, 0xd7, 0x69, 0x95, 0x53, 0xf3, 0x20, 0xf0, 0x7d, 0xcd, 0xac, 0x0e, 0x95, 0x9f, 0xc2, 0x23, 0xb9, 0x4e, 0x0c, 0x1c, 0x9a, 0xcb, 0x32, 0x93, 0xb9, 0xc9, 0xfd, 0x03, 0xa2, 0xa4, 0xb0, 0x45, 0x24, 0x78, 0x14, 0x46, 0xd6, 0x3f, 0x88, 0x24, 0xda, 0xf9, 0xbb, 0x38, 0xe0, 0x47, 0x7e, 0xbc, 0x11, 0x17, 0x3f, 0x3c, 0xbe, 0xdd, 0xb8, 0x33, 0xe3, 0x02, 0x71, 0xc8, 0x20, 0xbf, 0xec, 0x2c, 0x50, 0xa7, 0xed, 0x05, 0x65, 0x6b, 0x1e, 0x2c, 0x4c, 0x64, 0x60, 0x88, 0x97, 0xf5, 0x1d, 0xbc, 0x9f, 0xa9, 0xa9, 0x3a, 0x80, 0x7f, 0xdd, 0x09, 0xea, 0xc8, 0x11, 0xab, 0x02, 0xac, 0x27, 0xd5, 0xb5, 0x8c, 0x11, 0x1c, 0x34, 0x24, 0xa2, 0xa9, 0xbf, 0xb3, 0xfe, 0x64, 0x4d, 0x9b, 0x52, 0xef, 0x27, 0x2f, 0xaa, 0xac, 0xd5, 0xb9, 0x2d, 0x20, 0xce, 0x68, 0xa5, 0x1a, 0xd1, 0x59, 0xec, 0xb2, 0x3c, 0x2f, 0x52, 0x53, 0x9b, 0x0a, 0xce, 0x2e, 0x34, 0x14, 0x1c, 0xad, 0x5b, 0x4b, 0x6e, 0xb4, 0x8a, 0x23, 0xc5, 0x93, 0xe0, 0x36, 0x7f, 0x91, 0x5d, 0xe0, 0xb9, 0xde, 0x04, 0x54, 0xe7, 0xc2, 0x0e, 0x3d, 0x82, 0x0e, 0xa0, 0xd1, 0xb9, 0xde, 0xc2, 0x60, 0xcb, 0x0c, 0x5b, 0xf8, 0x72, 0x21, 0x82, 0x8c, 0xf0, 0x74, 0x2e, 0xae, 0x98, 0xe7, 0x81, 0x53, 0x87, 0xa7, 0x20, 0xcb, 0x4a, 0x42, 0x7c, 0x2a, 0xd3, 0x64, 0xe1, 0xba, 0x7c, 0x46, 0x8d, 0xc5, 0x27, 0xea, 0x18, 0x99, 0x75, 0x1e, 0xe2, 0x63, 0xe5, 0xae, 0x0c, 0x15, 0x65, 0x5b, 0x83, 0x4e, 0x95, 0x31, 0xde, 0x9c, 0xe6, 0x69, 0x6b, 0x0d, 0xbe, 0x06, 0xb0, 0xab, 0xba, 0x49, 0x53, 0x93, 0x22, 0x02, 0x10, 0x95, 0x4a, 0x88, 0x38, 0x0a, 0x6e, 0xec, 0xf0, 0xe0, 0x5b, 0x7d, 0x7c, 0xfb, 0x7e, 0x03, 0xb1, 0xfc, 0xe9, 0xe8, 0xbb, 0xbe, 0x47, 0x9e, 0x41, 0x59, 0x43, 0x9c, 0x01, 0x06, 0x7b, 0x29, 0xfb, 0x7e, 0x9c, 0x51, 0xe8, 0x2e, 0xc2, 0x95, 0xc2, 0x11, 0xeb, 0x01, 0x2d, 0x7d, 0x55, 0x2f, 0xe7, 0x72, 0x05, 0x75, 0x6a, 0xc0, 0x19, 0xd0, 0x85, 0x7f, 0x52, 0x5c, 0xfc, 0x6a, 0xeb, 0x1a, 0xf8, 0xed, 0xdd, 0x66, 0xee, 0x86, 0x19, 0x9a, 0x8c, 0x0b, 0xd1, 0x4f, 0x38, 0x4f, 0xc8, 0x39, 0x54, 0x31, 0xc4, 0x26, 0x99, 0x4b, 0xed, 0x48, 0x5a, 0x12, 0x04, 0xf5, 0xa2, 0x09, 0x03, 0x70, 0x91, 0x65, 0xfc, 0xe7, 0x59, 0x3e, 0xfb, 0x7a, 0xeb, 0x9a, 0xe6, 0x7d, 0xbd, 0x11, 0x54, 0xac, 0x2f, 0x88, 0xbe, 0xc9, 0xf6, 0x88, 0x42, 0xe9, 0xf2, 0xcb, 0x28, 0xe4, 0x00, 0x28, 0x5c, 0xba, 0x89, 0x3d, 0x11, 0x90, 0xcb, 0xb5, 0x50, 0xf7, 0xc3, 0xd0, 0x7b, 0x76, 0x0b, 0xc5, 0x28, 0x33, 0x9d, 0x41, 0x7a, 0x94, 0x95, 0x4e, 0x81, 0x08, 0xe7, 0xd4, 0x9c, 0xeb, 0xb2, 0x54, 0x55, 0x96, 0x04, 0x2a, 0x4c, 0x14, 0x38, 0xb1, 0x39, 0x1a, 0xcf, 0x46, 0xae, 0x72, 0x4c, 0xb8, 0x13, 0x4c, 0x06, 0x91, 0x4c, 0xf4, 0x2b, 0x9b, 0xc5, 0x46, 0x1f, 0xe3, 0x24, 0xb0, 0xfb, 0x24, 0x3a, 0xc4, 0x31, 0xfb, 0x0b, 0x5f, 0x1c, 0xc5, 0xaf, 0x58, 0xf7, 0x6f, 0x6e, 0x9a, 0xbb, 0x82, 0x6d, 0x9b, 0xde, 0xb9, 0xb0, 0xc9, 0x45, 0x11, 0x9b, 0x28, 0x3e, 0x67, 0x5a, 0x87, 0x01, 0x64, 0x2c, 0x0e, 0xe3, 0xb0, 0x76, 0x5c, 0xd7, 0xd0, 0xbc, 0x8e, 0x77, 0x03, 0xfb, 0x44, 0x1c, 0xef, 0xbe, 0x7f, 0x1d, 0x27, 0x5c, 0x1f, 0x92, 0xc8, 0x1c, 0xc3, 0xe3, 0x4e, 0x9e, 0x54, 0xc8, 0xf7, 0x81, 0x88, 0x93, 0x48, 0x4a, 0xdf, 0x0b, 0x5c, 0x20, 0x38, 0x90, 0x1c, 0xa8, 0x17, 0x3f, 0x08, 0xc5, 0xe3, 0x84, 0xf1, 0x68, 0x77, 0xda, 0xc9, 0x24, 0x91, 0xf2, 0x41, 0xf8, 0xfb, 0x38, 0xc6, 0x93, 0x48, 0x6e, 0x45, 0x12, 0x07, 0x26, 0x56, 0xf2, 0x41, 0x2a, 0xd2, 0x00, 0x41, 0xc8, 0x4f, 0xfe, 0x7e, 0x1b, 0x9e, 0x62, 0x1e, 0x05, 0xfb, 0x67, 0xcc, 0xfa, 0x6d, 0x20, 0x21, 0xb3, 0xe6, 0x91, 0xb9, 0x13, 0x24, 0x27, 0x17, 0x0e, 0x63, 0x23, 0xe8, 0xfe, 0x4c, 0x36, 0x31, 0x0e, 0xb3, 0x46, 0x4e, 0x4d, 0x70, 0x58, 0x42, 0xc3, 0x2f, 0x97, 0xe5, 0xe3, 0x72, 0xfc, 0xf6, 0xc4, 0xf0, 0xa5, 0xf3, 0x58, 0xc6, 0x32, 0x91, 0xdc, 0x97, 0x3e, 0xe3, 0x27, 0x8d, 0x8f, 0x06, 0x72, 0x24, 0x7c, 0x09, 0x52, 0x2b, 0x0f, 0x34, 0xa4, 0x14, 0xc0, 0x74, 0x99, 0xa8, 0xd0, 0x04, 0xca, 0xb7, 0x89, 0x3d, 0x29, 0x69, 0xbd, 0x50, 0xc6, 0x5e, 0x18, 0x19, 0x78, 0x5c, 0x73, 0xc0, 0xbe, 0x7f, 0xc7, 0x63, 0x48, 0xcc, 0x60, 0x7f, 0xf0, 0x23, 0x11, 0xbd, 0xfe, 0x5e, 0x1e, 0x45, 0x10, 0x71, 0xb1, 0x73, 0xf7, 0x37, 0xe1, 0x7e, 0x43, 0x23, 0x21, 0x08, 0x34, 0x7c, 0xe6, 0x71, 0x76, 0x39, 0xd0, 0xc3, 0x76, 0x96, 0x68, 0xfd, 0xd8, 0xbb, 0x54, 0xa9, 0x21, 0xab, 0xc7, 0x79, 0x1c, 0x7b, 0x36, 0x3a, 0x17, 0x3b, 0x3b, 0x4f, 0xf4, 0xb1, 0xbf, 0xdb, 0xbd, 0x76, 0xfd, 0x20, 0xe0, 0xd1, 0xf7, 0x49, 0x14, 0xbd, 0x14, 0xe1, 0xe9, 0xc1, 0x0d, 0xa2, 0xe4, 0xa5, 0x0a, 0xd4, 0x51, 0x86, 0xaf, 0xb6, 0xf1, 0xfd, 0x29, 0x94, 0x8a, 0xa9, 0x93, 0xc0, 0x37, 0xcf, 0x8f, 0x52, 0x89, 0xd8, 0x7b, 0x70, 0x5f, 0xdc, 0xed, 0xdd, 0x28, 0x0c, 0xa2, 0x53, 0x18, 0x45, 0x3e, 0x7c, 0x19, 0xc7, 0x51, 0x78, 0x8a, 0x78, 0x1c, 0xf8, 0x51, 0x2c, 0xf9, 0xcb, 0x38, 0xde, 0xf3, 0x04, 0xae, 0xdc, 0x7f, 0x0f, 0x2f, 0xdf, 0xef, 0x9f, 0x5b, 0xb1, 0x78, 0xce, 0x5d, 0xb0, 0x8b, 0x81, 0x3b, 0xd9, 0xc5, 0x81, 0x44, 0x21, 0x52, 0xdf, 0x21, 0x14, 0x5d, 0x78, 0xcf, 0x83, 0xb4, 0xee, 0x80, 0xf1, 0xdd, 0x85, 0xf5, 0xc8, 0x33, 0x8f, 0x2f, 0x76, 0xfa, 0x28, 0xaa, 0xb7, 0x5c, 0x6c, 0xa5, 0x64, 0x09, 0x3b, 0x85, 0xf8, 0xe0, 0xa7, 0xd7, 0x42, 0xe2, 0xe3, 0x73, 0x9d, 0x08, 0xa8, 0x2a, 0xe9, 0x4b, 0x3a, 0x54, 0xb2, 0xd7, 0x92, 0x43, 0x59, 0x9f, 0x94, 0x86, 0xfc, 0x0f, 0x22, 0x98, 0x1c, 0x21, 0xdc, 0x34, 0x0d, 0x7f, 0x58, 0x94, 0x79, 0xfc, 0x15, 0x4a, 0x38, 0x0d, 0x61, 0xa1, 0x96, 0xe3, 0xad, 0x24, 0xab, 0x8f, 0x07, 0x1f, 0x4e, 0x46, 0xb8, 0x1e, 0xd9, 0xe7, 0xbc, 0xea, 0x6b, 0x97, 0x71, 0xa9, 0xa5, 0xb4, 0xb1, 0xae, 0x6b, 0x99, 0x23, 0xd8, 0xd4, 0x81, 0xec, 0x4e, 0x28, 0x69, 0x08, 0xca, 0x79, 0x62, 0x42, 0x5c, 0x5c, 0x26, 0xfb, 0x79, 0xf2, 0xe4, 0xc5, 0x73, 0x2f, 0xe0, 0x8b, 0xf2, 0xe2, 0x7a, 0xbd, 0x14, 0xde, 0xfc, 0x82, 0x87, 0x2f, 0x76, 0x7f, 0x38, 0x30, 0xe7, 0x95, 0xfb, 0x9d, 0xf3, 0xbb, 0x57, 0xfb, 0xfd, 0xee, 0x7e, 0x7f, 0xb8, 0xff, 0x83, 0x38, 0x9e, 0xe2, 0xef, 0xdc, 0xd7, 0xbf, 0xb1, 0x36, 0x7b, 0x0b, 0x2e, 0x7e, 0xed, 0xc8, 0xc4, 0x6a, 0xdb, 0xb2, 0x74, 0xb0, 0xe0, 0x62, 0x7b, 0xcb, 0x06, 0x7c, 0xf9, 0xdd, 0x45, 0xda, 0xc9, 0x1d, 0x70, 0x69, 0xb1, 0x03, 0xbb, 0x30, 0x31, 0xc1, 0x36, 0xa2, 0xca, 0x72, 0x70, 0x5d, 0x48, 0x82, 0xe9, 0xc2, 0xff, 0x24, 0x1f, 0xfe, 0x76, 0xdb, 0x9e, 0xf5, 0xdb, 0x87, 0x4d, 0xbf, 0xb0, 0x71, 0xb1, 0xa3, 0xbb, 0xa0, 0xac, 0x71, 0x0f, 0x02, 0x8d, 0xd1, 0x24, 0x2a, 0xd8, 0x70, 0x07, 0x48, 0x1c, 0x7e, 0xbe, 0xde, 0xd9, 0x4d, 0xd0, 0x9d, 0x39, 0x75, 0x77, 0x48, 0x96, 0x55, 0xf9, 0x93, 0x68, 0x5e, 0x55, 0x67, 0x46, 0x34, 0x64, 0x9d, 0xc6, 0xaa, 0xaa, 0x55, 0x4f, 0xe3, 0x1d, 0x06, 0x82, 0xad, 0x29, 0xd6, 0x3e, 0x41, 0x8d, 0xa0, 0xc3, 0xab, 0x3a, 0x2c, 0x11, 0x89, 0x69, 0x5d, 0x98, 0xa6, 0xb0, 0x26, 0x33, 0x25, 0x2d, 0x6e, 0x67, 0x22, 0xb5, 0x26, 0x44, 0xc4, 0x8a, 0xe4, 0x18, 0xff, 0xc2, 0x7a, 0xcc, 0x57, 0xe7, 0x1a, 0xd9, 0xb6, 0x8e, 0xc8, 0x8d, 0x34, 0x6f, 0x0b, 0xc6, 0x3f, 0x76, 0xdc, 0xce, 0x13, 0x77, 0x9d, 0x01, 0x42, 0x74, 0x44, 0xa8, 0xfe, 0xd2, 0x9c, 0x34, 0xad, 0xe6, 0x92, 0xf8, 0x2c, 0x51, 0xc1, 0x68, 0xd9, 0x13, 0x7a, 0xdf, 0xae, 0x2a, 0xb3, 0xaa, 0xec, 0x4a, 0xf7, 0x9b, 0xeb, 0xd4, 0xd2, 0x47, 0x89, 0x9d, 0xd7, 0xd7, 0x19, 0x54, 0xdd, 0xac, 0x0b, 0x33, 0xbc, 0xa6, 0xc1, 0xdc, 0xba, 0x68, 0x1a, 0x03, 0xce, 0x95, 0xd6, 0x60, 0x57, 0x69, 0x29, 0x35, 0xf8, 0x55, 0x02, 0x51, 0x04, 0x45, 0x1d, 0x71, 0x19, 0xdf, 0xe8, 0xb3, 0xe6, 0x87, 0x3f, 0x62, 0x3c, 0x69, 0xed, 0x38, 0xce, 0xeb, 0x0c, 0x0f, 0x87, 0x23, 0xbd, 0x6d, 0x5c, 0x3c, 0x8d, 0x27, 0xe1, 0x53, 0x97, 0xd4, 0x1c, 0x36, 0x34, 0xf5, 0x57, 0x9b, 0xb5, 0x0d, 0x07, 0x23, 0x1a, 0x9a, 0x97, 0xad, 0xb3, 0x02, 0x02, 0x07, 0x2a, 0x26, 0xa7, 0x99, 0xcd, 0x30, 0x7b, 0x60, 0x3b, 0xf6, 0x6d, 0x78, 0x7c, 0x79, 0x3c, 0x79, 0x26, 0x8e, 0x0e, 0xd1, 0x6f, 0x8b, 0x55, 0xf8, 0x6c, 0xb8, 0x31, 0xd7, 0xc8, 0xb6, 0x0b, 0x5b, 0x20, 0x5f, 0x9c, 0xd5, 0x36, 0xe0, 0x61, 0x4f, 0x64, 0x03, 0x46, 0xf6, 0x3d, 0x8d, 0x47, 0xf4, 0x3d, 0xd8, 0x47, 0x3f, 0xd9, 0xeb, 0x78, 0x92, 0xe7, 0xa1, 0x08, 0x74, 0x5b, 0x3f, 0xfe, 0xff, 0x9f, 0x6b, 0x5f, 0xcd, 0xaf, 0xda, 0x77, 0x1f, 0xde, 0xfe, 0xb0, 0x11, 0x9d, 0x2b, 0xfb, 0x45, 0x10, 0x52, 0xba, 0x7d, 0x0f, 0xea, 0x0b, 0xde, 0x38, 0x4d, 0xf4, 0x48, 0x8c, 0x52, 0x5e, 0x9c, 0xe9, 0x42, 0xcf, 0x97, 0x65, 0x12, 0x0b, 0x60, 0x13, 0xd6, 0x6f, 0xff, 0xc9, 0x6d, 0xfb, 0x93, 0x58, 0xf7, 0x48, 0x1a, 0xf4, 0x02, 0xcd, 0x79, 0x19, 0xf0, 0xc7, 0xbd, 0x00, 0xe4, 0x71, 0xa6, 0x47, 0xf7, 0xfa, 0x6c, 0x7d, 0x04, 0x58, 0xba, 0xf4, 0x9e, 0xf5, 0x32, 0x3d, 0x6e, 0xa1, 0xb3, 0xca, 0xb2, 0x29, 0xab, 0x2a, 0xa1, 0x85, 0xa6, 0x8a, 0xd6, 0x95, 0x6c, 0xab, 0x68, 0xdd, 0x82, 0xe6, 0x44, 0x5a, 0x8d, 0xff, 0xfb, 0xa1, 0xb5, 0x78, 0x43, 0x46, 0xcb, 0x17, 0x2a, 0xa7, 0x46, 0x72, 0xdb, 0xd6, 0xcd, 0xb9, 0x29, 0x8a, 0xaa, 0x3e, 0x25, 0x65, 0x6d, 0xce, 0x59, 0x69, 0x2b, 0xc8, 0xb7, 0xb3, 0xb6, 0x41, 0x6e, 0x03, 0x7b, 0x8a, 0xee, 0x5d, 0x99, 0x18, 0xae, 0xc2, 0x4f, 0xd6, 0xfd, 0xfd, 0x6d, 0x7c, 0xe4, 0x4d, 0xdb, 0x6c, 0x5c, 0xeb, 0x2e, 0xcc, 0xeb, 0x96, 0x61, 0x04, 0x4d, 0x1c, 0xbb, 0x81, 0x46, 0xcc, 0x06, 0x86, 0x7a, 0xc7, 0x16, 0xd0, 0xac, 0xf1, 0x17, 0x27, 0x43, 0xa8, 0x0b, 0x4e, 0xfd, 0x2b, 0xea, 0xa7, 0x3e, 0x8d, 0xea, 0x5f, 0x27, 0x1e, 0xaf, 0x88, 0xf2, 0x84, 0x20, 0xd7, 0xf9, 0x83, 0xe6, 0x3a, 0xda, 0x59, 0xd1, 0x5a, 0xcc, 0xda, 0x9d, 0x23, 0x18, 0xa9, 0x72, 0xd3, 0xd6, 0x49, 0xa1, 0x1a, 0x60, 0x65, 0x0a, 0x80, 0xb4, 0x36, 0xcf, 0x21, 0xda, 0xcc, 0xb9, 0xe4, 0x82, 0x5a, 0xfc, 0xb7, 0x4d, 0x86, 0xac, 0x76, 0x51, 0x6f, 0x67, 0x06, 0xf9, 0x60, 0x3d, 0x73, 0xed, 0x38, 0x2d, 0xee, 0x34, 0x82, 0x4c, 0x8e, 0x2e, 0x31, 0x14, 0x67, 0xf0, 0x7e, 0x6d, 0x32, 0x84, 0x86, 0x57, 0xa8, 0x02, 0x9c, 0x2b, 0x45, 0x0d, 0xd5, 0x9a, 0x9a, 0xc6, 0x0d, 0xb5, 0xeb, 0x9a, 0x75, 0x6e, 0xbf, 0xb9, 0xae, 0x64, 0xe7, 0x57, 0xe1, 0x0d, 0x9b, 0x0b, 0x95, 0xe9, 0xa2, 0xb1, 0x26, 0x2f, 0x04, 0xb4, 0xb6, 0xd1, 0x34, 0x21, 0x5f, 0x9b, 0x02, 0x30, 0xa4, 0x13, 0x93, 0x4a, 0x30, 0x15, 0xea, 0xed, 0x6b, 0x10, 0x66, 0x10, 0x51, 0xf1, 0xdc, 0x78, 0xea, 0x73, 0xfe, 0x7a, 0xf7, 0xb8, 0x99, 0xdd, 0x99, 0x5d, 0xbc, 0xc1, 0x9d, 0xf9, 0x3c, 0xb9, 0xb4, 0x66, 0x3d, 0x13, 0xd1, 0x77, 0x41, 0xb4, 0xf8, 0x04, 0xa2, 0x3c, 0x5d, 0x3c, 0x54, 0x03, 0xb7, 0x77, 0x97, 0x8f, 0xf4, 0x71, 0xb9, 0x83, 0xe8, 0x27, 0x59, 0xbd, 0xe2, 0x7b, 0x61, 0x3e, 0x6e, 0xb1, 0x58, 0xd5, 0xe8, 0xba, 0x12, 0x43, 0x93, 0xa9, 0xeb, 0x6a, 0xcc, 0xb5, 0x47, 0x9c, 0xd7, 0x66, 0xfd, 0xab, 0xe6, 0xba, 0x0d, 0xa3, 0x0e, 0x9a, 0xac, 0xa1, 0x59, 0xea, 0xb4, 0xce, 0xaa, 0x28, 0xb5, 0x3a, 0xb5, 0xca, 0x03, 0x55, 0xd6, 0x27, 0xab, 0x63, 0xc5, 0x65, 0xc8, 0xa2, 0x3f, 0x45, 0x5d, 0x23, 0xdb, 0x1c, 0x6f, 0x92, 0xb3, 0xeb, 0x5c, 0x66, 0x49, 0x73, 0x65, 0x6c, 0x00, 0xd7, 0x1a, 0xd9, 0x00, 0x81, 0x76, 0x99, 0x3d, 0xea, 0x8a, 0x5c, 0xbc, 0x51, 0xcc, 0x7c, 0xf2, 0xa6, 0x4f, 0xd3, 0x06, 0x94, 0x67, 0x45, 0x79, 0x56, 0xe5, 0x3a, 0x02, 0x5e, 0xa5, 0x59, 0xad, 0x74, 0x1d, 0x9e, 0x33, 0x8b, 0x72, 0xac, 0x12, 0x4d, 0xc3, 0xed, 0xb0, 0xd7, 0xac, 0x4b, 0x30, 0x99, 0xae, 0x6a, 0xab, 0xac, 0x29, 0xa8, 0x0a, 0xe4, 0xc2, 0xa0, 0x56, 0x73, 0x2d, 0xa2, 0x44, 0x51, 0x7f, 0xcb, 0x18, 0x0b, 0x7f, 0xa1, 0x6a, 0x67, 0xb8, 0xac, 0x55, 0xa0, 0x6d, 0xac, 0x92, 0xe4, 0x74, 0xe0, 0xfc, 0x73, 0xce, 0xff, 0xb5, 0x63, 0x65, 0xcd, 0xdb, 0x37, 0xef, 0xdf, 0x6f, 0x08, 0xd4, 0x19, 0x65, 0xd3, 0x78, 0x7d, 0x60, 0x54, 0xa8, 0x47, 0x07, 0x82, 0xa6, 0x13, 0x2e, 0xdc, 0x66, 0x9d, 0xd1, 0xce, 0x24, 0x73, 0x90, 0x84, 0xfd, 0x40, 0xcb, 0xd7, 0x5b, 0x9a, 0x32, 0xb2, 0xf1, 0xf1, 0x74, 0x3a, 0xf9, 0x2c, 0xf0, 0x13, 0x1f, 0xfc, 0xd6, 0x1c, 0x22, 0x5f, 0x87, 0x87, 0xc3, 0x41, 0x05, 0x27, 0x76, 0xd0, 0xc7, 0x63, 0x04, 0xc1, 0x23, 0x7d, 0x2d, 0x63, 0x23, 0x50, 0x88, 0xc1, 0x9f, 0x43, 0x30, 0xe2, 0x53, 0xa4, 0x84, 0x12, 0xa7, 0xe4, 0x64, 0x42, 0x16, 0xa6, 0xb8, 0x96, 0x04, 0x22, 0x09, 0x83, 0x50, 0x86, 0xea, 0xee, 0xde, 0xfd, 0xdd, 0xab, 0x13, 0x63, 0x60, 0xdc, 0xfe, 0xe1, 0xc8, 0x6e, 0x83, 0xc6, 0x77, 0x6f, 0xdf, 0xbd, 0x7f, 0xbb, 0x99, 0x21, 0x96, 0x87, 0x81, 0x03, 0x19, 0x58, 0x3f, 0x30, 0x3c, 0x2e, 0xbf, 0xb8, 0xbf, 0x02, 0xbc, 0xf9, 0x22, 0xc7, 0x89, 0xe6, 0x97, 0xee, 0xc2, 0xe0, 0x41, 0x1f, 0x64, 0x20, 0x8e, 0x09, 0xe4, 0x55, 0x9c, 0x1b, 0x11, 0xe6, 0x32, 0xb6, 0x32, 0x09, 0xb3, 0x48, 0x9a, 0xb3, 0x08, 0x72, 0x98, 0x03, 0x10, 0x08, 0x92, 0xa8, 0x54, 0xc6, 0xd7, 0x89, 0x0d, 0x8a, 0xd0, 0xcf, 0x4f, 0xdc, 0x87, 0x04, 0xf3, 0xfd, 0x87, 0xe0, 0x21, 0xd4, 0xfa, 0x19, 0x22, 0x8a, 0x70, 0xfc, 0xab, 0xdb, 0xa0, 0xf1, 0xdd, 0x63, 0xbd, 0x61, 0x00, 0xbc, 0x7e, 0xea, 0xdd, 0xb9, 0xb3, 0x78, 0xd6, 0xb9, 0x23, 0x4e, 0x74, 0x8d, 0x2f, 0xf4, 0xd2, 0x19, 0xe8, 0x9a, 0x77, 0xb9, 0x5e, 0xc3, 0x33, 0xbc, 0x6f, 0x9b, 0x26, 0xa5, 0x5c, 0x33, 0x2d, 0x31, 0xba, 0x4c, 0xd6, 0xf4, 0xba, 0xe6, 0x18, 0x6d, 0x63, 0xca, 0x39, 0x2d, 0x28, 0xd1, 0x7c, 0x01, 0x18, 0x25, 0x4e, 0xfc, 0x3a, 0x31, 0x67, 0x0c, 0x17, 0x45, 0x51, 0xd8, 0xa6, 0x10, 0x95, 0x42, 0xd9, 0x28, 0xd2, 0x5d, 0x53, 0x97, 0x45, 0x6c, 0x83, 0xd4, 0x57, 0x88, 0xc5, 0x2c, 0x2a, 0x6c, 0xae, 0x1f, 0x84, 0x70, 0x8f, 0x22, 0x89, 0xfe, 0xec, 0xb6, 0x34, 0x23, 0xbb, 0xc6, 0x45, 0x0c, 0xc0, 0xbd, 0x89, 0x4d, 0x00, 0x0e, 0x7c, 0x6a, 0x42, 0x7b, 0x6e, 0xc5, 0x30, 0xf2, 0x45, 0x7a, 0xb8, 0x26, 0x1c, 0x3a, 0x81, 0x61, 0xd2, 0x33, 0x67, 0xc0, 0x69, 0x2b, 0x39, 0x72, 0x44, 0xd9, 0x32, 0x51, 0x67, 0x7b, 0x96, 0x55, 0x4d, 0x7b, 0xe9, 0xf4, 0x39, 0x85, 0xa5, 0x32, 0x97, 0x2b, 0xbc, 0x83, 0x29, 0xaa, 0x8a, 0xe6, 0xf4, 0xd7, 0xb9, 0x33, 0xc0, 0x49, 0xa6, 0x55, 0x98, 0xd4, 0x5a, 0xe5, 0x4d, 0x2e, 0xb4, 0x6e, 0xb8, 0xae, 0x75, 0xa6, 0x63, 0xed, 0x81, 0x3b, 0xc2, 0x7f, 0xca, 0x6a, 0x96, 0x87, 0x2a, 0x33, 0xb1, 0x38, 0x46, 0x0f, 0x3a, 0x0c, 0x6f, 0x6b, 0x81, 0x37, 0x8f, 0x8f, 0x6f, 0x36, 0x0c, 0x30, 0x8e, 0xe0, 0xf3, 0x20, 0xac, 0x7b, 0xd6, 0xaf, 0xd8, 0xef, 0x78, 0xdd, 0x80, 0x0b, 0x28, 0x6b, 0x38, 0x79, 0xbd, 0x07, 0x36, 0x39, 0x78, 0x57, 0x8f, 0x39, 0xc3, 0x4c, 0x93, 0xfb, 0x89, 0xc4, 0xe7, 0xb6, 0xf6, 0x5c, 0x45, 0xb2, 0xae, 0xa3, 0xb0, 0x36, 0xb5, 0xac, 0xb3, 0x28, 0x95, 0x99, 0xca, 0x44, 0x15, 0x65, 0x59, 0x95, 0x29, 0x5a, 0xb2, 0x35, 0x51, 0x26, 0x4c, 0x12, 0x03, 0xc6, 0xe3, 0x9d, 0x88, 0xa2, 0x30, 0x14, 0x91, 0x10, 0x21, 0xa4, 0xa9, 0x0a, 0xe3, 0xbd, 0x08, 0x82, 0x93, 0x48, 0x02, 0x3f, 0x3e, 0x29, 0x11, 0x40, 0xcb, 0xc6, 0x0e, 0x6d, 0x6f, 0x62, 0x21, 0x14, 0xf7, 0xe1, 0xb6, 0xa5, 0xc1, 0xd5, 0x2e, 0x80, 0x03, 0x6c, 0xe0, 0x43, 0x0f, 0xca, 0x2b, 0xe7, 0xcb, 0xe4, 0xa2, 0x34, 0x2f, 0xb4, 0x09, 0x88, 0xfc, 0x46, 0xbe, 0xe4, 0x4f, 0xcf, 0x5c, 0x78, 0xd0, 0xd2, 0xcb, 0xad, 0x46, 0x29, 0x43, 0x1c, 0x5a, 0x1b, 0x56, 0x95, 0xb2, 0xe7, 0x94, 0xa0, 0x5f, 0xc1, 0x6b, 0x47, 0x08, 0x66, 0xe0, 0x60, 0xbe, 0xee, 0x99, 0x83, 0xf3, 0xaa, 0x54, 0x35, 0x55, 0x41, 0xcb, 0x80, 0x86, 0xf4, 0xc0, 0x11, 0x25, 0x20, 0x2b, 0xee, 0x0d, 0x7c, 0x5a, 0x8a, 0x3c, 0x6f, 0x20, 0x19, 0xea, 0x54, 0x52, 0x75, 0xcb, 0xbe, 0xc9, 0x72, 0x9b, 0xd1, 0xce, 0x27, 0x21, 0xbf, 0x0f, 0x23, 0x11, 0x3f, 0x37, 0x0c, 0xf8, 0x8c, 0xbf, 0xde, 0x3f, 0xbe, 0xdf, 0x0c, 0x0b, 0xc3, 0x8f, 0x60, 0x33, 0x14, 0xfc, 0xe2, 0x8a, 0xd9, 0x1b, 0x16, 0x77, 0xb9, 0x38, 0xce, 0x04, 0x47, 0xfd, 0x82, 0x3e, 0x9b, 0x06, 0x46, 0x25, 0x7a, 0x95, 0x68, 0x04, 0xf6, 0x25, 0x3e, 0xac, 0x5e, 0xd7, 0x05, 0x9b, 0x6b, 0x53, 0x78, 0x2d, 0xc8, 0x6b, 0xf0, 0xb5, 0x70, 0x1a, 0x2d, 0xdc, 0x42, 0xb1, 0x21, 0xc7, 0x0c, 0x15, 0x66, 0x70, 0x0c, 0xa0, 0x63, 0x91, 0x26, 0x56, 0xae, 0xe2, 0x2c, 0xb1, 0xa9, 0x48, 0x50, 0xcb, 0x74, 0x70, 0x48, 0xf8, 0x49, 0xec, 0xc3, 0x3b, 0x62, 0x72, 0xcf, 0xc7, 0xe1, 0x33, 0xfe, 0x22, 0xbb, 0x84, 0xed, 0x16, 0xd8, 0x31, 0x38, 0xae, 0xe5, 0xfd, 0x40, 0xb3, 0x20, 0x9c, 0xc2, 0x11, 0x3f, 0xee, 0xaf, 0xec, 0x61, 0xdd, 0x2a, 0xe2, 0x1d, 0x74, 0xac, 0x63, 0x05, 0xb4, 0xe9, 0xc7, 0xae, 0x65, 0xb9, 0x69, 0xf4, 0xca, 0x42, 0xa0, 0x3c, 0x3f, 0xed, 0x28, 0xd1, 0x95, 0x40, 0x95, 0x23, 0x60, 0x69, 0xae, 0x4a, 0x07, 0xdc, 0x91, 0x18, 0x08, 0xfd, 0x93, 0x54, 0x40, 0x98, 0xa9, 0x28, 0xa6, 0x3a, 0x57, 0x9a, 0x38, 0xb7, 0x5a, 0x19, 0xda, 0xd2, 0x96, 0xf0, 0x1b, 0xa9, 0xc7, 0x87, 0x37, 0x6f, 0x7e, 0x5b, 0x9e, 0xb1, 0x2f, 0xe4, 0x19, 0xe3, 0xd2, 0x73, 0x7e, 0x41, 0x9e, 0xad, 0x52, 0xda, 0xac, 0x43, 0xfa, 0x24, 0xcf, 0xa8, 0x5d, 0xbf, 0xae, 0x9d, 0xc1, 0xae, 0xbc, 0x69, 0x38, 0x0a, 0x71, 0x56, 0x07, 0x82, 0x7f, 0x17, 0xfb, 0x0f, 0x3c, 0x88, 0x8d, 0x8a, 0x0e, 0x6e, 0x20, 0x42, 0xff, 0x37, 0xb1, 0xfe, 0xaf, 0x6f, 0x93, 0x67, 0xab, 0x6d, 0x17, 0x36, 0x7d, 0x92, 0x67, 0x1f, 0xcb, 0x57, 0xff, 0xb1, 0x7c, 0xad, 0xf2, 0xec, 0x5a, 0xbe, 0xae, 0x07, 0x90, 0xe4, 0xf5, 0xee, 0xf8, 0xe7, 0xaf, 0x0e, 0xfe, 0x77, 0xfe, 0xd1, 0x79, 0xb8, 0x77, 0xbc, 0xe8, 0x45, 0xf0, 0x02, 0xc5, 0xfa, 0x85, 0x77, 0x17, 0xdd, 0xf9, 0x07, 0xff, 0xf0, 0x17, 0xce, 0xee, 0x7b, 0xcf, 0x61, 0xf7, 0x2f, 0x8e, 0x9c, 0xff, 0xde, 0x17, 0xbb, 0x43, 0xe0, 0xa8, 0xe3, 0x77, 0x61, 0xf4, 0x72, 0x27, 0x8e, 0xaf, 0xc3, 0xbf, 0x88, 0xa3, 0xdf, 0xbd, 0x78, 0xb5, 0x7d, 0xd8, 0x39, 0xf7, 0xde, 0x1d, 0x4b, 0x12, 0x16, 0x82, 0x26, 0xfe, 0xbc, 0x35, 0xf4, 0xb3, 0x8d, 0xb9, 0x5f, 0x5d, 0xa5, 0x61, 0xdb, 0x87, 0x06, 0x55, 0x9a, 0xcc, 0xe3, 0xd3, 0x02, 0x3e, 0x4f, 0xf2, 0xb2, 0x1f, 0x46, 0x26, 0xe6, 0xbe, 0xb7, 0xa8, 0x5b, 0xdc, 0x99, 0x16, 0x4b, 0xeb, 0x9f, 0xf3, 0xd0, 0x0b, 0x94, 0x82, 0x41, 0x88, 0x69, 0x59, 0xb6, 0x40, 0xfb, 0x34, 0x47, 0xba, 0xa5, 0xa9, 0x22, 0xc0, 0x4e, 0x73, 0x7b, 0x83, 0x10, 0xfb, 0x55, 0xcf, 0x25, 0xb7, 0xa1, 0xc8, 0x07, 0xd8, 0xb6, 0x00, 0x0c, 0xc1, 0xe8, 0x47, 0xc1, 0x07, 0xa4, 0xdb, 0x38, 0x30, 0xfb, 0x23, 0xf5, 0xfd, 0xe5, 0xf6, 0x01, 0xa1, 0xc8, 0x55, 0xbf, 0xac, 0x02, 0x86, 0x86, 0xff, 0xae, 0xb9, 0xb5, 0x22, 0xc9, 0x75, 0xc0, 0xe0, 0xaa, 0x69, 0x10, 0xa9, 0xd0, 0x64, 0xb5, 0x6e, 0xa8, 0xdd, 0x53, 0x5f, 0x67, 0x41, 0xca, 0xba, 0xa0, 0x89, 0x10, 0x13, 0x23, 0x27, 0x6d, 0x20, 0xc5, 0x0b, 0x25, 0x7c, 0x15, 0x03, 0x4e, 0x92, 0x10, 0x44, 0xec, 0xe4, 0xf3, 0xe0, 0x24, 0x1f, 0xd8, 0x6d, 0x28, 0x42, 0x76, 0x39, 0x50, 0x62, 0xd6, 0xb5, 0x1d, 0xc8, 0xc7, 0xe0, 0xd8, 0x71, 0x64, 0xdd, 0xcf, 0x87, 0x6c, 0x3f, 0xa7, 0x56, 0x57, 0xd1, 0x49, 0x20, 0x52, 0x5e, 0x67, 0xa5, 0xab, 0xf3, 0xda, 0xcd, 0x39, 0xd7, 0xab, 0x3d, 0x4f, 0x1b, 0xef, 0x08, 0x41, 0x54, 0x85, 0xcc, 0xcb, 0x57, 0xbb, 0x6c, 0xca, 0x4d, 0xa3, 0x64, 0x5e, 0x00, 0x17, 0xa5, 0x91, 0x26, 0x4e, 0x13, 0x23, 0x95, 0x6d, 0x32, 0x13, 0xa6, 0x74, 0xa8, 0x40, 0xe9, 0xe0, 0xc4, 0x69, 0xfb, 0x46, 0x1c, 0xf1, 0xe7, 0xc6, 0xae, 0x9e, 0xf5, 0xd7, 0xdb, 0x0d, 0xa0, 0x9e, 0xbb, 0xdc, 0xce, 0x8b, 0x98, 0x66, 0x10, 0xfc, 0x65, 0x9d, 0x2c, 0x9b, 0xec, 0xdc, 0xd3, 0xb6, 0xf8, 0x65, 0xb1, 0x1c, 0x25, 0x61, 0xf6, 0x98, 0x0b, 0x7e, 0xfc, 0xe4, 0xc6, 0x6d, 0x4e, 0xa8, 0xbf, 0x1a, 0x52, 0x5f, 0xa7, 0xc0, 0xaf, 0x23, 0x64, 0x57, 0x97, 0xad, 0xd0, 0x5f, 0x37, 0xeb, 0x9a, 0x35, 0x1e, 0xdb, 0x75, 0x4b, 0x6e, 0xd3, 0x66, 0x90, 0xdb, 0xb4, 0x22, 0x48, 0x6f, 0xcd, 0x64, 0x55, 0xc1, 0xd0, 0xb3, 0x50, 0x30, 0x52, 0xc9, 0x54, 0x81, 0xdc, 0x67, 0x69, 0x61, 0xf8, 0xf1, 0x95, 0x80, 0x4d, 0xe2, 0x9e, 0xdd, 0x36, 0xda, 0xbe, 0xda, 0x85, 0x04, 0x1a, 0xa7, 0xc9, 0xeb, 0x1c, 0x30, 0x60, 0x87, 0xcd, 0xbd, 0x77, 0x11, 0x80, 0x09, 0x1a, 0x25, 0x73, 0x68, 0xb3, 0x19, 0xa8, 0x87, 0xeb, 0x0c, 0xfd, 0xd2, 0xc3, 0xac, 0x8f, 0x0d, 0xf0, 0x75, 0x2b, 0x02, 0x09, 0x4e, 0x08, 0x0f, 0x90, 0x8a, 0xf8, 0x94, 0x44, 0xb4, 0xc3, 0x58, 0xa9, 0x9d, 0x52, 0x34, 0x23, 0x90, 0x12, 0x4a, 0x5a, 0x95, 0xe5, 0xa8, 0xd9, 0x5a, 0x69, 0x90, 0x7c, 0x9d, 0x80, 0x02, 0x4a, 0x23, 0xb4, 0x8c, 0x52, 0x26, 0x43, 0x94, 0xad, 0x20, 0x0e, 0x64, 0xa4, 0x53, 0x69, 0x52, 0x7b, 0x8a, 0x82, 0x17, 0xfa, 0xa5, 0x88, 0xf9, 0x81, 0x67, 0x9c, 0x76, 0x2a, 0x0b, 0xff, 0xf3, 0xfc, 0xfa, 0xda, 0x4d, 0xac, 0x6d, 0x5d, 0xff, 0x00, 0xfa, 0x71, 0x71, 0xa6, 0x69, 0x7a, 0x5a, 0xf8, 0x24, 0x16, 0xd5, 0x03, 0x2e, 0xe0, 0x3b, 0xea, 0xeb, 0x8c, 0x5e, 0x7f, 0x59, 0x7f, 0x97, 0x85, 0xda, 0x3f, 0x17, 0xc7, 0x4e, 0x5c, 0x88, 0x2d, 0x4f, 0x69, 0xfe, 0x6f, 0x1d, 0xda, 0x6f, 0x9f, 0xd6, 0x3d, 0x5b, 0x1a, 0xa5, 0xd5, 0xe2, 0x9f, 0x0e, 0x3c, 0xbe, 0x16, 0x1a, 0x69, 0x12, 0xfd, 0x0d, 0xa0, 0xb1, 0x1f, 0xc8, 0xae, 0xc9, 0x2e, 0x30, 0xd1, 0x75, 0x05, 0x0d, 0xa3, 0xae, 0x07, 0x00, 0xe5, 0xba, 0x8e, 0xeb, 0xb8, 0x0e, 0x35, 0xb1, 0x98, 0x4b, 0x2f, 0xb8, 0x73, 0xf9, 0x93, 0x99, 0xf0, 0x35, 0xd6, 0x7d, 0x6d, 0xaa, 0xc1, 0xba, 0x77, 0x1b, 0x90, 0x7a, 0xc0, 0xbe, 0x5d, 0xf9, 0x3c, 0x77, 0x89, 0xe3, 0xbb, 0xb0, 0xf3, 0x42, 0x5c, 0xf1, 0xc2, 0x2e, 0x57, 0xa2, 0x3f, 0xe2, 0x1a, 0x9f, 0xc4, 0xca, 0xfb, 0x5d, 0xea, 0x81, 0xaf, 0x83, 0x9b, 0x6b, 0xc3, 0x23, 0x58, 0x39, 0x07, 0x17, 0x4d, 0xf5, 0x71, 0xf8, 0xea, 0xda, 0x17, 0x48, 0x71, 0x2a, 0xd4, 0xc9, 0xe4, 0xeb, 0x5f, 0xb4, 0xd7, 0xa6, 0x41, 0x42, 0xd3, 0x65, 0x50, 0x33, 0x59, 0x53, 0x54, 0x09, 0xfe, 0x54, 0x89, 0xa9, 0xa4, 0x6e, 0x40, 0xbd, 0xea, 0x02, 0x80, 0xa2, 0x6d, 0x24, 0x81, 0x21, 0x12, 0x22, 0xf5, 0xa6, 0x54, 0x5b, 0xed, 0x1a, 0x07, 0x52, 0x61, 0x57, 0x76, 0x3f, 0x13, 0xbb, 0xef, 0xaf, 0x9c, 0x9e, 0x8d, 0xcb, 0xd3, 0x33, 0x62, 0xcb, 0xde, 0x72, 0x55, 0x66, 0x17, 0x5c, 0xdb, 0x42, 0xa6, 0x94, 0x67, 0xfa, 0xb1, 0x6b, 0x27, 0x84, 0x36, 0x89, 0xd3, 0xde, 0x11, 0xda, 0x68, 0x86, 0x4c, 0xd3, 0xa9, 0x4a, 0x69, 0x03, 0x20, 0x7e, 0x74, 0x45, 0x8a, 0xec, 0x3a, 0x68, 0x80, 0x4f, 0x9e, 0x0b, 0x42, 0xc6, 0x2c, 0x6f, 0x6b, 0x80, 0x09, 0x75, 0xba, 0x69, 0xd5, 0x37, 0x95, 0x45, 0x0a, 0xc4, 0x4c, 0x35, 0x24, 0x3a, 0xb8, 0x95, 0x7b, 0x4a, 0x08, 0x1f, 0x6f, 0x8c, 0xc6, 0xb7, 0x6f, 0x9b, 0x37, 0x9b, 0xa5, 0xb7, 0x10, 0x2f, 0xdc, 0xba, 0xfc, 0x22, 0x2e, 0x02, 0xbc, 0x43, 0x78, 0x16, 0xf1, 0xe7, 0xe2, 0x95, 0x14, 0x2e, 0x15, 0xef, 0xcb, 0x32, 0xf1, 0x8b, 0x0b, 0x5b, 0x07, 0xc9, 0x5d, 0x7c, 0x09, 0xdb, 0x93, 0x96, 0xb4, 0x6b, 0x47, 0x64, 0x26, 0x21, 0x63, 0xb4, 0xb2, 0xec, 0xe5, 0x6f, 0xd0, 0xa5, 0x3f, 0x49, 0x34, 0x7e, 0xed, 0xec, 0x55, 0x5b, 0x3f, 0x3e, 0xc2, 0x6f, 0xa8, 0xd2, 0x8e, 0x70, 0x2f, 0x16, 0xda, 0x85, 0xe6, 0x0a, 0xa8, 0x21, 0x6c, 0x7f, 0xeb, 0xae, 0x2e, 0x8b, 0xb3, 0x05, 0x4c, 0x43, 0x83, 0xd0, 0xc4, 0xdc, 0xd9, 0xac, 0xe5, 0x99, 0xc6, 0xf5, 0x2b, 0xca, 0x5d, 0x04, 0x64, 0xae, 0x9b, 0x92, 0xf6, 0x26, 0x34, 0x79, 0x7e, 0x0e, 0x73, 0x7d, 0x32, 0xb1, 0x86, 0x5e, 0x4e, 0xfd, 0x5c, 0xf8, 0x32, 0x85, 0x58, 0xcb, 0xcc, 0x29, 0x0c, 0x25, 0x8f, 0xe3, 0x82, 0xab, 0x38, 0xf2, 0x23, 0x15, 0x05, 0x3a, 0x2e, 0xf4, 0x31, 0x3e, 0xec, 0xe5, 0xfe, 0x70, 0x60, 0x87, 0xf0, 0x74, 0x3a, 0x3c, 0x57, 0xaa, 0x9f, 0xcb, 0xb3, 0x0f, 0xed, 0xe6, 0x93, 0x00, 0xfb, 0xf1, 0xe4, 0xc2, 0xa0, 0x79, 0x7d, 0xb6, 0x5c, 0xaf, 0x7d, 0xce, 0x99, 0xb7, 0x29, 0x4a, 0xf5, 0x79, 0xdd, 0xc8, 0x54, 0xd5, 0xe5, 0xda, 0x54, 0xfc, 0xd8, 0x2c, 0xd5, 0x3f, 0x7d, 0xd6, 0xd6, 0xa6, 0xa2, 0xb5, 0x1a, 0x51, 0x99, 0x2c, 0x0e, 0x2a, 0xa3, 0x79, 0x09, 0x0d, 0xa6, 0x21, 0xd0, 0x4c, 0x94, 0x20, 0xf8, 0xa2, 0x58, 0x21, 0xa9, 0x42, 0x94, 0x0d, 0x54, 0xb6, 0x4c, 0xf0, 0x94, 0xe3, 0x42, 0x98, 0xa0, 0x98, 0x44, 0xb7, 0xe6, 0x19, 0xec, 0x92, 0xd7, 0x86, 0x87, 0x47, 0xa7, 0xc9, 0x01, 0xa1, 0x7f, 0xea, 0x75, 0x7c, 0x76, 0xfa, 0x8c, 0x93, 0x6c, 0x79, 0x4e, 0xa3, 0x3c, 0xe7, 0xb4, 0x7c, 0xba, 0x79, 0xcb, 0x3a, 0xae, 0x74, 0x2d, 0xd9, 0x34, 0xfc, 0xa2, 0xd6, 0x22, 0x8d, 0x1c, 0xcb, 0x35, 0x6d, 0xe9, 0xaf, 0x23, 0x9c, 0xb4, 0x21, 0xf6, 0x11, 0xf0, 0xdc, 0x5a, 0xae, 0x8b, 0xb0, 0x08, 0xe3, 0x34, 0x95, 0x11, 0xb2, 0xcd, 0x8b, 0x22, 0x5a, 0x62, 0x32, 0x26, 0x92, 0xea, 0x8e, 0xc7, 0xfc, 0x0e, 0xca, 0x3a, 0x0e, 0xff, 0xec, 0xb6, 0x48, 0x6c, 0xde, 0xd0, 0x7e, 0x26, 0x5a, 0x5d, 0x5f, 0x7a, 0x06, 0xae, 0xd8, 0x39, 0xb4, 0x47, 0x0b, 0x50, 0xd1, 0x79, 0x0e, 0xf8, 0xc7, 0xbc, 0xde, 0x6e, 0xc8, 0xf5, 0x68, 0x9f, 0x16, 0xae, 0xfc, 0x68, 0xdc, 0x36, 0x93, 0xb9, 0x2e, 0xce, 0x24, 0x3f, 0x41, 0xf4, 0x32, 0x7b, 0x68, 0xce, 0x55, 0x7e, 0x38, 0x9e, 0xad, 0xe6, 0xb9, 0xb2, 0x22, 0x53, 0x0a, 0x72, 0xe5, 0xac, 0x8f, 0xe6, 0xb0, 0x4b, 0x7d, 0xa7, 0x48, 0x63, 0x93, 0xc6, 0xb1, 0x0c, 0x20, 0x53, 0x5f, 0xd5, 0xc9, 0x21, 0x75, 0xed, 0x81, 0x8b, 0x57, 0xc7, 0x13, 0x57, 0xc1, 0xe9, 0xa5, 0x8c, 0x94, 0x3c, 0x86, 0xaf, 0xef, 0x3d, 0x63, 0xce, 0x82, 0x9f, 0x0e, 0xfb, 0xd7, 0x87, 0x07, 0xe6, 0x7b, 0x0f, 0x37, 0x75, 0x1a, 0x61, 0xd9, 0x87, 0x7a, 0x63, 0xbd, 0x71, 0xe2, 0x1d, 0x0d, 0x40, 0xf7, 0x20, 0x8d, 0x0e, 0x77, 0x96, 0x71, 0xbc, 0x8e, 0xee, 0xa0, 0x8a, 0x09, 0xc6, 0x1d, 0x70, 0x90, 0x4b, 0xe7, 0x75, 0xe3, 0xec, 0xf0, 0xee, 0xba, 0x4f, 0x3c, 0x07, 0x13, 0x2a, 0x68, 0xd0, 0xb6, 0x38, 0x37, 0xe7, 0xf3, 0x9a, 0x62, 0x75, 0x5e, 0x7e, 0xda, 0x16, 0x43, 0x1b, 0xb4, 0xe0, 0xbb, 0x73, 0x74, 0xae, 0x71, 0xcd, 0xa4, 0x6d, 0xd9, 0xda, 0x16, 0xf1, 0x61, 0x0a, 0x10, 0x1f, 0x5d, 0xe5, 0x91, 0xd5, 0x59, 0xa4, 0xce, 0x59, 0x9e, 0x51, 0x3b, 0x27, 0x0d, 0xa5, 0x56, 0x59, 0x6c, 0x4d, 0x2b, 0xb9, 0xd4, 0xfc, 0x10, 0xbf, 0xf6, 0x8f, 0xa7, 0x1b, 0x53, 0xac, 0x7d, 0xfc, 0xb0, 0x71, 0xdd, 0x75, 0xa4, 0x1d, 0xb0, 0xe1, 0x5d, 0x98, 0xb3, 0xf0, 0x7e, 0xb1, 0x13, 0x34, 0x8c, 0xb3, 0x0c, 0x38, 0xad, 0xc3, 0xd1, 0xcb, 0x17, 0x9b, 0x47, 0xb6, 0x69, 0x91, 0x2b, 0xa4, 0x17, 0x29, 0xe7, 0x0a, 0x18, 0x6e, 0x50, 0x85, 0x2a, 0x40, 0x25, 0xad, 0x4a, 0x48, 0x09, 0x1e, 0xa8, 0x0d, 0xb2, 0x46, 0xd1, 0x13, 0xad, 0x72, 0x93, 0x80, 0x76, 0x25, 0x49, 0xa2, 0x6d, 0x62, 0x69, 0x3d, 0xc2, 0x64, 0xbe, 0x15, 0x49, 0x8a, 0x17, 0x4c, 0x58, 0x1a, 0xe3, 0xe4, 0xa9, 0x05, 0xc3, 0x3a, 0xe8, 0x63, 0x18, 0x6a, 0x1f, 0x17, 0x92, 0x38, 0xd8, 0xf3, 0x9b, 0x74, 0xe7, 0x6a, 0x17, 0x38, 0x3d, 0x4d, 0xb2, 0x23, 0x16, 0x5d, 0x07, 0xa7, 0x91, 0xa2, 0x70, 0x76, 0x16, 0x76, 0xb1, 0x00, 0x43, 0xf8, 0xe9, 0x32, 0x0e, 0x5f, 0x2c, 0x55, 0x5c, 0x59, 0x3e, 0x8d, 0xcb, 0x5d, 0x8f, 0xaa, 0x5e, 0xef, 0x31, 0xb4, 0xde, 0x42, 0x23, 0x5d, 0xe7, 0xbf, 0x9f, 0xc6, 0xa5, 0x69, 0x9a, 0xf3, 0xca, 0x95, 0x5b, 0x60, 0x08, 0xaa, 0x77, 0x60, 0x6c, 0xd3, 0x44, 0xba, 0xc9, 0x04, 0x22, 0xd9, 0x17, 0x89, 0xd1, 0xa7, 0x90, 0xe6, 0x24, 0x53, 0x73, 0x8a, 0x54, 0x1e, 0x4a, 0xc9, 0x7d, 0x21, 0xa2, 0x27, 0xc0, 0xff, 0x87, 0x67, 0x6c, 0x7b, 0x26, 0x18, 0xdf, 0x34, 0x50, 0x66, 0xc3, 0x8a, 0x11, 0x34, 0x89, 0xbf, 0x8e, 0xe3, 0x77, 0x8c, 0x26, 0xc8, 0x60, 0x03, 0xe4, 0x67, 0xcf, 0xae, 0x08, 0x32, 0x80, 0x10, 0x77, 0x48, 0xc5, 0x0e, 0xca, 0x54, 0x7a, 0xff, 0x2c, 0x8b, 0x82, 0x5f, 0x1d, 0x8f, 0x6f, 0xeb, 0x1f, 0x36, 0xde, 0x32, 0x74, 0xf3, 0x72, 0xe5, 0x55, 0xe0, 0xf6, 0x78, 0x00, 0xd3, 0x5a, 0x46, 0xd6, 0x23, 0xfe, 0x96, 0xd9, 0x71, 0xdd, 0x89, 0xee, 0x66, 0xd3, 0xfd, 0x64, 0xb4, 0x9d, 0xc6, 0x0b, 0xd6, 0x95, 0x25, 0x62, 0x16, 0xc5, 0xd3, 0x2d, 0x4f, 0xd6, 0xe9, 0x4d, 0xba, 0xff, 0xce, 0xd3, 0x2b, 0xea, 0xa1, 0xb6, 0x2b, 0xf3, 0x50, 0x44, 0x3e, 0x1a, 0x41, 0x0b, 0x2f, 0x86, 0x02, 0x32, 0x4e, 0x0b, 0xe8, 0x71, 0x83, 0x80, 0x4c, 0x6d, 0x66, 0x53, 0x6d, 0xad, 0x96, 0x71, 0x60, 0x74, 0x6c, 0x11, 0xb8, 0x07, 0xc9, 0x23, 0x2e, 0xa3, 0xf0, 0x36, 0xc8, 0x27, 0xbb, 0x16, 0xba, 0x85, 0x10, 0xca, 0xf0, 0x32, 0x39, 0x8e, 0xb8, 0x4c, 0x34, 0xb7, 0xdf, 0x53, 0x53, 0xdf, 0x9d, 0xe6, 0xf9, 0x4a, 0xa8, 0x5c, 0xc6, 0xb9, 0xfb, 0x93, 0xd1, 0xf6, 0xeb, 0x72, 0xe0, 0x1a, 0x89, 0x49, 0x65, 0xd5, 0x3a, 0xc3, 0x79, 0x8d, 0x40, 0x53, 0xe7, 0x74, 0x17, 0x2b, 0x92, 0x6d, 0x39, 0x75, 0x51, 0xab, 0xac, 0xa2, 0x2b, 0x55, 0x5a, 0x37, 0xeb, 0xce, 0x18, 0x5b, 0xe5, 0x60, 0x55, 0x35, 0x8d, 0x71, 0x56, 0xad, 0x35, 0x4d, 0x95, 0xa5, 0x86, 0x76, 0xf6, 0x5b, 0x73, 0xa4, 0xad, 0x85, 0x28, 0x6c, 0xbe, 0xdc, 0xb1, 0xf8, 0xf4, 0xc5, 0xb8, 0xed, 0x57, 0x43, 0xfe, 0xdb, 0xf6, 0xc3, 0x87, 0xf7, 0x1b, 0x3b, 0xb3, 0x05, 0x46, 0x5c, 0x16, 0x67, 0x74, 0x3d, 0x8b, 0xd8, 0x1c, 0x60, 0x59, 0x3f, 0xb2, 0x61, 0x5a, 0x66, 0x77, 0x82, 0x2a, 0xa3, 0x28, 0xe5, 0x3f, 0xcd, 0x35, 0xe8, 0x4e, 0xe0, 0x7d, 0x45, 0xd3, 0x9b, 0xeb, 0xfe, 0xef, 0xb6, 0xd2, 0x55, 0x93, 0x54, 0xa6, 0xa4, 0x7b, 0xaf, 0x95, 0xe7, 0x56, 0x56, 0xed, 0x59, 0x34, 0x46, 0x05, 0x86, 0x1b, 0x07, 0x65, 0x2a, 0x95, 0xb5, 0x2e, 0xda, 0xdc, 0xc8, 0xb4, 0x2c, 0x91, 0x7d, 0xa6, 0x39, 0x54, 0xc2, 0xc4, 0x36, 0xcb, 0x4f, 0x6d, 0x1a, 0xd5, 0x36, 0x3f, 0x44, 0x36, 0x32, 0x4a, 0xe4, 0x2e, 0x0f, 0x0f, 0x2c, 0x8a, 0xfd, 0x03, 0x3b, 0xde, 0xb6, 0x85, 0xb5, 0x7d, 0xfb, 0xd8, 0xbe, 0x7d, 0xbf, 0x71, 0x84, 0x74, 0x67, 0xd1, 0xff, 0x58, 0x94, 0xed, 0x24, 0x3f, 0xaf, 0xd1, 0x0b, 0x83, 0xa4, 0xbe, 0xae, 0x5b, 0x0c, 0x7d, 0xdf, 0xcd, 0x5b, 0x68, 0xb7, 0x63, 0x10, 0x26, 0xaf, 0x72, 0x19, 0x6d, 0xf7, 0x07, 0xa9, 0xf7, 0x46, 0xfb, 0x8a, 0x59, 0x6e, 0x5f, 0xdd, 0xdb, 0xf4, 0x70, 0xe0, 0xbb, 0xd3, 0x29, 0xe3, 0xc1, 0xee, 0xf5, 0xce, 0x8f, 0x78, 0xcc, 0x8e, 0xb1, 0x34, 0xfe, 0xab, 0x44, 0x6a, 0x26, 0xc0, 0x3d, 0xd8, 0xce, 0x48, 0xb6, 0x8f, 0x99, 0x7c, 0xf0, 0xbf, 0xb9, 0x7b, 0x6d, 0x0e, 0xa7, 0xa3, 0xf2, 0xc3, 0xbb, 0x18, 0xd1, 0xc8, 0xdc, 0x58, 0x3b, 0x1f, 0xc7, 0x5b, 0x6f, 0x5e, 0x9e, 0x86, 0x75, 0x6f, 0x36, 0x13, 0xeb, 0x7a, 0xb6, 0xb8, 0xa3, 0xeb, 0x48, 0x87, 0xda, 0x06, 0x8c, 0x36, 0x35, 0x0d, 0x40, 0x0b, 0xe4, 0x16, 0x77, 0x17, 0x44, 0x23, 0xd0, 0x7e, 0xf0, 0x06, 0x88, 0xeb, 0xc5, 0x59, 0x91, 0x92, 0x70, 0x7f, 0x5d, 0x73, 0xa7, 0x5c, 0xcb, 0x69, 0x17, 0x24, 0x12, 0x2b, 0xaa, 0xaf, 0x7b, 0x45, 0xae, 0xf7, 0xbf, 0x5a, 0x1b, 0xc6, 0x2d, 0x91, 0x13, 0x44, 0xa7, 0xa9, 0xeb, 0x14, 0xe0, 0x08, 0xb1, 0x8a, 0x28, 0x34, 0x14, 0xb5, 0x19, 0x78, 0x96, 0x01, 0xbb, 0x37, 0x8a, 0x36, 0xc5, 0xd7, 0x69, 0x9a, 0x67, 0x59, 0x65, 0xcb, 0xc2, 0x07, 0x53, 0x91, 0x49, 0xb4, 0x17, 0x37, 0x52, 0x2b, 0xb2, 0x0b, 0x1f, 0x7d, 0x19, 0x26, 0xd7, 0xba, 0xb3, 0xed, 0xd8, 0x80, 0x8f, 0x8e, 0x8c, 0x9b, 0x97, 0x71, 0x72, 0x1d, 0x30, 0x11, 0xe6, 0xcd, 0x78, 0x2d, 0x97, 0x61, 0x1c, 0x1c, 0x26, 0xf0, 0x15, 0xac, 0x76, 0xc9, 0x02, 0x34, 0x77, 0xdd, 0xee, 0xb3, 0xee, 0xf5, 0x39, 0x9f, 0x9b, 0xeb, 0x98, 0xf4, 0xb5, 0xd5, 0x93, 0x7d, 0xbc, 0x69, 0x5e, 0x73, 0xbd, 0x75, 0x5e, 0x5a, 0xa0, 0x78, 0xab, 0x6b, 0x97, 0x95, 0x36, 0xc8, 0xd4, 0x4f, 0x83, 0x3d, 0xb6, 0x06, 0x9f, 0xae, 0x85, 0x49, 0x6d, 0x89, 0x97, 0x45, 0x5b, 0x67, 0x39, 0xcc, 0x85, 0x5d, 0x74, 0x03, 0xa5, 0x1b, 0xf3, 0xec, 0xf1, 0x2d, 0xfe, 0xd9, 0xc8, 0x67, 0xba, 0x13, 0x9e, 0x33, 0xb8, 0xb4, 0xf5, 0x87, 0xee, 0x08, 0xc8, 0xa6, 0x79, 0xe4, 0xec, 0xe9, 0x9e, 0x79, 0x4f, 0x17, 0x2d, 0x6c, 0x1c, 0x39, 0xa7, 0x09, 0x26, 0xba, 0xe7, 0xd5, 0x79, 0x1d, 0x93, 0x7e, 0xba, 0x9f, 0x0b, 0x91, 0x62, 0x22, 0xf9, 0xe7, 0xb6, 0x4d, 0xcf, 0xeb, 0xf4, 0x77, 0xbb, 0x6e, 0xc7, 0x6d, 0x61, 0xef, 0x19, 0x5c, 0x44, 0xa9, 0x86, 0xb2, 0x71, 0x35, 0x14, 0x6f, 0x2f, 0x5b, 0xea, 0x94, 0x87, 0x95, 0xaa, 0xa3, 0x16, 0xb5, 0xce, 0xa4, 0x67, 0x9d, 0xd1, 0xad, 0xcb, 0x74, 0x5a, 0xe5, 0xa9, 0x0d, 0x2d, 0x87, 0xe6, 0x8c, 0x6f, 0xb6, 0xec, 0x2d, 0xd5, 0x6a, 0x77, 0xa1, 0x39, 0x68, 0x60, 0x3b, 0x67, 0x16, 0xe9, 0xc4, 0x3d, 0x9a, 0x73, 0x14, 0x30, 0xf1, 0x22, 0x1c, 0xc8, 0x1a, 0x68, 0x1a, 0x6f, 0x58, 0x3c, 0xcb, 0x97, 0xe5, 0xda, 0xe9, 0x27, 0x39, 0x4d, 0x77, 0xa9, 0xa1, 0x8e, 0xdc, 0x0a, 0xf1, 0x1f, 0xe5, 0x0b, 0x21, 0xc8, 0x75, 0xfb, 0x2a, 0xcc, 0x68, 0xd5, 0x75, 0x53, 0x6b, 0x75, 0x25, 0x5b, 0x6d, 0x9b, 0xc3, 0x3e, 0x6a, 0x97, 0xb4, 0x41, 0x5d, 0xb7, 0x88, 0xcf, 0x96, 0x83, 0xbd, 0x94, 0x19, 0xca, 0x40, 0x29, 0x53, 0x55, 0x99, 0xfc, 0x68, 0xb5, 0x10, 0x41, 0xe8, 0x05, 0x07, 0xff, 0xb6, 0xed, 0xab, 0xb0, 0xec, 0x5d, 0xf3, 0xe1, 0x37, 0x3b, 0xfb, 0x0e, 0x93, 0xa3, 0x27, 0x06, 0xbb, 0xc8, 0xd9, 0x4e, 0xc4, 0x8d, 0x5d, 0x77, 0x76, 0xd9, 0x96, 0x49, 0x06, 0x34, 0x8b, 0x0d, 0x55, 0xa0, 0x4a, 0xf3, 0xd6, 0x48, 0x5d, 0x07, 0x49, 0x93, 0xa8, 0x48, 0x40, 0x92, 0x1c, 0x8f, 0x4a, 0x98, 0x1d, 0x8f, 0xee, 0xe3, 0x13, 0x3f, 0x7a, 0x61, 0x0a, 0xac, 0x23, 0x01, 0xf6, 0xd5, 0x95, 0xfa, 0xfd, 0xad, 0x7e, 0x7b, 0x07, 0xd9, 0x49, 0x37, 0xc7, 0x5b, 0x68, 0x45, 0x82, 0x10, 0xdf, 0xe9, 0x79, 0x47, 0x5b, 0x2a, 0xe8, 0x8a, 0x00, 0xc9, 0xf7, 0x98, 0x05, 0x43, 0xb9, 0xb0, 0x85, 0xff, 0xe4, 0x76, 0x65, 0xdb, 0x34, 0x2b, 0x69, 0x01, 0xed, 0x7c, 0xce, 0xd7, 0xd6, 0x69, 0x43, 0x1b, 0xaa, 0x5b, 0x0a, 0xc1, 0xb6, 0xa6, 0xff, 0x17, 0x57, 0xda, 0xfa, 0xba, 0xae, 0x41, 0x71, 0x4a, 0x77, 0x1a, 0xa2, 0x6d, 0xc7, 0xf9, 0x75, 0xd3, 0x42, 0xd2, 0x92, 0xc2, 0xa9, 0x45, 0xde, 0xb6, 0xe0, 0x60, 0x79, 0x41, 0xbb, 0x05, 0x1b, 0xbd, 0xde, 0x41, 0x09, 0xc5, 0x9a, 0x9f, 0x02, 0x11, 0x70, 0x71, 0xdb, 0xea, 0x3b, 0x59, 0xf6, 0x0e, 0xac, 0x78, 0x82, 0xd7, 0x40, 0xf9, 0x39, 0xfd, 0xfc, 0xc2, 0xe1, 0x8c, 0x00, 0x48, 0xda, 0xd8, 0x04, 0x8a, 0x3c, 0xd2, 0xd6, 0x99, 0xa7, 0x41, 0xc0, 0x33, 0x75, 0x1d, 0x81, 0x90, 0x9a, 0x30, 0x44, 0xdb, 0xb6, 0xa0, 0xad, 0xe2, 0x08, 0x53, 0x58, 0x95, 0x51, 0x8b, 0x05, 0xca, 0xec, 0x5c, 0x23, 0x19, 0x61, 0x66, 0x01, 0xcb, 0xd2, 0xb6, 0xb0, 0x95, 0x69, 0xb3, 0xd2, 0x8b, 0xff, 0x98, 0x55, 0x00, 0xf8, 0xed, 0x72, 0xb3, 0xdf, 0xc0, 0x8d, 0x19, 0xaa, 0x31, 0xd2, 0x6b, 0x62, 0x20, 0xc8, 0x34, 0x0f, 0x62, 0x17, 0x4b, 0xb7, 0xbc, 0x5a, 0x46, 0x17, 0x09, 0x07, 0x9d, 0xb3, 0xac, 0x37, 0xe6, 0x1c, 0xdd, 0x79, 0x5c, 0x6f, 0xca, 0x09, 0xa5, 0x03, 0xbf, 0x9d, 0x0b, 0x4a, 0xb6, 0x73, 0xb9, 0x2e, 0x39, 0xb5, 0x64, 0x1f, 0xac, 0x00, 0x92, 0x80, 0x9e, 0x34, 0xad, 0x55, 0x6d, 0xab, 0x69, 0xcc, 0xaa, 0xb2, 0x2b, 0x9c, 0xb4, 0x59, 0x9a, 0x91, 0x96, 0x69, 0xca, 0xcc, 0x4f, 0xf5, 0x39, 0x23, 0x70, 0xc1, 0x17, 0xb2, 0xcf, 0x45, 0x0e, 0xef, 0x96, 0x65, 0x54, 0x66, 0x39, 0x37, 0x59, 0x9d, 0xd2, 0x8d, 0x43, 0x42, 0x9e, 0xa8, 0x63, 0x7c, 0x6b, 0xbe, 0xbd, 0x6f, 0x1f, 0xdf, 0x6f, 0xfa, 0x0b, 0xdd, 0x73, 0xa7, 0x9f, 0x59, 0xdf, 0x83, 0x6b, 0x5d, 0xc4, 0xf2, 0xab, 0xc7, 0x3c, 0x82, 0x4f, 0x2e, 0x93, 0xdd, 0x66, 0x84, 0x22, 0x00, 0xfd, 0x32, 0x88, 0xa5, 0x3c, 0xe6, 0x3a, 0xcd, 0x90, 0x7a, 0x61, 0x12, 0x0a, 0x3f, 0xb3, 0xa1, 0xcf, 0x8f, 0x47, 0xc8, 0x4f, 0x1d, 0xf9, 0x2a, 0xde, 0xfe, 0x81, 0x3d, 0xec, 0xbe, 0x7f, 0xf9, 0x70, 0xd8, 0x1d, 0xbe, 0xbb, 0x7f, 0x78, 0x7d, 0x0c, 0xff, 0xf0, 0xea, 0x95, 0xf7, 0xe7, 0x77, 0x71, 0x90, 0x1c, 0x65, 0xee, 0xe7, 0xd6, 0xf0, 0x3c, 0xb3, 0x79, 0xfc, 0x0b, 0xb3, 0x85, 0xf0, 0xdb, 0xdf, 0xde, 0x66, 0xdd, 0xbb, 0x96, 0x46, 0xaf, 0xc6, 0x8b, 0xb7, 0xd8, 0x7e, 0x18, 0x26, 0x8e, 0x5a, 0x4d, 0xfb, 0xaa, 0x5d, 0xda, 0x10, 0xd9, 0x0f, 0x17, 0xba, 0x23, 0xec, 0x8c, 0xf3, 0x45, 0xae, 0x67, 0xfe, 0x64, 0xf7, 0xe8, 0x6c, 0xe3, 0x2b, 0x89, 0x4c, 0xc9, 0x4b, 0x16, 0xd9, 0x95, 0xda, 0xda, 0xa4, 0xa4, 0x3e, 0x33, 0x53, 0xf8, 0xf0, 0x4d, 0x52, 0x34, 0x19, 0x70, 0x32, 0x3d, 0xd8, 0xb2, 0xcc, 0xcb, 0x23, 0xc9, 0xb9, 0x34, 0x91, 0x07, 0x71, 0xe4, 0x67, 0xc3, 0x4a, 0x63, 0xe8, 0x0e, 0x21, 0x3c, 0x4a, 0xf3, 0x48, 0x1f, 0x85, 0x94, 0x22, 0xd6, 0x41, 0x9c, 0x18, 0x29, 0x64, 0xf4, 0x99, 0x75, 0xff, 0xfe, 0x36, 0x3e, 0xf2, 0xee, 0xf1, 0xed, 0x66, 0x11, 0x74, 0xcf, 0xa4, 0xee, 0x22, 0x26, 0x3b, 0xd0, 0x3e, 0x19, 0x17, 0xf2, 0xf0, 0xc2, 0x2f, 0xd6, 0x76, 0x62, 0x06, 0xbb, 0x9c, 0x3e, 0x4e, 0xb7, 0xff, 0x88, 0xa0, 0x74, 0x73, 0x86, 0x75, 0xe5, 0x82, 0x7e, 0x8b, 0xeb, 0xc6, 0xce, 0xe6, 0x69, 0x56, 0xae, 0x5e, 0xb7, 0xc0, 0xaf, 0x5b, 0xb7, 0x0c, 0xed, 0x68, 0xa2, 0x39, 0xa4, 0xda, 0x1e, 0x12, 0x01, 0x1d, 0x6a, 0xb3, 0x54, 0x83, 0xf3, 0xeb, 0x54, 0x0b, 0x04, 0x9e, 0x06, 0x27, 0xe6, 0x4a, 0x49, 0xa3, 0x20, 0x3f, 0x85, 0x1f, 0x89, 0x38, 0x0c, 0x65, 0x4c, 0xec, 0xcc, 0x67, 0xd1, 0x73, 0xa3, 0xb7, 0xcf, 0xf0, 0x11, 0xb2, 0xab, 0xf7, 0x5c, 0xd7, 0x73, 0xbd, 0x81, 0x77, 0xbd, 0xed, 0x39, 0x28, 0x22, 0x11, 0x45, 0x87, 0xf7, 0x1e, 0x35, 0x24, 0x97, 0x7e, 0xee, 0x7e, 0x7e, 0x83, 0x17, 0xd2, 0xa1, 0x85, 0x32, 0xd5, 0xba, 0x1a, 0xbf, 0x22, 0x1e, 0x98, 0x7d, 0x4a, 0x4b, 0x31, 0x59, 0x9d, 0x65, 0x2a, 0xcd, 0x42, 0xad, 0x63, 0xad, 0xf3, 0xc4, 0xcf, 0x45, 0x51, 0xe7, 0x01, 0x18, 0x32, 0xd7, 0xb4, 0x89, 0x44, 0x6b, 0x6d, 0x3d, 0x00, 0xa1, 0xe4, 0x22, 0x16, 0x21, 0x2a, 0x45, 0xf8, 0x6b, 0x85, 0x01, 0x3e, 0xfb, 0xd7, 0xb7, 0x21, 0xc9, 0xbb, 0xc7, 0x47, 0x58, 0x67, 0xd7, 0x01, 0x17, 0x9a, 0x68, 0x19, 0x5d, 0x97, 0xda, 0xe0, 0x0e, 0x4e, 0xde, 0x68, 0xa9, 0x21, 0xce, 0x2d, 0xdd, 0xbe, 0xd7, 0xfe, 0x74, 0x8c, 0x82, 0x26, 0x28, 0x72, 0x02, 0x4a, 0xda, 0x7f, 0x5c, 0x02, 0xf8, 0x2b, 0x42, 0xf8, 0xaa, 0x4d, 0x68, 0xa5, 0xb0, 0x05, 0x9a, 0xe0, 0x54, 0x3d, 0xe1, 0x64, 0xd3, 0xca, 0x73, 0x9b, 0xe7, 0x6b, 0x29, 0x27, 0x24, 0x59, 0xef, 0xf4, 0x5b, 0x82, 0xb8, 0x50, 0x93, 0x3c, 0x3b, 0x33, 0x90, 0x0f, 0x5b, 0xc4, 0xf2, 0x21, 0x37, 0x11, 0x3f, 0xec, 0xdd, 0x90, 0x3d, 0x7c, 0x13, 0x6d, 0x83, 0x87, 0x53, 0xb8, 0x3d, 0xdc, 0x96, 0x6b, 0x8f, 0xed, 0x0f, 0x8f, 0xed, 0x66, 0x82, 0xe4, 0x44, 0x06, 0x7d, 0x76, 0x38, 0xfd, 0x34, 0xad, 0x4f, 0x68, 0x7e, 0x8e, 0xd3, 0x6d, 0x27, 0x68, 0x85, 0xb7, 0xbf, 0x38, 0x6c, 0x40, 0xd0, 0x12, 0x3f, 0x2e, 0xca, 0x8c, 0x9a, 0xe1, 0x55, 0x53, 0xae, 0xb7, 0xf8, 0x2a, 0x9b, 0xf5, 0xae, 0x9c, 0x2b, 0x46, 0xa6, 0xeb, 0xa2, 0x61, 0xe5, 0x97, 0xaf, 0xe4, 0x77, 0x2f, 0xc2, 0x57, 0xf9, 0xb7, 0x3c, 0x36, 0x61, 0xf6, 0x2a, 0x8d, 0x8f, 0xfe, 0xcb, 0x50, 0xef, 0xd2, 0x57, 0x3c, 0xfa, 0x26, 0x15, 0x22, 0xb3, 0x42, 0xfd, 0x66, 0x05, 0xf8, 0x7c, 0x4d, 0xfe, 0x6b, 0x37, 0x36, 0xb5, 0x44, 0x91, 0x1d, 0xba, 0x71, 0x1e, 0xef, 0xd8, 0xdc, 0xf3, 0x99, 0xb9, 0x6c, 0xa4, 0x6d, 0x09, 0xc2, 0x52, 0xde, 0x51, 0x0d, 0x10, 0xf3, 0x4a, 0x56, 0x2e, 0x3f, 0x49, 0xb5, 0xbb, 0x34, 0x2a, 0x2c, 0x61, 0x88, 0x3c, 0xd7, 0xa6, 0xb4, 0xb2, 0x96, 0xd4, 0x13, 0x11, 0x4d, 0xa5, 0x55, 0x05, 0x92, 0x92, 0x46, 0x49, 0x1a, 0xd0, 0x9d, 0x53, 0x95, 0x09, 0x23, 0x53, 0x10, 0xda, 0x47, 0x32, 0xa7, 0xae, 0x0f, 0x37, 0x0f, 0xd2, 0x1c, 0xad, 0x94, 0x51, 0x8c, 0x43, 0x22, 0xad, 0xc2, 0xf8, 0x9b, 0x7d, 0x70, 0xd2, 0xaf, 0x81, 0xa8, 0xc0, 0x13, 0xae, 0x78, 0xe4, 0x8b, 0xf0, 0xb0, 0xff, 0xe2, 0x1e, 0x58, 0xff, 0xe3, 0x67, 0x66, 0x3d, 0x93, 0x6a, 0x30, 0x4b, 0x78, 0xfd, 0xb2, 0x76, 0x41, 0x90, 0x6a, 0x1d, 0xf5, 0xe0, 0x9c, 0x79, 0x9c, 0x18, 0x08, 0x24, 0xac, 0x1b, 0x2c, 0x8a, 0xf5, 0x17, 0xdb, 0xc6, 0xfb, 0x61, 0x9b, 0xc4, 0xc0, 0x6e, 0x2f, 0x59, 0xb7, 0x5d, 0xd1, 0xed, 0x88, 0xeb, 0x33, 0xd8, 0x7e, 0x4a, 0x54, 0x10, 0x10, 0xc2, 0x6b, 0xa5, 0x1e, 0x50, 0x0e, 0x94, 0x55, 0x80, 0x93, 0xb8, 0xc9, 0xa2, 0x28, 0xe0, 0xbe, 0x9f, 0x98, 0x24, 0x17, 0xda, 0x04, 0xcc, 0x04, 0x41, 0x42, 0xb7, 0x33, 0x06, 0x33, 0xa3, 0xc5, 0x0a, 0x91, 0x24, 0xd4, 0xf9, 0x0e, 0xf8, 0xfd, 0x21, 0xfa, 0xdc, 0x63, 0x7f, 0x77, 0x1b, 0x3a, 0x52, 0x9e, 0xe1, 0xf3, 0xb3, 0xc9, 0xf6, 0x0b, 0xf3, 0x5c, 0xdb, 0xa1, 0xbe, 0xcd, 0x50, 0x35, 0x16, 0xd5, 0xb9, 0x67, 0xb6, 0x47, 0x4d, 0x98, 0x9d, 0xa1, 0x1f, 0x9d, 0x8b, 0x33, 0x7a, 0xf6, 0xd3, 0xa6, 0x2d, 0x30, 0xad, 0xeb, 0xa6, 0x0b, 0xa4, 0x4e, 0xf9, 0x74, 0x13, 0x6f, 0xc2, 0x47, 0x05, 0x00, 0xc9, 0x08, 0x2a, 0xa4, 0xa4, 0x95, 0x50, 0x49, 0x77, 0x8a, 0xd2, 0x60, 0x52, 0x80, 0xf7, 0x28, 0xad, 0x69, 0x22, 0x5a, 0xcb, 0xd2, 0x14, 0x22, 0xa6, 0xfb, 0x4c, 0x51, 0x27, 0x5c, 0xc5, 0x99, 0x34, 0x39, 0xd7, 0xa1, 0x55, 0x31, 0xc0, 0x45, 0x81, 0x6e, 0x26, 0x5c, 0x04, 0x22, 0xfa, 0x3c, 0xcf, 0xfe, 0x2f, 0x93, 0x88, 0x32, 0xb6, 0x93, 0x5e, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, } hts-1.0.1/bam/add_example_test.go000066400000000000000000000015141304417722000167000ustar00rootroot00000000000000// Copyright ©2015 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package bam_test import ( "io" "log" "os" "github.com/biogo/hts/bam" ) func ExampleIndex_Add() { // Create a BAI for the BAM read from standard in and write it to standard out. br, err := bam.NewReader(os.Stdin, 1) if err != nil { log.Fatalf("failed to open BAM: %v", err) } var bai bam.Index for { r, err := br.Read() if err == io.EOF { break } if err != nil { log.Fatalf("failed to read BAM record: %v", err) } err = bai.Add(r, br.LastChunk()) if err != nil { log.Fatalf("failed to add record to BAM index: %v", err) } } err = bam.WriteIndex(os.Stdout, &bai) if err != nil { log.Fatalf("failed to write BAM index: %v", err) } } hts-1.0.1/bam/bam.go000066400000000000000000000005501304417722000141340ustar00rootroot00000000000000// Copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package bam implements BAM file format reading, writing and indexing. // The BAM format is described in the SAM specification. // // http://samtools.github.io/hts-specs/SAMv1.pdf package bam hts-1.0.1/bam/bam_test.go000066400000000000000000002335061304417722000152040ustar00rootroot00000000000000// Copyright ©2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package bam import ( "bytes" "compress/gzip" "flag" "fmt" "io" "io/ioutil" "os" "reflect" "testing" "time" "github.com/biogo/hts/bgzf" "github.com/biogo/hts/bgzf/index" "github.com/biogo/hts/internal" "github.com/biogo/hts/sam" "gopkg.in/check.v1" ) var ( bam = flag.Bool("bam", false, "output failing bam data for inspection") allbam = flag.Bool("allbam", false, "output all bam data for inspection") ) type failure bool func (f failure) String() string { if f { return "fail" } return "ok" } func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) const maxInt = int(^uint(0) >> 1) var ( file = flag.String("bench.file", "", "file to read for benchmarking") findex = flag.String("bench.index", "", "index file to read for benchmarking") conc = flag.Int("conc", 1, "sets the level of concurrency for compression") ) func (s *S) TestRead(c *check.C) { for i, t := range []struct { in []byte header *sam.Header lines int }{ { in: bamHG00096_1000, header: headerHG00096_1000, lines: 1000, }, } { for omit := None; omit <= AllVariableLengthData; omit++ { br, err := NewReader(bytes.NewBuffer(t.in), *conc) c.Assert(err, check.Equals, nil) c.Check(br.Header().Version, check.Equals, t.header.Version) c.Check(br.Header().SortOrder, check.Equals, t.header.SortOrder) c.Check(br.Header().GroupOrder, check.Equals, t.header.GroupOrder) c.Check(br.Header().Comments, check.DeepEquals, t.header.Comments) c.Check(br.Header().Refs(), check.DeepEquals, t.header.Refs()) c.Check(br.Header().RGs(), check.DeepEquals, t.header.RGs()) c.Check(br.Header().Progs(), check.DeepEquals, t.header.Progs()) var lines int for { _, err := br.Read() if err != nil { c.Assert(err, check.Equals, io.EOF) break } lines++ } c.Check(lines, check.Equals, t.lines, check.Commentf("got:%d expected:%d when omit=%d", lines, t.lines, omit)) if ok := reflect.DeepEqual(br.Header(), t.header) && lines == t.lines; *bam && !ok || *allbam { bf, err := os.Create(fmt.Sprintf("read-%d-%s.bam", i, failure(!ok))) c.Assert(err, check.Equals, nil) bf.Write(t.in) bf.Close() } } } } func headerText(h *sam.Header) []byte { b, _ := h.MarshalText() return b } func (s *S) TestRoundTrip(c *check.C) { for i, t := range []struct { in []byte header *sam.Header conc int lines int }{ { in: bamHG00096_1000, header: headerHG00096_1000, conc: 2, lines: 1000, }, } { br, err := NewReader(bytes.NewBuffer(t.in), *conc) c.Assert(err, check.Equals, nil) var buf bytes.Buffer bw, err := NewWriter(&buf, br.Header().Clone(), t.conc) for { r, err := br.Read() if err != nil { c.Assert(err, check.Equals, io.EOF) break } bw.Write(r) } c.Assert(bw.Close(), check.Equals, nil) br, err = NewReader(bytes.NewBuffer(t.in), *conc) c.Assert(err, check.Equals, nil) brr, err := NewReader(&buf, *conc) c.Assert(err, check.Equals, nil) c.Check(headerText(brr.Header()), check.DeepEquals, headerText(br.Header())) c.Check(brr.Header(), check.DeepEquals, br.Header()) if !reflect.DeepEqual(brr.Header(), br.Header()) { c.Check(brr.Header().Refs(), check.DeepEquals, br.Header().Refs()) c.Check(brr.Header().RGs(), check.DeepEquals, br.Header().RGs()) c.Check(brr.Header().Progs(), check.DeepEquals, br.Header().Progs()) c.Check(brr.Header().Comments, check.DeepEquals, br.Header().Comments) } allOK := true for { r, err := br.Read() if err != nil { c.Assert(err, check.Equals, io.EOF) } rr, err := brr.Read() if err != nil { c.Assert(err, check.Equals, io.EOF) break } c.Check(rr, check.DeepEquals, r) if !reflect.DeepEqual(rr, r) { allOK = false } } if ok := reflect.DeepEqual(br.Header(), brr.Header()) && allOK; *bam && !ok || *allbam { bf, err := os.Create(fmt.Sprintf("roundtrip-%d-%s.bam", i, failure(!ok))) c.Assert(err, check.Equals, nil) bf.Write(t.in) bf.Close() } } } func BenchmarkRead(b *testing.B) { if *file == "" { b.Skip("no file specified") } b.StopTimer() f, err := os.Open(*file) if err != nil { b.Fatalf("Open failed: %v", err) } br, err := NewReader(f, *conc) if err != nil { b.Fatalf("NewReader failed: %v", err) } b.StartTimer() for i := 0; i < b.N; i++ { for { _, err := br.Read() if err != nil { break } } } f.Close() } func BenchmarkReadIndex(b *testing.B) { if *findex == "" { b.Skip("no index file specified") } buf, err := ioutil.ReadFile(*findex) if err != nil { b.Fatalf("Index read failed: %v", err) } r := bytes.NewReader(buf) b.ResetTimer() for i := 0; i < b.N; i++ { r.Seek(0, os.SEEK_SET) _, err = ReadIndex(r) if err != nil { b.Fatal(err) } } } func BenchmarkReadCoreAndSeq(b *testing.B) { if *file == "" { b.Skip("no file specified") } b.StopTimer() f, err := os.Open(*file) if err != nil { b.Fatalf("Open failed: %v", err) } br, err := NewReader(f, *conc) if err != nil { b.Fatalf("NewReader failed: %v", err) } b.StartTimer() br.Omit(AuxTags) for i := 0; i < b.N; i++ { for { _, err := br.Read() if err != nil { break } } } f.Close() } func BenchmarkReadCoreOnly(b *testing.B) { if *file == "" { b.Skip("no file specified") } b.StopTimer() f, err := os.Open(*file) if err != nil { b.Fatalf("Open failed: %v", err) } br, err := NewReader(f, *conc) if err != nil { b.Fatalf("NewReader failed: %v", err) } b.StartTimer() br.Omit(AllVariableLengthData) for i := 0; i < b.N; i++ { for { _, err := br.Read() if err != nil { break } } } f.Close() } func BenchmarkWrite(b *testing.B) { b.StopTimer() br, err := NewReader(bytes.NewReader(bamHG00096_1000), *conc) if err != nil { b.Fatalf("NewReader failed: %v", err) } r, err := br.Read() if err != nil { b.Fatalf("Read failed: %v", err) } bw, err := NewWriter(ioutil.Discard, br.Header().Clone(), *conc) if err != nil { b.Fatalf("NewWriter failed: %v", err) } b.StartTimer() for i := 0; i < b.N; i++ { err = bw.Write(r) if err != nil { b.Fatalf("Write failed: %v", err) } } } func BenchmarkReadFile(b *testing.B) { if *file == "" { b.Skip("no file specified") } for i := 0; i < b.N; i++ { f, err := os.Open(*file) if err != nil { b.Fatalf("Open failed: %v", err) } br, err := NewReader(f, *conc) if err != nil { b.Fatalf("NewReader failed: %v", err) } for { _, err := br.Read() if err != nil { break } } f.Close() } } // The is to comparable to `time samtools view -b $file > /dev/null'. func BenchmarkRoundtripFile(b *testing.B) { if *file == "" { b.Skip("no file specified") } for i := 0; i < b.N; i++ { f, err := os.Open(*file) if err != nil { b.Fatalf("Open failed: %v", err) } br, err := NewReader(f, *conc) if err != nil { b.Fatalf("NewReader failed: %v", err) } bw, err := NewWriter(ioutil.Discard, br.Header().Clone(), *conc) if err != nil { b.Fatalf("NewWriter failed: %v", err) } for { r, err := br.Read() if err != nil { break } err = bw.Write(r) if err != nil { b.Fatalf("Write failed: %v", err) } } f.Close() } } func (s *S) TestSpecExamples(c *check.C) { br, err := NewReader(bytes.NewReader(specExamples.data), *conc) c.Assert(err, check.Equals, nil) bh := br.Header() c.Check(bh.Version, check.Equals, specExamples.header.Version) c.Check(bh.SortOrder, check.Equals, specExamples.header.SortOrder) c.Check(bh.GroupOrder, check.Equals, specExamples.header.GroupOrder) c.Check(bh.Comments, check.DeepEquals, specExamples.header.Comments) for i, expect := range specExamples.records { r, err := br.Read() if err != nil { c.Errorf("Unexpected early error: %v", err) } c.Check(r.Name, check.Equals, expect.Name) c.Check(r.Pos, check.Equals, expect.Pos) // Zero-based here. c.Check(r.Flags, check.Equals, expect.Flags) if r.Flags&sam.Unmapped == 0 { c.Check(r.Ref, check.Not(check.Equals), nil) if r.Ref != nil { c.Check(r.Ref.Name(), check.Equals, bh.Refs()[0].Name()) } } else { c.Check(r.Ref, check.Equals, nil) } c.Check(r.MatePos, check.Equals, expect.MatePos) // Zero-based here. c.Check(r.Cigar, check.DeepEquals, expect.Cigar) c.Check(r.Cigar.IsValid(r.Seq.Length), check.Equals, true) c.Check(r.TempLen, check.Equals, expect.TempLen) c.Check(r.Seq, check.DeepEquals, expect.Seq, check.Commentf("got:%q expected:%q", r.Seq.Expand(), expect.Seq.Expand())) c.Check(r.Qual, check.DeepEquals, expect.Qual) // No valid qualities here. c.Check(r.End(), check.Equals, specExamples.readEnds[i], check.Commentf("unexpected end position for %q at %v, got:%d expected:%d", r.Name, r.Pos, r.End(), specExamples.readEnds[i])) c.Check(r.AuxFields, check.DeepEquals, expect.AuxFields) parsedCigar, err := sam.ParseCigar([]byte(specExamples.cigars[i])) c.Check(err, check.Equals, nil) c.Check(parsedCigar, check.DeepEquals, expect.Cigar) // In all the examples the last base of the read and the last // base of the ref are valid, so we can check this. expSeq := r.Seq.Expand() c.Check(specExamples.ref[r.End()-1], check.Equals, expSeq[len(expSeq)-1]) } } func (s *S) TestSpecExamplesIterator(c *check.C) { br, err := NewReader(bytes.NewReader(specExamples.data), *conc) c.Assert(err, check.Equals, nil) it, err := NewIterator(br, nil) c.Assert(err, check.Equals, nil) for i := 0; it.Next(); i++ { expect := specExamples.records[i] r := it.Record() c.Check(r.Name, check.Equals, expect.Name) c.Check(r.Pos, check.Equals, expect.Pos) } c.Assert(it.Error(), check.Equals, nil) } func mustAux(a sam.Aux, err error) sam.Aux { if err != nil { panic(err) } return a } // The following data is the BAM file created from the following SAM using: // // samtools view -Sb spec-example.sam > spec-example.bam // // @HD VN:1.5 SO:coordinate // @SQ SN:ref LN:45 // @CO -------------------------------------------------------- // @CO Coor 12345678901234 5678901234567890123456789012345 // @CO ref AGCATGTTAGATAA**GATAGCTGTGCTAGTAGGCAGTCAGCGCCAT // @CO -------------------------------------------------------- // @CO +r001/1 TTAGATAAAGGATA*CTG // @CO +r002 aaaAGATAA*GGATA // @CO +r003 gcctaAGCTAA // @CO +r004 ATAGCT..............TCAGC // @CO -r003 ttagctTAGGC // @CO -r001/2 CAGCGGCAT // @CO -------------------------------------------------------- // r001 99 ref 7 30 8M2I4M1D3M = 37 39 TTAGATAAAGGATACTG * // r002 0 ref 9 30 3S6M1P1I4M * 0 0 AAAAGATAAGGATA * // r003 0 ref 9 30 5S6M * 0 0 GCCTAAGCTAA * SA:Z:ref,29,-,6H5M,17,0; // r004 0 ref 16 30 6M14N5M * 0 0 ATAGCTTCAGC * // r003 2064 ref 29 17 6H5M * 0 0 TAGGC * SA:Z:ref,9,+,5S6M,30,1; // r001 147 ref 37 30 9M = 7 -39 CAGCGGCAT * NM:i:1 var specExamples = struct { ref string data []byte header sam.Header records []*sam.Record cigars []string readEnds []int }{ ref: "AGCATGTTAGATAAGATAGCTGTGCTAGTAGGCAGTCAGCGCCAT", data: []byte{ 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0xf7, 0x00, 0xa5, 0x51, 0xcb, 0x0a, 0xc2, 0x30, 0x10, 0x8c, 0xe2, 0x25, 0xfd, 0x8a, 0x9c, 0x2b, 0x6a, 0x53, 0x5b, 0x1f, 0x3d, 0x75, 0x8d, 0x10, 0x0f, 0x5a, 0x91, 0x06, 0xef, 0xa1, 0x56, 0xf1, 0xa2, 0x50, 0xf2, 0xff, 0xb8, 0x4d, 0x5f, 0x0a, 0xc5, 0x83, 0x0e, 0x49, 0x76, 0xc9, 0xce, 0x64, 0x1f, 0xd9, 0xc0, 0x61, 0x90, 0x0f, 0x09, 0x89, 0x77, 0x5b, 0x7a, 0x4e, 0x22, 0x3e, 0x0d, 0x69, 0x7a, 0x8c, 0xb2, 0xe7, 0xb3, 0xb8, 0xdc, 0x1f, 0xda, 0xe4, 0x4e, 0x9c, 0x9e, 0x68, 0x9a, 0x44, 0x45, 0x7e, 0xa5, 0xfb, 0x24, 0x0a, 0x42, 0x27, 0x16, 0x47, 0x3a, 0xf9, 0x11, 0x56, 0x2c, 0xf0, 0x71, 0x56, 0x82, 0xfb, 0xf3, 0x20, 0x5c, 0x2c, 0x57, 0x6b, 0xaf, 0xf4, 0x18, 0xeb, 0xfc, 0x5e, 0xcf, 0x8a, 0xb1, 0x0e, 0xab, 0x65, 0x20, 0x05, 0x28, 0xa9, 0x14, 0x48, 0x50, 0x00, 0xae, 0x5b, 0x1a, 0x29, 0xf0, 0x06, 0x0f, 0x90, 0xb8, 0x30, 0x2e, 0x15, 0x6e, 0x21, 0x05, 0x32, 0xff, 0x2f, 0x7b, 0x5c, 0x78, 0x1e, 0x9f, 0x71, 0x56, 0xa3, 0xc9, 0x8c, 0x89, 0xd0, 0xb8, 0x98, 0xb9, 0x65, 0xf9, 0x0d, 0x87, 0x69, 0xad, 0xeb, 0xfa, 0x2c, 0xab, 0x65, 0xcc, 0xeb, 0xf8, 0x2d, 0xcb, 0x8c, 0x2e, 0xcb, 0x86, 0x2e, 0x16, 0xb0, 0x3e, 0x54, 0xdd, 0x4d, 0x3f, 0x60, 0xbb, 0xab, 0x1a, 0x7b, 0x7b, 0xb3, 0x17, 0xc6, 0xe8, 0x5b, 0x66, 0xec, 0x54, 0x5a, 0x01, 0x9f, 0xf9, 0xdf, 0x24, 0xef, 0xb0, 0x63, 0x94, 0x7f, 0x8f, 0x71, 0x40, 0x08, 0x19, 0xe1, 0xc6, 0x4f, 0x24, 0x13, 0xb4, 0x2f, 0x02, 0xfe, 0x37, 0xdf, 0x7d, 0x02, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x01, 0x01, 0x0b, 0x66, 0x80, 0x00, 0x36, 0x20, 0x66, 0x95, 0xf3, 0x14, 0x62, 0x65, 0x48, 0x66, 0x10, 0x84, 0x8a, 0xa9, 0x00, 0xb1, 0x3a, 0x10, 0x17, 0x19, 0x18, 0x18, 0x32, 0x34, 0x00, 0x19, 0x8a, 0x40, 0xec, 0x00, 0xc4, 0x42, 0x40, 0x6c, 0x00, 0xc4, 0x1d, 0x22, 0x12, 0x82, 0x22, 0x8e, 0x8d, 0x1a, 0x0e, 0xff, 0xd1, 0x81, 0x1f, 0xd4, 0x08, 0x0e, 0xb8, 0xb1, 0x0c, 0x0c, 0x7c, 0x40, 0x0c, 0x93, 0x67, 0x80, 0x18, 0x6b, 0xc4, 0x60, 0x02, 0x64, 0x24, 0x00, 0xb1, 0x18, 0x10, 0x0b, 0x42, 0x8d, 0x17, 0x14, 0x74, 0x6c, 0x04, 0x1a, 0x8b, 0x6a, 0x62, 0x28, 0x9a, 0x89, 0x4c, 0x40, 0x9a, 0x1b, 0xd3, 0x44, 0x63, 0x86, 0x10, 0xa8, 0x89, 0x4e, 0x1a, 0x82, 0x4e, 0x8d, 0x02, 0x48, 0x26, 0x04, 0x3b, 0x46, 0x15, 0xa5, 0xa6, 0xe9, 0x18, 0x59, 0xea, 0xe8, 0xea, 0x98, 0x79, 0x98, 0xfa, 0xea, 0x18, 0x9a, 0xeb, 0x18, 0x58, 0x33, 0x38, 0x41, 0x0d, 0xe6, 0x87, 0x1a, 0xcc, 0x8c, 0xdd, 0x60, 0x13, 0xb0, 0xa1, 0x8f, 0x81, 0x38, 0x00, 0x88, 0x25, 0x44, 0x34, 0x9a, 0x44, 0x14, 0x90, 0x0c, 0xf7, 0x86, 0x9a, 0x22, 0x03, 0x32, 0x45, 0x10, 0xe4, 0x3c, 0x01, 0x0e, 0x56, 0x6c, 0xce, 0x4b, 0x85, 0x9a, 0xd0, 0xe8, 0xa2, 0x80, 0xec, 0x2a, 0x4b, 0x1d, 0x6d, 0x1d, 0xd3, 0x60, 0x33, 0x5f, 0x1d, 0x63, 0x03, 0x1d, 0x43, 0x6b, 0x06, 0x6b, 0xa4, 0x28, 0x00, 0x39, 0x8a, 0x91, 0x61, 0x32, 0x03, 0x27, 0x52, 0x54, 0xdd, 0x04, 0xea, 0x04, 0x47, 0xcb, 0x04, 0x50, 0xb4, 0x38, 0xb9, 0x28, 0x36, 0x20, 0x82, 0xde, 0xd7, 0x99, 0x11, 0x00, 0x9e, 0x55, 0xee, 0x4f, 0xd6, 0x01, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, header: sam.Header{ Version: "1.5", SortOrder: sam.Coordinate, GroupOrder: sam.GroupUnspecified, Comments: []string{ "--------------------------------------------------------", "Coor 12345678901234 5678901234567890123456789012345", "ref AGCATGTTAGATAA**GATAGCTGTGCTAGTAGGCAGTCAGCGCCAT", "--------------------------------------------------------", "+r001/1 TTAGATAAAGGATA*CTG", "+r002 aaaAGATAA*GGATA", "+r003 gcctaAGCTAA", "+r004 ATAGCT..............TCAGC", "-r003 ttagctTAGGC", "-r001/2 CAGCGGCAT", "--------------------------------------------------------", }, }, records: []*sam.Record{ { Name: "r001", Pos: 6, MapQ: 30, Cigar: sam.Cigar{ sam.NewCigarOp(sam.CigarMatch, 8), sam.NewCigarOp(sam.CigarInsertion, 2), sam.NewCigarOp(sam.CigarMatch, 4), sam.NewCigarOp(sam.CigarDeletion, 1), sam.NewCigarOp(sam.CigarMatch, 3), }, Flags: sam.Paired | sam.ProperPair | sam.MateReverse | sam.Read1, MatePos: 36, TempLen: 39, Seq: sam.NewSeq([]byte("TTAGATAAAGGATACTG")), Qual: []uint8{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, }, { Name: "r002", Pos: 8, MapQ: 30, Cigar: sam.Cigar{ sam.NewCigarOp(sam.CigarSoftClipped, 3), sam.NewCigarOp(sam.CigarMatch, 6), sam.NewCigarOp(sam.CigarPadded, 1), sam.NewCigarOp(sam.CigarInsertion, 1), sam.NewCigarOp(sam.CigarMatch, 4), }, MatePos: -1, TempLen: 0, Seq: sam.NewSeq([]byte("AAAAGATAAGGATA")), Qual: []uint8{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, }, { Name: "r003", Pos: 8, MapQ: 30, Cigar: sam.Cigar{ sam.NewCigarOp(sam.CigarSoftClipped, 5), sam.NewCigarOp(sam.CigarMatch, 6), }, MatePos: -1, TempLen: 0, Seq: sam.NewSeq([]byte("GCCTAAGCTAA")), Qual: []uint8{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, AuxFields: []sam.Aux{ mustAux(sam.NewAux(sam.NewTag("SA"), "ref,29,-,6H5M,17,0;")), }, }, { Name: "r004", Pos: 15, MapQ: 30, Cigar: sam.Cigar{ sam.NewCigarOp(sam.CigarMatch, 6), sam.NewCigarOp(sam.CigarSkipped, 14), sam.NewCigarOp(sam.CigarMatch, 5), }, MatePos: -1, TempLen: 0, Seq: sam.NewSeq([]byte("ATAGCTTCAGC")), Qual: []uint8{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, }, { Name: "r003", Pos: 28, MapQ: 17, Cigar: sam.Cigar{ sam.NewCigarOp(sam.CigarHardClipped, 6), sam.NewCigarOp(sam.CigarMatch, 5), }, Flags: sam.Reverse | sam.Supplementary, MatePos: -1, TempLen: 0, Seq: sam.NewSeq([]byte("TAGGC")), Qual: []uint8{0xff, 0xff, 0xff, 0xff, 0xff}, AuxFields: []sam.Aux{ mustAux(sam.NewAux(sam.NewTag("SA"), "ref,9,+,5S6M,30,1;")), }, }, { Name: "r001", Pos: 36, MapQ: 30, Cigar: sam.Cigar{ sam.NewCigarOp(sam.CigarMatch, 9), }, Flags: sam.Paired | sam.ProperPair | sam.Reverse | sam.Read2, MatePos: 6, TempLen: -39, Seq: sam.NewSeq([]byte("CAGCGGCAT")), Qual: []uint8{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, AuxFields: []sam.Aux{ mustAux(sam.NewAux(sam.NewTag("NM"), uint(1))), }, }, }, cigars: []string{ "8M2I4M1D3M", "3S6M1P1I4M", "5S6M", "6M14N5M", "6H5M", "9M", }, // These coordinates are all open (and zero-based) so that // a slice of the reference doesn't need any alteration. readEnds: []int{ 22, 18, 14, 40, 33, 45, }, } func (s *S) TestIssue3(c *check.C) { for _, test := range issue3 { br, err := NewReader(bytes.NewReader(test), *conc) c.Assert(err, check.Equals, nil, check.Commentf("Failed to open BAM")) for { _, err := br.Read() if err != nil { c.Check(err, check.Equals, io.EOF) break } } } } var issue3 = [][]byte{ // Specific case posted at https://code.google.com/p/biogo/issues/detail?id=3#c6 // edited to a minimal reproducer. []byte{ 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x61, 0x00, 0x73, 0x72, 0xf4, 0x65, 0x34, 0x62, 0x60, 0x60, 0x70, 0xf0, 0x70, 0xe1, 0x0c, 0xf3, 0xb3, 0x32, 0xd4, 0x33, 0xe0, 0x0c, 0xf6, 0xb7, 0x4a, 0xce, 0xcf, 0x2f, 0x4a, 0xc9, 0xcc, 0x4b, 0x2c, 0x49, 0xe5, 0x72, 0x08, 0x0e, 0xe4, 0x0c, 0xf6, 0xb3, 0x8a, 0x2a, 0xb3, 0x8c, 0xf7, 0x73, 0x34, 0x34, 0xe0, 0xf4, 0xf1, 0xb3, 0x32, 0xb1, 0x30, 0x30, 0x33, 0xe2, 0x62, 0x04, 0xea, 0xe2, 0x04, 0x62, 0x98, 0x0c, 0xc3, 0xbe, 0xdd, 0x0c, 0x0c, 0x00, 0xaa, 0x89, 0xab, 0xc2, 0x4f, 0x00, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0xa2, 0x00, 0x9b, 0xc5, 0x00, 0x01, 0xb3, 0xa5, 0x19, 0x18, 0xf8, 0x19, 0x3c, 0x85, 0x18, 0x19, 0x18, 0x18, 0x25, 0x81, 0xfc, 0xff, 0x50, 0x00, 0x92, 0x33, 0x34, 0x28, 0x30, 0x30, 0xcc, 0x4a, 0x4b, 0xce, 0x53, 0x76, 0x76, 0x76, 0x0f, 0x61, 0x98, 0x00, 0x54, 0x23, 0xd4, 0x01, 0x05, 0x4a, 0x1d, 0x1d, 0x0d, 0xaa, 0xca, 0xca, 0xca, 0x8a, 0xaa, 0xea, 0xea, 0xea, 0x1a, 0x9a, 0x9a, 0x9a, 0x1a, 0x40, 0x52, 0x55, 0x59, 0x51, 0x45, 0x55, 0x55, 0x45, 0xc9, 0x31, 0x38, 0xf9, 0x77, 0x84, 0x9f, 0x33, 0x43, 0x84, 0xaf, 0x33, 0x63, 0x84, 0x3f, 0x90, 0x76, 0x77, 0x66, 0xf0, 0x03, 0xb2, 0x7d, 0x5d, 0xa2, 0x8c, 0x8c, 0x1d, 0x0d, 0x19, 0x22, 0x43, 0xa2, 0x42, 0x43, 0x19, 0xfc, 0x3c, 0x9c, 0x45, 0x9c, 0x9d, 0xa3, 0x92, 0x33, 0x8a, 0x0c, 0x19, 0x9c, 0x03, 0x3c, 0xf7, 0x9a, 0x3f, 0x67, 0x8a, 0x08, 0x76, 0xd4, 0xf6, 0xf0, 0x74, 0x66, 0x00, 0x00, 0xa6, 0xdc, 0x77, 0x77, 0x9e, 0x00, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, // More general testing: sequence lengths range from 19 to 26 inclusive. []byte{ 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x61, 0x00, 0x73, 0x72, 0xf4, 0x65, 0x34, 0x62, 0x60, 0x60, 0x70, 0xf0, 0x70, 0xe1, 0x0c, 0xf3, 0xb3, 0x32, 0xd4, 0x33, 0xe0, 0x0c, 0xf6, 0xb7, 0x4a, 0xce, 0xcf, 0x2f, 0x4a, 0xc9, 0xcc, 0x4b, 0x2c, 0x49, 0xe5, 0x72, 0x08, 0x0e, 0xe4, 0x0c, 0xf6, 0xb3, 0x8a, 0x2a, 0xb3, 0x8c, 0xf7, 0x73, 0x34, 0x34, 0xe0, 0xf4, 0xf1, 0xb3, 0x32, 0xb1, 0x30, 0x30, 0x33, 0xe2, 0x62, 0x04, 0xea, 0xe2, 0x04, 0x62, 0x98, 0x0c, 0xc3, 0xbe, 0xdd, 0x0c, 0x0c, 0x00, 0xaa, 0x89, 0xab, 0xc2, 0x4f, 0x00, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x12, 0x01, 0x9b, 0xc8, 0x00, 0x01, 0xb3, 0xa5, 0x19, 0x18, 0xf8, 0x19, 0x3c, 0x85, 0x18, 0x19, 0x18, 0x18, 0x85, 0x81, 0xfc, 0xff, 0x50, 0x00, 0x92, 0x33, 0x34, 0x28, 0x30, 0x30, 0xcc, 0x4a, 0x4b, 0xce, 0x53, 0x76, 0x76, 0x76, 0x0f, 0x61, 0x30, 0x00, 0xaa, 0x11, 0xea, 0x80, 0x02, 0x05, 0x55, 0x65, 0x65, 0x65, 0x45, 0x55, 0x75, 0x75, 0x75, 0x0d, 0x4d, 0x4d, 0x4d, 0x0d, 0x20, 0xa9, 0xaa, 0xec, 0x18, 0x9c, 0xfc, 0x3b, 0xc2, 0xcf, 0x99, 0x21, 0xc2, 0xd7, 0x99, 0x31, 0xc2, 0x1f, 0x48, 0xbb, 0x3b, 0x33, 0xf8, 0x01, 0xd9, 0xbe, 0x2e, 0x51, 0x46, 0xc6, 0x8e, 0x86, 0x0c, 0x91, 0x21, 0x51, 0xa1, 0xa1, 0x0c, 0x7e, 0x1e, 0xce, 0x22, 0xce, 0xce, 0x51, 0xc9, 0x19, 0x45, 0x86, 0x0c, 0xce, 0x01, 0x9e, 0x7b, 0xcd, 0x9f, 0x33, 0x45, 0x04, 0x3b, 0x6a, 0x7b, 0x78, 0x3a, 0x33, 0x4c, 0xc2, 0xe2, 0x28, 0x11, 0xfc, 0x8e, 0x72, 0x40, 0x76, 0x94, 0x12, 0x16, 0x47, 0x29, 0x52, 0xec, 0xaa, 0x29, 0x58, 0x5c, 0x25, 0x8a, 0xdf, 0x55, 0x01, 0x28, 0xae, 0x6a, 0xc0, 0xe6, 0x2c, 0x15, 0x8a, 0xdd, 0x35, 0x15, 0x8b, 0xbb, 0xc4, 0xf0, 0xbb, 0x2b, 0x01, 0xc5, 0x5d, 0x1d, 0x58, 0xdd, 0xa5, 0x4a, 0xb1, 0xc3, 0xa6, 0x63, 0x71, 0x98, 0x38, 0x7e, 0x87, 0x15, 0xa0, 0x3a, 0x0c, 0x7b, 0x88, 0xa9, 0x52, 0xee, 0xb4, 0x19, 0x58, 0x9c, 0x26, 0x81, 0xdf, 0x69, 0x0d, 0xa8, 0x4e, 0xc3, 0x11, 0x68, 0xaa, 0x94, 0xc7, 0xe7, 0x2c, 0x2c, 0x6e, 0x93, 0xc4, 0xef, 0xb6, 0x09, 0x68, 0x6e, 0xc3, 0x15, 0x6e, 0x2a, 0x4a, 0x14, 0xbb, 0x6e, 0x36, 0x16, 0xd7, 0x49, 0xe1, 0x77, 0xdd, 0x02, 0x34, 0xd7, 0xe1, 0x0c, 0x3a, 0x25, 0xca, 0x9d, 0x07, 0x00, 0x31, 0x91, 0x24, 0x5a, 0xd0, 0x04, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, } func (s *S) TestIssue11(c *check.C) { for _, test := range issue11 { br, err := NewReader(bytes.NewReader(test.input), *conc) c.Check(err, check.Equals, nil) c.Check(br.Header().GroupOrder, check.Equals, test.expect) } } var issue11 = []struct { input []byte expect sam.GroupOrder }{ { // 1000 genomes file hand edited to reduce number of Refs and reads; // no specified group ordering. input: []byte{ 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0xec, 0x01, 0xad, 0x92, 0xcd, 0x8e, 0xda, 0x30, 0x10, 0xc7, 0xb3, 0xdd, 0x93, 0x79, 0x8a, 0x1c, 0x38, 0xb4, 0x07, 0x1c, 0xe7, 0xc3, 0x81, 0x58, 0xaa, 0xc4, 0x97, 0x04, 0x48, 0x21, 0x9b, 0x12, 0xd1, 0x6a, 0x4f, 0x91, 0x93, 0xd8, 0xc1, 0x5a, 0xe3, 0x00, 0x0e, 0xd0, 0xf6, 0x0d, 0xfa, 0xc4, 0xbd, 0x55, 0x35, 0xd1, 0xb6, 0x5d, 0xb5, 0x3d, 0xee, 0xc1, 0x23, 0xfb, 0x3f, 0x33, 0xbf, 0x19, 0xdb, 0x33, 0x9d, 0xac, 0xef, 0xb2, 0x7b, 0xcb, 0x1a, 0x2f, 0xe7, 0xe0, 0x63, 0x42, 0x5c, 0x88, 0x40, 0xf6, 0x40, 0xca, 0xa6, 0x39, 0x55, 0x42, 0xd1, 0x96, 0xf5, 0xc6, 0xd9, 0x07, 0x90, 0x25, 0xe4, 0x11, 0xc4, 0x09, 0xc1, 0x91, 0x3f, 0xf4, 0x71, 0x18, 0x82, 0x35, 0x26, 0x2e, 0xa7, 0x7e, 0x30, 0x0c, 0x86, 0x18, 0x51, 0x8e, 0xa2, 0x60, 0x54, 0x54, 0x3c, 0x1a, 0x56, 0x98, 0x22, 0xc6, 0xb0, 0xc7, 0xb0, 0x0b, 0xb6, 0x1b, 0xc2, 0xdb, 0x03, 0x71, 0x1c, 0x63, 0xa1, 0x8b, 0x10, 0xaa, 0x99, 0x6a, 0xf6, 0x4c, 0x43, 0x56, 0x08, 0x48, 0x4b, 0x78, 0x7e, 0x72, 0x2e, 0x8d, 0x74, 0x6f, 0x6e, 0xa7, 0x65, 0xe5, 0x4e, 0x89, 0x92, 0x4a, 0xe7, 0xc4, 0x38, 0x3b, 0x31, 0x55, 0x32, 0xe7, 0xb0, 0xa3, 0x9a, 0x79, 0xf9, 0x6f, 0x21, 0xa7, 0x5a, 0xb3, 0x7d, 0x21, 0xbf, 0xe4, 0x9a, 0x1d, 0xcf, 0x5d, 0xc8, 0x4e, 0xfb, 0xa6, 0x24, 0xe4, 0x14, 0xd6, 0x5f, 0xc1, 0x24, 0x23, 0xc9, 0x6c, 0xba, 0xf2, 0x87, 0x20, 0x4b, 0xc9, 0xf2, 0xbc, 0xa7, 0xaa, 0x37, 0xde, 0x2c, 0xc0, 0x6a, 0x4e, 0xb2, 0xcd, 0x06, 0x85, 0x5e, 0xe8, 0x07, 0x20, 0x9e, 0x12, 0x6f, 0x14, 0xe0, 0x11, 0x0e, 0x47, 0xd8, 0x5c, 0x74, 0x4d, 0x96, 0x0b, 0xd3, 0x58, 0x14, 0x82, 0x74, 0x45, 0x3c, 0x14, 0x82, 0x59, 0x42, 0x3e, 0x6d, 0x17, 0xd9, 0x0c, 0xa4, 0x31, 0x59, 0xc5, 0xf1, 0x76, 0xbd, 0x4a, 0x26, 0x60, 0x9e, 0x19, 0x42, 0x8a, 0x90, 0xeb, 0x45, 0xc1, 0xdf, 0x48, 0xfc, 0xea, 0xc8, 0xc0, 0x7d, 0x0d, 0x64, 0xda, 0x21, 0x8b, 0x2b, 0xcd, 0x85, 0xaa, 0xd8, 0x67, 0x90, 0x26, 0xb7, 0xc3, 0xed, 0x87, 0x11, 0xc4, 0x30, 0x1a, 0x9c, 0x5c, 0x83, 0x89, 0x6f, 0x9a, 0xdd, 0x05, 0xd8, 0x03, 0x6a, 0x17, 0xd7, 0x56, 0x5f, 0xed, 0xfe, 0x9f, 0x07, 0xe7, 0x54, 0xb7, 0xf4, 0x25, 0x8b, 0x4a, 0xd5, 0x89, 0xc7, 0x5f, 0xbc, 0x34, 0x7d, 0x51, 0xe3, 0x7f, 0x70, 0x93, 0x61, 0x0f, 0x8e, 0xb6, 0x8b, 0xed, 0x01, 0xb7, 0xfb, 0x9a, 0x8a, 0x9c, 0x0b, 0xc9, 0xfe, 0x29, 0x62, 0xf7, 0x3b, 0x6c, 0xe7, 0xec, 0x8d, 0x67, 0x0f, 0xa0, 0xff, 0xa4, 0x9a, 0xab, 0xea, 0xc0, 0x52, 0x77, 0xf2, 0x5b, 0xfd, 0xce, 0x7e, 0x6f, 0xbf, 0xc6, 0x44, 0xed, 0xe9, 0xe1, 0x20, 0x54, 0x6d, 0x26, 0x4b, 0x37, 0xe7, 0x53, 0xc9, 0xb4, 0x33, 0x89, 0x63, 0x78, 0xad, 0x35, 0x7c, 0x2e, 0xb7, 0x17, 0xd2, 0xd8, 0x8a, 0x5d, 0x84, 0x62, 0xf9, 0xae, 0x76, 0xa3, 0x5c, 0x32, 0xde, 0x4e, 0xa4, 0xa8, 0x15, 0xab, 0xf2, 0xb2, 0x91, 0x92, 0x1e, 0xb4, 0xd9, 0x55, 0xcd, 0xb9, 0x90, 0x26, 0x42, 0xb4, 0xcf, 0x99, 0x50, 0x8b, 0xd6, 0xb4, 0x73, 0x29, 0xb9, 0x19, 0xc8, 0xde, 0x9d, 0x65, 0x59, 0x6f, 0xcc, 0x7a, 0xb4, 0x7e, 0x7c, 0xff, 0x76, 0xff, 0x13, 0x01, 0xfd, 0x62, 0x77, 0x69, 0x03, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0xcf, 0x00, 0x4d, 0xce, 0x31, 0x6a, 0xc3, 0x30, 0x18, 0x05, 0x60, 0x41, 0x0f, 0x50, 0xd2, 0x66, 0x30, 0x74, 0x88, 0xab, 0x18, 0xeb, 0x59, 0xb2, 0xa5, 0xff, 0xb7, 0xa9, 0x93, 0x8c, 0x32, 0x82, 0x6a, 0x76, 0xb6, 0xce, 0x3d, 0x40, 0x2e, 0x90, 0x41, 0xc1, 0x83, 0x73, 0xc1, 0xdc, 0xa4, 0x74, 0xad, 0x4b, 0xa0, 0xf4, 0x5b, 0xde, 0xe3, 0x4d, 0xef, 0x26, 0xee, 0xbe, 0xbe, 0xaf, 0x0f, 0xcf, 0xe2, 0x94, 0x0b, 0x71, 0x16, 0x9f, 0xff, 0xb6, 0xdf, 0x3c, 0x8e, 0x23, 0xf5, 0x6d, 0xdf, 0xbd, 0x59, 0x3e, 0xf4, 0xdd, 0x6e, 0xdf, 0xb6, 0x62, 0xb8, 0xc8, 0xe8, 0x63, 0x98, 0x57, 0x29, 0x44, 0x9f, 0xbc, 0x9c, 0xa6, 0x4c, 0x66, 0xc5, 0x94, 0x45, 0xa4, 0x39, 0xad, 0x83, 0x7f, 0x8a, 0x31, 0x0c, 0x4b, 0x0d, 0x98, 0xb3, 0x20, 0xe1, 0xd7, 0xe9, 0x55, 0xe6, 0x79, 0xfe, 0x52, 0xa0, 0xd2, 0xa5, 0xde, 0x42, 0xab, 0x2d, 0x60, 0xea, 0x1a, 0xc6, 0x28, 0x65, 0xa1, 0x01, 0xab, 0x6c, 0xa9, 0x50, 0x35, 0x0a, 0x1b, 0xc7, 0xda, 0xb0, 0x61, 0xaa, 0x1d, 0xa1, 0xd4, 0xa6, 0x65, 0x36, 0x64, 0xa0, 0x1c, 0x3b, 0x66, 0x22, 0x76, 0x8e, 0xc8, 0x71, 0x45, 0x0b, 0x0b, 0xba, 0xb3, 0x4d, 0xa3, 0xf1, 0x38, 0xbe, 0x7f, 0xfc, 0x7d, 0x15, 0x3f, 0xf2, 0x15, 0x80, 0x8f, 0xda, 0x00, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, expect: sam.GroupUnspecified, }, { input: []byte{ 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0xf3, 0x01, 0xad, 0x92, 0xcd, 0x8e, 0xda, 0x30, 0x10, 0xc7, 0xb3, 0xdd, 0x93, 0x79, 0x8a, 0x1c, 0x38, 0xb4, 0x07, 0x1c, 0xe7, 0xc3, 0x81, 0x58, 0xaa, 0xc4, 0x97, 0x04, 0x48, 0x21, 0xa4, 0x44, 0xb4, 0x5a, 0xf5, 0x10, 0x39, 0x89, 0x13, 0xac, 0x35, 0x0e, 0xe0, 0x00, 0xdb, 0xbe, 0xc1, 0x3e, 0xf1, 0xde, 0xaa, 0x9a, 0x68, 0xdb, 0xae, 0xda, 0x1e, 0x39, 0x78, 0x64, 0xff, 0x67, 0xe6, 0x37, 0x63, 0x7b, 0xc6, 0xa3, 0xe5, 0xdd, 0xd7, 0x7b, 0xc3, 0x18, 0xce, 0xa7, 0xe0, 0x73, 0x44, 0x6c, 0x88, 0x40, 0xb2, 0x22, 0x79, 0x5d, 0x1f, 0x0b, 0x2e, 0x69, 0xc3, 0xc0, 0x6c, 0x45, 0x64, 0x2d, 0x59, 0x67, 0x98, 0x7c, 0x02, 0x49, 0x44, 0x1e, 0x40, 0x18, 0x11, 0x1c, 0xb8, 0x7d, 0x17, 0xfb, 0x3e, 0x58, 0x62, 0x62, 0x97, 0xd4, 0xf5, 0xfa, 0x5e, 0x1f, 0x23, 0x5a, 0xa2, 0xc0, 0x1b, 0x64, 0x45, 0x19, 0xf4, 0x0b, 0x4c, 0x11, 0x63, 0xd8, 0x61, 0xd8, 0x06, 0x9b, 0x35, 0x29, 0x9b, 0x3d, 0xb1, 0x2c, 0x6d, 0xa1, 0x8d, 0x10, 0xaa, 0x98, 0xac, 0x77, 0x4c, 0x41, 0x96, 0x71, 0x48, 0x73, 0x78, 0x7a, 0xb4, 0xce, 0xb5, 0xb0, 0xaf, 0x6e, 0xab, 0x61, 0xf9, 0x56, 0xf2, 0x9c, 0x0a, 0xeb, 0xc8, 0x4a, 0x76, 0x64, 0x32, 0x67, 0xd6, 0x7e, 0x4b, 0x15, 0x73, 0xd2, 0xdf, 0x42, 0x4a, 0x95, 0x62, 0xbb, 0x4c, 0x7c, 0x4b, 0x15, 0x3b, 0x9c, 0xda, 0x90, 0xad, 0x72, 0x75, 0x49, 0x58, 0x52, 0x58, 0x7d, 0x07, 0xa3, 0x84, 0x44, 0x93, 0xf1, 0xc2, 0xed, 0x83, 0x24, 0x26, 0xf3, 0xd3, 0x8e, 0xca, 0xce, 0x70, 0x3d, 0x03, 0x8b, 0x29, 0x49, 0xd6, 0x6b, 0xe4, 0x3b, 0xbe, 0xeb, 0x81, 0x70, 0x4c, 0x9c, 0x81, 0x87, 0x07, 0xd8, 0x1f, 0x60, 0x7d, 0xe1, 0x25, 0x99, 0xcf, 0x74, 0x63, 0x81, 0x0f, 0xe2, 0x05, 0x71, 0x90, 0x0f, 0x26, 0x11, 0xf9, 0xb2, 0x99, 0x25, 0x13, 0x10, 0x87, 0x64, 0x11, 0x86, 0x9b, 0xe5, 0x22, 0x1a, 0x81, 0x69, 0xa2, 0x09, 0x31, 0x42, 0xb6, 0x13, 0x78, 0x7f, 0x23, 0xf1, 0xcd, 0x91, 0x9e, 0x7d, 0x0b, 0x64, 0xdc, 0x22, 0xb3, 0x0b, 0x4d, 0xb9, 0x2c, 0xd8, 0x13, 0x88, 0xa3, 0xeb, 0xe1, 0xfa, 0xd3, 0x08, 0x62, 0x18, 0xf4, 0x8e, 0xb6, 0xc6, 0x84, 0x57, 0xcd, 0x6c, 0x03, 0xcc, 0x1e, 0x35, 0xb3, 0x4b, 0xa3, 0x2e, 0x66, 0xf7, 0xcf, 0x83, 0x97, 0x54, 0x35, 0xf4, 0x2d, 0x8b, 0x0a, 0xd9, 0x8a, 0x87, 0x5f, 0xbc, 0x38, 0x7e, 0x53, 0xe3, 0x7f, 0x70, 0x9d, 0x61, 0xf6, 0x0e, 0xa6, 0x8d, 0xcd, 0x5e, 0x69, 0x76, 0x15, 0xe5, 0x69, 0xc9, 0x05, 0xfb, 0xa7, 0x88, 0xd9, 0x6d, 0xb1, 0xad, 0xb3, 0x33, 0x9c, 0xac, 0x40, 0xf7, 0x51, 0xd6, 0x17, 0xd9, 0x82, 0x85, 0x6a, 0xe5, 0xf7, 0xea, 0x83, 0xf9, 0xd1, 0xbc, 0xc5, 0x44, 0xed, 0xe8, 0x7e, 0xcf, 0x65, 0xa5, 0x27, 0x4b, 0xd5, 0xa7, 0x63, 0xce, 0x94, 0x35, 0x0a, 0x43, 0x78, 0xa9, 0x14, 0x7c, 0x2d, 0xb7, 0xe3, 0x42, 0xdb, 0x82, 0x9d, 0xb9, 0x64, 0xe9, 0xb6, 0xb2, 0x83, 0x54, 0xb0, 0xb2, 0x19, 0x09, 0x5e, 0x49, 0x56, 0xa4, 0x79, 0x2d, 0x04, 0xdd, 0x2b, 0xbd, 0x2b, 0xea, 0x53, 0x26, 0x74, 0x04, 0x6f, 0x5e, 0x33, 0xa1, 0xe2, 0x8d, 0x6e, 0xe7, 0x9c, 0x97, 0x7a, 0x20, 0x3b, 0x77, 0x86, 0x61, 0xbc, 0xd3, 0xeb, 0xc1, 0xf8, 0xf1, 0xf2, 0x7c, 0xff, 0x13, 0x5a, 0x38, 0x56, 0x0a, 0x71, 0x03, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0xcf, 0x00, 0x4d, 0xce, 0x31, 0x6a, 0xc3, 0x30, 0x18, 0x05, 0x60, 0x41, 0x0f, 0x50, 0xd2, 0x66, 0x30, 0x74, 0x88, 0xab, 0x18, 0xeb, 0x59, 0xb2, 0xa5, 0xff, 0xb7, 0xa9, 0x93, 0x8c, 0x32, 0x82, 0x6a, 0x76, 0xb6, 0xce, 0x3d, 0x40, 0x2e, 0x90, 0x41, 0xc1, 0x83, 0x73, 0xc1, 0xdc, 0xa4, 0x74, 0xad, 0x4b, 0xa0, 0xf4, 0x5b, 0xde, 0xe3, 0x4d, 0xef, 0x26, 0xee, 0xbe, 0xbe, 0xaf, 0x0f, 0xcf, 0xe2, 0x94, 0x0b, 0x71, 0x16, 0x9f, 0xff, 0xb6, 0xdf, 0x3c, 0x8e, 0x23, 0xf5, 0x6d, 0xdf, 0xbd, 0x59, 0x3e, 0xf4, 0xdd, 0x6e, 0xdf, 0xb6, 0x62, 0xb8, 0xc8, 0xe8, 0x63, 0x98, 0x57, 0x29, 0x44, 0x9f, 0xbc, 0x9c, 0xa6, 0x4c, 0x66, 0xc5, 0x94, 0x45, 0xa4, 0x39, 0xad, 0x83, 0x7f, 0x8a, 0x31, 0x0c, 0x4b, 0x0d, 0x98, 0xb3, 0x20, 0xe1, 0xd7, 0xe9, 0x55, 0xe6, 0x79, 0xfe, 0x52, 0xa0, 0xd2, 0xa5, 0xde, 0x42, 0xab, 0x2d, 0x60, 0xea, 0x1a, 0xc6, 0x28, 0x65, 0xa1, 0x01, 0xab, 0x6c, 0xa9, 0x50, 0x35, 0x0a, 0x1b, 0xc7, 0xda, 0xb0, 0x61, 0xaa, 0x1d, 0xa1, 0xd4, 0xa6, 0x65, 0x36, 0x64, 0xa0, 0x1c, 0x3b, 0x66, 0x22, 0x76, 0x8e, 0xc8, 0x71, 0x45, 0x0b, 0x0b, 0xba, 0xb3, 0x4d, 0xa3, 0xf1, 0x38, 0xbe, 0x7f, 0xfc, 0x7d, 0x15, 0x3f, 0xf2, 0x15, 0x80, 0x8f, 0xda, 0x00, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, expect: sam.GroupNone, }, { input: []byte{ 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0xf5, 0x01, 0xad, 0x92, 0xcb, 0x8e, 0xda, 0x30, 0x14, 0x86, 0x33, 0x9d, 0x95, 0x79, 0x8a, 0x2c, 0x58, 0xb4, 0x0b, 0x1c, 0xe7, 0xe2, 0x40, 0x2c, 0x55, 0xe2, 0x26, 0x01, 0x52, 0x08, 0x29, 0x11, 0xad, 0x46, 0xaa, 0x14, 0x39, 0x89, 0x13, 0xac, 0x31, 0x0e, 0x13, 0x07, 0xe8, 0xf4, 0x0d, 0xfa, 0xc4, 0xdd, 0x55, 0x35, 0xd1, 0xb4, 0x1d, 0xb5, 0x5d, 0xb2, 0xf0, 0x91, 0x7d, 0x2e, 0xdf, 0x7f, 0x6c, 0x9f, 0xe9, 0x64, 0x7d, 0xf7, 0xf9, 0xde, 0x30, 0xc6, 0xcb, 0x39, 0xf8, 0x18, 0x11, 0x1b, 0x22, 0x90, 0x6c, 0x48, 0x5e, 0xd7, 0x4d, 0xc1, 0x25, 0x6d, 0x19, 0x58, 0x6c, 0xc8, 0xd3, 0x89, 0x35, 0xcf, 0xbd, 0x71, 0xf2, 0x01, 0x24, 0x11, 0x79, 0x00, 0x61, 0x44, 0x70, 0xe0, 0x0e, 0x5d, 0xec, 0xfb, 0x60, 0x8d, 0x89, 0x5d, 0x52, 0xd7, 0x1b, 0x7a, 0x43, 0x8c, 0x68, 0x89, 0x02, 0x6f, 0x94, 0x15, 0x65, 0x30, 0x2c, 0x30, 0x45, 0x8c, 0x61, 0x87, 0x61, 0x1b, 0xec, 0xb6, 0xa4, 0x6c, 0x8f, 0xc4, 0xb2, 0xb4, 0x85, 0x36, 0x42, 0xa8, 0x62, 0xb2, 0x3e, 0x30, 0x05, 0x59, 0xc6, 0x21, 0xcd, 0xe1, 0xe9, 0xd1, 0x3a, 0xd7, 0xc2, 0xbe, 0x86, 0xad, 0x96, 0xe5, 0x7b, 0xc9, 0x73, 0x2a, 0xac, 0x86, 0x95, 0xac, 0x61, 0x32, 0x67, 0xd6, 0x71, 0x4f, 0x15, 0x73, 0xd2, 0xdf, 0x8e, 0x94, 0x2a, 0xc5, 0x0e, 0x99, 0x78, 0x4e, 0x15, 0xd3, 0xad, 0x5d, 0x53, 0xf6, 0xca, 0xd5, 0x92, 0xb0, 0xa4, 0xb0, 0xfa, 0x0a, 0x26, 0x09, 0x89, 0x66, 0xd3, 0x95, 0x3b, 0x04, 0x49, 0x4c, 0x96, 0xa7, 0x03, 0x95, 0xbd, 0xf1, 0x76, 0x01, 0x56, 0x73, 0x92, 0x6c, 0xb7, 0xc8, 0x77, 0x7c, 0xd7, 0x03, 0xe1, 0x94, 0x38, 0x23, 0x0f, 0x8f, 0xb0, 0x3f, 0xc2, 0xfa, 0xc6, 0x6b, 0xb2, 0x5c, 0xe8, 0xc6, 0x02, 0x1f, 0xc4, 0x2b, 0xe2, 0x20, 0x1f, 0xcc, 0x22, 0xf2, 0x69, 0xb7, 0x48, 0x66, 0x20, 0x0e, 0xc9, 0x2a, 0x0c, 0x77, 0xeb, 0x55, 0x34, 0x01, 0xf3, 0x44, 0x13, 0x62, 0x84, 0x6c, 0x27, 0xf0, 0xfe, 0x46, 0xe2, 0x9b, 0x23, 0x3d, 0xfb, 0x16, 0xc8, 0xb8, 0x43, 0x66, 0x17, 0x9a, 0x72, 0x59, 0xb0, 0x2f, 0x20, 0x8e, 0xae, 0x87, 0xeb, 0x57, 0x23, 0x88, 0x61, 0x30, 0x68, 0x6c, 0x8d, 0x09, 0xaf, 0x3e, 0xb3, 0x4b, 0x30, 0x07, 0xd4, 0xcc, 0x2e, 0xad, 0xba, 0x98, 0xfd, 0x3f, 0x0f, 0x5e, 0x52, 0xd5, 0xd2, 0xd7, 0x2c, 0x2a, 0x64, 0xe7, 0x7c, 0xfa, 0xc5, 0x8b, 0xe3, 0x57, 0x1a, 0xff, 0x83, 0xeb, 0x0a, 0x73, 0xf0, 0x64, 0xda, 0xd8, 0x1c, 0x94, 0x66, 0x5f, 0x51, 0x9e, 0x96, 0x5c, 0xb0, 0x7f, 0x44, 0xcc, 0x7e, 0x87, 0xed, 0x82, 0xbd, 0xf1, 0x6c, 0x03, 0xfa, 0x8f, 0xb2, 0xbe, 0xc8, 0x0e, 0x2c, 0x54, 0xe7, 0x7e, 0xab, 0xde, 0x99, 0xef, 0xcd, 0x5b, 0x4c, 0xd4, 0x81, 0x1e, 0x8f, 0x5c, 0x56, 0x7a, 0xb2, 0x54, 0x7d, 0x6a, 0x72, 0xa6, 0xac, 0x49, 0x18, 0xc2, 0x4b, 0xa5, 0xe0, 0x8b, 0xdc, 0x81, 0x0b, 0x6d, 0x0b, 0x76, 0xe6, 0x92, 0xa5, 0xfb, 0xca, 0x0e, 0x52, 0xc1, 0xca, 0x76, 0x22, 0x78, 0x25, 0x59, 0x91, 0xe6, 0xb5, 0x10, 0xf4, 0xa8, 0xf4, 0xae, 0xa8, 0x4f, 0x99, 0xd0, 0x19, 0xbc, 0x7d, 0xa9, 0x84, 0x8a, 0xb7, 0xba, 0x9d, 0x73, 0x5e, 0xea, 0x81, 0xec, 0xdd, 0x19, 0x86, 0xf1, 0x46, 0xaf, 0x07, 0xe3, 0xc7, 0xf7, 0x6f, 0xf7, 0x3f, 0x01, 0x63, 0x09, 0x85, 0xc2, 0x72, 0x03, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0xcf, 0x00, 0x4d, 0xce, 0x31, 0x6a, 0xc3, 0x30, 0x18, 0x05, 0x60, 0x41, 0x0f, 0x50, 0xd2, 0x66, 0x30, 0x74, 0x88, 0xab, 0x18, 0xeb, 0x59, 0xb2, 0xa5, 0xff, 0xb7, 0xa9, 0x93, 0x8c, 0x32, 0x82, 0x6a, 0x76, 0xb6, 0xce, 0x3d, 0x40, 0x2e, 0x90, 0x41, 0xc1, 0x83, 0x73, 0xc1, 0xdc, 0xa4, 0x74, 0xad, 0x4b, 0xa0, 0xf4, 0x5b, 0xde, 0xe3, 0x4d, 0xef, 0x26, 0xee, 0xbe, 0xbe, 0xaf, 0x0f, 0xcf, 0xe2, 0x94, 0x0b, 0x71, 0x16, 0x9f, 0xff, 0xb6, 0xdf, 0x3c, 0x8e, 0x23, 0xf5, 0x6d, 0xdf, 0xbd, 0x59, 0x3e, 0xf4, 0xdd, 0x6e, 0xdf, 0xb6, 0x62, 0xb8, 0xc8, 0xe8, 0x63, 0x98, 0x57, 0x29, 0x44, 0x9f, 0xbc, 0x9c, 0xa6, 0x4c, 0x66, 0xc5, 0x94, 0x45, 0xa4, 0x39, 0xad, 0x83, 0x7f, 0x8a, 0x31, 0x0c, 0x4b, 0x0d, 0x98, 0xb3, 0x20, 0xe1, 0xd7, 0xe9, 0x55, 0xe6, 0x79, 0xfe, 0x52, 0xa0, 0xd2, 0xa5, 0xde, 0x42, 0xab, 0x2d, 0x60, 0xea, 0x1a, 0xc6, 0x28, 0x65, 0xa1, 0x01, 0xab, 0x6c, 0xa9, 0x50, 0x35, 0x0a, 0x1b, 0xc7, 0xda, 0xb0, 0x61, 0xaa, 0x1d, 0xa1, 0xd4, 0xa6, 0x65, 0x36, 0x64, 0xa0, 0x1c, 0x3b, 0x66, 0x22, 0x76, 0x8e, 0xc8, 0x71, 0x45, 0x0b, 0x0b, 0xba, 0xb3, 0x4d, 0xa3, 0xf1, 0x38, 0xbe, 0x7f, 0xfc, 0x7d, 0x15, 0x3f, 0xf2, 0x15, 0x80, 0x8f, 0xda, 0x00, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, expect: sam.GroupQuery, }, { input: []byte{ 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0xf1, 0x01, 0xad, 0x92, 0xcb, 0x8e, 0xda, 0x30, 0x14, 0x86, 0x33, 0x9d, 0x95, 0x79, 0x8a, 0x2c, 0x58, 0xb4, 0x0b, 0x1c, 0xe7, 0xe2, 0x40, 0x2c, 0x55, 0xe2, 0x26, 0x01, 0x52, 0x08, 0x29, 0x11, 0xad, 0x66, 0x95, 0x3a, 0x89, 0x13, 0xac, 0x31, 0x0e, 0xe0, 0x00, 0x6d, 0xdf, 0xa0, 0x4f, 0x3c, 0xbb, 0x51, 0x4d, 0x34, 0x9d, 0x8e, 0xda, 0x2e, 0x59, 0xf8, 0xc8, 0x3e, 0x97, 0xef, 0x3f, 0xb6, 0xcf, 0x78, 0xb4, 0xbc, 0xfb, 0x7a, 0x6f, 0x18, 0xc3, 0xf9, 0x14, 0x7c, 0x8e, 0x88, 0x0d, 0x11, 0x48, 0x56, 0x24, 0xaf, 0xeb, 0x63, 0xc1, 0x25, 0x6d, 0x18, 0x98, 0xad, 0xc8, 0x91, 0x95, 0xec, 0xc8, 0x64, 0xce, 0x3a, 0xc3, 0xe4, 0x13, 0x48, 0x22, 0xf2, 0x00, 0xc2, 0x88, 0xe0, 0xc0, 0xed, 0xbb, 0xd8, 0xf7, 0xc1, 0x12, 0x13, 0xbb, 0xa4, 0xae, 0xd7, 0xf7, 0xfa, 0x18, 0xd1, 0x12, 0x05, 0xde, 0x20, 0x2b, 0xca, 0xa0, 0x5f, 0x60, 0x8a, 0x18, 0xc3, 0x0e, 0xc3, 0x36, 0xd8, 0xac, 0x49, 0xd9, 0xec, 0x89, 0x65, 0x69, 0x0b, 0x6d, 0x84, 0x50, 0xc5, 0x64, 0xbd, 0x63, 0x0a, 0xb2, 0x8c, 0x43, 0x9a, 0xc3, 0xd3, 0xa3, 0x75, 0xae, 0x85, 0x7d, 0x0d, 0x5b, 0x0d, 0xcb, 0xb7, 0x92, 0xe7, 0x54, 0x58, 0xaf, 0xc2, 0xd6, 0x7e, 0x4b, 0x15, 0x73, 0xd2, 0x57, 0x47, 0x4a, 0x95, 0x62, 0xbb, 0x4c, 0x7c, 0x4f, 0x15, 0x3b, 0x9c, 0xda, 0x94, 0xad, 0x72, 0xb5, 0x24, 0x2c, 0x29, 0xac, 0x7e, 0x80, 0x51, 0x42, 0xa2, 0xc9, 0x78, 0xe1, 0xf6, 0x41, 0x12, 0x93, 0xf9, 0x69, 0x47, 0x65, 0x67, 0xb8, 0x9e, 0x81, 0xc5, 0x94, 0x24, 0xeb, 0x35, 0xf2, 0x1d, 0xdf, 0xf5, 0x40, 0x38, 0x26, 0xce, 0xc0, 0xc3, 0x03, 0xec, 0x0f, 0xb0, 0xbe, 0xf5, 0x92, 0xcc, 0x67, 0xba, 0xb1, 0xc0, 0x07, 0xf1, 0x82, 0x38, 0xc8, 0x07, 0x93, 0x88, 0x7c, 0xd9, 0xcc, 0x92, 0x09, 0x88, 0x43, 0xb2, 0x08, 0xc3, 0xcd, 0x72, 0x11, 0x8d, 0xc0, 0x34, 0xd1, 0x84, 0x18, 0x21, 0xdb, 0x09, 0xbc, 0xbf, 0x91, 0xf8, 0xe6, 0x48, 0xcf, 0xbe, 0x05, 0x32, 0x6e, 0x91, 0xd9, 0x85, 0xa6, 0x5c, 0x16, 0xec, 0x1b, 0x88, 0xa3, 0xeb, 0xe1, 0xfa, 0xdd, 0x08, 0x62, 0x18, 0xf4, 0x8e, 0xb6, 0xc6, 0x84, 0x57, 0x9f, 0xd9, 0x26, 0x98, 0x3d, 0x6a, 0x66, 0x97, 0x46, 0x5d, 0xcc, 0xee, 0x9f, 0x07, 0x2f, 0xa9, 0x6a, 0xe8, 0x5b, 0x16, 0x15, 0xb2, 0x75, 0x1e, 0x7e, 0xf3, 0xe2, 0xf8, 0x8d, 0xc6, 0xff, 0xe0, 0xba, 0xc2, 0xec, 0x1d, 0x4c, 0x1b, 0x9b, 0xbd, 0xd2, 0xec, 0x2a, 0xca, 0xd3, 0x92, 0x0b, 0xf6, 0x8f, 0x88, 0xd9, 0x6d, 0xb1, 0x6d, 0xb0, 0x33, 0x9c, 0xac, 0x40, 0xf7, 0x51, 0xd6, 0x17, 0xd9, 0x82, 0x85, 0x6a, 0xdd, 0xef, 0xd5, 0x07, 0xf3, 0xa3, 0x79, 0x8b, 0x89, 0xda, 0xd1, 0xfd, 0x9e, 0xcb, 0x4a, 0x4f, 0x96, 0xaa, 0x4f, 0xc7, 0x9c, 0x29, 0x6b, 0x14, 0x86, 0xf0, 0x52, 0x29, 0xf8, 0x22, 0xb7, 0xe3, 0x42, 0xdb, 0x82, 0x9d, 0xb9, 0x64, 0xe9, 0xb6, 0xb2, 0x83, 0x54, 0xb0, 0xb2, 0x19, 0x09, 0x5e, 0x49, 0x56, 0xa4, 0x79, 0x2d, 0x04, 0xdd, 0x2b, 0xbd, 0x2b, 0xea, 0x53, 0x26, 0x74, 0x06, 0x6f, 0x5e, 0x2a, 0xa1, 0xe2, 0x8d, 0x6e, 0xe7, 0x9c, 0x97, 0x7a, 0x20, 0x3b, 0x77, 0x86, 0x61, 0xbc, 0xd3, 0xeb, 0xc1, 0x78, 0x7e, 0xfa, 0x79, 0xff, 0x0b, 0xf6, 0x33, 0x1f, 0x79, 0x76, 0x03, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0xcf, 0x00, 0x4d, 0xce, 0x31, 0x6a, 0xc3, 0x30, 0x18, 0x05, 0x60, 0x41, 0x0f, 0x50, 0xd2, 0x66, 0x30, 0x74, 0x88, 0xab, 0x18, 0xeb, 0x59, 0xb2, 0xa5, 0xff, 0xb7, 0xa9, 0x93, 0x8c, 0x32, 0x82, 0x6a, 0x76, 0xb6, 0xce, 0x3d, 0x40, 0x2e, 0x90, 0x41, 0xc1, 0x83, 0x73, 0xc1, 0xdc, 0xa4, 0x74, 0xad, 0x4b, 0xa0, 0xf4, 0x5b, 0xde, 0xe3, 0x4d, 0xef, 0x26, 0xee, 0xbe, 0xbe, 0xaf, 0x0f, 0xcf, 0xe2, 0x94, 0x0b, 0x71, 0x16, 0x9f, 0xff, 0xb6, 0xdf, 0x3c, 0x8e, 0x23, 0xf5, 0x6d, 0xdf, 0xbd, 0x59, 0x3e, 0xf4, 0xdd, 0x6e, 0xdf, 0xb6, 0x62, 0xb8, 0xc8, 0xe8, 0x63, 0x98, 0x57, 0x29, 0x44, 0x9f, 0xbc, 0x9c, 0xa6, 0x4c, 0x66, 0xc5, 0x94, 0x45, 0xa4, 0x39, 0xad, 0x83, 0x7f, 0x8a, 0x31, 0x0c, 0x4b, 0x0d, 0x98, 0xb3, 0x20, 0xe1, 0xd7, 0xe9, 0x55, 0xe6, 0x79, 0xfe, 0x52, 0xa0, 0xd2, 0xa5, 0xde, 0x42, 0xab, 0x2d, 0x60, 0xea, 0x1a, 0xc6, 0x28, 0x65, 0xa1, 0x01, 0xab, 0x6c, 0xa9, 0x50, 0x35, 0x0a, 0x1b, 0xc7, 0xda, 0xb0, 0x61, 0xaa, 0x1d, 0xa1, 0xd4, 0xa6, 0x65, 0x36, 0x64, 0xa0, 0x1c, 0x3b, 0x66, 0x22, 0x76, 0x8e, 0xc8, 0x71, 0x45, 0x0b, 0x0b, 0xba, 0xb3, 0x4d, 0xa3, 0xf1, 0x38, 0xbe, 0x7f, 0xfc, 0x7d, 0x15, 0x3f, 0xf2, 0x15, 0x80, 0x8f, 0xda, 0x00, 0x00, 0x00, 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, expect: sam.GroupReference, }, } func (s *S) TestIssue13(c *check.C) { br, err := NewReader(bytes.NewReader(issue13), *conc) c.Assert(err, check.Equals, nil, check.Commentf("Failed to open BAM")) r, err := br.Read() c.Assert(err, check.Equals, nil, check.Commentf("Failed to read BAM record")) end := r.End() c.Check(end, check.Equals, 4391) } // This is BAM data provided in issue 12 [sic] from SAM file in comment 4. // Issue 12 as described is working as intended. // // @HD VN:1.0 SO:coordinate // @SQ SN:Zv9_NA129 LN:9079 // 10 0 Zv9_NA129 4272 50 40M75N5M * 0 0 TGACGCAGAGGTGCGCAAGACCTCCAAGAAGCAGCTGAAGGACAC DDDDHGHHHJI r.rec.Start() { c.Check(got, check.Equals, r.chunk.Begin, check.Commentf("Unexpected tile offset for [%d,%d) got:%+v expect:%+v", tbeg, tend, got, r.chunk.Begin), ) hasOverlap = true break } } if !hasOverlap { c.Check(got, check.Equals, bgzf.Offset{}, check.Commentf("Unexpected non-zero offset for [%d,%d) got:%+v", tbeg, tend, got), ) } } } var chunkMergeTests = []struct { index func() *Index expectAdjacent *Index expectSquash *Index compStrat index.MergeStrategy expectCompress *Index }{ { index: func() *Index { return &Index{idx: internal.Index{ Refs: []internal.RefIndex{ { Bins: []internal.Bin{ { Bin: 0, Chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 1, Block: 0}, End: bgzf.Offset{File: 2, Block: 0}, }, { Begin: bgzf.Offset{File: 2, Block: 0}, End: bgzf.Offset{File: 3, Block: 0}, }, }, }, { Bin: 1, Chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 1, Block: 0}, End: bgzf.Offset{File: 2, Block: 0}, }, { Begin: bgzf.Offset{File: 2, Block: 0}, End: bgzf.Offset{File: 3, Block: 0}, }, }, }, }, }, }, }} }, expectAdjacent: &Index{idx: internal.Index{ Refs: []internal.RefIndex{ { Bins: []internal.Bin{ { Bin: 0, Chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 1, Block: 0}, End: bgzf.Offset{File: 3, Block: 0}, }, }, }, { Bin: 1, Chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 1, Block: 0}, End: bgzf.Offset{File: 3, Block: 0}, }, }, }, }, }, }, }}, expectSquash: &Index{idx: internal.Index{ Refs: []internal.RefIndex{ { Bins: []internal.Bin{ { Bin: 0, Chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 1, Block: 0}, End: bgzf.Offset{File: 3, Block: 0}, }, }, }, { Bin: 1, Chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 1, Block: 0}, End: bgzf.Offset{File: 3, Block: 0}, }, }, }, }, }, }, }}, }, { index: func() *Index { return &Index{idx: internal.Index{ Refs: []internal.RefIndex{ { Bins: []internal.Bin{ { Bin: 0, Chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 1, Block: 0}, End: bgzf.Offset{File: 2, Block: 0}, }, { Begin: bgzf.Offset{File: 3, Block: 0}, End: bgzf.Offset{File: 4, Block: 0}, }, }, }, { Bin: 1, Chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 1, Block: 0}, End: bgzf.Offset{File: 2, Block: 0}, }, { Begin: bgzf.Offset{File: 3, Block: 0}, End: bgzf.Offset{File: 4, Block: 0}, }, }, }, }, }, }, }} }, expectAdjacent: &Index{idx: internal.Index{ Refs: []internal.RefIndex{ { Bins: []internal.Bin{ { Bin: 0, Chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 1, Block: 0}, End: bgzf.Offset{File: 2, Block: 0}, }, { Begin: bgzf.Offset{File: 3, Block: 0}, End: bgzf.Offset{File: 4, Block: 0}, }, }, }, { Bin: 1, Chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 1, Block: 0}, End: bgzf.Offset{File: 2, Block: 0}, }, { Begin: bgzf.Offset{File: 3, Block: 0}, End: bgzf.Offset{File: 4, Block: 0}, }, }, }, }, }, }, }}, expectSquash: &Index{idx: internal.Index{ Refs: []internal.RefIndex{ { Bins: []internal.Bin{ { Bin: 0, Chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 1, Block: 0}, End: bgzf.Offset{File: 4, Block: 0}, }, }, }, { Bin: 1, Chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 1, Block: 0}, End: bgzf.Offset{File: 4, Block: 0}, }, }, }, }, }, }, }}, }, { index: func() *Index { return &Index{idx: internal.Index{ Refs: []internal.RefIndex{ { Bins: []internal.Bin{ { Bin: 0, Chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 1, Block: 0}, End: bgzf.Offset{File: 2, Block: 0}, }, { Begin: bgzf.Offset{File: 0xffff, Block: 0}, End: bgzf.Offset{File: 0x10000, Block: 0}, }, }, }, { Bin: 1, Chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 1, Block: 0}, End: bgzf.Offset{File: 2, Block: 0}, }, { Begin: bgzf.Offset{File: 0x4ffff, Block: 0}, End: bgzf.Offset{File: 0x50000, Block: 0}, }, }, }, }, }, }, }} }, compStrat: index.CompressorStrategy(0x20000), expectCompress: &Index{idx: internal.Index{ Refs: []internal.RefIndex{ { Bins: []internal.Bin{ { Bin: 0, Chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 1, Block: 0}, End: bgzf.Offset{File: 0x10000, Block: 0}, }, }, }, { Bin: 1, Chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 1, Block: 0}, End: bgzf.Offset{File: 2, Block: 0}, }, { Begin: bgzf.Offset{File: 0x4ffff, Block: 0}, End: bgzf.Offset{File: 0x50000, Block: 0}, }, }, }, }, }, }, }}, }, } func (s *S) TestMergeChunks(c *check.C) { var bai *Index for _, test := range chunkMergeTests { if test.expectAdjacent != nil { bai = test.index() bai.MergeChunks(index.Adjacent) c.Check(bai, check.DeepEquals, test.expectAdjacent) } if test.expectSquash != nil { bai = test.index() bai.MergeChunks(index.Squash) c.Check(bai, check.DeepEquals, test.expectSquash) } if test.expectCompress != nil { bai = test.index() bai.MergeChunks(test.compStrat) c.Check(bai, check.DeepEquals, test.expectCompress) } } } func (s *S) TestIndexRoundtrip(c *check.C) { for i, test := range baiTestData { expect := test.expect var buf bytes.Buffer c.Assert(WriteIndex(&buf, expect), check.Equals, nil) got, err := ReadIndex(&buf) c.Assert(err, check.Equals, nil, check.Commentf("Test %d", i)) c.Check(got, check.DeepEquals, expect, check.Commentf("Test %d", i)) } } hts-1.0.1/bam/boom_benchmarks_test.go000066400000000000000000000042151304417722000175670ustar00rootroot00000000000000// Copyright ©2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // +build boom package bam import ( "os" "testing" "github.com/biogo/boom" ) func BenchmarkReadBoom(b *testing.B) { if *file == "" { b.Skip("no file specified") } b.StopTimer() br, err := boom.OpenBAM(*file) if err != nil { b.Fatalf("Open failed: %v", err) } b.StartTimer() for i := 0; i < b.N; i++ { for { _, _, err := br.Read() if err != nil { break } } } br.Close() } func BenchmarkWriteBoom(b *testing.B) { if *file == "" { b.Skip("no file specified") } b.StopTimer() br, err := boom.OpenBAM(*file) if err != nil { b.Fatalf("Open failed: %v", err) } f, err := os.OpenFile("/dev/null", os.O_APPEND|os.O_RDWR, 0666) if err != nil { b.Fatalf("Open failed: %v", err) } bw, err := boom.OpenBAMFile(f, "bw", br.Header()) if err != nil { b.Fatalf("NewWriter failed: %v", err) } r, _, err := br.Read() if err != nil { b.Fatalf("Read failed: %v", err) } b.StartTimer() for i := 0; i < b.N; i++ { _, err = bw.Write(r) if err != nil { b.Fatalf("Write failed: %v", err) } } br.Close() f.Close() } func BenchmarkReadFileBoom(b *testing.B) { if *file == "" { b.Skip("no file specified") } for i := 0; i < b.N; i++ { br, err := boom.OpenBAM(*file) if err != nil { b.Fatalf("Open failed: %v", err) } for { _, _, err := br.Read() if err != nil { break } } br.Close() } } func BenchmarkRoundtripFileBoom(b *testing.B) { if *file == "" { b.Skip("no file specified") } for i := 0; i < b.N; i++ { br, err := boom.OpenBAM(*file) if err != nil { b.Fatalf("Open failed: %v", err) } f, err := os.OpenFile("/dev/null", os.O_APPEND|os.O_RDWR, 0666) if err != nil { b.Fatalf("Open failed: %v", err) } bw, err := boom.OpenBAMFile(f, "bw", br.Header()) if err != nil { b.Fatalf("NewWriter failed: %v", err) } for { r, _, err := br.Read() if err != nil { break } _, err = bw.Write(r) if err != nil { b.Fatalf("Write failed: %v", err) } } br.Close() f.Close() } } hts-1.0.1/bam/index.go000066400000000000000000000053721304417722000145130ustar00rootroot00000000000000// Copyright ©2014 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package bam import ( "encoding/binary" "errors" "io" "github.com/biogo/hts/bgzf" "github.com/biogo/hts/bgzf/index" "github.com/biogo/hts/internal" "github.com/biogo/hts/sam" ) // Index is a BAI index. type Index struct { idx internal.Index } // NumRefs returns the number of references in the index. func (i *Index) NumRefs() int { return len(i.idx.Refs) } // ReferenceStats returns the index statistics for the given reference and true // if the statistics are valid. func (i *Index) ReferenceStats(id int) (stats index.ReferenceStats, ok bool) { s := i.idx.Refs[id].Stats if s == nil { return index.ReferenceStats{}, false } return index.ReferenceStats(*s), true } // Unmapped returns the number of unmapped reads and true if the count is valid. func (i *Index) Unmapped() (n uint64, ok bool) { if i.idx.Unmapped == nil { return 0, false } return *i.idx.Unmapped, true } // Add records the SAM record as having being located at the given chunk. func (i *Index) Add(r *sam.Record, c bgzf.Chunk) error { return i.idx.Add(r, uint32(r.Bin()), c, isPlaced(r), isMapped(r)) } func isPlaced(r *sam.Record) bool { return r.Ref != nil && r.Pos != -1 } func isMapped(r *sam.Record) bool { return r.Flags&sam.Unmapped == 0 } // Chunks returns a []bgzf.Chunk that corresponds to the given genomic interval. func (i *Index) Chunks(r *sam.Reference, beg, end int) ([]bgzf.Chunk, error) { chunks, err := i.idx.Chunks(r.ID(), beg, end) if err != nil { return nil, err } return index.Adjacent(chunks), nil } // MergeChunks applies the given MergeStrategy to all bins in the Index. func (i *Index) MergeChunks(s index.MergeStrategy) { i.idx.MergeChunks(s) } var baiMagic = [4]byte{'B', 'A', 'I', 0x1} // ReadIndex reads the BAI Index from the given io.Reader. func ReadIndex(r io.Reader) (*Index, error) { var ( idx Index magic [4]byte err error ) err = binary.Read(r, binary.LittleEndian, &magic) if err != nil { return nil, err } if magic != baiMagic { return nil, errors.New("bam: magic number mismatch") } var n int32 err = binary.Read(r, binary.LittleEndian, &n) if err != nil { return nil, err } if n == 0 { return nil, nil } idx.idx, err = internal.ReadIndex(r, n, "bam") if err != nil { return nil, err } return &idx, nil } // WriteIndex writes the Index to the given io.Writer. func WriteIndex(w io.Writer, idx *Index) error { err := binary.Write(w, binary.LittleEndian, baiMagic) if err != nil { return err } err = binary.Write(w, binary.LittleEndian, int32(len(idx.idx.Refs))) if err != nil { return err } return internal.WriteIndex(w, &idx.idx, "bam") } hts-1.0.1/bam/reader.go000066400000000000000000000241341304417722000146430ustar00rootroot00000000000000// Copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package bam import ( "bytes" "encoding/binary" "errors" "fmt" "io" "unsafe" "github.com/biogo/hts/bgzf" "github.com/biogo/hts/sam" ) // Reader implements BAM data reading. type Reader struct { r *bgzf.Reader h *sam.Header c *bgzf.Chunk // omit specifies how much of the // record should be omitted during // a read of the BAM input. omit int lastChunk bgzf.Chunk // buf is used to read the block size of each record. buf [4]byte } // NewReader returns a new Reader using the given io.Reader // and setting the read concurrency to rd. If rd is zero // concurrency is set to GOMAXPROCS. The returned Reader // should be closed after use to avoid leaking resources. func NewReader(r io.Reader, rd int) (*Reader, error) { bg, err := bgzf.NewReader(r, rd) if err != nil { return nil, err } h, _ := sam.NewHeader(nil, nil) br := &Reader{ r: bg, h: h, } err = br.h.DecodeBinary(br.r) if err != nil { return nil, err } br.lastChunk.End = br.r.LastChunk().End return br, nil } // Header returns the SAM Header held by the Reader. func (br *Reader) Header() *sam.Header { return br.h } // BAM record layout. type bamRecordFixed struct { blockSize int32 refID int32 pos int32 nLen uint8 mapQ uint8 bin uint16 nCigar uint16 flags sam.Flags lSeq int32 nextRefID int32 nextPos int32 tLen int32 } var ( lenFieldSize = binary.Size(bamRecordFixed{}.blockSize) bamFixedRemainder = binary.Size(bamRecordFixed{}) - lenFieldSize ) func vOffset(o bgzf.Offset) int64 { return o.File<<16 | int64(o.Block) } // Omit specifies what portions of the Record to omit reading. // When o is None, a full sam.Record is returned by Read, when o // is AuxTags the auxiliary tag data is omitted and when o is // AllVariableLengthData, sequence, quality and auxiliary data // is omitted. func (br *Reader) Omit(o int) { br.omit = o } // None, AuxTags and AllVariableLengthData are values taken // by the Reader Omit method. const ( None = iota // Omit no field data from the record. AuxTags // Omit auxiliary tag data. AllVariableLengthData // Omit sequence, quality and auxiliary data. ) // Read returns the next sam.Record in the BAM stream. // // The sam.Record returned will not contain the sequence, quality or // auxiliary tag data if Omit(AllVariableLengthData) has been called // prior to the Read call and will not contain the auxiliary tag data // is Omit(AuxTags) has been called. func (br *Reader) Read() (*sam.Record, error) { if br.c != nil && vOffset(br.r.LastChunk().End) >= vOffset(br.c.End) { return nil, io.EOF } b, err := newBuffer(br) if err != nil { return nil, err } var rec sam.Record refID := b.readInt32() rec.Pos = int(b.readUint32()) nLen := b.readUint8() rec.MapQ = b.readUint8() b.discard(2) nCigar := b.readUint16() rec.Flags = sam.Flags(b.readUint16()) lSeq := int32(b.readUint32()) nextRefID := int32(b.readUint32()) rec.MatePos = int(b.readInt32()) rec.TempLen = int(b.readInt32()) // Read variable length data. rec.Name = string(b.bytes(int(nLen) - 1)) b.discard(1) rec.Cigar = readCigarOps(b.bytes(int(nCigar) * 4)) var seq doublets var auxTags []byte if br.omit >= AllVariableLengthData { goto done } seq = make(doublets, (lSeq+1)>>1) *(*[]byte)(unsafe.Pointer(&seq)) = b.bytes(int(lSeq+1) >> 1) rec.Seq = sam.Seq{Length: int(lSeq), Seq: seq} rec.Qual = b.bytes(int(lSeq)) if br.omit >= AuxTags { goto done } auxTags = b.bytes(b.len()) rec.AuxFields = parseAux(auxTags) done: refs := int32(len(br.h.Refs())) if refID != -1 { if refID < -1 || refID >= refs { return nil, errors.New("bam: reference id out of range") } rec.Ref = br.h.Refs()[refID] } if nextRefID != -1 { if refID == nextRefID { rec.MateRef = rec.Ref return &rec, nil } if nextRefID < -1 || nextRefID >= refs { return nil, errors.New("bam: mate reference id out of range") } rec.MateRef = br.h.Refs()[nextRefID] } return &rec, nil } // SetCache sets the cache to be used by the Reader. func (bg *Reader) SetCache(c bgzf.Cache) { bg.r.SetCache(c) } // Seek performs a seek to the specified bgzf.Offset. func (br *Reader) Seek(off bgzf.Offset) error { return br.r.Seek(off) } // SetChunk sets a limited range of the underlying BGZF file to read, after // seeking to the start of the given chunk. It may be used to iterate over // a defined genomic interval. func (br *Reader) SetChunk(c *bgzf.Chunk) error { if c != nil { err := br.r.Seek(c.Begin) if err != nil { return err } } br.c = c return nil } // LastChunk returns the bgzf.Chunk corresponding to the last Read operation. // The bgzf.Chunk returned is only valid if the last Read operation returned a // nil error. func (br *Reader) LastChunk() bgzf.Chunk { return br.lastChunk } // Close closes the Reader. func (br *Reader) Close() error { return br.r.Close() } // Iterator wraps a Reader to provide a convenient loop interface for reading BAM data. // Successive calls to the Next method will step through the features of the provided // Reader. Iteration stops unrecoverably at EOF or the first error. type Iterator struct { r *Reader chunks []bgzf.Chunk rec *sam.Record err error } // NewIterator returns a Iterator to read from r, limiting the reads to the provided // chunks. // // chunks, err := idx.Chunks(ref, beg, end) // if err != nil { // return err // } // i, err := NewIterator(r, chunks) // if err != nil { // return err // } // for i.Next() { // fn(i.Record()) // } // return i.Close() // func NewIterator(r *Reader, chunks []bgzf.Chunk) (*Iterator, error) { if len(chunks) == 0 { return &Iterator{r: r, err: io.EOF}, nil } err := r.SetChunk(&chunks[0]) if err != nil { return nil, err } chunks = chunks[1:] return &Iterator{r: r, chunks: chunks}, nil } // Next advances the Iterator past the next record, which will then be available through // the Record method. It returns false when the iteration stops, either by reaching the end of the // input or an error. After Next returns false, the Error method will return any error that // occurred during iteration, except that if it was io.EOF, Error will return nil. func (i *Iterator) Next() bool { if i.err != nil { return false } i.rec, i.err = i.r.Read() if len(i.chunks) != 0 && i.err == io.EOF { i.err = i.r.SetChunk(&i.chunks[0]) i.chunks = i.chunks[1:] return i.Next() } return i.err == nil } // Error returns the first non-EOF error that was encountered by the Iterator. func (i *Iterator) Error() error { if i.err == io.EOF { return nil } return i.err } // Record returns the most recent record read by a call to Next. func (i *Iterator) Record() *sam.Record { return i.rec } // Close releases the underlying Reader. func (i *Iterator) Close() error { i.r.SetChunk(nil) return i.Error() } // len(cb) must be a multiple of 4. func readCigarOps(cb []byte) []sam.CigarOp { co := make([]sam.CigarOp, len(cb)/4) for i := range co { co[i] = sam.CigarOp(binary.LittleEndian.Uint32(cb[i*4 : (i+1)*4])) } return co } var jumps = [256]int{ 'A': 1, 'c': 1, 'C': 1, 's': 2, 'S': 2, 'i': 4, 'I': 4, 'f': 4, 'Z': -1, 'H': -1, 'B': -1, } // parseAux examines the data of a SAM record's OPT fields, // returning a slice of sam.Aux that are backed by the original data. func parseAux(aux []byte) []sam.Aux { if len(aux) == 0 { return nil } aa := make([]sam.Aux, 0, 4) for i := 0; i+2 < len(aux); { t := aux[i+2] switch j := jumps[t]; { case j > 0: j += 3 aa = append(aa, sam.Aux(aux[i:i+j:i+j])) i += j case j < 0: switch t { case 'Z', 'H': var ( j int v byte ) for j, v = range aux[i:] { if v == 0 { // C string termination break // Truncate terminal zero. } } aa = append(aa, sam.Aux(aux[i:i+j:i+j])) i += j + 1 case 'B': var length int32 err := binary.Read(bytes.NewBuffer([]byte(aux[i+4:i+8])), binary.LittleEndian, &length) if err != nil { panic(fmt.Sprintf("bam: binary.Read failed: %v", err)) } j = int(length)*jumps[aux[i+3]] + int(unsafe.Sizeof(length)) + 4 aa = append(aa, sam.Aux(aux[i:i+j:i+j])) i += j } default: panic(fmt.Sprintf("bam: unrecognised optional field type: %q", t)) } } return aa } // buffer is light-weight read buffer. type buffer struct { off int data []byte } func (b *buffer) bytes(n int) []byte { s := b.off b.off += n return b.data[s:b.off] } func (b *buffer) len() int { return len(b.data) - b.off } func (b *buffer) discard(n int) { b.off += n } func (b *buffer) readUint8() uint8 { b.off++ return b.data[b.off-1] } func (b *buffer) readUint16() uint16 { return binary.LittleEndian.Uint16(b.bytes(2)) } func (b *buffer) readInt32() int32 { return int32(binary.LittleEndian.Uint32(b.bytes(4))) } func (b *buffer) readUint32() uint32 { return binary.LittleEndian.Uint32(b.bytes(4)) } // newBuffer returns a new buffer reading from the Reader's underlying bgzf.Reader and // updates the Reader's lastChunk field. func newBuffer(br *Reader) (*buffer, error) { n, err := io.ReadFull(br.r, br.buf[:4]) // br.r.Chunk() is only valid after the call the Read(), so this // must come after the first read in the record. tx := br.r.Begin() defer func() { br.lastChunk = tx.End() }() if err != nil { return nil, err } if n != 4 { return nil, errors.New("bam: invalid record: short block size") } b := &buffer{data: br.buf[:4]} size := int(b.readInt32()) b.off, b.data = 0, make([]byte, size) n, err = io.ReadFull(br.r, b.data) if err != nil { return nil, err } if n != size { return nil, errors.New("bam: truncated record") } return b, nil } // buildAux constructs a single byte slice that represents a slice of sam.Aux. func buildAux(aa []sam.Aux) (aux []byte) { for _, a := range aa { // TODO: validate each 'a' aux = append(aux, []byte(a)...) switch a.Type() { case 'Z', 'H': aux = append(aux, 0) } } return } type doublets []sam.Doublet func (np doublets) Bytes() []byte { return *(*[]byte)(unsafe.Pointer(&np)) } hts-1.0.1/bam/writer.go000066400000000000000000000077061304417722000147230ustar00rootroot00000000000000// Copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package bam import ( "bytes" "compress/gzip" "encoding/binary" "errors" "io" "github.com/biogo/hts/bgzf" "github.com/biogo/hts/sam" ) // Writer implements BAM data writing. type Writer struct { h *sam.Header bg *bgzf.Writer buf bytes.Buffer } // NewWriter returns a new Writer using the given SAM header. Write // concurrency is set to wc. func NewWriter(w io.Writer, h *sam.Header, wc int) (*Writer, error) { return NewWriterLevel(w, h, gzip.DefaultCompression, wc) } func makeWriter(w io.Writer, level, wc int) (*bgzf.Writer, error) { if bw, ok := w.(*bgzf.Writer); ok { return bw, nil } return bgzf.NewWriterLevel(w, level, wc) } // NewWriterLevel returns a new Writer using the given SAM header. Write // concurrency is set to wc and compression level is set to level. Valid // values for level are described in the compress/gzip documentation. func NewWriterLevel(w io.Writer, h *sam.Header, level, wc int) (*Writer, error) { bg, err := makeWriter(w, level, wc) if err != nil { return nil, err } bw := &Writer{ bg: bg, h: h, } err = bw.writeHeader(h) if err != nil { return nil, err } bw.bg.Flush() err = bw.bg.Wait() if err != nil { return nil, err } return bw, nil } func (bw *Writer) writeHeader(h *sam.Header) error { bw.buf.Reset() err := h.EncodeBinary(&bw.buf) if err != nil { return err } _, err = bw.bg.Write(bw.buf.Bytes()) return err } // Write writes r to the BAM stream. func (bw *Writer) Write(r *sam.Record) error { if len(r.Name) == 0 || len(r.Name) > 254 { return errors.New("bam: name absent or too long") } if r.Qual != nil && len(r.Qual) != r.Seq.Length { return errors.New("bam: sequence/quality length mismatch") } tags := buildAux(r.AuxFields) recLen := bamFixedRemainder + len(r.Name) + 1 + // Null terminated. len(r.Cigar)<<2 + // CigarOps are 4 bytes. len(r.Seq.Seq) + len(r.Qual) + len(tags) bw.buf.Reset() wb := errWriter{w: &bw.buf} bin := binaryWriter{w: &wb} // Write record header data. bin.writeInt32(int32(recLen)) bin.writeInt32(int32(r.Ref.ID())) bin.writeInt32(int32(r.Pos)) bin.writeUint8(byte(len(r.Name) + 1)) bin.writeUint8(r.MapQ) bin.writeUint16(uint16(r.Bin())) //r.bin bin.writeUint16(uint16(len(r.Cigar))) bin.writeUint16(uint16(r.Flags)) bin.writeInt32(int32(r.Seq.Length)) bin.writeInt32(int32(r.MateRef.ID())) bin.writeInt32(int32(r.MatePos)) bin.writeInt32(int32(r.TempLen)) // Write variable length data. wb.Write(append([]byte(r.Name), 0)) writeCigarOps(&bin, r.Cigar) wb.Write(doublets(r.Seq.Seq).Bytes()) if r.Qual != nil { wb.Write(r.Qual) } else { for i := 0; i < r.Seq.Length; i++ { wb.WriteByte(0xff) } } wb.Write(tags) if wb.err != nil { return wb.err } _, err := bw.bg.Write(bw.buf.Bytes()) return err } func writeCigarOps(bin *binaryWriter, co []sam.CigarOp) { for _, o := range co { bin.writeUint32(uint32(o)) if bin.w.err != nil { return } } return } // Close closes the writer. func (bw *Writer) Close() error { return bw.bg.Close() } type errWriter struct { w *bytes.Buffer err error } func (w *errWriter) Write(p []byte) (int, error) { if w.err != nil { return 0, w.err } var n int n, w.err = w.w.Write(p) return n, w.err } func (w *errWriter) WriteByte(b byte) error { if w.err != nil { return w.err } w.err = w.w.WriteByte(b) return w.err } type binaryWriter struct { w *errWriter buf [4]byte } func (w *binaryWriter) writeUint8(v uint8) { w.buf[0] = v w.w.Write(w.buf[:1]) } func (w *binaryWriter) writeUint16(v uint16) { binary.LittleEndian.PutUint16(w.buf[:2], v) w.w.Write(w.buf[:2]) } func (w *binaryWriter) writeInt32(v int32) { binary.LittleEndian.PutUint32(w.buf[:4], uint32(v)) w.w.Write(w.buf[:4]) } func (w *binaryWriter) writeUint32(v uint32) { binary.LittleEndian.PutUint32(w.buf[:4], v) w.w.Write(w.buf[:4]) } hts-1.0.1/bgzf/000077500000000000000000000000001304417722000132375ustar00rootroot00000000000000hts-1.0.1/bgzf/bgzf.go000066400000000000000000000051671304417722000145270ustar00rootroot00000000000000// Copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package bgzf implements BGZF format reading and writing according to the // SAM specification. // // The specification is available at https://github.com/samtools/hts-specs. package bgzf import ( "errors" "io" "os" "time" ) const ( BlockSize = 0x0ff00 // The maximum size of an uncompressed input data block. MaxBlockSize = 0x10000 // The maximum size of a compressed output block. ) const ( bgzfExtra = "BC\x02\x00\x00\x00" minFrame = 20 + len(bgzfExtra) // Minimum bgzf header+footer length. // Magic EOF block. magicBlock = "\x1f\x8b\x08\x04\x00\x00\x00\x00\x00\xff\x06\x00\x42\x43\x02\x00\x1b\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00" ) var ( bgzfExtraPrefix = []byte(bgzfExtra[:4]) unixEpoch = time.Unix(0, 0) ) func compressBound(srcLen int) int { return srcLen + srcLen>>12 + srcLen>>14 + srcLen>>25 + 13 + minFrame } func init() { if compressBound(BlockSize) > MaxBlockSize { panic("bam: BlockSize too large") } } var ( ErrClosed = errors.New("bgzf: use of closed writer") ErrBlockOverflow = errors.New("bgzf: block overflow") ErrWrongFileType = errors.New("bgzf: file is a directory") ErrNoEnd = errors.New("bgzf: cannot determine offset from end") ErrNotASeeker = errors.New("bgzf: not a seeker") ErrContaminatedCache = errors.New("bgzf: cache owner mismatch") ErrNoBlockSize = errors.New("bgzf: could not determine block size") ErrBlockSizeMismatch = errors.New("bgzf: unexpected block size") ) // HasEOF checks for the presence of a BGZF magic EOF block. // The magic block is defined in the SAM specification. A magic block // is written by a Writer on calling Close. The ReaderAt must provide // some method for determining valid ReadAt offsets. func HasEOF(r io.ReaderAt) (bool, error) { type sizer interface { Size() int64 } type stater interface { Stat() (os.FileInfo, error) } type lenSeeker interface { io.Seeker Len() int } var size int64 switch r := r.(type) { case sizer: size = r.Size() case stater: fi, err := r.Stat() if err != nil { return false, err } size = fi.Size() case lenSeeker: var err error size, err = r.Seek(0, 1) if err != nil { return false, err } size += int64(r.Len()) default: return false, ErrNoEnd } b := make([]byte, len(magicBlock)) _, err := r.ReadAt(b, size-int64(len(magicBlock))) if err != nil { return false, err } for i, c := range b { if c != magicBlock[i] { return false, nil } } return true, nil } hts-1.0.1/bgzf/bgzf_test.go000066400000000000000000000715331304417722000155660ustar00rootroot00000000000000// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the Go LICENSE file. // Changes copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package bgzf_test import ( "bytes" "compress/gzip" "errors" "flag" "fmt" "io" "io/ioutil" "os" "runtime" "strings" "sync" "testing" "time" . "github.com/biogo/hts/bgzf" "github.com/biogo/hts/bgzf/cache" ) var ( go1_8 bool conc = flag.Int("conc", 1, "sets the level of concurrency for compression") file = flag.String("bench.file", "", "bgzf file to read for benchmarking decompression") ) type countWriter struct { bytes int64 w io.Writer } func (cw *countWriter) Write(p []byte) (n int, err error) { n, err = cw.w.Write(p) cw.bytes += int64(n) return } // TestEmpty tests that an empty payload still forms a valid GZIP stream. func TestEmpty(t *testing.T) { buf := new(bytes.Buffer) if err := NewWriter(buf, *conc).Close(); err != nil { t.Fatalf("Writer.Close: %v", err) } r, err := NewReader(buf, *conc) if err != nil { t.Fatalf("NewReader: %v", err) } b, err := ioutil.ReadAll(r) if err != nil { t.Fatalf("ReadAll: %v", err) } if len(b) != 0 { t.Fatalf("got %d bytes, want 0", len(b)) } if err := r.Close(); err != nil { t.Fatalf("Reader.Close: %v", err) } } type crippledReaderAt struct { r *bytes.Reader } func (r crippledReaderAt) ReadAt(b []byte, off int64) (int, error) { return r.r.ReadAt(b, off) } // TestEOF tests HasEOF can find the EOF magic block. func TestEOF(t *testing.T) { // os.File cases f, err := ioutil.TempFile(os.TempDir(), "bgzf_EOF_test_") if err != nil { t.Fatalf("Create temp file: %v", err) } fname := f.Name() if err := NewWriter(f, *conc).Close(); err != nil { t.Fatalf("Writer.Close: %v", err) } f, err = os.Open(fname) if err != nil { t.Fatalf("Open temp file: %v", err) } ok, err := HasEOF(f) if err != nil { t.Errorf("HasEOF: %v", err) } if !ok { t.Error("Expected EOF in os.File: not found.") } os.Remove(fname) f, err = os.Open(os.TempDir()) if err != nil { t.Fatalf("Open temp dir: %v", err) } ok, err = HasEOF(f) if want := "read " + os.TempDir() + ": is a directory"; err.Error() != want { t.Errorf("Expected error:%s got:%v", want, err) } if ok { t.Error("Unexpected EOF in os.File IsDir: found.") } // {bytes,strings}.Reader cases var buf bytes.Buffer if err := NewWriter(&buf, *conc).Close(); err != nil { t.Fatalf("Writer.Close: %v", err) } ok, err = HasEOF(bytes.NewReader(buf.Bytes())) if err != nil { t.Errorf("HasEOF: %v", err) } if !ok { t.Error("Expected EOF in []byte: not found.") } ok, err = HasEOF(strings.NewReader(buf.String())) if err != nil { t.Errorf("HasEOF: %v", err) } if !ok { t.Error("Expected EOF in string: not found.") } ok, err = HasEOF(crippledReaderAt{bytes.NewReader(buf.Bytes())}) if err != ErrNoEnd { t.Errorf("Expected error:%s got:%v", ErrNoEnd, err) } if ok { t.Error("Unexpected EOF in crippled ReaderAt: found.") } } // TestRoundTrip tests that bgzipping and then bgunzipping is the identity // function. func TestRoundTrip(t *testing.T) { buf := new(bytes.Buffer) w := NewWriter(buf, *conc) w.Comment = "comment" w.Extra = []byte("extra") w.ModTime = time.Unix(1e8, 0) w.Name = "name" if _, err := w.Write([]byte("payload")); err != nil { t.Fatalf("Write: %v", err) } if err := w.Close(); err != nil { t.Fatalf("Writer.Close: %v", err) } // FIXME(kortschak) The magic block is written on close, // so we need to discount that until we have the capacity // to see every header again. wbl := buf.Len() - len(MagicBlock) r, err := NewReader(buf, *conc) if err != nil { t.Fatalf("NewReader: %v", err) } if bl := ExpectedMemberSize(r.Header); bl != wbl { t.Errorf("expectedMemberSize is %d, want %d", bl, wbl) } blEnc := string([]byte{byte(wbl - 1), byte((wbl - 1) >> 8)}) if string(r.Extra) != "BC\x02\x00"+blEnc+"extra" { t.Errorf("extra is %q, want %q", r.Extra, "BC\x02\x00"+blEnc+"extra") } b, err := ioutil.ReadAll(r) if err != nil { t.Fatalf("ReadAll: %v", err) } if string(b) != "payload" { t.Fatalf("payload is %q, want %q", string(b), "payload") } if r.Comment != "comment" { t.Errorf("comment is %q, want %q", r.Comment, "comment") } if bl := ExpectedMemberSize(r.Header); bl != len(MagicBlock) { t.Errorf("expectedMemberSize is %d, want %d", bl, len(MagicBlock)) } if string(r.Extra) != "BC\x02\x00\x1b\x00" { t.Errorf("extra is %q, want %q", r.Extra, "BC\x02\x00\x1b\x00") } if r.ModTime.Unix() != 1e8 { t.Errorf("mtime is %d, want %d", r.ModTime.Unix(), uint32(1e8)) } if r.Name != "name" { t.Errorf("name is %q, want %q", r.Name, "name") } if err := r.Close(); err != nil { t.Errorf("Reader.Close: %v", err) } } // TestRoundTripMulti tests that bgzipping and then bgunzipping is the identity // function for a multiple member bgzf. func TestRoundTripMulti(t *testing.T) { var wbl [2]int buf := new(bytes.Buffer) w := NewWriter(buf, *conc) w.Comment = "comment" w.Extra = []byte("extra") w.ModTime = time.Unix(1e8, 0) w.Name = "name" if _, err := w.Write([]byte("payload1")); err != nil { t.Fatalf("Write: %v", err) } if err := w.Flush(); err != nil { t.Fatalf("Flush: %v", err) } if err := w.Wait(); err != nil { t.Fatalf("Wait: %v", err) } wbl[0] = buf.Len() if _, err := w.Write([]byte("payloadTwo")); err != nil { t.Fatalf("Write: %v", err) } if err := w.Close(); err != nil { t.Fatalf("Writer.Close: %v", err) } wbl[1] = buf.Len() - wbl[0] - len(MagicBlock) var ( b []byte bl, n int err error ) r, err := NewReader(buf, *conc) if err != nil { t.Fatalf("NewReader: %v", err) } if r.Comment != "comment" { t.Errorf("comment is %q, want %q", r.Comment, "comment") } blEnc := string([]byte{byte(wbl[0] - 1), byte((wbl[0] - 1) >> 8)}) if string(r.Extra) != "BC\x02\x00"+blEnc+"extra" { t.Errorf("extra is %q, want %q", r.Extra, "BC\x02\x00"+blEnc+"extra") } if r.ModTime.Unix() != 1e8 { t.Errorf("mtime is %d, want %d", r.ModTime.Unix(), uint32(1e8)) } if r.Name != "name" { t.Errorf("name is %q, want %q", r.Name, "name") } bl = ExpectedMemberSize(r.Header) if bl != wbl[0] { t.Errorf("expectedMemberSize is %d, want %d", bl, wbl[0]) } b = make([]byte, len("payload1payloadTwo")) n, err = r.Read(b) if string(b[:n]) != "payload1payloadTwo" { t.Errorf("payload is %q, want %q", string(b[:n]), "payload1payloadTwo") } if err != nil { t.Errorf("Read: %v", err) } bl = ExpectedMemberSize(r.Header) if bl != wbl[1] { t.Errorf("expectedMemberSize is %d, want %d", bl, wbl[1]) } b = make([]byte, 1) n, err = r.Read(b) if string(b[:n]) != "" { t.Errorf("payload is %q, want %q", string(b[:n]), "") } if err != io.EOF { t.Errorf("Read: %v", err) } r.Close() } // See https://github.com/biogo/hts/issues/57 func TestHeaderIssue57(t *testing.T) { var stamp time.Time if !go1_8 { unixEpoch := time.Unix(0, 0) stamp = unixEpoch } var buf bytes.Buffer bg := NewWriter(&buf, *conc) bg.ModTime = stamp bg.OS = 0xff err := bg.Close() if err != nil { t.Fatal("error closing Writer") } got := buf.Bytes()[:16] want := []byte(MagicBlock[:16]) if !bytes.Equal(got, want) { t.Fatalf("unexpected header:\ngot: %0#2v\nwant:%0#2v", got, want) } } // TestRoundTripMultiSeek tests that bgzipping and then bgunzipping is the identity // function for a multiple member bgzf with an underlying Seeker. func TestRoundTripMultiSeek(t *testing.T) { f, err := ioutil.TempFile(os.TempDir(), "bgzf_test_") if err != nil { t.Fatalf("Create temp file: %v", err) } fname := f.Name() var wbl [2]int cw := &countWriter{w: f} w := NewWriter(cw, *conc) w.Comment = "comment" w.Extra = []byte("extra") w.ModTime = time.Unix(1e8, 0) w.Name = "name" if _, err := w.Write([]byte("payload1")); err != nil { t.Fatalf("Write: %v", err) } if err := w.Flush(); err != nil { t.Fatalf("Flush: %v", err) } if err := w.Wait(); err != nil { t.Fatalf("Wait: %v", err) } offset := cw.bytes wbl[0] = int(offset) if _, err := w.Write([]byte("payloadTwo")); err != nil { t.Fatalf("Write: %v", err) } if err := w.Close(); err != nil { t.Fatalf("Writer.Close: %v", err) } if err := f.Close(); err != nil { t.Fatalf("os.File.Close: %v", err) } wbl[1] = int(cw.bytes-offset) - len(MagicBlock) var ( b []byte bl, n int ) f, err = os.Open(fname) if err != nil { t.Fatalf("Reopen temp file: %v", err) } r, err := NewReader(f, *conc) if err != nil { t.Fatalf("NewReader: %v", err) } // Insert a HasEOF to ensure it does not corrupt subsequent reads. HasEOF(f) if r.Comment != "comment" { t.Errorf("comment is %q, want %q", r.Comment, "comment") } blEnc := string([]byte{byte(wbl[0] - 1), byte((wbl[0] - 1) >> 8)}) if string(r.Extra) != "BC\x02\x00"+blEnc+"extra" { t.Errorf("extra is %q, want %q", r.Extra, "BC\x02\x00"+blEnc+"extra") } if r.ModTime.Unix() != 1e8 { t.Errorf("mtime is %d, want %d", r.ModTime.Unix(), uint32(1e8)) } if r.Name != "name" { t.Errorf("name is %q, want %q", r.Name, "name") } bl = ExpectedMemberSize(r.Header) if bl != wbl[0] { t.Errorf("expectedMemberSize is %d, want %d", bl, wbl[0]) } b = make([]byte, len("payload1payloadTwo")+1) n, err = r.Read(b) if err != io.EOF { t.Errorf("Read: %v", err) } if bl := ExpectedMemberSize(r.Header); bl != len(MagicBlock) { t.Errorf("expectedMemberSize is %d, want %d", bl, len(MagicBlock)) } if string(r.Extra) != "BC\x02\x00\x1b\x00" { t.Errorf("extra is %q, want %q", r.Extra, "BC\x02\x00\x1b\x00") } if string(b[:n]) != "payload1payloadTwo" { t.Errorf("payload is %q, want %q", string(b[:n]), "payload1payloadTwo") } if err := r.Seek(Offset{}); err != nil { t.Errorf("Seek: %v", err) } n, err = r.Read(b) if err != io.EOF { t.Errorf("Read: %v", err) } if string(b[:n]) != "payload1payloadTwo" { t.Errorf("payload is %q, want %q", string(b[:n]), "payload1payloadTwo") } if err := r.Seek(Offset{File: offset}); err != nil { t.Fatalf("Seek: %v", err) } bl = ExpectedMemberSize(r.Header) if bl != wbl[1] { t.Errorf("expectedMemberSize is %d, want %d", bl, wbl[1]) } b = make([]byte, bl+1) n, err = r.Read(b) if err != io.EOF { t.Errorf("Read: %v", err) } r.Close() if string(b[:n]) != "payloadTwo" { t.Errorf("payload is %q, want %q", string(b[:n]), "payloadTwo") } os.Remove(fname) } type errorReadSeeker struct { r io.ReadSeeker err error } func (r errorReadSeeker) Read(p []byte) (int, error) { n, err := r.r.Read(p) if err == nil && r.err != nil { err = r.err } return n, err } func (r errorReadSeeker) Seek(offset int64, whence int) (int64, error) { n, err := r.r.Seek(offset, whence) if r.err != nil { err = r.err } return n, err } func TestSeekErrorDeadlock(t *testing.T) { buf := new(bytes.Buffer) w := NewWriter(buf, *conc) w.Comment = "comment" w.Extra = []byte("extra") w.ModTime = time.Unix(1e8, 0) w.Name = "name" if _, err := w.Write([]byte("payload")); err != nil { t.Fatalf("Write: %v", err) } if err := w.Close(); err != nil { t.Fatalf("Writer.Close: %v", err) } e := &errorReadSeeker{r: bytes.NewReader(buf.Bytes())} r, err := NewReader(e, *conc) if err != nil { t.Fatalf("NewReader: %v", err) } r.Seek(Offset{File: 0}) e.err = errors.New("bad seek error") err = r.Seek(Offset{File: 1}) if err == nil { t.Error("Expected error.", err) } r.Close() } type countReadSeeker struct { mu sync.Mutex r io.ReadSeeker _didSeek bool n int64 } func (r *countReadSeeker) offset() int64 { r.mu.Lock() defer r.mu.Unlock() return r.n } func (r *countReadSeeker) didSeek() bool { r.mu.Lock() defer r.mu.Unlock() return r._didSeek } func (r *countReadSeeker) Read(p []byte) (int, error) { r.mu.Lock() defer r.mu.Unlock() r._didSeek = false n, err := r.r.Read(p) r.n += int64(n) return n, err } func (r *countReadSeeker) Seek(offset int64, whence int) (int64, error) { r.mu.Lock() defer r.mu.Unlock() r._didSeek = true return r.r.Seek(offset, whence) } func TestSeekFast(t *testing.T) { // Under these conditions we cannot guarantee that a worker // will not read bytes after a Seek call has been made. if *conc != 1 && runtime.GOMAXPROCS(0) > 1 { return } const ( infix = "payload" blocks = 10 ) // Use different caches. for _, cache := range []Cache{ nil, // Explicitly nil. cache.NewLRU(0), // Functionally nil. cache.NewLRU(1), cache.NewLRU(blocks / 2), cache.NewLRU(blocks), cache.NewLRU(blocks + 1), cache.NewRandom(0), // Functionally nil. cache.NewRandom(1), cache.NewRandom(blocks / 2), cache.NewRandom(blocks), cache.NewRandom(blocks + 1), } { var ( buf bytes.Buffer offsets = []int{0} ) w := NewWriter(&buf, 1) for i := 0; i < blocks; i++ { if _, err := fmt.Fprintf(w, "%d%[2]s%[1]d", i, infix); err != nil { t.Fatalf("Write: %v", err) } if err := w.Flush(); err != nil { t.Fatalf("Flush: %v", err) } if err := w.Wait(); err != nil { t.Fatalf("Wait: %v", err) } offsets = append(offsets, buf.Len()) } w.Close() offsets = offsets[:len(offsets)-1] c := &countReadSeeker{r: bytes.NewReader(buf.Bytes())} // Insert a HasEOF to ensure it does not corrupt subsequent reads. HasEOF(bytes.NewReader(buf.Bytes())) r, err := NewReader(c, *conc) if err != nil { t.Fatalf("NewReader: %v", err) } r.SetCache(cache) p := make([]byte, len(infix)+2) func() { defer func() { r := recover() if r != nil { t.Fatalf("Seek on unread reader panicked: %v", r) } }() err := r.Seek(Offset{}) if err != nil { t.Fatalf("Seek: %v", err) } }() // Standard read through of the data. for i := range offsets { n, err := r.Read(p) if n != len(p) { t.Fatalf("Unexpected read length: got:%d want:%d", n, len(p)) } if err != nil { t.Fatalf("Read: %v", err) } got := string(p) want := fmt.Sprintf("%d%[2]s%[1]d", i, infix) if got != want { t.Errorf("Unexpected result: got:%q want:%q", got, want) } } // Seek to each block in turn for i, o := range offsets { err := r.Seek(Offset{File: int64(o)}) if err != nil { t.Fatalf("Seek: %v", err) } n, err := r.Read(p) if n != len(p) { t.Errorf("Unexpected read length: got:%d want:%d", n, len(p)) } if err != nil { t.Fatalf("Read: %v", err) } got := string(p) want := fmt.Sprintf("%d%[2]s%[1]d", i, infix) if got != want { t.Errorf("Unexpected result: got:%q want:%q", got, want) } } // Seek to each block in turn, but read the infix and then the first 2 bytes. for i, o := range offsets { if err := r.Seek(Offset{File: int64(o), Block: 1}); err != nil { t.Fatalf("Seek: %v", err) } p = p[:len(infix)] n, err := r.Read(p) if n != len(p) { t.Fatalf("Unexpected read length: got:%d want:%d", n, len(p)) } if err != nil { t.Fatalf("Read: %v", err) } got := string(p) want := infix if got != want { t.Fatalf("Unexpected result: got:%q want:%q", got, want) } // Check whether the underlying reader was seeked or read. hasRead := c.offset() if err = r.Seek(Offset{File: int64(o), Block: 0}); err != nil { t.Fatalf("Seek: %v", err) } if b := c.offset() - hasRead; b != 0 { t.Errorf("Seek performed unexpected read: %d bytes", b) } if c.didSeek() { t.Error("Seek caused underlying Seek.") } p = p[:2] n, err = r.Read(p) if n != len(p) { t.Fatalf("Unexpected read length: got:%d want:%d", n, len(p)) } if err != nil { t.Fatalf("Read: %v", err) } got = string(p) want = fmt.Sprintf("%dp", i) if got != want { t.Fatalf("Unexpected result: got:%q want:%q", got, want) } } r.Close() } } func TestCache(t *testing.T) { // Under these conditions we cannot guarantee that the order of // blocks returned by nextBlock work will not result in additional // cache puts. if *conc != 1 { return } const ( infix = "payload" blocks = 10 ) // Each pattern is a series of seek-and-read (when the element >= 0) // or read (when the element < 0). Each read is exactly one block // worth of data. type opPair struct{ seekBlock, blockID int } patterns := []struct { ops []opPair // One for each cache case below. If new caches are added to the // test list, stats must be added here. expectedStats []cache.Stats }{ { ops: []opPair{ {seekBlock: -1, blockID: 0}, {seekBlock: -1, blockID: 1}, {seekBlock: -1, blockID: 2}, {seekBlock: +0, blockID: 0}, {seekBlock: -1, blockID: 1}, {seekBlock: -1, blockID: 2}, {seekBlock: -1, blockID: 3}, {seekBlock: -1, blockID: 4}, }, expectedStats: []cache.Stats{ {}, // nil cache. {}, // nil cache: LRU(0) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 6}, // LRU(1) {Gets: 7, Misses: 4, Puts: 7, Retains: 7, Evictions: 0}, // LRU(5) {Gets: 7, Misses: 4, Puts: 7, Retains: 7, Evictions: 0}, // LRU(10) {Gets: 7, Misses: 4, Puts: 7, Retains: 7, Evictions: 0}, // LRU(11) {}, // nil cache: FIFO(0) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 6}, // FIFO(1) {Gets: 7, Misses: 4, Puts: 7, Retains: 4, Evictions: 0}, // FIFO(5) {Gets: 7, Misses: 4, Puts: 7, Retains: 4, Evictions: 0}, // FIFO(10) {Gets: 7, Misses: 4, Puts: 7, Retains: 4, Evictions: 0}, // FIFO(11) {}, // nil cache: Random(0) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 6}, // Random(1) {Gets: 7, Misses: 4, Puts: 7, Retains: 7, Evictions: 0}, // Random(5) {Gets: 7, Misses: 4, Puts: 7, Retains: 7, Evictions: 0}, // Random(10) {Gets: 7, Misses: 4, Puts: 7, Retains: 7, Evictions: 0}, // Random(11) }, }, { ops: []opPair{ {seekBlock: -1, blockID: 0}, {seekBlock: -1, blockID: 1}, {seekBlock: -1, blockID: 2}, {seekBlock: +1, blockID: 1}, {seekBlock: -1, blockID: 2}, {seekBlock: -1, blockID: 3}, {seekBlock: -1, blockID: 4}, {seekBlock: -1, blockID: 5}, }, expectedStats: []cache.Stats{ {}, // nil cache. {}, // nil cache. {Gets: 7, Misses: 5, Puts: 7, Retains: 7, Evictions: 4}, // LRU(1) {Gets: 7, Misses: 5, Puts: 7, Retains: 7, Evictions: 0}, // LRU(5) {Gets: 7, Misses: 5, Puts: 7, Retains: 7, Evictions: 0}, // LRU(10) {Gets: 7, Misses: 5, Puts: 7, Retains: 7, Evictions: 0}, // LRU(11) {}, // nil cache: FIFO(0) {Gets: 7, Misses: 5, Puts: 7, Retains: 7, Evictions: 6}, // FIFO(1) {Gets: 7, Misses: 5, Puts: 7, Retains: 5, Evictions: 0}, // FIFO(5) {Gets: 7, Misses: 5, Puts: 7, Retains: 5, Evictions: 0}, // FIFO(10) {Gets: 7, Misses: 5, Puts: 7, Retains: 5, Evictions: 0}, // FIFO(11) {}, // nil cache: Random(0) {Gets: 7, Misses: 5, Puts: 7, Retains: 7, Evictions: 4}, // Random(1) {Gets: 7, Misses: 5, Puts: 7, Retains: 7, Evictions: 0}, // Random(5) {Gets: 7, Misses: 5, Puts: 7, Retains: 7, Evictions: 0}, // Random(10) {Gets: 7, Misses: 5, Puts: 7, Retains: 7, Evictions: 0}, // Random(11) }, }, { ops: []opPair{ {seekBlock: -1, blockID: 0}, {seekBlock: -1, blockID: 1}, {seekBlock: -1, blockID: 2}, {seekBlock: +2, blockID: 2}, {seekBlock: -1, blockID: 3}, {seekBlock: -1, blockID: 4}, {seekBlock: -1, blockID: 5}, {seekBlock: -1, blockID: 6}, }, // Re-reading the same block avoids a cache look-up. expectedStats: []cache.Stats{ {}, // nil cache. {}, // nil cache. {Gets: 6, Misses: 6, Puts: 6, Retains: 6, Evictions: 5}, // LRU(1) {Gets: 6, Misses: 6, Puts: 6, Retains: 6, Evictions: 1}, // LRU(5) {Gets: 6, Misses: 6, Puts: 6, Retains: 6, Evictions: 0}, // LRU(10) {Gets: 6, Misses: 6, Puts: 6, Retains: 6, Evictions: 0}, // LRU(11) {}, // nil cache: FIFO(0) {Gets: 6, Misses: 6, Puts: 6, Retains: 6, Evictions: 5}, // FIFO(1) {Gets: 6, Misses: 6, Puts: 6, Retains: 6, Evictions: 1}, // FIFO(5) {Gets: 6, Misses: 6, Puts: 6, Retains: 6, Evictions: 0}, // FIFO(10) {Gets: 6, Misses: 6, Puts: 6, Retains: 6, Evictions: 0}, // FIFO(11) {}, // nil cache: Random(0) {Gets: 6, Misses: 6, Puts: 6, Retains: 6, Evictions: 5}, // Random(1) {Gets: 6, Misses: 6, Puts: 6, Retains: 6, Evictions: 1}, // Random(5) {Gets: 6, Misses: 6, Puts: 6, Retains: 6, Evictions: 0}, // Random(10) {Gets: 6, Misses: 6, Puts: 6, Retains: 6, Evictions: 0}, // Random(11) }, }, { ops: []opPair{ {seekBlock: -1, blockID: 0}, {seekBlock: -1, blockID: 1}, {seekBlock: -1, blockID: 2}, {seekBlock: +3, blockID: 3}, {seekBlock: -1, blockID: 4}, {seekBlock: -1, blockID: 5}, {seekBlock: -1, blockID: 6}, {seekBlock: -1, blockID: 7}, }, expectedStats: []cache.Stats{ {}, // nil cache. {}, // nil cache. {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 6}, // LRU(1) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 2}, // LRU(5) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 0}, // LRU(10) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 0}, // LRU(11) {}, // nil cache: FIFO(0) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 6}, // FIFO(1) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 2}, // FIFO(5) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 0}, // FIFO(10) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 0}, // FIFO(11) {}, // nil cache: Random(0) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 6}, // Random(1) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 2}, // Random(5) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 0}, // Random(10) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 0}, // Random(11) }, }, { ops: []opPair{ {seekBlock: -1, blockID: 0}, {seekBlock: -1, blockID: 1}, {seekBlock: -1, blockID: 2}, {seekBlock: +4, blockID: 4}, {seekBlock: -1, blockID: 5}, {seekBlock: -1, blockID: 6}, {seekBlock: -1, blockID: 7}, {seekBlock: -1, blockID: 8}, }, expectedStats: []cache.Stats{ {}, // nil cache. {}, // nil cache. {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 6}, // LRU(1) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 2}, // LRU(5) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 0}, // LRU(10) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 0}, // LRU(11) {}, // nil cache: FIFO(0) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 6}, // FIFO(1) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 2}, // FIFO(5) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 0}, // FIFO(10) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 0}, // FIFO(11) {}, // nil cache: Random(0) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 6}, // Random(1) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 2}, // Random(5) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 0}, // Random(10) {Gets: 7, Misses: 7, Puts: 7, Retains: 7, Evictions: 0}, // Random(11) }, }, { ops: []opPair{ {seekBlock: -1, blockID: 0}, {seekBlock: -1, blockID: 1}, {seekBlock: -1, blockID: 2}, {seekBlock: +1, blockID: 1}, {seekBlock: +2, blockID: 2}, {seekBlock: +1, blockID: 1}, {seekBlock: +1, blockID: 1}, {seekBlock: -1, blockID: 2}, {seekBlock: +7, blockID: 7}, {seekBlock: -1, blockID: 8}, {seekBlock: -1, blockID: 9}, }, expectedStats: []cache.Stats{ {}, // nil cache. {}, // nil cache. {Gets: 9, Misses: 5, Puts: 9, Retains: 9, Evictions: 4}, // LRU(1) {Gets: 9, Misses: 5, Puts: 9, Retains: 9, Evictions: 0}, // LRU(5) {Gets: 9, Misses: 5, Puts: 9, Retains: 9, Evictions: 0}, // LRU(10) {Gets: 9, Misses: 5, Puts: 9, Retains: 9, Evictions: 0}, // LRU(11) {}, // nil cache: FIFO(0) {Gets: 9, Misses: 5, Puts: 9, Retains: 9, Evictions: 8}, // FIFO(1) {Gets: 9, Misses: 5, Puts: 9, Retains: 5, Evictions: 0}, // FIFO(5) {Gets: 9, Misses: 5, Puts: 9, Retains: 5, Evictions: 0}, // FIFO(10) {Gets: 9, Misses: 5, Puts: 9, Retains: 5, Evictions: 0}, // FIFO(11) {}, // nil cache: Random(0) {Gets: 9, Misses: 5, Puts: 9, Retains: 9, Evictions: 4}, // Random(1) {Gets: 9, Misses: 5, Puts: 9, Retains: 9, Evictions: 0}, // Random(5) {Gets: 9, Misses: 5, Puts: 9, Retains: 9, Evictions: 0}, // Random(10) {Gets: 9, Misses: 5, Puts: 9, Retains: 9, Evictions: 0}, // Random(11) }, }, } for k, pat := range patterns { // Use different caches. for j, s := range []Cache{ nil, // Explicitly nil. cache.NewLRU(0), // Functionally nil. cache.NewLRU(1), cache.NewLRU(blocks / 2), cache.NewLRU(blocks), cache.NewLRU(blocks + 1), cache.NewFIFO(0), // Functionally nil. cache.NewFIFO(1), cache.NewFIFO(blocks / 2), cache.NewFIFO(blocks), cache.NewFIFO(blocks + 1), cache.NewRandom(0), // Functionally nil. cache.NewRandom(1), cache.NewRandom(blocks / 2), cache.NewRandom(blocks), cache.NewRandom(blocks + 1), } { var ( buf bytes.Buffer offsets = []int{0} ) w := NewWriter(&buf, 1) for i := 0; i < blocks; i++ { if _, err := fmt.Fprintf(w, "%d%[2]s%[1]d", i, infix); err != nil { t.Fatalf("Write: %v", err) } if err := w.Flush(); err != nil { t.Fatalf("Flush: %v", err) } if err := w.Wait(); err != nil { t.Fatalf("Wait: %v", err) } offsets = append(offsets, buf.Len()) } w.Close() offsets = offsets[:len(offsets)-1] br := bytes.NewReader(buf.Bytes()) // Insert a HasEOF to ensure it does not corrupt subsequent reads. HasEOF(br) r, err := NewReader(br, *conc) if err != nil { t.Fatalf("NewReader: %v", err) } var stats *cache.StatsRecorder if s != nil { stats = &cache.StatsRecorder{Cache: s} s = stats } r.SetCache(s) p := make([]byte, len(infix)+2) for _, op := range pat.ops { if op.seekBlock >= 0 { err := r.Seek(Offset{File: int64(offsets[op.seekBlock])}) if err != nil { t.Fatalf("Seek: %v", err) } } n, err := r.Read(p) if n != len(p) { t.Errorf("Unexpected read length: got:%d want:%d", n, len(p)) } if err != nil { t.Fatalf("Read: %v", err) } got := string(p) want := fmt.Sprintf("%d%[2]s%[1]d", op.blockID, infix) if got != want { t.Errorf("Unexpected result: got:%q want:%q", got, want) } } if stats != nil && stats.Stats() != pat.expectedStats[j] { t.Errorf("Unexpected result for cache %d pattern %d: got:%+v want:%+v", j, k, stats.Stats(), pat.expectedStats[j]) } r.Close() } } } func TestBlocked(t *testing.T) { const ( infix = "payload" blocks = 10 ) for _, blocked := range []bool{false, true} { var ( buf bytes.Buffer want bytes.Buffer ) w := NewWriter(&buf, 1) for i := 0; i < blocks; i++ { if _, err := fmt.Fprintf(w, "%d%[2]s%[1]d\n", i, infix); err != nil { t.Fatalf("Write: %v", err) } if err := w.Flush(); err != nil { t.Fatalf("Flush: %v", err) } if _, err := fmt.Fprintf(&want, "%d%[2]s%[1]d\n", i, infix); err != nil { t.Fatalf("Write: %v", err) } } err := w.Close() if err != nil { t.Fatalf("unexpected error on Close: %v", err) } r, err := NewReader(bytes.NewReader(buf.Bytes()), *conc) if err != nil { t.Fatalf("NewReader: %v", err) } r.Blocked = blocked p := make([]byte, len(infix)) var ( got []byte gotBlocks int ) for { n, err := r.Read(p) got = append(got, p[:n]...) if err != nil { if err == io.EOF && n != 0 { gotBlocks++ continue } break } } if !blocked && gotBlocks != 1 { t.Errorf("unexpected number of blocks:\n\tgot:%d\n\twant:%d", gotBlocks, 1) } if blocked && gotBlocks != blocks { t.Errorf("unexpected number of blocks:\n\tgot:%d\n\twant:%d", gotBlocks, blocks) } if !bytes.Equal(got, want.Bytes()) { t.Errorf("unexpected result:\n\tgot:%q\n\twant:%q", got, want.Bytes()) } r.Close() } } type zero struct{} func (z zero) Read(p []byte) (int, error) { for i := range p { p[i] = 0 } return len(p), nil } func TestWriteByteCount(t *testing.T) { cw, _ := NewWriterLevel(ioutil.Discard, gzip.BestCompression, 4) defer cw.Close() n, err := io.Copy(cw, &io.LimitedReader{R: new(zero), N: 100000}) if n != 100000 { t.Errorf("Unexpected number of bytes, got:%d, want:%d", n, 100000) } if err != nil { t.Errorf("Unexpected error got:%v", err) } } func BenchmarkWrite(b *testing.B) { bg := NewWriter(ioutil.Discard, *conc) block := bytes.Repeat([]byte("repeated"), 50) for i := 0; i < b.N; i++ { for j := 0; j < 1000000; j++ { bg.Write(block) } bg.Wait() } } func BenchmarkRead(b *testing.B) { if *file == "" { b.Skip("no bgzf file specified") } f, err := os.Open(*file) if err != nil { b.Fatalf("file open failed: %v", err) } defer f.Close() buf := make([]byte, 16384) b.ResetTimer() for i := 0; i < b.N; i++ { f.Seek(0, os.SEEK_SET) bg, err := NewReader(f, *conc) if err != nil { b.Fatalf("bgzf open failed: %v", err) } for { _, err = bg.Read(buf) if err == io.EOF { break } if err != nil { b.Fatalf("bgzf read failed: %v", err) } } bg.Close() } } hts-1.0.1/bgzf/cache.go000066400000000000000000000124361304417722000146370ustar00rootroot00000000000000// Copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package bgzf import ( "bytes" "compress/gzip" "io" ) // Cache is a Block caching type. Basic cache implementations are provided // in the cache package. A Cache must be safe for concurrent use. // // If a Cache is a Wrapper, its Wrap method is called on newly created blocks. type Cache interface { // Get returns the Block in the Cache with the specified // base or a nil Block if it does not exist. The returned // Block must be removed from the Cache. Get(base int64) Block // Put inserts a Block into the Cache, returning the Block // that was evicted or nil if no eviction was necessary and // a boolean indicating whether the put Block was retained // by the Cache. Put(Block) (evicted Block, retained bool) // Peek returns whether a Block exists in the cache for the // given base. If a Block satisfies the request, then exists // is returned as true with the offset for the next Block in // the stream, otherwise false and -1. Peek(base int64) (exists bool, next int64) } // Wrapper defines Cache types that need to modify a Block at its creation. type Wrapper interface { Wrap(Block) Block } // Block wraps interaction with decompressed BGZF data blocks. type Block interface { // Base returns the file offset of the start of // the gzip member from which the Block data was // decompressed. Base() int64 io.Reader // Used returns whether one or more bytes have // been read from the Block. Used() bool // header returns the gzip.Header of the gzip member // from which the Block data was decompressed. header() gzip.Header // isMagicBlock returns whether the Block is a BGZF // magic EOF marker block. isMagicBlock() bool // ownedBy returns whether the Block is owned by // the given Reader. ownedBy(*Reader) bool // setOwner changes the owner to the given Reader, // reseting other data to its zero state. setOwner(*Reader) // hasData returns whether the Block has read data. hasData() bool // The following are unexported equivalents // of the io interfaces. seek is limited to // the file origin offset case and does not // return the new offset. seek(offset int64) error readFrom(io.ReadCloser) error // len returns the number of remaining // bytes that can be read from the Block. len() int // setBase sets the file offset of the start // and of the gzip member that the Block data // was decompressed from. setBase(int64) // NextBase returns the expected position of the next // BGZF block. It returns -1 if the Block is not valid. NextBase() int64 // setHeader sets the file header of of the gzip // member that the Block data was decompressed from. setHeader(gzip.Header) // txOffset returns the current vitual offset. txOffset() Offset } type block struct { owner *Reader used bool base int64 h gzip.Header magic bool offset Offset buf *bytes.Reader data [MaxBlockSize]byte } func (b *block) Base() int64 { return b.base } func (b *block) Used() bool { return b.used } func (b *block) Read(p []byte) (int, error) { n, err := b.buf.Read(p) b.offset.Block += uint16(n) if n > 0 { b.used = true } return n, err } // readToEOF will exhaust r or fill buf. // If r does not EOF upon reading up to len(buf) bytes then readToEOF will return // io.ErrShortBuffer and an additional byte will be discarded from the reader. func readToEOF(r io.Reader, buf []byte) (n int, err error) { for err == nil && n < len(buf) { var nn int nn, err = r.Read(buf[n:]) n += nn } switch { case err == io.EOF: return n, nil case n == MaxBlockSize && err == nil: // This is paranoic, but some readers will return // quickly when passed a zero-length byte slice. var dummy [1]byte _, err = r.Read(dummy[:]) if err == nil { return n, io.ErrShortBuffer } if err == io.EOF { err = nil } } return n, err } func (b *block) readFrom(r io.ReadCloser) error { o := b.owner b.owner = nil n, err := readToEOF(r, b.data[:]) if err != nil { return err } b.buf = bytes.NewReader(b.data[:n]) b.owner = o b.magic = b.magic && b.len() == 0 return r.Close() } func (b *block) seek(offset int64) error { _, err := b.buf.Seek(offset, 0) if err == nil { b.offset.Block = uint16(offset) } return err } func (b *block) len() int { if b.buf == nil { return 0 } return b.buf.Len() } func (b *block) setBase(n int64) { b.base = n b.offset = Offset{File: n} } func (b *block) NextBase() int64 { size := int64(expectedMemberSize(b.h)) if size == -1 { return -1 } return b.base + size } func (b *block) setHeader(h gzip.Header) { b.h = h b.magic = h.OS == 0xff && // Test for zero time and old compress/gzip behaviour. (h.ModTime.IsZero() || h.ModTime.Equal(unixEpoch)) && h.Name == "" && h.Comment == "" && bytes.Equal(h.Extra, []byte("BC\x02\x00\x1b\x00")) } func (b *block) header() gzip.Header { return b.h } func (b *block) isMagicBlock() bool { return b.magic } func (b *block) setOwner(r *Reader) { b.owner = r b.used = false b.base = -1 b.h = gzip.Header{} b.offset = Offset{} b.buf = nil } func (b *block) ownedBy(r *Reader) bool { return b.owner == r } func (b *block) hasData() bool { return b.buf != nil } func (b *block) txOffset() Offset { return b.offset } hts-1.0.1/bgzf/cache/000077500000000000000000000000001304417722000143025ustar00rootroot00000000000000hts-1.0.1/bgzf/cache/cache.go000066400000000000000000000255631304417722000157070ustar00rootroot00000000000000// Copyright ©2015 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package cache provides basic block cache types for the bgzf package. package cache import ( "sync" "github.com/biogo/hts/bgzf" ) var ( _ Cache = (*LRU)(nil) _ Cache = (*FIFO)(nil) _ Cache = (*Random)(nil) ) // Free attempts to drop as many blocks from c as needed allow // n successful Put calls on c. It returns a boolean indicating // whether n slots were made available. func Free(n int, c Cache) bool { empty := c.Cap() - c.Len() if n <= empty { return true } c.Drop(n - empty) return c.Cap()-c.Len() >= n } // Cache is an extension of bgzf.Cache that allows inspection // and manipulation of the cache. type Cache interface { bgzf.Cache // Len returns the number of elements held by // the cache. Len() int // Cap returns the maximum number of elements // that can be held by the cache. Cap() int // Resize changes the capacity of the cache to n, // dropping excess blocks if n is less than the // number of cached blocks. Resize(n int) // Drop evicts n elements from the cache according // to the cache eviction policy. Drop(n int) } func insertAfter(pos, n *node) { n.prev = pos pos.next, n.next, pos.next.prev = n, pos.next, n } func remove(n *node, table map[int64]*node) { delete(table, n.b.Base()) n.prev.next = n.next n.next.prev = n.prev n.next = nil n.prev = nil } // NewLRU returns an LRU cache with n slots. If n is less than 1 // a nil cache is returned. func NewLRU(n int) Cache { if n < 1 { return nil } c := LRU{ table: make(map[int64]*node, n), cap: n, } c.root.next = &c.root c.root.prev = &c.root return &c } // LRU satisfies the Cache interface with least recently used eviction // behavior where Unused Blocks are preferentially evicted. type LRU struct { mu sync.RWMutex root node table map[int64]*node cap int } type node struct { b bgzf.Block next, prev *node } // Len returns the number of elements held by the cache. func (c *LRU) Len() int { c.mu.RLock() defer c.mu.RUnlock() return len(c.table) } // Cap returns the maximum number of elements that can be held by the cache. func (c *LRU) Cap() int { c.mu.RLock() defer c.mu.RUnlock() return c.cap } // Resize changes the capacity of the cache to n, dropping excess blocks // if n is less than the number of cached blocks. func (c *LRU) Resize(n int) { c.mu.Lock() if n < len(c.table) { c.drop(len(c.table) - n) } c.cap = n c.mu.Unlock() } // Drop evicts n elements from the cache according to the cache eviction policy. func (c *LRU) Drop(n int) { c.mu.Lock() c.drop(n) c.mu.Unlock() } func (c *LRU) drop(n int) { for ; n > 0 && c.Len() > 0; n-- { remove(c.root.prev, c.table) } } // Get returns the Block in the Cache with the specified base or a nil Block // if it does not exist. func (c *LRU) Get(base int64) bgzf.Block { c.mu.Lock() defer c.mu.Unlock() n, ok := c.table[base] if !ok { return nil } remove(n, c.table) return n.b } // Peek returns a boolean indicating whether a Block exists in the Cache for // the given base offset and the expected offset for the subsequent Block in // the BGZF stream. func (c *LRU) Peek(base int64) (exist bool, next int64) { c.mu.RLock() defer c.mu.RUnlock() n, exist := c.table[base] if !exist { return false, -1 } next = n.b.NextBase() return exist, next } // Put inserts a Block into the Cache, returning the Block that was evicted or // nil if no eviction was necessary and the Block was retained. Unused Blocks // are not retained but are returned if the Cache is full. func (c *LRU) Put(b bgzf.Block) (evicted bgzf.Block, retained bool) { c.mu.Lock() defer c.mu.Unlock() var d bgzf.Block if _, ok := c.table[b.Base()]; ok { return b, false } used := b.Used() if len(c.table) == c.cap { if !used { return b, false } d = c.root.prev.b remove(c.root.prev, c.table) } n := &node{b: b} c.table[b.Base()] = n if used { insertAfter(&c.root, n) } else { insertAfter(c.root.prev, n) } return d, true } // NewFIFO returns a FIFO cache with n slots. If n is less than 1 // a nil cache is returned. func NewFIFO(n int) Cache { if n < 1 { return nil } c := FIFO{ table: make(map[int64]*node, n), cap: n, } c.root.next = &c.root c.root.prev = &c.root return &c } // FIFO satisfies the Cache interface with first in first out eviction // behavior where Unused Blocks are preferentially evicted. type FIFO struct { mu sync.RWMutex root node table map[int64]*node cap int } // Len returns the number of elements held by the cache. func (c *FIFO) Len() int { c.mu.RLock() defer c.mu.RUnlock() return len(c.table) } // Cap returns the maximum number of elements that can be held by the cache. func (c *FIFO) Cap() int { c.mu.RLock() defer c.mu.RUnlock() return c.cap } // Resize changes the capacity of the cache to n, dropping excess blocks // if n is less than the number of cached blocks. func (c *FIFO) Resize(n int) { c.mu.Lock() if n < len(c.table) { c.drop(len(c.table) - n) } c.cap = n c.mu.Unlock() } // Drop evicts n elements from the cache according to the cache eviction policy. func (c *FIFO) Drop(n int) { c.mu.Lock() c.drop(n) c.mu.Unlock() } func (c *FIFO) drop(n int) { for ; n > 0 && c.Len() > 0; n-- { remove(c.root.prev, c.table) } } // Get returns the Block in the Cache with the specified base or a nil Block // if it does not exist. func (c *FIFO) Get(base int64) bgzf.Block { c.mu.Lock() defer c.mu.Unlock() n, ok := c.table[base] if !ok { return nil } if !n.b.Used() { remove(n, c.table) } return n.b } // Peek returns a boolean indicating whether a Block exists in the Cache for // the given base offset and the expected offset for the subsequent Block in // the BGZF stream. func (c *FIFO) Peek(base int64) (exist bool, next int64) { c.mu.RLock() defer c.mu.RUnlock() n, exist := c.table[base] if !exist { return false, -1 } next = n.b.NextBase() return exist, next } // Put inserts a Block into the Cache, returning the Block that was evicted or // nil if no eviction was necessary and the Block was retained. Unused Blocks // are not retained but are returned if the Cache is full. func (c *FIFO) Put(b bgzf.Block) (evicted bgzf.Block, retained bool) { c.mu.Lock() defer c.mu.Unlock() var d bgzf.Block if _, ok := c.table[b.Base()]; ok { return b, false } used := b.Used() if len(c.table) == c.cap { if !used { return b, false } d = c.root.prev.b remove(c.root.prev, c.table) } n := &node{b: b} c.table[b.Base()] = n if used { insertAfter(&c.root, n) } else { insertAfter(c.root.prev, n) } return d, true } // NewRandom returns a random eviction cache with n slots. If n is less than 1 // a nil cache is returned. func NewRandom(n int) Cache { if n < 1 { return nil } return &Random{ table: make(map[int64]bgzf.Block, n), cap: n, } } // Random satisfies the Cache interface with random eviction behavior // where Unused Blocks are preferentially evicted. type Random struct { mu sync.RWMutex table map[int64]bgzf.Block cap int } // Len returns the number of elements held by the cache. func (c *Random) Len() int { c.mu.RLock() defer c.mu.RUnlock() return len(c.table) } // Cap returns the maximum number of elements that can be held by the cache. func (c *Random) Cap() int { c.mu.RLock() defer c.mu.RUnlock() return c.cap } // Resize changes the capacity of the cache to n, dropping excess blocks // if n is less than the number of cached blocks. func (c *Random) Resize(n int) { c.mu.Lock() if n < len(c.table) { c.drop(len(c.table) - n) } c.cap = n c.mu.Unlock() } // Drop evicts n elements from the cache according to the cache eviction policy. func (c *Random) Drop(n int) { c.mu.Lock() c.drop(n) c.mu.Unlock() } func (c *Random) drop(n int) { if n < 1 { return } for k, b := range c.table { if b.Used() { continue } delete(c.table, k) if n--; n == 0 { return } } for k := range c.table { delete(c.table, k) if n--; n == 0 { break } } } // Get returns the Block in the Cache with the specified base or a nil Block // if it does not exist. func (c *Random) Get(base int64) bgzf.Block { c.mu.Lock() defer c.mu.Unlock() b, ok := c.table[base] if !ok { return nil } delete(c.table, base) return b } // Peek returns a boolean indicating whether a Block exists in the Cache for // the given base offset and the expected offset for the subsequent Block in // the BGZF stream. func (c *Random) Peek(base int64) (exist bool, next int64) { c.mu.RLock() defer c.mu.RUnlock() n, exist := c.table[base] if !exist { return false, -1 } next = n.NextBase() return exist, next } // Put inserts a Block into the Cache, returning the Block that was evicted or // nil if no eviction was necessary and the Block was retained. Unused Blocks // are not retained but are returned if the Cache is full. func (c *Random) Put(b bgzf.Block) (evicted bgzf.Block, retained bool) { c.mu.Lock() defer c.mu.Unlock() var d bgzf.Block if _, ok := c.table[b.Base()]; ok { return b, false } if len(c.table) == c.cap { if !b.Used() { return b, false } for k, v := range c.table { if v.Used() { continue } delete(c.table, k) d = v goto done } for k, v := range c.table { delete(c.table, k) d = v break } done: } c.table[b.Base()] = b return d, true } // StatsRecorder allows a bgzf.Cache to capture cache statistics. type StatsRecorder struct { bgzf.Cache mu sync.RWMutex stats Stats } // Stats represents statistics of a bgzf.Cache. type Stats struct { Gets int // number of Get operations Misses int // number of cache misses Puts int // number of Put operations Retains int // number of times a Put has resulted in Block retention Evictions int // number of times a Put has resulted in a Block eviction } // Stats returns the current statistics for the cache. func (s *StatsRecorder) Stats() Stats { s.mu.RLock() defer s.mu.RUnlock() return s.stats } // Reset zeros the statistics kept by the StatsRecorder. func (s *StatsRecorder) Reset() { s.mu.Lock() s.stats = Stats{} s.mu.Unlock() } // Get returns the Block in the underlying Cache with the specified base or a nil // Block if it does not exist. It updates the gets and misses statistics. func (s *StatsRecorder) Get(base int64) bgzf.Block { s.mu.Lock() s.stats.Gets++ blk := s.Cache.Get(base) if blk == nil { s.stats.Misses++ } s.mu.Unlock() return blk } // Put inserts a Block into the underlying Cache, returning the Block and eviction // status according to the underlying cache behavior. It updates the puts, retains and // evictions statistics. func (s *StatsRecorder) Put(b bgzf.Block) (evicted bgzf.Block, retained bool) { s.mu.Lock() s.stats.Puts++ blk, retained := s.Cache.Put(b) if retained { s.stats.Retains++ if blk != nil { s.stats.Evictions++ } } s.mu.Unlock() return blk, retained } hts-1.0.1/bgzf/export_test.go000066400000000000000000000003771304417722000161550ustar00rootroot00000000000000// Copyright ©2015 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package bgzf const MagicBlock = magicBlock var ExpectedMemberSize = expectedMemberSize hts-1.0.1/bgzf/go1_8_test.go000066400000000000000000000003501304417722000155400ustar00rootroot00000000000000// Copyright ©2017 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // +build go1.8 package bgzf_test func init() { go1_8 = true } hts-1.0.1/bgzf/index/000077500000000000000000000000001304417722000143465ustar00rootroot00000000000000hts-1.0.1/bgzf/index/index.go000066400000000000000000000061161304417722000160100ustar00rootroot00000000000000// Copyright ©2015 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package index provides common code for CSI and tabix BGZF indexing. package index import ( "errors" "io" "github.com/biogo/hts/bgzf" ) var ( ErrNoReference = errors.New("index: no reference") ErrInvalid = errors.New("index: invalid interval") ) // ReferenceStats holds mapping statistics for a genomic reference. type ReferenceStats struct { // Chunk is the span of the indexed BGZF // holding alignments to the reference. Chunk bgzf.Chunk // Mapped is the count of mapped reads. Mapped uint64 // Unmapped is the count of unmapped reads. Unmapped uint64 } // Reader wraps a bgzf.Reader to provide a mechanism to read a selection of // BGZF chunks. type ChunkReader struct { r *bgzf.Reader wasBlocked bool chunks []bgzf.Chunk } // NewChunkReader returns a ChunkReader to read from r, limiting the reads to // the provided chunks. The provided bgzf.Reader will be put into Blocked mode. func NewChunkReader(r *bgzf.Reader, chunks []bgzf.Chunk) (*ChunkReader, error) { b := r.Blocked r.Blocked = true if len(chunks) != 0 { err := r.Seek(chunks[0].Begin) if err != nil { return nil, err } } return &ChunkReader{r: r, wasBlocked: b, chunks: chunks}, nil } // Read satisfies the io.Reader interface. func (r *ChunkReader) Read(p []byte) (int, error) { if len(r.chunks) == 0 { return 0, io.EOF } last := r.r.LastChunk() if vOffset(last.End) >= vOffset(r.chunks[0].End) { return 0, io.EOF } // Ensure the byte slice does not extend beyond the end of // the current chunk. We do not need to consider reading // beyond the end of the block because the bgzf.Reader is in // blocked mode and so will stop there anyway. want := int(r.chunks[0].End.Block) if r.chunks[0].End.Block == 0 && r.chunks[0].End.File > last.End.File { // Special case for when the current end block offset // is zero. want = r.r.BlockLen() } var cursor int if last.End.File == r.chunks[0].End.File { // Our end is in the same block as the last chunk end // so set the cursor to the chunk block end to prevent // reading past the end of the chunk. cursor = int(last.End.Block) } n, err := r.r.Read(p[:min(len(p), want-cursor)]) if err != nil { if n != 0 && err == io.EOF { err = nil } return n, err } // Check whether we are at or past the end of the current // chunk or we have not made progress for reasons other than // zero length p. this := r.r.LastChunk() if (len(p) != 0 && this == last) || vOffset(this.End) >= vOffset(r.chunks[0].End) { r.chunks = r.chunks[1:] if len(r.chunks) == 0 { return n, io.EOF } err = r.r.Seek(r.chunks[0].Begin) } return n, err } func vOffset(o bgzf.Offset) int64 { return o.File<<16 | int64(o.Block) } func min(a, b int) int { if a < b { return a } return b } // Close returns the bgzf.Reader to its original blocking mode and releases it. // The bgzf.Reader is not closed. func (r *ChunkReader) Close() error { r.r.Blocked = r.wasBlocked r.r = nil return nil } hts-1.0.1/bgzf/index/index_test.go000066400000000000000000000205201304417722000170420ustar00rootroot00000000000000// Copyright ©2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package index import ( "bytes" "flag" "io" "strings" "testing" "github.com/biogo/hts/bgzf" "gopkg.in/check.v1" ) var conc = flag.Int("conc", 1, "sets the level of concurrency for compression") func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) // conceptualBAMdata is the BAM corresponding to: // // @HD VN:1.0 SO:coordinate // @SQ SN:conceptual LN:134217728 // 60m66m:bin0 0 conceptual 62914561 40 6291456M * 0 0 * * // 70m76m:bin2 0 conceptual 73400321 40 6291456M * 0 0 * * // 73m75m:bin18 0 conceptual 76546049 40 2097152M * 0 0 * * // // This is a coordinate-translated version of the conceptual example in the // SAM spec using binning as actually used by BAM rather than as presented. var conceptualBAMdata = []byte{ // sam.Header block [{File:0, Block:0}, {File:0, Block:87}). 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x64, 0x00, 0x73, 0x72, 0xf4, 0x65, 0xb4, 0x60, 0x60, 0x60, 0x70, 0xf0, 0x70, 0xe1, 0x0c, 0xf3, 0xb3, 0x32, 0xd4, 0x33, 0xe0, 0x0c, 0xf6, 0xb7, 0x4a, 0xce, 0xcf, 0x2f, 0x4a, 0xc9, 0xcc, 0x4b, 0x2c, 0x49, 0xe5, 0x72, 0x08, 0x0e, 0xe4, 0x0c, 0xf6, 0x03, 0x8a, 0xe4, 0x25, 0xa7, 0x16, 0x94, 0x94, 0x26, 0xe6, 0x70, 0xfa, 0x00, 0x95, 0x19, 0x9b, 0x18, 0x19, 0x9a, 0x9b, 0x1b, 0x59, 0x70, 0x31, 0x02, 0xf5, 0x72, 0x03, 0x31, 0x42, 0x1e, 0xc8, 0x61, 0xe0, 0x00, 0x00, 0x42, 0x51, 0xcc, 0xea, 0x57, 0x00, 0x00, 0x00, // Record block [{File:101, Block:0}, {File:101, Block:157}). 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x62, 0x00, 0x33, 0x60, 0x80, 0x81, 0x03, 0xcc, 0x3c, 0x1a, 0x0c, 0x0c, 0x8c, 0x50, 0xde, 0x7f, 0x28, 0x00, 0xb1, 0xcd, 0x0c, 0x72, 0xcd, 0xcc, 0x72, 0xad, 0x92, 0x32, 0xf3, 0x0c, 0x40, 0x5c, 0x36, 0x03, 0xb8, 0x9e, 0x04, 0x16, 0x1e, 0x0d, 0x26, 0xac, 0x7a, 0xcc, 0x0d, 0x72, 0xcd, 0x21, 0x7a, 0x8c, 0xc0, 0x7a, 0x0c, 0xe1, 0x7a, 0x26, 0xb0, 0xf0, 0x6a, 0x08, 0x61, 0xd7, 0x63, 0x9c, 0x6b, 0x6e, 0x0a, 0xd6, 0x63, 0x68, 0x01, 0xe2, 0x33, 0x01, 0x00, 0x5a, 0x80, 0xfe, 0xec, 0x9d, 0x00, 0x00, 0x00, // Magic block [{File:200, Block:0}, {File:200, Block:0}). 0x1f, 0x8b, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x42, 0x43, 0x02, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // End {File:228, Block:0} } var conceptualChunks = []bgzf.Chunk{ {Begin: bgzf.Offset{File: 0, Block: 0}, End: bgzf.Offset{File: 0, Block: 87}}, // header {Begin: bgzf.Offset{File: 101, Block: 0}, End: bgzf.Offset{File: 101, Block: 52}}, // 60m66m:bin0 {Begin: bgzf.Offset{File: 101, Block: 52}, End: bgzf.Offset{File: 101, Block: 104}}, // 70m76m:bin2 {Begin: bgzf.Offset{File: 101, Block: 104}, End: bgzf.Offset{File: 101, Block: 157}}, // 73m75m:bin18 {Begin: bgzf.Offset{File: 228, Block: 0}, End: bgzf.Offset{File: 228, Block: 0}}, // EOF } // Test for issue #6 https://github.com/biogo/hts/issues/6 func (s *S) TestChunkReader(c *check.C) { br, err := bgzf.NewReader(bytes.NewReader(conceptualBAMdata), *conc) c.Assert(err, check.Equals, nil) defer br.Close() cr, err := NewChunkReader(br, conceptualChunks) c.Assert(err, check.Equals, nil) defer cr.Close() // 2 is shorter than the length of the first block. // This panics prior to the fix. n, err := cr.Read(make([]byte, 2)) c.Check(n, check.Equals, 2) c.Check(err, check.Equals, nil) } // Test for issue #8 https://github.com/biogo/hts/issues/8 func (s *S) TestIssue8(c *check.C) { br, err := bgzf.NewReader(bytes.NewReader(conceptualBAMdata), *conc) c.Assert(err, check.Equals, nil) defer br.Close() cr, err := NewChunkReader(br, conceptualChunks[:2]) c.Assert(err, check.Equals, nil) defer cr.Close() var last []byte for { p := make([]byte, 1024) n, err := cr.Read(p) if n != 0 { c.Check(p[:n], check.Not(check.DeepEquals), last[:min(n, len(last))]) } last = p if err != nil { if err == io.EOF { break } c.Fatalf("unexpected error: %v", err) } } } // issue10Tests are test cases for https://github.com/biogo/hts/issues/10. var issue10Tests = []struct { words []wordBlocks chunks []string canSquash bool canTrunc bool }{ { // This is semantically identical to the test case given in issue 10. words: commonWords, chunks: []string{"", ""}, canSquash: true, canTrunc: false, }, { words: commonWords, chunks: []string{"", "", ""}, canSquash: true, canTrunc: false, }, { words: commonWords, chunks: []string{"", "", "", ""}, canSquash: true, canTrunc: true, }, { words: commonWords, chunks: []string{"", ""}, canSquash: true, canTrunc: true, }, { words: commonWords, chunks: []string{"", ""}, canSquash: true, canTrunc: true, }, { words: commonWords, chunks: []string{"", "", "", "", "", "", "", "", ""}, canSquash: true, canTrunc: true, }, { // This case would never happen with an htslib-like index, but // it is a possible use case and not prohibited, so test it. words: commonWords, chunks: []string{"", "", "", "", "", "", ""}, // Not in order. canSquash: false, canTrunc: false, }, } var commonWords = []wordBlocks{ // Begin:{File:0 Block:0} End:{File:0 Block:6} // Begin:{File:0 Block:6} End:{File:0 Block:11} {word: ""}, {word: "", flush: true}, // Begin:{File:43 Block:0} End:{File:43 Block:5} // Begin:{File:43 Block:5} End:{File:43 Block:12} // Begin:{File:43 Block:12} End:{File:43 Block:18} {word: ""}, {word: ""}, {word: "", flush: true}, // Begin:{File:93 Block:0} End:{File:93 Block:6} // Begin:{File:93 Block:6} End:{File:93 Block:11} {word: ""}, {word: ""}, {word: "", flush: true}, // Begin:{File:142 Block:0} End:{File:142 Block:7} {word: ""}, } type wordBlocks struct { word string flush bool } type word int func (w word) RefID() int { return 0 } func (w word) Start() int { return int(w) } func (w word) End() int { return int(w + 1) } func (s *S) TestIssue10(c *check.C) { for _, test := range issue10Tests { var buf bytes.Buffer // Write the set of words to a bgzf stream. w := bgzf.NewWriter(&buf, *conc) for _, wb := range test.words { w.Write([]byte(wb.word)) if wb.flush { w.Flush() } } w.Close() for _, strategy := range []MergeStrategy{nil, adjacent} { if strategy != nil && !test.canSquash { continue } for _, clean := range []bool{false, true} { for _, truncFinal := range []bool{false, true} { if truncFinal && !test.canTrunc { continue } // Build an index into the words. r, err := bgzf.NewReader(bytes.NewReader(buf.Bytes()), *conc) c.Assert(err, check.Equals, nil) idx := make(map[string]bgzf.Chunk) for i, wb := range test.words { p := make([]byte, len(wb.word)) n, err := r.Read(p) c.Assert(err, check.Equals, nil) c.Assert(string(p[:n]), check.Equals, wb.word) last := r.LastChunk() if !clean { // This simulates the index construction behaviour // that appears to be what is done by htslib. The // behaviour of bgzf is to elide seeks that will not // result in a productive read. if i != 0 && test.words[i-1].flush { last.Begin = idx[test.words[i-1].word].End } } idx[wb.word] = last } var chunks []bgzf.Chunk for _, w := range test.chunks { chunks = append(chunks, idx[w]) } var want string if truncFinal { want = strings.Join(test.chunks[:len(test.chunks)-1], "") chunks[len(chunks)-2].End = chunks[len(chunks)-1].Begin chunks = chunks[:len(chunks)-1] } else { want = strings.Join(test.chunks, "") } if strategy != nil { chunks = strategy(chunks) } cr, err := NewChunkReader(r, chunks) c.Assert(err, check.Equals, nil) var got bytes.Buffer io.Copy(&got, cr) c.Check(got.String(), check.Equals, want, check.Commentf("clean=%t merge=%t trunc=%t chunks=%+v", clean, strategy != nil, truncFinal, chunks), ) } } } } } hts-1.0.1/bgzf/index/strategy.go000066400000000000000000000040601304417722000165370ustar00rootroot00000000000000// Copyright ©2015 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package index import ( "github.com/biogo/hts/bgzf" ) // MergeStrategy represents a chunk compression strategy. type MergeStrategy func([]bgzf.Chunk) []bgzf.Chunk var ( // Identity leaves the []bgzf.Chunk unaltered. Identity MergeStrategy = identity // Adjacent merges contiguous bgzf.Chunks. Adjacent MergeStrategy = adjacent // Squash merges all bgzf.Chunks into a single bgzf.Chunk. Squash MergeStrategy = squash ) // CompressorStrategy returns a MergeStrategy that will merge bgzf.Chunks // that have a distance between BGZF block starts less than or equal // to near. func CompressorStrategy(near int64) MergeStrategy { return func(chunks []bgzf.Chunk) []bgzf.Chunk { if len(chunks) == 0 { return nil } for c := 1; c < len(chunks); c++ { leftChunk := chunks[c-1] rightChunk := &chunks[c] if leftChunk.End.File+near >= rightChunk.Begin.File { rightChunk.Begin = leftChunk.Begin if vOffset(leftChunk.End) > vOffset(rightChunk.End) { rightChunk.End = leftChunk.End } chunks = append(chunks[:c-1], chunks[c:]...) c-- } } return chunks } } func identity(chunks []bgzf.Chunk) []bgzf.Chunk { return chunks } func adjacent(chunks []bgzf.Chunk) []bgzf.Chunk { if len(chunks) == 0 { return nil } for c := 1; c < len(chunks); c++ { leftChunk := chunks[c-1] rightChunk := &chunks[c] leftEndOffset := vOffset(leftChunk.End) if leftEndOffset >= vOffset(rightChunk.Begin) { rightChunk.Begin = leftChunk.Begin if leftEndOffset > vOffset(rightChunk.End) { rightChunk.End = leftChunk.End } chunks = append(chunks[:c-1], chunks[c:]...) c-- } } return chunks } func squash(chunks []bgzf.Chunk) []bgzf.Chunk { if len(chunks) == 0 { return nil } left := chunks[0].Begin right := chunks[0].End for _, c := range chunks[1:] { if vOffset(c.End) > vOffset(right) { right = c.End } } return []bgzf.Chunk{{Begin: left, End: right}} } hts-1.0.1/bgzf/reader.go000066400000000000000000000376271304417722000150470ustar00rootroot00000000000000// Copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package bgzf import ( "bufio" "bytes" "compress/flate" "compress/gzip" "io" "runtime" "sync" ) // countReader wraps flate.Reader, adding support for querying current offset. type countReader struct { // Underlying Reader. fr flate.Reader // Offset within the underlying reader. off int64 } // newCountReader returns a new countReader. func newCountReader(r io.Reader) *countReader { switch r := r.(type) { case *countReader: panic("bgzf: illegal use of internal type") case flate.Reader: return &countReader{fr: r} default: return &countReader{fr: bufio.NewReader(r)} } } // Read is required to satisfy flate.Reader. func (r *countReader) Read(p []byte) (int, error) { n, err := r.fr.Read(p) r.off += int64(n) return n, err } // ReadByte is required to satisfy flate.Reader. func (r *countReader) ReadByte() (byte, error) { b, err := r.fr.ReadByte() if err == nil { r.off++ } return b, err } // offset returns the current offset in the underlying reader. func (r *countReader) offset() int64 { return r.off } // seek moves the countReader to the specified offset using rs as the // underlying reader. func (r *countReader) seek(rs io.ReadSeeker, off int64) error { _, err := rs.Seek(off, 0) if err != nil { return err } type reseter interface { Reset(io.Reader) } switch cr := r.fr.(type) { case reseter: cr.Reset(rs) default: r.fr = newCountReader(rs) } r.off = off return nil } // buffer is a flate.Reader used by a decompressor to store read-ahead data. type buffer struct { // Buffered compressed data from read ahead. off int // Current position in buffered data. size int // Total size of buffered data. data [MaxBlockSize]byte } // Read provides the flate.Decompressor Read method. func (r *buffer) Read(b []byte) (int, error) { if r.off >= r.size { return 0, io.EOF } if n := r.size - r.off; len(b) > n { b = b[:n] } n := copy(b, r.data[r.off:]) r.off += n return n, nil } // ReadByte provides the flate.Decompressor ReadByte method. func (r *buffer) ReadByte() (byte, error) { if r.off == r.size { return 0, io.EOF } b := r.data[r.off] r.off++ return b, nil } // reset makes the buffer available to store data. func (r *buffer) reset() { r.size = 0 } // hasData returns whether the buffer has any data buffered. func (r *buffer) hasData() bool { return r.size != 0 } // readLimited reads n bytes into the buffer from the given source. func (r *buffer) readLimited(n int, src *countReader) error { if r.hasData() { panic("bgzf: read into non-empty buffer") } r.off = 0 var err error r.size, err = io.ReadFull(src, r.data[:n]) return err } // equals returns a boolean indicating the equality between // the buffered data and the given byte slice. func (r *buffer) equals(b []byte) bool { return bytes.Equal(r.data[:r.size], b) } // decompressor is a gzip member decompressor worker. type decompressor struct { owner *Reader gz gzip.Reader cr *countReader // Current block size. blockSize int // Buffered compressed data from read ahead. buf buffer // Decompressed data. wg sync.WaitGroup blk Block err error } // Read provides the Read method for the decompressor's gzip.Reader. func (d *decompressor) Read(b []byte) (int, error) { if d.buf.hasData() { return d.buf.Read(b) } return d.cr.Read(b) } // ReadByte provides the ReadByte method for the decompressor's gzip.Reader. func (d *decompressor) ReadByte() (byte, error) { if d.buf.hasData() { return d.buf.ReadByte() } return d.cr.ReadByte() } // lazyBlock conditionally creates a ready to use Block. func (d *decompressor) lazyBlock() { if d.blk == nil { if w, ok := d.owner.cache.(Wrapper); ok { d.blk = w.Wrap(&block{owner: d.owner}) } else { d.blk = &block{owner: d.owner} } return } if !d.blk.ownedBy(d.owner) { d.blk.setOwner(d.owner) } } // acquireHead gains the read head from the decompressor's owner. func (d *decompressor) acquireHead() { d.wg.Add(1) d.cr = <-d.owner.head } // releaseHead releases the read head back to the decompressor's owner. func (d *decompressor) releaseHead() { d.owner.head <- d.cr d.cr = nil // Defensively zero the reader. } // wait waits for the current member to be decompressed or fail, and returns // the resulting error state. func (d *decompressor) wait() (Block, error) { d.wg.Wait() blk := d.blk d.blk = nil return blk, d.err } // using sets the Block for the decompressor to work with. func (d *decompressor) using(b Block) *decompressor { d.blk = b; return d } // nextBlockAt makes the decompressor ready for reading decompressed data // from its Block. It checks if there is a cached Block for the nextBase, // otherwise it seeks to the correct location if decompressor is not // correctly positioned, and then reads the compressed data and fills // the decompressed Block. // After nextBlockAt returns without error, the decompressor's Block // holds a valid gzip.Header and base offset. func (d *decompressor) nextBlockAt(off int64, rs io.ReadSeeker) *decompressor { d.err = nil for { exists, next := d.owner.cacheHasBlockFor(off) if !exists { break } off = next } d.lazyBlock() d.acquireHead() defer d.releaseHead() if d.cr.offset() != off { if rs == nil { // It should not be possible for the expected next block base // to be out of register with the count reader unless Seek // has been called, so we know the base reader must be an // io.ReadSeeker. var ok bool rs, ok = d.owner.r.(io.ReadSeeker) if !ok { panic("bgzf: unexpected offset without seek") } } d.err = d.cr.seek(rs, off) if d.err != nil { d.wg.Done() return d } } d.blk.setBase(d.cr.offset()) d.err = d.readMember() if d.err != nil { d.wg.Done() return d } d.blk.setHeader(d.gz.Header) d.gz.Header = gzip.Header{} // Prevent retention of header field in next use. // Decompress data into the decompressor's Block. go func() { d.err = d.blk.readFrom(&d.gz) d.wg.Done() }() return d } // expectedMemberSize returns the size of the BGZF conformant gzip member. // It returns -1 if no BGZF block size field is found. func expectedMemberSize(h gzip.Header) int { i := bytes.Index(h.Extra, bgzfExtraPrefix) if i < 0 || i+5 >= len(h.Extra) { return -1 } return (int(h.Extra[i+4]) | int(h.Extra[i+5])<<8) + 1 } // readMember buffers the gzip member starting the current decompressor offset. func (d *decompressor) readMember() error { // Set the decompressor to Read from the underlying flate.Reader // and mark the starting offset from which the underlying reader // was used. d.buf.reset() mark := d.cr.offset() err := d.gz.Reset(d) if err != nil { d.blockSize = -1 return err } d.blockSize = expectedMemberSize(d.gz.Header) if d.blockSize < 0 { return ErrNoBlockSize } skipped := int(d.cr.offset() - mark) // Read compressed data into the decompressor buffer until the // underlying flate.Reader is positioned at the end of the gzip // member in which the readMember call was made. return d.buf.readLimited(d.blockSize-skipped, d.cr) } // Offset is a BGZF virtual offset. type Offset struct { File int64 Block uint16 } // Chunk is a region of a BGZF file. type Chunk struct { Begin Offset End Offset } // Reader implements BGZF blocked gzip decompression. type Reader struct { gzip.Header r io.Reader // head serialises access to the underlying // io.Reader. head chan *countReader // lastChunk is the virtual file offset // interval of the last successful read // or seek operation. lastChunk Chunk // Blocked specifies the behaviour of the // Reader at the end of a BGZF member. // If the Reader is Blocked, a Read that // reaches the end of a BGZF block will // return io.EOF. This error is not sticky, // so a subsequent Read will progress to // the next block if it is available. Blocked bool // Non-concurrent work decompressor. dec *decompressor // Concurrent work fields. waiting chan *decompressor working chan *decompressor control chan int64 current Block // cache is the Reader block cache. If Cache is not nil, // the cache is queried for blocks before an attempt to // read from the underlying io.Reader. mu sync.RWMutex cache Cache err error } // NewReader returns a new BGZF reader. // // The number of concurrent read decompressors is specified by rd. // If rd is 0, GOMAXPROCS concurrent will be created. The returned // Reader should be closed after use to avoid leaking resources. func NewReader(r io.Reader, rd int) (*Reader, error) { if rd == 0 { rd = runtime.GOMAXPROCS(0) } bg := &Reader{ r: r, head: make(chan *countReader, 1), } bg.head <- newCountReader(r) // Make work loop control structures. if rd > 1 { bg.waiting = make(chan *decompressor, rd) bg.working = make(chan *decompressor, rd) bg.control = make(chan int64, 1) for ; rd > 1; rd-- { bg.waiting <- &decompressor{owner: bg} } } // Read the first block now so we can fail before // the first Read call if there is a problem. bg.dec = &decompressor{owner: bg} blk, err := bg.dec.nextBlockAt(0, nil).wait() if err != nil { return nil, err } bg.current = blk bg.Header = bg.current.header() // Set up work loop if rd was > 1. if bg.control != nil { bg.waiting <- bg.dec bg.dec = nil next := blk.NextBase() go func() { defer func() { bg.mu.Lock() bg.cache = nil bg.mu.Unlock() }() for dec := range bg.waiting { var open bool if next < 0 { next, open = <-bg.control if !open { return } } else { select { case next, open = <-bg.control: if !open { return } default: } } dec.nextBlockAt(next, nil) next = dec.blk.NextBase() bg.working <- dec } }() } return bg, nil } // SetCache sets the cache to be used by the Reader. func (bg *Reader) SetCache(c Cache) { bg.mu.Lock() bg.cache = c bg.mu.Unlock() } // Seek performs a seek operation to the given virtual offset. func (bg *Reader) Seek(off Offset) error { rs, ok := bg.r.(io.ReadSeeker) if !ok { return ErrNotASeeker } if off.File != bg.current.Base() || !bg.current.hasData() { ok := bg.cacheSwap(off.File) if !ok { var dec *decompressor if bg.dec != nil { dec = bg.dec } else { select { case dec = <-bg.waiting: case dec = <-bg.working: blk, err := dec.wait() if err == nil { bg.keep(blk) } } } bg.current, bg.err = dec. using(bg.current). nextBlockAt(off.File, rs). wait() if bg.dec == nil { select { case <-bg.control: default: } bg.control <- bg.current.NextBase() bg.waiting <- dec } bg.Header = bg.current.header() if bg.err != nil { return bg.err } } } bg.err = bg.current.seek(int64(off.Block)) if bg.err == nil { bg.lastChunk = Chunk{Begin: off, End: off} } return bg.err } // LastChunk returns the region of the BGZF file read by the last // successful read operation or the resulting virtual offset of // the last successful seek operation. func (bg *Reader) LastChunk() Chunk { return bg.lastChunk } // BlockLen returns the number of bytes remaining to be read from the // current BGZF block. func (bg *Reader) BlockLen() int { return bg.current.len() } // Close closes the reader and releases resources. func (bg *Reader) Close() error { if bg.control != nil { close(bg.control) close(bg.waiting) } if bg.err == io.EOF { return nil } return bg.err } // Read implements the io.Reader interface. func (bg *Reader) Read(p []byte) (int, error) { if bg.err != nil { return 0, bg.err } // Discard leading empty blocks. This is an indexing // optimisation to avoid retaining useless members // in a BAI/CSI. for bg.current.len() == 0 { bg.err = bg.nextBlock() if bg.err != nil { return 0, bg.err } } bg.lastChunk.Begin = bg.current.txOffset() var n int for n < len(p) && bg.err == nil { var _n int _n, bg.err = bg.current.Read(p[n:]) n += _n if bg.err == io.EOF { if n == len(p) { bg.err = nil break } if bg.Blocked { bg.err = nil bg.lastChunk.End = bg.current.txOffset() return n, io.EOF } bg.err = bg.nextBlock() if bg.err != nil { break } } } bg.lastChunk.End = bg.current.txOffset() return n, bg.err } // nextBlock swaps the current decompressed block for the next // in the stream. If the block is available from the cache // no additional work is done, otherwise a decompressor is // used or waited on. func (bg *Reader) nextBlock() error { base := bg.current.NextBase() ok := bg.cacheSwap(base) if ok { bg.Header = bg.current.header() return nil } var err error if bg.dec != nil { bg.dec.using(bg.current).nextBlockAt(base, nil) bg.current, err = bg.dec.wait() } else { var ok bool for i := 0; i < cap(bg.working); i++ { dec := <-bg.working bg.current, err = dec.wait() bg.waiting <- dec if bg.current.Base() == base { ok = true break } if err == nil { bg.keep(bg.current) bg.current = nil } } if !ok { panic("bgzf: unexpected block") } } if err != nil { return err } // Only set header if there was no error. h := bg.current.header() if bg.current.isMagicBlock() { // TODO(kortschak): Do this more carefully. It may be that // someone actually has extra data in this field that we are // clobbering. bg.Header.Extra = h.Extra } else { bg.Header = h } return nil } // cacheSwap attempts to swap the current Block for a cached Block // for the given base offset. It returns true if successful. func (bg *Reader) cacheSwap(base int64) bool { bg.mu.RLock() defer bg.mu.RUnlock() if bg.cache == nil { return false } blk, err := bg.cachedBlockFor(base) if err != nil { return false } if blk != nil { // TODO(kortschak): Under some conditions, e.g. FIFO // cache we will be discarding a non-nil evicted Block. // Consider retaining these in a sync.Pool. bg.cachePut(bg.current) bg.current = blk return true } var retained bool bg.current, retained = bg.cachePut(bg.current) if retained { bg.current = nil } return false } // cacheHasBlockFor returns whether the Reader's cache has a block // for the given base offset. If the requested Block exists, the base // offset of the following Block is returned. func (bg *Reader) cacheHasBlockFor(base int64) (exists bool, next int64) { bg.mu.RLock() defer bg.mu.RUnlock() if bg.cache == nil { return false, -1 } return bg.cache.Peek(base) } // cachedBlockFor returns a non-nil Block if the Reader has access to a // cache and the cache holds the block with the given base and the // correct owner, otherwise it returns nil. If the Block's owner is not // correct, or the Block cannot seek to the start of its data, a non-nil // error is returned. func (bg *Reader) cachedBlockFor(base int64) (Block, error) { blk := bg.cache.Get(base) if blk != nil { if !blk.ownedBy(bg) { return nil, ErrContaminatedCache } err := blk.seek(0) if err != nil { return nil, err } } return blk, nil } // cachePut puts the given Block into the cache if it exists, it returns // the Block that was evicted or b if it was not retained, and whether // the Block was retained by the cache. func (bg *Reader) cachePut(b Block) (evicted Block, retained bool) { if b == nil || !b.hasData() { return b, false } return bg.cache.Put(b) } // keep puts the given Block into the cache if it exists. func (bg *Reader) keep(b Block) { if b == nil || !b.hasData() { return } bg.mu.RLock() defer bg.mu.RUnlock() if bg.cache != nil { bg.cache.Put(b) } } // Begin returns a Tx that starts at the current virtual offset. func (bg *Reader) Begin() Tx { return Tx{begin: bg.lastChunk.Begin, r: bg} } // Tx represents a multi-read transaction. type Tx struct { begin Offset r *Reader } // End returns the Chunk spanning the transaction. After return the Tx is // no longer valid. func (t *Tx) End() Chunk { c := Chunk{Begin: t.begin, End: t.r.lastChunk.End} t.r = nil return c } hts-1.0.1/bgzf/testdata/000077500000000000000000000000001304417722000150505ustar00rootroot00000000000000hts-1.0.1/bgzf/testdata/e.txt000066400000000000000000003032431304417722000160420ustar00rootroot000000000000002.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274274663919320030599218174135966290435729003342952605956307381323286279434907632338298807531952510190115738341879307021540891499348841675092447614606680822648001684774118537423454424371075390777449920695517027618386062613313845830007520449338265602976067371132007093287091274437470472306969772093101416928368190255151086574637721112523897844250569536967707854499699679468644549059879316368892300987931277361782154249992295763514822082698951936680331825288693984964651058209392398294887933203625094431173012381970684161403970198376793206832823764648042953118023287825098194558153017567173613320698112509961818815930416903515988885193458072738667385894228792284998920868058257492796104841984443634632449684875602336248270419786232090021609902353043699418491463140934317381436405462531520961836908887070167683964243781405927145635490613031072085103837505101157477041718986106873969655212671546889570350354021234078498193343210681701210056278802351930332247450158539047304199577770935036604169973297250886876966403555707162268447162560798826517871341951246652010305921236677194325278675398558944896970964097545918569563802363701621120477427228364896134225164450781824423529486363721417402388934412479635743702637552944483379980161254922785092577825620926226483262779333865664816277251640191059004916449982893150566047258027786318641551956532442586982946959308019152987211725563475463964479101459040905862984967912874068705048958586717479854667757573205681288459205413340539220001137863009455606881667400169842055804033637953764520304024322566135278369511778838638744396625322498506549958862342818997077332761717839280349465014345588970719425863987727547109629537415211151368350627526023264847287039207643100595841166120545297030236472549296669381151373227536450988890313602057248176585118063036442812314965507047510254465011727211555194866850800368532281831521960037356252794495158284188294787610852639813955990067376482922443752871846245780361929819713991475644882626039033814418232625150974827987779964373089970388867782271383605772978824125611907176639465070633045279546618550966661856647097113444740160704626215680717481877844371436988218559670959102596862002353718588748569652200050311734392073211390803293634479727355955277349071783793421637012050054513263835440001863239914907054797780566978533580489669062951194324730995876552368128590413832411607226029983305353708761389396391779574540161372236187893652605381558415871869255386061647798340254351284396129460352913325942794904337299085731580290958631382683291477116396337092400316894586360606458459251269946557248391865642097526850823075442545993769170419777800853627309417101634349076964237222943523661255725088147792231519747780605696725380171807763603462459278778465850656050780844211529697521890874019660906651803516501792504619501366585436632712549639908549144200014574760819302212066024330096412704894390397177195180699086998606636583232278709376502260149291011517177635944602023249300280401867723910288097866605651183260043688508817157238669842242201024950551881694803221002515426494639812873677658927688163598312477886520141174110913601164995076629077943646005851941998560162647907615321038727557126992518275687989302761761146162549356495903798045838182323368612016243736569846703785853305275833337939907521660692380533698879565137285593883499894707416181550125397064648171946708348197214488898790676503795903669672494992545279033729636162658976039498576741397359441023744329709355477982629614591442936451428617158587339746791897571211956187385783644758448423555581050025611492391518893099463428413936080383091662818811503715284967059741625628236092168075150177725387402564253470879089137291722828611515915683725241630772254406337875931059826760944203261924285317018781772960235413060672136046000389661093647095141417185777014180606443636815464440053316087783143174440811949422975599314011888683314832802706553833004693290115744147563139997221703804617092894579096271662260740718749975359212756084414737823303270330168237193648002173285734935947564334129943024850235732214597843282641421684878721673367010615094243456984401873312810107945127223737886126058165668053714396127888732527373890392890506865324138062796025930387727697783792868409325365880733988457218746021005311483351323850047827169376218004904795597959290591655470505777514308175112698985188408718564026035305583737832422924185625644255022672155980274012617971928047139600689163828665277009752767069777036439260224372841840883251848770472638440379530166905465937461619323840363893131364327137688841026811219891275223056256756254701725086349765367288605966752740868627407912856576996313789753034660616669804218267724560530660773899624218340859882071864682623215080288286359746839654358856685503773131296587975810501214916207656769950659715344763470320853215603674828608378656803073062657633469774295634643716709397193060876963495328846833613038829431040800296873869117066666146800015121143442256023874474325250769387077775193299942137277211258843608715834835626961661980572526612206797540621062080649882918454395301529982092503005498257043390553570168653120526495614857249257386206917403695213533732531666345466588597286659451136441370331393672118569553952108458407244323835586063106806964924851232632699514603596037297253198368423363904632136710116192821711150282801604488058802382031981493096369596735832742024988245684941273860566491352526706046234450549227581151709314921879592718001940968866986837037302200475314338181092708030017205935530520700706072233999463990571311587099635777359027196285061146514837526209565346713290025994397663114545902685898979115837093419370441155121920117164880566945938131183843765620627846310490346293950029458341164824114969758326011800731699437393506966295712410273239138741754923071862454543222039552735295240245903805744502892246886285336542213815722131163288112052146489805180092024719391710555390113943316681515828843687606961102505171007392762385553386272553538830960671644662370922646809671254061869502143176211668140097595281493907222601112681153108387317617323235263605838173151034595736538223534992935822836851007810884634349983518404451704270189381994243410090575376257767571118090088164183319201962623416288166521374717325477727783488774366518828752156685719506371936565390389449366421764003121527870222366463635755503565576948886549500270853923617105502131147413744106134445544192101336172996285694899193369184729478580729156088510396781959429833186480756083679551496636448965592948187851784038773326247051945050419847742014183947731202815886845707290544057510601285258056594703046836344592652552137008068752009593453607316226118728173928074623094685367823106097921599360019946237993434210687813497346959246469752506246958616909178573976595199392993995567542714654910456860702099012606818704984178079173924071945996323060254707901774527513186809982284730860766536866855516467702911336827563107223346726113705490795365834538637196235856312618387156774118738527722922594743373785695538456246801013905727871016512966636764451872465653730402443684140814488732957847348490003019477888020460324660842875351848364959195082888323206522128104190448047247949291342284951970022601310430062410717971502793433263407995960531446053230488528972917659876016667811937932372453857209607582277178483361613582612896226118129455927462767137794487586753657544861407611931125958512655759734573015333642630767985443385761715333462325270572005303988289499034259566232975782488735029259166825894456894655992658454762694528780516501720674785417887982276806536650641910973434528878338621726156269582654478205672987756426325321594294418039943217000090542650763095588465895171709147607437136893319469090981904501290307099566226620303182649365733698419555776963787624918852865686607600566025605445711337286840205574416030837052312242587223438854123179481388550075689381124935386318635287083799845692619981794523364087429591180747453419551420351726184200845509170845682368200897739455842679214273477560879644279202708312150156406341341617166448069815483764491573900121217041547872591998943825364950514771379399147205219529079396137621107238494290616357604596231253506068537651423115349665683715116604220796394466621163255157729070978473156278277598788136491951257483328793771571459091064841642678309949723674420175862269402159407924480541255360431317992696739157542419296607312393763542139230617876753958711436104089409966089471418340698362993675362621545247298464213752891079884381306095552622720837518629837066787224430195793793786072107254277289071732854874374355781966511716618330881129120245204048682200072344035025448202834254187884653602591506445271657700044521097735585897622655484941621714989532383421600114062950718490427789258552743035221396835679018076406042138307308774460170842688272261177180842664333651780002171903449234264266292261456004337383868335555343453004264818473989215627086095650629340405264943244261445665921291225648893569655009154306426134252668472594914314239398845432486327461842846655985332312210466259890141712103446084271616619001257195870793217569698544013397622096749454185407118446433946990162698351607848924514058940946395267807354579700307051163682519487701189764002827648414160587206184185297189154019688253289309149665345753571427318482016384644832499037886069008072709327673127581966563941148961716832980455139729506687604740915420428429993541025829113502241690769431668574242522509026939034814856451303069925199590436384028429267412573422447765584177886171737265462085498294498946787350929581652632072258992368768457017823038096567883112289305809140572610865884845873101658151167533327674887014829167419701512559782572707406431808601428149024146780472327597684269633935773542930186739439716388611764209004068663398856841681003872389214483176070116684503887212364367043314091155733280182977988736590916659612402021778558854876176161989370794380056663364884365089144805571039765214696027662583599051987042300179465536788567430285974600143785483237068701190078499404930918919181649327259774030074879681484882342932023012128032327460392219687528340516906974194257614673978110715464186273369091584973185011183960482533518748438923177292613543024932562896371361977285456622924461644497284597867711574125670307871885109336344480149675240618536569532074170533486782754827815415561966911055101472799040386897220465550833170782394808785990501947563108984124144672821865459971596639015641941751820935932616316888380132758752601460507676098392625726411120135288591317848299475682472564885533357279772205543568126302535748216585414000805314820697137262149755576051890481622376790414926742600071045922695314835188137463887104273544767623577933993970632396604969145303273887874557905934937772320142954803345000695256980935282887783710670585567749481373858630385762823040694005665340584887527005308832459182183494318049834199639981458773435863115940570443683515285383609442955964360676090221741896883548131643997437764158365242234642619597390455450680695232850751868719449064767791886720306418630751053512149851051207313846648717547518382979990189317751550639981016466414592102406838294603208535554058147159273220677567669213664081505900806952540610628536408293276621931939933861623836069111767785448236129326858199965239275488427435414402884536455595124735546139403154952097397051896240157976832639450633230452192645049651735466775699295718989690470902730288544945416699791992948038254980285946029052763145580316514066229171223429375806143993484914362107993576737317948964252488813720435579287511385856973381976083524423240466778020948399639946684833774706725483618848273000648319163826022110555221246733323184463005504481849916996622087746140216157021029603318588727333298779352570182393861244026868339555870607758169954398469568540671174444932479519572159419645863736126915526457574786985964242176592896862383506370433939811671397544736228625506803682664135541448048997721373174119199970017293907303350869020922519124447393278376156321810842898207706974138707053266117683698647741787180202729412982310888796831880854367327806879771659111654224453806625861711729498038248879986504061563975629936962809358189761491017145343556659542757064194408833816841111166200759787244137082333917886114708228657531078536674695018462140736493917366254937783014074302668422150335117736471853872324040421037907750266020114814935482228916663640782450166815341213505278578539332606110249802273093636740213515386431693015267460536064351732154701091440650878823636764236831187390937464232609021646365627553976834019482932795750624399645272578624400375983422050808935129023122475970644105678361870877172333555465482598906861201410107222465904008553798235253885171623518256518482203125214950700378300411216212126052726059944320443056274522916128891766814160639131235975350390320077529587392412476451850809163911459296071156344204347133544720981178461451077872399140606290228276664309264900592249810291068759434533858330391178747575977065953570979640012224092199031158229259667913153991561438070129260780197022589662923368154312499412259460023399472228171056603931877226800493833148980338548909468685130789292064242819174795866199944411196208730498064385006852620258432842085582338566936649849720817046135376163584015342840674118587581546514598270228676671855309311923340191286170613364873183197560812569460089402953094429119590295968563923037689976327462283900735457144596414108229285922239332836210192822937243590283003884445701383771632056518351970100115722010956997890484964453434612129224964732356126321951155701565824427661599326463155806672053127596948538057364208384918887095176052287817339462747644656858900936266123311152910816041524100214195937349786431661556732702792109593543055579732660554677963552005378304619540636971842916168582734122217145885870814274090248185446421774876925093328785670674677381226752831653559245204578070541352576903253522738963847495646255940378924925007624386893776475310102323746733771474581625530698032499033676455430305274561512961214585944432150749051491453950981001388737926379964873728396416897555132275962011838248650746985492038097691932606437608743209385602815642849756549307909733854185583515789409814007691892389063090542534883896831762904120212949167195811935791203162514344096503132835216728021372415947344095498316138322505486708172221475138425166790445416617303200820330902895488808516797258495813407132180533988828139346049850532340472595097214331492586604248511405819579711564191458842833000525684776874305916390494306871343118796189637475503362820939949343690321031976898112055595369465424704173323895394046035325396758354395350516720261647961347790912327995264929045151148307923369382166010702872651938143844844532639517394110131152502750465749343063766541866128915264446926222884366299462732467958736383501937142786471398054038215513463223702071533134887083174146591492406359493020921122052610312390682941345696785958518393491382340884274312419099152870804332809132993078936867127413922890033069995875921815297612482409116951587789964090352577345938248232053055567238095022266790439614231852991989181065554412477204508510210071522352342792531266930108270633942321762570076323139159349709946933241013908779161651226804414809765618979735043151396066913258379033748620836695475083280318786707751177525663963479259219733577949555498655214193398170268639987388347010255262052312317215254062571636771270010760912281528326508984359568975961038372157726831170734552250194121701541318793651818502020877326906133592182000762327269503283827391243828198170871168108951187896746707073377869592565542713340052326706040004348843432902760360498027862160749469654989210474443927871934536701798673920803845633723311983855862638008516345597194441994344624761123844617615736242015935078520825600604101556889899501732554337298073561699861101908472096600708320280569917042590103876928658336557728758684250492690370934262028022399861803400211320742198642917383679176232826444645756330336556777374808644109969141827774253417010988435853189339175934511574023847292909015468559163792696196841000676598399744972047287881831200233383298030567865480871476464512824264478216644266616732096012564794514827125671326697067367144617795643752391742928503987022583734069852309190464967260243411270345611114149835783901793499713790913696706497637127248466613279908254305449295528594932793818341607827091326680865655921102733746700132583428715240835661522165574998431236278287106649401564670141943713823863454729606978693335973109537126499416282656463708490580151538205338326511289504938566468752921135932220265681856418260827538790002407915892646028490894922299966167437731347776134150965262448332709343898412056926145108857812249139616912534202918139898683901335795857624435194008943955180554746554000051766240202825944828833811886381749594284892013520090951007864941868256009273977667585642598378587497776669563350170748579027248701370264203283965756348010818356182372177082236423186591595883669487322411726504487268392328453010991677518376831599821263237123854357312681202445175401852132663740538802901249728180895021553100673598184430429105288459323064725590442355960551978839325930339572934663055160430923785677229293537208416693134575284011873746854691620648991164726909428982971065606801805807843600461866223562874591385185904416250663222249561448724413813849763797102676020845531824111963927941069619465426480006761727618115630063644321116224837379105623611358836334550102286170517890440570419577859833348463317921904494652923021469259756566389965893747728751393377105569802455757436190501772466214587592374418657530064998056688376964229825501195065837843125232135309371235243969149662310110328243570065781487677299160941153954063362752423712935549926713485031578238899567545287915578420483105749330060197958207739558522807307048950936235550769837881926357141779338750216344391014187576711938914416277109602859415809719913429313295145924373636456473035037374538503489286113141638094752301745088784885645741275003353303416138096560043105860548355773946625033230034341587814634602169235079216111013148948281895391028916816328709309713184139815427678818067628650978085718262117003140003377301581536334149093237034703637513354537634521050370995452942055232078817449370937677056009306353645510913481627378204985657055608784211964039972344556458607689515569686899384896439195225232309703301037277227710870564912966121061494072782442033414057441446459968236966118878411656290355117839944070961772567164919790168195234523807446299877664824873753313018142763910519234685081979001796519907050490865237442841652776611425351538665162781316090964802801234493372427866930894827913465443931965254154829494577875758599482099181824522449312077768250830768282335001597040419199560509705364696473142448453825888112602753909548852639708652339052941829691802357120545328231809270356491743371932080628731303589640570873779967845174740515317401384878082881006046388936711640477755985481263907504747295012609419990373721246201677030517790352952793168766305099837441859803498821239340919805055103821539827677291373138006715339240126954586376422065097810852907639079727841301764553247527073788764069366420012194745702358295481365781809867944020220280822637957006755393575808086318932075864444206644691649334467698180811716568665213389686173592450920801465312529777966137198695916451869432324246404401672381978020728394418264502183131483366019384891972317817154372192103946638473715630226701801343515930442853848941825678870721238520597263859224934763623122188113706307506918260109689069251417142514218153491532129077723748506635489170892850760234351768218355008829647410655814882049239533702270536705630750317499788187009989251020178015601042277836283644323729779929935160925884515772055232896978333126427671291093993103773425910592303277652667641874842441076564447767097790392324958416348527735171981064673837142742974468992320406932506062834468937543016787815320616009057693404906146176607094380110915443261929000745209895959201159412324102274845482605404361871836330268992858623582145643879695210235266673372434423091577183277565800211928270391042391966426911155333594569685782817020325495552528875464466074620294766116004435551604735044292127916358748473501590215522120388281168021413865865168464569964810015633741255098479730138656275460161279246359783661480163871602794405482710196290774543628092612567507181773641749763254436773503632580004042919906963117397787875081560227368824967077635559869284901628768699628053790181848148810833946900016380791075960745504688912686792812391148880036720729730801354431325347713094186717178607522981373539126772812593958220524289991371690685650421575056729991274177149279608831502358697816190894908487717722503860872618384947939757440664912760518878124233683125467278331513186758915668300679210215947336858591201395360301678110413444411030903388761520488296909104689167671555373346622545575975202624771242796225983278405833585897671474205724047439720232895903726148688388003174146490203843590358527993123871042845981608996101945691646983837718267264685264869172948414153004604004299585035164101899027529366867431834955447458124140190754681607770977920579383895378192128847409929537040546962226547278807248685508046571043123854873351653070570784584243335550958221912862797205455466267099131902370311779690892786623112661337671178512943059323281605826535623848164192144732543731002062738466812351691016359252588256806438946389880872735284406462208149513862275239938938734905082625472417781702582044129853760499827899020083498387362992498125742354568439023012261733665820546785671147973065077035475620567428300187473019197310881157516777005071432012726354601912460800451608108641835539669946936947322271670748972850464195392966434725254724357659192969949061670189061433616907056148280980363243454128229968275980226694045642181328624517549652147221620839824594576613342710564957193564431561774500828376935700995419541839029151033187933907614207467028867968594985439789457300768939890070073924697461812855764662265412913204052279071212820653775058280040897163467163709024906774736309136904002615646432159560910851092445162454420141442641660181385990017417408244245378610158433361777292580611159192008414091888191208858207627011483671760749046980914443057262211104583300789331698191603917150622792986282709446275915009683226345073725451366858172483498470080840163868209726371345205439802277866337293290829914010645589761697455978409211409167684020269370229231743334499986901841510888993165125090001163719114994852024821586396216294981753094623047604832399379391002142532996476235163569009445086058091202459904612118623318278614464727795523218635916551883057930657703331498510068357135624341881884405780028844018129031378653794869614630467726914552953690154167025838032477842272417994513653582260971652588356712133519546838335349801503269359798167463231847628306340588324731228951257944267639877946713121042763380872695738609314631539148548792514028885025189788076023838995615684850391995855029256054176767663145354058496296796781349420116003325874431438746248313850214980401681940795687219268462617287403480967931949965604299190281810597603263251746405016454606266765529010639868703668263299050577706266397868453584384057673298268163448646707439990917504018892319267557518354054956017732907127219134577524905771512773358423314008356080926962298894163047287780054743798498545562870729968407382937218623831766524716090967192007237658894226186550487552614557855898773008703234726418384831040394818743616224455286163287628541175946460497027724490799275146445792982549802258601001772437840167723166802004162547244179415547810554178036773553354467030326469619447560812831933095679685582771932031205941616693902049665352189672822671972640029493307384717544753761937017882976382487233361813499414541694736549254840633793674361541081593464960431603544354737728802361047743115330785159902977771499610274627769759612488879448609863349422852847651310277926279743981957617505591300993377368240510902583759345170015340522266144077237050890044496613295859536020556034009492820943862994618834790932894161098856594954213114335608810239423706087108026465913203560121875933791639666437282836752328391688865373751335794859860107569374889645657187292540448508624449947816273842517229343960137212406286783636675845331904743954740664015260871940915743955282773904303868772728262065663129387459875317749973799293043294371763801856280061141619563942414312254397099163565102848315765427037906837175764870230052388197498746636856292655058222887713221781440489538099681072143012394693530931524054081215705402274414521876541901428386744260011889041724570537470755550581632831687247110220353727166112304857340460879272501694701067831178927095527253222125224361673343366384756590949728221809418684074238351567868893421148203905824224324264643630201441787982022116248471657468291146315407563770222740135841109076078464780070182766336227978104546331131294044833570134869585165267459515187680033395522410548181767867772152798270250117195816577603549732923724732067853690257536233971216884390878879262188202305529937132397194333083536231248870386416194361506529551267334207198502259771408638122015980894363561808597010080081622557455039101321981979045520049618583777721048046635533806616517023595097133203631578945644487800945620369784973459902004606886572701865867757842758530645706617127194967371083950603267501532435909029491516973738110897934782297684100117657987098185725131372267749706609250481876835516003714638685918913011736805218743265426063700710595364425062760458252336880552521181566417553430681181548267844169315284408461087588214317641649835663127518728182948655658524206852221830755306118393326934164459415342651778653397980580828158806300749952897558204686612590853678738603318442905510689778698417735603118111677563872589911516803236547002987989628986181014596471307916144369564690909518788574398821730583884980809523077569358851616027719521488998358632323127308909861560777386006984035267826785387215920936255817889813416247486456433211043194821421299793188104636399541496539441501383868748384870224681829391860319598667962363489309283087840712400431022706137591368056518861313458307990705003607588327248867879324093380071864152853317943535073401891193638546730000660453783784472469288830546979000131248952100446949032058838294923613919284305249167833012980192255157050378521810552961623637523647962685751660066539364142273063001648652613891842243501797455993616794063303522111829071597538821839777552812981538570168702202620274678647916644030729018445497956399844836807851997088201407769199261674991148329821854382718946282165387064858588646221611410343570342878862979083418871606214430014533275029715104673156021000043869510583773779766003460887624861640938645252177935289947578496255243925598620521409052346250847830487046492688313289470553891357290706967599556298586669559721686506052072801342104355762779184021797626656484580261591407173477009039475168017709900129391137881248534255949312866653465033728846390649968460644741907524313323903404908195233044389559060547854954620263256676813262435925020249516275607080900436460421497025691488555265022810327762115842282433269528629137662675481993546118143913367579700141255870143319434764035725376914388899683088262844616425575034001428982557620386364384137906519612917777354183694676232982904981261717676191554292570438432239918482261744350470199171258214687683172646078959690569981353264435973965173473319484798758064137926885413552523275720457329477215706850016950046959758389373527538622664943456437071610511521617176237598050900553232154896062817794302268640579555845730600598376482703339859420098582351400179507104569019191359062304102336798080907240196312675268916362136351032648077232914950859151265812143823371072949148088472355286394195993455684156344577951727033374238129903260198160571971183950662758220321837136059718025940870615534713104482272716848395524105913605919812444978458110854511231668173534838253724825347636777581712867205865148285317273569069839935110763432091319780314031658897379628301178409806410175016511072932907832177487566289310650383806093372841399226733384778203302020700517188941706465146238366720632742644336612174011766914919235570905644803016342294301837655263108450172510307540942604409687066288066265900569082451407632599158164499361455172452057020443093722305550217222299706209749268609762787409626448772056043078634808885709143464793241536214303199965695610753570417207285334250171325558818113295504095217830139465216436594262960768570585698507157151317262928960072587601564840556088613165411835958628710665496282599535127193244635791046554389165150954187306071015034430609582302257455974944275067630926322529966338219395202927917973247094559691016402983683080426309910481567503623509654924302589575273521412445149542462972258510120707802110188106722347972579330653187713438466713807546383471635428854957610942841898601794658721444495198801550804042506452191484989920400007310672369944655246020908767882300064337725657385010969899058191290957079866699453765080407917852438222041070599278889267745752084287526377986730360561230710723922581504781379172731261234878334034473833573601973235946604273704635201327182592410906040097638585857716958419563109577748529579836844756803121874818202833941887076311731615289811756429711334181497218078040465077657204457082859417475114926179367379999220181789399433337731146911970737861041963986422166045588965683206701337505745038872111332436739840284188639147633491695114032583475841514170325690161784931455706904169858050217798497637014758914810543205854914100662201721719726878930012101267481270235940855162601689425111458499658315589660460091525797881670384625905383256920520425791378948827579603278877535466861441826827797651258953563761485994485049706638406266121957141911063246061774180577212381659872472432252969098533628440799030007594546281549235506086481557928961969617060715201589825299772803520002610888814176506636216905928021516429198484077446143617891415191517976537848282687018750030264867608433204658525470555882410254654806040437372771834769014720664234434374255514129178503032471263418076525187802925534774001104853996960549926508093910691337614841834884596365621526610332239417467064368340504749943339802285610313083038484571294767389856293937641914407036507544622061186499127249643799875806537850203753189972618014404667793050140301580709266213229273649718653952866567538572115133606114457222800851183757899219543063413692302293139751143702404830227357629039911794499248480915071002444078482866598579406525539141041497342780203520135419925977628178182825372022920108186449448349255421793982723279357095828748597126780783134286180750497175747373730296280477376908932558914598141724852658299510882230055223242218586191394795184220131553319634363922684259164168669438122537135960710031743651959027712571604588486044820674410935215327906816032054215967959066411120187618531256710150212239401285668608469435937408158536481912528004920724042172170913983123118054043277015835629513656274610248827706488865037765175678806872498861657094846665770674577000207144332525555736557083150320019082992096545498737419756608619533492312940263904930982014700371161829485939931199955070455381196711289367735249958182011774799788636393286405807810818657337668157893827656450642917396685579555053188715314552353070355994740186225988149854660737787698781542360397080977412361518245964026869979609564523828584235953564615185448165799966460648261396618720304839119560250381111550938420209894591555760083897989949964566262540514195610780090298667014635238532066032574466820259430618801773091109212741138269148784355679352572808875543164693077235363768226036080174040660997151176880434927489197133087822951123746632635635328517394189466510943745768270782209928468034684157443127739811044186762032954475468077511126663685479944460934809992951875666499902261686019672053749149951226823637895865245462813439289338365156536992413109638102559114643923805213907862893561660998836479175633176725856523591069520326895990054884753424160586689820067483163174286329119633399132709086065074595260357157323069712106423424081597068328707624437165532750228797802598690981111226558888151520837482450034463046505984569690276166958278982913613535306291331427881888249342136442417833519319786543940201465328083410341785272489879050919932369270996567133507711905899945951923990615156165480300145359212550696405345263823452155999210578191371030188979206408883974767667144727314254467923500524618849237455307575734902707342496298879996942094595961008702501329453325358045689285707241207965919809225550560061971283541270202072583994171175520920820151096509526685113897577150810849443508285458749912943857563115668324566827992991861539009255871716840495663991959154034218364537212023678608655364745175654879318925644085274489190918193411667583563439758886046349413111875241038425467937999203546910411935443113219136068129657568583611774564654674861061988591414805799318725367531243470335482637527081353105570818049642498584646147973467599315946514787025065271083508782350656532331797738656666181652390017664988485456054961300215776115255813396184027067814900350252876823607822107397102339146870159735868589015297010347780503292154014359595298683404657471756232196640515401477953167461726208727304820634652469109953327375561090578378455945469160223687689641425960164689647106348074109928546482353083540132332924864037318003195202317476206537726163717445360549726690601711176761047774971666890152163838974311714180622222345718567941507299526201086205084783127474791909996889937275229053674785020500038630036526218800670926674104806027341997756660029427941090400064654281074454007616429525362460261476180471744322889953285828397762184600967669267581270302806519535452053173536808954589902180783145775891280203970053633193821100095443241244197949192916205234421346395653840781209416214835001155883618421164283992454027590719621537570187067083731012246141362048926555668109467076386536083015847614512581588569610030337081197058344452874666198891534664244887911940711423940115986970795745946337170243268484864632018986352827092313047089215684758207753034387689978702323438584381125011714013265769320554911860153519551654627941175593967947958810333935413289702528893533748106257875620364294270257512121137330213811951395756419122685155962476203282038726342066227347868223036522019655729325905068134849292299647248229359787842720945578267329975853818536442370617353517653060396801087899490506654491544577952166038552398013798104340564182403396162494910454712104839439200945914647542424785991096900046541371091630096785951563947332190934511838669964622788855817353221326876634958059123761251203010983867841195725887799206041260049865895027247133146763722204388398558347770112599424691208308595666787531942465131444389971195968105937957532155524204659410081418351120174196853432672343271868099625045432475688702055341969199545300952644398446384346598830418262932239295612610045884644244285011551557765935780379565026806130721758672048541797157896401554276881090475899564605488362989140226580026134158039480357971019004151547655018391755772677897148793477372747525743898158705040701968215101218826088040084551332795162841280679678965570163917067779841529149397403158167896865448841319046368332179115059107813898261026271979696826411179918656038993895418928488851750122504754778999508544083983800725431468842988412616042682248823097788556495765424017114510393927980290997604904428832198976751320535115230545666467143795931915272680278210241540629795828828466355623580986725638200565215519951793551069127710538552661926903526081367717666435071213453983711357500975854405939558661737828297120544693182260401670308530911657973113259516101749193468250063285777004686987177255226525708428745733039859744230639751837209975339055095883623642814493247460522424051972825153787541962759327436278819283740253185668545040893929401040561666867664402868211607294830305236465560955351079987185041352121321534713770667681396211443891632403235741573773787908838267618458756361026435182951815392455211729022985278518025598478407179607904114472041476091765804302984501746867981277584971731733287305281134969591668387877072315968334322509070204019030503595891994666652037530271923764252552910347950343816357721698115464329245608951158732012675424975710520894362639501382962152214033621065422821876739580121286442788547491928976959315766891987305176388698461503354594898541849550251690616888419122873385522699976822609645007504500096116866129171093180282355042553653997166054753907348915189650027442328981181709248273610863801576007240601649547082331349361582435128299050405405333992577071321011503713898695076713447940748097845416328110406350804863393555238405735580863718763530261867971725608155328716436111474875107033512913923595452951407437943144900950809932872153235195999616750297532475931909938012968640379783553559071355708369947311923538531051736669154087312467233440702525006918026747725078958903448856673081487299464807786497709361969389290891718228134002845552513917355978456150353144603409441211512001738697261466786933733154341007587514908295822756919350542184106448264951943804240543255345965248373785310657979037977505031436474651422484768831323479762673689855474944277949916560108528257618964374464656819789319422077536824661110427671936481836360534108748971066866318805026555929568123959680449295166615409802610781691689418764353363449482900125929366840591370059526914934421861891742142561071896846626335874414976973921566392767687720145153302241853125308442727245771161505550519076276250016522166274796257424425420546785767478190959486500575711016264847833741198041625940813327229905891486422127968042984725356237202887830051788539737909455265135144073130049869453403245984236934627060242579432563660640597549471239092372458126154582526667304702319359866523378856244229188278436440434628094888288712101968642736370461639297485616780079779959696843367730352483047478240669928277140069031660709951473154191919911453182543906294573298686613524886500574780251977607442660798300291573030523199052185718628543687577860915726925232573171665625274275808460620177046433101212443409281314659760221360416223031167750085960128475289259463348312408766740128170543067985261868949895004918275008304998926472034986965363326210919830621495095877228260815566702155693484634079776879525038204442326697479264829899016938511552124688935873289878336267819361764023681714606495185508780596635354698788205094762016350757090024201498400967867845405354130050482404996646978558002628931826518708714613909521454987992300431779500489569529280112698632533646737179519363094399609176354568799002814515169743717518330632232942199132137614506411391269837128970829395360832883050256072727563548374205497856659895469089938558918441085605111510354367477810778500572718180809661542709143010161515013086522842238721618109043183163796046431523184434669799904865336375319295967726080853457652274714047941973192220960296582500937408249714373040087376988068797038047223488825819819025644086847749767508999164153502160223967816357097637814023962825054332801828798160046910336602415904504637333597488119998663995617171089911809851197616486499233594328274275983382931099806461605360243604040848379619072542165869409486682092396143083817303621520642297839982533698027039931804024928814430649614747600087654305571672697259114631990688823893005380061568007730984416061355843701277573463708822073792921409548717956947854414951731561828176343929570234710460088230637509877521391223419548471196982303169544468045517922669260631327498272520906329003279972932906827204647650366969765227673645419031639887433042226322021325368176044169612053532174352764937901877252263626883107879345194133825996368795020985033021472307603375442346871647223795507794130304865403488955400210765171630884759704098331306109510294140865574071074640401937347718815339902047036749084359309086354777210564861918603858715882024476138160390378532660185842568914109194464566162667753712365992832481865739251429498555141512136758288423285957759412684479036912662015308418041737698963759002546999454131659341985624780714434977201991702665380714107259910648709897259362243300706760476097690456341576573395549588448948093604077155688747288451838106069038026528318275560395905381507241627615047252487759578650784894547389096573312763852962664517004459626327934637721151028545472312880039058405918498833810711366073657536918428084655898982349219315205257478363855266205400703561310260405145079325925798227406012199249391735122145336707913500607486561657301854049217477162051678486507913573336334257685988361252720250944019430674728667983441293018131344299088234006652915385763779110955708000600143579956351811596764725075668367726052352939773016348235753572874236648294604770429166438403558846422370760111774821079625901180265548868995181239470625954254584491340203400196442965370643088660925268811549596291166168612036195319253262662271108142149856132646467211954801142455133946382385908540917878668826947602781853283155445565265933912487885639504644196022475186011405239187543742526581685003052301877096152411653980646785444273124462179491306502631062903402737260479940181929954454297256377507172705659271779285537195547433852182309492703218343678206382655341157162788603990157495208065443409462446634653253581574814022471260618973060860559065082163068709634119751925774318683671722139063093061019303182326666420628155129647685313861018672921889347039342072245556791239578260248978371473556820782675452142687314252252601795889759116238720807580527221031327444754083319215135934526961397220564699247718289310588394769170851420631557192703636345039529604362885088555160008371973526383838996789184600327073682083234847108471706160879195227388252347506380811606090840124222431476103563328940609282430125462013806032608121942876847907192546246309055749298781661271916548229644317263587524548607563020667656942355342774617635549231817456159185668061686428714964129290560130053913469569829490891003991259088290348791943368696942620662946948514931472688923571615032405542263391673583102728579723061998175868700492227418629077079508809336215346303842967525604369606110193842723883107587771653594778681499030978765900869583480043137176832954871752604714113064847270887246697164585218774442100900090916189819413456305028950484575822161887397443918833085509908566008543102796375247476265353031558684515120283396640547496946343986288291957510384781539068343717740714095628337554413567955424664601335663617305811711646062717854078898495334329100315985673932305693426085376230981047171826940937686754301837015557540822371538037838383342702379535934403549452173960327095407712107332936507766465603712364707109272580867897181182493799540477008369348889220963814281561595610931815183701135104790176383595168144627670903450457460997444500166918675661035889313483800512736411157304599205955471122443903196476642761038164285918037488354360663299436899730090925177601162043761411616688128178292382311221745850238080733727204908880095181889576314103157447684338100457385008523652069340710078955916549813037292944462306371284357984809871964143085146878525033128989319500645722582281175483887671061073178169281242483613796475692482076321356427357261609825142445262515952514875273805633150964052552659776922077806644338105562443538136258941809788015677378951310313157361136026047890761945591820289365770116416881703644242694283057457471567494391573593353763114830246668754727566653059819746822346578699972291792416156043557665183382167059157867799311835820189855730344883681934418305987021880502259192818047775223884407167894780414701414651073580452021499197980812095692195622632313741870979731320870864552236740416185590793816745658234353037283309503729022429802768451559528656923189798000383061378732434546500582722712325031420712488100290697226311129067629080951145758060270806092801504406139446350643069742785469477459876821004441453438033759717384777232052065301037861326418823586036569054773343070911759152582503029410738914441818378779490613137536794654893375260322906277631983337976816641721083140551864133302224787118511817036598365960493964571491686005656771360533192423185262166760222073368844844409234470948568027905894191829969467724456269443308241243846160408284006424867072583661011433404214473683453638496544701067827313169538435919120440283949541956874453676459875488726170687163109591315801609722382049772577307454562979127906177531663252857205858766376754282917933549923678212008601904369428956102301731743150352204665675088491593025926618816581008701658499456495586855628208747248318351516339189292646558880593601275151838235485893426165223086697314511412035659916934103076974774451947043836739600076578628245472064617380804602903639144493859012422380173377038154675297645596518492676039300171943042511794045679862114630138402371099347243455794730048929825402680821621522346560274258486595687074510352794291633405915025075992398611224340312056999780516223878772230396359709132856830486160362127579561601328561866388146004722200580017580282279272167842720649966956840905752590774886105493806116954293569077377792821084159737469613143291808510446953973485067590503662391722108732333169909603363771705474725026941732982890400239372879549386540463828596742216318201530139629734398479588628632934746650690284066719018081265539973675916799759010867483920062877888531102781695087545740384607594616919584610655963327283485609570305572502494416337066573150237126843581984154103154401008430380631442183776750349813408169325201240813452285974626715177152223063741359255747513535160669108359443999692315898156732033027129284241219651936303734407981204656795322986357374589031654007016472204989445629050395873788912680565516464274460174738175296313458739390484560414203426465560422112239134631023161290836446988901247285192778589195228773637440432659264672239982186452797664826673070168802722052338600372842903155828454593854349099449420750911108532138744823216151007808922516285123275724355101999038195993350032641446053470357293073912578481757987468353429629749652545426864234949270336399427519354240001973125098882419600095766257217621860474573769577649582201796258392376391717855799468922496750179251915218219624653575570564228220399546682648329822996167217080156801080799777126517156274295763666959661983507435667132218383358509536665806605597148376773866922551603463644386269977295750658468929599809168949981898588529537874489519527097766262684177088590284321676352132630838812766335363319004134332844347630067982023716933653652880580156390360562722752187272454764258840995216482554453662083811789117725225682611478014242896970967121967502094421226279437073328703410646312100557376727450271638975234111426287828736758358819056742163061523416789476056879277154789714326222041069587947186435439940738639948986836168919377836648327137363654676901173760246643082285362494712605173293777247276797635865806019396287718060679122426813922872134061694882029506831654589707623668302556167559477498715183426989208952182644710514911419441192277010977616645850068963849426165593473112961064282379048216056210094265076173838082479030510998790719611852832556787472942907151041468948104916751035295897242381802288151276582257190705537652455285511598636421244284176256230139538669970308943645907600684938040875210854159851278070333207779865635907968462191534944587677170063778573171211036517486371634098385626541555573292664616402279791195975248525300376741774056125700303625811704838385391207273191845064713669122576415213769896260940351804147432053600369234179035440735703058314741623452840188940808983125191307741823338981880316339159565954543405777784331681162551898060409183018907512170192983622897099598983405484962284289398469847938668614293324543983592637036699355184231661615244505980576745765335552338715678211466689996845227042954589710922163652573965950289645637766038988037941517917867910675199009966139206238732318786758420544279396366759104126821843375015743069045967947046685602358283919759975285865384338189120042853787549302768972168199113340697282255535300044743958830079799736518459131437946494086272149669719100359399974735262764126125995350902609540048669398955899487421379590802893196914845826873123710180229775301190684280440780938156598081694611679374425663244656799606363751546304833112722231812338371779800439731087402647536582575657351059978314264831879619843765495877803685261751835391844920488198629786329743136948511780579298636452193232481339393090754566368038513630619718033957979522539508697432546502659123585049283028832934489284591373621624852528877442891851104093746333590660233239711922814450735588373324057814862662207486215513375036775585494138678352928273109003823116855374520901095101174796663003330352534143230024288248051396631446632656081582045216883922312025671065388459503224002320453633895521539919011035217362720909565500846486605368975498478995875596103167696587161281951919668893326641203784750417081752273735270989343717167642329956935697166213782736138899530515711822960896394055380431939398453970864418654291655853168697537052760701061488025700785387150835779480952313152747735711713643356413242974208137266896149109564214803567792270566625834289773407718710649866150447478726164249976671481383053947984958938064202886667951943482750168192023591633247099185942520392818083953020434979919361853380201407072481627304313418985942503858404365993281651941497377286729589582881907490040331593436076189609669494800067194371424058105327517721952474344983414191979918179909864631583246021516575531754156198940698289315745851842783390581029411600498699307751428513021286202539508732388779357409781288187000829944831476678183644656510024467827445695591845768068704978044824105799710771577579093525803824227377612436908709875189149049904225568041463131309240101049368241449253427992201346380538342369643767428862595140146178201810734100565466708236854312816339049676558789901487477972479202502227218169405159042170892104287552188658308608452708423928652597536146290037780167001654671681605343292907573031466562485809639550080023347676187068086526878722783177420214068980703410506200235273632267291964034093571225623659496432076928058165514428643204955256838543079254299909353199329432966018220787933122323225928276556048763399988478426451731890365879756498207607478270258861409976050788036706732268192473513646356758611212953074644777149423343867876705824452296605797007134458987594126654609414211447540007211790607458330686866231309155780005966522736183536340439991445294960728379007338249976020630448806064574892740547730693971337007962746135534442514745423654662752252624869916077111131569725392943756732215758704952417232428206555322808868670153681482911738542735797154157943689491063759749151524510096986573825654899585216747260540468342338610760823605782941948009334370046866568258579827323875158302566720152604684361412652956519894291184887986819088277339147282063794512260294515707367105637720023427811802621502691790400488001808901847311751199425460594416773315777951735444490965752131026306836047140331442314298077895617051256930051804287472368435536402764392777908638966566390166776625678575354239947427919442544664643315554138265543388487778859972063679660692327601733858843763144148113561693030468420017434061395220072403658812798249143261731617813894970955038369479594617979829257740992171922783223006387384996138434398468502234780438733784470928703890536420557474836284616809363650973790900204118525835525201575239280826462555785658190226958376345342663420946214426672453987171047721482128157607275305173330963455909323664528978019175132987747952929099598069790148515839540444283988381797511245355548426126784217797728268989735007954505834273726937288386902125284843370917479603207479554080911491866208687184899550445210616155437083299502854903659617362726552868081324793106686855857401668022408227992433394360936223390321499357262507480617409173636062365464458476384647869520547719533384203403990244761056010612777546471464177412625548519830144627405538601855708359981544891286863480720710061787059669365218674805943569985859699554089329219507269337550235821561424994538234781138316591662683103065194730233419384164076823699357668723462219641322516076261161976034708844046473083172682611277723613381938490606534404043904909864126903479263503943531836741051762565704797064478004684323069430241749029731181951132935746854550484711078742905499870600373983113761544808189067620753424526993443755719446665453524088287267537759197074526286322840219629557247932987132852479994638938924943286917770190128914220188747760484939855471168524810559991574441551507431214406120333762869533792439547155394213121021954430556748370425907553004950664994802614794524739012802842646689229455664958621308118913500279654910344806150170407268010067948926855360944990373928383520627992820181576427054962997401900837493444950600754365525758905546552402103412862124809003162941975876195941956592556732874237856112669741771367104424821916671499611728903944393665340294226514575682907490402153401026923964977275904729573320027982816062130523130658731513076913832317193626664465502290735017347656293033318520949298475227462534564256702254695786484819977513326393221579478212493307051107367474918016345667888810782101151826314878755138027101379868751299375133303843885631415175908928986956197561123025310875057188962535763225834275763348421016668109884514141469311719314272028007223449941999003964948245457520704922091620614222912795322688239046498239081592961111003756999529251250673688233852648213896986384052437049402152187547825163347082430303521036927849762517317825860862215614519165573478940019558704784741658847364803865995119651409542615026615147651220820245816010801218275982577477652393859159165067449846149161165153821266726927461290533753163055654440793427876550267301214578324885948736899073512166118397877342715872870912311383472485146035661382188014840560716074652441118841800734067898587159273982452147328317214621907330492060817440914125388918087968538960627860118193099489240811702350413554126823863744341209267781729790694714759018264824761112414556423937732224538665992861551475342773370683344173073150805440138894084087253197595538897613986400165639906934600670780501058567196636796167140097031535132386972899001749862948883362389858632127176571330142071330179992326381982094042993377790345261665892577931395405145369730429462079488033141099249907113241694504241391265397274078984953073730364134893688060340009640631540701820289244667315059736321311926231179142794944897281477264038321021720718017561601025111179022163703476297572233435788863537030535008357679180120653016668316780269873860755423748298548246360981608957670421903145684942967286646362305101773132268579232832164818921732941553151386988781837232271364011755881332524294135348699384658137175857614330952147617551708342432434174779579226338663454959438736807839569911987059388085500837507984051126658973018149321061950769007587519836861526164087252594820126991923916722273718430385263107266000047367872474915828601694439920041571102706081507270147619679971490141639274282889578424398001497985658130305740620028554097382687819891158955487586486645709231721825870342960508203415938806006561845735081804032347750084214100574577342802985404049555529215986404933246481040773076611691605586804857302606467764258503301836174306413323887707999698641372275526317649662882467901094531117120243890323410259937511584651917675138077575448307953064925086002835629697045016137935696266759775923436166369375035368699454550392874449940328328128905560530091416446608691247256021455381248285307613556149618444364923014290938289373215312818797541139219415606631622784836152140668972661027123715779503062132916001988806369127647416567067485490795342762338253943990022498972883660263920518704790601584084302914787302246651371144395418253441269003331181914268070735159284180415100555199146564934872796969351992963117195821262627236458009708099166752820365818699111948365866102758375863322993225541477479210421324166848264953111826527351008031659958888814809945737293785681411438021523876706455063233067233939551964260397443829874822322662036352861302543796600943104500158604854027036789711934695579989189112302233381602302236277726084846296189550730850698061500281436425336666311433321645213882557346329366870956708432252564333895997812402164189946978348320376011613913855499933990786652305860332060641949298931012423081105800169745975038516887112037747631577311831360002742502722451570906304496369230938382329175076469684003556425503797106891999812319602533733677437970687713814747552190142928586781724044248049323750330957002929126630316970587409214456472022710796484778657310660832173093768033821742156446602190335203981531618935787083561603302255162155107179460621892674335641960083663483835896703409115513087820138723494714321400450513941428998350576038799343355677628023346565854351219361896876831439866735726040869511136649881229957801618882834124004126142251475184552502502640896823664946401177803776799157180146386554733265278569418005501363433953502870836220605121839418516239153709790768084909674194289061134979961034672077354959593868862427986411437928435620575955500144308051267664432183688321434583708549082240014585748228606859593502657405750939203135881722442164955416889785558265198046245527898343289578416968890756237467281044803018524217706136533236073856228166664597654076844715963930782091017090763377917711485205493367936868430832404126789220929930411890501756484917499452393770674524578019171841679541825554377930299249277892416277257788147974770446005423669346157135208417428211847353652367573702352791459837645712257646122605628127852169580892808988394594406165340521932514843306105322700231133680378433377389724881307874325614952744243584753011150345103737688223837573804282007358586938044331529253129961025096113761670187568525921208929131354473196308440066835155160913925692912175784379179004808848023029304392630921342768601226558630456913133560978156776098711809238440656353136182676923761613389237802972720736243967239854144480757286813436768000573823963610796223140429490728058551444771338682314499547929338131259971996894072233847404542592316639781608209399269744676323921370773991899853301483814622364299493902073285072098040905300059160091641710175605409814301906444379905831277826625762288108104414704097708248077905168225857235732665234414956169007985520848841886027352780861218049418060017941147110410688703738674378147161236141950474056521041002268987858525470689031657094677131822113205505046579701869337769278257145248837213394613987859786320048011792814546859096532616616068403160077901584946840224344163938313618742275417712170336151163782359059685168880561304838542087505126933144171705880517278127917564053282929427357971823360842784676292324980318169828654166132873909074116734612367109059236155113860447246378721244612580406931724769152219217409096880209008801535633471775664392125733993165330324425899852598966724744126503608416484160724482125980550754851232313331300621490042708542735985913041306918279258584509440150719217604794274047740253314305451367710311947544521321732225875550489799267468541529538871443696399406391099267018219539890685186755868574434469213792094590683677929528246795437302263472495359466300235998990248299853826140395410812427393530207575128774273992824866921285637240069184859771126480352376025469714309316636539718514623865421671429236191647402172547787238964043145364190541101514371773797752463632741619269990461595895793940622986041489302535678633503526382069821487003578061101552210224486633247184367035502326672749787730470216165019711937442505629639916559369593557640005236360445141148916155147776301876302136068825296274460238077523189646894043033182148655637014692476427395401909403584437251915352134557610698046469739424511797999048754951422010043090235713636892619493763602673645872492900162675597083797995647487354531686531900176427222751039446099641439322672532108666047912598938351926694497553568096931962642014042788365702610390456105151611792018698900673027082384103280213487456720062839744828713298223957579105420819286308176631987048287388639069922461848323992902685392499812367091421613488781501234093387999776097433615750910992585468475923085725368613605356762146929424264323906626708602846163376051573599050869800314239735368928435294958099434465414316189806451480849292695749412903363373410480943579407321266012450796613789442208485840536446021616517885568969302685188950832476793300404851688934411125834396590422211152736276278672366665845757559585409486248261694480201791748223085835007862255216359325125768382924978090431102048708975715033330963651576804501966025215527080352103848176167004443740572131294252820989545456276344353575741673638980108310579931697917916718271145837435222026387771805250290791645414791173616253155840768495583288190293564201219633684854080865928095131505012602919562576032932512847250469881908146475324342363863860247943921015193235101390117789997483527186469346024554247028375300033725403910085997650987642832802908445662021678362267272292737780213652404028817217012490974899454430826861772239385250883760749742195942655217301733355851389407457348144161511380845358039740277795072051893487170722955427683655826706766313911972211811528466502223383490906676554168336907959409404576472940901354356409277969379842065738891481990225399022315913388145851487225126560927576795873759207013915029216513720851137197522734365458411622066281660256333632074449918511469174455062297146086578736313585389023662557285424516018080487167823688885575325066254262367702604215835160174851981885460860036597606743233346410471991027562358645341748631726556391320606407754779439671383653877377610828300019937359760370467245737880967939894493795829602910746901609451288456550071458091887879542641820145369659962842686882363495879277007025298960996798975941955735253914237782443302746708282008722602053415292735847582937522487377937899136764642153727843553986244015856488692101644781661602962113570056638347990334049623875941092886778920270077504951511405782565295015024484968204744379710872943108541684540513016310902267112951959140520827546866418137305837933236150599142045255880213558474751516267815309465541240524091663857551298894834797423322854504140527354235070335984964593699534959698554244978249586929179182415068053002553370412778703476446244329205906832901886692400222391918714603175399666877477960121790688623311002908668305431787009355066944389131913333586368037447530664502418437136030852288582121720231274167009740351431532131803978033680228154223490183737494117973254478594157962104378787072154814091725163615415163381388912588517924237727229603497305533840942889918919161186249580560073570527227874940321250645426206304469470804277945973817146810395192821550688079136701210109944220737024613687196031491162370967939354636396448139025711768057799751751298979667073292674886430097398814873780767363792886767781170520534367705731566895899181530825761606591843760505051704242093231358724816618683821026679970982966436224723644898648976857100173643547336955619347638598187756855912376232580849341570570863450733443976604780386678461711520325115528237161469200634713570383377229877321365028868868859434051205798386937002783312365427450532283462669786446920780944052138528653384627970748017872477988461146015077617116261800781557915472305214759943058006652042710117125674185860274188801377931279938153727692612114066810156521441903567333926116697140453812010040811760123270513163743154487571768761575554916236601762880220601068655524141619314312671535587154866747899398685510873576261006923021359580838145290642217792987748784161516349497309700794368305080955621264592795333690631936594413261117944256602433064619312002953123619348034504503004315096798588111896950537335671086336886944665564112662287921812114121425167348136472449021275252555647623248505638391391630760976364990288930588053406631352470996993362568102360392264043588787550723319888417590521211390376609272658409023873553418516426444865247805763826160023858280693148922231457758783791564902227590699346481624734399733206013058796068136378152964615963260698744961105368384203105364183675373594176373955988088591188920114871545460924735613515979992999722298041707112256996310945945097765566409972722824015293663094891067963296735505830412258608050740410916678539569261234499102819759563955711753011823480304181029089719655278245770283085321733741593938595853203645590564229716679900322284081259569032886928291260139267587858284765599075828016611120063145411315144108875767081854894287737618991537664505164279985451077400771946398046265077776614053524831090497899859510873112620613018757108643735744708366215377470972660188656210681516328000908086198554303597948479869789466434027029290899143432223920333487108261968698934611177160561910681226015874410833093070377506876977485840324132474643763087889666151972556180371472590029550718424245405129246729039791532535999005557334600111693557020225722442772950263840538309433999383388018839553821540371447394465152512354603526742382254148328248990134023054550811390236768038649723899924257800315803725555410178461863478690646045865826036072306952576113184134225274786464852363324759102670562466350802553058142201552282050989197818420425028259521880098846231828512448393059455162005455907776121981297954040150653985341579053629101777939776957892084510979265382905626736402636703151957650493344879513766262192237185642999150828898080904189181015450813145034385734032579549707819385285699926238835221520814478940626889936085239827537174490903769904145555260249190126341431327373827075950390882531223536876389814182564965563294518709637484074360669912550026080424160562533591856230955376566866124027875883101021495284600804805028045254063691285010599912421270508133194975917146762267305044225075915290251742774636494555052325186322411388406191257012917881384181566918237215400893603475101448554254698937834239606460813666829750019379115061709452680984785152862123171377897417492087541064556959508967969794980679770961683057941674310519254486327358885118436597143583348756027405400165571178309126113117314169066606067613797690123141099672013123730329707678988740099317309687380126740538923612230370779727025191340850390101739924877352408881040807749924412635346413181858792480760553268122881584307471326768283097203149049868884456187976015468233715478415429742230166504759393312132256510189175368566338139736836336126010908419590215582111816677413843969205870515074254852744810154541079359513596653630049188769523677579147319184225806802539818418929888943038224766186405856591859943091324575886587044653095332668532261321209825839180538360814144791320319699276037194760191286674308615217243049852806380129834255379486287824758850820609389214668693729881191560115633701248675404205911464930888219050248857645752083363921499441937170268576222251074166230901665867067714568862793343153513505688216165112807318529333124070912343832502302341169501745502360505475824093175657701604884577017762183184615567978427541088499501610912720817913532406784267161792013428902861583277304794830971705537485109380418091491750245433432217445924133037928381694330975012918544596923388733288616144238100112755828623259628572648121538348900698511503485369544461542161283241700533583180520082915722904696365553178152398468725451306350506984981006205514844020769539324155096762680887603572463913955278222246439122592651921288446961107463586148252820017348957533954255019475442643148903233373926763409115527189768429887783617346613535388507656327107814312435018965109238453660236940276060642119384227665755210663671879603217527184404651560427289869560206997012906367847161654793068868305846508082886614111979138822898112498261434559408961813509226857611474609406147937240008842153535862052780125014270055274468359151840373309373580494342483940467505708347927948338133276237937844629209323999417593374917899786484958148818865149169302451512835579818112344900827168644548306546633975256079615935830821400021951611342337058359111545217293721664061708131602078213341260356852013161345136871600980378712556766143923146458085652084039744217352744813741215277475202259244561520365608268890193913957991844109971588312780020898275935898106482117936157951837937026741451400902833064466209280549839169261068975151083963132117128513257434964510681479694782619701483204392206140109523453209269311762298139422044308117317394338867965739135764377642819353621467837436136161591167926578700137748127848510041447845416464568496606699139509524527949914769441031612575776863713634644477006787131066832417871556281779122339077841275184193161188155887229676749605752053192594847679397486414128879475647133049543555044790277128690095643357913405127375570391806822344718167939329121448449553897728696601037841520390662890781218240141299368590465146519209198605347788576842696538459445700169758422531241268031418456268722581132040056433413524302102739213788415250475704533878002467378571470021087314693254557923134757243640544448132093266582986850659125571745568328831440322798049274104403921761438405750750288608423536966715191668510428001748971774811216784160854454400190449242294333666338347684438072624307319019363571067447363413698467328522605570126450123348367412135721830146848071241856625742852208909104583727386227300781566668914250733456373259567253354316171586533339843321723688126003809020585719930855573100508771533737446465211874481748868710652311198691114058503492239156755462142467550498676710264926176510110766876596258810039163948397811986615585196216487695936398904500383258041054420595482859955239065758108017936807080830518996468540836412752905182813744878769639548306385089756146421874889271294890398025623046812175145502330254086076115859321603465240763923593699949180470780496764486889980902123735780457040380820770357387588525976042434608851075199334470112741787878845674656640471901619633546770714090590826954225196409446319547658653032104723804625249971910690110456227579220926904132753699634145768795242244563973018311291451151322757841320376225862458224784696669785947914981610522628786944136373683125108310682898766123782697506343047263278453719024447970975017396831214493357290791648779915089163278018852504558488782722376705263811803792477835540018117452957747339714012352011459901984753358434861297092928529424139865507522507808919352104173963493428604871342370429572757862549365917805401652536330410692033704691093097588782938291296447890613200063096560747882082122140978472301680600835812336957051454650181292694364578357815608503303392466039553797630836137289498678842851139853615593352782103740733076818433040893624460576706096188294529171362940967592507631348636606011346115980434147450705511490716640635688739020690279453438236930531133440901381392849163507484449076828386687476663619303412376248380175840467851210698290605196112357188811150723607303158506622574566366740720668999061320627793994112805759798332878792144188725498543014546662945079670707688135022230580562225942983096887732856788971494623888272184647618153045844390967248232348259587963698908456664795754200195991919240707615823002328977439748112690476546256873684352229063217889227643289360535947903046811114130586348244566489159211382258867880972564351646404364328416076247766114349880319792230537889671148058968061594279189647401954989466232962162567264739015818692956765601444248501821713300527995551312539849919933907083138030214072556753022600033565715934283182650908979350869698950542635843046765145668997627989606295925119763672907762567862769469947280606094290314917493590511523235698715397127866718077578671910380368991445381484562682604003456798248689847811138328054940490519768008320299631757043011485087384048591850157264392187414592464617404735275250506783992273121600117160338604710710015235631159734711153198198710616109850375758965576728904060387168114313084172893710817412764581206119054145955378853200366615264923610030157044627231777788649806700723598889528747481372190175074700005571108178930354895017924552067329003818814068686247959272205591627902292600592107710510448103392878991286820705448979977319695574374529708195463942431669050083984398993036790655541596099324867822475424361758944371791403787168166189093900243862038610001362193667280872414291108080291896093127526202667881902085595708111853836166128848729527875143202956393295910508349687029060692838441522579419764824996318479414814660898281725690484184326061946254276693688953540732363428302189694947766126078346328490315128061501009539164530614554234923393806214007779256337619373052025699319099789404390847443596972052065999017828537676265683558625452697455260991024576619614037537859594506363227095122489241931813728141668427013096050734578659047904243852086508154491350136491698639048125666610843702294730266721499164849610746803261583352580352858275799038584091667618877199539888680431991650866887781701439663176815592262016991396613153738021294160006906947533431677802632207226265881842757216055461439677336258462997385077307751473833315101468395296411397329672457933540390136107395245686243008096720460995545708974893048753897955544443791303790422346037768729236001386569593952300768091377768847789746299699489949016141866131552200856673695770822720338936659590666350594330040363762591189195691561626122704788696510356062748423100605472091437069471661080277379848576543481249822444235828329813543645124092220896643987201997945619030397327254617823136363375927622656301565813545578319730419339269008282952718252138855126583037630477490625995514925943105307478901043009876580816508144862607975129633326675259272351611791836777128931053144471668835182920514343609292493191180249366051791485330421043899773019267686085347768149502299280938065840007311767895491286098112311307002535600347898600653805084532572431553654422067661352337408211307834360326940015926958459588297845649462271300855594293344520727007718206398887404742186697709349647758173683580193168322111365547392288184271373843690526638607662451284299368435082612881367358536293873792369928837047900484722240370919885912556341130849457067599032002751632513926694249485692320904596897775676762684224768120033279577059394613185252356456291805905295974791266162882381429824622654141067246487216174351317397697122228010100668178786776119825961537643641828573481088089988571570279722274734750248439022607880448075724807701621064670166965100202654371260046641935546165838945950143502160890185703558173661823437491622669077311800121188299737319891006060966841193266075165452741829459541189277264192546108246351931647783837078295218389645376236304858042774417907169146356546201215125418664885396161542055152375000426794253417764590821513675258479774465114750438460596325820468809667795709044645884673847481638045635188183210386594798204376334738389017759714236223057776395541011294523488098341476645559342209402059733452337956309441446698222457026367119493286653989491344225517746402732596722993581333110831711807234044326813737231209669052411856734897392234152750707954137453460386506786693396236535556479102508529284294227710593056660625152290924148057080971159783458351173168204129645967070633303569271821496292272073250126955216172649821895790908865085382490848904421755530946832055636316431893917626269931034289485184392539670922412565933079102365485294162132200251193795272480340133135247014182195618419055761030190199521647459734401211601239235679307823190770288415814605647291481745105388060109787505925537152356112290181284710137917215124667428500061818271276125025241876177485994084521492727902567005925854431027704636911098800554312457229683836980470864041706010966962231877065395275783874454229129966623016408054769705821417128636329650130416501278156397799631957412627634011130135082721772287129164002237230234809031485343677016544959380750634285293053131127965945266651960426350406454862543383772209428482543536823186182982713182489884498260285705690699045790998144649193654563259496570044689011049923939218088155626191834404362264965506449848521612498442375928443642612004256628602157801140467879662339228190804577624109076487087406157070486658398144845855803277997327929143195789110373530019873110486895656281917362036703039179710646309906285483702836118486672219457621775034511770110458001291255925462680537427727378863726783016568351092332280649908459179620305691566806180826586923920561895421631986004793961133953226395999749526798801074576466538377400437463695133685671362553184054638475191646737948743270916620098057717103475575333102702706317395612448413745782734376330101853438497450236265733191742446567787499665000938706441886733491099877926005340862442833450486907338279348425305698737469497333364267191968992849534561045719338665222471536681145666596959735075972188416698767321649331898967182978657974612216573922404856900225324160367805329990925438960169901664189038843548375648056012628830409421321300206164540821986138099462721214327234457806819925823202851398237118926541234460723597174777907172041523181575194793527456442984630888846385381068621715274531612303165705848974316209831401326306699896632888532682145204083110738032052784669279984003137878996525635126885368435559620598057278951754498694219326972133205286374577983487319388899574634252048213337552584571056619586932031563299451502519194559691231437579991138301656117185508816658756751184338145761060365142858427872190232598107834593970738225147111878311540875777560020664124562293239116606733386480367086953749244898068000217666674827426925968686433731916548717750106343608307376281613984107392410037196754833838054369880310983922140260514297591221159148505938770679068701351029862207502287721123345624421024715163941251258954337788492834236361124473822814504596821452253550035968325337489186278678359443979041598043992124889848660795045011701169092519383155609441705397900600291315024253848282782826223304151370929502192196508374714697845805550615914539506437316401173317807741497557116733034632008408954066541694665746735785483133770133628948904397670025863002540635264006601631712883920305576358989492412827022489373848906764385339931878608019223108328847459816417701264089078551777830131616162049792779670521847212730327970738223860581986744668610994383049960437407323195784473254857416239738852016202384784256163512597161783106850156299135559874758848151014815490937380933394074455700842090155903853444962128368313687375166780513082594599771257467939781491953642874321122421579851584491669362551569370916855252644720786527971466476760328471332985501945689772758983450586004316822658631176606237201721007922216410188299330808409384014213759697185976897042759041500946595252763487628135867117352364964121058854934496645898651826545634382851159137631569519895230262881794959971545221250667461174394884433312659432286710965281109501693028351496524082850120190831078678067061851145740970787563117610746428835593915985421673115153096948758378955979586132649569817205284291038172721213138681565524428109871168862743968021885581515367531218374119972919471325465199144188500672036481975944167950887487934416759598361960010994838744709079104099785974656112459851972157558134628546189728615020774374529539536929655449012953097288963767713353842429715394179547179095580120134210175150931491664699052366350233024087218654727629639065723341455005903913890253699317155917179823065162679744711857951506573868504088229934804445549850597823297898617029498418376255258757455303112991914341109413088238114443068843062655305601658801408561023324210300218460588586954418502977463085858496130037238190325162225570729975710727306066072916922978033647048840958711228045188511908718588299514331534128549297173849768523136276076868494780364948299904475715771141080958058141208956059471668626290036145602625334863284986816039463372436667112964460292915746181117789169695839947080954788863503281129626899231110099889317815313946681882028368363373822281414974006917942192888817139116283910295684918233358930813360131488748366464224381776081007739183393749346933644748150564933649323157235306109385796839902153381449126925350768211098738352197507736653475499431740580563099143218212547336281359488317681489194306530426029773885492974570569448783077945878865062970895499843760181694031056909587141386804846359853684034105948341788438963179956468815791937174656705047441528027712541569401365862097760735632832966564135817028088013546326104892768731829917950379944446328158595181380144716817284996793061814177131912099236282922612543236071226270324572637946863533391758737446552006008819975294017572421299723542069630427857950608911113416534893431149175314953530067419744979017235181671568754163484949491289001739377451431928382431183263265079530371177806185851153508809998200482761808307209649636476943066172549186143700971387567940218696710148540307471561091358933165600167252126542502898612259306484105898847129649230941215144563947889999327145875969555737090855150648002321476443037232466147111552578583071024936898814562568786834745518893385181791667579054210421036349316257870476543126790661216644142285017446278477132740595579600648343288827864837043456066966456899746910373987712891593313271266247505582258634928427718355831641593667712218537642376222104779338956378722902509543014182257180331300148113377736941508488867501893156994849838936052666818012783912005801431596441910546663236810148207799356523056490420711364192200177189107935243234322761787712568251126481332974354926568682748715986654943041648468220593921673359485057849622807932422649812705271398407720995707236227009245067665680069149966555737866411877079767754867028786431817941521796178310655030287157272282250812017060713380339641841211253856248920130010782462165136989511064611133562443838185366273563783436921279354709230119655914915800561707258518503167289370411936374780625824298250726464801821523430268081486978164824349353456855843696378384153838051184406043696871666416514036129729992912630842812149152469877429332305214999981829046119471676727503742221367186614654042534463141660649871499001000660041544868437352208483059495953182872280520828676300361091734508632133033647289584176588755345227938480297724485711815574893561311524926772006362198369980664159549388683836411891430443767715498026544959061738265591178545999378510861446014967645550103653971251138583505085112442517772923814396233043724036032603181442991365750246012787514117944901305803452199992701148071712847770301254994886841867572975189214295652512486943983729047410363121899124217339550688778643130750024823361832738729697376598820053895902935486054979802320400472236873557411858132734337978931582039412878989728973298812553514507641535360519462112217000676321611195841029252568536561813138784086477147099724553013170761712163186600291464501378587854802096244703771373587720086738054108140042311418525803293267396324596914044834665722042880679280616029884043400536534009706581694636096660911110968789751801325224478246957913251892122653056085866541115373584912790254654369020869419871125588453729063224423222287139122012248769976837147645598526739225904997885514250047585260297929306159913444898341973583316070107516452301310796620382579278533125161760789984630103493496981494261055367836366022561213767081421091373531780682420175737470287189310207606953355721704357535177461573524838432101571399813798596607129664438314791296359275429627129436142685922138993054980645399144588692472767598544271527788443836760149912897358259961869729756588978741082189422337344547375227693199222635973520722998387368484349176841191020246627479579564349615012657433845758638834735832242535328142047826934473129971189346354502994681747128179298167439644524956655532311649920677163664580318205849626132234652606175413532444702007661807418914040158148560001030119994109595492321434406067634769713089513389171050503856336503545166431774489640061738861761193622676890576955693918707703942304940038440622614449572516631017080642923345170422426679607075404028551182398361531383751432493056398381877995594942545196756559181968690885283434886050828529642437578712929439366177362830136595872723080969468398938676366226456791132977469812675226595621009318322081754694778878755356188335083870248295346078597023609865656376722755704495258739871812593441903785275571333409842450127258596692434317689018966145404453679047136294238156127656824247864736176671770647002431119711090007474065945650315375044177982192306323700872039212085499569681061379189029961178936752146022386905665481382858280449537530160921422195940638787074787991194920898374091788534417523064715030278397979864517336625329511775105559014160459873338186887977858817291976604516353353556047648420520888811722831990044504284486852338334530105533929637308039738230604714104525470094899407601215247602819963846343554852932377161410869591950786873276075400085220065031871239272857835807010762542769655355964789450166013816295177908531139811092831583216931563867459747449584385282701658246192092219529134323496779345585613140207765996142546463288677356891785576835169608392864188830094883324700447958316931533832382377876344426323456301679513671047510469669001217777128065522453689371871451567394733440447280450959433090683667110655953338602938000999949010642769859623260401863733572846679531229683156358145420890540651226419162015504500430562136991850941034609601030543816694795964585804425194905110733387679946734471718615647723811737035654917628707589456035519195603962301157866323750234725054461073979402475184415558178087962822231972692984516683306919505079993357259165675557294585962182052650473353712351623662770479333289322136141858785972771685682725303734836891911847197133753088446777943274857148827821608844765700041403499921376794209627560883081509438030705666022764678117533361028187800710219794428777313146387857817205661409023041499923248268982477222109852189758140879763486146763606368674611966620347304608917277240045953051376938375381543486981101990651706961774052218247422657652138152740612699012706880875386408669901461740890540981877671880076124151967064152117653084325544261017536348281196837493395825742541244634247233586360777980960199745187758845459645895956779558869098404768259253477849930457883128541747079059795909431627722327844578918694214929451540174214623240300841907975296782445969183509474202123617940309048634960534054931299919496087957952586977170236680033862505764938088740994009589948109397983231108838769236490221499111120870639202892490698435333152727991330986335454324971441378059132240814960156485679843966464780280409057580889190254236606774500413415794312112501275232250148067232979652230488493751166084976116412777395311302041566848265531411348993243747890268935173904043294851610659785832253168204202834993641595980197343889883020994152152288611175126686173051956249367180053845637855129171848417841594797435580617856680758491080185805695567990185198397660693358224779136504562705766735170961550493338390452612404395517449136885115987454340932040102218982707539212403241042424451570052968378815749468441508011138612561164102477190903050040240662278945607061512108266146098662040425010583978098192019726759010749924884966139441184159734610382401178556739080566483321039073867083298691078093495828888707110651559651222542929154212923108071159723275797510859911398076844732639426419452063138217862260999160086752446265457028969067192282283045169111363652774517975842147102219099906257373383472726498678244401048998507631630668050267115944636293525120269424810854530602810627264236538250773340575475701704367039596467715959261029438313074897245505729085688496091346323165819468660587092144653716755655531962091865952628448253731353698162517351930115341581171353292035873164168839107994000677266031617527582917398395852606454113318985505747847121053505795649095931672167565624818782002769963734155880000867852567422461511406015760115910256449002264980039498403358091309140197877843650167960167465370287466062584346329708303725980494653589318912163976013193079476972058034710553111117215859219066231028099212084069283091906017370764654655683413207556315315006453462321007133584907633048328153458698497332599801187479664273140279381289961720524540674695271948079930396730194274036466594154400092799908634806622334906695224044652158992864203435098858422692019340575496840904812955522654754650713532842543496616084954788090727649930252702815067862810825243222979985391759845188868387004477101866772159439708514664612871148749531862180941719676843144666435175837688436786081446319641912566574047718699160915550910878919431253671945651261878486910876729910565595155159739659034383628124629118117760949411880105946336671039049777312004243578115790429823045072038322781246413671297959415082918378213212876890545963586369344879749784841123274921331663162812456388238288715648447883142417650147980187858215768793063001153788998014623690135803753306246148576074932567807682651045738059018831237617271889933790487113395588485234240255002352200613574914318259142479829367775490496399350755839668967578364316618369307625603528602940662803255416535431518013714821941772672244005268401996533334184004345525296592918502940131600651124395297874364222806977720437363717873457948420238745151249157913139411148608416429347958793681868609689684640858334131017858142710955416293375915178392341303110543328703526599993904966822112768158316511246866451167351378214345336650598328347443536290312393672084593164394941881138607974670134709640378534907149089842317891739783650654751982883367395714360000003439863363212091718954899055748693397700245632475954504411422582410783866837655467400137324322809113692670682805397549111166171102397437749479335174036135005397581475520834285772800986189401984375446435081498218360112577632447389452051636938585136484259964518361856989088721789764694721246807900330925083496645841656554261294195108847197209106605105540933731954888406444080280579549008076040034154662137669606444293774985897353625591959618552448187940317374508256072895120945456562159540405425814886929842786582357673195799285293120866275922366115137445767916063621675267440451221051052090834707443986137829082352772895849625656881972792768694795806100573787084121444815034797422312103295359297822377134077549545477791813823542607184617108389097825964406170543546968567030745411634244134486308676327949177682923093183221341455482591367202823284396549001805653203960795517074496039006696990334199278212696767771835209083959545341866777944872740383733381985235884202840150981579594685874537989503257362809837592216229258598599123843993575573285028613155970362934249814178056461615863415338635077223269996508860870999964899373049307170967888740149746147542880387421250689212155876692242387434701120990859082164073576380817386959755176083877600277517253037133445654852635661720197563001580049790223419586738061442401502436288957503206533690825756785507020555105572381878574650371086308158185862815883054564662297694803970618265491385181326737485227188267917919091354407852685476254126683398240534022469989966652573155637645862251862823092085424412805997628505488913098331761884983352975136073772030571342739638126588567405013841074788943393996603591853934198416322617654857376671943132840050626295140357877264680649549355746326408186979718630218760025813995719923601345374229758918285167511358171472625828596940798518571870075823122317068134867930884899275181661399609753105295773584618525865211893339375771859916335112163441037910451845019023066893064178977808158101360449495409665363660370075881004450265734935127707426742578608784898185628869980851665713320835842613381142623855420315774246613108873106318111989880289722849790551075148403702290580483052731884959994156606537314021296702220821915862905952604040620011815269664910068587592655660567562963361434230232810747488395040380984981860056164646099819257616235478710913832967563761506732550860683433720438748186791668975746563456020002562889601191100980453350423842063824039434163502977688802779835087481178298349417211674919425601608685332435385951152061809031241698182079314615062073826097180458265687043623935757495737332781578904386011378078508110273049446611821957450170106059384336519458628360682108585130499820420578458577175933849015564447305834515291412561679970569657426139901681932056241927977282026714297258700193234337873153939403115411184101414292741703537542003698760608765500109345299007034032401334806388514095769557147190364152027721127070187421548123931953220997506553022646844227700020589045922742423904937051507367764629844971682121994198274794049092601715727439368569721862936007387077810797440975556627807371228030350048829843919546433753355787895064018998685060281902452191177018634505171087023903398550540704454189088472042376499749035038518949505897971286631644699407490959473411581934618336692169573605081585080837952036335619947691937965065016808710250735070825260046821242820434367245824478859256555487861614478717581068572356895150707602217433511627331709472765932413249132702425519391509083601346239612335001086614623850633127072987745618984384288764099836164964775714638573247333226653894523588365972955159905187411779288608760239306160016168434070611663449248395156319152882728822831375458678269830696691220130954815935450754923554167766876455212545681242936427474153815692219503331560151614492247512488957534835926226263545406704767033866410025277276800886383266629488582740369655329362236090572479794734434077704284318507901973469071141230364111729224929307731939309795452877412451183953480382210373644697046967493042810911797232448615413264031578430955396671061468083815548947146733652483679138566431084747848676243012018489329109615281108087617422779131629345494425395422727309645057976122885347393189600810965202090151104579377602529543130188938184010247010134929317443562883578609861545691161669857388024973756940558138630581099823372565164920155443216861690537054630176154809626620800633059320775897175589925862195462096455464624399535391743228225433267174308492508396461328929584567927365409119947616225155964704061297047759818551878441419948614013153859322060745185909608884280218943358691959604936409651570327527570641500776261323783648149005245481413195989296398441371781402764122087644989688629798910870164270169014007825748311598976330612951195680427485317886333041169767175063822135213839779138443325644288490872919067009802496281560626258636942322658490628628035057282983101266919109637258378149363774960594515216932644945188292639525772348420077356021656909077097264985642831778694777804964343991762549216500608626285329471055602670413384500507827390640287529864161287496473708235188892189612641279553536442286955430551308700009878557534223100547153412810957024870812654319123261956462149376527526356402127388765103883255007364899937167183280028398832319373301564123277185395654932422977953016534830128490677845037490891749347389015649588574802194996722621185874361039774946338633057887487405540005440439344888192044102134790034598411927024921557026873700970995205391930979319495883265922171508324621942300185974396706491149559411733728199869021311629886680267446443489233020607003821262841723679627307191405008084085703978151998148822390059948911946474438682533745889962375133378280532928272016815977970066488394482446332210928320504045983008943565954267256879714918703447338237767914829203283196838105907715727191903042365315650957464549643425328069510396558733549803850995143463506175361480050195045201350200180281506933241918267855737764414097080945745624854867704904368368717590918057269794010465019484853146726642978667687697789291431128505043098192949736165944259471754765135205245072597538577958372797702972231435199958499522344049394502115428867244188717409524554771867484911475031801773304689909317974472957035192387686405544278134169807249382219749124257510162187439772902147704638010731470653154201300583810458905006764557332998149945854655105526374914354195867992595981412218735238407957416123372264063860431988936249867649693592569592128495906254446474331759999685163660305216426770428154681777589339252115538590526823311608302751194384823861552852465010329467297198112105314125898165100120742688143577590825227466863206188376830450921784582526239594189673003640808624233657620979111641766331328852352062487922978959456450333733139422384778582717195412347860434376165241568717943562570215636666680088531006728947033079540804583324192188488870712275670333173939262509073556164513677064199539111948881240659821685787131385056850623094155206877987539740658484250135205615103489821873770245063583314243624807432542464195984647411575625441010389671576677263196442524931941806472423789334668561083789808830313571333157729435664956078125304917594015895146954965223118559669048559467607968190167266634650186182955669893965019614544401768162810604465068448139561667220729261210164692339016793399632833013163850830967942792934551268435760356901970523138364640961311774904600772840862214747547653221505518116489887879087780918009050706040061220010051271575991225725282523378026809030528461581739558198122397010092017202251606352922464781615533532275453264543087093320924631855976580561717446840450048285353396546862678852330044967795580761661801833668792312510460809773895565488962815089519622093675058841609752282328250433712970186608193748968699961301486924694482420723632912367052542145464162968910442981633373266871675946715392611950649224725627254543274193495995569590243279097174392258098103601486364409101491734183079646345064833303404765711827040276868271418084574998493392039317445402616663674646668754385093967129918067471909885312710726724428584870694307099756567949198418996425748884764622030325637751112534060087936904565779272035205921345924272965206683338510673615276261016026647772485083344719891986802656197236420847504962661607797092906844757798251795569758235084371746103310387911789239441630112634077535773520558040066982523191225570519133631407211349723226549151062961739050617857127509403623146700931176133132018631158730886798239298009805089491510788371194099750375473674305745187265414016446924576792185753680363289139664155342066705623272936001177781498886100830877849571709880858667023104043242526785955562077310543072298032125941107957349146684680220501816192150766649106862033378713826058987655210423668198670177861672671972374156917880001690656659046965316154923604061891820982414006103779407166342002735828911994182647812782659666207030384795881442790246669264032799404016800137293477301530941805070587421153284642203006550763966756168318897005152026656649929417382840327305940740147117478464839241225676523593418554066440983706083636457657081801664285044258224551650808864421212113914352453935225522162483791737330329812349528984098613273709957407786789349311975204237925022851375880436791854547836416773151821457226504640800104202100410766027807729152555503218182387221708112766208665317651926458452495269685376314437998340336947124447247796973890514941120010934140073794061859447165516612674930799374705772930521750426383798367668159183589049652163726492960837147204067428996276720315410211504333742057182854090136325721437592054640471894328548696883599785122262130812989581571391597464534806099601555877223193450760315411663112963843719400333736013305526352571490454327925190794007111504785378036370897340146753465517470747096935814912797188187854376797751675927822300312945518595042883902735494672667647506072643698761394806879080593531793001711000214417701504495496412454361656210150919997862972495905809191825255486358703529320142005857057855419217730505342687533799076038746689684283402648733290888881745453047194740939258407362058242849349024756883352446212456101562729065130618520732925434179252299417447855189995098959999877410951464170076989305620163502192692653166599093238118295411937545448509428621839424186218067457128099385258842631930670182098008050900019819621758458932516877698594110522845465835679362969619219080897536813210484518784516230623911878024604050824909336069998094776253792973597037759066145994638578378211017122446355845171941670344732162722443265914858595797823752976323442911242311368603724514438765801271594060878788638511089680883165505046309006148832545452819908256238805872042843941834687865142541377686054291079721004271658 hts-1.0.1/bgzf/testdata/pi.txt000066400000000000000000003032431304417722000162260ustar00rootroot000000000000003.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275900994657640789512694683983525957098258226205224894077267194782684826014769909026401363944374553050682034962524517493996514314298091906592509372216964615157098583874105978859597729754989301617539284681382686838689427741559918559252459539594310499725246808459872736446958486538367362226260991246080512438843904512441365497627807977156914359977001296160894416948685558484063534220722258284886481584560285060168427394522674676788952521385225499546667278239864565961163548862305774564980355936345681743241125150760694794510965960940252288797108931456691368672287489405601015033086179286809208747609178249385890097149096759852613655497818931297848216829989487226588048575640142704775551323796414515237462343645428584447952658678210511413547357395231134271661021359695362314429524849371871101457654035902799344037420073105785390621983874478084784896833214457138687519435064302184531910484810053706146806749192781911979399520614196634287544406437451237181921799983910159195618146751426912397489409071864942319615679452080951465502252316038819301420937621378559566389377870830390697920773467221825625996615014215030680384477345492026054146659252014974428507325186660021324340881907104863317346496514539057962685610055081066587969981635747363840525714591028970641401109712062804390397595156771577004203378699360072305587631763594218731251471205329281918261861258673215791984148488291644706095752706957220917567116722910981690915280173506712748583222871835209353965725121083579151369882091444210067510334671103141267111369908658516398315019701651511685171437657618351556508849099898599823873455283316355076479185358932261854896321329330898570642046752590709154814165498594616371802709819943099244889575712828905923233260972997120844335732654893823911932597463667305836041428138830320382490375898524374417029132765618093773444030707469211201913020330380197621101100449293215160842444859637669838952286847831235526582131449576857262433441893039686426243410773226978028073189154411010446823252716201052652272111660396665573092547110557853763466820653109896526918620564769312570586356620185581007293606598764861179104533488503461136576867532494416680396265797877185560845529654126654085306143444318586769751456614068007002378776591344017127494704205622305389945613140711270004078547332699390814546646458807972708266830634328587856983052358089330657574067954571637752542021149557615814002501262285941302164715509792592309907965473761255176567513575178296664547791745011299614890304639947132962107340437518957359614589019389713111790429782856475032031986915140287080859904801094121472213179476477726224142548545403321571853061422881375850430633217518297986622371721591607716692547487389866549494501146540628433663937900397692656721463853067360965712091807638327166416274888800786925602902284721040317211860820419000422966171196377921337575114959501566049631862947265473642523081770367515906735023507283540567040386743513622224771589150495309844489333096340878076932599397805419341447377441842631298608099888687413260472156951623965864573021631598193195167353812974167729478672422924654366800980676928238280689964004824354037014163149658979409243237896907069779422362508221688957383798623001593776471651228935786015881617557829735233446042815126272037343146531977774160319906655418763979293344195215413418994854447345673831624993419131814809277771038638773431772075456545322077709212019051660962804909263601975988281613323166636528619326686336062735676303544776280350450777235547105859548702790814356240145171806246436267945612753181340783303362542327839449753824372058353114771199260638133467768796959703098339130771098704085913374641442822772634659470474587847787201927715280731767907707157213444730605700733492436931138350493163128404251219256517980694113528013147013047816437885185290928545201165839341965621349143415956258658655705526904965209858033850722426482939728584783163057777560688876446248246857926039535277348030480290058760758251047470916439613626760449256274204208320856611906254543372131535958450687724602901618766795240616342522577195429162991930645537799140373404328752628889639958794757291746426357455254079091451357111369410911939325191076020825202618798531887705842972591677813149699009019211697173727847684726860849003377024242916513005005168323364350389517029893922334517220138128069650117844087451960121228599371623130171144484640903890644954440061986907548516026327505298349187407866808818338510228334508504860825039302133219715518430635455007668282949304137765527939751754613953984683393638304746119966538581538420568533862186725233402830871123282789212507712629463229563989898935821167456270102183564622013496715188190973038119800497340723961036854066431939509790190699639552453005450580685501956730229219139339185680344903982059551002263535361920419947455385938102343955449597783779023742161727111723643435439478221818528624085140066604433258885698670543154706965747458550332323342107301545940516553790686627333799585115625784322988273723198987571415957811196358330059408730681216028764962867446047746491599505497374256269010490377819868359381465741268049256487985561453723478673303904688383436346553794986419270563872931748723320837601123029911367938627089438799362016295154133714248928307220126901475466847653576164773794675200490757155527819653621323926406160136358155907422020203187277605277219005561484255518792530343513984425322341576233610642506390497500865627109535919465897514131034822769306247435363256916078154781811528436679570611086153315044521274739245449454236828860613408414863776700961207151249140430272538607648236341433462351897576645216413767969031495019108575984423919862916421939949072362346468441173940326591840443780513338945257423995082965912285085558215725031071257012668302402929525220118726767562204154205161841634847565169998116141010029960783869092916030288400269104140792886215078424516709087000699282120660418371806535567252532567532861291042487761825829765157959847035622262934860034158722980534989650226291748788202734209222245339856264766914905562842503912757710284027998066365825488926488025456610172967026640765590429099456815065265305371829412703369313785178609040708667114965583434347693385781711386455873678123014587687126603489139095620099393610310291616152881384379099042317473363948045759314931405297634757481193567091101377517210080315590248530906692037671922033229094334676851422144773793937517034436619910403375111735471918550464490263655128162288244625759163330391072253837421821408835086573917715096828874782656995995744906617583441375223970968340800535598491754173818839994469748676265516582765848358845314277568790029095170283529716344562129640435231176006651012412006597558512761785838292041974844236080071930457618932349229279650198751872127267507981255470958904556357921221033346697499235630254947802490114195212382815309114079073860251522742995818072471625916685451333123948049470791191532673430282441860414263639548000448002670496248201792896476697583183271314251702969234889627668440323260927524960357996469256504936818360900323809293459588970695365349406034021665443755890045632882250545255640564482465151875471196218443965825337543885690941130315095261793780029741207665147939425902989695946995565761218656196733786236256125216320862869222103274889218654364802296780705765615144632046927906821207388377814233562823608963208068222468012248261177185896381409183903673672220888321513755600372798394004152970028783076670944474560134556417254370906979396122571429894671543578468788614445812314593571984922528471605049221242470141214780573455105008019086996033027634787081081754501193071412233908663938339529425786905076431006383519834389341596131854347546495569781038293097164651438407007073604112373599843452251610507027056235266012764848308407611830130527932054274628654036036745328651057065874882256981579367897669742205750596834408697350201410206723585020072452256326513410559240190274216248439140359989535394590944070469120914093870012645600162374288021092764579310657922955249887275846101264836999892256959688159205600101655256375678566722796619885782794848855834397518744545512965634434803966420557982936804352202770984294232533022576341807039476994159791594530069752148293366555661567873640053666564165473217043903521329543529169414599041608753201868379370234888689479151071637852902345292440773659495630510074210871426134974595615138498713757047101787957310422969066670214498637464595280824369445789772330048764765241339075920434019634039114732023380715095222010682563427471646024335440051521266932493419673977041595683753555166730273900749729736354964533288869844061196496162773449518273695588220757355176651589855190986665393549481068873206859907540792342402300925900701731960362254756478940647548346647760411463233905651343306844953979070903023460461470961696886885014083470405460742958699138296682468185710318879065287036650832431974404771855678934823089431068287027228097362480939962706074726455399253994428081137369433887294063079261595995462624629707062594845569034711972996409089418059534393251236235508134949004364278527138315912568989295196427287573946914272534366941532361004537304881985517065941217352462589548730167600298865925786628561249665523533829428785425340483083307016537228563559152534784459818313411290019992059813522051173365856407826484942764411376393866924803118364453698589175442647399882284621844900877769776312795722672655562596282542765318300134070922334365779160128093179401718598599933849235495640057099558561134980252499066984233017350358044081168552653117099570899427328709258487894436460050410892266917835258707859512983441729535195378855345737426085902908176515578039059464087350612322611200937310804854852635722825768203416050484662775045003126200800799804925485346941469775164932709504934639382432227188515974054702148289711177792376122578873477188196825462981268685817050740272550263329044976277894423621674119186269439650671515779586756482399391760426017633870454990176143641204692182370764887834196896861181558158736062938603810171215855272668300823834046564758804051380801633638874216371406435495561868964112282140753302655100424104896783528588290243670904887118190909494533144218287661810310073547705498159680772009474696134360928614849417850171807793068108546900094458995279424398139213505586422196483491512639012803832001097738680662877923971801461343244572640097374257007359210031541508936793008169980536520276007277496745840028362405346037263416554259027601834840306811381855105979705664007509426087885735796037324514146786703688098806097164258497595138069309449401515422221943291302173912538355915031003330325111749156969174502714943315155885403922164097229101129035521815762823283182342548326111912800928252561902052630163911477247331485739107775874425387611746578671169414776421441111263583553871361011023267987756410246824032264834641766369806637857681349204530224081972785647198396308781543221166912246415911776732253264335686146186545222681268872684459684424161078540167681420808850280054143613146230821025941737562389942075713627516745731891894562835257044133543758575342698699472547031656613991999682628247270641336222178923903176085428943733935618891651250424404008952719837873864805847268954624388234375178852014395600571048119498842390606136957342315590796703461491434478863604103182350736502778590897578272731305048893989009923913503373250855982655867089242612429473670193907727130706869170926462548423240748550366080136046689511840093668609546325002145852930950000907151058236267293264537382104938724996699339424685516483261134146110680267446637334375340764294026682973865220935701626384648528514903629320199199688285171839536691345222444708045923966028171565515656661113598231122506289058549145097157553900243931535190902107119457300243880176615035270862602537881797519478061013715004489917210022201335013106016391541589578037117792775225978742891917915522417189585361680594741234193398420218745649256443462392531953135103311476394911995072858430658361935369329699289837914941939406085724863968836903265564364216644257607914710869984315733749648835292769328220762947282381537409961545598798259891093717126218283025848112389011968221429457667580718653806506487026133892822994972574530332838963818439447707794022843598834100358385423897354243956475556840952248445541392394100016207693636846776413017819659379971557468541946334893748439129742391433659360410035234377706588867781139498616478747140793263858738624732889645643598774667638479466504074111825658378878454858148962961273998413442726086061872455452360643153710112746809778704464094758280348769758948328241239292960582948619196670918958089833201210318430340128495116203534280144127617285830243559830032042024512072872535581195840149180969253395075778400067465526031446167050827682772223534191102634163157147406123850425845988419907611287258059113935689601431668283176323567325417073420817332230462987992804908514094790368878687894930546955703072619009502076433493359106024545086453628935456862958531315337183868265617862273637169757741830239860065914816164049449650117321313895747062088474802365371031150898427992754426853277974311395143574172219759799359685252285745263796289612691572357986620573408375766873884266405990993505000813375432454635967504844235284874701443545419576258473564216198134073468541117668831186544893776979566517279662326714810338643913751865946730024434500544995399742372328712494834706044063471606325830649829795510109541836235030309453097335834462839476304775645015008507578949548931393944899216125525597701436858943585877526379625597081677643800125436502371412783467926101995585224717220177723700417808419423948725406801556035998390548985723546745642390585850216719031395262944554391316631345308939062046784387785054239390524731362012947691874975191011472315289326772533918146607300089027768963114810902209724520759167297007850580717186381054967973100167870850694207092232908070383263453452038027860990556900134137182368370991949516489600755049341267876436746384902063964019766685592335654639138363185745698147196210841080961884605456039038455343729141446513474940784884423772175154334260306698831768331001133108690421939031080143784334151370924353013677631084913516156422698475074303297167469640666531527035325467112667522460551199581831963763707617991919203579582007595605302346267757943936307463056901080114942714100939136913810725813781357894005599500183542511841721360557275221035268037357265279224173736057511278872181908449006178013889710770822931002797665935838758909395688148560263224393726562472776037890814458837855019702843779362407825052704875816470324581290878395232453237896029841669225489649715606981192186584926770403956481278102179913217416305810554598801300484562997651121241536374515005635070127815926714241342103301566165356024733807843028655257222753049998837015348793008062601809623815161366903341111386538510919367393835229345888322550887064507539473952043968079067086806445096986548801682874343786126453815834280753061845485903798217994599681154419742536344399602902510015888272164745006820704193761584547123183460072629339550548239557137256840232268213012476794522644820910235647752723082081063518899152692889108455571126603965034397896278250016110153235160519655904211844949907789992007329476905868577878720982901352956613978884860509786085957017731298155314951681467176959760994210036183559138777817698458758104466283998806006162298486169353373865787735983361613384133853684211978938900185295691967804554482858483701170967212535338758621582310133103877668272115726949518179589754693992642197915523385766231676275475703546994148929041301863861194391962838870543677743224276809132365449485366768000001065262485473055861598999140170769838548318875014293890899506854530765116803337322265175662207526951791442252808165171667766727930354851542040238174608923283917032754257508676551178593950027933895920576682789677644531840404185540104351348389531201326378369283580827193783126549617459970567450718332065034556644034490453627560011250184335607361222765949278393706478426456763388188075656121689605041611390390639601620221536849410926053876887148379895599991120991646464411918568277004574243434021672276445589330127781586869525069499364610175685060167145354315814801054588605645501332037586454858403240298717093480910556211671546848477803944756979804263180991756422809873998766973237695737015808068229045992123661689025962730430679316531149401764737693873514093361833216142802149763399189835484875625298752423873077559555955465196394401821840998412489826236737714672260616336432964063357281070788758164043814850188411431885988276944901193212968271588841338694346828590066640806314077757725705630729400492940302420498416565479736705485580445865720227637840466823379852827105784319753541795011347273625774080213476826045022851579795797647467022840999561601569108903845824502679265942055503958792298185264800706837650418365620945554346135134152570065974881916341359556719649654032187271602648593049039787489589066127250794828276938953521753621850796297785146188432719223223810158744450528665238022532843891375273845892384422535472653098171578447834215822327020690287232330053862163479885094695472004795231120150432932266282727632177908840087861480221475376578105819702226309717495072127248479478169572961423658595782090830733233560348465318730293026659645013718375428897557971449924654038681799213893469244741985097334626793321072686870768062639919361965044099542167627840914669856925715074315740793805323925239477557441591845821562518192155233709607483329234921034514626437449805596103307994145347784574699992128599999399612281615219314888769388022281083001986016549416542616968586788372609587745676182507275992950893180521872924610867639958916145855058397274209809097817293239301067663868240401113040247007350857828724627134946368531815469690466968693925472519413992914652423857762550047485295476814795467007050347999588867695016124972282040303995463278830695976249361510102436555352230690612949388599015734661023712235478911292547696176005047974928060721268039226911027772261025441492215765045081206771735712027180242968106203776578837166909109418074487814049075517820385653909910477594141321543284406250301802757169650820964273484146957263978842560084531214065935809041271135920041975985136254796160632288736181367373244506079244117639975974619383584574915988097667447093006546342423460634237474666080431701260052055928493695941434081468529815053947178900451835755154125223590590687264878635752541911288877371766374860276606349603536794702692322971868327717393236192007774522126247518698334951510198642698878471719396649769070825217423365662725928440620430214113719922785269984698847702323823840055655517889087661360130477098438611687052310553149162517283732728676007248172987637569816335415074608838663640693470437206688651275688266149730788657015685016918647488541679154596507234287730699853713904300266530783987763850323818215535597323530686043010675760838908627049841888595138091030423595782495143988590113185835840667472370297149785084145853085781339156270760356390763947311455495832266945702494139831634332378975955680856836297253867913275055542524491943589128405045226953812179131914513500993846311774017971512283785460116035955402864405902496466930707769055481028850208085800878115773817191741776017330738554758006056014337743299012728677253043182519757916792969965041460706645712588834697979642931622965520168797300035646304579308840327480771811555330909887025505207680463034608658165394876951960044084820659673794731680864156456505300498816164905788311543454850526600698230931577765003780704661264706021457505793270962047825615247145918965223608396645624105195510522357239739512881816405978591427914816542632892004281609136937773722299983327082082969955737727375667615527113922588055201898876201141680054687365580633471603734291703907986396522961312801782679717289822936070288069087768660593252746378405397691848082041021944719713869256084162451123980620113184541244782050110798760717155683154078865439041210873032402010685341947230476666721749869868547076781205124736792479193150856444775379853799732234456122785843296846647513336573692387201464723679427870042503255589926884349592876124007558756946413705625140011797133166207153715436006876477318675587148783989081074295309410605969443158477539700943988394914432353668539209946879645066533985738887866147629443414010498889931600512076781035886116602029611936396821349607501116498327856353161451684576956871090029997698412632665023477167286573785790857466460772283415403114415294188047825438761770790430001566986776795760909966936075594965152736349811896413043311662774712338817406037317439705406703109676765748695358789670031925866259410510533584384656023391796749267844763708474978333655579007384191473198862713525954625181604342253729962863267496824058060296421146386436864224724887283434170441573482481833301640566959668866769563491416328426414974533349999480002669987588815935073578151958899005395120853510357261373640343675347141048360175464883004078464167452167371904831096767113443494819262681110739948250607394950735031690197318521195526356325843390998224986240670310768318446607291248747540316179699411397387765899868554170318847788675929026070043212666179192235209382278788809886335991160819235355570464634911320859189796132791319756490976000139962344455350143464268604644958624769094347048293294140411146540923988344435159133201077394411184074107684981066347241048239358274019449356651610884631256785297769734684303061462418035852933159734583038455410337010916767763742762102137013548544509263071901147318485749233181672072137279355679528443925481560913728128406333039373562420016045664557414588166052166608738748047243391212955877763906969037078828527753894052460758496231574369171131761347838827194168606625721036851321566478001476752310393578606896111259960281839309548709059073861351914591819510297327875571049729011487171897180046961697770017913919613791417162707018958469214343696762927459109940060084983568425201915593703701011049747339493877885989417433031785348707603221982970579751191440510994235883034546353492349826883624043327267415540301619505680654180939409982020609994140216890900708213307230896621197755306659188141191577836272927461561857103721724710095214236964830864102592887457999322374955191221951903424452307535133806856807354464995127203174487195403976107308060269906258076020292731455252078079914184290638844373499681458273372072663917670201183004648190002413083508846584152148991276106513741539435657211390328574918769094413702090517031487773461652879848235338297260136110984514841823808120540996125274580881099486972216128524897425555516076371675054896173016809613803811914361143992106380050832140987604599309324851025168294467260666138151745712559754953580239983146982203613380828499356705575524712902745397762140493182014658008021566536067765508783804304134310591804606800834591136640834887408005741272586704792258319127415739080914383138456424150940849133918096840251163991936853225557338966953749026620923261318855891580832455571948453875628786128859004106006073746501402627824027346962528217174941582331749239683530136178653673760642166778137739951006589528877427662636841830680190804609849809469763667335662282915132352788806157768278159588669180238940333076441912403412022316368577860357276941541778826435238131905028087018575047046312933353757285386605888904583111450773942935201994321971171642235005644042979892081594307167019857469273848653833436145794634175922573898588001698014757420542995801242958105456510831046297282937584161162532562516572498078492099897990620035936509934721582965174135798491047111660791587436986541222348341887722929446335178653856731962559852026072947674072616767145573649812105677716893484917660771705277187601199908144113058645577910525684304811440261938402322470939249802933550731845890355397133088446174107959162511714864874468611247605428673436709046678468670274091881014249711149657817724279347070216688295610877794405048437528443375108828264771978540006509704033021862556147332117771174413350281608840351781452541964320309576018694649088681545285621346988355444560249556668436602922195124830910605377201980218310103270417838665447181260397190688462370857518080035327047185659499476124248110999288679158969049563947624608424065930948621507690314987020673533848349550836366017848771060809804269247132410009464014373603265645184566792456669551001502298330798496079949882497061723674493612262229617908143114146609412341593593095854079139087208322733549572080757165171876599449856937956238755516175754380917805280294642004472153962807463602113294255916002570735628126387331060058910652457080244749375431841494014821199962764531068006631183823761639663180931444671298615527598201451410275600689297502463040173514891945763607893528555053173314164570504996443890936308438744847839616840518452732884032345202470568516465716477139323775517294795126132398229602394548579754586517458787713318138752959809412174227300352296508089177705068259248822322154938048371454781647213976820963320508305647920482085920475499857320388876391601995240918938945576768749730856955958010659526503036266159750662225084067428898265907510637563569968211510949669744580547288693631020367823250182323708459790111548472087618212477813266330412076216587312970811230758159821248639807212407868878114501655825136178903070860870198975889807456643955157415363193191981070575336633738038272152798849350397480015890519420879711308051233933221903466249917169150948541401871060354603794643379005890957721180804465743962806186717861017156740967662080295766577051291209907944304632892947306159510430902221439371849560634056189342513057268291465783293340524635028929175470872564842600349629611654138230077313327298305001602567240141851520418907011542885799208121984493156999059182011819733500126187728036812481995877070207532406361259313438595542547781961142935163561223496661522614735399674051584998603552953329245752388810136202347624669055816438967863097627365504724348643071218494373485300606387644566272186661701238127715621379746149861328744117714552444708997144522885662942440230184791205478498574521634696448973892062401943518310088283480249249085403077863875165911302873958787098100772718271874529013972836614842142871705531796543076504534324600536361472618180969976933486264077435199928686323835088756683595097265574815431940195576850437248001020413749831872259677387154958399718444907279141965845930083942637020875635398216962055324803212267498911402678528599673405242031091797899905718821949391320753431707980023736590985375520238911643467185582906853711897952626234492483392496342449714656846591248918556629589329909035239233333647435203707701010843880032907598342170185542283861617210417603011645918780539367447472059985023582891833692922337323999480437108419659473162654825748099482509991833006976569367159689364493348864744213500840700660883597235039532340179582557036016936990988671132109798897070517280755855191269930673099250704070245568507786790694766126298082251633136399521170984528092630375922426742575599892892783704744452189363203489415521044597261883800300677617931381399162058062701651024458869247649246891924612125310275731390840470007143561362316992371694848132554200914530410371354532966206392105479824392125172540132314902740585892063217589494345489068463993137570910346332714153162232805522972979538018801628590735729554162788676498274186164218789885741071649069191851162815285486794173638906653885764229158342500673612453849160674137340173572779956341043326883569507814931378007362354180070619180267328551191942676091221035987469241172837493126163395001239599240508454375698507957046222664619000103500490183034153545842833764378111988556318777792537201166718539541835984438305203762819440761594106820716970302285152250573126093046898423433152732131361216582808075212631547730604423774753505952287174402666389148817173086436111389069420279088143119448799417154042103412190847094080254023932942945493878640230512927119097513536000921971105412096683111516328705423028470073120658032626417116165957613272351566662536672718998534199895236884830999302757419916463841427077988708874229277053891227172486322028898425125287217826030500994510824783572905691988555467886079462805371227042466543192145281760741482403827835829719301017888345674167811398954750448339314689630763396657226727043393216745421824557062524797219978668542798977992339579057581890622525473582205236424850783407110144980478726691990186438822932305382318559732869780922253529591017341407334884761005564018242392192695062083183814546983923664613639891012102177095976704908305081854704194664371312299692358895384930136356576186106062228705599423371631021278457446463989738188566746260879482018647487672727222062676465338099801966883680994159075776852639865146253336312450536402610569605513183813174261184420189088853196356986962795036738424313011331753305329802016688817481342988681585577810343231753064784983210629718425184385534427620128234570716988530518326179641178579608888150329602290705614476220915094739035946646916235396809201394578175891088931992112260073928149169481615273842736264298098234063200244024495894456129167049508235812487391799648641133480324757775219708932772262349486015046652681439877051615317026696929704928316285504212898146706195331970269507214378230476875280287354126166391708245925170010714180854800636923259462019002278087409859771921805158532147392653251559035410209284665925299914353791825314545290598415817637058927906909896911164381187809435371521332261443625314490127454772695739393481546916311624928873574718824071503995009446731954316193855485207665738825139639163576723151005556037263394867208207808653734942440115799667507360711159351331959197120948964717553024531364770942094635696982226673775209945168450643623824211853534887989395673187806606107885440005508276570305587448541805778891719207881423351138662929667179643468760077047999537883387870348718021842437342112273940255717690819603092018240188427057046092622564178375265263358324240661253311529423457965569502506810018310900411245379015332966156970522379210325706937051090830789479999004999395322153622748476603613677697978567386584670936679588583788795625946464891376652199588286933801836011932368578558558195556042156250883650203322024513762158204618106705195330653060606501054887167245377942831338871631395596905832083416898476065607118347136218123246227258841990286142087284956879639325464285343075301105285713829643709990356948885285190402956047346131138263878897551788560424998748316382804046848618938189590542039889872650697620201995548412650005394428203930127481638158530396439925470201672759328574366661644110962566337305409219519675148328734808957477775278344221091073111351828046036347198185655572957144747682552857863349342858423118749440003229690697758315903858039353521358860079600342097547392296733310649395601812237812854584317605561733861126734780745850676063048229409653041118306671081893031108871728167519579675347188537229309616143204006381322465841111157758358581135018569047815368938137718472814751998350504781297718599084707621974605887423256995828892535041937958260616211842368768511418316068315867994601652057740529423053601780313357263267054790338401257305912339601880137825421927094767337191987287385248057421248921183470876629667207272325650565129333126059505777727542471241648312832982072361750574673870128209575544305968395555686861188397135522084452852640081252027665557677495969626612604565245684086139238265768583384698499778726706555191854468698469478495734622606294219624557085371272776523098955450193037732166649182578154677292005212667143463209637891852323215018976126034373684067194193037746880999296877582441047878123266253181845960453853543839114496775312864260925211537673258866722604042523491087026958099647595805794663973419064010036361904042033113579336542426303561457009011244800890020801478056603710154122328891465722393145076071670643556827437743965789067972687438473076346451677562103098604092717090951280863090297385044527182892749689212106670081648583395537735919136950153162018908887484210798706899114804669270650940762046502772528650728905328548561433160812693005693785417861096969202538865034577183176686885923681488475276498468821949739729707737187188400414323127636504814531122850990020742409255859252926103021067368154347015252348786351643976235860419194129697690405264832347009911154242601273438022089331096686367898694977994001260164227609260823493041180643829138347354679725399262338791582998486459271734059225620749105308531537182911681637219395188700957788181586850464507699343940987433514431626330317247747486897918209239480833143970840673084079589358108966564775859905563769525232653614424780230826811831037735887089240613031336477371011628214614661679404090518615260360092521947218890918107335871964142144478654899528582343947050079830388538860831035719306002771194558021911942899922722353458707566246926177663178855144350218287026685610665003531050216318206017609217984684936863161293727951873078972637353717150256378733579771808184878458866504335824377004147710414934927438457587107159731559439426412570270965125108115548247939403597681188117282472158250109496096625393395380922195591918188552678062149923172763163218339896938075616855911752998450132067129392404144593862398809381240452191484831646210147389182510109096773869066404158973610476436500068077105656718486281496371118832192445663945814491486165500495676982690308911185687986929470513524816091743243015383684707292898982846022237301452655679898627767968091469798378268764311598832109043715611299766521539635464420869197567370005738764978437686287681792497469438427465256316323005551304174227341646455127812784577772457520386543754282825671412885834544435132562054464241011037955464190581168623059644769587054072141985212106734332410756767575818456990693046047522770167005684543969234041711089888993416350585157887353430815520811772071880379104046983069578685473937656433631979786803671873079693924236321448450354776315670255390065423117920153464977929066241508328858395290542637687668968805033317227800185885069736232403894700471897619347344308437443759925034178807972235859134245813144049847701732361694719765715353197754997162785663119046912609182591249890367654176979903623755286526375733763526969344354400473067198868901968147428767790866979688522501636949856730217523132529265375896415171479559538784278499866456302878831962099830494519874396369070682762657485810439112232618794059941554063270131989895703761105323606298674803779153767511583043208498720920280929752649812569163425000522908872646925284666104665392171482080130502298052637836426959733707053922789153510568883938113249757071331029504430346715989448786847116438328050692507766274500122003526203709466023414648998390252588830148678162196775194583167718762757200505439794412459900771152051546199305098386982542846407255540927403132571632640792934183342147090412542533523248021932277075355546795871638358750181593387174236061551171013123525633485820365146141870049205704372018261733194715700867578539336078622739558185797587258744102542077105475361294047460100094095444959662881486915903899071865980563617137692227290764197755177720104276496949611056220592502420217704269622154958726453989227697660310524980855759471631075870133208861463266412591148633881220284440694169488261529577625325019870359870674380469821942056381255833436421949232275937221289056420943082352544084110864545369404969271494003319782861318186188811118408257865928757426384450059944229568586460481033015388911499486935436030221810943466764000022362550573631294626296096198760564259963946138692330837196265954739234624134597795748524647837980795693198650815977675350553918991151335252298736112779182748542008689539658359421963331502869561192012298889887006079992795411188269023078913107603617634779489432032102773359416908650071932804017163840644987871753756781185321328408216571107549528294974936214608215583205687232185574065161096274874375098092230211609982633033915469494644491004515280925089745074896760324090768983652940657920198315265410658136823791984090645712468948470209357761193139980246813405200394781949866202624008902150166163813538381515037735022966074627952910384068685569070157516624192987244482719429331004854824454580718897633003232525821581280327467962002814762431828622171054352898348208273451680186131719593324711074662228508710666117703465352839577625997744672185715816126411143271794347885990892808486694914139097716736900277758502686646540565950394867841110790116104008572744562938425494167594605487117235946429105850909950214958793112196135908315882620682332156153086833730838173279328196983875087083483880463884784418840031847126974543709373298362402875197920802321878744882872843727378017827008058782410749357514889978911739746129320351081432703251409030487462262942344327571260086642508333187688650756429271605525289544921537651751492196367181049435317858383453865255656640657251363575064353236508936790431702597878177190314867963840828810209461490079715137717099061954969640070867667102330048672631475510537231757114322317411411680622864206388906210192355223546711662137499693269321737043105987225039456574924616978260970253359475020913836673772894438696400028110344026084712899000746807764844088711341352503367877316797709372778682166117865344231732264637847697875144332095340001650692130546476890985050203015044880834261845208730530973189492916425322933612431514306578264070283898409841602950309241897120971601649265613413433422298827909921786042679812457285345801338260995877178113102167340256562744007296834066198480676615805021691833723680399027931606420436812079900316264449146190219458229690992122788553948783538305646864881655562294315673128274390826450611628942803501661336697824051770155219626522725455850738640585299830379180350432876703809252167907571204061237596327685674845079151147313440001832570344920909712435809447900462494313455028900680648704293534037436032625820535790118395649089354345101342969617545249573960621490288728932792520696535386396443225388327522499605986974759882329916263545973324445163755334377492928990581175786355555626937426910947117002165411718219750519831787137106051063795558588905568852887989084750915764639074693619881507814685262133252473837651192990156109189777922008705793396463827490680698769168197492365624226087154176100430608904377976678519661891404144925270480881971498801542057787006521594009289777601330756847966992955433656139847738060394368895887646054983871478968482805384701730871117761159663505039979343869339119789887109156541709133082607647406305711411098839388095481437828474528838368079418884342666222070438722887413947801017721392281911992365405516395893474263953824829609036900288359327745855060801317988407162446563997948275783650195514221551339281978226984278638391679715091262410548725700924070045488485692950448110738087996547481568913935380943474556972128919827177020766613602489581468119133614121258783895577357194986317210844398901423948496659251731388171602663261931065366535041473070804414939169363262373767777095850313255990095762731957308648042467701212327020533742667053142448208168130306397378736642483672539837487690980602182785786216512738563513290148903509883270617258932575363993979055729175160097615459044771692265806315111028038436017374742152476085152099016158582312571590733421736576267142390478279587281505095633092802668458937649649770232973641319060982740633531089792464242134583740901169391964250459128813403498810635400887596820054408364386516617880557608956896727531538081942077332597917278437625661184319891025007491829086475149794003160703845549465385946027452447466812314687943441610993338908992638411847425257044572517459325738989565185716575961481266020310797628254165590506042479114016957900338356574869252800743025623419498286467914476322774005529460903940177536335655471931000175430047504719144899841040015867946179241610016454716551337074073950260442769538553834397550548871099785205401175169747581344926079433689543783221172450687344231989878844128542064742809735625807066983106979935260693392135685881391214807354728463227784908087002467776303605551232386656295178853719673034634701222939581606792509153217489030840886516061119011498443412350124646928028805996134283511884715449771278473361766285062169778717743824362565711779450064477718370221999106695021656757644044997940765037999954845002710665987813603802314126836905783190460792765297277694043613023051787080546511542469395265127101052927070306673024447125973939950514628404767431363739978259184541176413327906460636584152927019030276017339474866960348694976541752429306040727005059039503148522921392575594845078867977925253931765156416197168443524369794447355964260633391055126826061595726217036698506473281266724521989060549880280782881429796336696744124805982192146339565745722102298677599746738126069367069134081559412016115960190237753525556300606247983261249881288192937343476862689219239777833910733106588256813777172328315329082525092733047850724977139448333892552081175608452966590553940965568541706001179857293813998258319293679100391844099286575605993598910002969864460974714718470101531283762631146774209145574041815908800064943237855839308530828305476076799524357391631221886057549673832243195650655460852881201902363644712703748634421727257879503428486312944916318475347531435041392096108796057730987201352484075057637199253650470908582513936863463863368042891767107602111159828875539940120076013947033661793715396306139863655492213741597905119083588290097656647300733879314678913181465109316761575821351424860442292445304113160652700974330088499034675405518640677342603583409608605533747362760935658853109760994238347382222087292464497684560579562516765574088410321731345627735856052358236389532038534024842273371639123973215995440828421666636023296545694703577184873442034227706653837387506169212768015766181095420097708363604361110592409117889540338021426523948929686439808926114635414571535194342850721353453018315875628275733898268898523557799295727645229391567477566676051087887648453493636068278050564622813598885879259940946446041705204470046315137975431737187756039815962647501410906658866162180038266989961965580587208639721176995219466789857011798332440601811575658074284182910615193917630059194314434605154047710570054339000182453117733718955857603607182860506356479979004139761808955363669603162193113250223851791672055180659263518036251214575926238369348222665895576994660491938112486609099798128571823494006615552196112207203092277646200999315244273589488710576623894693889446495093960330454340842102462401048723328750081749179875543879387381439894238011762700837196053094383940063756116458560943129517597713935396074322792489221267045808183313764165818269562105872892447740035947009268662659651422050630078592002488291860839743732353849083964326147000532423540647042089499210250404726781059083644007466380020870126664209457181702946752278540074508552377720890581683918446592829417018288233014971554235235911774818628592967605048203864343108779562892925405638946621948268711042828163893975711757786915430165058602965217459581988878680408110328432739867198621306205559855266036405046282152306154594474489908839081999738747452969810776201487134000122535522246695409315213115337915798026979555710508507473874750758068765376445782524432638046143042889235934852961058269382103498000405248407084403561167817170512813378805705643450616119330424440798260377951198548694559152051960093041271007277849301555038895360338261929343797081874320949914159593396368110627557295278004254863060054523839151068998913578820019411786535682149118528207852130125518518493711503422159542244511900207393539627400208110465530207932867254740543652717595893500716336076321614725815407642053020045340183572338292661915308354095120226329165054426123619197051613839357326693760156914429944943744856809775696303129588719161129294681884936338647392747601226964158848900965717086160598147204467428664208765334799858222090619802173211614230419477754990738738567941189824660913091691772274207233367635032678340586301930193242996397204445179288122854478211953530898910125342975524727635730226281382091807439748671453590778633530160821559911314144205091447293535022230817193663509346865858656314855575862447818620108711889760652969899269328178705576435143382060141077329261063431525337182243385263520217735440715281898137698755157574546939727150488469793619500477720970561793913828989845327426227288647108883270173723258818244658436249580592560338105215606206155713299156084892064340303395262263451454283678698288074251422567451806184149564686111635404971897682154227722479474033571527436819409892050113653400123846714296551867344153741615042563256713430247655125219218035780169240326699541746087592409207004669340396510178134857835694440760470232540755557764728450751826890418293966113310160131119077398632462778219023650660374041606724962490137433217246454097412995570529142438208076098364823465973886691349919784013108015581343979194852830436739012482082444814128095443773898320059864909159505322857914576884962578665885999179867520554558099004556461178755249370124553217170194282884617402736649978475508294228020232901221630102309772151569446427909802190826689868834263071609207914085197695235553488657743425277531197247430873043619511396119080030255878387644206085044730631299277888942729189727169890575925244679660189707482960949190648764693702750773866432391919042254290235318923377293166736086996228032557185308919284403805071030064776847863243191000223929785255372375566213644740096760539439838235764606992465260089090624105904215453927904411529580345334500256244101006359530039598864466169595626351878060688513723462707997327233134693971456285542615467650632465676620279245208581347717608521691340946520307673391841147504140168924121319826881568664561485380287539331160232292555618941042995335640095786495340935115266454024418775949316930560448686420862757201172319526405023099774567647838488973464317215980626787671838005247696884084989185086149003432403476742686245952395890358582135006450998178244636087317754378859677672919526111213859194725451400301180503437875277664402762618941017576872680428176623860680477885242887430259145247073950546525135339459598789619778911041890292943818567205070964606263541732944649576612651953495701860015412623962286413897796733329070567376962156498184506842263690367849555970026079867996261019039331263768556968767029295371162528005543100786408728939225714512481135778627664902425161990277471090335933309304948380597856628844787441469841499067123764789582263294904679812089984857163571087831191848630254501620929805829208334813638405421720056121989353669371336733392464416125223196943471206417375491216357008573694397305979709719726666642267431117762176403068681310351899112271339724036887000996862922546465006385288620393800504778276912835603372548255793912985251506829969107754257647488325341412132800626717094009098223529657957997803018282428490221470748111124018607613415150387569830918652780658896682362523937845272634530420418802508442363190383318384550522367992357752929106925043261446950109861088899914658551881873582528164302520939285258077969737620845637482114433988162710031703151334402309526351929588680690821355853680161000213740851154484912685841268695899174149133820578492800698255195740201818105641297250836070356851055331787840829000041552511865779453963317538532092149720526607831260281961164858098684587525129997404092797683176639914655386108937587952214971731728131517932904431121815871023518740757222100123768721944747209349312324107065080618562372526732540733324875754482967573450019321902199119960797989373383673242576103938985349278777473980508080015544764061053522202325409443567718794565430406735896491017610775948364540823486130254718476485189575836674399791508512858020607820554462991723202028222914886959399729974297471155371858924238493855858595407438104882624648788053304271463011941589896328792678327322456103852197011130466587100500083285177311776489735230926661234588873102883515626446023671996644554727608310118788389151149340939344750073025855814756190881398752357812331342279866503522725367171230756861045004548970360079569827626392344107146584895780241408158405229536937499710665594894459246286619963556350652623405339439142111271810691052290024657423604130093691889255865784668461215679554256605416005071276641766056874274200329577160643448606201239821698271723197826816628249938714995449137302051843669076723577400053932662622760323659751718925901801104290384274185507894887438832703063283279963007200698012244365116394086922220745320244624121155804354542064215121585056896157356414313068883443185280853975927734433655384188340303517822946253702015782157373265523185763554098954033236382319219892171177449469403678296185920803403867575834111518824177439145077366384071880489358256868542011645031357633355509440319236720348651010561049872726472131986543435450409131859513145181276437310438972507004981987052176272494065214619959232142314439776546708351714749367986186552791715824080651063799500184295938799158350171580759883784962257398512129810326379376218322456594236685376799113140108043139732335449090824910499143325843298821033984698141715756010829706583065211347076803680695322971990599904451209087275776225351040902392888779424630483280319132710495478599180196967835321464441189260631526618167443193550817081875477050802654025294109218264858213857526688155584113198560022135158887210365696087515063187533002942118682221893775546027227291290504292259787710667873840000616772154638441292371193521828499824350920891801685572798156421858191197490985730570332667646460728757430565372602768982373259745084479649545648030771598153955827779139373601717422996027353102768719449444917939785144631597314435351850491413941557329382048542123508173912549749819308714396615132942045919380106231421774199184060180347949887691051557905554806953878540066453375981862846419905220452803306263695626490910827627115903856995051246529996062855443838330327638599800792922846659503551211245284087516229060262011857775313747949362055496401073001348853150735487353905602908933526400713274732621960311773433943673385759124508149335736911664541281788171454023054750667136518258284898099512139193995633241336556777098003081910272040997148687418134667006094051021462690280449159646545330107754695413088714165312544813061192407821188690056027781824235022696189344352547633573536485619363254417756613981703930632872166905722259745209192917262199844409646158269456380239502837121686446561785235565164127712826918688615572716201474934052276946595712198314943381622114006936307430444173284786101777743837977037231795255434107223445512555589998646183876764903972461167959018100035098928641204195163551108763204267612979826529425882951141275841262732790798807559751851576841264742209479721843309352972665210015662514552994745127631550917636730259462132930190402837954246323258550301096706922720227074863419005438302650681214142135057154175057508639907673946335146209082888934938376439399256900604067311422093312195936202982972351163259386772241477911629572780752395056251581603133359382311500518626890530658368129988108663263271980611271548858798093487912913707498230575929091862939195014721197586067270092547718025750337730799397134539532646195269996596385654917590458333585799102012713204583903200853878881633637685182083727885131175227769609787962142372162545214591281831798216044111311671406914827170981015457781939202311563871950805024679725792497605772625913328559726371211201905720771409148645074094926718035815157571514050397610963846755569298970383547314100223802583468767350129775413279532060971154506484212185936490997917766874774481882870632315515865032898164228288232746866106592732197907162384642153489852476216789050260998045266483929542357287343977680495774091449538391575565485459058976495198513801007958010783759945775299196700547602252552034453988712538780171960718164078124847847257912407824544361682345239570689514272269750431873633263011103053423335821609333191218806608268341428910415173247216053355849993224548730778822905252324234861531520976938461042582849714963475341837562003014915703279685301868631572488401526639835689563634657435321783493199825542117308467745297085839507616458229630324424328237737450517028560698067889521768198156710781633405266759539424926280756968326107495323390536223090807081455919837355377748742029039018142937311529334644468151212945097596534306284215319445727118614900017650558177095302468875263250119705209476159416768727784472000192789137251841622857783792284439084301181121496366424659033634194540657183544771912446621259392656620306888520055599121235363718226922531781458792593750441448933981608657900876165024635197045828895481793756681046474614105142498870252139936870509372305447734112641354892806841059107716677821238332810262185587751312721179344448201440425745083063944738363793906283008973306241380614589414227694747931665717623182472168350678076487573420491557628217583972975134478990696589532548940335615613167403276472469212505759116251529654568544633498114317670257295661844775487469378464233737238981920662048511894378868224807279352022501796545343757274163910791972952950812942922205347717304184477915673991738418311710362524395716152714669005814700002633010452643547865903290733205468338872078735444762647925297690170912007874183736735087713376977683496344252419949951388315074877537433849458259765560996555954318040920178497184685497370696212088524377013853757681416632722412634423982152941645378000492507262765150789085071265997036708726692764308377229685985169122305037462744310852934305273078865283977335246017463527703205938179125396915621063637625882937571373840754406468964783100704580613446731271591194608435935825987782835266531151065041623295329047772174083559349723758552138048305090009646676088301540612824308740645594431853413755220166305812111033453120745086824339432159043594430312431227471385842030390106070940315235556172767994160020393975099897629335325855575624808996691829864222677502360193257974726742578211119734709402357457222271212526852384295874273501563660093188045493338989741571490544182559738080871565281430102670460284316819230392535297795765862414392701549740879273131051636119137577008929564823323648298263024607975875767745377160102490804624301856524161756655600160859121534556267602192689982855377872583145144082654583484409478463178777374794653580169960779405568701192328608041130904629350871827125934668712766694873899824598527786499569165464029458935064964335809824765965165142090986755203808309203230487342703468288751604071546653834619611223013759451579252696743642531927390036038608236450762698827497618723575476762889950752114804852527950845033958570838130476937881321123674281319487950228066320170022460331989671970649163741175854851878484012054844672588851401562725019821719066960812627785485964818369621410721714214986361918774754509650308957099470934337856981674465828267911940611956037845397855839240761276344105766751024307559814552786167815949657062559755074306521085301597908073343736079432866757890533483669555486803913433720156498834220893399971641479746938696905480089193067138057171505857307148815649920714086758259602876056459782423770242469805328056632787041926768467116266879463486950464507420219373945259262668613552940624781361206202636498199999498405143868285258956342264328707663299304891723400725471764188685351372332667877921738347541480022803392997357936152412755829569276837231234798989446274330454566790062032420516396282588443085438307201495672106460533238537203143242112607424485845094580494081820927639140008540422023556260218564348994145439950410980591817948882628052066441086319001688568155169229486203010738897181007709290590480749092427141018933542818429995988169660993836961644381528877214085268088757488293258735809905670755817017949161906114001908553744882726200936685604475596557476485674008177381703307380305476973609786543859382187220583902344443508867499866506040645874346005331827436296177862518081893144363251205107094690813586440519229512932450078833398788429339342435126343365204385812912834345297308652909783300671261798130316794385535726296998740359570458452230856390098913179475948752126397078375944861139451960286751210561638976008880092746115860800207803341591451797073036835196977766076373785333012024120112046988609209339085365773222392412449051532780950955866459477634482269986074813297302630975028812103517723124465095349653693090018637764094094349837313251321862080214809922685502948454661814715557444709669530177690434272031892770604717784527939160472281534379803539679861424370956683221491465438014593829277393396032754048009552231816667380357183932757077142046723838624617803976292377131209580789363841447929802588065522129262093623930637313496640186619510811583471173312025805866727639992763579078063818813069156366274125431259589936119647626101405563503399523140323113819656236327198961837254845333702062563464223952766943568376761368711962921818754576081617053031590728828700712313666308722754918661395773730546065997437810987649802414011242142773668082751390959313404155826266789510846776118665957660165998178089414985754976284387856100263796543178313634025135814161151902096499133548733131115022700681930135929595971640197196053625033558479980963488718039111612813595968565478868325856437896173159762002419621552896297904819822199462269487137462444729093456470028537694958859591606789282491054412515996300781368367490209374915732896270028656829344431342347351239298259166739503425995868970697267332582735903121288746660451461487850346142827765991608090398652575717263081833494441820193533385071292345774375579344062178711330063106003324053991693682603746176638565758877580201229366353270267100681261825172914608202541892885935244491070138206211553827793565296914576502048643282865557934707209634807372692141186895467322767751335690190153723669036865389161291688887876407525493494249733427181178892759931596719354758988097924525262363659036320070854440784544797348291802082044926670634420437555325050527522833778887040804033531923407685630109347772125639088640413101073817853338316038135280828119040832564401842053746792992622037698718018061122624490909242641985820861751177113789051609140381575003366424156095216328197122335023167422600567941281406217219641842705784328959802882335059828208196666249035857789940333152274817776952843681630088531769694783690580671064828083598046698841098135158654906933319522394363287923990534810987830274500172065433699066117784554364687723631844464768069142828004551074686645392805399409108754939166095731619715033166968309929466349142798780842257220697148875580637480308862995118473187124777291910070227588893486939456289515802965372150409603107761289831263589964893410247036036645058687287589051406841238124247386385427908282733827973326885504935874303160274749063129572349742611221517417153133618622410913869500688835898962349276317316478340077460886655598733382113829928776911495492184192087771606068472874673681886167507221017261103830671787856694812948785048943063086169948798703160515884108282351274153538513365895332948629494495061868514779105804696039069372662670386512905201137810858616188886947957607413585534585151768051973334433495230120395770739623771316030242887200537320998253008977618973129817881944671731160647231476248457551928732782825127182446807824215216469567819294098238926284943760248852279003620219386696482215628093605373178040863727268426696421929946819214908701707533361094791381804063287387593848269535583077395761447997270003472880182785281389503217986345216111066608839314053226944905455527867894417579202440021450780192099804461382547805858048442416404775031536054906591430078158372430123137511562284015838644270890718284816757527123846782459534334449622010096071051370608461801187543120725491334994247617115633321408934609156561550600317384218701570226103101916603887064661438897736318780940711527528174689576401581047016965247557740891644568677717158500583269943401677202156767724068128366565264122982439465133197359199709403275938502669557470231813203243716420586141033606524536939160050644953060161267822648942437397166717661231048975031885732165554988342121802846912529086101485527815277625623750456375769497734336846015607727035509629049392487088406281067943622418704747008368842671022558302403599841645951122485272633632645114017395248086194635840783753556885622317115520947223065437092606797351000565549381224575483728545711797393615756167641692895805257297522338558611388322171107362265816218842443178857488798109026653793426664216990914056536432249301334867988154886628665052346997235574738424830590423677143278792316422403877764330192600192284778313837632536121025336935812624086866699738275977365682227907215832478888642369346396164363308730139814211430306008730666164803678984091335926293402304324974926887831643602681011309570716141912830686577323532639653677390317661361315965553584999398600565155921936759977717933019744688148371103206503693192894521402650915465184309936553493337183425298433679915939417466223900389527673813330617747629574943868716978453767219493506590875711917720875477107189937960894774512654757501871194870738736785890200617373321075693302216320628432065671192096950585761173961632326217708945426214609858410237813215817727602222738133495410481003073275107799948991977963883530734443457532975914263768405442264784216063122769646967156473999043715903323906560726644116438605404838847161912109008701019130726071044114143241976796828547885524779476481802959736049439700479596040292746299203572099761950140348315380947714601056333446998820822120587281510729182971211917876424880354672316916541852256729234429187128163232596965413548589577133208339911288775917226115273379010341362085614577992398778325083550730199818459025958355989260553299673770491722454935329683300002230181517226575787524058832249085821280089747909326100762578770428656006996176212176845478996440705066241710213327486796237430229155358200780141165348065647488230615003392068983794766255036549822805329662862117930628430170492402301985719978948836897183043805182174419147660429752437251683435411217038631379411422095295885798060152938752753799030938871683572095760715221900279379292786303637268765822681241993384808166021603722154710143007377537792699069587121289288019052031601285861825494413353820784883465311632650407642428390870121015194231961652268422003711230464300673442064747718021353070124098860353399152667923871101706221865883573781210935179775604425634694999787251125440854522274810914874307259869602040275941178942581281882159952359658979181144077653354321757595255536158128001163846720319346507296807990793963714961774312119402021297573125165253768017359101557338153772001952444543620071848475663415407442328621060997613243487548847434539665981338717466093020535070271952983943271425371155766600025784423031073429551533945060486222764966687624079324353192992639253731076892135352572321080889819339168668278948281170472624501948409700975760920983724090074717973340788141825195842598096241747610138252643955135259311885045636264188300338539652435997416931322894719878308427600401368074703904097238473945834896186539790594118599310356168436869219485382055780395773881360679549900085123259442529724486666766834641402189915944565309423440650667851948417766779470472041958822043295380326310537494883122180391279678446100139726753892195119117836587662528083690053249004597410947068772912328214304635337283519953648274325833119144459017809607782883583730111857543659958982724531925310588115026307542571493943024453931870179923608166611305426253995833897942971602070338767815033010280120095997252222280801423571094760351925544434929986767817891045559063015953809761875920358937341978962358931125983902598310267193304189215109689156225069659119828323455503059081730735195503721665870288053992138576037035377105178021280129566841984140362872725623214428754302210909472721073474134975514190737043318276626177275996888826027225247133683353452816692779591328861381766349857728936900965749562287103024362590772412219094300871755692625758065709912016659622436080242870024547362036394841255954881727272473653467783647201918303998717627037515724649922289467932322693619177641614618795613956699567783068290316589699430767333508234990790624100202506134057344300695745474682175690441651540636584680463692621274211075399042188716127617787014258864825775223889184599523376292377915585744549477361295525952226578636462118377598473700347971408206994145580719080213590732269233100831759510659019121294795408603640757358750205890208704579670007055262505811420663907459215273309406823649441590891009220296680523325266198911311842016291631076894084723564366808182168657219688268358402785500782804043453710183651096951782335743030504852653738073531074185917705610397395062640355442275156101107261779370634723804990666922161971194259120445084641746383589938239946517395509000859479990136026674261494290066467115067175422177038774507673563742154782905911012619157555870238957001405117822646989944917908301795475876760168094100135837613578591356924455647764464178667115391951357696104864922490083446715486383054477914330097680486878348184672733758436892724310447406807685278625585165092088263813233623148733336714764520450876627614950389949504809560460989604329123358348859990294526400284994280878624039811814884767301216754161106629995553668193123287425702063738352020086863691311733469731741219153633246745325630871347302792174956227014687325867891734558379964351358800959350877556356248810493852999007675135513527792412429277488565888566513247302514710210575352516511814850902750476845518252096331899068527614435138213662152368890578786699432288816028377482035506016029894009119713850179871683633744139275973644017007014763706655703504338121113576415018451821413619823495159601064752712575935185304332875537783057509567425442684712219618709178560783936144511383335649103256405733898667178123972237519316430617013859539474367843392670986712452211189690840236327411496601243483098929941738030588417166613073040067588380432111555379440605497721705942821514886165672771240903387727745629097110134885184374118695655449745736845218066982911045058004299887953899027804383596282409421860556287788428802127553884803728640019441614257499904272009595204654170598104989967504511936471172772220436102614079750809686975176600237187748348016120310234680567112644766123747627852190241202569943534716226660893675219833111813511146503854895025120655772636145473604426859498074396932331297127377157347099713952291182653485155587137336629120242714302503763269501350911612952993785864681307226486008270881333538193703682598867893321238327053297625857382790097826460545598555131836688844628265133798491667839409761353766251798258249663458771950124384040359140849209733754642474488176184070023569580177410177696925077814893386672557898564589851056891960924398841569280696983352240225634570497312245269354193837004843183357196516626721575524193401933099018319309196582920969656247667683659647019595754739345514337413708761517323677204227385674279170698204549953095918872434939524094441678998846319845504852393662972079777452814399418256789457795712552426826089940863317371538896262889629402112108884427376568624527612130371017300785135715404533041507959447776143597437803742436646973247138410492124314138903579092416036406314038149831481905251720937103964026808994832572297954564042701757722904173234796073618787889913318305843069394825961318713816423467218730845133877219086975104942843769325024981656673816260615941768252509993741672883951744066932549653403101452225316189009235376486378482881344209870048096227171226407489571939002918573307460104360729190945767994614929290427981687729426487729952858434647775386906950148984133924540394144680263625402118614317031251117577642829914644533408920976961699098372652361768745605894704968170136974909523072082682887890730190018253425805343421705928713931737993142410852647390948284596418093614138475831136130576108462366837237695913492615824516221552134879244145041756848064120636520170386330129532777699023118648020067556905682295016354931992305914246396217025329747573114094220180199368035026495636955866425906762685687372110339156793839895765565193177883000241613539562437777840801748819373095020699900890899328088397430367736595524891300156633294077907139615464534088791510300651321934486673248275907946807879819425019582622320395131252014109960531260696555404248670549986786923021746989009547850725672978794769888831093487464426400718183160331655511534276155622405474473378049246214952133258527698847336269182649174338987824789278468918828054669982303689939783413747587025805716349413568433929396068192061773331791738208562436433635359863494496890781064019674074436583667071586924521182997893804077137501290858646578905771426833582768978554717687184427726120509266486102051535642840632368481807287940717127966820060727559555904040233178749447346454760628189541512139162918444297651066947969354016866010055196077687335396511614930937570968554559381513789569039251014953265628147011998326992200066392875374713135236421589265126204072887716578358405219646054105435443642166562244565042999010256586927279142752931172082793937751326106052881235373451068372939893580871243869385934389175713376300720319760816604464683937725806909237297523486702916910426369262090199605204121024077648190316014085863558427609537086558164273995349346546314504040199528537252004957805254656251154109252437991326262713609099402902262062836752132305065183934057450112099341464918433323646569371725914489324159006242020612885732926133596808726500045628284557574596592120530341310111827501306961509835515632004310784601906565493806542525229161991819959602752327702249855738824899882707465936355768582560518068964285376850772012220347920993936179268206590142165615925306737944568949070853263568196831861772268249911472615732035807646298116244013316737892788689229032593349861797021994981925739617673075834417098559222170171825712777534491508205278430904619460835217402005838672849709411023266953921445461066215006410674740207009189911951376466904481267253691537162290791385403937560077835153374167747942100384002308951850994548779039346122220865060160500351776264831611153325587705073541279249909859373473787081194253055121436979749914951860535920403830235716352727630874693219622190064260886183676103346002255477477813641012691906569686495012688376296907233961276287223041141813610060264044030035996988919945827397624114613744804059697062576764723766065541618574690527229238228275186799156983390747671146103022776606020061246876477728819096791613354019881402757992174167678799231603963569492851513633647219540611171767387372555728522940054361785176502307544693869307873499110352182532929726044553210797887711449898870911511237250604238753734841257086064069052058452122754533848008205302450456517669518576913200042816758054924811780519832646032445792829730129105318385636821206215531288668564956512613892261367064093953334570526986959692350353094224543865278677673027540402702246384483553239914751363441044050092330361271496081355490531539021002299595756583705381261965683144286057956696622154721695620870013727768536960840704833325132793112232507148630206951245395003735723346807094656483089209801534878705633491092366057554050864111521441481434630437273271045027768661953107858323334857840297160925215326092558932655600672124359464255065996771770388445396181632879614460817789272171836908880126778207430106422524634807454300476492885553409062185153654355474125476152769772667769772777058315801412185688011705028365275543214803488004442979998062157904564161957212784508928489806426497427090579129069217807298769477975112447305991406050629946894280931034216416629935614828130998870745292716048433630818404126469637925843094185442216359084576146078558562473814931427078266215185541603870206876980461747400808324343665382354555109449498431093494759944672673665352517662706772194183191977196378015702169933675083760057163454643671776723387588643405644871566964321041282595645349841388412890420682047007615596916843038999348366793542549210328113363184722592305554383058206941675629992013373175489122037230349072681068534454035993561823576312837767640631013125335212141994611869350833176587852047112364331226765129964171325217513553261867681942338790365468908001827135283584888444111761234101179918709236507184857856221021104009776994453121795022479578069506532965940383987369907240797679040826794007618729547835963492793904576973661643405359792219285870574957481696694062334272619733518136626063735982575552496509807260123668283605928341855848026958413772558970883789942910549800331113884603401939166122186696058491571485733568286149500019097591125218800396419762163559375743718011480559442298730418196808085647265713547612831629200449880315402105530597076666362749328308916880932359290081787411985738317192616728834918402429721290434965526942726402559641463525914348400675867690350382320572934132981593533044446496829441367323442158380761694831219333119819061096142952201536170298575105594326461468505452684975764807808009221335811378197749271768545075538328768874474591593731162470601091244609829424841287520224462594477638749491997840446829257360968534549843266536862844489365704111817793806441616531223600214918768769467398407517176307516849856359201486892943105940202457969622924566644881967576294349535326382171613395757790766370764569570259738800438415805894336137106551859987600754924187211714889295221737721146081154344982665479872580056674724051122007383459271575727715218589946948117940644466399432370044291140747218180224825837736017346685300744985564715420036123593397312914458591522887408719508708632218837288262822884631843717261903305777147651564143822306791847386039147683108141358275755853643597721650028277803713422869688787349795096031108899196143386664068450697420787700280509367203387232629637856038653216432348815557557018469089074647879122436375556668678067610544955017260791142930831285761254481944449473244819093795369008206384631678225064809531810406570254327604385703505922818919878065865412184299217273720955103242251079718077833042609086794273428955735559252723805511440438001239041687716445180226491681641927401106451622431101700056691121733189423400547959684669804298017362570406733282129962153684881404102194463424646220745575643960452985313071409084608499653767803793201899140865814662175319337665970114330608625009829566917638846056762972931464911493704624469351984039534449135141193667933301936617663652555149174982307987072280860859626112660504289296966535652516688885572112276802772743708917389639772257564890533401038855931125679991516589025016486961427207005916056166159702451989051832969278935550303934681219761582183980483960562523091462638447386296039848924386187298507775928792722068554807210497817653286210187476766897248841139560349480376727036316921007350834073865261684507482496448597428134936480372426116704266870831925040997615319076855770327421785010006441984124207396400139603601583810565928413684574119102736420274163723488214524101347716529603128408658419787951116511529827814620379139855006399960326591248525308493690313130100799977191362230866011099929142871249388541612038020411340188887219693477904497527454288072803509305828754420755134816660927879353566521255620139988249628478726214432362853676502591450468377635282587652139156480972141929675549384375582600253168536356731379262475878049445944183429172756988376226261846365452743497662411138451305481449836311789784489732076719508784158618879692955819733250699951402601511675529750575437810242238957925786562128432731202200716730574069286869363930186765958251326499145950260917069347519408975357464016830811798846452473618956056479426358070562563281189269663026479535951097127659136233180866921535788607812759910537171402204506186075374866306350591483916467656723205714516886170790984695932236724946737583099607042589220481550799132752088583781117685214269334786921895240622657921043620348852926267984013953216458791151579050460579710838983371864038024417511347226472547010794793996953554669619726763255229914654933499663234185951450360980344092212206712567698723427940708857070474293173329188523896721971353924492426178641188637790962814486917869468177591717150669111480020759432012061969637795103227089029566085562225452602610460736131368869009281721068198618553780982018471154163630326265699283424155023600978046417108525537612728905335045506135684143775854429677977014660294387687225115363801191758154028120818255606485410787933598921064427244898618961629413418001295130683638609294100083136673372153008352696235737175330738653338204842190308186449184093723944033405244909554558016406460761581010301767488475017661908692946098769201691202181688291040870709560951470416921147027413390052253340834812870353031023919699978597413908593605433599697075604460134242453682496098772581311024732798562072126572499003468293886872304895562253204463602639854225258416464324271611419817802482595563544907219226583863662663750835944314877635156145710745528016159677048442714194435183275698407552677926411261765250615965235457187956673170913319358761628255920783080185206890151504713340386100310055914817852110384754542933389188444120517943969970194112695119526564919594189975418393234647424290702718875223534393673633663200307232747037407123982562024662651974090199762452056198557625760008708173083288344381831070054514493545885422678578551915372292379555494333410174420169600090696415612732297770221217951868376359082255128816470021992348864043959153018464004714321186360622527011541122283802778538911098490201342741014121559769965438877197485376431158229838533123071751132961904559007938064276695819014842627991221792947987348901868471676503827328552059082984529806259250352128451925927986593506132961946796252373972565584157853744567558998032405492186962888490332560851455344391660226257775512916200772796852629387937530454181080729285891989715381797343496187232927614747850192611450413274873242970583408471112333746274617274626582415324271059322506255302314738759251724787322881491455915605036334575424233779160374952502493022351481961381162563911415610326844958072508273431765944054098269765269344579863479709743124498271933113863873159636361218623497261409556079920628316999420072054811525353393946076850019909886553861433495781650089961649079678142901148387645682174914075623767618453775144031475411206760160726460556859257799322070337333398916369504346690694828436629980037414527627716547623825546170883189810868806847853705536480469350958818025360529740793538676511195079373282083146268960071075175520614433784114549950136432446328193346389050936545714506900864483440180428363390513578157273973334537284263372174065775771079830517555721036795976901889958494130195999573017901240193908681356585539661941371794487632079868800371607303220547423572266896801882123424391885984168972277652194032493227314793669234004848976059037958094696041754279613782553781223947646147832926976545162290281701100437846038756544151739433960048915318817576650500951697402415644771293656614253949368884230517400129920556854289853897942669956777027089146513736892206104415481662156804219838476730871787590279209175900695273456682026513373111518000181434120962601658629821076663523361774007837783423709152644063054071807843358061072961105550020415131696373046849213356837265400307509829089364612047891114753037049893952833457824082817386441322710002968311940203323456420826473276233830294639378998375836554559919340866235090967961134004867027123176526663710778725111860354037554487418693519733656621772359229396776463251562023487570113795712096237723431370212031004965152111976013176419408203437348512852602913334915125083119802850177855710725373149139215709105130965059885999931560863655477403551898166733535880048214665099741433761182777723351910741217572841592580872591315074606025634903777263373914461377038021318347447301113032670296917335047701632106616227830027269283365584011791419447808748253360714403296252285775009808599609040936312635621328162071453406104224112083010008587264252112262480142647519426184325853386753874054743491072710049754281159466017136122590440158991600229827801796035194080046513534752698777609527839984368086908989197839693532179980139135442552717910225397010810632143048511378291498511381969143043497500189980681644412123273328307192824362406733196554692677851193152775113446468905504248113361434984604849051258345683266441528489713972376040328212660253516693914082049947320486021627759791771234751097502403078935759937715095021751693555827072533911892334070223832077585802137174778378778391015234132098489423459613692340497998279304144463162707214796117456975719681239291913740982925805561955207434243295982898980529233366415419256367380689494201471241340525072204061794355252555225008748790086568314542835167750542294803274783044056438581591952666758282929705226127628711040134801787224801789684052407924360582742467443076721645270313451354167649668901274786801010295133862698649748212118629040337691568576240699296372493097201628707200189835423690364149270236961938547372480329855045112089192879829874467864129159417531675602533435310626745254507114181483239880607297140234725520713490798398982355268723950909365667878992383712578976248755990443228895388377317348941122757071410959790047919301046740750411435381782464630795989555638991884773781341347070246747362112048986226991888517456251732519341352038115863350123913054441910073628447567514161050410973505852762044489190978901984315485280533985777844313933883994310444465669244550885946314081751220331390681596592510546858013133838152176418210433429788826119630443111388796258746090226130900849975430395771243230616906262919403921439740270894777663702488155499322458825979020631257436910946393252806241642476868495455324938017639371615636847859823715902385421265840615367228607131702674740131145261063765383390315921943469817605358380310612887852051546933639241088467632009567089718367490578163085158138161966882222047570437590614338040725853862083565176998426774523195824182683698270160237414938363496629351576854061397342746470899685618170160551104880971554859118617189668025973541705423985135560018720335079060946421271143993196046527424050882225359773481519135438571253258540493946010865793798058620143366078825219717809025817370870916460452727977153509910340736425020386386718220522879694458387652947951048660717390229327455426785669776865939923416834122274663015062155320502655341460995249356050854921756549134830958906536175693817637473644183378974229700703545206663170929607591989627732423090252397443861014263098687733913882518684316501027964911497737582888913450341148865948670215492101084328080783428089417298008983297536940644969903125399863919581601468995220880662285408414864274786281975546629278814621607171381880180840572084715868906836919393381864278454537956719272397972364651667592011057995663962598535512763558768140213409829016296873429850792471846056874828331381259161962476156902875901072733103299140623864608333378638257926302391590003557609032477281338887339178096966601469615031754226751125993315529674213336300222964906480934582008181061802100227664580400278213336758573019011371754672763059044353131319036092489097246427928455549913490005180295707082919052556781889913899625138662319380053611346224294610248954072404857123256628888931722116432947816190554868054943441034090680716088028227959686950133643814268252170472870863010137301155236861416908375675747637239763185757038109443390564564468524183028148107998376918512127201935044041804604721626939445788377090105974693219720558114078775989772072009689382249303236830515862657281114637996983137517937623215111252349734305240622105244234353732905655163406669506165892878218707756794176080712973781335187117931650033155523822487730653444179453415395202424449703410120874072188109388268167512042299404948179449472732894770111574139441228455521828424922240658752689172272780607116754046973008037039618787796694882555614674384392570115829546661358678671897661297311267200072971553613027503556167817765442287442114729881614802705243806817653573275578602505847084013208837932816008769081300492491473682517035382219619039014999523495387105997351143478292339499187936608692301375596368532373806703591144243268561512109404259582639301678017128669239283231057658851714020211196957064799814031505633045141564414623163763809904402816256917576489142569714163598439317433270237812336938043012892626375382667795034169334323607500248175741808750388475094939454896209740485442635637164995949920980884294790363666297526003243856352945844728944547166209297495496616877414120882130477022816116456044007236351581149729739218966737382647204722642221242016560150284971306332795814302516013694825567014780935790889657134926158161346901806965089556310121218491805847922720691871696316330044858020102860657858591269974637661741463934159569539554203314628026518951167938074573315759846086173702687867602943677780500244673391332431669880354073232388281847501051641331189537036488422690270478052742490603492082954755054003457160184072574536938145531175354210726557835615499874447480427323457880061873149341566046352979779455075359304795687209316724536547208381685855606043801977030764246083489876101345709394877002946175792061952549255757109038525171488525265671045349813419803390641529876343695420256080277614421914318921393908834543131769685101840103844472348948869520981943531906506555354617335814045544837884752526253949665869992058417652780125341033896469818642430034146791380619028059607854888010789705516946215228773090104467462497979992627120951684779568482583341402266477210843362437593741610536734041954738964197895425335036301861400951534766961476255651873823292468547356935802896011536791787303553159378363082248615177770541577576561759358512016692943111138863582159667618830326104164651714846979385422621687161400122378213779774131268977266712992025922017408770076956283473932201088159356286281928563571893384958850603853158179760679479840878360975960149733420572704603521790605647603285569276273495182203236144112584182426247712012035776388895974318232827871314608053533574494297621796789034568169889553518504478325616380709476951699086247100019748809205009521943632378719764870339223811540363475488626845956159755193765410115014067001226927474393888589943859730245414801061235908036274585288493563251585384383242493252666087588908318700709100237377106576985056433928854337658342596750653715005333514489908293887737352051459333049626531415141386124437935885070944688045486975358170212908490787347806814366323322819415827345671356443171537967818058195852464840084032909981943781718177302317003989733050495387356116261023999433259780126893432605584710278764901070923443884634011735556865903585244919370181041626208504299258697435817098133894045934471937493877624232409852832762266604942385129709453245586252103600829286649724174919141988966129558076770979594795306013119159011773943104209049079424448868513086844493705909026006120649425744710353547657859242708130410618546219881830090634588187038755856274911587375421064667951346487586771543838018521348281915812462599335160198935595167968932852205824799421034512715877163345222995418839680448835529753361286837225935390079201666941339091168758803988828869216002373257361588207163516271332810518187602104852180675526648673908900907195138058626735124312215691637902277328705410842037841525683288718046987952513073266340278519059417338920358540395677035611329354482585628287610610698229721420961993509331312171187891078766872044548876089410174798647137882462153955933333275562009439580434537919782280590395959927436913793778664940964048777841748336432684026282932406260081908081804390914556351936856063045089142289645219987798849347477729132797266027658401667890136490508741142126861969862044126965282981087045479861559545338021201155646979976785738920186243599326777689454060508218838227909833627167124490026761178498264377033002081844590009717235204331994708242098771514449751017055643029542821819670009202515615844174205933658148134902693111517093872260026458630561325605792560927332265579346280805683443921373688405650434307396574061017779370141424615493070741360805442100295600095663588977899267630517718781943706761498217564186590116160865408635391513039201316805769034172596453692350806417446562351523929050409479953184074862151210561833854566176652606393713658802521666223576132201941701372664966073252010771947931265282763302413805164907174565964853748354669194523580315301969160480994606814904037819829732360930087135760798621425422096419004367905479049930078372421581954535418371129368658430553842717628035279128821129308351575656599944741788438381565148434229858704245592434693295232821803508333726283791830216591836181554217157448465778420134329982594566884558266171979012180849480332448787258183774805522268151011371745368417870280274452442905474518234674919564188551244421337783521423865979925988203287085109338386829906571994614906290257427686038850511032638544540419184958866538545040571323629681069146814847869659166861842756798460041868762298055562963045953227923051616721591968675849523635298935788507746081537321454642984792310511676357749494622952569497660359473962430995343310404994209677883827002714478494069037073249106444151696053256560586778757417472110827435774315194060757983563629143326397812218946287447798119807225646714664054850131009656786314880090303749338875364183165134982546694673316118123364854397649325026179549357204305402182974871251107404011611405899911093062492312813116340549262571356721818628932786138833718028535056503591952741400869510926167541476792668032109237467087213606278332922386413619594121339278036118276324106004740971111048140003623342714514483334641675466354699731494756643423659493496845884551524150756376605086632827424794136062876041290644913828519456402643153225858624043141838669590633245063000392213192647625962691510904457695301444054618037857503036686212462278639752746667870121003392984873375014475600322100622358029343774955032037012738468163061026570300872275462966796880890587127676361066225722352229739206443093524327228100859973095132528630601105497915644791845004618046762408928925680912930592960642357021061524646205023248966593987324933967376952023991760898474571843531936646529125848064480196520162838795189499336759241485626136995945307287254532463291529110128763770605570609531377527751867923292134955245133089867969165129073841302167573238637575820080363575728002754490327953079900799442541108725693188014667935595834676432868876966610097395749967836593397846346959948950610490383647409504695226063858046758073069912290474089879166872117147527644711604401952718169508289733537148530928937046384420893299771125856840846608339934045689026787516008775461267988015465856522061210953490796707365539702576199431376639960606061106406959330828171876426043573425361756943784848495250108266488395159700490598380812105221111091943323951136051446459834210799058082093716464523127704023160072138543723461267260997870385657091998507595634613248460188409850194287687902268734556500519121546544063829253851276317663922050938345204300773017029940362615434001322763910912988327863920412300445551684054889809080779174636092439334912641164240093880746356607262336695842764583698268734815881961058571835767462009650526065929263548291499045768307210893245857073701660717398194485028842603963660746031184786225831056580870870305567595861341700745402965687634774176431051751036732869245558582082372038601781739405175130437994868822320044378043103170921034261674998000073016094814586374488778522273076330495383944345382770608760763542098445008306247630253572781032783461766970544287155315340016497076657195985041748199087201490875686037783591994719343352772947285537925787684832301101859365800717291186967617655053775030293033830706448912811412025506150896411007623824574488655182581058140345320124754723269087547507078577659732542844459353044992070014538748948226556442223696365544194225441338212225477497535494624827680533336983284156138692363443358553868471111430498248398991803165458638289353799130535222833430137953372954016257623228081138499491876144141322933767106563492528814528239506209022357876684650116660097382753660405446941653422239052108314585847035529352219928272760574821266065291385530345549744551470344939486863429459658431024190785923680224560763936784166270518555178702904073557304620639692453307795782245949710420188043000183881429008173039450507342787013124466860092778581811040911511729374873627887874907465285565434748886831064110051023020875107768918781525622735251550379532444857787277617001964853703555167655209119339343762866284619844026295252183678522367475108809781507098978413086245881522660963551401874495836926917799047120726494905737264286005211403581231076006699518536124862746756375896225299116496066876508261734178484789337295056739007878617925351440621045366250640463728815698232317500596261080921955211150859302955654967538862612972339914628358476048627627027309739202001432248707582337354915246085608210328882974183906478869923273691360048837436615223517058437705545210815513361262142911815615301758882573594892507108879262128641392443309383797333867806131795237315266773820858024701433527009243803266951742119507670884326346442749127558907746863582162166042741315170212458586056233631493164646913946562497471741958354218607748711057338458433689939645913740603382159352243594751626239188685307822821763983237306180204246560477527943104796189724299533029792497481684052893791044947004590864991872727345413508101983881864673609392571930511968645601855782450218231065889437986522432050677379966196955472440585922417953006820451795370043472451762893566770508490213107736625751697335527462302943031203596260953423574397249659211010657817826108745318874803187430823573699195156340957162700992444929749105489851519658664740148225106335367949737142510229341882585117371994499115097583746130105505064197721531929354875371191630262030328588658528480193509225875775597425276584011721342323648084027143356367542046375182552524944329657043861387865901965738802868401894087672816714137033661732650120578653915780703088714261519075001492576112927675193096728453971160213606303090542243966320674323582797889332324405779199278484633339777737655901870574806828678347965624146102899508487399692970750432753029972872297327934442988646412725348160603779707298299173029296308695801996312413304939350493325412355071054461182591141116454534710329881047844067780138077131465400099386306481266614330858206811395838319169545558259426895769841428893743467084107946318932539106963955780706021245974898293564613560788983472419979478564362042094613412387613198865352358312996862268948608408456655606876954501274486631405054735351746873009806322780468912246821460806727627708402402266155485024008952891657117617439020337584877842911289623247059191874691042005848326140677333751027195653994697162517248312230633919328707983800748485726516123434933273356664473358556430235280883924348278760886164943289399166399210488307847777048045728491456303353265070029588906265915498509407972767567129795010098229476228961891591441520032283878773485130979081019129267227103778898053964156362364169154985768408398468861684375407065121039062506128107663799047908879674778069738473170475253442156390387201238806323688037017949308954900776331523063548374256816653361606641980030188287123767481898330246836371488309259283375902278942588060087286038859168849730693948020511221766359138251524278670094406942355120201568377778851824670025651708509249623747726813694284350062938814429987905301056217375459182679973217735029368928065210025396268807498092643458011655715886700443503976505323478287327368840863540002740676783821963522226539290939807367391364082898722017776747168118195856133721583119054682936083236976113450281757830202934845982925000895682630271263295866292147653142233351793093387951357095346377183684092444422096319331295620305575517340067973740614162107923633423805646850092037167152642556371853889571416419772387422610596667396997173168169415435095283193556417705668622215217991151355639707143312893657553844648326201206424338016955862698561022460646069330793847858814367407000599769703649019273328826135329363112403650698652160638987250267238087403396744397830258296894256896741864336134979475245526291426522842419243083388103580053787023999542172113686550275341362211693140694669513186928102574795985605145005021715913317751609957865551981886193211282110709442287240442481153406055895958355815232012184605820563592699303478851132068626627588771446035996656108430725696500563064489187599466596772847171539573612108180841547273142661748933134174632662354222072600146012701206934639520564445543291662986660783089068118790090815295063626782075614388815781351134695366303878412092346942868730839320432333872775496805210302821544324723388845215343727250128589747691460808314404125868181540049187772287869801853454537006526655649170915429522756709222217474112062720656622989806032891672068743654948246108697367225547404812889242471854323605753411672850757552057131156697954584887398742228135887985840783135060548290551482785294891121905383195624228719484759407859398047901094194070671764439032730712135887385049993638838205501683402777496070276844880281912220636888636811043569529300652195528261526991271637277388418993287130563464688227398288763198645709836308917786487086676185485680047672552675414742851028145807403152992197814557756843681110185317498167016426647884090262682824448258027532094549915104518517716546311804904567985713257528117913656278158111288816562285876030875974963849435275676612168959261485030785362045274507752950631012480341804584059432926079854435620093708091821523920371790678121992280496069738238743312626730306795943960954957189577217915597300588693646845576676092450906088202212235719254536715191834872587423919410890444115959932760044506556206461164655665487594247369252336955993030355095817626176231849561906494839673002037763874369343999829430209147073618947932692762445186560239559053705128978163455423320114975994896278424327483788032701418676952621180975006405149755889650293004867605208010491537885413909424531691719987628941277221129464568294860281493181560249677887949813777216229359437811004448060797672429276249510784153446429150842764520002042769470698041775832209097020291657347251582904630910359037842977572651720877244740952267166306005469716387943171196873484688738186656751279298575016363411314627530499019135646823804329970695770150789337728658035712790913767420805655493624646 hts-1.0.1/bgzf/writer.go000066400000000000000000000130471304417722000151070ustar00rootroot00000000000000// Copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package bgzf import ( "bytes" "compress/gzip" "fmt" "io" "sync" ) // Writer implements BGZF blocked gzip compression. // // Because the SAM specification requires that the RFC1952 FLG header field // be set to 0x04, a Writer's Name and Comment fields should not be set if // its output is to be read by another BGZF decompressor implementation. type Writer struct { gzip.Header w io.Writer active *compressor queue chan *compressor qwg sync.WaitGroup waiting chan *compressor wg sync.WaitGroup closed bool m sync.Mutex err error } // NewWriter returns a new Writer. Writes to the returned writer are // compressed and written to w. // // The number of concurrent write compressors is specified by wc. func NewWriter(w io.Writer, wc int) *Writer { bg, _ := NewWriterLevel(w, gzip.DefaultCompression, wc) return bg } // NewWriterLevel returns a new Writer using the specified compression level // instead of gzip.DefaultCompression. Allowable level options are integer // values between between gzip.BestSpeed and gzip.BestCompression inclusive. // // The number of concurrent write compressors is specified by wc. func NewWriterLevel(w io.Writer, level, wc int) (*Writer, error) { if level < gzip.DefaultCompression || level > gzip.BestCompression { return nil, fmt.Errorf("bgzf: invalid compression level: %d", level) } wc++ // We count one for the active compressor. if wc < 2 { wc = 2 } bg := &Writer{ w: w, waiting: make(chan *compressor, wc), queue: make(chan *compressor, wc), } c := make([]compressor, wc) for i := range c { c[i].Header = &bg.Header c[i].level = level c[i].waiting = bg.waiting c[i].flush = make(chan *compressor, 1) c[i].qwg = &bg.qwg bg.waiting <- &c[i] } bg.active = <-bg.waiting bg.wg.Add(1) go func() { defer bg.wg.Done() for qw := range bg.queue { if !writeOK(bg, <-qw.flush) { break } } }() return bg, nil } func writeOK(bg *Writer, c *compressor) bool { defer func() { bg.waiting <- c }() if c.err != nil { bg.setErr(c.err) return false } if c.buf.Len() == 0 { return true } _, err := io.Copy(bg.w, &c.buf) bg.qwg.Done() if err != nil { bg.setErr(err) return false } c.next = 0 return true } type compressor struct { *gzip.Header gz *gzip.Writer level int next int block [BlockSize]byte buf bytes.Buffer flush chan *compressor qwg *sync.WaitGroup waiting chan *compressor err error } func (c *compressor) writeBlock() { defer func() { c.flush <- c }() if c.gz == nil { c.gz, c.err = gzip.NewWriterLevel(&c.buf, c.level) if c.err != nil { return } } else { c.gz.Reset(&c.buf) } c.gz.Header = gzip.Header{ Comment: c.Comment, Extra: append([]byte(bgzfExtra), c.Extra...), ModTime: c.ModTime, Name: c.Name, OS: c.OS, } _, c.err = c.gz.Write(c.block[:c.next]) if c.err != nil { return } c.err = c.gz.Close() if c.err != nil { return } c.next = 0 b := c.buf.Bytes() i := bytes.Index(b, bgzfExtraPrefix) if i < 0 { c.err = gzip.ErrHeader return } size := len(b) - 1 if size >= MaxBlockSize { c.err = ErrBlockOverflow return } b[i+4], b[i+5] = byte(size), byte(size>>8) } // Next returns the index of the start of the next write within the // decompressed data block. func (bg *Writer) Next() (int, error) { if bg.closed { return 0, ErrClosed } if err := bg.Error(); err != nil { return 0, err } return bg.active.next, nil } // Write writes the compressed form of b to the underlying io.Writer. // Decompressed data blocks are limited to BlockSize, so individual // byte slices may span block boundaries, however the Writer attempts // to keep each write within a single data block. func (bg *Writer) Write(b []byte) (int, error) { if bg.closed { return 0, ErrClosed } err := bg.Error() if err != nil { return 0, err } c := bg.active var n int for ; len(b) > 0 && err == nil; err = bg.Error() { var _n int if c.next == 0 || c.next+len(b) <= len(c.block) { _n = copy(c.block[c.next:], b) b = b[_n:] c.next += _n n += _n } if c.next == len(c.block) || _n == 0 { bg.queue <- c bg.qwg.Add(1) go c.writeBlock() c = <-bg.waiting } } bg.active = c return n, bg.Error() } // Flush writes unwritten data to the underlying io.Writer. Flush does not block. func (bg *Writer) Flush() error { if bg.closed { return ErrClosed } if err := bg.Error(); err != nil { return err } if bg.active.next == 0 { return nil } var c *compressor c, bg.active = bg.active, <-bg.waiting bg.queue <- c bg.qwg.Add(1) go c.writeBlock() return bg.Error() } // Wait waits for all pending writes to complete and returns the subsequent // error state of the Writer. func (bg *Writer) Wait() error { if err := bg.Error(); err != nil { return err } bg.qwg.Wait() return bg.Error() } // Error returns the error state of the Writer. func (bg *Writer) Error() error { bg.m.Lock() defer bg.m.Unlock() return bg.err } func (bg *Writer) setErr(err error) { bg.m.Lock() defer bg.m.Unlock() if bg.err == nil { bg.err = err } } // Close closes the Writer, waiting for any pending writes before returning // the final error of the Writer. func (bg *Writer) Close() error { if !bg.closed { c := bg.active bg.queue <- c bg.qwg.Add(1) <-bg.waiting c.writeBlock() bg.closed = true close(bg.queue) bg.wg.Wait() if bg.err == nil { _, bg.err = bg.w.Write([]byte(magicBlock)) } } return bg.err } hts-1.0.1/codemeta.json000066400000000000000000000023621304417722000147660ustar00rootroot00000000000000{ "@context": "https://raw.githubusercontent.com/mbjones/codemeta/master/codemeta.jsonld", "@type": "Code", "author": [ { "@id": "http://orcid.org/0000-0001-8295-2301", "@type": "Person", "email": "dan.kortschak@adelaide.edu.au", "name": "R Daniel Kortschak", "affiliation": "School of Biological Sciences, The University of Adelaide" }, { "@id": "https://orcid.org/0000-0003-1786-2216", "@type": "Person", "email": "brentp@genetics.utah.edu", "name": "Brent S Pedersen", "affiliation": "Department of Human Genetics, University of Utah" }, { "@id": "http://orcid.org/0000-0003-2404-5636", "@type": "Person", "email": "david.adelson@adelaide.edu.au", "name": "David L Adelson", "affiliation": "School of Biological Sciences, The University of Adelaide" } ], "identifier": "", "codeRepository": "https://github.com/biogo/hts", "datePublished": "2017-01-06", "dateModified": "2017-02-01", "dateCreated": "2017-01-06", "description": "high throughput sequence handling for the Go language", "keywords": "bioinformatics, high throughput sequencing, golang", "license": "BSD-3 like", "title": "bíogo/hts", "version": "v1.0.1" } hts-1.0.1/csi/000077500000000000000000000000001304417722000130655ustar00rootroot00000000000000hts-1.0.1/csi/csi.go000066400000000000000000000174561304417722000142070ustar00rootroot00000000000000// Copyright ©2015 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package csi implements CSIv1 and CSIv2 coordinate sorted indexing. package csi import ( "errors" "sort" "github.com/biogo/hts/bgzf" "github.com/biogo/hts/bgzf/index" ) var csiMagic = [3]byte{'C', 'S', 'I'} const ( // DefaultShift is the default minimum shift setting for a CSI. DefaultShift = 14 // DefaultDepth is the default index depth for a CSI. DefaultDepth = 5 ) const ( nextBinShift = 3 statsDummyBin = 0x924a ) // MinimumShiftFor returns the lowest minimum shift value that can be used to index // the given maximum position with the given index depth. func MinimumShiftFor(max int64, depth uint32) (uint32, bool) { for shift := uint32(0); shift < 32; shift++ { if validIndexPos(int(max), shift, depth) { return shift, true } } return 0, false } // MinimumDepthFor returns the lowest depth value that can be used to index // the given maximum position with the given index minimum shift. func MinimumDepthFor(max int64, shift uint32) (uint32, bool) { for depth := uint32(0); depth < 32; depth++ { if validIndexPos(int(max), shift, depth) { return depth, true } } return 0, false } func validIndexPos(i int, minShift, depth uint32) bool { // 0-based. return -1 <= i && i <= (1<<(minShift+depth*nextBinShift)-1)-1 } // New returns a CSI index with the given minimum shift and depth. // The returned index defaults to CSI version 2. func New(minShift, depth int) *Index { if minShift == 0 { minShift = DefaultShift } if depth == 0 { depth = DefaultDepth } return &Index{Version: 0x2, minShift: uint32(minShift), depth: uint32(depth)} } // Index implements coordinate sorted indexing. type Index struct { Auxilliary []byte Version byte refs []refIndex unmapped *uint64 minShift uint32 depth uint32 isSorted bool lastRecord int } type refIndex struct { bins []bin stats *index.ReferenceStats } type bin struct { bin uint32 left bgzf.Offset records uint64 chunks []bgzf.Chunk } // NumRefs returns the number of references in the index. func (i *Index) NumRefs() int { return len(i.refs) } // ReferenceStats returns the index statistics for the given reference and true // if the statistics are valid. func (i *Index) ReferenceStats(id int) (stats index.ReferenceStats, ok bool) { s := i.refs[id].stats if s == nil { return index.ReferenceStats{}, false } return *s, true } // Unmapped returns the number of unmapped reads and true if the count is valid. func (i *Index) Unmapped() (n uint64, ok bool) { if i.unmapped == nil { return 0, false } return *i.unmapped, true } // Record wraps types that may be indexed by an Index. type Record interface { RefID() int Start() int End() int } // Add records the Record as having being located at the given chunk with the given // mapping and placement status. func (i *Index) Add(r Record, c bgzf.Chunk, mapped, placed bool) error { if !validIndexPos(r.Start(), i.minShift, i.depth) || !validIndexPos(r.End(), i.minShift, i.depth) { return errors.New("csi: attempt to add record outside indexable range") } if i.unmapped == nil { i.unmapped = new(uint64) } if !placed { *i.unmapped++ return nil } rid := r.RefID() if rid < len(i.refs)-1 { return errors.New("csi: attempt to add record out of reference ID sort order") } if rid == len(i.refs) { i.refs = append(i.refs, refIndex{}) i.lastRecord = 0 } else if rid > len(i.refs) { refs := make([]refIndex, rid+1) copy(refs, i.refs) i.refs = refs i.lastRecord = 0 } ref := &i.refs[rid] // Record bin information. b := reg2bin(int64(r.Start()), int64(r.End()), i.minShift, i.depth) for i, bin := range ref.bins { if bin.bin == b { for j, chunk := range ref.bins[i].chunks { if vOffset(chunk.End) > vOffset(c.Begin) { ref.bins[i].chunks[j].End = c.End ref.bins[i].records++ goto found } } ref.bins[i].records++ ref.bins[i].chunks = append(ref.bins[i].chunks, c) goto found } } i.isSorted = false // TODO(kortschak) Consider making use of this more effectively for bin search. ref.bins = append(ref.bins, bin{ bin: b, left: c.Begin, records: 1, chunks: []bgzf.Chunk{c}, }) found: if r.Start() < i.lastRecord { return errors.New("csi: attempt to add record out of position sort order") } i.lastRecord = r.Start() // Record index stats. if ref.stats == nil { ref.stats = &index.ReferenceStats{ Chunk: c, } } else { ref.stats.Chunk.End = c.End } if mapped { ref.stats.Mapped++ } else { ref.stats.Unmapped++ } return nil } // Chunks returns a []bgzf.Chunk that corresponds to the given interval. func (i *Index) Chunks(rid int, beg, end int) []bgzf.Chunk { if rid < 0 || rid >= len(i.refs) { return nil } i.sort() ref := i.refs[rid] // Collect candidate chunks according to a scheme modified // from the one described in the SAM spec under section 5 // Indexing BAM. var chunks []bgzf.Chunk for _, bin := range reg2bins(int64(beg), int64(end), i.minShift, i.depth) { b := uint32(bin) c := sort.Search(len(ref.bins), func(i int) bool { return ref.bins[i].bin >= b }) if c < len(ref.bins) && ref.bins[c].bin == b { left := vOffset(ref.bins[c].left) for _, chunk := range ref.bins[c].chunks { if vOffset(chunk.End) > left { chunks = append(chunks, chunk) break } } } } // Sort and merge overlaps. if !sort.IsSorted(byBeginOffset(chunks)) { sort.Sort(byBeginOffset(chunks)) } return adjacent(chunks) } var adjacent = index.Adjacent func (i *Index) sort() { if !i.isSorted { for _, ref := range i.refs { sort.Sort(byBinNumber(ref.bins)) for _, bin := range ref.bins { sort.Sort(byBeginOffset(bin.chunks)) } } i.isSorted = true } } // MergeChunks applies the given MergeStrategy to all bins in the Index. func (i *Index) MergeChunks(s index.MergeStrategy) { if s == nil { return } for _, ref := range i.refs { for b, bin := range ref.bins { if !sort.IsSorted(byBeginOffset(bin.chunks)) { sort.Sort(byBeginOffset(bin.chunks)) } ref.bins[b].chunks = s(bin.chunks) if !sort.IsSorted(byBeginOffset(bin.chunks)) { sort.Sort(byBeginOffset(bin.chunks)) } } } } func makeOffset(vOff uint64) bgzf.Offset { return bgzf.Offset{ File: int64(vOff >> 16), Block: uint16(vOff), } } func isZero(o bgzf.Offset) bool { return o == bgzf.Offset{} } func vOffset(o bgzf.Offset) int64 { return o.File<<16 | int64(o.Block) } type byBinNumber []bin func (b byBinNumber) Len() int { return len(b) } func (b byBinNumber) Less(i, j int) bool { return b[i].bin < b[j].bin } func (b byBinNumber) Swap(i, j int) { b[i], b[j] = b[j], b[i] } type byBeginOffset []bgzf.Chunk func (c byBeginOffset) Len() int { return len(c) } func (c byBeginOffset) Less(i, j int) bool { return vOffset(c[i].Begin) < vOffset(c[j].Begin) } func (c byBeginOffset) Swap(i, j int) { c[i], c[j] = c[j], c[i] } // calculate bin given an alignment covering [beg,end) (zero-based, half-close-half-open) func reg2bin(beg, end int64, minShift, depth uint32) uint32 { end-- s := minShift t := uint32(((1 << (depth * nextBinShift)) - 1) / 7) for level := depth; level > 0; level-- { offset := beg >> s if offset == end>>s { return t + uint32(offset) } s += nextBinShift t -= 1 << (level * nextBinShift) } return 0 } // calculate the list of bins that may overlap with region [beg,end) (zero-based) func reg2bins(beg, end int64, minShift, depth uint32) []uint32 { end-- var list []uint32 s := minShift + depth*nextBinShift for level, t := uint32(0), uint32(0); level <= depth; level++ { b := t + uint32(beg>>s) e := t + uint32(end>>s) for i := b; i <= e; i++ { list = append(list, i) } s -= nextBinShift t += 1 << (level * nextBinShift) } return list } hts-1.0.1/csi/csi_read.go000066400000000000000000000122371304417722000151720ustar00rootroot00000000000000// Copyright ©2015 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package csi import ( "encoding/binary" "errors" "fmt" "io" "sort" "github.com/biogo/hts/bgzf" "github.com/biogo/hts/bgzf/index" ) // ReadFrom reads the CSI index from the given io.Reader. Note that // the csi specification states that the index is stored as BGZF, but // ReadFrom does not perform decompression. func ReadFrom(r io.Reader) (*Index, error) { var ( idx Index magic [3]byte err error ) err = binary.Read(r, binary.LittleEndian, &magic) if err != nil { return nil, err } if magic != csiMagic { return nil, errors.New("csi: magic number mismatch") } version := []byte{0} _, err = io.ReadFull(r, version) if err != nil { return nil, err } idx.Version = version[0] if idx.Version != 0x1 && idx.Version != 0x2 { return nil, fmt.Errorf("csi: unknown version: %d", version[0]) } err = binary.Read(r, binary.LittleEndian, &idx.minShift) if err != nil { return nil, err } if int32(idx.minShift) < 0 { return nil, errors.New("csi: invalid minimum shift value") } err = binary.Read(r, binary.LittleEndian, &idx.depth) if err != nil { return nil, err } if int32(idx.depth) < 0 { return nil, errors.New("csi: invalid index depth value") } var n int32 err = binary.Read(r, binary.LittleEndian, &n) if err != nil { return nil, err } if n > 0 { idx.Auxilliary = make([]byte, n) _, err = io.ReadFull(r, idx.Auxilliary) if err != nil { return nil, err } } idx.refs, err = readIndices(r, idx.Version) if err != nil { return nil, err } var nUnmapped uint64 err = binary.Read(r, binary.LittleEndian, &nUnmapped) if err == nil { idx.unmapped = &nUnmapped } else if err != io.EOF { return nil, err } idx.isSorted = true return &idx, nil } func readIndices(r io.Reader, version byte) ([]refIndex, error) { var n int32 err := binary.Read(r, binary.LittleEndian, &n) if err != nil { return nil, err } if n == 0 { return nil, nil } idx := make([]refIndex, n) for i := range idx { idx[i].bins, idx[i].stats, err = readBins(r, version) if err != nil { return nil, err } } return idx, nil } func readBins(r io.Reader, version byte) ([]bin, *index.ReferenceStats, error) { var n int32 err := binary.Read(r, binary.LittleEndian, &n) if err != nil { return nil, nil, err } if n == 0 { return nil, nil, nil } var stats *index.ReferenceStats bins := make([]bin, n) for i := 0; i < len(bins); i++ { err = binary.Read(r, binary.LittleEndian, &bins[i].bin) if err != nil { return nil, nil, fmt.Errorf("csi: failed to read bin number: %v", err) } var vOff uint64 err = binary.Read(r, binary.LittleEndian, &vOff) if err != nil { return nil, nil, fmt.Errorf("csi: failed to read left virtual offset: %v", err) } bins[i].left = makeOffset(vOff) if version == 0x2 { err = binary.Read(r, binary.LittleEndian, &bins[i].records) if err != nil { return nil, nil, fmt.Errorf("csi: failed to read record count: %v", err) } } err = binary.Read(r, binary.LittleEndian, &n) if err != nil { return nil, nil, fmt.Errorf("csi: failed to read bin count: %v", err) } if bins[i].bin == statsDummyBin { if n != 2 { return nil, nil, errors.New("csi: malformed dummy bin header") } stats, err = readStats(r) if err != nil { return nil, nil, err } bins = bins[:len(bins)-1] i-- continue } bins[i].chunks, err = readChunks(r, n) if err != nil { return nil, nil, err } } if !sort.IsSorted(byBinNumber(bins)) { sort.Sort(byBinNumber(bins)) } return bins, stats, nil } func readChunks(r io.Reader, n int32) ([]bgzf.Chunk, error) { if n == 0 { return nil, nil } var ( vOff uint64 err error ) chunks := make([]bgzf.Chunk, n) for i := range chunks { err = binary.Read(r, binary.LittleEndian, &vOff) if err != nil { return nil, fmt.Errorf("csi: failed to read chunk begin virtual offset: %v", err) } chunks[i].Begin = makeOffset(vOff) err = binary.Read(r, binary.LittleEndian, &vOff) if err != nil { return nil, fmt.Errorf("csi: failed to read chunk end virtual offset: %v", err) } chunks[i].End = makeOffset(vOff) } if !sort.IsSorted(byBeginOffset(chunks)) { sort.Sort(byBeginOffset(chunks)) } return chunks, nil } func readStats(r io.Reader) (*index.ReferenceStats, error) { var ( vOff uint64 stats index.ReferenceStats err error ) err = binary.Read(r, binary.LittleEndian, &vOff) if err != nil { return nil, fmt.Errorf("bam: failed to read index stats chunk begin virtual offset: %v", err) } stats.Chunk.Begin = makeOffset(vOff) err = binary.Read(r, binary.LittleEndian, &vOff) if err != nil { return nil, fmt.Errorf("bam: failed to read index stats chunk end virtual offset: %v", err) } stats.Chunk.End = makeOffset(vOff) err = binary.Read(r, binary.LittleEndian, &stats.Mapped) if err != nil { return nil, fmt.Errorf("bam: failed to read index stats mapped count: %v", err) } err = binary.Read(r, binary.LittleEndian, &stats.Unmapped) if err != nil { return nil, fmt.Errorf("bam: failed to read index stats unmapped count: %v", err) } return &stats, nil } hts-1.0.1/csi/csi_test.go000066400000000000000000000271531304417722000152410ustar00rootroot00000000000000// Copyright ©2015 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package csi import ( "bytes" "testing" "github.com/biogo/hts/bgzf" "github.com/biogo/hts/bgzf/index" "gopkg.in/check.v1" ) func Test(t *testing.T) { check.TestingT(t) } type S struct{} var _ = check.Suite(&S{}) // conceptualCSIv1data is an uncompressed CSIv1 for the alignments in the BAM // corresponding to: // // @HD VN:1.0 SO:coordinate // @SQ SN:conceptual LN:134217728 // 60m66m:bin0 0 conceptual 62914561 40 6291456M * 0 0 * * // 70m76m:bin2 0 conceptual 73400321 40 6291456M * 0 0 * * // 73m75m:bin18 0 conceptual 76546049 40 2097152M * 0 0 * * // // This is a coordinate-translated version of the conceptual example in the // SAM spec using binning as actually used by BAM rather than as presented. /* 0x43, 0x53, 0x49, 0x01, // Index\1 0x0e, 0x00, 0x00, 0x00, // min_shift 0x05, 0x00, 0x00, 0x00, // depth 0x00, 0x00, 0x00, 0x00, // l_aux // no aux 0x01, 0x00, 0x00, 0x00, // n_ref 0x02, 0x00, 0x00, 0x00, // n_bin 0x00, 0x00, 0x00, 0x00, // bin 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, // loffset 0x01, 0x00, 0x00, 0x00, // n_chunk 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, // chunk_beg {101,0} 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, // chunk_end {228,0} // Not mentioned in the Index spec. 0x4a, 0x92, 0x00, 0x00, // bin - always 0x924a 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // loffset 0x02, 0x00, 0x00, 0x00, // n_chunk - always 2 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, // unmapped_beg 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, // unmapped_end 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // mapped_count 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // unmapped_count 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // n_no_coor */ var conceptualCSIv1data = []byte{ 0x43, 0x53, 0x49, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, } var chunkTests = []struct { beg, end int expect []bgzf.Chunk }{ { beg: 65000, end: 71000, // Index does not use tiles, so this is hit. expect: []bgzf.Chunk{ {Begin: bgzf.Offset{File: 101, Block: 0}, End: bgzf.Offset{File: 228, Block: 0}}, }, }, { beg: 77594624, end: 80740352, // 73m77m:bin2+bin18 - This is the equivalent to the given example. expect: []bgzf.Chunk{ {Begin: bgzf.Offset{File: 101, Block: 0}, End: bgzf.Offset{File: 228, Block: 0}}, }, }, { beg: 62914561, end: 68157440, // 60m65m:bin0+bin2 expect: []bgzf.Chunk{ {Begin: bgzf.Offset{File: 101, Block: 0}, End: bgzf.Offset{File: 228, Block: 0}}, }, }, { beg: 72351744, end: 80740352, // 69m77m:bin0+bin2+18 expect: []bgzf.Chunk{ {Begin: bgzf.Offset{File: 101, Block: 0}, End: bgzf.Offset{File: 228, Block: 0}}, }, }, { beg: 61865984, end: 80740352, // 59m77m:bin0+bin2+bin18 expect: []bgzf.Chunk{ {Begin: bgzf.Offset{File: 101, Block: 0}, End: bgzf.Offset{File: 228, Block: 0}}, }, }, { beg: 80740352, end: 81788928, // 77m78m - Not in covered region, but Index does not use tiles, so this is hit. expect: []bgzf.Chunk{ {Begin: bgzf.Offset{File: 101, Block: 0}, End: bgzf.Offset{File: 228, Block: 0}}, }, }, } func (s *S) TestConceptualCSIv1(c *check.C) { csi, err := ReadFrom(bytes.NewReader(conceptualCSIv1data)) c.Assert(err, check.Equals, nil) for _, test := range chunkTests { c.Check(csi.Chunks(0, test.beg, test.end), check.DeepEquals, test.expect, check.Commentf("Unexpected result for [%d,%d).", test.beg, test.end), ) } stats, ok := csi.ReferenceStats(0) c.Check(ok, check.Equals, true) c.Check(stats, check.Equals, index.ReferenceStats{ Chunk: bgzf.Chunk{ Begin: bgzf.Offset{File: 101, Block: 0}, End: bgzf.Offset{File: 228, Block: 0}, }, Mapped: 3, Unmapped: 0}) unmapped, ok := csi.Unmapped() c.Check(ok, check.Equals, true) c.Check(unmapped, check.Equals, uint64(0)) } // conceptualCSIv2data is an uncompressed CSIv1 for the alignments in the BAM // corresponding to: // // @HD VN:1.0 SO:coordinate // @SQ SN:conceptual LN:134217728 // 60m66m:bin0 0 conceptual 62914561 40 6291456M * 0 0 * * // 70m76m:bin2 0 conceptual 73400321 40 6291456M * 0 0 * * // 73m75m:bin18 0 conceptual 76546049 40 2097152M * 0 0 * * // // This is a coordinate-translated version of the conceptual example in the // SAM spec using binning as actually used by BAM rather than as presented. /* 0x43, 0x53, 0x49, 0x02, // Index\1 0x0e, 0x00, 0x00, 0x00, // min_shift 0x05, 0x00, 0x00, 0x00, // depth 0x00, 0x00, 0x00, 0x00, // l_aux // no aux 0x01, 0x00, 0x00, 0x00, // n_ref 0x02, 0x00, 0x00, 0x00, // n_bin 0x00, 0x00, 0x00, 0x00, // bin 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, // loffset 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // n_rec 0x01, 0x00, 0x00, 0x00, // n_chunk 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, // chunk_beg 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, // chunk_end 0x4a, 0x92, 0x00, 0x00, // bin 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // loffset 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // n_rec 0x02, 0x00, 0x00, 0x00, // n_chunk 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, // unmapped_beg 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, // unmapped_end 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // mapped_count 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // unmapped_count 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, */ var conceptualCSIv2data = []byte{ 0x43, 0x53, 0x49, 0x02, 0x0e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, } func (s *S) TestConceptualCSIv2(c *check.C) { csi, err := ReadFrom(bytes.NewReader(conceptualCSIv2data)) c.Assert(err, check.Equals, nil) for _, test := range chunkTests { c.Check(csi.Chunks(0, test.beg, test.end), check.DeepEquals, test.expect, check.Commentf("Unexpected result for [%d,%d).", test.beg, test.end), ) } stats, ok := csi.ReferenceStats(0) c.Check(ok, check.Equals, true) c.Check(stats, check.Equals, index.ReferenceStats{ Chunk: bgzf.Chunk{ Begin: bgzf.Offset{File: 101, Block: 0}, End: bgzf.Offset{File: 228, Block: 0}, }, Mapped: 3, Unmapped: 0}) unmapped, ok := csi.Unmapped() c.Check(ok, check.Equals, true) c.Check(unmapped, check.Equals, uint64(0)) } func uint64ptr(i uint64) *uint64 { return &i } var csiTestData = []struct { csi *Index err error }{ { csi: &Index{ minShift: 14, depth: 5, refs: []refIndex{ { bins: []bin{ { bin: 4681, left: bgzf.Offset{File: 98, Block: 0}, chunks: []bgzf.Chunk{ {Begin: bgzf.Offset{File: 98, Block: 0}, End: bgzf.Offset{File: 401, Block: 0}}, }, }, }, stats: &index.ReferenceStats{ Chunk: bgzf.Chunk{Begin: bgzf.Offset{File: 98, Block: 0}, End: bgzf.Offset{File: 401, Block: 0}}, Mapped: 8, Unmapped: 1, }, }, }, unmapped: uint64ptr(1), isSorted: true, }, err: nil, }, { csi: &Index{ minShift: 14, depth: 5, refs: []refIndex{ { bins: []bin{ { bin: 4681, left: bgzf.Offset{File: 98, Block: 0}, chunks: []bgzf.Chunk{ {Begin: bgzf.Offset{File: 98, Block: 0}, End: bgzf.Offset{File: 401, Block: 0}}, }, }, }, stats: &index.ReferenceStats{ Chunk: bgzf.Chunk{Begin: bgzf.Offset{File: 98, Block: 0}, End: bgzf.Offset{File: 401, Block: 0}}, Mapped: 8, Unmapped: 1, }, }, }, unmapped: nil, isSorted: true, }, err: nil, }, { csi: &Index{ minShift: 14, depth: 5, refs: []refIndex{ { bins: []bin{ { bin: 4681, left: bgzf.Offset{File: 98, Block: 0}, chunks: []bgzf.Chunk{ {Begin: bgzf.Offset{File: 98, Block: 0}, End: bgzf.Offset{File: 401, Block: 0}}, }, }, }, stats: nil, }, }, unmapped: uint64ptr(1), isSorted: true, }, err: nil, }, { csi: &Index{ minShift: 14, depth: 5, refs: []refIndex{ { bins: []bin{ { bin: 4681, left: bgzf.Offset{File: 98, Block: 0}, chunks: []bgzf.Chunk{ {Begin: bgzf.Offset{File: 98, Block: 0}, End: bgzf.Offset{File: 401, Block: 0}}, }, }, }, stats: nil, }, }, unmapped: nil, isSorted: true, }, err: nil, }, { csi: &Index{ Auxilliary: []byte("Various commentary strings"), minShift: 14, depth: 5, refs: func() []refIndex { idx := [86]refIndex{ 23: { bins: []bin{ { bin: 0x2070, chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 0x1246, Block: 0x0}, End: bgzf.Offset{File: 0x1246, Block: 0x1cf9}, }, }, }, }, stats: &index.ReferenceStats{ Chunk: bgzf.Chunk{ Begin: bgzf.Offset{File: 0x1246, Block: 0x0}, End: bgzf.Offset{File: 0x1246, Block: 0x1cf9}, }, Mapped: 0, Unmapped: 0x1d, }, }, 24: { bins: []bin{ { bin: 0x124a, chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 0x1246, Block: 0x1cf9}, End: bgzf.Offset{File: 0x1246, Block: 0x401d}, }, }, }, }, stats: &index.ReferenceStats{ Chunk: bgzf.Chunk{ Begin: bgzf.Offset{File: 0x1246, Block: 0x1cf9}, End: bgzf.Offset{File: 0x1246, Block: 0x401d}, }, Mapped: 0, Unmapped: 0x25, }, }, 72: { bins: []bin{ { bin: 0x1253, chunks: []bgzf.Chunk{ { Begin: bgzf.Offset{File: 0x1246, Block: 0x401d}, End: bgzf.Offset{File: 0x1246, Block: 0x41f5}, }, }, }, }, stats: &index.ReferenceStats{ Chunk: bgzf.Chunk{ Begin: bgzf.Offset{File: 0x1246, Block: 0x401d}, End: bgzf.Offset{File: 0x1246, Block: 0x41f5}, }, Mapped: 0, Unmapped: 0x2, }, }, } return idx[:] }(), unmapped: uint64ptr(932), isSorted: true, }, err: nil, }, } func (s *S) TestCSIRoundtrip(c *check.C) { for i, test := range csiTestData { for test.csi.Version = 1; test.csi.Version <= 2; test.csi.Version++ { var buf bytes.Buffer c.Assert(WriteTo(&buf, test.csi), check.Equals, nil) got, err := ReadFrom(&buf) c.Assert(err, check.Equals, nil, check.Commentf("Test %d", i)) c.Check(got, check.DeepEquals, test.csi, check.Commentf("Test %d", i)) } } } hts-1.0.1/csi/csi_write.go000066400000000000000000000077421304417722000154160ustar00rootroot00000000000000// Copyright ©2015 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package csi import ( "encoding/binary" "fmt" "io" "github.com/biogo/hts/bgzf" "github.com/biogo/hts/bgzf/index" ) // WriteTo writes the CSI index to the given io.Writer. Note that // the csi specification states that the index is stored as BGZF, but // WriteTo does not perform compression. func WriteTo(w io.Writer, idx *Index) error { idx.sort() err := binary.Write(w, binary.LittleEndian, csiMagic) if err != nil { return err } _, err = w.Write([]byte{idx.Version}) if err != nil { return err } err = binary.Write(w, binary.LittleEndian, int32(idx.minShift)) if err != nil { return err } err = binary.Write(w, binary.LittleEndian, int32(idx.depth)) if err != nil { return err } err = binary.Write(w, binary.LittleEndian, int32(len(idx.Auxilliary))) if err != nil { return err } _, err = w.Write(idx.Auxilliary) if err != nil { return err } err = writeIndices(w, idx.Version, idx.refs) if err != nil { return err } if idx.unmapped != nil { err = binary.Write(w, binary.LittleEndian, idx.unmapped) } return err } func writeIndices(w io.Writer, version byte, idx []refIndex) error { err := binary.Write(w, binary.LittleEndian, int32(len(idx))) if err != nil { return err } for i := range idx { err = writeBins(w, version, idx[i].bins, idx[i].stats) if err != nil { return err } } return nil } func writeBins(w io.Writer, version byte, bins []bin, stats *index.ReferenceStats) error { n := int32(len(bins)) if stats != nil { n++ } err := binary.Write(w, binary.LittleEndian, &n) if err != nil { return err } for _, b := range bins { err = binary.Write(w, binary.LittleEndian, b.bin) if err != nil { return fmt.Errorf("csi: failed to write bin number: %v", err) } err = binary.Write(w, binary.LittleEndian, vOffset(b.left)) if err != nil { return fmt.Errorf("csi: failed to write left virtual offset: %v", err) } if version == 0x2 { err = binary.Write(w, binary.LittleEndian, b.records) if err != nil { return fmt.Errorf("csi: failed to write record count: %v", err) } } err = writeChunks(w, b.chunks) if err != nil { return err } } if stats != nil { return writeStats(w, version, stats) } return nil } func writeChunks(w io.Writer, chunks []bgzf.Chunk) error { err := binary.Write(w, binary.LittleEndian, int32(len(chunks))) if err != nil { return fmt.Errorf("csi: failed to write bin count: %v", err) } for _, c := range chunks { err = binary.Write(w, binary.LittleEndian, vOffset(c.Begin)) if err != nil { return fmt.Errorf("csi: failed to write chunk begin virtual offset: %v", err) } err = binary.Write(w, binary.LittleEndian, vOffset(c.End)) if err != nil { return fmt.Errorf("csi: failed to write chunk end virtual offset: %v", err) } } return nil } func writeStats(w io.Writer, version byte, stats *index.ReferenceStats) error { var err error switch version { case 0x1: err = binary.Write(w, binary.LittleEndian, [4]uint32{statsDummyBin, 0, 0, 2}) case 0x2: err = binary.Write(w, binary.LittleEndian, [6]uint32{statsDummyBin, 0, 0, 0, 0, 2}) } if err != nil { return fmt.Errorf("csi: failed to write stats bin header: %v", err) } err = binary.Write(w, binary.LittleEndian, vOffset(stats.Chunk.Begin)) if err != nil { return fmt.Errorf("csi: failed to write index stats chunk begin virtual offset: %v", err) } err = binary.Write(w, binary.LittleEndian, vOffset(stats.Chunk.End)) if err != nil { return fmt.Errorf("csi: failed to write index stats chunk end virtual offset: %v", err) } err = binary.Write(w, binary.LittleEndian, stats.Mapped) if err != nil { return fmt.Errorf("csi: failed to write index stats mapped count: %v", err) } err = binary.Write(w, binary.LittleEndian, stats.Unmapped) if err != nil { return fmt.Errorf("csi: failed to write index stats unmapped count: %v", err) } return nil } hts-1.0.1/internal/000077500000000000000000000000001304417722000141235ustar00rootroot00000000000000hts-1.0.1/internal/index.go000066400000000000000000000212071304417722000155630ustar00rootroot00000000000000// Copyright ©2014 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package internal provides shared code for BAI and tabix index implementations. package internal import ( "errors" "sort" "github.com/biogo/hts/bgzf" "github.com/biogo/hts/bgzf/index" ) const ( // TileWidth is the length of the interval tiling used // in BAI and tabix indexes. TileWidth = 0x4000 // StatsDummyBin is the bin number of the reference // statistics bin used in BAI and tabix indexes. StatsDummyBin = 0x924a ) // Index is a coordinate based index. type Index struct { Refs []RefIndex Unmapped *uint64 IsSorted bool LastRecord int } // RefIndex is the index of a single reference. type RefIndex struct { Bins []Bin Stats *ReferenceStats Intervals []bgzf.Offset } // Bin is an index bin. type Bin struct { Bin uint32 Chunks []bgzf.Chunk } // ReferenceStats holds mapping statistics for a genomic reference. type ReferenceStats struct { // Chunk is the span of the indexed BGZF // holding alignments to the reference. Chunk bgzf.Chunk // Mapped is the count of mapped reads. Mapped uint64 // Unmapped is the count of unmapped reads. Unmapped uint64 } // Record wraps types that may be indexed by an Index. type Record interface { RefID() int Start() int End() int } // Add records the SAM record as having being located at the given chunk. func (i *Index) Add(r Record, bin uint32, c bgzf.Chunk, placed, mapped bool) error { if !IsValidIndexPos(r.Start()) || !IsValidIndexPos(r.End()) { return errors.New("index: attempt to add record outside indexable range") } if i.Unmapped == nil { i.Unmapped = new(uint64) } if !placed { *i.Unmapped++ return nil } rid := r.RefID() if rid < len(i.Refs)-1 { return errors.New("index: attempt to add record out of reference ID sort order") } if rid == len(i.Refs) { i.Refs = append(i.Refs, RefIndex{}) i.LastRecord = 0 } else if rid > len(i.Refs) { Refs := make([]RefIndex, rid+1) copy(Refs, i.Refs) i.Refs = Refs i.LastRecord = 0 } ref := &i.Refs[rid] // Record bin information. for i, b := range ref.Bins { if b.Bin == bin { for j, chunk := range ref.Bins[i].Chunks { if vOffset(chunk.End) > vOffset(c.Begin) { ref.Bins[i].Chunks[j].End = c.End goto found } } ref.Bins[i].Chunks = append(ref.Bins[i].Chunks, c) goto found } } i.IsSorted = false // TODO(kortschak) Consider making use of this more effectively for bin search. ref.Bins = append(ref.Bins, Bin{ Bin: bin, Chunks: []bgzf.Chunk{c}, }) found: // Record interval tile information. biv := r.Start() / TileWidth if r.Start() < i.LastRecord { return errors.New("index: attempt to add record out of position sort order") } i.LastRecord = r.Start() eiv := r.End() / TileWidth if eiv == len(ref.Intervals) { if eiv > biv { panic("index: unexpected alignment length") } ref.Intervals = append(ref.Intervals, c.Begin) } else if eiv > len(ref.Intervals) { intvs := make([]bgzf.Offset, eiv) if len(ref.Intervals) > biv { biv = len(ref.Intervals) } for iv, offset := range intvs[biv:eiv] { if !isZero(offset) { panic("index: unexpected non-zero offset") } intvs[iv+biv] = c.Begin } copy(intvs, ref.Intervals) ref.Intervals = intvs } // Record index stats. if ref.Stats == nil { ref.Stats = &ReferenceStats{ Chunk: c, } } else { ref.Stats.Chunk.End = c.End } if mapped { ref.Stats.Mapped++ } else { ref.Stats.Unmapped++ } return nil } // Chunks returns a []bgzf.Chunk that corresponds to the given genomic interval. func (i *Index) Chunks(rid, beg, end int) ([]bgzf.Chunk, error) { if rid < 0 || rid >= len(i.Refs) { return nil, index.ErrNoReference } i.sort() ref := i.Refs[rid] iv := beg / TileWidth if iv >= len(ref.Intervals) { return nil, index.ErrInvalid } // Collect candidate chunks according to the scheme described in // the SAM spec under section 5 Indexing BAM. var chunks []bgzf.Chunk for _, b := range OverlappingBinsFor(beg, end) { c := sort.Search(len(ref.Bins), func(i int) bool { return ref.Bins[i].Bin >= b }) if c < len(ref.Bins) && ref.Bins[c].Bin == b { for _, chunk := range ref.Bins[c].Chunks { // Here we check all tiles starting from the left end of the // query region until we get a non-zero offset. The spec states // that we only need to check tiles that contain beg. That is // not correct since we may have no alignments at the left end // of the query region. chunkEndOffset := vOffset(chunk.End) haveNonZero := false for j, tile := range ref.Intervals[iv:] { // If we have found a non-zero tile, all subsequent active // tiles must also be non-zero, so skip zero tiles. if haveNonZero && isZero(tile) { continue } haveNonZero = true tbeg := (j + iv) * TileWidth tend := tbeg + TileWidth // We allow adjacent alignment since samtools behaviour here // has always irritated me and it is cheap to discard these // later if they are not wanted. if tend >= beg && tbeg <= end && chunkEndOffset > vOffset(tile) { chunks = append(chunks, chunk) break } } } } } // Sort and merge overlaps. if !sort.IsSorted(byBeginOffset(chunks)) { sort.Sort(byBeginOffset(chunks)) } return chunks, nil } func (i *Index) sort() { if !i.IsSorted { for _, ref := range i.Refs { sort.Sort(byBinNumber(ref.Bins)) for _, bin := range ref.Bins { sort.Sort(byBeginOffset(bin.Chunks)) } sort.Sort(byVirtOffset(ref.Intervals)) } i.IsSorted = true } } // MergeChunks applies the given MergeStrategy to all bins in the Index. func (i *Index) MergeChunks(s func([]bgzf.Chunk) []bgzf.Chunk) { if s == nil { return } for _, ref := range i.Refs { for b, bin := range ref.Bins { if !sort.IsSorted(byBeginOffset(bin.Chunks)) { sort.Sort(byBeginOffset(bin.Chunks)) } ref.Bins[b].Chunks = s(bin.Chunks) if !sort.IsSorted(byBeginOffset(bin.Chunks)) { sort.Sort(byBeginOffset(bin.Chunks)) } } } } const ( indexWordBits = 29 nextBinShift = 3 ) // IsValidIndexPos returns a boolean indicating whether // the given position is in the valid range for BAM/SAM. func IsValidIndexPos(i int) bool { return -1 <= i && i <= (1<>level5Shift == end>>level5Shift: return level5 + uint32(beg>>level5Shift) case beg>>level4Shift == end>>level4Shift: return level4 + uint32(beg>>level4Shift) case beg>>level3Shift == end>>level3Shift: return level3 + uint32(beg>>level3Shift) case beg>>level2Shift == end>>level2Shift: return level2 + uint32(beg>>level2Shift) case beg>>level1Shift == end>>level1Shift: return level1 + uint32(beg>>level1Shift) } return level0 } // OverlappingBinsFor returns the bin numbers for all bins overlapping // an interval covering [beg,end) (zero-based, half-close-half-open). func OverlappingBinsFor(beg, end int) []uint32 { end-- list := []uint32{level0} for _, r := range []struct { offset, shift uint32 }{ {level1, level1Shift}, {level2, level2Shift}, {level3, level3Shift}, {level4, level4Shift}, {level5, level5Shift}, } { for k := r.offset + uint32(beg>>r.shift); k <= r.offset+uint32(end>>r.shift); k++ { list = append(list, k) } } return list } func makeOffset(vOff uint64) bgzf.Offset { return bgzf.Offset{ File: int64(vOff >> 16), Block: uint16(vOff), } } func isZero(o bgzf.Offset) bool { return o == bgzf.Offset{} } func vOffset(o bgzf.Offset) int64 { return o.File<<16 | int64(o.Block) } type byBinNumber []Bin func (b byBinNumber) Len() int { return len(b) } func (b byBinNumber) Less(i, j int) bool { return b[i].Bin < b[j].Bin } func (b byBinNumber) Swap(i, j int) { b[i], b[j] = b[j], b[i] } type byBeginOffset []bgzf.Chunk func (c byBeginOffset) Len() int { return len(c) } func (c byBeginOffset) Less(i, j int) bool { return vOffset(c[i].Begin) < vOffset(c[j].Begin) } func (c byBeginOffset) Swap(i, j int) { c[i], c[j] = c[j], c[i] } type byVirtOffset []bgzf.Offset func (o byVirtOffset) Len() int { return len(o) } func (o byVirtOffset) Less(i, j int) bool { return vOffset(o[i]) < vOffset(o[j]) } func (o byVirtOffset) Swap(i, j int) { o[i], o[j] = o[j], o[i] } hts-1.0.1/internal/index_read.go000066400000000000000000000112741304417722000165610ustar00rootroot00000000000000// Copyright ©2014 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package internal import ( "encoding/binary" "fmt" "io" "sort" "github.com/biogo/hts/bgzf" ) // ReadIndex reads the Index from the given io.Reader. func ReadIndex(r io.Reader, n int32, typ string) (Index, error) { var ( idx Index err error ) idx.Refs, err = readIndices(r, n, typ) if err != nil { return idx, err } var nUnmapped uint64 err = binary.Read(r, binary.LittleEndian, &nUnmapped) if err == nil { idx.Unmapped = &nUnmapped } else if err != io.EOF { return idx, err } idx.IsSorted = true // Set the index of the last record to max int to // prevent addition of records out of order. This // means that the only way to append to an index is // to re-index and add to that created index. // TODO(kortschak) See if index appending is feasible // and needed. idx.LastRecord = int(^uint(0) >> 1) return idx, nil } func readIndices(r io.Reader, n int32, typ string) ([]RefIndex, error) { var err error idx := make([]RefIndex, n) for i := range idx { idx[i].Bins, idx[i].Stats, err = readBins(r, typ) if err != nil { return nil, err } idx[i].Intervals, err = readIntervals(r, typ) if err != nil { return nil, err } } return idx, nil } func readBins(r io.Reader, typ string) ([]Bin, *ReferenceStats, error) { var n int32 err := binary.Read(r, binary.LittleEndian, &n) if err != nil { return nil, nil, err } if n == 0 { return nil, nil, nil } var stats *ReferenceStats bins := make([]Bin, n) for i := 0; i < len(bins); i++ { err = binary.Read(r, binary.LittleEndian, &bins[i].Bin) if err != nil { return nil, nil, fmt.Errorf("%s: failed to read bin number: %v", typ, err) } err = binary.Read(r, binary.LittleEndian, &n) if err != nil { return nil, nil, fmt.Errorf("%s: failed to read bin count: %v", typ, err) } if bins[i].Bin == StatsDummyBin { if n != 2 { return nil, nil, fmt.Errorf("%s: malformed dummy bin header", typ) } stats, err = readStats(r, typ) if err != nil { return nil, nil, err } bins = bins[:len(bins)-1] i-- continue } bins[i].Chunks, err = readChunks(r, n, typ) if err != nil { return nil, nil, err } } if !sort.IsSorted(byBinNumber(bins)) { sort.Sort(byBinNumber(bins)) } return bins, stats, nil } func readChunks(r io.Reader, n int32, typ string) ([]bgzf.Chunk, error) { if n == 0 { return nil, nil } chunks := make([]bgzf.Chunk, n) var buf [16]byte for i := range chunks { // Get the begin and end offset in a single read. _, err := io.ReadFull(r, buf[:]) if err != nil { return nil, fmt.Errorf("%s: failed to read chunk virtual offset: %v", typ, err) } chunks[i].Begin = makeOffset(binary.LittleEndian.Uint64(buf[:8])) chunks[i].End = makeOffset(binary.LittleEndian.Uint64(buf[8:])) } if !sort.IsSorted(byBeginOffset(chunks)) { sort.Sort(byBeginOffset(chunks)) } return chunks, nil } func readStats(r io.Reader, typ string) (*ReferenceStats, error) { var ( vOff uint64 stats ReferenceStats err error ) err = binary.Read(r, binary.LittleEndian, &vOff) if err != nil { return nil, fmt.Errorf("%s: failed to read index stats chunk begin virtual offset: %v", typ, err) } stats.Chunk.Begin = makeOffset(vOff) err = binary.Read(r, binary.LittleEndian, &vOff) if err != nil { return nil, fmt.Errorf("%s: failed to read index stats chunk end virtual offset: %v", typ, err) } stats.Chunk.End = makeOffset(vOff) err = binary.Read(r, binary.LittleEndian, &stats.Mapped) if err != nil { return nil, fmt.Errorf("%s: failed to read index stats mapped count: %v", typ, err) } err = binary.Read(r, binary.LittleEndian, &stats.Unmapped) if err != nil { return nil, fmt.Errorf("%s: failed to read index stats unmapped count: %v", typ, err) } return &stats, nil } func readIntervals(r io.Reader, typ string) ([]bgzf.Offset, error) { var n int32 err := binary.Read(r, binary.LittleEndian, &n) if err != nil { return nil, err } if n == 0 { return nil, nil } offsets := make([]bgzf.Offset, n) // chunkSize determines the number of offsets consumed by each binary.Read. const chunkSize = 512 var vOffs [chunkSize]uint64 for i := 0; i < int(n); i += chunkSize { l := min(int(n)-i, len(vOffs)) err = binary.Read(r, binary.LittleEndian, vOffs[:l]) if err != nil { return nil, fmt.Errorf("%s: failed to read tile interval virtual offset: %v", typ, err) } for k := 0; k < l; k++ { offsets[i+k] = makeOffset(vOffs[k]) } } if !sort.IsSorted(byVirtOffset(offsets)) { sort.Sort(byVirtOffset(offsets)) } return offsets, nil } func min(a, b int) int { if a < b { return a } return b } hts-1.0.1/internal/index_write.go000066400000000000000000000064101304417722000167740ustar00rootroot00000000000000// Copyright ©2014 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package internal import ( "encoding/binary" "fmt" "io" "github.com/biogo/hts/bgzf" ) // WriteIndex writes the Index to the given io.Writer. func WriteIndex(w io.Writer, idx *Index, typ string) error { idx.sort() err := writeIndices(w, idx.Refs, typ) if err != nil { return err } if idx.Unmapped != nil { err = binary.Write(w, binary.LittleEndian, *idx.Unmapped) } return err } func writeIndices(w io.Writer, idx []RefIndex, typ string) error { for i := range idx { err := writeBins(w, idx[i].Bins, idx[i].Stats, typ) if err != nil { return err } err = writeIntervals(w, idx[i].Intervals, typ) if err != nil { return err } } return nil } func writeBins(w io.Writer, bins []Bin, stats *ReferenceStats, typ string) error { n := int32(len(bins)) if stats != nil { n++ } err := binary.Write(w, binary.LittleEndian, &n) if err != nil { return err } for _, b := range bins { err = binary.Write(w, binary.LittleEndian, b.Bin) if err != nil { return fmt.Errorf("%s: failed to write bin number: %v", typ, err) } err = writeChunks(w, b.Chunks, typ) if err != nil { return err } } if stats != nil { return writeStats(w, stats, typ) } return nil } func writeChunks(w io.Writer, chunks []bgzf.Chunk, typ string) error { err := binary.Write(w, binary.LittleEndian, int32(len(chunks))) if err != nil { return fmt.Errorf("%s: failed to write bin count: %v", typ, err) } for _, c := range chunks { err = binary.Write(w, binary.LittleEndian, vOffset(c.Begin)) if err != nil { return fmt.Errorf("%s: failed to write chunk begin virtual offset: %v", typ, err) } err = binary.Write(w, binary.LittleEndian, vOffset(c.End)) if err != nil { return fmt.Errorf("%s: failed to write chunk end virtual offset: %v", typ, err) } } return nil } func writeStats(w io.Writer, stats *ReferenceStats, typ string) error { var err error err = binary.Write(w, binary.LittleEndian, [2]uint32{StatsDummyBin, 2}) if err != nil { return fmt.Errorf("%s: failed to write stats bin header: %v", typ, err) } err = binary.Write(w, binary.LittleEndian, vOffset(stats.Chunk.Begin)) if err != nil { return fmt.Errorf("%s: failed to write index stats chunk begin virtual offset: %v", typ, err) } err = binary.Write(w, binary.LittleEndian, vOffset(stats.Chunk.End)) if err != nil { return fmt.Errorf("%s: failed to write index stats chunk end virtual offset: %v", typ, err) } err = binary.Write(w, binary.LittleEndian, stats.Mapped) if err != nil { return fmt.Errorf("%s: failed to write index stats mapped count: %v", typ, err) } err = binary.Write(w, binary.LittleEndian, stats.Unmapped) if err != nil { return fmt.Errorf("%s: failed to write index stats unmapped count: %v", typ, err) } return nil } func writeIntervals(w io.Writer, offsets []bgzf.Offset, typ string) error { err := binary.Write(w, binary.LittleEndian, int32(len(offsets))) if err != nil { return err } for _, o := range offsets { err := binary.Write(w, binary.LittleEndian, vOffset(o)) if err != nil { return fmt.Errorf("%s: failed to write tile interval virtual offset: %v", typ, err) } } return nil } hts-1.0.1/paper/000077500000000000000000000000001304417722000134165ustar00rootroot00000000000000hts-1.0.1/paper/examples/000077500000000000000000000000001304417722000152345ustar00rootroot00000000000000hts-1.0.1/paper/examples/flagstat/000077500000000000000000000000001304417722000170415ustar00rootroot00000000000000hts-1.0.1/paper/examples/flagstat/README.md000066400000000000000000000036741304417722000203320ustar00rootroot00000000000000flagstat ======== This example replicates the output of [samtools](https://samtools.github.io) flagstat command. With a single core, the program is significantly slower, but the Go program comparable performance with 4 cores and surpassing the C implementation with 8. On an example BAM file the output of samtools (1.3.2-199-gec1d68e/htslib 1.3.2-199-gec1d68e) is: ``` $ time samtools flagstat 9827_2#49.bam 56463236 + 0 in total (QC-passed reads + QC-failed reads) 0 + 0 secondary 0 + 0 supplementary 269248 + 0 duplicates 55357963 + 0 mapped (98.04% : N/A) 56463236 + 0 paired in sequencing 28231618 + 0 read1 28231618 + 0 read2 54363468 + 0 properly paired (96.28% : N/A) 55062652 + 0 with itself and mate mapped 295311 + 0 singletons (0.52% : N/A) 360264 + 0 with mate mapped to a different chr 300699 + 0 with mate mapped to a different chr (mapQ>=5) real 1m31.517s user 1m30.268s sys 0m1.180s ``` and of this command (Go 1.8) on the same file is: ``` $ go build github.com/biogo/hts/paper/examples/flagstat $ export GOMAXPROCS=1 $ time ./flagstat 9827_2#49.bam 56463236 + 0 in total (QC-passed reads + QC-failed reads) 0 + 0 in total secondary 0 + 0 in total supplementary 269248 + 0 duplicates 55357963 + 0 mapped (98.04% : N/A) 56463236 + 0 paired in sequencing 28231618 + 0 read1 28231618 + 0 read2 54363468 + 0 properly paired (96.28% : N/A) 55062652 + 0 with itself and mate mapped 295311 + 0 singletons (0.52% : N/A) 360264 + 0 with mate mapped to a different chr 300699 + 0 with mate mapped to a different chr (mapQ >= 5) real 5m2.323s user 5m0.312s sys 0m2.148s ``` The following give the same flagstat output, but with reduced time. GOMAXPROCS=2 ``` real 2m41.310s user 5m18.948s sys 0m2.600s ``` GOMAXPROCS=4 ``` real 1m40.957s user 6m21.232s sys 0m3.688s ``` GOMAXPROCS=8 ``` real 1m28.465s user 9m7.480s sys 0m8.056s ``` The file used in the benchmark was 9827_2#49.bam, available from ftp://ftp.sra.ebi.ac.uk/vol1/ERA242/ERA242167/bam/9827_2%2349.bamhts-1.0.1/paper/examples/flagstat/flagstat.go000066400000000000000000000105571304417722000212050ustar00rootroot00000000000000// Copyright ©2017 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // This program tabulates statistics on a bam file from the sam flag. // It replicates functionality in samtools flagstat. package main import ( "fmt" "io" "log" "os" "github.com/biogo/hts/bam" "github.com/biogo/hts/bgzf" "github.com/biogo/hts/sam" ) const ( pass = iota fail ) func main() { if len(os.Args) != 2 { log.Fatal("Expecting a single bam argument") } f, err := os.Open(os.Args[1]) if err != nil { log.Fatal(err) } defer f.Close() ok, err := bgzf.HasEOF(f) if err != nil { log.Fatal(err) } if !ok { log.Println("EOF block missing") } b, err := bam.NewReader(f, 0) if err != nil { log.Fatal(err) } defer b.Close() b.Omit(bam.AllVariableLengthData) // counts is indexed by [pass/fail][sam.Flag] where we have 12 possible sam Flags. var counts [2][12]uint64 // track mates on different chromosomes. var mates [2]struct{ allMapQ, highMapQ uint64 } var good, singletons, paired [2]uint64 var qc int for { read, err := b.Read() if err == io.EOF { break } if err != nil { log.Fatal(err) } if read.Flags&sam.QCFail == 0 { qc = pass } else { qc = fail } for i := Paired; i <= Supplementary; i++ { if read.Flags&(1< 4 { mates[qc].highMapQ++ } mates[qc].allMapQ++ } } } // extract counts to match output from samtools flagstat. fmt.Printf("%d + %d in total (QC-passed reads + QC-failed reads)\n", counts[pass][Paired], counts[fail][Paired]) fmt.Printf("%d + %d in total secondary\n", counts[pass][Secondary], counts[fail][Secondary]) fmt.Printf("%d + %d in total supplementary\n", counts[pass][Supplementary], counts[fail][Supplementary]) fmt.Printf("%d + %d duplicates\n", counts[pass][Duplicate], counts[fail][Duplicate]) mappedPass := counts[pass][Paired] - counts[pass][Unmapped] mappedFail := counts[fail][Paired] - counts[fail][Unmapped] fmt.Printf("%d + %d mapped (%s : %s)\n", mappedPass, mappedFail, percent(mappedPass, counts[pass][Paired]), percent(mappedFail, counts[fail][Paired])) fmt.Printf("%d + %d paired in sequencing\n", counts[pass][Paired], counts[fail][Paired]) fmt.Printf("%d + %d read1\n", counts[pass][Read1], counts[fail][Read1]) fmt.Printf("%d + %d read2\n", counts[pass][Read2], counts[fail][Read2]) fmt.Printf("%d + %d properly paired (%s : %s)\n", good[pass], good[fail], percent(good[pass], counts[pass][Paired]), percent(good[fail], counts[fail][Paired])) fmt.Printf("%d + %d with itself and mate mapped\n", paired[pass], paired[fail]) fmt.Printf("%d + %d singletons (%s : %s)\n", singletons[pass], singletons[fail], percent(singletons[pass], counts[pass][Paired]), percent(singletons[fail], counts[fail][Paired])) fmt.Printf("%d + %d with mate mapped to a different chr\n", mates[pass].allMapQ, mates[fail].allMapQ) fmt.Printf("%d + %d with mate mapped to a different chr (mapQ>=5)\n", mates[pass].highMapQ, mates[fail].highMapQ) } func percent(n, total uint64) string { if total == 0 { return "N/A" } return fmt.Sprintf("%.2f%%", 100*float64(n)/float64(total)) } // The flag indexes for SAM flags. Reflects sam.Flag order. const ( Paired uint = iota // The read is paired in sequencing, no matter whether it is mapped in a pair. ProperPair // The read is mapped in a proper pair. Unmapped // The read itself is unmapped; conflictive with ProperPair. MateUnmapped // The mate is unmapped. Reverse // The read is mapped to the reverse strand. MateReverse // The mate is mapped to the reverse strand. Read1 // This is read1. Read2 // This is read2. Secondary // Not primary alignment. QCFail // QC failure. Duplicate // Optical or PCR duplicate. Supplementary // Supplementary alignment, indicates alignment is part of a chimeric alignment. ) hts-1.0.1/paper/paper.md000066400000000000000000000032701304417722000150510ustar00rootroot00000000000000--- title: 'bíogo/hts: high throughput sequence handling for the Go language' tags: - bioinformatics - toolkit - golang authors: - name: R Daniel Kortschak orcid: 0000-0001-8295-2301 affiliation: 1 - name: Brent S Pedersen orcid: 0000-0003-1786-2216 affiliation: 2 - name: David L Adelson orcid: 0000-0003-2404-5636 affiliation: 1 affiliations: - name: School of Biological Sciences, The University of Adelaide index: 1 - name: Department of Human Genetics, University of Utah index: 2 date: 6 January 2017 --- # Summary bíogo/hts provides a Go native implementation of the [SAM specification](https://samtools.github.io/hts-specs/SAMv1.pdf) for SAM and BAM alignment formats (Li et al. 2009) commonly used for representation of high throughput genomic data, the BAI, CSI and tabix indexing formats, and the BGZF blocked compression format. The bíogo/hts packages perform parallelized read and write operations and are able to cache recent reads according to user-specified caching methods. The parallelisation approach used by the bíogo/hts package is influenced by the approach of the D implementation, sambamba by Tarazov et al. (2015). The bíogo/hts APIs have been constructed to provide a consistent interface to sequence alignment data and the underlying compression system in order to aid ease of use and tool development. # References https://samtools.github.io/hts-specs/SAMv1.pdf Li, H. et al. (2009) "The Sequence Alignment/Map format and SAMtools" Bioinformatics 25(16):2078-2079. doi:10.1093/bioinformatics/btp352 Tarasov, A. et al. (2015) "Sambamba: fast processing of NGS alignment formats" Bioinformatics 31(12):2032-2034. doi:10.1093/bioinformatics/btv098 hts-1.0.1/sam/000077500000000000000000000000001304417722000130675ustar00rootroot00000000000000hts-1.0.1/sam/HG00096_1000_test.go000066400000000000000000001206761304417722000160260ustar00rootroot00000000000000package sam import ( "net/url" "time" ) var ( // This is the header of the file // ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/HG00096/alignment/HG00096.unmapped.ILLUMINA.bwa.GBR.low_coverage.20120522.bam // // samtools view HG00096.unmapped.ILLUMINA.bwa.GBR.low_coverage.20120522.bam -H | sed -e 's/ \{7,8\}/\t/g'> HG00096_1000.sam # The sed sub is required due to broken format in original data. // samtools view HG00096.unmapped.ILLUMINA.bwa.GBR.low_coverage.20120522.bam | head -n 1000 >> HG00096_1000.sam // samtools view -Sb HG00096_1000.sam > HG00096_1000.bam headerHG00096_1000 = &Header{ Version: "1.0", SortOrder: 3, Comments: []string{ "$known_indels_file(s) = ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_mapping_resources/ALL.wgs.indels_mills_devine_hg19_leftAligned_collapsed_double_hit.indels.sites.vcf.gz", "$known_indels_file(s) .= ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_mapping_resources/ALL.wgs.low_coverage_vqsr.20101123.indels.sites.vcf.gz", "$known_sites_file(s) = ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/phase2_mapping_resources/ALL.wgs.dbsnp.build135.snps.sites.vcf.gz", }, refs: []*Reference{ { id: 0, name: "1", lRef: 249250621, md5: "\x1b\x22\xb9\x8c\xde\xb4\xa9\x30\x4c\xb5\xd4\x80\x26\xa8\x51\x28", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 1, name: "2", lRef: 243199373, md5: "\xa0\xd9\x85\x1d\xa0\x04\x00\xde\xc1\x09\x8a\x92\x55\xac\x71\x2e", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 2, name: "3", lRef: 198022430, md5: "\xfd\xfd\x81\x18\x49\xcc\x2f\xad\xeb\xc9\x29\xbb\x92\x59\x02\xe5", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 3, name: "4", lRef: 191154276, md5: "\x23\xdc\xcd\x10\x68\x97\x54\x2a\xd8\x7d\x27\x65\xd2\x8a\x19\xa1", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 4, name: "5", lRef: 180915260, md5: "\x07\x40\x17\x3d\xb9\xff\xd2\x64\xd7\x28\xf3\x27\x84\x84\x5c\xd7", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 5, name: "6", lRef: 171115067, md5: "\x1d\x3a\x93\xa2\x48\xd9\x2a\x72\x9e\xe7\x64\x82\x3a\xcb\xbc\x6b", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 6, name: "7", lRef: 159138663, md5: "\x61\x83\x66\xe9\x53\xd6\xaa\xad\x97\xdb\xe4\x77\x7c\x29\x37\x5e", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 7, name: "8", lRef: 146364022, md5: "\x96\xf5\x14\xa9\x92\x9e\x41\x0c\x66\x51\x69\x7b\xde\xd5\x9a\xec", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 8, name: "9", lRef: 141213431, md5: "\x3e\x27\x31\x17\xf1\x5e\x0a\x40\x0f\x01\x05\x5d\x9f\x39\x37\x68", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 9, name: "10", lRef: 135534747, md5: "\x98\x8c\x28\xe0\x00\xe8\x4c\x26\xd5\x52\x35\x9a\xf1\xea\x2e\x1d", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 10, name: "11", lRef: 135006516, md5: "\x98\xc5\x90\x49\xa2\xdf\x28\x5c\x76\xff\xb1\xc6\xdb\x8f\x8b\x96", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 11, name: "12", lRef: 133851895, md5: "\x51\x85\x1a\xc0\xe1\xa1\x15\x84\x7a\xd3\x64\x49\xb0\x01\x58\x64", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 12, name: "13", lRef: 115169878, md5: "\x28\x3f\x8d\x78\x92\xba\xa8\x1b\x51\x0a\x01\x57\x19\xca\x7b\x0b", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 13, name: "14", lRef: 107349540, md5: "\x98\xf3\xca\xe3\x2b\x2a\x2e\x95\x24\xbc\x19\x81\x39\x27\x54\x2e", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 14, name: "15", lRef: 102531392, md5: "\xe5\x64\x5a\x79\x4a\x82\x38\x21\x5b\x2c\xd7\x7a\xcb\x95\xa0\x78", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 15, name: "16", lRef: 90354753, md5: "\xfc\x9b\x1a\x7b\x42\xb9\x7a\x86\x4f\x56\xb3\x48\xb0\x60\x95\xe6", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 16, name: "17", lRef: 81195210, md5: "\x35\x1f\x64\xd4\xf4\xf9\xdd\xd4\x5b\x35\x33\x6a\xd9\x7a\xa6\xde", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 17, name: "18", lRef: 78077248, md5: "\xb1\x5d\x4b\x2d\x29\xdd\xe9\xd3\xe4\xf9\x3d\x1d\x0f\x2c\xbc\x9c", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 18, name: "19", lRef: 59128983, md5: "\x1a\xac\xd7\x1f\x30\xdb\x8e\x56\x18\x10\x91\x3e\x0b\x72\x63\x6d", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 19, name: "20", lRef: 63025520, md5: "\x0d\xec\x96\x60\xec\x1e\xfa\xaf\x33\x28\x1c\x0d\x5e\xa2\x56\x0f", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 20, name: "21", lRef: 48129895, md5: "\x29\x79\xa6\x08\x5b\xfe\x28\xe3\xad\x6f\x55\x2f\x36\x1e\xd7\x4d", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 21, name: "22", lRef: 51304566, md5: "\xa7\x18\xac\xaa\x61\x35\xfd\xca\x83\x57\xd5\xbf\xe9\x42\x11\xdd", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 22, name: "X", lRef: 155270560, md5: "\x7e\x0e\x2e\x58\x02\x97\xb7\x76\x4e\x31\xdb\xc8\x0c\x25\x40\xdd", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 23, name: "Y", lRef: 59373566, md5: "\x1f\xa3\x47\x47\x50\xaf\x09\x48\xbd\xf9\x7d\x5a\x0e\xe5\x2e\x51", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 24, name: "MT", lRef: 16569, md5: "\xc6\x8f\x52\x67\x4c\x9f\xb3\x3a\xef\x52\xdc\xf3\x99\x75\x55\x19", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 25, name: "GL000207.1", lRef: 4262, md5: "\xf3\x81\x48\x41\xf1\x93\x9d\x3c\xa1\x90\x72\xd9\xe8\x9f\x3f\xd7", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 26, name: "GL000226.1", lRef: 15008, md5: "\x1c\x1b\x2c\xd1\xfc\xcb\xc0\xa9\x9b\x6a\x44\x7f\xa2\x4d\x15\x04", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 27, name: "GL000229.1", lRef: 19913, md5: "\xd0\xf4\x0e\xc8\x7d\xe3\x11\xd8\xe7\x15\xb5\x2e\x4c\x70\x62\xe1", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 28, name: "GL000231.1", lRef: 27386, md5: "\xba\x88\x82\xce\x3a\x1e\xfa\x20\x80\xe5\xd2\x9b\x95\x65\x68\xa4", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 29, name: "GL000210.1", lRef: 27682, md5: "\x85\x11\x06\xa7\x42\x38\x04\x41\x26\x13\x1c\xe2\xa8\xe5\x84\x7c", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 30, name: "GL000239.1", lRef: 33824, md5: "\x99\x79\x5f\x15\x70\x2c\xae\xc4\xfa\x1c\x4e\x15\xf8\xa2\x9c\x07", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 31, name: "GL000235.1", lRef: 34474, md5: "\x11\x8a\x25\xca\x21\x0c\xfb\xcd\xfb\x6c\x2e\xbb\x24\x9f\x96\x80", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 32, name: "GL000201.1", lRef: 36148, md5: "\xdf\xb7\xe7\xec\x60\xff\xdc\xb8\x5c\xb3\x59\xea\x28\x45\x4e\xe9", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 33, name: "GL000247.1", lRef: 36422, md5: "\x7d\xe0\x02\x26\xbb\x7d\xf1\xc5\x72\x76\xca\x6b\xaa\xba\xfd\x15", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 34, name: "GL000245.1", lRef: 36651, md5: "\x89\xbc\x61\x96\x0f\x37\xd9\x4a\xbf\x0d\xf2\xd4\x81\xad\xa0\xec", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 35, name: "GL000197.1", lRef: 37175, md5: "\x6f\x5e\xfd\xd3\x66\x43\xa9\xb8\xc8\xcc\xad\x6f\x2f\x1e\xdc\x7b", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 36, name: "GL000203.1", lRef: 37498, md5: "\x96\x35\x8c\x32\x5f\xe0\xe7\x0b\xee\x73\x43\x6e\x8b\xb1\x4d\xbd", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 37, name: "GL000246.1", lRef: 38154, md5: "\xe4\xaf\xcd\x31\x91\x2a\xf9\xd9\xc2\x54\x6a\xcf\x1c\xb2\x3a\xf2", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 38, name: "GL000249.1", lRef: 38502, md5: "\x1d\x78\xab\xec\x37\xc1\x5f\xe2\x9a\x27\x5e\xb0\x8d\x5a\xf2\x36", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 39, name: "GL000196.1", lRef: 38914, md5: "\xd9\x22\x06\xd1\xbb\x4c\x3b\x40\x19\xc4\x3c\x08\x75\xc0\x6d\xc0", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 40, name: "GL000248.1", lRef: 39786, md5: "\x5a\x8e\x43\xbe\xc9\xbe\x36\xc7\xb4\x9c\x84\xd5\x85\x10\x77\x76", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 41, name: "GL000244.1", lRef: 39929, md5: "\x09\x96\xb4\x47\x5f\x35\x3c\xa9\x8b\xac\xb7\x56\xac\x47\x91\x40", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 42, name: "GL000238.1", lRef: 39939, md5: "\x13\x1b\x1e\xfc\x32\x70\xcc\x83\x86\x86\xb5\x4e\x7c\x34\xb1\x7b", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 43, name: "GL000202.1", lRef: 40103, md5: "\x06\xcb\xf1\x26\x24\x7d\x89\x66\x4a\x4f\xae\xba\xd1\x30\xfe\x9c", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 44, name: "GL000234.1", lRef: 40531, md5: "\x93\xf9\x98\x53\x6b\x61\xa5\x6f\xd0\xff\x47\x32\x2a\x91\x1d\x4b", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 45, name: "GL000232.1", lRef: 40652, md5: "\x3e\x06\xb6\x74\x10\x61\xad\x93\xa8\x58\x75\x31\x30\x70\x57\xd8", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 46, name: "GL000206.1", lRef: 41001, md5: "\x43\xf6\x9e\x42\x35\x33\xe9\x48\xbf\xae\x5c\xe1\xd4\x5b\xd3\xf1", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 47, name: "GL000240.1", lRef: 41933, md5: "\x44\x5a\x86\x17\x3d\xa9\xf2\x37\xd7\xbc\xf4\x1c\x6c\xb8\xcc\x62", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 48, name: "GL000236.1", lRef: 41934, md5: "\xfd\xcd\x73\x99\x13\xef\xa1\xfd\xc6\x4b\x6c\x0c\xd7\x01\x67\x79", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 49, name: "GL000241.1", lRef: 42152, md5: "\xef\x42\x58\xcd\xc5\xa4\x5c\x20\x6c\xea\x8f\xc3\xe1\xd8\x58\xcf", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 50, name: "GL000243.1", lRef: 43341, md5: "\xcc\x34\x27\x9a\x7e\x35\x31\x36\x74\x1c\x9f\xce\x79\xbc\x43\x96", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 51, name: "GL000242.1", lRef: 43523, md5: "\x2f\x86\x94\xfc\x47\x57\x6b\xc8\x1b\x5f\xe9\xe7\xde\x0b\xa4\x9e", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 52, name: "GL000230.1", lRef: 43691, md5: "\xb4\xeb\x71\xee\x87\x8d\x37\x06\x24\x6b\x7c\x1d\xbe\xf6\x92\x99", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 53, name: "GL000237.1", lRef: 45867, md5: "\xe0\xc8\x2e\x77\x51\xdf\x73\xf4\xf6\xd0\xed\x30\xcd\xc8\x53\xc0", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 54, name: "GL000233.1", lRef: 45941, md5: "\x7f\xed\x60\x29\x8a\x8d\x62\xff\x80\x8b\x74\xb6\xce\x82\x00\x01", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 55, name: "GL000204.1", lRef: 81310, md5: "\xef\xc4\x9c\x87\x15\x36\xfa\x8d\x79\xcb\x0a\x06\xfa\x73\x97\x22", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 56, name: "GL000198.1", lRef: 90085, md5: "\x86\x8e\x77\x84\x04\x0d\xa9\x0d\x90\x0d\x2d\x1b\x66\x7a\x13\x83", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 57, name: "GL000208.1", lRef: 92689, md5: "\xaa\x81\xbe\x49\xbf\x3f\xe6\x3a\x79\xbd\xc6\xa6\xf2\x79\xab\xf6", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 58, name: "GL000191.1", lRef: 106433, md5: "\xd7\x5b\x43\x6f\x50\xa8\x21\x4e\xe9\xc2\xa5\x1d\x30\xb2\xc2\xcc", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 59, name: "GL000227.1", lRef: 128374, md5: "\xa4\xae\xad\x23\xf8\x05\x3f\x26\x55\xe4\x68\xbc\xc6\xec\xdc\xeb", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 60, name: "GL000228.1", lRef: 129120, md5: "\xc5\xa1\x7c\x97\xe2\xc1\xa0\xb6\xa9\xcc\x5a\x6b\x06\x4b\x71\x4f", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 61, name: "GL000214.1", lRef: 137718, md5: "\x46\xc2\x03\x2c\x37\xf2\xed\x89\x9e\xb4\x1c\x04\x73\x31\x9a\x69", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 62, name: "GL000221.1", lRef: 155397, md5: "\x32\x38\xfb\x74\xea\x87\xae\x85\x7f\x9c\x75\x08\xd3\x15\xba\xbb", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 63, name: "GL000209.1", lRef: 159169, md5: "\xf4\x05\x98\xe2\xa5\xa6\xb2\x6e\x84\xa3\x77\x5e\x0d\x1e\x2c\x81", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 64, name: "GL000218.1", lRef: 161147, md5: "\x1d\x70\x8b\x54\x64\x4c\x26\xc7\xe0\x1c\x2d\xad\x54\x26\xd3\x8c", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 65, name: "GL000220.1", lRef: 161802, md5: "\xfc\x35\xde\x96\x3c\x57\xbf\x76\x48\x42\x9e\x64\x54\xf1\xc9\xdb", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 66, name: "GL000213.1", lRef: 164239, md5: "\x9d\x42\x4f\xdc\xc9\x88\x66\x65\x0b\x58\xf0\x04\x08\x0a\x99\x2a", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 67, name: "GL000211.1", lRef: 166566, md5: "\x7d\xaa\xa4\x5c\x66\xb2\x88\x84\x7b\x9b\x32\xb9\x64\xe6\x23\xd3", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 68, name: "GL000199.1", lRef: 169874, md5: "\x56\x9a\xf3\xb7\x35\x22\xfa\xb4\xb4\x09\x95\xae\x49\x44\xe7\x8e", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 69, name: "GL000217.1", lRef: 172149, md5: "\x6d\x24\x3e\x18\xde\xa1\x94\x5f\xb7\xf2\x51\x76\x15\xb8\xf5\x2e", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 70, name: "GL000216.1", lRef: 172294, md5: "\x64\x2a\x23\x2d\x91\xc4\x86\xac\x33\x92\x63\x82\x0a\xef\x7f\xe0", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 71, name: "GL000215.1", lRef: 172545, md5: "\x5e\xb3\xb4\x18\x48\x0a\xe6\x7a\x99\x79\x57\xc9\x09\x37\x5a\x73", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 72, name: "GL000205.1", lRef: 174588, md5: "\xd2\x24\x41\x39\x8d\x99\xca\xf6\x73\xe9\xaf\xb9\xa1\x90\x8e\xc5", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 73, name: "GL000219.1", lRef: 179198, md5: "\xf9\x77\xed\xd1\x3b\xac\x45\x9c\xb2\xed\x4a\x54\x57\xdb\xa1\xb3", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 74, name: "GL000224.1", lRef: 179693, md5: "\xd5\xb2\xfc\x04\xf6\xb4\x1b\x21\x2a\x41\x98\xa0\x7f\x45\x0e\x20", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 75, name: "GL000223.1", lRef: 180455, md5: "\x39\x9d\xfa\x03\xbf\x32\x02\x2a\xb5\x2a\x84\x6f\x7c\xa3\x5b\x30", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 76, name: "GL000195.1", lRef: 182896, md5: "\x5d\x9e\xc0\x07\x86\x8d\x51\x7e\x73\x54\x3b\x00\x5b\xa4\x85\x35", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 77, name: "GL000212.1", lRef: 186858, md5: "\x56\x35\x31\x68\x9f\x3d\xbd\x69\x13\x31\xfd\x6c\x57\x30\xa8\x8b", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 78, name: "GL000222.1", lRef: 186861, md5: "\x6f\xe9\xab\xac\x45\x51\x69\xf5\x04\x70\xf5\xa6\xb0\x1d\x0f\x59", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 79, name: "GL000200.1", lRef: 187035, md5: "\x75\xe4\xc8\xd1\x7c\xd4\xad\xdf\x39\x17\xd1\x70\x3c\xac\xaf\x25", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 80, name: "GL000193.1", lRef: 189789, md5: "\xdb\xb6\xe8\xec\xe0\xb5\xde\x29\xda\x56\x60\x16\x13\x00\x7c\x2a", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 81, name: "GL000194.1", lRef: 191469, md5: "\x6a\xc8\xf8\x15\xbf\x8e\x84\x5b\xb3\x03\x1b\x73\xf8\x12\xc0\x12", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 82, name: "GL000225.1", lRef: 211173, md5: "\x63\x94\x5c\x3e\x69\x62\xf2\x8f\xfd\x46\x97\x19\xa7\x47\xe7\x3c", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 83, name: "GL000192.1", lRef: 547496, md5: "\x32\x5b\xa9\xe8\x08\xf6\x69\xdf\xee\xe2\x10\xfd\xd7\xb4\x70\xac", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 84, name: "NC_007605", lRef: 171823, md5: "\x67\x43\xbd\x63\xb3\xff\x2b\x5b\x89\x85\xd8\x93\x3c\x53\x29\x0a", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, { id: 85, name: "hs37d5", lRef: 35477943, md5: "\x5b\x6a\x4b\x3a\x81\xa2\xd3\xc1\x34\xb7\xd1\x4b\xf6\xad\x39\xf1", assemID: "NCBI37", species: "Human", uri: &url.URL{ Scheme: "ftp", Host: "ftp.1000genomes.ebi.ac.uk", Path: "/vol1/ftp/technical/reference/phase2_reference_assembly_sequence/hs37d5.fa.gz", }, }, }, rgs: []*ReadGroup{ { id: 0, name: "SRR062634", center: "WUGSC", description: "SRP001294", date: time.Time{}, flowOrder: "", keySeq: "", library: "2845856850", program: "", insertSize: 206, platform: "ILLUMINA", platformUnit: "", sample: "HG00096", }, { id: 1, name: "SRR062635", center: "WUGSC", description: "SRP001294", date: time.Time{}, flowOrder: "", keySeq: "", library: "2845856850", program: "", insertSize: 206, platform: "ILLUMINA", platformUnit: "", sample: "HG00096", }, { id: 2, name: "SRR062641", center: "WUGSC", description: "SRP001294", date: time.Time{}, flowOrder: "", keySeq: "", library: "2845856850", program: "", insertSize: 206, platform: "ILLUMINA", platformUnit: "", sample: "HG00096", }, }, progs: []*Program{ { id: 0, uid: "bwa_index", previous: "", name: "bwa", command: "bwa index -a bwtsw $reference_fasta", version: "0.5.9-r16", }, { id: 1, uid: "bwa_aln_fastq", previous: "bwa_index", name: "bwa", command: "bwa aln -q 15 -f $sai_file $reference_fasta $fastq_file", version: "0.5.9-r16", }, { id: 2, uid: "bwa_sam", previous: "bwa_aln_fastq", name: "bwa", command: "bwa sampe -a 618 -r $rg_line -f $sam_file $reference_fasta $sai_file(s) $fastq_file(s)", version: "0.5.9-r16", }, { id: 3, uid: "sam_to_fixed_bam", previous: "bwa_sam", name: "samtools", command: "samtools view -bSu $sam_file | samtools sort -n -o - samtools_nsort_tmp | samtools fixmate /dev/stdin /dev/stdout | samtools sort -o - samtools_csort_tmp | samtools fillmd -u - $reference_fasta > $fixed_bam_file", version: "0.1.17 (r973:277)", }, { id: 4, uid: "gatk_target_interval_creator", previous: "sam_to_fixed_bam", name: "GenomeAnalysisTK", command: "java $jvm_args -jar GenomeAnalysisTK.jar -T RealignerTargetCreator -R $reference_fasta -o $intervals_file -known $known_indels_file(s)", version: "1.2-29-g0acaf2d", }, { id: 5, uid: "bam_realignment_around_known_indels", previous: "gatk_target_interval_creator", name: "GenomeAnalysisTK", command: "java $jvm_args -jar GenomeAnalysisTK.jar -T IndelRealigner -R $reference_fasta -I $bam_file -o $realigned_bam_file -targetIntervals $intervals_file -known $known_indels_file(s) -LOD 0.4 -model KNOWNS_ONLY -compress 0 --disable_bam_indexing", version: "1.2-29-g0acaf2d", }, { id: 6, uid: "bam_count_covariates", previous: "bam_realignment_around_known_indels", name: "GenomeAnalysisTK", command: "java $jvm_args -jar GenomeAnalysisTK.jar -T CountCovariates -R $reference_fasta -I $bam_file -recalFile $bam_file.recal_data.csv -knownSites $known_sites_file(s) -l INFO -L '1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;X;Y;MT' -cov ReadGroupCovariate -cov QualityScoreCovariate -cov CycleCovariate -cov DinucCovariate", version: "1.2-29-g0acaf2d", }, { id: 7, uid: "bam_recalibrate_quality_scores", previous: "bam_count_covariates", name: "GenomeAnalysisTK", command: "java $jvm_args -jar GenomeAnalysisTK.jar -T TableRecalibration -R $reference_fasta -recalFile $bam_file.recal_data.csv -I $bam_file -o $recalibrated_bam_file -l INFO -compress 0 --disable_bam_indexing", version: "1.2-29-g0acaf2d", }, { id: 8, uid: "bam_calculate_bq", previous: "bam_recalibrate_quality_scores", name: "samtools", command: "samtools calmd -Erb $bam_file $reference_fasta > $bq_bam_file", version: "0.1.17 (r973:277)", }, { id: 9, uid: "bam_merge", previous: "bam_calculate_bq", name: "picard", command: "java $jvm_args -jar MergeSamFiles.jar INPUT=$bam_file(s) OUTPUT=$merged_bam VALIDATION_STRINGENCY=SILENT", version: "1.53", }, { id: 10, uid: "bam_mark_duplicates", previous: "bam_merge", name: "picard", command: "java $jvm_args -jar MarkDuplicates.jar INPUT=$bam_file OUTPUT=$markdup_bam_file ASSUME_SORTED=TRUE METRICS_FILE=/dev/null VALIDATION_STRINGENCY=SILENT", version: "1.53", }, { id: 11, uid: "bam_merge.1", previous: "bam_mark_duplicates", name: "picard", command: "java $jvm_args -jar MergeSamFiles.jar INPUT=$bam_file(s) OUTPUT=$merged_bam VALIDATION_STRINGENCY=SILENT", version: "1.53", }, }, seenRefs: set{ "12": 11, "GL000238.1": 42, "GL000191.1": 58, "GL000227.1": 59, "GL000209.1": 63, "GL000246.1": 37, "GL000202.1": 43, "GL000233.1": 54, "GL000211.1": 67, "1": 0, "GL000207.1": 25, "GL000229.1": 27, "GL000236.1": 48, "GL000243.1": 50, "GL000214.1": 61, "2": 1, "GL000231.1": 28, "GL000244.1": 41, "GL000198.1": 56, "GL000213.1": 66, "GL000200.1": 79, "NC_007605": 84, "3": 2, "GL000234.1": 44, "GL000241.1": 49, "GL000216.1": 70, "GL000205.1": 72, "4": 3, "19": 18, "GL000196.1": 39, "GL000220.1": 65, "5": 4, "18": 17, "MT": 24, "GL000210.1": 29, "GL000247.1": 33, "GL000203.1": 36, "GL000232.1": 45, "6": 5, "GL000248.1": 40, "GL000222.1": 78, "GL000194.1": 81, "7": 6, "GL000201.1": 32, "GL000245.1": 34, "GL000230.1": 52, "GL000199.1": 68, "GL000212.1": 77, "8": 7, "15": 14, "X": 22, "GL000219.1": 73, "GL000224.1": 74, "GL000192.1": 83, "9": 8, "14": 13, "Y": 23, "GL000197.1": 35, "GL000221.1": 62, "17": 16, "GL000226.1": 26, "GL000239.1": 30, "GL000208.1": 57, "hs37d5": 85, "16": 15, "GL000249.1": 38, "GL000223.1": 75, "GL000195.1": 76, "11": 10, "20": 19, "GL000206.1": 46, "GL000242.1": 51, "GL000237.1": 53, "GL000228.1": 60, "GL000215.1": 71, "10": 9, "21": 20, "GL000218.1": 64, "GL000193.1": 80, "GL000225.1": 82, "13": 12, "22": 21, "GL000235.1": 31, "GL000240.1": 47, "GL000204.1": 55, "GL000217.1": 69, }, seenGroups: set{ "SRR062634": 0, "SRR062635": 1, "SRR062641": 2, }, seenProgs: set{ "bwa_index": 0, "sam_to_fixed_bam": 3, "bam_realignment_around_known_indels": 5, "bam_recalibrate_quality_scores": 7, "bam_calculate_bq": 8, "bam_merge": 9, "bam_mark_duplicates": 10, "bwa_aln_fastq": 1, "bwa_sam": 2, "gatk_target_interval_creator": 4, "bam_count_covariates": 6, "bam_merge.1": 11, }, } ) hts-1.0.1/sam/auxtags.go000066400000000000000000000314361304417722000151010ustar00rootroot00000000000000// Copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sam import ( "bytes" "encoding/binary" "encoding/hex" "fmt" "math" "reflect" "strconv" "unsafe" ) // ASCII is a printable ASCII character included in an Aux tag. type ASCII byte // Hex is a byte slice represented as a hex string in an Aux tag. type Hex []byte // Text is a byte slice represented as a string in an Aux tag. type Text []byte // An Aux represents an auxiliary data field from a SAM alignment record. type Aux []byte // NewAux returns a new Aux with the given tag, type and value. Acceptable value // types and their corresponding SAM type are: // // A - ASCII // c - int8 // C - uint8 // s - int16 // S - uint16 // i - int, uint or int32 // I - int, uint or uint32 // f - float32 // Z - Text or string // H - Hex // B - []int8, []int16, []int32, []uint8, []uint16, []uint32 or []float32 // // The handling of int and uint types is provided as a convenience - values must // fit within either int32 or uint32 and are converted to the smallest possible // representation. // func NewAux(t Tag, value interface{}) (Aux, error) { var a Aux switch v := value.(type) { case ASCII: a = Aux{t[0], t[1], 'A', byte(v)} case int: switch { case math.MinInt8 <= v && v <= math.MaxInt8: a = Aux{t[0], t[1], 'c', byte(v)} case math.MinInt16 <= v && v <= math.MaxInt16: a = Aux{t[0], t[1], 's', 0, 0} binary.LittleEndian.PutUint16(a[3:5], uint16(v)) case math.MinInt32 <= v && v <= math.MaxInt32: a = Aux{t[0], t[1], 'i', 0, 0, 0, 0} binary.LittleEndian.PutUint32(a[3:7], uint32(v)) default: return nil, fmt.Errorf("sam: integer value out of range %d > %d", v, math.MaxInt32) } case uint: switch { case v <= math.MaxUint8: a = Aux{t[0], t[1], 'C', byte(v)} case v <= math.MaxUint16: a = Aux{t[0], t[1], 'S', 0, 0} binary.LittleEndian.PutUint16(a[3:5], uint16(v)) case v <= math.MaxUint32: a = Aux{t[0], t[1], 'I', 0, 0, 0, 0} binary.LittleEndian.PutUint32(a[3:7], uint32(v)) default: return nil, fmt.Errorf("sam: unsigned integer value out of range %d > %d", v, uint(math.MaxUint32)) } case int8: a = Aux{t[0], t[1], 'c', byte(v)} case uint8: a = Aux{t[0], t[1], 'C', v} case int16: a = Aux{t[0], t[1], 's', 0, 0} binary.LittleEndian.PutUint16(a[3:5], uint16(v)) case uint16: a = Aux{t[0], t[1], 'S', 0, 0} binary.LittleEndian.PutUint16(a[3:5], v) case int32: a = Aux{t[0], t[1], 'i', 0, 0, 0, 0} binary.LittleEndian.PutUint32(a[3:7], uint32(v)) case uint32: a = Aux{t[0], t[1], 'I', 0, 0, 0, 0} binary.LittleEndian.PutUint32(a[3:7], v) case float32: a = Aux{t[0], t[1], 'f', 0, 0, 0, 0} binary.LittleEndian.PutUint32(a[3:7], math.Float32bits(v)) case Text: a = append(Aux{t[0], t[1], 'Z'}, v...) case string: a = append(Aux{t[0], t[1], 'Z'}, v...) case Hex: a = make(Aux, 3, len(v)+3) copy(a, Aux{t[0], t[1], 'H'}) a = append(a, v...) default: rv := reflect.ValueOf(value) rt := rv.Type() if k := rt.Kind(); k != reflect.Array && k != reflect.Slice { return nil, fmt.Errorf("sam: unknown type %T", value) } l := rv.Len() if uint(l) > math.MaxUint32 { return nil, fmt.Errorf("sam: array too long") } a = Aux{t[0], t[1], 'B', 0xff, 0, 0, 0, 0} binary.LittleEndian.PutUint32([]byte(a[4:8]), uint32(l)) switch rt.Elem().Kind() { case reflect.Int8: a[3] = 'c' value := value.([]int8) b := *(*[]byte)(unsafe.Pointer(&value)) return append(a, b...), nil case reflect.Uint8: a[3] = 'C' return append(a, value.([]uint8)...), nil case reflect.Int16: a[3] = 's' case reflect.Uint16: a[3] = 'S' case reflect.Int32: a[3] = 'i' case reflect.Uint32: a[3] = 'I' case reflect.Float32: a[3] = 'f' default: return nil, fmt.Errorf("sam: unsupported array type: %T", value) } buf := bytes.NewBuffer(a) err := binary.Write(buf, binary.LittleEndian, value) a = buf.Bytes() if err != nil { return nil, fmt.Errorf("sam: failed to encode array: %v", err) } } return a, nil } // ParseAux returns an AUX parsed from the given text. func ParseAux(text []byte) (Aux, error) { tf := bytes.SplitN(text, []byte{':'}, 3) if len(tf) != 3 || len(tf[1]) != 1 { return nil, fmt.Errorf("sam: invalid aux tag field: %q", text) } var value interface{} switch typ := tf[1][0]; typ { case 'A': if len(tf[2]) != 1 { return nil, fmt.Errorf("sam: invalid aux tag field: %q", text) } value = ASCII(tf[2][0]) case 'i': i, err := strconv.Atoi(string(tf[2])) if err != nil { return nil, fmt.Errorf("sam: invalid aux tag field: %v", err) } if i < 0 { value = i } else { value = uint(i) } case 'f': f, err := strconv.ParseFloat(string(tf[2]), 32) if err != nil { return nil, fmt.Errorf("sam: invalid aux tag field: %v", err) } value = float32(f) case 'Z': value = Text(tf[2]) case 'H': b := make([]byte, hex.DecodedLen(len(tf[2]))) _, err := hex.Decode(b, tf[2]) if err != nil { return nil, fmt.Errorf("sam: invalid aux tag field: %v", err) } value = Hex(b) case 'B': if tf[2][1] != ',' { return nil, fmt.Errorf("sam: invalid aux tag field: %q", text) } nf := bytes.Split(tf[2][2:], []byte{','}) if len(nf) == 0 { return nil, fmt.Errorf("sam: invalid aux tag field: %q", text) } switch tf[2][0] { case 'c': a := make([]int8, len(nf)) for i, n := range nf { v, err := strconv.ParseInt(string(n), 0, 8) if err != nil { return nil, fmt.Errorf("sam: invalid aux tag field: %v", err) } a[i] = int8(v) } value = a case 'C': a := make([]uint8, len(nf)) for i, n := range nf { v, err := strconv.ParseUint(string(n), 0, 8) if err != nil { return nil, fmt.Errorf("sam: invalid aux tag field: %v", err) } a[i] = uint8(v) } value = a case 's': a := make([]int16, len(nf)) for i, n := range nf { v, err := strconv.ParseInt(string(n), 0, 16) if err != nil { return nil, fmt.Errorf("sam: invalid aux tag field: %v", err) } a[i] = int16(v) } value = a case 'S': a := make([]uint16, len(nf)) for i, n := range nf { v, err := strconv.ParseUint(string(n), 0, 16) if err != nil { return nil, fmt.Errorf("sam: invalid aux tag field: %v", err) } a[i] = uint16(v) } value = a case 'i': a := make([]int32, len(nf)) for i, n := range nf { v, err := strconv.ParseInt(string(n), 0, 32) if err != nil { return nil, fmt.Errorf("sam: invalid aux tag field: %v", err) } a[i] = int32(v) } value = a case 'I': a := make([]uint32, len(nf)) for i, n := range nf { v, err := strconv.ParseUint(string(n), 0, 32) if err != nil { return nil, fmt.Errorf("sam: invalid aux tag field: %v", err) } a[i] = uint32(v) } value = a case 'f': a := make([]float32, len(nf)) for i, n := range nf { f, err := strconv.ParseFloat(string(n), 32) if err != nil { return nil, fmt.Errorf("sam: invalid aux tag field: %v", err) } a[i] = float32(f) } value = a default: return nil, fmt.Errorf("sam: invalid aux tag field: %q", text) } default: return nil, fmt.Errorf("sam: invalid aux tag field: %q", text) } var t Tag if copy(t[:], tf[0]) != 2 { return nil, fmt.Errorf("sam: invalid aux tag: %q", tf[0]) } aux, err := NewAux(t, value) if err != nil { return nil, fmt.Errorf("sam: invalid aux tag field: %v", err) } return aux, nil } var auxKind = [256]byte{ 'A': 'A', 'c': 'i', 'C': 'i', 's': 'i', 'S': 'i', 'i': 'i', 'I': 'i', 'f': 'f', 'Z': 'Z', 'H': 'H', 'B': 'B', } // String returns the string representation of an Aux type. func (a Aux) String() string { switch a.Type() { case 'A': return fmt.Sprintf("%s:%c:%c", []byte(a[:2]), a.Kind(), a.Value()) case 'H': return fmt.Sprintf("%s:%c:%02x", []byte(a[:2]), a.Kind(), a.Value()) case 'B': return fmt.Sprintf("%s:%c:%c:%v", []byte(a[:2]), a.Kind(), a[3], a.Value()) } return fmt.Sprintf("%s:%c:%v", []byte(a[:2]), a.Kind(), a.Value()) } // samAux implements SAM aux field formatting. type samAux Aux // String returns the string representation of an Aux type. func (sa samAux) String() string { a := Aux(sa) switch a.Type() { case 'A': return fmt.Sprintf("%s:%c:%c", []byte(a[:2]), a.Kind(), a.Value()) case 'H': return fmt.Sprintf("%s:%c:%02x", []byte(a[:2]), a.Kind(), a.Value()) case 'B': var buf bytes.Buffer fmt.Fprintf(&buf, "%s:%c:%c", []byte(a[:2]), a.Kind(), a[3]) rv := reflect.ValueOf(a.Value()) for i := 0; i < rv.Len(); i++ { fmt.Fprintf(&buf, ",%v", rv.Index(i).Interface()) } return buf.String() } return fmt.Sprintf("%s:%c:%v", []byte(a[:2]), a.Kind(), a.Value()) } // A Tag represents an auxiliary tag label. type Tag [2]byte var ( headerTag = Tag{'H', 'D'} versionTag = Tag{'V', 'N'} sortOrderTag = Tag{'S', 'O'} groupOrderTag = Tag{'G', 'O'} refDictTag = Tag{'S', 'Q'} refNameTag = Tag{'S', 'N'} refLengthTag = Tag{'L', 'N'} assemblyIDTag = Tag{'A', 'S'} md5Tag = Tag{'M', '5'} speciesTag = Tag{'S', 'P'} uriTag = Tag{'U', 'R'} readGroupTag = Tag{'R', 'G'} centerTag = Tag{'C', 'N'} descriptionTag = Tag{'D', 'S'} dateTag = Tag{'D', 'T'} flowOrderTag = Tag{'F', 'O'} keySequenceTag = Tag{'K', 'S'} libraryTag = Tag{'L', 'B'} insertSizeTag = Tag{'P', 'I'} platformTag = Tag{'P', 'L'} platformUnitTag = Tag{'P', 'U'} sampleTag = Tag{'S', 'M'} programTag = Tag{'P', 'G'} idTag = Tag{'I', 'D'} programNameTag = Tag{'P', 'N'} commandLineTag = Tag{'C', 'L'} previousProgTag = Tag{'P', 'P'} commentTag = Tag{'C', 'O'} ) // NewTag returns a Tag from the tag string. It panics is len(tag) != 2. func NewTag(tag string) Tag { var t Tag if copy(t[:], tag) != 2 { panic("sam: illegal tag length") } return t } // String returns a string representation of a Tag. func (t Tag) String() string { return string(t[:]) } // Tag returns the Tag representation of the Aux tag ID. func (a Aux) Tag() Tag { var t Tag; copy(t[:], a[:2]); return t } // Type returns a byte corresponding to the type of the auxiliary tag. // Returned values are in {'A', 'c', 'C', 's', 'S', 'i', 'I', 'f', 'Z', 'H', 'B'}. func (a Aux) Type() byte { return a[2] } // Kind returns a byte corresponding to the kind of the auxiliary tag. // Returned values are in {'A', 'i', 'f', 'Z', 'H', 'B'}. func (a Aux) Kind() byte { return auxKind[a[2]] } // Value returns v containing the value of the auxiliary tag. func (a Aux) Value() interface{} { switch t := a.Type(); t { case 'A': return a[3] case 'c': return int8(a[3]) case 'C': return uint8(a[3]) case 's': return int16(binary.LittleEndian.Uint16(a[3:5])) case 'S': return binary.LittleEndian.Uint16(a[3:5]) case 'i': return int32(binary.LittleEndian.Uint32(a[3:7])) case 'I': return binary.LittleEndian.Uint32(a[3:7]) case 'f': return math.Float32frombits(binary.LittleEndian.Uint32(a[3:7])) case 'Z': // Z and H Require that parsing stops before the terminating zero. return string(a[3:]) case 'H': return []byte(a[3:]) case 'B': length := int32(binary.LittleEndian.Uint32(a[4:8])) switch t := a[3]; t { case 'c': c := a[8:] return *(*[]int8)(unsafe.Pointer(&c)) case 'C': return []uint8(a[8:]) case 's': Bs := make([]int16, length) err := binary.Read(bytes.NewBuffer(a[8:]), binary.LittleEndian, &Bs) if err != nil { panic(fmt.Sprintf("sam: binary.Read of s field failed: %v", err)) } return Bs case 'S': BS := make([]uint16, length) err := binary.Read(bytes.NewBuffer(a[8:]), binary.LittleEndian, &BS) if err != nil { panic(fmt.Sprintf("sam: binary.Read of S field failed: %v", err)) } return BS case 'i': Bi := make([]int32, length) err := binary.Read(bytes.NewBuffer(a[8:]), binary.LittleEndian, &Bi) if err != nil { panic(fmt.Sprintf("sam: binary.Read of i field failed: %v", err)) } return Bi case 'I': BI := make([]uint32, length) err := binary.Read(bytes.NewBuffer(a[8:]), binary.LittleEndian, &BI) if err != nil { panic(fmt.Sprintf("sam: binary.Read of I field failed: %v", err)) } return BI case 'f': Bf := make([]float32, length) err := binary.Read(bytes.NewBuffer(a[8:]), binary.LittleEndian, &Bf) if err != nil { panic(fmt.Sprintf("sam: binary.Read of f field failed: %v", err)) } return Bf default: return fmt.Errorf("%!(UNKNOWN ARRAY type=%c)", t) } default: return fmt.Errorf("%!(UNKNOWN type=%c)", t) } } func (a Aux) matches(tag []byte) bool { return a[1] == tag[1] && a[0] == tag[0] } // AuxFields is a set of auxiliary fields. type AuxFields []Aux // Get returns the auxiliary field identified by the given tag, or nil // if no field matches. func (a AuxFields) Get(tag Tag) Aux { for _, f := range a { if f.Tag() == tag { return f } } return nil } hts-1.0.1/sam/cigar.go000066400000000000000000000202221304417722000145010ustar00rootroot00000000000000// Copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sam import ( "bytes" "fmt" ) // Cigar is a set of CIGAR operations. type Cigar []CigarOp // IsValid returns whether the CIGAR string is valid for a record of the given // sequence length. Validity is defined by the sum of query consuming operations // matching the given length, clipping operations only being present at the ends // of alignments, and that CigarBack operations only result in query-consuming // positions at or right of the start of the alignment. func (c Cigar) IsValid(length int) bool { var pos int for i, co := range c { ct := co.Type() if ct == CigarHardClipped && i != 0 && i != len(c)-1 { return false } if ct == CigarSoftClipped && i != 0 && i != len(c)-1 { if c[i-1].Type() != CigarHardClipped && c[i+1].Type() != CigarHardClipped { return false } } con := ct.Consumes() if pos < 0 && con.Query != 0 { return false } length -= co.Len() * con.Query pos += co.Len() * con.Reference } return length == 0 } // String returns the CIGAR string for c. func (c Cigar) String() string { if len(c) == 0 { return "*" } var b bytes.Buffer for _, co := range c { fmt.Fprint(&b, co) } return b.String() } // Lengths returns the number of reference and read bases described by the Cigar. func (c Cigar) Lengths() (ref, read int) { var con Consume for _, co := range c { con = co.Type().Consumes() if co.Type() != CigarBack { ref += co.Len() * con.Reference } read += co.Len() * con.Query } return ref, read } // CigarOp is a single CIGAR operation including the operation type and the // length of the operation. type CigarOp uint32 // NewCigarOp returns a CIGAR operation of the specified type with length n. func NewCigarOp(t CigarOpType, n int) CigarOp { return CigarOp(t) | (CigarOp(n) << 4) } // Type returns the type of the CIGAR operation for the CigarOp. func (co CigarOp) Type() CigarOpType { return CigarOpType(co & 0xf) } // Len returns the number of positions affected by the CigarOp CIGAR operation. func (co CigarOp) Len() int { return int(co >> 4) } // String returns the string representation of the CigarOp func (co CigarOp) String() string { return fmt.Sprintf("%d%s", co.Len(), co.Type().String()) } // A CigarOpType represents the type of operation described by a CigarOp. type CigarOpType byte const ( CigarMatch CigarOpType = iota // Alignment match (can be a sequence match or mismatch). CigarInsertion // Insertion to the reference. CigarDeletion // Deletion from the reference. CigarSkipped // Skipped region from the reference. CigarSoftClipped // Soft clipping (clipped sequences present in SEQ). CigarHardClipped // Hard clipping (clipped sequences NOT present in SEQ). CigarPadded // Padding (silent deletion from padded reference). CigarEqual // Sequence match. CigarMismatch // Sequence mismatch. CigarBack // Skip backwards. lastCigar ) var cigarOps = []string{"M", "I", "D", "N", "S", "H", "P", "=", "X", "B", "?"} // Consumes returns the CIGAR operation alignment consumption characteristics for the CigarOpType. // // The Consume values for each of the CigarOpTypes is as follows: // // Query Reference // CigarMatch 1 1 // CigarInsertion 1 0 // CigarDeletion 0 1 // CigarSkipped 0 1 // CigarSoftClipped 1 0 // CigarHardClipped 0 0 // CigarPadded 0 0 // CigarEqual 1 1 // CigarMismatch 1 1 // CigarBack 0 -1 // func (ct CigarOpType) Consumes() Consume { return consume[ct] } // String returns the string representation of a CigarOpType. func (ct CigarOpType) String() string { if ct < 0 || ct > lastCigar { ct = lastCigar } return cigarOps[ct] } // Consume describes how CIGAR operations consume alignment bases. type Consume struct { Query, Reference int } // A few years ago, Complete Genomics (CG) proposed to add a new CIGAR // operator 'B' for an operation of moving backward along the reference // genome. It is the opposite of the 'N', the reference skip. In a later // discussion on a separate issue, Fred expressed his preference to a // negative reference skip which is equivalent to a positive 'B' operation. // Now the SRA group from NCBI intends to archive the CG alignment in // the SAM format and raises this request again. I think it may be the // time to add this backward operation. // // The backward operation is designed to describe such an alignment: // // REF:: GCATACGATCGACTAGTCACGT // READ: --ATACGATCGA---------- // READ: ---------CGACTAGTCAC-- // // i.e. there is an overlap between two segments of a read, which is quite // frequent in CG data. We are unable to fully describe such an alignment // with the original CIGAR. In the current spec, we suggest using a CIGAR // 18M and storing the overlap information in optional tags. This is a // little clumsy and is not compressed well for the purpose of archiving. // With 'B', the new CIGAR is "10M3B11M" with no other optional tags. // // Using "B" in this case is cleaner, but the major concern is that it breaks // the compatibility and is also likely to complicate SNP calling and many // other applications. As I think now, the solution is to implement a // "remove_B()" routine in samtools. This routine collapses overlapping // sequences, recalculates base quality in the overlap and gives a CIGAR // without 'B'. For the example above, remove_B() gives CIGAR 18M. For SNP // calling, we may call remove_B() immediately after the alignment loaded // into memory. The downstream pileup engine does not need any changes. Other // SNP callers can do the same. A new option will be added to "samtools view" // as a way to remove 'B' operations on the command-line. // // The implementation of remove_B() may be quite complicated in the generic // case - we may be dealing with a multiple-sequence alignment, but it should // be straightforward in the simple cases such as the example above. Users may // not need to care too much about how remove_B() is implemented. // // http://sourceforge.net/p/samtools/mailman/message/28463294/ var consume = []Consume{ CigarMatch: {Query: 1, Reference: 1}, CigarInsertion: {Query: 1, Reference: 0}, CigarDeletion: {Query: 0, Reference: 1}, CigarSkipped: {Query: 0, Reference: 1}, CigarSoftClipped: {Query: 1, Reference: 0}, CigarHardClipped: {Query: 0, Reference: 0}, CigarPadded: {Query: 0, Reference: 0}, CigarEqual: {Query: 1, Reference: 1}, CigarMismatch: {Query: 1, Reference: 1}, CigarBack: {Query: 0, Reference: -1}, // See notes above. lastCigar: {}, } var cigarOpTypeLookup [256]CigarOpType func init() { for i := range cigarOpTypeLookup { cigarOpTypeLookup[i] = lastCigar } for op, c := range []byte{'M', 'I', 'D', 'N', 'S', 'H', 'P', '=', 'X', 'B'} { cigarOpTypeLookup[c] = CigarOpType(op) } } var powers = []int{1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8} // atoi returns the integer interpretation of b which must be an ASCII decimal number representation. func atoi(b []byte, i int) (int, error) { n := 0 k := len(b) - 1 for i, v := range b { n += int(v-'0') * powers[k-i] } if n < 0 || 1<<28 <= n { return n, fmt.Errorf("sam: invalid cigar operation count: %q at %d", b, i) } return n, nil } // ParseCigar returns a Cigar parsed from the provided byte slice. func ParseCigar(b []byte) (Cigar, error) { if len(b) == 1 && b[0] == '*' { return nil, nil } var ( c Cigar op CigarOpType n int err error ) for i := 0; i < len(b); i++ { for j := i; j < len(b); j++ { if b[j] < '0' || '9' < b[j] { n, err = atoi(b[i:j], i) if err != nil { return nil, err } op = cigarOpTypeLookup[b[j]] i = j break } } if op == lastCigar { return nil, fmt.Errorf("sam: failed to parse cigar string %q: unknown operation %q", b, op) } c = append(c, NewCigarOp(op, n)) } return c, nil } hts-1.0.1/sam/flag.go000066400000000000000000000037221304417722000143330ustar00rootroot00000000000000// Copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sam // A Flags represents a BAM record's alignment FLAG field. type Flags uint16 const ( Paired Flags = 1 << iota // The read is paired in sequencing, no matter whether it is mapped in a pair. ProperPair // The read is mapped in a proper pair. Unmapped // The read itself is unmapped; conflictive with ProperPair. MateUnmapped // The mate is unmapped. Reverse // The read is mapped to the reverse strand. MateReverse // The mate is mapped to the reverse strand. Read1 // This is read1. Read2 // This is read2. Secondary // Not primary alignment. QCFail // QC failure. Duplicate // Optical or PCR duplicate. Supplementary // Supplementary alignment, indicates alignment is part of a chimeric alignment. ) // String representation of BAM alignment flags: // 0x001 - p - Paired // 0x002 - P - ProperPair // 0x004 - u - Unmapped // 0x008 - U - MateUnmapped // 0x010 - r - Reverse // 0x020 - R - MateReverse // 0x040 - 1 - Read1 // 0x080 - 2 - Read2 // 0x100 - s - Secondary // 0x200 - f - QCFail // 0x400 - d - Duplicate // 0x800 - S - Supplementary // // Note that flag bits are represented high order to the right. func (f Flags) String() string { // If 0x01 is unset, no assumptions can be made about 0x02, 0x08, 0x20, 0x40 and 0x80 const pairedMask = ProperPair | MateUnmapped | MateReverse | MateReverse | Read1 | Read2 if f&1 == 0 { f &^= pairedMask } const flags = "pPuUrR12sfdS" b := make([]byte, len(flags)) for i, c := range flags { if f&(1< Coordinate { return sortOrder[UnknownOrder] } return sortOrder[so] } // GroupOrder indicates the grouping order of a SAM or BAM file. type GroupOrder int const ( GroupUnspecified GroupOrder = iota GroupNone GroupQuery GroupReference ) var ( groupOrder = [...]string{ GroupUnspecified: "none", GroupNone: "none", GroupQuery: "query", GroupReference: "reference", } groupOrderMap = map[string]GroupOrder{ "none": GroupNone, "query": GroupQuery, "reference": GroupReference, } ) // String returns the string representation of a GroupOrder. func (g GroupOrder) String() string { if g < GroupNone || g > GroupReference { return groupOrder[GroupUnspecified] } return groupOrder[g] } type set map[string]int32 // Header is a SAM or BAM header. type Header struct { Version string SortOrder SortOrder GroupOrder GroupOrder otherTags []tagPair refs []*Reference rgs []*ReadGroup progs []*Program seenRefs set seenGroups set seenProgs set Comments []string } type tagPair struct { tag Tag value string } // NewHeader returns a new Header based on the given text and list // of References. If there is a conflict between the text and the // given References NewHeader will return a non-nil error. func NewHeader(text []byte, r []*Reference) (*Header, error) { var err error bh := &Header{ refs: r, seenRefs: set{}, seenGroups: set{}, seenProgs: set{}, } for i, r := range bh.refs { r.id = int32(i) } if text != nil { err = bh.UnmarshalText(text) if err != nil { return nil, err } } return bh, nil } // Get returns the string representation of the value associated with the // given header line tag. If the tag is not present the empty string is returned. func (bh *Header) Get(t Tag) string { switch t { case versionTag: return bh.Version case sortOrderTag: return bh.SortOrder.String() case groupOrderTag: return bh.GroupOrder.String() } for _, tp := range bh.otherTags { if t == tp.tag { return tp.value } } return "" } // Set sets the value associated with the given header line tag to the specified // value. If value is the empty string and the tag may be absent, it is deleted // or set to a meaningful default (SO:UnknownOrder and GO:GroupUnspecified), // otherwise an error is returned. func (bh *Header) Set(t Tag, value string) error { switch t { case versionTag: if value == "" { return errBadHeader } bh.Version = value case sortOrderTag: if value == "" { bh.SortOrder = UnknownOrder return nil } sortOrder, ok := sortOrderMap[value] if !ok { return errBadHeader } bh.SortOrder = sortOrder case groupOrderTag: if value == "" { bh.GroupOrder = GroupUnspecified return nil } groupOrder, ok := groupOrderMap[value] if !ok { return errBadHeader } bh.GroupOrder = groupOrder default: if value == "" { for i, tp := range bh.otherTags { if t == tp.tag { copy(bh.otherTags[i:], bh.otherTags[i+1:]) bh.otherTags = bh.otherTags[:len(bh.otherTags)-1] return nil } } } else { for i, tp := range bh.otherTags { if t == tp.tag { bh.otherTags[i].value = value return nil } } bh.otherTags = append(bh.otherTags, tagPair{tag: t, value: value}) } } return nil } // Clone returns a deep copy of the receiver. func (bh *Header) Clone() *Header { c := &Header{ Version: bh.Version, SortOrder: bh.SortOrder, GroupOrder: bh.GroupOrder, otherTags: append([]tagPair(nil), bh.otherTags...), Comments: append([]string(nil), bh.Comments...), refs: make([]*Reference, len(bh.refs)), rgs: make([]*ReadGroup, len(bh.rgs)), progs: make([]*Program, len(bh.progs)), seenRefs: make(set, len(bh.seenRefs)), seenGroups: make(set, len(bh.seenGroups)), seenProgs: make(set, len(bh.seenProgs)), } for i, r := range bh.refs { if r == nil { continue } c.refs[i] = new(Reference) *c.refs[i] = *r } for i, r := range bh.rgs { c.rgs[i] = new(ReadGroup) *c.rgs[i] = *r } for i, p := range bh.progs { c.progs[i] = new(Program) *c.progs[i] = *p } for k, v := range bh.seenRefs { c.seenRefs[k] = v } for k, v := range bh.seenGroups { c.seenGroups[k] = v } for k, v := range bh.seenProgs { c.seenProgs[k] = v } return c } // MarshalText implements the encoding.TextMarshaler interface. func (bh *Header) MarshalText() ([]byte, error) { var buf bytes.Buffer if bh.Version != "" { if bh.GroupOrder == GroupUnspecified { fmt.Fprintf(&buf, "@HD\tVN:%s\tSO:%s", bh.Version, bh.SortOrder) } else { fmt.Fprintf(&buf, "@HD\tVN:%s\tSO:%s\tGO:%s", bh.Version, bh.SortOrder, bh.GroupOrder) } for _, tp := range bh.otherTags { fmt.Fprintf(&buf, "\t%s:%s", tp.tag, tp.value) } buf.WriteByte('\n') } for _, r := range bh.refs { fmt.Fprintf(&buf, "%s\n", r) } for _, rg := range bh.rgs { fmt.Fprintf(&buf, "%s\n", rg) } for _, p := range bh.progs { fmt.Fprintf(&buf, "%s\n", p) } for _, co := range bh.Comments { fmt.Fprintf(&buf, "@CO\t%s\n", co) } return buf.Bytes(), nil } // MarshalBinary implements the encoding.BinaryMarshaler. func (bh *Header) MarshalBinary() ([]byte, error) { b := &bytes.Buffer{} err := bh.EncodeBinary(b) if err != nil { return nil, err } return b.Bytes(), nil } // EncodeBinary writes a binary encoding of the Header to the given io.Writer. // The format of the encoding is defined in the SAM specification, section 4.2. func (bh *Header) EncodeBinary(w io.Writer) error { wb := &errWriter{w: w} binary.Write(wb, binary.LittleEndian, bamMagic) text, _ := bh.MarshalText() binary.Write(wb, binary.LittleEndian, int32(len(text))) wb.Write(text) binary.Write(wb, binary.LittleEndian, int32(len(bh.refs))) if !validInt32(len(bh.refs)) { return errors.New("sam: value out of range") } var name []byte for _, r := range bh.refs { name = append(name, []byte(r.name)...) name = append(name, 0) binary.Write(wb, binary.LittleEndian, int32(len(name))) wb.Write(name) name = name[:0] binary.Write(wb, binary.LittleEndian, r.lRef) } if wb.err != nil { return wb.err } return nil } type errWriter struct { w io.Writer err error } func (w *errWriter) Write(p []byte) (int, error) { if w.err != nil { return 0, w.err } var n int n, w.err = w.w.Write(p) return n, w.err } // Validate checks r against the Header for record validity according to the // SAM specification: // // - a program auxiliary field must refer to a program listed in the header // - a read group auxiliary field must refer to a read group listed in the // header and these must agree on platform unit and library. func (bh *Header) Validate(r *Record) error { rp := r.AuxFields.Get(programTag) found := false for _, hp := range bh.Progs() { if hp.UID() == rp.Value() { found = true break } } if !found && len(bh.Progs()) != 0 { return fmt.Errorf("sam: program uid not found: %v", rp.Value()) } rg := r.AuxFields.Get(readGroupTag) found = false for _, hg := range bh.RGs() { if hg.Name() == rg.Value() { rPlatformUnit := r.AuxFields.Get(platformUnitTag).Value() if rPlatformUnit != hg.PlatformUnit() { return fmt.Errorf("sam: mismatched platform for read group %s: %v != %v: %v", hg.Name(), rPlatformUnit, hg.platformUnit) } rLibrary := r.AuxFields.Get(libraryTag).Value() if rLibrary != hg.Library() { return fmt.Errorf("sam: mismatched library for read group %s: %v != %v: %v", hg.Name(), rLibrary, hg.library) } found = true break } } if !found && len(bh.RGs()) != 0 { return fmt.Errorf("sam: read group not found: %v", rg.Value()) } return nil } // Refs returns the Header's list of References. The returned slice // should not be altered. func (bh *Header) Refs() []*Reference { return bh.refs } // RGs returns the Header's list of ReadGroups. The returned slice // should not be altered. func (bh *Header) RGs() []*ReadGroup { return bh.rgs } // Progs returns the Header's list of Programs. The returned slice // should not be altered. func (bh *Header) Progs() []*Program { return bh.progs } // AddReference adds r to the Header. func (bh *Header) AddReference(r *Reference) error { if dupID, dup := bh.seenRefs[r.name]; dup { er := bh.refs[dupID] if equalRefs(er, r) { return nil } else if !equalRefs(r, &Reference{id: er.id, name: er.name, lRef: er.lRef}) { return errDupReference } if r.md5 == "" { r.md5 = er.md5 } if r.assemID == "" { r.assemID = er.assemID } if r.species == "" { r.species = er.species } if r.uri == nil { r.uri = er.uri } bh.refs[dupID] = r return nil } if r.id >= 0 { return errUsedReference } r.id = int32(len(bh.refs)) bh.seenRefs[r.name] = r.id bh.refs = append(bh.refs, r) return nil } // AddReadGroup adds rg to the Header. func (bh *Header) AddReadGroup(rg *ReadGroup) error { if _, ok := bh.seenGroups[rg.name]; ok { return errDupReadGroup } if rg.id >= 0 { return errUsedReadGroup } rg.id = int32(len(bh.rgs)) bh.seenGroups[rg.name] = rg.id bh.rgs = append(bh.rgs, rg) return nil } // AddProgram adds p to the Header. func (bh *Header) AddProgram(p *Program) error { if _, ok := bh.seenProgs[p.uid]; ok { return errDupProgram } if p.id >= 0 { return errUsedProgram } p.id = int32(len(bh.progs)) bh.seenProgs[p.uid] = p.id bh.progs = append(bh.progs, p) return nil } hts-1.0.1/sam/overlap_example_test.go000066400000000000000000000067371304417722000176550ustar00rootroot00000000000000// Copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sam_test import ( "fmt" "github.com/biogo/hts/sam" ) func min(a, b int) int { if a > b { return b } return a } func max(a, b int) int { if a < b { return b } return a } // Overlap returns the length of the overlap between the alignment // of the SAM record and the interval specified. // // Note that this will count repeated matches to the same reference // location if CigarBack operations are used. func Overlap(r *sam.Record, start, end int) int { var overlap int pos := r.Pos for _, co := range r.Cigar { t := co.Type() con := t.Consumes() lr := co.Len() * con.Reference if con.Query == con.Reference { o := min(pos+lr, end) - max(pos, start) if o > 0 { overlap += o } } pos += lr } return overlap } func ExampleConsume() { // Example alignments from the SAM specification: // // @HD VN:1.5 SO:coordinate // @SQ SN:ref LN:45 // @CO -------------------------------------------------------- // @CO Coor 12345678901234 5678901234567890123456789012345 // @CO ref AGCATGTTAGATAA**GATAGCTGTGCTAGTAGGCAGTCAGCGCCAT // @CO -------------------------------------------------------- // @CO +r001/1 TTAGATAAAGGATA*CTG // @CO +r002 aaaAGATAA*GGATA // @CO +r003 gcctaAGCTAA // @CO +r004 ATAGCT..............TCAGC // @CO -r003 ttagctTAGGC // @CO -r001/2 CAGCGGCAT // @CO -------------------------------------------------------- // r001 99 ref 7 30 8M2I4M1D3M = 37 39 TTAGATAAAGGATACTG * // r002 0 ref 9 30 3S6M1P1I4M * 0 0 AAAAGATAAGGATA * // r003 0 ref 9 30 5S6M * 0 0 GCCTAAGCTAA * SA:Z:ref,29,-,6H5M,17,0; // r004 0 ref 16 30 6M14N5M * 0 0 ATAGCTTCAGC * // r003 2064 ref 29 17 6H5M * 0 0 TAGGC * SA:Z:ref,9,+,5S6M,30,1; // r001 147 ref 37 30 9M = 7 -39 CAGCGGCAT * NM:i:1 const ( refStart = 0 refEnd = 45 ) records := []*sam.Record{ {Name: "r001/1", Pos: 6, Cigar: []sam.CigarOp{ sam.NewCigarOp(sam.CigarMatch, 8), sam.NewCigarOp(sam.CigarInsertion, 2), sam.NewCigarOp(sam.CigarMatch, 4), sam.NewCigarOp(sam.CigarDeletion, 1), sam.NewCigarOp(sam.CigarMatch, 3), }}, {Name: "r002", Pos: 8, Cigar: []sam.CigarOp{ sam.NewCigarOp(sam.CigarSoftClipped, 3), sam.NewCigarOp(sam.CigarMatch, 6), sam.NewCigarOp(sam.CigarPadded, 1), sam.NewCigarOp(sam.CigarInsertion, 1), sam.NewCigarOp(sam.CigarMatch, 4), }}, {Name: "r003", Pos: 8, Cigar: []sam.CigarOp{ sam.NewCigarOp(sam.CigarSoftClipped, 5), sam.NewCigarOp(sam.CigarMatch, 6), }}, {Name: "r004", Pos: 15, Cigar: []sam.CigarOp{ sam.NewCigarOp(sam.CigarMatch, 6), sam.NewCigarOp(sam.CigarSkipped, 14), sam.NewCigarOp(sam.CigarMatch, 5), }}, {Name: "r003", Pos: 28, Cigar: []sam.CigarOp{ sam.NewCigarOp(sam.CigarHardClipped, 6), sam.NewCigarOp(sam.CigarMatch, 5), }}, {Name: "r001/2", Pos: 36, Cigar: []sam.CigarOp{ sam.NewCigarOp(sam.CigarMatch, 9), }}, } for _, r := range records { fmt.Printf("%q overlaps reference by %d letters\n", r.Name, Overlap(r, refStart, refEnd)) } // Output: // // "r001/1" overlaps reference by 15 letters // "r002" overlaps reference by 10 letters // "r003" overlaps reference by 6 letters // "r004" overlaps reference by 11 letters // "r003" overlaps reference by 5 letters // "r001/2" overlaps reference by 9 letters } hts-1.0.1/sam/parse_header.go000066400000000000000000000203341304417722000160420ustar00rootroot00000000000000// Copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sam import ( "bytes" "encoding/binary" "encoding/hex" "errors" "fmt" "io" "net/url" "strconv" "time" ) var ( errBadHeader = errors.New("sam: malformed header line") errDupTag = errors.New("sam: duplicate field") ) var bamMagic = [4]byte{'B', 'A', 'M', 0x1} // UnmarshalBinary implements the encoding.BinaryUnmarshaler interface. func (bh *Header) UnmarshalBinary(b []byte) error { return bh.DecodeBinary(bytes.NewReader(b)) } // DecodeBinary unmarshals a Header from the given io.Reader. The byte // stream must be in the format described in the SAM specification, // section 4.2. func (bh *Header) DecodeBinary(r io.Reader) error { var ( lText, nRef int32 err error ) var magic [4]byte err = binary.Read(r, binary.LittleEndian, &magic) if err != nil { return err } if magic != bamMagic { return errors.New("sam: magic number mismatch") } err = binary.Read(r, binary.LittleEndian, &lText) if err != nil { return err } text := make([]byte, lText) n, err := r.Read(text) if err != nil { return err } if n != int(lText) { return errors.New("sam: truncated header") } err = bh.UnmarshalText(text) if err != nil { return err } err = binary.Read(r, binary.LittleEndian, &nRef) if err != nil { return err } refs, err := readRefRecords(r, nRef) if err != nil { return err } for _, r := range refs { err = bh.AddReference(r) if err != nil { return err } } return nil } func readRefRecords(r io.Reader, n int32) ([]*Reference, error) { rr := make([]*Reference, n) var ( lName int32 err error ) for i := range rr { rr[i] = &Reference{id: int32(i)} err = binary.Read(r, binary.LittleEndian, &lName) if err != nil { return nil, err } name := make([]byte, lName) n, err := r.Read(name) if err != nil { return nil, err } if n != int(lName) || name[n-1] != 0 { return nil, errors.New("sam: truncated reference name") } rr[i].name = string(name[:n-1]) err = binary.Read(r, binary.LittleEndian, &rr[i].lRef) if err != nil { return nil, err } } return rr, nil } // UnmarshalText implements the encoding.TextUnmarshaler interface. func (bh *Header) UnmarshalText(text []byte) error { var t Tag for i, l := range bytes.Split(text, []byte{'\n'}) { if len(l) > 0 && l[len(l)-1] == '\r' { l = l[:len(l)-1] } if len(l) == 0 { continue } if l[0] != '@' || len(l) < 3 { return errBadHeader } copy(t[:], l[1:3]) var err error switch t { case headerTag: err = headerLine(l, bh) case refDictTag: err = referenceLine(l, bh) case readGroupTag: err = readGroupLine(l, bh) case programTag: err = programLine(l, bh) case commentTag: err = commentLine(l, bh) default: return errBadHeader } if err != nil { return fmt.Errorf("%v: line %d: %q", err, i+1, l) } } return nil } func headerLine(l []byte, bh *Header) error { fields := bytes.Split(l, []byte{'\t'}) if len(fields) < 2 { return errBadHeader } var t Tag for _, f := range fields[1:] { if f[2] != ':' { return errBadHeader } copy(t[:], f[:2]) fs := string(f[3:]) switch t { case versionTag: if bh.Version != "" { return errBadHeader } bh.Version = fs case sortOrderTag: if bh.SortOrder != UnknownOrder { return errBadHeader } bh.SortOrder = sortOrderMap[fs] case groupOrderTag: if bh.GroupOrder != GroupUnspecified { return errBadHeader } bh.GroupOrder = groupOrderMap[fs] default: bh.otherTags = append(bh.otherTags, tagPair{tag: t, value: fs}) } } if bh.Version == "" { return errBadHeader } return nil } func referenceLine(l []byte, bh *Header) error { fields := bytes.Split(l, []byte{'\t'}) if len(fields) < 3 { return errBadHeader } var ( t Tag rf = &Reference{} seen = map[Tag]struct{}{} nok, lok bool dupID int32 dup bool ) for _, f := range fields[1:] { if f[2] != ':' { return errBadHeader } copy(t[:], f[:2]) if _, ok := seen[t]; ok { return errDupTag } seen[t] = struct{}{} fs := string(f[3:]) switch t { case refNameTag: dupID, dup = bh.seenRefs[fs] rf.name = fs nok = true case refLengthTag: l, err := strconv.Atoi(fs) if err != nil { return errBadHeader } if !validLen(l) { return errBadLen } rf.lRef = int32(l) lok = true case assemblyIDTag: rf.assemID = fs case md5Tag: hb := [16]byte{} n, err := hex.Decode(hb[:], f[3:]) if err != nil { return err } if n != 16 { return errBadHeader } rf.md5 = string(hb[:]) case speciesTag: rf.species = fs case uriTag: var err error rf.uri, err = url.Parse(fs) if err != nil { return err } if rf.uri.Scheme != "http" && rf.uri.Scheme != "ftp" { rf.uri.Scheme = "file" } default: rf.otherTags = append(rf.otherTags, tagPair{tag: t, value: fs}) } } if dup { if er := bh.refs[dupID]; equalRefs(er, rf) { return nil } else if !equalRefs(er, &Reference{id: er.id, name: er.name, lRef: er.lRef}) { return errDupReference } bh.refs[dupID] = rf return nil } if !nok || !lok { return errBadHeader } id := int32(len(bh.refs)) rf.id = id bh.seenRefs[rf.name] = id bh.refs = append(bh.refs, rf) return nil } // http://en.wikipedia.org/wiki/ISO_8601 // // Date: 2014-08-13 // Time: 2014-08-13T16:02:01Z // : 2014-08-13T16:02:01+00:00 // const ( iso8601Date = "2006-01-02" iso8601TimeDateZ = "2006-01-02T15:04:05Z" iso8601TimeDateN = "2006-01-02T15:04:05-0700" ) var iso8601 = []string{iso8601Date, iso8601TimeDateZ, iso8601TimeDateN} func readGroupLine(l []byte, bh *Header) error { fields := bytes.Split(l, []byte{'\t'}) if len(fields) < 2 { return errBadHeader } var ( t Tag rg = &ReadGroup{} seen = map[Tag]struct{}{} idok bool ) L: for _, f := range fields[1:] { if f[2] != ':' { return errBadHeader } copy(t[:], f[:2]) if _, ok := seen[t]; ok { return errDupTag } seen[t] = struct{}{} fs := string(f[3:]) switch t { case idTag: if _, ok := bh.seenGroups[fs]; ok { return errDupReadGroup } rg.name = fs idok = true case centerTag: rg.center = fs case descriptionTag: rg.description = fs case dateTag: var err error for _, tf := range iso8601 { rg.date, err = time.ParseInLocation(tf, fs, nil) if err == nil { continue L } } return err case flowOrderTag: rg.flowOrder = fs case keySequenceTag: rg.keySeq = fs case libraryTag: rg.library = fs case programTag: rg.program = fs case insertSizeTag: i, err := strconv.Atoi(fs) if err != nil { return err } if !validInt32(i) { return errBadLen } rg.insertSize = i case platformTag: rg.platform = fs case platformUnitTag: rg.platformUnit = fs case sampleTag: rg.sample = fs default: rg.otherTags = append(rg.otherTags, tagPair{tag: t, value: fs}) } } if !idok { return errBadHeader } id := int32(len(bh.rgs)) rg.id = id bh.seenGroups[rg.name] = id bh.rgs = append(bh.rgs, rg) return nil } func programLine(l []byte, bh *Header) error { fields := bytes.Split(l, []byte{'\t'}) if len(fields) < 2 { return errBadHeader } var ( t Tag p = &Program{} seen = map[Tag]struct{}{} idok bool ) for _, f := range fields[1:] { if f[2] != ':' { return errBadHeader } copy(t[:], f[:2]) if _, ok := seen[t]; ok { return errDupTag } seen[t] = struct{}{} fs := string(f[3:]) switch t { case idTag: if _, ok := bh.seenProgs[fs]; ok { return errDupProgram } p.uid = fs idok = true case programNameTag: p.name = fs case commandLineTag: p.command = fs case previousProgTag: p.previous = fs case versionTag: p.version = fs default: p.otherTags = append(p.otherTags, tagPair{tag: t, value: fs}) } } if !idok { return errBadHeader } id := int32(len(bh.progs)) p.id = id bh.seenProgs[p.uid] = id bh.progs = append(bh.progs, p) return nil } func commentLine(l []byte, bh *Header) error { fields := bytes.Split(l, []byte{'\t'}) if len(fields) < 2 { return errBadHeader } bh.Comments = append(bh.Comments, string(fields[1])) return nil } hts-1.0.1/sam/program.go000066400000000000000000000072071304417722000150730ustar00rootroot00000000000000// Copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sam import ( "bytes" "fmt" ) // Program represents a SAM program. type Program struct { id int32 uid string previous string name string command string version string otherTags []tagPair } // NewProgram returns a Program with the given unique ID, name, command, // previous program ID in the pipeline and version. func NewProgram(uid, name, command, prev, v string) *Program { return &Program{ id: -1, uid: uid, previous: prev, name: name, command: command, version: v, } } // ID returns the header ID for the Program. func (p *Program) ID() int { if p == nil { return -1 } return int(p.id) } // UID returns the unique program ID for the program. func (p *Program) UID() string { if p == nil { return "" } return p.uid } // Name returns the program's name. func (p *Program) Name() string { if p == nil { return "" } return p.name } // Command returns the program's command line. func (p *Program) Command() string { if p == nil { return "" } return p.command } // Previous returns the unique ID for the previous program in the pipeline. func (p *Program) Previous() string { if p == nil { return "" } return p.previous } // Version returns the version of the program. func (p *Program) Version() string { if p == nil { return "" } return p.version } // Clone returns a deep copy of the Program. func (p *Program) Clone() *Program { if p == nil { return nil } cp := *p cp.otherTags = make([]tagPair, len(cp.otherTags)) copy(cp.otherTags, p.otherTags) cp.id = -1 return &cp } // Get returns the string representation of the value associated with the // given program line tag. If the tag is not present the empty string is returned. func (p *Program) Get(t Tag) string { switch t { case idTag: return p.UID() case programNameTag: return p.Name() case commandLineTag: return p.Command() case previousProgTag: return p.Previous() case versionTag: return p.Version() } for _, tp := range p.otherTags { if t == tp.tag { return tp.value } } return "" } // Set sets the value associated with the given program line tag to the specified // value. If value is the empty string and the tag may be absent, it is deleted. func (p *Program) Set(t Tag, value string) error { switch t { case idTag: if value == "" { return errDupProgram } case programNameTag: p.name = value case commandLineTag: p.command = value case previousProgTag: p.previous = value case versionTag: p.version = value default: if value == "" { for i, tp := range p.otherTags { if t == tp.tag { copy(p.otherTags[i:], p.otherTags[i+1:]) p.otherTags = p.otherTags[:len(p.otherTags)-1] return nil } } } else { for i, tp := range p.otherTags { if t == tp.tag { p.otherTags[i].value = value return nil } } p.otherTags = append(p.otherTags, tagPair{tag: t, value: value}) } } return nil } // String returns a string representation of the program according to the // SAM specification section 1.3, func (p *Program) String() string { var buf bytes.Buffer fmt.Fprintf(&buf, "@PG\tID:%s", p.uid) if p.name != "" { fmt.Fprintf(&buf, "\tPN:%s", p.name) } if p.command != "" { fmt.Fprintf(&buf, "\tCL:%s", p.command) } if p.previous != "" { fmt.Fprintf(&buf, "\tPP:%s", p.previous) } if p.version != "" { fmt.Fprintf(&buf, "\tVN:%s", p.version) } for _, tp := range p.otherTags { fmt.Fprintf(&buf, "\t%s:%s", tp.tag, tp.value) } return buf.String() } hts-1.0.1/sam/read_group.go000066400000000000000000000133171304417722000155520ustar00rootroot00000000000000// Copyright ©2012 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sam import ( "bytes" "errors" "fmt" "strconv" "time" ) // ReadGroup represents a sequencing read group. type ReadGroup struct { id int32 name string center string description string date time.Time flowOrder string keySeq string library string program string insertSize int platform string platformUnit string sample string otherTags []tagPair } // NewReadGroup returns a ReadGroup with the given name, center, description, // library, program, platform, unique platform unit, sample name, flow order, // key, date of read group production, and predicted median insert size sequence. func NewReadGroup(name, center, desc, lib, prog, plat, unit, sample, flow, key string, date time.Time, size int) (*ReadGroup, error) { if !validInt32(size) { return nil, errors.New("sam: length overflow") } return &ReadGroup{ id: -1, // This is altered by a Header when added. name: name, center: center, description: desc, date: date, flowOrder: flow, keySeq: key, library: lib, program: prog, insertSize: size, platform: plat, platformUnit: unit, sample: sample, }, nil } // ID returns the header ID for the ReadGroup. func (r *ReadGroup) ID() int { if r == nil { return -1 } return int(r.id) } // Name returns the read group's name. func (r *ReadGroup) Name() string { if r == nil { return "*" } return r.name } // Clone returns a deep copy of the ReadGroup. func (r *ReadGroup) Clone() *ReadGroup { if r == nil { return nil } cr := *r cr.otherTags = make([]tagPair, len(cr.otherTags)) copy(cr.otherTags, r.otherTags) cr.id = -1 return &cr } // Library returns the library name for the read group. func (r *ReadGroup) Library() string { return r.library } // PlatformUnit returns the unique platform unit for the read group. func (r *ReadGroup) PlatformUnit() string { return r.platformUnit } // Time returns the time the read group was produced. func (r *ReadGroup) Time() time.Time { return r.date } // Get returns the string representation of the value associated with the // given read group line tag. If the tag is not present the empty string is returned. func (r *ReadGroup) Get(t Tag) string { switch t { case idTag: return r.Name() case centerTag: return r.center case descriptionTag: return r.description case dateTag: return r.date.Format(iso8601TimeDateN) case flowOrderTag: if r.flowOrder == "" { return "*" } return r.flowOrder case keySequenceTag: return r.keySeq case libraryTag: return r.library case programTag: return r.program case insertSizeTag: return fmt.Sprint(r.insertSize) case platformTag: return r.platform case platformUnitTag: return r.platformUnit case sampleTag: return r.sample } for _, tp := range r.otherTags { if t == tp.tag { return tp.value } } return "" } // Set sets the value associated with the given read group line tag to the specified // value. If value is the empty string and the tag may be absent, it is deleted. func (r *ReadGroup) Set(t Tag, value string) error { switch t { case idTag: r.name = value case centerTag: r.center = value case descriptionTag: r.description = value case dateTag: if value == "" { r.date = time.Time{} return nil } var err error for _, tf := range iso8601 { var date time.Time date, err = time.ParseInLocation(tf, value, nil) if err == nil { r.date = date break } } return err case flowOrderTag: if value == "" || value == "*" { r.flowOrder = "" return nil } r.flowOrder = value case keySequenceTag: r.keySeq = value case libraryTag: r.library = value case programTag: r.program = value case insertSizeTag: if value == "" { r.insertSize = 0 return nil } i, err := strconv.Atoi(value) if err != nil { return err } if !validInt32(i) { return errBadLen } r.insertSize = i case platformTag: r.platform = value case platformUnitTag: r.platformUnit = value case sampleTag: r.sample = value default: if value == "" { for i, tp := range r.otherTags { if t == tp.tag { copy(r.otherTags[i:], r.otherTags[i+1:]) r.otherTags = r.otherTags[:len(r.otherTags)-1] return nil } } } else { for i, tp := range r.otherTags { if t == tp.tag { r.otherTags[i].value = value return nil } } r.otherTags = append(r.otherTags, tagPair{tag: t, value: value}) } } return nil } // String returns a string representation of the read group according to the // SAM specification section 1.3, func (r *ReadGroup) String() string { var buf bytes.Buffer fmt.Fprintf(&buf, "@RG\tID:%s", r.name) if r.center != "" { fmt.Fprintf(&buf, "\tCN:%s", r.center) } if r.description != "" { fmt.Fprintf(&buf, "\tDS:%s", r.description) } if (r.date != time.Time{}) { fmt.Fprintf(&buf, "\tDT:%s", r.date.Format(iso8601TimeDateN)) } if r.flowOrder != "" { fmt.Fprintf(&buf, "\tFO:%s", r.flowOrder) } if r.keySeq != "" { fmt.Fprintf(&buf, "\tKS:%s", r.keySeq) } if r.library != "" { fmt.Fprintf(&buf, "\tLB:%s", r.library) } if r.program != "" { fmt.Fprintf(&buf, "\tPG:%s", r.program) } if r.insertSize != 0 { fmt.Fprintf(&buf, "\tPI:%d", r.insertSize) } if r.platform != "" { fmt.Fprintf(&buf, "\tPL:%s", r.platform) } if r.platformUnit != "" { fmt.Fprintf(&buf, "\tPU:%s", r.platformUnit) } if r.sample != "" { fmt.Fprintf(&buf, "\tSM:%s", r.sample) } for _, tp := range r.otherTags { fmt.Fprintf(&buf, "\t%s:%s", tp.tag, tp.value) } return buf.String() } hts-1.0.1/sam/record.go000066400000000000000000000301471304417722000147010ustar00rootroot00000000000000// Copyright ©2012-2013 The bíogo Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package sam import ( "bytes" "errors" "fmt" "strconv" "github.com/biogo/hts/internal" ) // Record represents a SAM/BAM record. type Record struct { Name string Ref *Reference Pos int MapQ byte Cigar Cigar Flags Flags MateRef *Reference MatePos int TempLen int Seq Seq Qual []byte AuxFields AuxFields } // NewRecord returns a Record, checking for consistency of the provided // attributes. func NewRecord(name string, ref, mRef *Reference, p, mPos, tLen int, mapQ byte, co []CigarOp, seq, qual []byte, aux []Aux) (*Record, error) { if !(validPos(p) && validPos(mPos) && validTmpltLen(tLen) && validLen(len(seq)) && (qual == nil || validLen(len(qual)))) { return nil, errors.New("sam: value out of range") } if len(name) == 0 || len(name) > 254 { return nil, errors.New("sam: name absent or too long") } if qual != nil && len(qual) != len(seq) { return nil, errors.New("sam: sequence/quality length mismatch") } if ref != nil { if ref.id < 0 { return nil, errors.New("sam: linking to invalid reference") } } else { if p != -1 { return nil, errors.New("sam: specified position != -1 without reference") } } if mRef != nil { if mRef.id < 0 { return nil, errors.New("sam: linking to invalid mate reference") } } else { if mPos != -1 { return nil, errors.New("sam: specified mate position != -1 without mate reference") } } r := &Record{ Name: name, Ref: ref, Pos: p, MapQ: mapQ, Cigar: co, MateRef: mRef, MatePos: mPos, TempLen: tLen, Seq: NewSeq(seq), Qual: qual, AuxFields: aux, } return r, nil } // IsValidRecord returns whether the record satisfies the conditions that // it has the Unmapped flag set if it not placed; that the MateUnmapped // flag is set if it paired its mate is unplaced; that the CIGAR length // matches the sequence and quality string lengths if they are non-zero; and // that the Paired, ProperPair, Unmapped and MateUnmapped flags are consistent. func IsValidRecord(r *Record) bool { if (r.Ref == nil || r.Pos == -1) && r.Flags&Unmapped == 0 { return false } if r.Flags&Paired != 0 && (r.MateRef == nil || r.MatePos == -1) && r.Flags&MateUnmapped == 0 { return false } if r.Flags&(Unmapped|ProperPair) == Unmapped|ProperPair { return false } if r.Flags&(Paired|MateUnmapped|ProperPair) == Paired|MateUnmapped|ProperPair { return false } if len(r.Qual) != 0 && r.Seq.Length != len(r.Qual) { return false } if cigarLen := r.Len(); cigarLen < 0 || (r.Seq.Length != 0 && r.Seq.Length != cigarLen) { return false } return true } // Tag returns an Aux tag whose tag ID matches the first two bytes of tag and true. // If no tag matches, nil and false are returned. func (r *Record) Tag(tag []byte) (v Aux, ok bool) { if len(tag) < 2 { panic("sam: tag too short") } for _, aux := range r.AuxFields { if aux.matches(tag) { return aux, true } } return nil, false } // RefID returns the reference ID for the Record. func (r *Record) RefID() int { return r.Ref.ID() } // Start returns the lower-coordinate end of the alignment. func (r *Record) Start() int { return r.Pos } // Bin returns the BAM index bin of the record. func (r *Record) Bin() int { if r.Flags&Unmapped != 0 { return 4680 // reg2bin(-1, 0) } end := r.End() if !internal.IsValidIndexPos(r.Pos) || !internal.IsValidIndexPos(end) { return -1 } return int(internal.BinFor(r.Pos, r.End())) } // Len returns the length of the alignment. func (r *Record) Len() int { return r.End() - r.Start() } func max(a, b int) int { if a < b { return b } return a } // End returns the highest query-consuming coordinate end of the alignment. // The position returned by End is not valid if r.Cigar.IsValid(r.Seq.Length) // is false. func (r *Record) End() int { pos := r.Pos end := pos for _, co := range r.Cigar { pos += co.Len() * co.Type().Consumes().Reference end = max(end, pos) } return end } // Strand returns an int8 indicating the strand of the alignment. A positive return indicates // alignment in the forward orientation, a negative returns indicates alignment in the reverse // orientation. func (r *Record) Strand() int8 { if r.Flags&Reverse == Reverse { return -1 } return 1 } // String returns a string representation of the Record. func (r *Record) String() string { end := r.End() return fmt.Sprintf("%s %v %v %d %s:%d..%d (%d) %d %s:%d %d %s %v %v", r.Name, r.Flags, r.Cigar, r.MapQ, r.Ref.Name(), r.Pos, end, r.Bin(), end-r.Pos, r.MateRef.Name(), r.MatePos, r.TempLen, r.Seq.Expand(), r.Qual, r.AuxFields, ) } // UnmarshalText implements the encoding.TextUnmarshaler. It calls UnmarshalSAM with // a nil Header. func (r *Record) UnmarshalText(b []byte) error { return r.UnmarshalSAM(nil, b) } // UnmarshalSAM parses a SAM format alignment line in the provided []byte, using // references from the provided Header. If a nil Header is passed to UnmarshalSAM // and the SAM data include non-empty refence and mate reference names, fake // references with zero length and an ID of -1 are created to hold the reference // names. func (r *Record) UnmarshalSAM(h *Header, b []byte) error { f := bytes.Split(b, []byte{'\t'}) if len(f) < 11 { return errors.New("sam: missing SAM fields") } *r = Record{Name: string(f[0])} // TODO(kortschak): Consider parsing string format flags. flags, err := strconv.ParseUint(string(f[1]), 0, 16) if err != nil { return fmt.Errorf("sam: failed to parse flags: %v", err) } r.Flags = Flags(flags) r.Ref, err = referenceForName(h, string(f[2])) if err != nil { return fmt.Errorf("sam: failed to assign reference: %v", err) } r.Pos, err = strconv.Atoi(string(f[3])) r.Pos-- if err != nil { return fmt.Errorf("sam: failed to parse position: %v", err) } mapQ, err := strconv.ParseUint(string(f[4]), 10, 8) if err != nil { return fmt.Errorf("sam: failed to parse map quality: %v", err) } r.MapQ = byte(mapQ) r.Cigar, err = ParseCigar(f[5]) if err != nil { return fmt.Errorf("sam: failed to parse cigar string: %v", err) } if bytes.Equal(f[2], f[6]) || bytes.Equal(f[6], []byte{'='}) { r.MateRef = r.Ref } else { r.MateRef, err = referenceForName(h, string(f[6])) if err != nil { return fmt.Errorf("sam: failed to assign mate reference: %v", err) } } r.MatePos, err = strconv.Atoi(string(f[7])) r.MatePos-- if err != nil { return fmt.Errorf("sam: failed to parse mate position: %v", err) } r.TempLen, err = strconv.Atoi(string(f[8])) if err != nil { return fmt.Errorf("sam: failed to parse template length: %v", err) } if !bytes.Equal(f[9], []byte{'*'}) { r.Seq = NewSeq(f[9]) if !r.Cigar.IsValid(r.Seq.Length) { return errors.New("sam: sequence/CIGAR length mismatch") } } if !bytes.Equal(f[10], []byte{'*'}) { r.Qual = append(r.Qual, f[10]...) for i := range r.Qual { r.Qual[i] -= 33 } } else if r.Seq.Length != 0 { r.Qual = make([]byte, r.Seq.Length) for i := range r.Qual { r.Qual[i] = 0xff } } if len(r.Qual) != 0 && len(r.Qual) != r.Seq.Length { return errors.New("sam: sequence/quality length mismatch") } for _, aux := range f[11:] { a, err := ParseAux(aux) if err != nil { return err } r.AuxFields = append(r.AuxFields, a) } return nil } func referenceForName(h *Header, name string) (*Reference, error) { if name == "*" { return nil, nil } if h == nil { // If we don't have a Header, return a fake Reference. return &Reference{ id: -1, name: name, }, nil } for _, r := range h.refs { if r.Name() == name { return r, nil } } return nil, fmt.Errorf("no reference with name %q", name) } // MarshalText implements encoding.TextMarshaler. It calls MarshalSAM with FlagDecimal. func (r *Record) MarshalText() ([]byte, error) { return r.MarshalSAM(0) } // MarshalSAM formats a Record as SAM using the specified flag format. Acceptable // formats are FlagDecimal, FlagHex and FlagString. func (r *Record) MarshalSAM(flags int) ([]byte, error) { if flags < FlagDecimal || flags > FlagString { return nil, errors.New("sam: flag format option out of range") } if r.Qual != nil && len(r.Qual) != r.Seq.Length { return nil, errors.New("sam: sequence/quality length mismatch") } var buf bytes.Buffer fmt.Fprintf(&buf, "%s\t%v\t%s\t%d\t%d\t%s\t%s\t%d\t%d\t%s\t%s", r.Name, formatFlags(r.Flags, flags), r.Ref.Name(), r.Pos+1, r.MapQ, r.Cigar, formatMate(r.Ref, r.MateRef), r.MatePos+1, r.TempLen, formatSeq(r.Seq), formatQual(r.Qual), ) for _, t := range r.AuxFields { fmt.Fprintf(&buf, "\t%v", samAux(t)) } return buf.Bytes(), nil } // Flag format constants. const ( FlagDecimal = iota FlagHex FlagString ) func formatFlags(f Flags, format int) interface{} { switch format { case FlagDecimal: return uint16(f) case FlagHex: return fmt.Sprintf("0x%x", f) case FlagString: // If 0x01 is unset, no assumptions can be made about 0x02, 0x08, 0x20, 0x40 and 0x80 const pairedMask = ProperPair | MateUnmapped | MateReverse | MateReverse | Read1 | Read2 if f&1 == 0 { f &^= pairedMask } const flags = "pPuUrR12sfdS" b := make([]byte, 0, len(flags)) for i, c := range flags { if f&(1< FlagString { return nil, errors.New("bam: flag format option out of range") } sw := &Writer{w: w, flags: flags} text, _ := h.MarshalText() _, err := w.Write(text) if err != nil { return nil, err } return sw, nil } // Write writes r to the SAM stream. func (w *Writer) Write(r *Record) error { b, err := r.MarshalSAM(w.flags) if err != nil { return err } b = append(b, '\n') _, err = w.w.Write(b) return err } const ( wordBits = 31 maxInt32 = int(int32(^uint32(0) >> 1)) minInt32 = -int(maxInt32) - 1 ) func validInt32(i int) bool { return minInt32 <= i && i <= maxInt32 } func validLen(i int) bool { return 1 <= i && i <= 1< t.bed.gz; tabix t.bed.gz'. // See https://github.com/biogo/hts/issues/19. var issue19TestData = []byte{ 0x54, 0x42, 0x49, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, // |TBI.............| 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // |........#.......| 0x05, 0x00, 0x00, 0x00, 0x63, 0x68, 0x72, 0x31, 0x00, 0x02, 0x00, 0x00, 0x00, 0x49, 0x12, 0x00, // |....chr1.....I..| 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, // |...............%| 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x92, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // |.....J..........| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // |.......%........| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // |................| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // |................| 0x00, /* */ // |.| } func (s *S) TestIssue19(c *check.C) { idx, err := ReadFrom(bytes.NewReader(issue19TestData)) c.Assert(err, check.Equals, nil) chunks, err := idx.Chunks("chr1", 1, 19999999) c.Assert(err, check.Equals, nil) c.Check(len(chunks), check.Not(check.Equals), 0) }