diff --git a/Makefile b/Makefile index 0453ef2..f4526f2 100644 --- a/Makefile +++ b/Makefile @@ -75,6 +75,8 @@ smoke-test: @md5sum ./build/test.hex tinygo build -size short -o ./build/test.hex -target=xiao ./examples/ili9341/scroll @md5sum ./build/test.hex + tinygo build -size short -o ./build/test.hex -target=pyportal ./examples/ili9341/slideshow + @md5sum ./build/test.hex tinygo build -size short -o ./build/test.hex -target=circuitplay-express ./examples/lis3dh/main.go @md5sum ./build/test.hex tinygo build -size short -o ./build/test.hex -target=microbit ./examples/lsm303agr/main.go @@ -208,7 +210,7 @@ DRIVERS = $(wildcard */) NOTESTS = build examples flash semihosting pcd8544 shiftregister st7789 microphone mcp3008 gps microbitmatrix \ hcsr04 ssd1331 ws2812 thermistor apa102 easystepper ssd1351 ili9341 wifinina shifter hub75 \ hd44780 buzzer ssd1306 espat l9110x st7735 bmi160 l293x dht keypad4x4 max72xx p1am tone tm1637 \ - pcf8563 mcp2515 servo sdcard rtl8720dn + pcf8563 mcp2515 servo sdcard rtl8720dn image cmd TESTS = $(filter-out $(addsuffix /%,$(NOTESTS)),$(DRIVERS)) unit-test: diff --git a/cmd/convert2bin/convert2bin.go b/cmd/convert2bin/convert2bin.go new file mode 100644 index 0000000..c7cfaa1 --- /dev/null +++ b/cmd/convert2bin/convert2bin.go @@ -0,0 +1,49 @@ +package main + +import ( + "fmt" + "io/ioutil" + "log" + "os" + "strings" +) + +// See ../../image/README.md for the usage. + +func main() { + err := run(os.Args) + if err != nil { + log.Fatal(err) + } +} + +func run(args []string) error { + if len(args) < 2 { + return fmt.Errorf("usage: %s FILE") + } + + b, err := ioutil.ReadFile(args[1]) + if err != nil { + return err + } + + fmt.Printf("const %s = \"\" +\n", strings.Replace(args[1], ".", "_", -1)) + + i := 0 + max := 32 + for i = 0; i < len(b); i++ { + bb := b[i] + if (i % max) == 0 { + fmt.Printf(" \"") + } + fmt.Printf("\\x%02X", bb) + if (i%max) == max-1 && i != len(b)-1 { + fmt.Printf("\" + \n") + } + } + if (i % max) < max-1 { + fmt.Printf("\"\n") + } + + return nil +} diff --git a/examples/ili9341/slideshow/README.md b/examples/ili9341/slideshow/README.md new file mode 100644 index 0000000..8aa5e2a --- /dev/null +++ b/examples/ili9341/slideshow/README.md @@ -0,0 +1,18 @@ +# examples/ili9341/slideshow + +![](./slideshow.jpg) + +This example uses the image package for TinyGo to display png and jpeg images. + +## How to create an image + +The following program will output an image binary like the one in [images.go](./images.go). + +``` +go run ./examples/ili9341/slideshow/convert2bin ./path/to/png_or_jpg.png +``` + +## Notes + +Displaying a 320x240 png or jpeg often requires more than 50KB of memory. +The examples include samd21 settings, but if you run them as is, you will get a memory size error. diff --git a/examples/ili9341/slideshow/atsamd21.go b/examples/ili9341/slideshow/atsamd21.go new file mode 100644 index 0000000..cd62edb --- /dev/null +++ b/examples/ili9341/slideshow/atsamd21.go @@ -0,0 +1,29 @@ +// +build atsamd21 + +package main + +import ( + "machine" + + "tinygo.org/x/drivers/ili9341" +) + +var ( + display = ili9341.NewSPI( + machine.SPI0, + machine.D0, + machine.D1, + machine.D2, + ) + + backlight = machine.D3 +) + +func init() { + machine.SPI0.Configure(machine.SPIConfig{ + SCK: machine.SPI0_SCK_PIN, + SDO: machine.SPI0_SDO_PIN, + SDI: machine.SPI0_SDI_PIN, + Frequency: 24000000, + }) +} diff --git a/examples/ili9341/slideshow/images.go b/examples/ili9341/slideshow/images.go new file mode 100644 index 0000000..5e1f455 --- /dev/null +++ b/examples/ili9341/slideshow/images.go @@ -0,0 +1,5083 @@ +package main + +const pngImage = "" + + "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x01\x40\x00\x00\x00\xF0\x08\x02\x00\x00\x00\xFE\x4F\x2A" + + "\x3C\x00\x00\x80\x00\x49\x44\x41\x54\x78\x9C\xEC\x9D\x07\x7C\x55\xC7\x99\xF6\x95\x04\xC7\x36\x20\xD4\x6E\xAF\xEA\xBA\xD2\xED\xFD" + + "\xAA\xF7\xDE\xBB\x84\x7A\x43\x48\xA2\x23\x7A\xC7\x18\xC7\x15\xD3\x6C\x30\x60\x7A\xEF\xE0\x5E\x00\x63\x9A\xBD\x18\x1B\x1B\xB7\xD8" + + "\x49\x9C\xD8\xC9\x26\xFB\xED\x6E\xBC\xBF\xDD\xFD\xB2\x49\xF6\x8B\xBF\x67\x66\xCE\x3D\x3A\xBA\x12\x58\x89\xC1\xB8\x1D\xBF\x8C\xE7" + + "\x9E\x7B\x75\xCB\x9C\xF7\x3F\xCF\xFB\xCE\x99\x33\xC7\x2F\xD6\xE1\x8A\x75\xB8\x63\xEC\x9E\x18\x3B\x29\x75\x0E\x0F\x29\x69\x85\xD5" + + "\x07\x1E\xA2\xB4\x71\x95\x18\x8B\x47\x67\xF5\xC4\x58\x3D\xD1\x36\x4F\x34\x29\xDD\xA8\x44\xD9\xDC\x91\x36\x77\x84\xCD\x1D\x6E\x75" + + "\x85\xDB\x88\x85\x59\x9D\x61\x56\x47\x98\xC5\x15\x6E\x75\x87\xC2\x2C\x2E\x66\x5A\xB3\x73\xB0\x39\x98\x69\x4C\x0E\xB5\xC9\xAE\x36" + + "\xA3\x24\x75\x62\xDC\x4E\xAE\x54\x1B\xA9\x99\x06\x4C\x69\x74\xA8\x68\x45\x85\x57\x72\xEF\x86\xF7\x77\xE1\xE3\xD8\x9B\x87\x5B\xF0" + + "\x95\xE2\x23\xED\x09\x51\x8E\xC4\x68\x98\x3D\x21\xD6\x99\xAC\x77\x25\xEB\xDD\x29\x46\x4F\x9A\x39\x21\xDD\x9A\x98\x61\x83\x25\x65" + + "\x38\x53\xB2\x5C\xA9\x39\xEE\xB4\xEC\xF8\x8C\xDC\xC4\x8C\xDC\xA4\xAC\xBC\xE4\x6C\x58\x7E\x5A\x4E\x51\x46\x4E\x71\x46\x6E\x09\x2C" + + "\x33\xAF\x24\x2B\xBF\x34\x2B\xBF\x2C\xBB\xA0\x2C\xA7\xA0\x3C\x47\x50\x66\x15\x90\x9D\xD9\xF9\x65\x99\x05\xA5\x59\x85\x65\x39\x45" + + "\x15\xB9\xC5\x15\x7C\x09\xCB\x2B\xA9\xCA\x2D\xAE\x44\xC9\x1B\x9E\xC2\x9E\xFC\x92\xEA\xFC\xE2\x2A\x94\x05\xA5\x83\x8C\xED\x41\x99" + + "\x87\xBF\x2A\xAE\xCC\xC5\x3B\xE0\xC5\x78\xA5\xD7\xD8\x43\xBE\xCC\x29\x2C\x87\xE5\x16\x56\xB0\xD7\xF3\x4F\xF1\xEF\xFF\x65\x86\x17" + + "\x57\xE7\x97\x56\xE5\x97\x55\xE6\x97\x55\xE5\x97\xE2\xAB\xE2\x3B\xE3\x1B\x96\x53\xAB\xC0\x1E\x94\x6C\xA7\xF7\x29\xF2\xA3\xF2\x4B" + + "\xAB\x59\x09\x2B\x28\xAB\x29\x2C\xAF\x85\xA1\x92\x5F\x46\x1E\x0E\x35\xEC\x67\x36\x68\x67\x69\x35\x69\x0A\xFA\x26\xC4\xD0\x3E\xB4" + + "\xCC\xC7\xE7\x92\x2F\x86\x1F\x45\x2C\xB7\xA8\x1C\x86\x0A\xDB\x93\xEF\x35\xDA\x38\x78\xAA\x02\x3F\x9F\x58\x91\xB7\x11\x04\xBF\x9D" + + "\x34\x26\x6D\x13\xD6\x98\xB9\x45\xEC\x05\x95\xEC\x23\x0A\xCB\xAA\x47\x66\xB5\xD4\x6A\x60\xC2\x03\xC7\x97\x6C\x27\xFD\x94\x2A\xFE" + + "\xAB\x92\x4F\xA1\x46\xBE\x3F\x7C\xA3\xB0\x2C\x2B\x1F\x8E\x04\x77\x82\x5F\x15\xA1\xA4\x7E\x55\x92\x91\x57\x98\x9E\x5F\x98\x51\x58" + + "\x9C\x55\x5C\x9A\x5B\x56\x9E\x5F\x5E\x51\x58\x59\x5D\x58\x51\x55\x5E\x57\x5F\x39\xBE\xB1\xAA\xA1\xB1\xBA\xB1\xB9\xB6\xA9\xA5\xAE" + + "\xB9\x15\x56\xDF\xDA\x56\xD7\xD4\xE4\x17\x6B\x77\x72\x0C\x3B\xDC\x3A\xA1\xD9\x87\x7B\x68\xA7\x66\x73\xC7\x58\xDC\x3A\xAB\x3B\xC6" + + "\x6B\x14\x60\x77\x94\xD5\x0D\x86\x09\xC6\x04\x60\x67\x04\x18\xB6\x3A\xC3\xAD\x0E\x5A\xBA\xC3\x6C\xEE\x30\x42\x2F\x90\x76\x85\x52" + + "\x68\xB9\xD2\x32\x00\xB0\x97\xE1\xE1\xCC\x38\xA4\xE2\x7D\xA8\xE1\xA0\xA5\xA5\x85\xF4\x14\x61\x36\x4F\x38\xCC\x8A\xAE\xC4\x13\x69" + + "\x8B\x8F\xA6\xE8\xC6\x38\x93\x80\x6E\xAC\x23\xD9\x40\xD0\x4D\x65\xF4\x02\x5D\x7B\x52\x96\x23\x39\xCB\x41\xE8\xCD\x76\xA5\x66\x79" + + "\xD2\x73\x12\x00\x70\x66\x6E\x72\x56\x7E\x4A\x0E\xE8\x2D\x20\xF4\xE6\x10\x7A\x33\xF2\x4A\x32\x49\xBB\x97\x02\x54\xC6\x70\x76\x61" + + "\xB9\xA0\xC4\x81\x21\x15\xD0\x8B\x3D\x0C\x5A\xA1\xC1\x41\x19\xB1\x02\x23\x0F\xA9\x63\x09\x0E\xFF\x50\x13\xE0\x2A\xAC\xF0\x0F\x39" + + "\x8F\x1C\xEC\xBB\x03\xCC\xD3\x2E\x80\x7B\xBD\xF7\xDD\x86\x33\x46\x3B\x28\x22\xAC\xF2\x00\x33\x50\x19\xBA\xC3\x01\x4C\x69\x2C\xF5" + + "\x65\x52\xB8\x53\x68\xD7\x83\xD9\xB7\x77\xC3\x97\x2F\x61\xBF\x94\x43\x34\x6F\x30\xC3\x14\xDA\xF2\x3C\xC1\xFE\x7C\xEE\xD9\xC1\x3D" + + "\xDD\x60\xC6\x7C\x1A\x0D\x95\x82\x52\xF2\x93\x51\x8E\x00\x5D\xF6\x9A\x1A\xDE\x78\x6E\x87\x05\x98\x96\x15\xEC\xAB\x7A\xBF\x5B\x39" + + "\x43\x37\x1B\x5D\x3C\x05\x58\x60\xA5\xD9\x85\x25\xB9\xE0\xB6\xA4\x2C\xBF\xAC\xBC\xA0\xA2\xB2\xA4\xBA\xA6\xAC\xB6\xAE\xA2\xB6\x0E" + + "\xF4\x56\x35\x34\x01\xDD\xBA\xA6\xE6\x7A\x70\xDB\xD2\x3A\xBE\xB5\xAD\xA1\xB5\xBD\x01\x65\x4B\x8B\x5F\xAC\xC3\x41\x0D\x0C\x33\x92" + + "\x6F\x68\x76\xAE\x04\xBD\xB1\x36\x17\x21\xD9\x46\x78\xA6\x15\x57\x34\xB5\x28\xAB\x33\xCA\x46\x2C\xD2\xE6\x88\xB4\x3A\x50\x46\x0C" + + "\xC0\xEC\x04\xD8\x61\x16\x68\x32\xA8\xE6\xCA\x50\x42\x32\xA9\x6B\xCD\x76\x6A\x94\x61\xA3\x9D\x13\x5B\xAF\xA9\xB0\x87\x08\xB2\x93" + + "\x40\x6B\x76\x6A\xBC\x86\x87\x14\x5D\xC8\xBB\x3B\x0C\xC4\x12\x74\xE3\x89\xE4\x12\x4B\x88\x74\x24\xC4\x38\x28\xB7\x90\x5C\x57\xAA" + + "\xDE\x9D\x66\x70\xA7\x9A\x3D\x69\x96\xF8\x74\x4B\x02\x84\x37\xD3\x91\x9C\xC9\x84\xD7\x95\x96\xEB\x49\xCD\x89\x4F\x23\xDA\x9B\x0C" + + "\xCB\xCA\x4B\x25\xDA\x5B\x98\x96\x5B\x48\x84\x97\x6A\x2F\x2F\xBF\x9C\xD8\x02\x57\x81\x31\x6E\xB3\xD9\xB3\x14\xE0\x11\x28\x30\x79" + + "\x58\x50\x32\xE0\x07\xC3\x2A\xF0\xB0\xDC\x0E\xD5\x61\x5F\xF1\x11\xB8\xE9\x80\x02\x0F\x76\xEB\xC1\x56\x35\xA0\xC0\xA5\x95\x3E\x0C" + + "\xC3\xD8\x43\xFE\x29\xEF\x43\xAF\x66\x7A\xF9\xFC\x52\x05\x1E\x5E\x96\x05\x32\xEE\xAB\xC0\x43\x18\x16\x42\x9B\x2F\x50\xE3\xEB\x02" + + "\xEC\x53\x11\x30\x56\x50\x5A\x39\x62\x80\x7D\x15\xF8\xC6\x00\xE7\x91\x8F\x63\x87\xA3\x42\x28\xBC\xD0\x5B\x5E\x7E\x19\xCC\xD8\x4F" + + "\x5F\x56\x56\x58\x51\x59\x5C\x55\x5D\x5A\x53\x53\x5E\x57\x57\x35\xBE\xA1\xB6\xB1\x89\x40\xDB\xD4\x3C\xBE\xA5\xB5\xA1\xB5\xB5\xB9" + + "\xAD\xBD\xB9\x1D\xD6\xD1\xD2\xDE\xD9\xD2\xDE\x81\x4A\x6B\x7B\x87\x5F\x1C\xA1\xD7\x09\x75\x65\x3A\xFC\x25\x66\x77\x13\xCE\x51\xDA" + + "\x08\xC0\xB4\x24\xC6\x18\x66\xE2\x4C\x31\x26\x65\x24\xC1\x98\x94\x91\xA4\x24\x71\x35\x2B\xC3\x2D\x94\x67\x0B\xE5\x19\x82\x6C\x26" + + "\x12\x1D\xC6\x30\xF6\x92\xEC\x2B\xB3\x14\x69\x0D\x65\x95\x72\xEB\xA0\x62\xEB\x62\x92\x4B\x02\x66\x8B\x2B\xCC\xE2\x0E\xA7\x00\x73" + + "\x01\xB3\x3D\x81\x08\xAF\x33\x51\xE7\x4C\x8A\x73\xA5\xE8\xDD\xA9\x06\x4F\x9A\xD1\x93\x6E\x8A\x4F\x03\xBA\x34\x6C\xCE\xB4\x27\x67" + + "\x31\x7A\x3D\xA0\x37\x9D\xA0\x9B\x98\x99\x9F\x9C\x99\x97\x92\x45\x84\x17\xF4\x66\xE4\x15\x65\xE4\x17\x91\xE6\xCE\x2B\x25\xE8\x92" + + "\x12\xD1\x32\x89\x93\x05\xF1\x33\x67\x2C\xA8\x46\x99\x59\x38\x3C\xC0\xBE\x3E\x8A\x87\x04\x03\x7A\xE0\x4B\xAB\x6E\x05\xC0\xA8\xFB" + + "\x62\x2C\xE0\x76\xE8\x27\x16\x30\x39\x45\xFC\x4C\x43\x68\x9E\x52\x16\x3F\x73\x3B\xD9\xB3\x9C\x55\x72\x12\xFA\xD5\x01\xA6\x22\x3C" + + "\xA0\xD5\xA5\x5C\x59\x50\xE2\x8D\x72\x05\x0C\xE7\x0F\xB1\x1B\x00\xCC\x05\xD2\x43\xF2\x85\xBC\xE2\x6A\x8A\x6E\xC5\xAD\x03\x98\x7E" + + "\xDB\x72\x26\xBC\x4C\x75\x59\xCC\xCC\xC2\x66\x86\x31\xC0\xC6\x37\xC7\xDF\x16\x96\x41\x75\x6B\xCB\x6A\x6B\x2B\xEA\xEB\x6B\x1B\x1A" + + "\xC1\x2D\xA0\x6D\x68\x6B\x03\xB4\xAD\x1D\x9D\xAD\x9D\x5D\x6D\x1D\x5D\xED\x9D\xB0\x09\xD4\xBA\xDA\xDB\x3B\x3B\xBB\xBB\x98\x02\x3B" + + "\x63\xFF\x0E\x80\xA9\x0E\x5B\xDD\x71\x10\x61\xAB\x9B\x67\x98\x61\xCC\xCA\x68\x3B\xC3\x98\x91\xCC\x01\x1C\xE9\x8D\xAE\x23\x29\xC9" + + "\x91\xC0\xD8\xE2\xE4\x4A\xAB\x2B\x02\x18\x9B\x1D\x11\x48\x59\xBD\x81\xB4\x30\xAE\x26\x36\xB0\x87\x64\xB6\x2C\x97\xA6\x92\x4B\x84" + + "\x97\x54\xAC\xC8\x75\x49\xC0\x1C\x69\x47\xCC\x9C\xA0\x73\x24\xC6\x22\x66\x76\x71\xE9\xAE\x01\x31\xB3\x10\xDD\xC4\x0C\xA6\xBD\x6E" + + "\xAA\xBA\xF1\xE9\xB9\x08\x9B\x53\xB2\x0A\xD2\xB2\x0A\x53\xA1\xBA\x08\x9B\x21\xBC\x79\x85\x59\xA0\xB7\xA0\x24\x27\xBF\x2C\x97\x1A" + + "\x5F\xF1\x5A\xF9\x60\x23\x7B\x48\x08\x7D\x1D\x05\x1E\x22\x32\x00\x98\x46\x77\xB7\x58\x81\xF9\x58\x9A\xB9\xB2\xD0\xED\x86\xF9\x44" + + "\x1E\xE0\xC1\x0C\x0F\x03\x30\xA7\xD5\x37\x49\x81\x7D\x42\x6E\x2F\xC0\x7C\xF6\x38\xAC\x0E\xFF\x1D\x0A\x3C\xCC\xC3\xEA\x5B\xAA\xC0" + + "\xAC\x03\xCD\x2D\x2A\xBB\x11\xBD\x08\xB0\x69\xFA\x5D\x52\x51\x5B\x5A\x55\x5B\x49\xA2\xE5\xF1\xB5\x4D\x8D\xE3\x5B\x9A\x9B\xDA\x5A" + + "\x5B\x3A\xDA\x5B\x3B\xDB\xDB\x3A\x3B\x3A\xBA\x26\x74\x4E\xE8\xEE\x9A\x30\xA1\xAB\xBB\x1B\x36\xA1\x9B\x6C\x5D\x5D\x5D\x13\x7B\x26" + + "\x52\x05\xB6\x3B\x08\x93\x48\x86\xED\x2E\x5F\xF3\x0D\xA1\xA1\xD5\x44\x81\xF5\x56\x0F\x58\xD5\xDB\x3C\x71\x36\x54\x58\x09\x7A\x3D" + + "\x94\x73\x0F\xD5\xE1\x41\x18\x47\xD9\x3D\xFC\x28\xD7\x00\xC6\x56\x37\x57\x72\x30\x13\x8C\x23\x10\x57\x83\x4F\x22\xAD\xA4\xE4\xC7" + + "\xBD\xF8\xD1\x2F\xC6\x2D\x43\x97\x9A\x87\x19\xD0\x8D\x72\x24\x70\xB9\xAE\x2B\x39\x0E\xDC\x7A\x52\xF5\x9E\x34\x22\xBC\xF1\x69\x44" + + "\x78\xC9\x48\x55\x96\x3D\x39\x9B\x64\xBC\xC9\x59\xAE\x94\x6C\x77\x2A\x43\x37\x3F\x09\x96\x49\x02\xE6\x74\xDA\xBE\x19\x79\xC5\x99" + + "\x44\x78\x8B\xB2\x0B\x8A\x73\x0A\x8B\x73\x0B\x28\xAB\x28\x0B\xCA\x07\x8C\x11\xEB\x7D\x98\x43\xF6\x70\xE2\x4C\xD2\xE3\x61\x01\xBE" + + "\x8E\x8F\x16\x14\x73\x3C\x0F\x49\x83\xAB\xBC\x91\x2D\xBC\xA1\x92\xFA\x28\xAB\xF8\x58\x05\x7B\x36\x97\x8E\x60\xB1\x98\x8D\x9A\xD7" + + "\x87\x0A\x2B\x7C\x14\x98\x0D\xC0\x08\xD3\x39\x6A\xF8\x02\x60\x69\x78\x86\x51\x67\xFB\xD9\x0B\x0A\x38\x5C\xAB\xA8\x72\xFA\x02\xCC" + + "\x33\x39\xEC\x90\xD5\xC8\xC0\xC6\x9F\xD0\x2F\x43\x73\xD4\x41\x0C\x97\x54\xE6\x0D\x49\x80\x05\x19\x32\xD7\x02\xAC\xAD\x78\x11\xF6" + + "\x1D\x02\x1C\x08\x43\x38\x80\x19\x87\xB4\x11\x6E\x04\x73\x01\x43\x97\x35\x02\x0D\xF2\x0B\xBC\x31\x3F\x57\xB2\x04\x9E\xB6\x3F\x6D" + + "\x7C\xC1\x90\x95\x37\x6C\x26\x31\x33\x15\x5E\xBC\x61\x71\x45\x6D\x59\xF5\xF8\xAA\xFA\xE6\xEA\x06\xA4\xB8\x2D\xE3\x5B\x5B\x9A\x5A" + + "\x5B\x5B\xDA\xC1\x6D\x57\xFB\x84\xAE\xCE\x6E\x02\x6D\x37\x48\xED\xE9\xED\xE9\xC1\xBF\xDE\xDE\xDE\xBE\xBE\x9E\xDE\x49\x3D\x7D\x78" + + "\x3C\x79\x52\x1F\x00\xB6\x7B\xD3\xE0\xE1\xCC\x3E\xD8\x6C\xAC\x74\xC5\xD9\xDC\xCC\x00\x2D\x60\x66\x00\xC7\xD9\x01\x70\x3C\x00\xA6" + + "\x42\x4D\x86\xB5\xA3\x69\x92\x4C\x4B\x3A\x5E\x6D\x13\x0C\x77\x11\x73\x45\xD3\x12\xE8\x72\x66\x76\x52\x29\x26\xF1\x70\xA8\x95\x94" + + "\x8C\x55\x06\x2D\xE1\xD9\xEC\x24\x23\x61\x56\x32\xAC\x8D\x3D\x5A\x93\x5D\x16\x11\x13\x24\x53\x8E\x0D\x0A\x19\xED\x1F\x70\xE7\xE8" + + "\x31\x77\xDE\x3D\xE6\xAE\xD1\xC3\xD8\xDD\xA3\xC7\xDE\x3D\x66\x90\x8D\xE6\x6D\xAC\xFF\x18\xDE\xFC\xFD\xC7\x8E\xF5\x1F\xEB\xCF\xDB" + + "\xB8\x9B\x68\xFE\xE3\x02\x58\xE9\x6B\xFE\x43\xF6\x08\xF6\x8F\x0B\x08\x1C\x3B\x76\x5C\x42\x4A\x16\xD5\x96\x61\x44\x98\xED\xA4\xA3" + + "\xD0\x15\x39\x85\x15\xC2\x51\x68\xF6\x2C\xA5\x9A\x45\x74\xDC\x70\x0E\x53\x0F\x1F\x80\xC9\x9E\x92\x1A\x9E\xD2\x84\xB4\x4C\x34\x08" + + "\x3E\xDD\x7F\x1C\xFB\xF2\xD7\xB5\xB1\xFE\xD7\xF9\x5D\x37\xC5\xD8\x47\xFB\xFB\xDA\xD8\xE1\x1E\x0E\x6A\x6D\xCE\x68\x33\x0A\x0E\x01" + + "\x6B\xD5\x10\x91\x44\x26\x57\x45\x44\xE9\xEC\xAE\xF8\x8C\xEC\x02\x04\xBA\x1C\x9F\x37\xA2\xB7\x6A\x40\x81\x4B\x6B\x60\x24\x74\x2A" + + "\x26\x01\xD4\x80\x02\x17\x0F\x56\xE0\x42\x0E\x60\x6E\xD4\x2A\x8F\x1B\xB2\xCA\x2B\x2A\x47\xC7\x51\x58\x5E\x5D\x52\x59\x5B\x51\xDB" + + "\x58\xDD\xD0\x52\xDF\xDC\xDE\xD0\xDA\xD9\x82\x38\xB9\xAB\xB3\x1D\xDA\x0A\x81\x9D\x38\x71\x42\xCF\xC4\xEE\x1E\xA0\x0B\x58\x27\x4D" + + "\xEA\x9B\x34\xB9\x6F\xF2\x94\x49\xB0\x29\xB0\x69\x7D\x53\xA6\x4E\x9A\x3C\x75\xCA\x64\x5E\x81\xAF\x63\x24\xBA\x16\x18\x19\xB2\x76" + + "\xC4\xA1\xA4\x0C\xC7\x0E\x60\xEC\x35\xBB\x37\xD2\xA6\x75\x9A\x1B\xBB\xA8\x14\x3B\x19\xCF\x7C\x86\x4C\xE8\x45\x74\x6D\x75\xA2\x8C" + + "\xB2\x42\x7E\x1D\xAC\x64\x6A\x4C\xB2\x59\x8B\xD0\x68\x8A\x6B\x86\x91\xD3\x42\x60\x58\x19\xAD\xF7\x0F\x16\xFD\xE8\xC7\x3F\x1E\x35" + + "\x6A\xD4\x9D\x77\xDE\x39\x76\xEC\xD8\xC0\xC0\xC0\x90\x90\x10\xB1\x58\x2C\x12\x89\xC4\xDF\xFE\x0D\xBF\x45\x44\xB7\xBB\xEF\xBE\xDB" + + "\xCF\xCF\xCF\xEE\x4A\xE0\x55\x45\xA0\xB1\x7C\x24\x39\xAC\x02\xFB\xBE\x86\x18\x95\x88\x01\xE9\x18\x1A\x4B\x73\x6A\x59\x6D\x73\x27" + + "\xE0\x73\xF1\xE9\xEC\xCB\xB0\xB6\xFD\xB6\x6F\xCC\x37\xF0\x5B\xE0\x2D\xF0\x19\x78\x0E\xFC\xE7\x27\x3F\x19\xA5\x54\x6B\x3C\x49\x69" + + "\xC0\x18\x2D\x90\x47\xCF\x0B\x0C\xA1\xB7\xC6\xAB\xC0\x5C\x39\x48\x81\x59\x94\x44\x82\x85\x2A\x2E\x40\x60\x46\xBA\x54\x92\x52\xD1" + + "\xB1\xCF\x92\xAC\x82\x52\xF0\x0C\x7A\xD1\x17\x94\x54\xD6\x94\xD7\xD4\x55\xD6\x37\xD4\x42\x78\x5B\x5A\x9A\xDA\x3B\x5A\x3B\xBA\x3A" + + "\x48\x90\xDC\x45\xB8\xED\x9D\x38\x11\x12\xDB\xD7\x0B\x72\x7B\x27\x01\x5C\x6C\xA4\x98\x36\x75\xCA\xF4\xA9\xD3\xB0\xCD\x98\x36\x6D" + + "\x3A\x6C\xC6\x34\x7A\x1A\x09\xBA\x6A\xB3\xD3\x72\xC0\x74\x74\x4F\x1C\x81\x96\x94\x9C\xD9\x9D\x7A\x0E\x60\xF0\x89\x87\xAE\x38\x16" + + "\x69\xDB\x48\x1D\xA5\xCE\x8A\xBF\x75\xFA\x98\xCE\xE6\x8C\xB6\x33\x73\xC5\xD0\x12\xF5\x18\x94\x36\x32\x46\x1D\x45\x2D\xDA\x5B\xA1" + + "\x18\x3B\x23\x90\xD0\x5A\x88\x45\xD2\x32\x82\xA0\x4B\x1F\xDA\xE2\xC3\xF4\xB6\x71\x22\x09\x7C\xEB\xAE\xBB\xEE\x92\x48\xA5\xD1\xD1" + + "\xD1\x36\x9B\xCD\xF9\x5D\xDC\x1C\x0E\x87\xC7\xE3\x51\xA9\x54\xF8\xB1\x3A\xBD\x31\x8F\xE4\x4B\x24\x86\x64\x01\x18\x31\xEF\x09\x15" + + "\xEF\x60\x49\x19\xAB\x30\x63\x23\x9F\xFC\x79\x54\xF2\xB7\xCC\x86\xA4\x8E\xDE\x13\xA1\x55\x64\xC4\x88\x04\xC3\x35\xC8\xD5\x63\xE2" + + "\x4C\xF8\x5C\xA5\x52\x19\x1F\x1F\x8F\x6F\x72\xBB\x1B\xE3\x96\x6C\x76\xBB\x3D\x26\x26\x46\x2A\x95\xC2\x97\xF0\x63\xD5\x9A\xB0\x94" + + "\x8C\x3C\x12\xBF\x14\x81\xE1\x1A\xDA\xBB\xD5\x78\x33\xDE\xDA\x22\x2E\xB1\x1F\x18\x05\x28\x28\x1B\x7C\xCE\xBC\x94\x3F\xE5\x56\x9E" + + "\x53\x4C\x4E\x2B\x66\x91\x73\x13\xE5\x99\xF9\x30\x72\x72\x31\x97\xC4\xCC\x04\xDD\xB2\x9A\xBA\x8A\xFA\xF1\x75\x0D\x8D\x0D\xAD\xAD" + + "\xC8\x75\x9B\x3B\x5A\xDB\xBA\x3A\xDA\xBB\x3B\xBB\x26\x4E\xE8\xEE\xE9\x9E\x88\x40\x19\xD8\x42\x6D\xA7\x4E\x9E\x32\x0D\xD4\x4E\x06" + + "\xB5\x53\x67\x4C\x83\x81\xD8\x19\x33\xA6\xCF\x98\x39\x7D\x66\xFF\xCC\xFE\xFE\x99\x33\x67\xCF\xF4\x63\x88\x12\x5C\x87\x8D\x96\x85" + + "\x95\x81\x10\xDA\x41\x55\x57\x18\x48\xBB\xBC\xE3\xD2\x4E\x5A\x72\x06\xF9\x8D\xB5\x72\x15\x42\x2F\xD1\x61\xCA\xB0\xCD\xC1\xCA\x28" + + "\x2B\x41\x57\x68\x64\x8F\x95\x4D\x0B\x61\x51\x77\x3C\x6F\x88\xBA\x35\x31\xC6\x3B\xEF\x1E\x8D\xB6\x96\x48\x24\x46\x93\xC9\xE5\x72" + + "\xE1\x18\x58\xAD\x56\xDB\x77\x71\xB3\x58\x2C\x70\xB2\x88\x88\x88\x1F\xFF\xF8\xC7\x41\xC1\xA2\xAC\xFC\x62\xAA\xA2\x0C\xE0\x72\x46" + + "\xAF\x70\x56\x03\x45\x7A\x90\x02\x0F\x9E\xF3\xC0\x14\xB8\x72\x68\x4A\xC9\x8C\x44\x8F\xA5\x2C\xD1\xAD\xC1\x47\x04\x06\x87\xE0\x73" + + "\xF1\xE9\xA0\xF7\xBB\xDA\xC2\xF8\x5D\xF0\x1F\x78\x91\xC9\x64\x82\x18\xC0\xAF\x10\x5D\x27\x24\x67\xB2\x01\x02\x6F\x56\xCC\x67\x19" + + "\x84\xE4\xFC\xD2\x81\x51\x00\xD2\x56\xA5\x95\xDC\x90\x01\x1D\x29\xE0\xCF\x96\x13\x86\x8B\x00\x6D\x45\x66\x61\x05\x4A\x36\x14\x82" + + "\x57\x22\x66\x06\xBD\x55\xF5\x8D\x35\x8D\x4D\xE3\x9B\x9B\x9B\xDB\xDB\x5A\x3B\xDB\xDB\x27\x74\x74\xF6\x74\x75\xF7\x76\xF7\xF4\x21" + + "\x5C\xEE\xE9\x43\xAC\x4C\xD1\x9D\x0A\xB5\x85\xD4\x82\xDB\x99\xD3\x67\xF4\xCF\x20\x36\x6B\xE6\xCC\x59\x33\xFB\x67\xF7\xCF\x9A\x33" + + "\xAB\x7F\x0E\x29\xFD\x38\x2C\x6D\x83\x41\x15\x12\x3B\xAC\x32\x23\x48\x26\xF2\xEB\x66\x46\x60\xB6\x0F\x03\x30\x8F\x71\x0C\x8D\xBA" + + "\xA9\x56\xB3\x3D\x4E\x56\xEA\xC8\x1B\x3A\x05\xE6\x00\xE4\x74\x00\x2C\x9E\x64\xCE\xF6\x78\xCE\x6C\xC8\xA8\xE3\x43\xE3\xCC\x77\xDC" + + "\x49\x7A\x4A\xAD\x56\x0B\xAF\x1A\x16\x5D\xFB\x77\x65\xE3\x7F\x91\xD9\x6C\xF6\xF7\xF7\xC7\xAF\x76\xC5\x27\x33\xEA\x98\xF6\xF2\x53" + + "\x1A\x86\xD6\x85\x00\x0B\x14\x78\x30\xBA\xDE\x92\x8E\xDF\x70\x03\x45\x44\x81\x11\x22\x96\xD7\xBA\x12\x53\x89\x37\xFB\xFB\xA3\x13" + + "\x61\x8E\xFE\x9D\x6C\x5B\x21\xC6\xF0\x28\xB5\x46\x83\x5F\x3D\x66\x8C\x7F\x4A\x7A\x2E\x9F\x6B\x0C\x66\x78\xD0\x30\x9E\xCF\x68\x9F" + + "\x70\xD2\x0B\x9D\xBB\x46\x27\xF6\x14\xB2\x29\x00\x95\x05\xC8\x78\xAB\xEA\x2A\xEA\x90\xF1\x36\xD5\x35\xB5\x34\xB4\xB5\xB7\x74\x40" + + "\x75\x11\x33\x43\x75\x27\xF6\x4C\xEA\xE9\x9B\x32\x69\x12\xC9\x6E\x39\x6E\x79\x5C\x61\x00\x95\xB7\xD9\x73\x67\xCF\x99\x37\x87\xD9" + + "\xDC\xF9\x73\xFD\xAE\x9B\xFD\x0E\xCB\xF3\xC0\xB3\x2E\x3E\x84\x8E\x13\x84\xD0\x14\x72\xDF\x10\x9A\x46\xD1\x0C\x57\x97\xCE\x4E\xCC" + + "\x67\xAC\x9B\xDB\x49\x38\xC7\x43\x07\xCD\x99\xE3\xD9\xF4\x4C\x70\xAB\x73\x70\x18\x8F\x0B\x11\xA3\x7D\x15\x0A\x05\x74\xC9\x4A\x37" + + "\xFE\x60\xDC\x6E\x97\xB8\x25\x1B\xF3\x2D\xE8\x83\x46\xA3\xF9\xD1\x8F\x7E\x14\x14\x1C\x82\x28\x3A\x6F\x08\xA5\x37\xB0\xEB\x01\xCC" + + "\x64\x99\x70\x4B\x4B\xDE\xC8\xCB\x4A\xC9\x68\x6A\x60\x10\x91\x5F\x74\x94\xAC\xA9\xBF\xC3\x2D\xCC\x7E\x1A\x73\x27\xFC\x58\x78\x17" + + "\x49\x1C\xD4\xA1\x3E\xA7\xCA\x99\x02\x17\x0C\x01\xD8\x47\x84\xBD\xE8\x96\x73\x00\x17\x11\xE3\xB4\x97\xD0\x4B\x33\xDE\xE6\xB6\xC6" + + "\xF6\xF6\xD6\xAE\x09\x1D\xDD\xDD\xDD\xBD\x3D\x24\xD7\x9D\xD4\x37\x09\x92\x3B\x7D\xCA\xD4\x19\x1C\xBA\xBC\xCC\x0E\x85\x96\x47\x17" + + "\x36\x6F\xC1\x3C\xBF\x41\x02\x2B\x40\x94\x05\xD5\x7A\x87\x0B\x31\x36\x4A\x66\x71\xA4\x44\x32\xEC\xA2\xC3\x57\x83\x42\x68\x2E\x90" + + "\xB6\x0E\x13\x42\x53\x05\x76\xF1\xF4\x52\xA3\x7A\x4B\x4F\x5C\x11\x35\xE6\x49\xA6\xFD\x02\x1D\xB8\xF6\x30\x7A\xA9\x79\x62\x1D\x09" + + "\x5A\x9D\x61\xD4\x1D\x77\xDC\x79\xE7\x9D\x50\x24\xBB\x40\x7B\x6F\xB7\x0F\xDC\xDA\x8D\xFF\x99\x01\x01\x01\x70\xAC\x88\x68\x5D\xFE" + + "\x10\xB1\xE5\x1F\xFE\xBD\x0A\x2C\x3C\x43\xC3\xD5\x8B\xC9\xB9\xAE\x88\x28\x1D\x3E\x2B\x30\x30\xD0\xEE\xED\x44\x6E\x77\x33\xDC\xDA" + + "\x4D\xA8\xC3\xF0\x2E\xF8\xD8\x5D\x77\xDD\x1D\x4F\x03\xE9\xBC\xE2\x2A\x21\xC3\x74\x80\xE0\x3A\x0A\x5C\x56\xC5\xCF\x1B\xCF\x26\xE9" + + "\x6E\xB9\x17\x66\x72\x0A\xBD\xA8\xA2\xA6\xBC\xB6\xA1\xA6\xA1\x79\x7C\x6B\x7B\x63\x7B\x67\x5B\xE7\x84\xAE\x89\x3D\xDD\xBD\x40\x77" + + "\x52\xDF\x94\xC9\x93\xA6\x4E\x21\x63\x53\xFD\xD3\x67\xCC\x22\xAA\xCB\xD0\x65\xD0\xF2\xE8\x02\x57\x56\x02\x5A\x56\x32\xF3\x8B\xB1" + + "\xDA\x58\x54\xAC\x13\x8E\x63\x79\x01\xF6\x1D\xC4\xF2\x1A\x8D\x99\x47\xA8\xC0\x0E\xA6\xC0\x43\x34\x99\xBE\xD2\x41\xB1\xE7\x27\x8A" + + "\xD8\xD8\x44\x11\x37\xBD\x7C\x22\x9E\x9E\x94\x4A\x40\x25\xCE\x95\x28\xD7\x86\xC3\xAB\x42\x42\x42\x78\xE1\xBD\xDD\xC7\xFD\x96\x6F" + + "\x42\xC7\x32\x18\x0C\x77\xDD\x75\x17\x74\xD8\x60\xB2\xFA\x72\x4B\x4F\x54\x90\xE1\x4D\x1A\x5D\xFB\x00\x3C\x74\xDE\x3F\x03\x95\x9D" + + "\x2F\x19\x7C\x96\x95\xEC\xD7\x9B\x6C\xF8\x14\x7C\x96\xD1\x68\xB4\x7F\x6F\x3A\x4A\xBB\xD7\xA3\xF0\x7B\x45\x22\x11\x5A\x40\x6F\xB4" + + "\x32\x80\x07\x74\xD8\x3B\xCB\xC5\x3B\x56\x5F\x25\x04\xB8\x80\x9C\x0F\xE7\x52\x5F\xAA\xBA\x0C\xDD\x8A\xC2\xF2\xAA\x62\xE4\xBD\xB5" + + "\xF5\xD5\x94\xDE\x96\x8E\x09\xED\x13\xBA\xBB\x7A\x7A\xBA\xFB\x26\xF5\x4E\x99\x3C\x79\xDA\xB4\x29\x74\x4C\x99\x44\xCB\xB3\xFB\x59" + + "\x5A\x2B\x84\xD6\x8B\xEB\xFC\xF9\x0B\xE7\xF3\x25\x45\x97\x55\xE6\x13\x80\xF9\xA1\xA9\x61\x52\xDF\xEB\xC4\xD2\xEC\xE4\x13\x4A\x66" + + "\xFC\x9E\x58\x9F\xC1\x30\xF2\xB7\xB4\x5F\xB0\x32\x92\x05\xB9\x31\x19\xAF\x86\x9E\x93\x14\x1A\x25\x57\xA1\xA9\x75\xAC\xC3\x13\xE7" + + "\x88\xD7\xC3\x5C\xF1\x06\x57\x02\xCC\xE8\x49\x94\xA8\xD4\x6C\x50\xF4\x3B\x99\xF1\xDE\x60\xE3\x19\x8E\x8B\x8B\xBB\xE3\x8E\x3B\x10" + + "\xD9\xEA\xF4\xA6\x81\x51\x2B\x4A\x6F\x0E\x3F\x28\xED\x1D\x9A\xE6\x12\xE3\x41\xA3\xD0\x83\x14\x98\x3F\xE1\xC9\x07\xCF\x78\xBD\x4E" + + "\x6F\xC4\xFB\xE3\x53\xF4\x7A\x3D\x3F\x76\x75\xBB\x1B\xE0\xEB\xD8\x84\x4E\xA5\xA4\xC3\xFE\x51\x31\x71\xE4\x74\x6E\x11\x37\x0D\x93" + + "\x84\xD0\xA5\x6C\x52\x4A\x25\x3F\x8E\xC5\x31\x4C\x43\x68\x56\x01\xBA\xD9\x85\xF4\xB2\x16\xCA\x30\xE8\x2D\xAD\xAA\x2D\xAB\xA9\xAF" + + "\xAA\x6F\x44\xE4\xDC\xDC\xD1\xD5\xDE\x3D\xB1\xAB\xA7\x17\xF4\xF6\x4C\x99\x02\x7A\xA7\xCE\x98\x31\x7D\x26\x51\x5D\xCA\xED\x40\x84" + + "\xCC\x10\x05\xAE\x8C\xD8\x85\x8B\x17\xC2\x16\x2C\x5A\x20\xAC\xB0\xD2\x0F\x4A\xCB\xDB\x30\xDC\xDA\x06\xF3\x4C\x84\x5A\x30\x16\x6D" + + "\xE7\x8C\xD5\x87\x3D\x1D\xE5\x35\x5F\x05\xF6\x9A\x8B\x0D\x80\x31\x7A\x49\x85\x3D\x24\x0C\x7B\xE2\x9C\xF1\x7A\x67\x82\xDE\x19\x6F" + + "\x70\x27\x4A\x94\x04\x60\x95\x4A\xCD\xB7\xF8\xED\x3D\xE4\x5F\xCF\xC6\xFF\x4C\xC6\x30\xB8\xF2\x9E\xF0\x08\xCD\xCC\x2B\x62\xA0\xE6" + + "\x14\x94\xC2\xF8\xA1\xAC\xA1\x0A\xEC\x3B\x7F\x78\x28\xCF\x25\x95\x59\xF9\x25\x9A\x50\x12\xE3\x20\x80\x44\x4F\xC1\x7F\xA2\xFD\xFB" + + "\xD7\xD4\x2A\x35\xF1\xB4\x88\xA8\xD8\xDC\xA2\x8A\x9C\x82\x72\x36\x9A\xC5\xCF\x8A\xA3\xD3\xD7\x07\x54\x77\xC8\x08\x56\x39\x2F\xBF" + + "\x78\x58\x54\x51\x5D\x56\x5D\x0B\x7A\xEB\x9A\x5A\x9B\xDA\x3B\xDB\xBB\xBB\x27\xF4\xF4\xF5\x4C\x9A\xDC\xC7\xD1\x3B\x73\x46\xFF\xAC" + + "\xFE\xD9\xC8\x72\x99\xE4\xF2\x81\x31\xE1\x96\xC7\x95\x37\xEC\x11\xEE\xE4\x00\x06\x5D\x10\xE1\x68\x0B\x31\x16\x4E\x0F\x4F\xF2\x97" + + "\x0C\x6E\xD9\xB9\xD2\x66\xA3\xF5\x01\x1B\x18\xB5\x46\x0E\x6C\x75\xC4\x58\x1C\xDE\x73\xC5\x2E\x76\x8A\x98\xA5\xCD\x5E\x1D\xF6\x18" + + "\x9C\xF1\x46\x77\x22\x31\x4F\xB2\x29\x3E\xD9\x9C\x90\x62\x4E\x48\xB5\x24\xA6\x2A\xA9\x7B\xA1\x77\xB4\xDB\x1D\xF6\xEF\x8D\x57\xD9" + + "\xBD\xBF\x94\x8F\x38\x90\xA4\x05\x07\x07\x23\xC6\x1B\xEB\x3F\xCE\xE6\x8A\xE7\x31\x26\x94\xB2\x8A\xE0\xFA\xB5\x7C\xEF\x75\x30\xC2" + + "\x91\x6A\xF6\x4A\x9E\xE4\xEC\xFC\x12\xBB\x2B\x01\xEF\x86\xF7\xC4\x3B\x5B\x2C\x16\xE1\xC7\x7D\xDF\xDA\x19\x71\x07\x77\xE2\x3D\xCE" + + "\x54\xC8\x9D\x04\x26\x67\x80\x8B\x2B\xEA\x0A\xCB\xEB\x8A\x2B\x6A\x0B\xCB\x6B\x60\x2C\x60\xCE\xF3\xE5\x76\xE0\x8A\x4B\x50\x5D\x58" + + "\x51\x5D\x52\x55\x53\x51\x5B\x57\xDB\xD8\xDC\xD0\xDE\x4E\x23\x67\x24\xBD\x04\xDD\x29\xD3\xA7\x53\xED\xED\x07\xBB\xE0\x76\xEE\xFC" + + "\x79\x73\x17\xCC\x9B\x03\xAD\x1D\xAC\xB1\xCC\x16\x2D\x59\xE4\xC3\x30\xC3\x9B\x29\x33\xA7\xC0\x40\x97\xD9\xF0\x6A\x3C\x04\xE0\x21" + + "\x21\xB4\x9D\x95\x3A\x1F\x80\xC9\x8B\x6D\xDE\xF3\xC6\x60\x95\xA3\x57\x67\x25\x16\x47\xE5\x17\xD0\x1A\x5D\xF1\x30\x90\x1C\x65\xB4" + + "\x84\xC5\xC4\x69\xA3\x75\x28\x43\x63\xE2\xC2\x62\xF4\xE1\x3A\x7D\x98\x4E\x1F\x11\x6B\x0C\xA2\x93\x37\xD0\xB8\xDF\x37\xC7\xB2\x0B" + + "\x7E\x2C\xCF\x95\x56\xAB\x1D\x3D\x9A\x9C\x0F\x17\x89\xA5\x66\xAB\x33\x39\x2D\xCB\x47\x81\xD9\xF4\x3D\x1A\x60\x97\x52\xE3\x92\x64" + + "\x7E\x2E\x31\xCA\xD4\xAC\x3C\x8B\xDD\x25\x96\x90\xF3\x9F\x78\xB7\xD0\xD0\x50\xFB\xE0\x51\xFD\xEF\x61\x23\xA3\x64\x00\xCB\x95\x6A" + + "\xBB\x2B\xD1\xE6\x4C\x70\xB8\x13\x89\x79\x92\x1C\xEE\x24\x87\x27\xD1\x95\x98\x92\x92\x99\x0B\x5C\x0B\xCB\x59\xF0\x5C\x45\x23\x67" + + "\x6E\xE0\x0A\x15\x06\x30\x9E\x65\xA9\x6F\x0D\x9D\xAD\xD1\xDA\xD9\xD5\x39\x71\x22\x22\xE7\x3E\x32\x9D\x0A\x49\x2F\xB4\xB7\xBF\x7F" + + "\xD6\x6C\x2A\xBB\x34\xB9\x5D\x00\x28\xE7\x0B\xF5\x96\x71\x8B\x72\xF1\xD2\xC5\x28\x7D\x30\x1E\x50\x60\x1E\xDD\x61\x19\xD6\x0D\x33" + + "\x43\x6B\x38\x65\x1E\x88\xB4\xED\x43\x14\x9B\xEC\xD1\xB3\x01\x6A\x0A\x30\xB8\x35\x00\x5A\x28\xAD\x33\x5E\x67\xB6\x47\xC4\x1A\x54" + + "\xE1\x91\x32\x95\x26\x48\x24\x0E\x0D\x0B\x87\xC2\x24\x25\x25\xA5\x0A\xB6\x94\x94\x94\x8C\x8C\x0C\x93\xC9\x34\x6A\xD4\x28\x85\x42" + + "\x21\x6C\xEE\xEF\xCF\x26\x94\x44\x76\xC2\x03\x0D\x85\x78\x64\xDC\xB8\x71\xC8\x5A\xC7\x8C\x1D\x1B\x1A\x1E\x69\xB1\x39\xE3\x93\xD3" + + "\x33\x73\x0A\x6F\x70\xF5\x2C\x9E\x4D\x48\x4E\x37\xDB\x5C\x78\xFD\x98\x31\x63\xF1\xB7\x78\x07\xBC\x0F\xDE\x4D\x78\xC6\xE8\xFB\x33" + + "\xC4\xC0\x6F\xFC\xEF\x85\x8F\xC1\xD3\xE0\x6F\xF0\x3A\xF8\x9E\x8F\x2B\xA2\x95\x62\xE3\xF4\xDA\xF0\x88\xE8\x58\xBD\xC1\x62\x77\x27" + + "\xA6\xA4\x66\xE7\xD3\x73\x6F\xEC\xB2\xAD\x4A\xCA\x70\x79\x51\x45\x4D\x69\x4D\x7D\x35\xE8\x6D\x69\x6E\xE9\x68\xEF\x9C\xD8\xDD\xDD" + + "\xD7\xDB\x43\x47\xAD\xA0\xBD\x33\x67\xCD\x22\xF0\xCE\x9D\x37\x0F\xE0\x2E\x58\xB8\x70\xE1\xA2\x45\x8B\x16\x2F\x26\xC5\x22\x46\x2C" + + "\x83\x96\x55\x84\xE6\x23\xC8\x04\x60\x16\x39\xF3\x21\xF4\xB0\x0C\x7B\xCD\x41\xB5\xDA\x4E\x19\xA6\x62\x4B\x5E\x40\x6D\x50\xCC\x6C" + + "\x13\x98\x55\x67\xB5\xC6\xD9\xEC\x7A\xBB\x4B\x6F\xF7\x10\x6E\x1D\x9E\x18\x93\x55\x1B\x15\x03\x62\x43\xA4\xF2\x60\x91\x24\x46\x17" + + "\x9B\x9C\x9C\x5C\x5E\x5E\xDE\xD6\xD6\x36\x77\xEE\xDC\xD5\xAB\x57\xEF\xDD\xBB\x77\xFF\x81\x03\x30\xB6\xED\xD9\xBB\xF7\xC4\x89\x13" + + "\x0B\x16\x2C\x18\x33\x66\x8C\x4C\x26\x63\x53\x38\xBE\x6F\xEE\xC5\x36\x61\x4A\x8C\xBA\xCB\xE5\x42\xC4\x1B\x15\x15\x25\x91\x48\xD0" + + "\x38\xA0\xF1\xEE\xBB\x47\x07\x87\x88\x94\x6A\x6D\x78\x64\x74\xB4\x4E\xAF\x8B\x33\xEA\x8D\x16\x94\x51\xBA\x38\xEC\xC1\x7E\x3C\x8B" + + "\xD7\x10\xE6\xC7\x8C\x91\x4A\xA5\xF8\x5B\xBC\x03\xDE\x47\x78\xBA\xE8\xFB\xDC\xB6\xF0\x2E\xF8\x18\x1A\x07\xFE\x76\xE2\xC4\x49\xB8" + + "\xE2\x81\x03\x07\xA9\x91\x6D\xFF\xFE\x03\x8F\x3F\xFE\xF8\xE2\xC5\x8B\xBB\xBB\xBB\x2B\x2A\x2A\xD2\xD2\xD2\x2C\x16\xAB\x36\x2C\x5C" + + "\x13\x1A\x8E\x16\xB6\x38\xDC\xC9\x19\x39\xD0\x64\x76\xD2\xA8\x72\x3C\xB9\xBA\xA8\xB1\xB5\xB9\xA5\x9D\x03\xB8\x77\xF2\xA4\xC9\xD3" + + "\xA6\x4E\x9B\x31\x83\x26\xBD\xA0\x77\x3E\xD0\x5D\x4C\xB6\x25\x4B\x96\x2C\x5D\x4A\x8A\x25\x8B\x97\xA1\x5C\xBC\x04\x25\xB5\xC5\xB4" + + "\xEE\xC3\x33\xCF\x30\x2A\x7E\x0C\x5D\xDE\x84\x0C\x0B\x49\xE6\xCD\x7B\xDA\x89\xC0\x49\x32\xDE\x01\x13\x3C\xB4\xDB\xC8\x45\x4E\xA4" + + "\x62\x8D\xB3\x83\x5E\x67\xA4\xC1\xA8\x0C\x8B\x0C\x96\xC8\xC6\x05\x81\x59\x29\xDC\xAF\xA0\xA0\x00\x91\xC5\xF4\xE9\xD3\xEF\xB9\xE7" + + "\x9E\xC7\x1E\x7B\x6C\xEF\xBE\x7D\xBB\x77\xEF\xDE\xBA\x75\xEB\x13\x4F\x3C\xB1\x7E\xFD\xFA\x75\x82\x0D\x48\x6F\xDA\xB4\xA9\xAF\xAF" + + "\xEF\xEE\xBB\xEF\x96\xCB\xE5\xC2\xE6\x1E\xE1\x51\xB1\x7D\x47\x37\x86\x31\x9B\xD6\x6B\x34\x1A\x63\x62\x62\x10\x06\xC3\xFF\x02\x03" + + "\x03\xE1\x82\x77\xDD\x75\xD7\x9D\x77\xDE\x79\x07\x3D\x79\x8E\xFA\xD8\xB1\x63\x83\x82\x82\xF0\x2C\x5E\x83\x57\xE2\xF5\xEC\x0F\xF9" + + "\xF7\xF9\x4E\x6E\x7F\xAF\xAB\x60\x83\x8F\xC1\xD3\xE0\x6F\xF0\x3A\xF8\x9E\xD0\x15\xE1\x99\x1B\x36\x6C\x78\xF2\xC9\x27\x77\xED\xDA" + + "\x05\xB6\x37\x3E\xF1\xC4\x7D\xF7\xDD\x37\x67\xCE\x9C\x8E\x8E\x0E\x28\x50\x42\x42\x02\x42\x48\xA9\x5C\x09\x7D\xB6\x3A\xDC\xD9\xF9" + + "\x45\x08\x9E\x5B\x3A\xDB\xDA\xBB\x3B\xBB\xFB\xE8\x44\xAB\xA9\x53\xA6\xCD\x98\x3E\xA3\x7F\x26\x19\x67\x5E\x08\x7A\x17\x82\xDD\xA5" + + "\x64\x5B\xB6\x6C\xD9\x72\xFA\xFF\xA5\x4B\x96\x2F\x15\xD2\xCB\x03\x2C\xB4\x41\x00\x47\x99\x2D\xB0\x68\xB3\x75\x28\xC3\x10\x5B\x0E" + + "\x66\x41\x80\xED\x1D\xEB\x42\x69\x25\x02\xEB\xB5\x18\xAB\x85\x21\x2D\x51\x2A\x25\x0A\x85\x48\x26\x13\xC9\x65\x21\x32\xA9\x7F\x60" + + "\xE0\xE8\xB1\x63\x55\x6A\x75\x72\x4A\x4A\x63\x63\xE3\xCC\x99\x33\x11\x29\x3C\xF8\xE0\x83\x00\x75\x27\xDD\xD0\x1C\x1B\x37\x6E\x44" + + "\xD3\x00\x63\x74\x6F\x1B\xE8\x86\x3D\x7C\x05\xFB\xB7\x6D\xDB\x36\x75\xEA\x54\xE4\x69\x68\xDC\x1B\x2B\xB0\x6D\x30\xB1\xC2\x57\x7E" + + "\x57\x67\xE4\x3B\xE8\x06\x15\xF5\x78\x3C\xF1\xF1\xF1\x64\x7E\xB8\xC3\x61\xA3\x73\x30\x4D\xDE\x0D\x75\xD2\x0E\xF4\x65\x78\x0D\x5E" + + "\x89\x0A\xFB\xC3\xDB\xFD\xF5\x6F\xC9\xC6\x9C\xE4\xC6\xFE\x30\xAC\xE7\xE0\x0F\xE1\x63\xF0\x34\xF8\x1B\xBC\x0E\xBE\xB7\x91\x6E\x42" + + "\x9F\x84\x97\x62\x3F\x83\x79\xCB\x96\x2D\xDB\xB7\x6F\xDF\xBD\x67\xCF\x96\x27\x9F\x5C\xB5\x6A\x15\x18\x44\x6E\xDB\xD0\xD0\x80\xD0" + + "\x3B\x2C\x3C\x5C\x24\x16\x6B\xB4\x5A\xB3\xD5\x6C\xC7\x37\x72\x39\xDD\xF1\x9E\xA4\xE4\xE4\xFE\xD9\xB3\x90\xF4\x2E\x58\x44\xC4\x97" + + "\xA3\x77\xF9\xF2\xE5\xCB\xEE\x59\x06\x7A\x97\x2D\x5D\x0C\xC3\x7F\xCB\x97\x0E\x85\xD6\x87\x5E\x2E\x84\xE6\xE8\x35\xDB\x88\x59\x48" + + "\x19\x63\xB1\x79\x43\x65\x82\x2E\xA1\x97\x54\x84\x03\x5D\x36\xAA\xC0\x16\xAA\xBA\x9C\x71\x0F\xED\x36\x84\x67\x70\x8E\xF1\xE3\xC7" + + "\xD7\xD4\xD4\xD4\xD6\xD6\xF6\xF4\xF4\xE0\xEB\x3D\xF0\xC0\x03\x6B\xD7\xAE\xDD\xBC\x79\xF3\x8E\x1D\x3B\x20\xB3\xA8\xA0\x39\x58\x43" + + "\xF8\x40\xBB\x71\xC8\x36\x42\x80\x85\x47\x88\x3F\x18\xEC\x21\xA2\xC4\xE8\xE8\x68\x95\x4A\x85\x3F\x47\x86\x03\x15\x42\xF4\x28\xFB" + + "\x6E\x6D\x52\xEF\x86\xBA\xDC\xBB\x29\xBC\x1B\x7B\x38\xF4\x95\xDF\xA5\x8D\xFD\x22\xF6\x63\x71\xAC\x71\xC4\xD9\x44\x6E\xA1\x27\xD8" + + "\xAE\x9F\xE1\xDF\x18\x60\xE1\xE6\x03\x33\x73\x63\xD4\xE1\xD5\xF8\x13\x78\x38\x2A\x6B\xD6\xAC\x81\xCF\xC3\xF3\x27\x4E\x9C\x58\x56" + + "\x56\x56\x52\x52\x02\x89\x46\xA4\x03\x3A\x66\xCF\x9D\xC3\x00\x66\xF2\xBB\x8C\xF2\x7B\x0F\x0A\xE8\x2F\xE2\x68\x1A\x45\x2F\x1E\xAC" + + "\xBA\x03\x83\x58\x4B\xA8\x09\x01\x8E\x34\x59\x22\x4D\xD6\x28\xB3\x3D\xCA\x64\x8B\x86\x99\x1D\xD1\x66\x3B\xE5\xD9\x4E\xC4\xD6\x6C" + + "\x87\x45\x83\x5E\xB3\x4D\x07\xB3\xD8\x63\xCD\x14\x63\x1B\x57\x12\x29\xB6\x0D\x7A\x88\xAF\xD8\xDC\xDC\x0C\x5D\xC5\x0F\xC3\xEF\xC4" + + "\x8F\x79\x72\xEB\x56\x74\x54\x90\x5C\x06\x2D\x4F\xAC\x8F\xD2\x5E\x6F\x1B\x09\xC0\xFC\x43\x76\x6C\xD8\x6B\xE2\xE2\xE2\x94\x08\x07" + + "\x24\x12\x44\x8F\x88\x1B\x11\xB4\x77\x76\x76\x22\x68\x47\xAE\x81\xB8\x9D\xB4\xDA\x77\x77\x5B\x3E\xDC\x76\xBB\xBF\xD4\x2D\xDC\xD8" + + "\xAF\xC3\x91\xC5\xF1\xC5\x51\xCE\xCF\xCF\xD7\x6A\xB5\x38\xEE\x38\xFA\x80\x19\x9E\xC0\xC2\x0D\x21\xBA\xC3\xBA\xD0\x48\x00\xBE\x1E" + + "\xCC\x3C\xCF\xD8\x03\x6F\x87\xCF\xF3\x5A\x85\xF7\xC1\xC3\xA6\xA6\x26\xD0\x31\x77\xDE\xDC\x85\x44\x7E\x17\x2D\x85\xDC\x2E\x5B\x0A" + + "\x70\xEF\x59\xBE\x74\xC5\x32\x48\xF0\xD2\xE5\xCB\x96\x92\x50\x7A\x39\x89\xA5\x97\xD2\x64\x78\xF1\x92\xC5\xAC\x5C\xBC\x78\xD1\x62" + + "\x60\xBC\x78\x21\x19\xEC\x02\xBA\x8B\x16\xD0\x37\x59\xE8\x17\x61\x34\x47\x1A\x2D\x91\x66\x47\xA4\xC9\x11\x6D\x22\x65\xA4\xC9\x16" + + "\x65\xB4\x45\x1B\xED\xD1\x46\x2A\xC8\x04\x5D\x70\x0B\xB3\x82\x5E\x54\x74\x10\x6A\x9B\x35\xDA\x66\x23\x66\xE5\x4A\xB2\x13\x75\xAB" + + "\xF5\x27\x3F\xF9\x89\x10\x60\xE1\xCF\x13\x6E\x37\x6E\x97\x7F\x58\x81\x6D\x34\x27\x8C\x8D\x8D\xC5\x91\x0B\x0E\x0E\xC6\x8B\x71\x5C" + + "\x4F\x9F\x3E\xFD\x86\x77\xBB\x72\xE5\xCA\x9B\x3F\x6C\xDF\xDD\x0D\xC7\x97\x3F\xD6\xA7\x4E\x9D\x02\xD8\xF0\x01\x78\x02\xF4\x19\x5E" + + "\xE1\xA4\x39\xFF\x57\x54\xE0\x1B\xC0\x7C\x3D\x3F\x07\x0B\x20\x02\x5C\x80\x8E\xF9\xF3\xE6\x2E\x5E\xB4\x70\xC9\xE2\x45\x08\x96\x97" + + "\x2F\x5B\xB2\x62\xF9\x92\x7B\x97\x2F\x86\xDD\xB3\x7C\x31\x85\x19\x92\x0C\x59\xE6\xC4\x78\xC9\x12\x0A\xEF\x62\x32\x48\xBD\x64\x09" + + "\x57\xC1\x9F\x2F\x82\xFA\x2E\x22\xE6\x47\xE8\x35\x5A\x23\xCD\xF6\x48\xA3\x93\xD2\xEB\x88\x62\x06\x80\x4D\xCC\x88\x0E\x13\xF9\x35" + + "\x31\x80\x49\x8C\x0D\x68\xA3\xAC\x8C\x58\x0E\xE0\x18\x0B\x27\xC2\xE8\x63\xD0\xD3\xA0\xBF\x61\x71\xC5\x8D\xC3\xE3\x9B\x02\x30\x3B" + + "\x1E\xFC\x45\x61\xE8\x71\xD1\xF5\xA6\xA7\xA7\x1F\x38\x70\xE0\xBD\xF7\xDE\x7B\xEB\xAD\xB7\x2E\x0B\xB6\x7F\xFA\x61\xFB\xAE\x6F\xC2" + + "\xC3\x8D\xA3\x0F\x1F\xD8\xB7\x6F\x5F\x5A\x5A\x9A\xBF\xBF\xBF\x5A\xAD\xF6\xB9\x10\xF5\x26\x02\xEC\x03\xB3\x10\x69\xA1\x02\x2F\x98" + + "\x3F\x6F\xE1\xC2\x05\x8B\x08\xC3\x0B\xC1\xF0\x3D\xCB\x08\xBA\x84\xDE\x65\x8B\x09\xB4\xC4\x50\x59\x3C\x80\x2B\x51\xDD\x85\xE4\xE1" + + "\x12\x56\x67\x0A\x4C\x76\x12\x05\x8E\x34\x9A\x23\x08\xC3\xF6\x08\x6A\x91\xC4\x1C\xB4\xB4\x46\x32\x1D\x36\xD1\x88\xDA\x64\x8B\x35" + + "\x59\x62\x4D\x50\x63\x92\x30\x47\x59\x6C\x91\x34\x61\x46\x25\x8A\x8D\x7E\xB1\x61\x30\xAB\x6D\xA8\x02\x7F\xC5\xED\xC6\x00\xDB\xBC" + + "\x73\xD0\x59\x3D\x24\x24\x04\xAF\x59\xB9\x72\x25\x0E\x1B\xFA\xE0\x4B\x97\x2E\xBD\xFE\xFA\xEB\xEC\xA0\x0E\x3D\xBA\x3F\x6C\xDF\xC9" + + "\x8D\x3F\xD0\x28\x71\xF4\xE1\x03\xF0\x84\x77\xDF\x7D\x17\x5E\x01\x1D\x16\x89\x44\xC2\x1E\xDF\xC7\x91\x6E\x16\xC0\x3E\x9B\x8F\x02" + + "\x2F\x5C\x30\x1F\x0C\x2F\x5E\xBC\x60\xE9\x52\x4E\x87\xA9\x21\xA2\x5E\xCC\xE8\x65\x00\x7B\x19\x5E\xE8\xAB\xC0\x40\x77\x11\x31\x54" + + "\xFC\xC2\x29\xC0\x11\x46\x47\xB8\xD7\xBC\x30\xDB\x00\x30\x74\x38\x8A\x54\xAC\x28\x11\x4B\x47\x1B\xAD\x34\x4F\x06\xB4\xD6\x41\x00" + + "\x9B\x6D\xDC\x48\x98\xE5\xEB\x06\xD8\x2E\x98\xEE\x8F\x48\x49\xA3\xD1\xEC\xDE\xBD\xFB\xC3\x0F\x3F\xBC\x70\xE1\x02\x0E\xDE\xE5\x1F" + + "\xB8\xFD\x1E\x6F\xFC\xA1\x87\x27\xC0\x1F\xE0\x15\x3B\x77\xEE\x84\x08\xA3\x97\xE7\x45\xF8\x16\x29\xB0\xCF\x26\x04\x18\x39\xF0\x7C" + + "\x0E\xE0\x85\x4B\x09\xBD\x44\x7E\x97\x2D\x5D\x82\x92\xA2\xBB\xC4\xCB\xF0\x12\x1E\x63\x8A\xEE\x42\x21\xC0\x0B\xC9\xFC\x0F\x22\xE3" + + "\x7E\xE1\x06\x4B\x98\xC1\x12\x6E\xB4\x87\x51\x7A\x49\x69\xB0\x45\x18\xEC\xE1\x06\x8E\xE1\x48\x06\xB0\xC9\x8A\x94\x98\x94\x80\xD6" + + "\x6C\x8B\x34\x23\x6D\xB6\x46\x99\x11\x7B\x5B\x59\x25\xDA\x7B\x2E\x0A\x5F\xD1\x27\x84\xDE\xF8\x15\xE2\xE7\x2F\x05\xD8\xE6\x9D\x99" + + "\xA4\xA2\xD3\x92\x70\x84\xDE\x7F\xFF\x7D\x1C\x2D\xFE\x10\xDE\x56\x17\xFA\x61\xBB\xFD\x1B\xEF\x03\xF0\x0A\xF8\xC6\x8E\x1D\x3B\x90" + + "\x61\x01\x63\xE7\xE0\xB5\x0A\x6E\x3A\xC0\xC2\x28\x9A\x0F\xA1\x41\x07\x99\xFE\x3C\x7F\xDE\x82\x05\xF3\x17\x2D\x5A\x00\x26\xA9\x02" + + "\x73\xB6\x6C\xD9\x12\x3A\x2E\x4D\x02\x69\x2E\x0D\xA6\x24\xDF\x48\x81\x43\x0D\x96\x50\x23\xCC\xA6\x35\x38\x42\x0D\x76\xAD\xD1\x1E" + + "\x6A\x04\xBD\xB6\x30\x83\x8D\x90\x6C\x84\x59\x19\xC3\xC8\x96\xA3\xC8\xF8\x96\x35\xD2\x44\xA0\x8D\x30\x73\x95\x48\x56\x21\xCF\x12" + + "\xBC\x59\x0E\xBC\x79\xF3\xE6\xF5\xEB\xD7\x3F\xEE\xDD\xBE\x4A\x32\x7C\x03\x80\xF9\x34\x46\xAF\xD7\xFB\xF9\xF9\xCD\x9F\x3F\x1F\x91" + + "\xD2\xC5\x8B\x17\x87\x4D\x87\x7E\xD8\xBE\xB7\x1B\xEF\x0F\xF0\x0D\x78\xC8\x9C\x39\x73\xE0\x2D\x06\x83\xC1\x3E\xF8\xDC\xD2\x57\x07" + + "\x78\xD8\x41\x69\x6C\x60\x01\x44\xB0\x1C\x78\xE6\xAC\x99\x73\xE6\xCC\x9E\x3B\x6F\xCE\xFC\x05\xF3\x18\x84\x4B\x96\x90\x11\xE9\xA5" + + "\xAC\xF4\x42\x2B\xC8\x87\x97\x78\xB9\x5D\x24\xCC\x8A\xE9\xDF\x2E\xF2\x23\xF4\x1A\x6C\x04\x5D\x83\x9D\x96\x94\x64\x23\xF6\x58\x43" + + "\x19\xC3\x06\xAB\x90\xE1\x48\x0A\x70\xB8\xD9\x16\x01\x1D\x36\x41\x8A\x69\xC5\x1B\x66\x47\x9B\xED\x2C\x84\xDE\xBA\x75\x2B\x0B\xA1" + + "\xB7\xD2\x0D\xDF\x9E\x9D\x46\x1A\x76\xA4\xEE\xC6\x60\xDF\x58\x81\xD9\xA2\x33\x62\xB1\x18\x7D\xEA\xAB\xAF\xBE\x8A\x6C\xE7\x07\x6E" + + "\x7F\xD8\xAE\xB7\xC1\x37\xE0\x21\x67\xCF\x9E\x65\xE7\x17\xE1\x39\x3E\x13\x48\x47\x08\xB0\x0F\xA8\x43\x9D\x19\xDE\x0E\x9F\x67\xCE" + + "\xBF\x91\x86\xD0\xA8\xB0\x10\x7A\x3A\xBD\x88\x70\x16\x65\x78\x81\x37\x96\xA6\x33\xA1\x49\x90\xCC\xC2\x66\x61\x26\xEC\x1D\xD0\x62" + + "\x21\xF4\x42\x5E\x7E\xD9\x1F\xFA\x69\x8C\x16\x2D\xE4\xD7\xE8\xF0\x9A\x5D\x63\xA4\x3A\xAC\xB7\x01\xE3\x30\x23\x61\x38\xCC\x68\x0D" + + "\x27\x66\xA3\xD9\xB2\x2D\xDC\x68\x09\x33\x21\xEA\xB6\x90\x87\x26\x2A\xBF\x20\x19\x6C\x43\x9F\x4D\x24\x84\x0E\x08\x08\x60\xCB\xF0" + + "\x06\x87\x84\xA0\xA5\x12\x12\x12\x5A\x5A\x5A\x96\x2F\x5F\x8E\x5F\xB5\x69\xD3\x26\x56\xB2\x6D\x58\xAA\x7D\x60\xBE\xB1\x02\xE3\x00" + + "\xB8\xDD\xEE\x51\xA3\x46\xD5\xD7\xD7\xB3\xC3\xF3\x83\xF6\xFE\xB0\x0D\xBB\x31\xC7\x80\x87\x20\x25\xAE\xAE\xAE\xBE\xE3\x8E\x3B\xE0" + + "\x39\xC2\xEB\x37\x6E\x0C\xF0\xF5\xA0\x65\xB8\xF2\xFE\xCC\xCA\x7B\xEE\xB9\xA7\xB5\xB5\x35\x31\x29\x09\xFE\x8F\x94\x5B\x2A\x95\xA2" + + "\xBF\x08\x0C\x0A\xFA\xE9\x4F\x7F\x3A\x65\xDA\xF4\x69\x33\x67\xB0\xA5\xEA\xE6\xCC\x9D\x33\x6F\xDE\xDC\x79\x6C\x58\x6B\xC1\x7C\x9F" + + "\xF1\x2A\x41\xCC\x3C\x8C\x02\xB3\x17\xFB\xA9\x0D\x36\xB5\xD1\xA6\xA1\x77\x00\x44\xA9\x31\xD8\xC9\x43\x88\xB0\x1E\x11\xB5\x2D\xCC" + + "\x04\x7A\x91\x1E\xDB\x29\xCC\x04\xE3\x08\x03\x01\x38\xD4\x68\x0E\x33\x9A\x39\x86\xA9\x2C\x93\xD0\x9A\x4A\x74\x84\xDE\x1C\x65\x30" + + "\x47\x21\xA2\x26\x66\x8D\x8C\x35\x2A\xB5\x61\x62\x99\x3C\x30\x38\xD8\xDF\xDF\x3F\x4E\xAF\x2F\x2E\x2E\xEE\xEF\xEF\x7F\xE4\x91\x47" + + "\xD6\xAE\x5D\x8B\x06\xC2\x0F\xDE\x4A\x67\x7A\xA0\xB2\xD1\x3B\xD3\x43\xB8\xAD\x5B\xB7\xEE\xC9\x27\x9F\x9C\x32\x65\xCA\xD0\xB9\xD0" + + "\xFC\x40\x22\x22\xA2\xB9\x73\xE7\x5E\xB9\x72\xE5\x07\x7A\x7F\xD8\x6E\xB0\x31\xF7\x80\x9F\xCC\x9E\x3D\x1B\x3E\xE3\xE3\x45\xCC\xB5" + + "\xD8\x5C\x68\xF8\x1B\xBC\x0E\xBE\x37\xD4\x21\x19\xB1\x78\x96\xF9\x2D\x18\xC6\xCB\x56\xAD\x5A\xB5\x60\xC1\x82\xDA\xDA\x5A\x87\xC3" + + "\x09\xDD\x02\xAB\x61\x11\x91\x76\x97\xBB\xB0\xB4\x74\x7C\x73\x73\x53\x6B\x5B\x6B\x47\x47\x1B\xB9\x9D\xD1\xC4\x49\xF4\x8A\xC2\xE9" + + "\x33\xA6\xCF\x9C\xD5\x3F\x73\xF6\xAC\xD9\xB3\x91\x14\xCF\x9A\x37\x77\x0E\x39\xBD\x44\x05\x99\xC5\xD5\xBC\xD8\xF2\x7B\x84\xFB\x79" + + "\x63\x00\xDB\x07\x00\xF6\x56\xB4\x34\x1F\x66\x46\x32\x64\x6A\xA1\x44\x90\x2D\x20\x99\xC2\xCC\xE8\xB5\x32\xF3\x0E\x77\x91\x49\x20" + + "\x24\x96\xA6\xE7\x90\x63\xCC\x8E\x58\xB3\x43\x47\xC6\xA8\x2D\x31\x66\x6B\x94\xC1\xA4\x8E\x88\x14\xCB\x15\x63\xFC\xC7\xFD\xF4\xCE" + + "\xBB\x14\x2A\x55\x5A\x5A\x1A\x7E\xD4\xB2\x65\xCB\xEE\xBF\xFF\x7E\x76\xD1\xC2\xF6\xED\xDB\xB7\x6D\xDB\xBE\x75\x2B\xBA\xBF\xED\xCC" + + "\xB6\x6C\x79\x72\xEF\xDE\x7D\x60\x1E\xFD\xA2\x6C\xF0\xD5\x48\xAC\xB4\x58\x2C\x38\x18\x48\xF9\xDF\x7A\xEB\xAD\x1F\x00\xFE\x61\xBB" + + "\xC1\xC6\xDC\x03\x7E\xB2\x64\xC9\x12\xF8\x0C\xBF\x7A\x81\x50\x81\xE1\x63\xF0\x34\xF8\xDB\xBE\x7D\xFB\x40\xE9\x76\xEF\x46\x3C\x72" + + "\xFB\x76\x36\x53\x12\xDA\xF3\xD0\x43\x0F\x21\xA8\x9C\x3C\x79\x72\x49\x49\x89\xDE\x60\x18\x17\x10\x38\x2E\x20\x40\x1B\x16\x61\x71" + + "\x38\x33\xF2\x0B\xE9\x7D\x06\xEB\x2A\xEB\x1B\x6B\x1B\xC9\xCD\x41\x1B\xDB\x3B\x5A\x3B\xBB\xDA\xBB\xBB\xE9\x7A\x3A\x7D\x93\xB8\xAB" + + "\x82\xA7\x4D\x9F\x89\x78\x7A\x26\x8D\xA8\x67\x91\x2B\x1C\xA8\x1A\xCF\xA7\x43\x5C\x0C\x66\x94\x0B\xBC\x54\xB3\x92\x37\x6E\x14\x9A" + + "\x29\xB0\x8A\xBB\x0D\xAF\xCD\x7B\x3F\x5E\xBB\x86\x82\x4D\xD9\x06\xBA\x16\x92\x1B\x93\x81\x2E\x6B\xA8\xDE\x4C\xC7\xBD\x08\xC3\x11" + + "\x4C\x93\x07\x06\xAB\x39\xA3\xB3\xB8\x60\x64\x6A\x17\x00\x8E\x21\xA1\xB5\x85\x32\x4C\x26\x6C\xC5\x5A\x6D\x64\x41\x2C\xAB\x23\x4C" + + "\xA7\x97\xAA\x34\x01\x41\x21\xA3\xC7\xF8\x4B\xA4\x32\xB7\xC7\x83\xC0\x66\xFA\xF4\xE9\xEC\xFA\x48\x7A\x89\x24\xD9\xD0\xB1\x21\x20" + + "\x69\x68\x68\xB8\xF3\xCE\x3B\x7D\x14\x98\x3F\xA1\x87\x83\x81\x43\xF2\xE6\x9B\x6F\x5E\xFE\x61\xE4\xF9\x87\xED\xFA\x1B\xF3\x0D\xF8" + + "\x09\xFC\x0A\x3E\x23\x9C\xCE\x21\x54\x60\x78\x1A\xFC\x0D\x5E\x07\xDF\x63\x4E\xC8\x1C\x12\x9E\x39\x63\xC6\x8C\xC6\xC6\xC6\x8C\x8C" + + "\x8C\xA8\xE8\x98\xA0\xE0\x10\xB1\x54\x1E\x11\xAD\x73\x25\xA6\x64\x17\x96\xE5\x97\x91\x55\xEC\x50\xD2\x85\xEC\xC8\x72\x1C\xE5\xB5" + + "\x64\x35\x2C\x30\x5C\xD7\xD2\xD6\xD8\xDA\xDE\xD2\xDE\xD1\x3E\xA1\xBB\x93\xAC\x68\xD7\xD7\x0B\xF4\xA7\x92\x7B\xA5\x4C\x9D\x3E\x8D" + + "\x5C\xA2\x44\x16\xA3\x9C\x35\x7B\x0E\x51\xE3\xB9\x73\xE7\xCC\x25\xA1\xF5\x1C\x90\x0C\x9B\xC7\x52\x65\x1E\x69\x4A\x35\x5F\xFA\x29" + + "\x0D\xA0\xD7\xAE\x32\x3A\x55\xDC\x7D\xB4\xE9\xAD\xB4\x07\xCC\x06\xC2\x09\xCC\x84\x67\xAB\xC6\x60\xD5\xEA\x01\x33\x1D\xB8\x26\x27" + + "\x9F\x58\x6E\xCC\x31\x4C\x87\xAC\xA9\x08\x1B\x98\x0E\x13\x8C\x63\x08\xCF\x56\x02\x30\x61\xD8\xCA\x18\x86\x26\xC7\x7A\x17\xD6\x31" + + "\xD8\x3D\x46\x67\x62\x94\xDE\xA2\x0A\x8B\x12\x49\xE5\x01\xC1\xA2\x60\x11\x9A\x45\x89\x7F\x12\x99\x42\x22\x57\xA0\x22\x57\xAA\xFD" + + "\xC7\x05\xD0\x45\xED\x06\xAD\xC8\xC1\x87\x40\xBC\x02\x5F\xFE\x01\xE0\x1F\xB6\xEB\x6F\xCC\x37\x78\x05\x16\x06\xCF\x7C\xC9\x56\xE4" + + "\x08\x0C\x0A\xD6\x86\x47\x28\xD5\x1A\xB5\x46\xAB\xD6\x86\xAA\x34\x5A\x4D\x68\x38\xFC\x50\x46\xAE\x16\x8C\x32\xDB\x5D\x29\x99\xB9" + + "\x45\x64\x9D\x9D\x9A\xC2\x72\xEE\x86\x52\xE4\xD6\x2A\xA5\xE5\x00\xB8\xA0\xAC\xB2\xB0\x82\x58\x69\x75\x4D\x45\xDD\xF8\xAA\xF1\x8D" + + "\xB5\x4D\x2D\xF5\xCD\xAD\x0D\x60\x98\xDC\xBE\x6C\x42\x67\xF7\xC4\xEE\x9E\xDE\x9E\xBE\x49\x7D\x93\x27\x4F\x9A\x42\x6E\xC2\x40\x97" + + "\x83\x9E\xC9\x6E\x98\x32\x6B\x56\xFF\x1C\x42\xF2\x6C\x86\x31\x2A\x4C\x96\x99\x32\x33\xE3\x79\xF6\x53\xE8\x6D\x94\x61\x87\xD2\xC0" + + "\xE8\x75\x28\x89\x20\x13\x7A\x55\x64\x3F\x45\x57\xCF\x00\xB6\xA8\x09\xC0\x84\xE1\x50\x76\xF6\x58\xC0\x70\xA4\x81\x1A\x13\x61\x83" + + "\x37\x9C\x36\xD8\xA2\x61\x46\x22\xBF\x3C\xC0\x8C\x61\x44\xD7\x3A\x8B\x23\xC6\x42\x2E\x96\x88\xB5\x92\x3B\x95\x1A\x1C\x09\x26\x57" + + "\xA2\xD9\x95\x14\x67\x25\xAB\x4C\xEB\x6D\x64\x99\x3B\xA3\x3D\x1E\x84\x5B\x3C\xC9\x12\x85\x8A\x01\x2C\x5C\x13\xEB\x07\x80\x7F\xD8" + + "\xFE\xAE\xED\x4B\x01\x46\x08\xCD\x56\xA5\x0C\x8D\x88\xCA\x2E\x2C\x4D\xCB\xC9\x27\x37\x79\x27\x37\x8B\xA6\x37\xF5\x2D\x28\x29\xAC" + + "\xA8\x2B\xAA\xA8\x2D\xA2\x65\x01\xB9\x89\x14\x5B\x55\xA7\x8A\xDE\x11\x0E\x75\xA2\xC0\x94\x61\x52\x16\x57\x54\x97\x55\xD5\x56\x40" + + "\x87\xC7\x37\xD6\x34\x34\xD7\x36\x81\xE1\xB6\x66\x12\x4E\x77\x76\x4C\x20\xF9\x30\xC5\x98\x80\x8C\xA0\x9A\x48\xF1\xB4\xA9\x74\xC5" + + "\x8E\x69\x88\xAC\x67\xCD\x22\x24\xCF\xE6\x92\xE4\xD9\xBC\x2C\x53\x1B\xE0\xD9\x4F\x09\x80\xF5\x76\x05\x01\x98\x2B\x99\x81\x5E\xFA" + + "\x94\x55\xA5\x27\x00\xAB\x50\x31\x98\x55\x06\x8B\x5A\x6F\xD1\x40\x84\x29\xC3\xE1\x5E\x86\xC9\xA9\x26\xBD\x25\x82\x9E\x37\x26\x18" + + "\xEB\x29\xC3\x04\x69\x5B\xB4\x1E\xA9\xAF\x25\x8A\x5C\x32\x41\x46\xB6\xA2\x99\x14\x9B\xE8\x8C\x2E\xEE\xFA\x27\x9A\x2D\x9B\x90\x2A" + + "\x3B\xE3\x6C\x9E\x38\x2A\xC8\xC0\x98\x98\x3B\x19\xE8\x5A\x3D\x29\xD6\xF8\x54\x85\x36\xCC\xBB\xA8\x9D\xFD\x07\x80\x7F\xD8\xFE\xB1" + + "\xED\x4B\x01\xC6\xC6\xDF\x4D\x8E\x5F\xF2\x8A\x19\xEA\x05\xE5\xF4\xEE\xC7\xE5\xE4\xE6\x6F\x79\xF4\x46\x70\x79\xA5\xEC\x16\x67\x94" + + "\xE1\x52\x86\x6E\x25\xB9\xE7\x30\x01\xB8\xBC\xB0\xAC\xA2\xA8\x82\xAC\x2C\x0B\x86\x2B\xEB\x1B\x80\x71\x5D\x63\x73\x03\x52\xE2\xD6" + + "\x56\x72\x57\xA4\x8E\x8E\xF6\x2E\x72\x47\xC2\x09\x13\x27\xD2\x1B\x9A\xF5\x4D\xA2\x36\x65\xCA\x24\xBA\xEE\x1D\xB9\x8F\x19\x48\x26" + + "\x69\x72\x3F\x19\xF0\x1A\x8C\x34\x17\x6C\x43\x81\x1D\x0A\x83\x43\x61\x74\xD2\x92\xD4\x95\xCC\x8C\x76\x06\xB0\xB7\xB4\xA8\xF4\x16" + + "\xC2\x73\x9C\x55\x0D\x11\x36\x50\x86\x91\x09\xEB\xAD\xE1\x64\x5C\x9A\x10\xCB\x85\xD3\x14\xE0\x08\x03\x47\x72\x94\x1E\x18\x9B\x23" + + "\xF4\xC6\x08\xBD\x29\xD2\x60\x02\xC6\x91\x06\x0B\x3D\x9F\x4C\x8C\x8E\x54\xB3\x19\xD7\x10\x64\x67\x68\x54\x9C\x54\xA9\x0D\x12\x49" + + "\x83\xC4\xD2\x60\xCE\x64\x28\x43\x24\xF2\xBB\xC7\x8C\x1D\xBA\xA8\xDD\xF7\x0D\x60\xE1\xA4\xEE\x5B\xB7\x5D\xFE\xEE\xB6\xE1\xC8\x01" + + "\x0E\x08\x0C\xD2\x46\x44\xAA\x43\xC3\x10\x39\xF3\xA6\x0D\x8B\xD4\x9B\x6C\x09\x69\x59\x05\xE5\xB5\x74\x8D\xE8\x1A\xB6\xC4\x6C\x6E" + + "\x49\x45\x4E\x71\x39\x5D\x8C\xD2\x6B\x24\x96\x2E\xCF\x2F\x29\x43\xA5\x98\x2E\x2E\x5B\x56\x53\x87\x94\xB8\x66\x7C\x63\x7D\x63\x33" + + "\xB1\xA6\xD6\xA6\xD6\xB6\x16\x72\x57\xD1\xCE\xF6\x2E\x7A\x17\xEF\x9E\x1E\x7A\x33\xE0\xEE\xDE\xBE\x1E\x12\x59\x4F\x61\xAB\xBE\x4F" + + "\x9D\x36\x7D\xEA\xF4\x19\xD3\x98\x32\x73\x48\xF7\xCF\xE8\x47\xCE\x4C\x79\xF6\x93\xE9\x5D\x32\x03\xE8\x75\xC9\xF4\x4E\xB9\xC1\x29" + + "\x33\xBA\x50\x2A\xF5\x0E\x39\x78\x86\x08\x13\x29\x76\x30\x41\x56\xD3\x60\x5B\xC9\x45\xD4\x64\xA0\x8B\xA6\xC7\x76\x36\xE2\xA5\x35" + + "\xD8\xE8\xC8\x16\x9B\xC2\x65\x09\xD7\xC3\xCC\xD4\x4C\x02\x33\xD2\xD2\x12\xC1\x3D\x6B\x09\x8F\x33\x2A\x42\x23\x83\x25\xF2\xD1\x63" + + "\xC7\xDD\x79\xF7\x68\x8D\x36\x34\x2D\x2D\xBD\xA9\xA9\xA9\xBD\xBD\xBD\xCD\xBB\xB5\xB6\xB6\xA2\x93\xCA\xCB\xCB\xFB\xE9\x4F\x7F\x3A" + + "\x74\x10\xEB\xBB\x0A\xF0\xC8\x59\xFD\xEA\x1F\xF4\x35\x7C\xCA\x37\x64\x1B\x09\xC0\xF0\x31\x78\x1A\xFC\x0D\x5E\x07\xDF\xE3\xFD\x10" + + "\x3E\x09\xCF\x4C\x4F\x4F\x8F\x88\x8C\x1C\x17\x10\x28\x12\x4B\xA2\x74\x7A\x77\x62\x6A\x6E\x51\x19\xBB\xC1\x45\x01\x5D\xDA\x8E\xC8" + + "\x6F\x09\x5D\x42\xB0\x84\xAD\xDD\x5B\xCE\xDD\x9F\xA1\xA2\x86\x93\xE2\xBA\x86\xAA\xFA\x46\x92\x18\x37\x36\xD7\x21\xA8\x6E\x6E\x6B" + + "\x6E\xED\x6C\xED\x98\xD0\xDE\xD9\x3D\xA1\x9B\x6C\xE4\xF6\xC0\x3D\x3D\x93\xFA\x7A\x27\x4F\x9A\x44\x6F\x0B\xCC\x46\xBB\xA6\xB0\x12" + + "\x24\x93\x61\x2F\x32\xF2\x35\x1D\x3C\xFB\x49\xF4\x4E\x29\xCC\xE8\x06\xC9\x72\xBD\x5B\x66\x80\xA1\xE2\x94\x33\x86\x8D\x04\x66\xA4" + + "\xC4\x54\x93\x1D\x0C\x66\x5A\x77\x29\xF1\x94\x91\xEE\xA4\xC6\x9D\x4F\xF6\x26\xC9\xDA\x38\x73\x98\xDE\x18\xAA\x37\x6A\x63\x0D\xA1" + + "\x14\xDA\x30\x8E\x67\xB3\x36\xC6\x20\x55\x87\x05\x89\x65\x10\xD5\xBB\x47\x8F\x09\x8F\x88\xCC\xCD\xCD\x9D\x34\x69\xD2\x7D\xF7\xDD" + + "\xF7\xF0\xC3\x0F\xAF\x5B\xB7\x6E\xD3\xA6\x4D\x9B\x37\x6F\xE6\x27\x7B\x6C\xD8\xB0\x61\xE7\xCE\x9D\xE8\x82\xAE\x77\x1A\xE9\x26\x02" + + "\x7C\x63\x6C\x2E\xDF\xE2\x4B\x23\xBE\xF4\xD3\xD9\xF5\xCC\x3E\x97\x34\xB3\x3D\x78\x8A\xBD\xE0\x32\x77\x15\xCE\x6B\xAF\xBD\x76\x09" + + "\xDB\xC5\x8B\x17\x51\xE2\xC1\xEB\x74\xE3\x5F\xC3\xBF\xD5\xD0\x77\xE3\xDF\xE4\x7A\x2D\x70\x8B\x7E\xFE\xD7\xB0\x7D\x29\xC0\xFC\x69" + + "\x24\xF8\x1B\xBC\x6E\x23\x5D\x91\x82\x6D\x6C\x51\x0A\xF8\xE7\x23\x8F\x3C\x02\x5F\xC5\x0B\xCA\xCA\xCA\xAC\x36\x5B\x40\x60\xA0\xFF" + + "\xB8\x00\x6D\x58\xB8\xD9\xE6\x4C\xCB\xCA\x2F\x60\x37\xFB\xE6\x56\xF0\xAD\xE0\x97\xF2\x2D\x2C\xAB\x2E\xA9\xA8\x2D\xAD\xAA\x2F\xAB" + + "\xAE\xAF\xA8\x6D\x84\x55\xD5\x37\x55\x8F\x6F\xAE\x6D\x6C\x1D\xDF\xDC\xD1\xD8\xDA\xD5\x4C\xEE\x32\xDA\xD5\xD5\xD9\x35\xA1\xB3\xAB" + + "\x7B\xC2\x84\x9E\x89\x13\xFB\x7A\x7A\x26\xF5\x22\xB2\xEE\x9B\xDC\x37\x09\x36\xA5\x8F\xDC\x33\x78\x0A\x1B\xBD\x66\x36\x75\xAA\x9F" + + "\xC4\xE8\x92\x18\xDC\x52\x83\x5B\x62\x70\x49\x29\xBD\xBC\x41\x8A\x69\x68\x4D\x4C\xE9\x0D\xAD\x55\x7A\x02\xAD\xC2\xE8\x06\xC3\x0A" + + "\x8A\x31\x7F\xE6\x89\x9E\x85\xB2\xA8\x0D\x48\x92\x4D\x30\xAD\xDE\xA8\x89\x33\x68\x62\xF5\xEA\x98\x38\x65\x78\x4C\x88\x5C\x29\x92" + + "\xCA\x03\x83\x82\x02\x03\x03\x8D\x46\x63\x75\x75\xF5\xEC\xD9\xB3\x57\xAF\x5E\xCD\xAE\x79\x60\x2B\x18\xF0\x33\x2E\x6F\x30\x95\xF2" + + "\x56\x28\xB0\xD0\x3B\x85\x8E\xCE\xB3\xC1\xEF\xBF\xE9\x18\xFB\x74\x0D\xAF\x7B\x37\xEC\xC1\x47\xE3\x17\xBD\x4D\x37\xF6\xD3\xC0\x21" + + "\x80\x3C\x77\xEE\xDC\x99\x33\x67\x9E\x7F\xFE\xF9\x43\x87\x0E\xA1\xC5\x96\x2C\x59\x8C\xC4\x09\x91\x4A\x5D\x5D\x4D\x49\x49\x71\x4E" + + "\x4E\x76\x4A\x4A\x92\xDB\xED\xB4\xD9\x2C\x46\x93\xC1\x68\xD4\xA3\xB4\x5A\xCD\x4E\xA7\x23\x39\x39\x29\x27\x27\xAB\xB8\xB8\xA8\xB6" + + "\xB6\x06\xF9\x17\xBA\xF6\x45\x8B\x16\x3C\xF8\xE0\x83\x68\xF9\xA3\x47\x8F\xBC\xF8\xE2\x0B\xAF\xBC\xF2\xCA\xF9\xF3\xE7\xF1\x29\xCC" + + "\xCB\xF1\xB9\x57\xAF\x5E\x65\x27\xE7\xF8\x2F\xC6\xB3\xFC\x35\x28\xB3\x4F\x8F\x76\xF9\x2B\x77\x1F\x23\x54\xE0\x1B\x4C\xA5\x64\x73" + + "\x24\x9F\x7C\xF2\x49\x36\x85\xE3\xF1\xC7\x1F\x5F\xBB\x76\x2D\x7C\x0F\xE2\xEC\xF6\x78\xC4\x62\x71\x50\x50\xB0\x26\x34\x4C\x17\x67" + + "\x8C\x4F\x4E\xCF\xCE\x2B\xC9\x2D\x2C\xE5\x6F\x25\x57\x58\x5E\x53\x5C\x51\x0B\x8C\xCB\xAA\xEA\xCB\x6B\x1A\xC0\x70\x65\x1D\x18\x6E" + + "\xA9\x6D\x6C\xAB\x6F\x6A\x6F\x68\xE9\x68\x69\x25\x01\x27\xFE\x75\xB4\xB7\x77\x75\x76\x4E\xE8\x22\x24\xD3\xE0\x7A\x62\x0F\x0D\xB0" + + "\xA1\xCC\xBD\xBD\x3D\x7D\x7D\xA0\x9A\x80\x0D\xF3\x83\xF6\x4A\x8D\x1E\x19\x14\x98\x54\x48\x09\x2C\x89\x0E\x1B\xDD\x72\xF0\x69\x70" + + "\xC8\x8D\x4E\x52\x31\x7A\x75\xD8\xC0\xF2\x64\xF2\x14\x03\x58\x45\x95\x99\x9C\x4C\x26\xE3\x5E\x96\xB1\x21\xE2\x71\x21\xE2\x00\x91" + + "\x24\x40\x24\x0E\x14\x4B\xC4\x52\x19\x7E\x15\xF2\x8A\xA4\xA4\xA4\xCE\xCE\xCE\x95\x2B\x57\xB2\xFE\x8C\x9F\x7A\xC6\x13\x7B\xBD\x99" + + "\xA5\xEB\xD7\xAF\xDF\xBA\x75\x2B\x3F\x13\xEB\xA6\x2B\x30\xFF\x7A\xE6\xA0\x78\x93\x6B\xD7\xDE\x85\xD7\x42\xBD\xCE\xD3\x0D\x0E\x4D" + + "\x77\x5E\x43\xC9\xD3\xF5\x15\x9D\xC9\x87\xDB\xD7\xE8\xC6\x7C\xEB\x1A\xDD\xB0\x13\xA0\xBE\xF8\xE2\x8B\x27\x4F\x9E\x3C\x70\xE0\x00" + + "\x3A\xFE\x05\xF3\xE7\x75\x77\x77\x55\x56\x56\xA4\xA6\xA5\x98\x4C\x86\xD0\x50\x8D\x42\x21\x93\xCB\xA5\x4A\xA5\x5C\xA9\x52\x28\x95" + + "\x30\x39\xF6\xB0\x9D\x5E\x93\xC8\x65\x12\x52\x7A\xF7\xB0\x17\x90\x3F\xC1\xEB\x55\xF4\x4F\x94\x72\xB2\x5F\x29\x8F\x88\x08\x43\x5B" + + "\xE6\xE5\xE5\x22\x6E\x5C\xB0\x60\xC1\xE3\x8F\x3F\x76\xF8\xF0\x21\x74\x13\xA0\x1A\x3F\xF9\x9D\x77\xDE\x61\x2D\x70\x99\xF6\x23\x4C" + + "\xD2\x6F\x45\x54\x32\xB4\x33\x7D\x4D\xB0\x7D\xC5\x0F\x1D\x89\x02\xF3\x33\xB1\xE0\x75\x6C\xE5\xBA\x1B\xCF\x79\xE6\xE7\x51\x32\xC7" + + "\x86\x87\x77\x74\x74\xA4\xA6\xA6\xAA\xD5\x6A\xA9\x4C\x86\x00\x33\x32\x5A\x17\x13\x6B\x88\x89\xD5\x47\xE9\xE2\xA2\x62\xE2\x0A\xCB" + + "\xAA\x8A\xCA\x6B\x4A\x2A\xEB\x88\x1A\x53\x92\x81\x71\x55\x7D\x73\x6D\x43\x4B\x43\x63\x73\x43\x53\x63\x73\x53\x53\x73\x4B\x73\x6B" + + "\x6B\x4B\x6B\x7B\x2B\x52\xC9\xF6\x0E\x02\x33\xD2\x64\x62\xDD\x48\x96\x27\x74\x4F\xEC\x86\x91\x62\x62\xB7\x9F\xCC\xE8\x91\x50\x74" + + "\x85\x24\x73\x66\x00\xCC\x6E\xA4\xC7\x0A\x2A\xC5\x4A\xAA\xC3\x0A\xA3\x9D\x8E\x75\x61\x0F\xDB\x4F\x86\xBB\x20\xCB\x08\xA1\x55\x48" + + "\x92\x63\xCD\x3F\xFA\xD1\x8F\xD0\x0A\xF5\xF5\xF5\xD0\xD8\xBA\xBA\xBA\xC9\x93\x27\xAF\x5A\xB5\x6A\xC7\x8E\x1D\xE8\xCF\x98\xC0\xDE" + + "\xA0\x45\xF8\x76\x19\xE1\xC5\x0C\x5F\x1D\x60\xFE\xC5\x70\x0E\x28\x1E\x04\xE7\x85\x17\x5E\x40\xE7\xBA\x78\xF1\x62\x44\x33\x0D\x0D" + + "\xF5\x4D\x4D\x8D\xE8\xF0\xEE\xBD\x77\xC5\xF6\xED\xDB\x81\x13\xFC\x18\x2F\x43\x50\xFA\x0F\x0B\x82\xB0\xBF\x60\x61\x2E\x14\x1E\x6C" + + "\xBC\xF7\xDE\xFB\x78\x0A\x1F\xC1\x70\x9D\x3D\x7B\x16\x74\x32\x31\x31\x3E\x32\x2A\x42\x26\x97\x8A\xC5\x21\x12\xA9\x98\xB0\xA7\x52" + + "\xA8\x54\x4A\x02\x1E\x80\x94\xA1\x83\x0C\x0E\x09\xF2\x0F\x0A\x18\x1B\x12\x34\x4E\x2C\x0A\x94\x4A\x45\x78\x8D\x5A\xAD\xD0\x68\xD5" + + "\xA1\xA1\xDA\xD0\xB0\xD0\xB0\xF0\xD0\xB0\xB0\x50\xD4\xB5\x5A\x78\x94\x12\xCF\xE2\x35\x78\x25\xFE\x2A\x38\x70\x6C\x70\xA0\xBF\x28" + + "\x38\x00\x6F\x22\x93\x8A\xC1\x39\xEB\x0B\x00\x33\x3E\x4B\x24\x0A\xC1\x43\xB4\x71\x45\x45\x19\x72\xAD\x35\x6B\xD6\xEC\xDF\xBF\xFF" + + "\x85\x17\x9E\xC7\xD7\x7E\xFF\xFD\xF7\xF1\x85\xD1\x0E\x43\xA1\xFA\x7B\x5B\x63\xD8\x96\x61\x3D\x1A\xDE\x16\xDD\x28\x1A\xFC\x3D\xEF" + + "\x86\x0F\xC5\x1E\xD6\x6E\xFF\x18\xC6\x23\x04\xF8\x06\x0A\xFC\xA5\xDE\xCB\x24\x1A\x7F\x8B\x08\x1C\x9E\x8F\xDC\xB0\xB6\xB6\x16\x2C" + + "\x80\x08\xBC\x39\xE8\x80\x20\xB3\xDB\xCA\x01\x63\x46\xB2\x57\x90\x1B\x6A\xEB\x1B\x6A\xC7\x8F\xAF\x87\x35\x36\x36\xC0\x9A\x9B\x9B" + + "\x5A\x5A\x1A\x5B\x40\x72\x3B\x44\xB9\x8D\x96\xED\x88\x9D\x3A\x3B\x11\x6C\x77\x52\xF3\x93\x98\xDC\x12\x93\x47\x6A\xF2\xC8\x58\x49" + + "\xD0\x1D\xC0\x58\x41\x75\x98\x0C\x50\x83\x55\xBD\x8B\xA0\x4B\xE9\xA5\x63\x5D\x2E\x05\xF2\x64\x32\xF4\x85\x3D\xF4\xE4\x93\xDE\xAA" + + "\xD0\x99\x7F\xF2\x93\x51\x1D\x1D\x9D\x7B\xF6\xEC\x41\x98\x81\x9F\x01\x18\x18\x84\xC2\x05\x28\x87\x05\xF5\x7A\xDB\xAD\x03\x98\x77" + + "\x02\x50\x04\xCF\x80\xE2\xDD\x7B\xEF\xBD\x59\x59\x99\x32\x99\x24\x38\x38\x50\x0A\xED\x22\x6A\x26\x83\x37\x07\x05\x05\x28\x55\xF2" + + "\xBC\xBC\x9C\x95\x2B\xEF\x3D\x75\xEA\x65\x78\xD2\xDF\xCB\xB0\x50\x58\x58\x24\x8C\xFA\xBB\xEF\xBE\x0B\xBF\x7C\xF5\xD5\x57\xF7\xED" + + "\xDB\xF7\xF0\xC3\x0F\xA1\xA7\x80\x00\xC6\xC4\x44\xE1\xD3\x43\x44\xC1\xF8\x74\x95\x5A\xA9\x02\x51\x0A\xC2\xAA\x38\x24\x30\x28\x60" + + "\x4C\xD0\xB8\x31\xC0\x4F\xA3\x51\xC5\xC4\xC6\x5A\x1D\xCE\xF8\x94\xB4\x9C\xE2\xF2\x92\xDA\xE6\x9A\x96\x09\x0D\xDD\x93\xDB\x26\xCF" + + "\x9E\x30\x73\x61\xDF\xDC\xE5\x53\x16\xAE\x9C\xBE\xE4\x81\x19\xCB\x1E\xEA\x5F\xFE\xF0\xCC\x65\x0F\xA1\x3E\x75\xD1\xCA\xBE\x79\xF7" + + "\xE0\x59\xBC\xA6\x61\xC2\xE4\x9A\xE6\xAE\x92\x9A\xC6\xDC\xD2\xCA\xB4\xDC\xC2\x84\x94\x74\x9B\xCB\x1D\xAB\xD7\x03\x72\x11\xFD\x14" + + "\x50\x8D\x4F\xC4\x4F\x56\x53\x9E\x01\x73\x50\x70\x60\x54\x54\x44\x76\x76\x16\x02\xB9\x87\x1E\x7A\x60\xF7\xEE\xDD\x67\xCE\x9C\x66" + + "\xDF\x9F\xAD\x7C\xF2\x0F\x43\x35\xF4\x58\x00\x51\xBC\x2D\xD0\x45\x77\x86\x5E\x83\x2D\x3C\x0C\x2A\xF6\xEE\xDD\x83\xEE\x15\x81\x3D" + + "\xDA\x9F\x11\x2E\xFC\xDB\x91\x7F\xCA\x57\x01\xF8\x7A\x9B\xD0\xB1\xD9\x3A\x95\xEC\x6F\xD9\x64\x4C\x88\xF9\xDE\xBD\x7B\x11\x81\x8E" + + "\x1A\x35\x2A\x4F\x70\x97\x39\x76\x8F\x48\x82\x31\x42\xEB\xCA\xDA\xCA\xDA\xBA\xAA\xBA\xBA\x6A\x00\x5F\x5F\x5F\x5B\x3F\xBE\x16\x02" + + "\xD2\xD8\x58\x47\x49\x6E\x6C\x6D\x05\xC9\xE4\xFC\x13\xA4\xB9\xBD\xAD\xB9\xBD\xBD\xA5\xAD\xBD\xB9\xBD\xCD\x4F\x62\x49\x90\x98\xE3" + + "\x65\xC6\x78\xA9\x99\x98\xCC\x04\xF3\x70\x46\x45\xD8\x4B\xB2\x8B\xC4\xD2\x54\x72\xE5\x06\x97\x8C\xCB\x96\x9D\x32\xBD\x43\x86\x30" + + "\xDB\x7B\xD2\x58\x19\x67\xF9\xF1\x8F\x7F\xDC\xD8\xD8\x88\x88\x02\x32\x32\x92\x55\x63\x6F\x23\xC0\x97\xBD\x38\x81\xDE\x97\x5F\x7E" + + "\xB9\xB1\x71\xBC\x44\x22\x92\xC9\xA4\x88\x4E\xE5\x52\x11\x04\x2A\x70\xDC\x68\x18\xC4\x4A\x21\x17\x6B\xB5\x1A\x20\x1D\x12\x12\x54" + + "\x58\x98\x8F\xA3\x02\xF7\x82\xD3\x7E\x29\xC3\x3E\x01\x21\xF3\x4E\xFC\xED\x07\x1F\x7C\x80\xD0\x14\x59\xFF\xBC\x79\x73\xAB\xAA\x2A" + + "\xAD\x56\x8B\x58\x22\x02\xB7\x0A\x85\x5C\xAD\x01\xB4\xD0\xDC\x60\x80\x24\x16\x05\x45\x45\x47\x59\x9D\xAE\xE4\xCC\x9C\xBC\xD2\xAA" + + "\xCA\xC6\x8E\x96\xBE\x19\xBD\x73\x97\xCD\x59\xB9\xFA\x9E\x75\xDB\x1F\xD9\x71\xFC\x89\x63\x67\x0E\x9F\xFF\xF0\x99\xAB\xBF\x7B\xFE" + + "\xDA\x1F\x88\xBD\xF3\xFB\x67\xAF\xFE\xEE\xE9\x37\x3F\x7B\xFA\xCA\xA7\x4F\xBD\xF1\xEB\x93\x97\x3F\x39\x49\x4B\xD4\xB1\x07\xFB\xF1" + + "\xEC\xF3\x6F\xFF\x9E\xBD\xF8\x99\xB7\x3E\x3B\x72\xE9\xA3\x3D\x2F\xBF\xB5\xF9\xF8\x2B\x8F\xEE\x3A\xB1\xE2\xB1\x5D\x73\xEF\x5B\xD3" + + "\x33\x67\x29\xF0\x2E\xAA\xAC\x4F\x4A\xCF\xD2\x9B\x4C\xF8\x1E\x41\xE3\x46\x4B\xC4\x41\x2A\xA5\x9C\x08\xB8\x52\x0E\xC5\x17\x89\x82" + + "\x11\xC3\x97\x95\x95\xF6\xF7\xCF\x84\xBB\xA2\xE9\xA0\xC9\xF8\x51\xFC\x0F\xFC\x7B\x49\x16\xD2\xCB\xDE\x07\x6E\x83\xC4\xBE\xB0\xB0" + + "\x00\x87\x37\x2A\x2A\x12\x11\x44\x44\x44\xB8\xD9\x6C\x42\x07\x37\x79\xF2\x24\x04\x74\x6F\xBD\x75\xF5\x32\x8D\x62\xFE\xDE\x6E\xF4" + + "\xF2\xAD\x01\xD8\x07\xE6\x8D\x83\x17\x91\x66\x43\xB3\xE0\x02\x74\x08\xEF\x74\x93\x27\xC0\x98\xBB\x17\x69\x75\x4D\x05\xAC\x06\x30" + + "\xD7\x56\xD4\xD5\x55\xD5\xD7\x57\x02\xE6\x86\xC6\x5A\x4A\x72\x5D\x53\x13\x62\xC2\xBA\xA6\xE6\xF1\xCD\xCD\x0D\xCD\x2D\xE3\x9B\x9A" + + "\xFD\x44\xD6\x04\x31\x18\x36\xC5\x4B\x4D\xF1\x12\x53\x02\x4A\x99\x99\x8A\x30\x2A\x46\x4A\x29\xA7\xC6\x00\x98\xE4\xC3\x14\x60\x27" + + "\x19\xB2\x66\x3A\x4C\xC7\xAB\x49\x56\xAC\xB7\x93\x49\x5D\x71\xC3\xAC\x4A\xF9\x15\xB7\x5B\x04\x30\x3F\x68\x84\x50\x10\x89\x2E\xE8" + + "\x05\x3F\x88\x36\xA5\x92\xE0\x88\x88\x08\xD0\xD2\xDA\x37\xB3\x77\xCE\xD2\xEE\xFE\xC5\x70\xE8\xCC\x82\x52\x04\xA5\xF0\xE3\xB0\x30" + + "\x2D\xB4\x11\x22\xB9\x62\xC5\x0A\xFC\x21\x75\xA0\xD7\xAF\xF7\xA1\x3E\xE8\x42\xA9\xE0\xE8\x08\x00\xC1\xED\xD4\xA9\x53\x0A\x0A\xF2" + + "\xE3\xE2\x74\xE8\x11\x60\x08\x5C\x35\x6A\xA5\x4C\x2A\x02\xB4\x6A\x8D\xC2\x9D\x94\x52\x56\xDB\x0C\xB5\x9C\xFB\xB3\x75\x2B\x1F\xDF" + + "\xFD\xE8\xAE\x93\x1B\x8F\x9E\xD9\xFD\xD2\x95\xA3\x97\x3E\x7A\xE6\xEA\x6F\x9F\x7B\xE7\xF7\xCF\xBC\xF9\xD9\x89\x7F\xFA\x15\x1E\x82" + + "\xDE\xFD\xAF\x5C\xDB\x7B\xFA\xEA\xDE\x53\x6F\x51\xBB\x4A\xEA\xA7\xAF\xEE\x3B\xFD\x36\xB1\x33\x82\xF2\xF4\xDB\xEC\x29\xF2\x1A\xF6" + + "\xE2\xD3\x57\xF7\x9F\x79\xE7\xE0\xAB\xEF\xE1\x4D\xF0\x56\xC7\x5F\xFF\x15\xDE\x16\x6F\x0E\xD4\xF1\x27\x1B\x8F\x9C\x7E\x70\xCB\xA1" + + "\x85\x0F\x6D\xE8\x9D\xB3\xAC\xB2\xA1\x3D\x3E\x25\x1D\xB2\x8F\xAF\x87\x4E\x4C\x4D\xE3\x02\x91\x38\x04\x2D\x86\xA6\xC8\xC9\xC9\xEE" + + "\xED\xED\x7D\xE2\x89\x8D\xE8\xD1\xD0\x31\xF1\x4B\x91\xE1\xA7\x8F\x04\xE3\x7F\xF2\xAE\x7A\x83\x0D\x92\x8E\x90\xAD\xB2\xB2\x32\x3A" + + "\x3A\x2A\x30\x68\x1C\x62\x1F\x9A\x32\x28\xD0\x7D\xA0\x53\x43\x05\x7B\xF0\xA1\x06\x83\x1E\x18\x23\x62\xF2\x1E\x82\xDB\xAF\xC0\x37" + + "\xDE\x84\x4B\xEA\xB0\x9B\xCB\xF1\x37\x70\xF6\x32\x8C\xA0\xBA\xB2\xA4\xA2\xBA\xA4\xB2\x0A\x56\x5A\x55\x5D\x06\xAB\xAE\x29\xAF\xA9" + + "\x2D\x03\xCC\xF5\xF5\x55\xF5\xE3\x01\x73\xD5\xF8\x86\x6A\x18\xE1\xB9\xA9\xA6\xB1\x09\x60\x13\x80\x45\x04\xE0\x44\x89\x39\x51\x6A" + + "\x86\x1A\x27\xA0\x04\xBD\x52\xB3\x47\xC6\x04\x19\x15\x13\x9F\x15\x83\x67\xD7\xA0\x30\x9B\xE8\xB0\x43\xA6\xA7\x27\x8D\xF5\x24\x8A" + + "\xFE\xB6\x00\x7C\xD9\xDB\x7F\x43\x7E\x57\xAE\x5C\x89\x08\x15\xE9\x22\x10\x2A\xAB\x6B\x7E\x64\xDB\xD1\xED\xCF\xBD\x76\xE4\xC2\xCF" + + "\xA9\x88\xFD\xFA\xE0\xAB\xEF\x6F\x39\x79\xFE\xA1\xAD\x47\xC6\x77\xF6\xC9\xE5\x52\x64\x98\x6C\xE8\x08\xE2\xF9\xC6\x1B\x97\x7D\x04" + + "\x47\xB8\x5D\x16\x0C\x8C\x41\x58\x8E\x1F\x3F\x36\x73\xE6\xCC\xDC\xDC\x1C\xBD\x3E\x16\x1F\x07\x6E\x69\xBE\x0A\x6E\x43\xC4\x21\x41" + + "\x16\xBB\xA3\xBA\xB9\xAB\x7F\xC5\x23\x0F\x3E\x79\x70\xC3\xE1\x97\x77\xBD\x78\x05\x88\x02\x57\x48\xE8\xB1\xD7\x7E\x81\x2F\x73\xE8" + + "\xDC\xFB\x60\x95\x70\x78\x8A\xF2\x79\xE6\x9D\xFD\xAF\xC0\xAE\x1D\x38\xFB\x2E\x0C\x1C\x0E\x35\xB6\xFF\x06\xCF\x52\xBB\x86\x37\xC1" + + "\x5B\xE1\x0D\xB9\x37\x3F\xF3\x36\x9E\xC5\x27\x1E\xC7\x17\x78\xEB\x33\x7C\x01\xA8\xF4\x86\xC3\xA7\x1E\x7A\xF2\xF0\x9C\xFB\xD6\xD4" + + "\xB6\xF7\x38\x3C\x09\x12\xE4\xE4\xE2\x60\x35\x1D\x06\x83\x20\xC3\xD0\x19\x21\xC0\x9E\x39\x73\xC6\x89\x13\x27\xF0\x63\x87\x0E\xF8" + + "\x0D\x25\xD9\x67\x24\x0F\xDB\xF4\xE9\xD3\x62\x63\x75\x24\x61\xA1\x82\x8F\xAC\x41\x26\x11\x45\xEB\x74\x16\x87\x23\xCE\x60\x50\x20" + + "\x8F\x10\x05\xA1\x1F\x41\x5E\x83\x4C\xBE\xB2\xB2\xFC\xEC\xD9\xB3\x3C\xC3\x23\x39\xEE\xDF\x08\x80\x05\xF7\x7C\x65\xE6\xBD\x5D\x33" + + "\x99\xBC\x55\x40\xAE\x85\xA8\x28\xAC\xA8\x2C\xAA\x60\x57\x44\x50\xAB\xAE\x29\xA5\x24\x93\xB2\xB6\xAE\xAC\xB6\x1E\x65\x79\x6D\x7D" + + "\x65\x6D\xBD\x9F\xC8\x12\x2F\x22\xDC\x26\x01\x60\x89\x25\x5E\xC2\x31\x9C\x48\xE8\xA5\x26\x27\x18\xBB\x79\x68\xA5\x6C\x80\xDA\x14" + + "\x2F\xF7\xC6\xD8\x72\x32\x6A\xED\x20\x3A\x4C\x00\xFE\x5A\x17\xB5\xFB\x8A\x0A\xCC\xD0\x42\x5A\x65\xB5\x9A\x91\x6D\x8A\x42\x02\xAA" + + "\x5B\x26\x40\x94\x40\xCE\xA1\xF3\x1F\x10\xCF\xA6\x90\xC0\xCB\x0F\x5F\xF8\xF0\xC4\xE5\x4F\x50\xBF\xF7\xF1\xDD\x06\xB3\x45\xA9\x20" + + "\x00\x23\xD8\x5E\xB6\x6C\xC9\xD5\xAB\x57\x7D\x44\x40\xE8\x4C\xE8\x1D\xA0\x48\x50\xA7\xEA\xEA\x4A\x84\x9D\xD0\x10\x70\x2B\x95\x8A" + + "\xA1\x27\xC8\x6C\x65\x52\xB1\x2B\x21\xB9\x73\xFA\x7C\x68\xDD\xE6\xE3\x67\xF7\xBC\x74\xE5\xF8\xEB\xBF\x04\x30\x47\x2F\x7D\xCC\xE3" + + "\x2A\x00\xD5\x97\xD5\xEB\x91\xF9\x0F\x19\xDE\x79\x10\xD8\x84\x6A\x8A\x34\x51\xE9\x73\xEF\x43\xA2\xF1\xC5\x80\xF4\x9E\x53\x57\x9F" + + "\x3C\x79\x6E\xD5\xF6\x63\xBD\x73\x97\x27\x65\x64\x29\xE4\x52\x85\x4C\x82\xDF\x25\xA3\xF9\x05\x2A\x66\xB3\xB1\xBA\xBA\x0A\x11\xE3" + + "\x95\x2B\x6F\xF0\xD7\x87\xF9\xB0\x2A\x3C\x4C\x68\x3D\x34\xD1\xAB\xAF\xBE\x5A\x57\x57\x2B\x95\x89\xF1\x3E\xB4\x8B\x94\x20\x86\xEF" + + "\xBF\xE7\x91\x47\x77\x3D\xF5\xC4\xD1\x33\x9B\x8E\xBF\xB2\xE9\xD8\x2B\x6B\xF7\x3E\x3B\x63\xE9\x83\x76\x97\x07\x54\x23\x5D\x47\x27" + + "\xD8\xD6\xD6\xC2\x77\x94\x23\x3C\xE8\xB7\x1D\x60\xFE\xDE\xEB\x4C\x7E\xBD\xE1\x34\x39\x75\x9C\x57\x52\x9E\xC7\xA6\x70\xB1\x09\xD5" + + "\x94\x64\x6A\x55\xB0\xA2\xAA\xEA\xE2\xAA\xEA\xA2\x4A\x52\x96\x54\xD5\x94\x54\x92\x89\xD6\x50\xE0\x24\xB1\x85\xC8\x2F\x6F\x62\x52" + + "\xC6\x53\x35\xA6\x59\x31\x35\x29\xA7\xC3\x1E\x76\xAA\x89\xCB\x90\x07\x06\xBA\xC8\x50\x16\xCD\x84\xED\xC3\xAE\x0B\xFD\x55\xD2\xE0" + + "\x5B\x04\x30\xA3\x0E\xFD\xF7\xFD\xF7\xFF\x0C\x02\xA2\x54\xCA\xA0\x81\x6B\x76\x3F\x75\xFC\xF5\x5F\xEC\x85\xD7\x52\x6E\x85\xC6\x74" + + "\x09\x80\x6D\x3C\x7C\xDA\x9D\x94\x0A\xC7\x45\x74\x07\x37\xC2\xD7\x63\x69\x9B\x50\x7B\xD9\xD9\xE3\x8B\x17\x2F\x3E\xF2\xC8\xC3\x69" + + "\x69\xA9\xE1\xE1\xA1\x72\x32\x92\x1C\x2C\x97\x01\x5D\x72\xFE\xC6\xEE\x4E\xE8\x9A\xBE\x00\x1E\xB9\xFB\xC5\x2B\x78\x73\x68\x2C\x83" + + "\xF6\x00\x15\xC3\xA1\xBA\x7A\x53\x59\x1D\x91\xF1\x9F\xC8\xB5\x80\xF7\x8B\x1D\x22\x30\x7F\x8C\x76\xC0\x53\x7B\x5E\x7E\xF3\xF1\x43" + + "\x2F\x21\xC6\x46\x37\xC4\x62\x5D\xE0\x07\xAE\xF0\x63\x23\x22\xC2\x32\x32\xD2\x1E\x7E\xF8\x61\x84\xD3\xEC\x74\xFA\xB0\xF4\xBE\xF6" + + "\xDA\x6B\x68\xA8\x73\xE7\x5E\xAD\xA8\x28\xC7\x51\x20\xFD\x9A\x5C\x6A\xB4\x58\xE7\x3D\xF0\x38\x64\x1F\x1D\x07\x5A\x86\x35\x0E\xAB" + + "\x1C\x3E\xF7\xC1\x8E\xE7\x2F\x57\x35\x77\x49\x25\x22\xB5\x46\x85\x10\xE6\xD1\x47\x57\xB1\xA1\xE9\x6F\x88\x02\x6F\x18\x6E\xE1\x0E" + + "\xE1\xBA\xD0\xF9\x3C\xC0\xDE\xFB\xAD\xB3\x29\x1F\x94\xE1\xF2\xDC\xE2\xB2\xFC\x12\x80\x5D\xC6\xA6\x70\x51\x2B\x67\x17\x2A\x52\x71" + + "\xAE\x64\x25\x41\xBA\xAC\xB2\xB8\xA2\xDA\x4F\x6C\x4B\x96\xD8\x92\xA4\x44\x7E\x93\xA4\x96\x24\x09\x67\x89\x52\x42\x75\x02\x34\x59" + + "\x36\xC0\xB0\x9B\x30\xCC\xCC\x1C\xCF\x18\x96\x1B\xBD\xA7\x9A\xF4\x2E\x9A\x09\xDB\x7E\x32\x6A\x54\x7B\x47\xC7\xAE\x5D\xBB\xD8\xAD" + + "\x25\xD0\xF1\x08\x97\xDA\xF8\x07\x60\xBE\x75\x0A\xCC\x18\x2B\x2D\x2D\x81\x1F\x48\x24\x21\x0D\x13\x26\x41\x6D\x40\x2F\x0F\xAD\x4F" + + "\x20\x4A\xC5\xF0\x1A\x08\x87\x20\x38\xE2\x13\x15\xF4\xB4\x2A\xBE\xCE\x89\x13\xC7\xF1\xD1\xEC\x9C\x0A\x9B\xD8\x84\xF4\x0C\xE8\xC6" + + "\xC7\x7B\xC8\x59\x19\x85\x4C\x2A\x09\x81\x21\x8B\x36\x98\xCD\xB5\x6D\x13\x57\xED\x38\xB1\xFF\xEC\xBB\x20\x01\xC2\x0E\xF3\x42\x72" + + "\x6D\xE8\x87\x7E\x43\x8C\xFF\x62\x82\x1E\xED\xDA\x41\x9A\x3C\xE3\xFB\x1F\x3A\x87\x68\xE5\xDD\xD5\xBB\x9E\xAA\x6B\xEB\x35\x98\xCC" + + "\xE8\xD4\x40\x97\x44\x22\x62\x27\xBD\xDC\x6E\xD7\x03\x0F\xDC\x7F\xF6\xEC\x2B\xAC\x65\x84\xA4\x51\xED\x05\xC3\x97\x1A\x1A\xEA\x41" + + "\x2F\x19\xF1\x96\x4B\x33\xF3\x4B\x56\xEF\x7E\x1A\x5D\xC3\xE1\xF3\x3F\xE7\x02\x01\x6A\x07\x98\xA1\xDD\x48\x70\xF4\x5E\x41\x45\xBD" + + "\x44\x14\x8C\x8F\xF0\x78\x5C\x17\x2F\x5E\xBA\x3C\x82\x64\xFB\xD6\x01\xBC\x61\xB8\xB5\xEC\xB0\x87\xAD\x36\x83\xF7\x01\x05\xBB\x77" + + "\xEF\xEE\xE8\xE8\x18\x35\x6A\x94\x10\x60\x7E\x34\x8B\x01\x0C\x05\x66\xF4\xC2\x72\xBD\x65\x6E\x51\x29\xD9\x33\x40\x75\x39\xCF\x76" + + "\x61\x79\x95\x9F\x0C\x00\x5B\x93\xC5\x56\x52\x4A\xAC\x49\x30\xB1\x95\x30\x2C\xB5\x26\x30\x8C\x65\xD6\x04\xA9\x99\x4B\x89\xA5\x26" + + "\xAA\xC0\x26\x8F\xDC\x94\x20\x64\x98\x60\x4C\xE8\x75\x32\x05\x2E\x2D\x2D\xBD\xF7\xDE\x7B\xD1\x46\xCB\x96\x2D\xBB\xEF\xBE\xFB\xD8" + + "\x52\x1B\x3B\x77\xEE\xDC\xB6\x6D\x3B\x7F\xAB\x98\x91\x0F\x50\xDF\x3A\x80\xE1\x52\xA7\x4F\x9F\xD2\xE9\xA2\x11\xCA\xEA\x8D\xA6\x79" + + "\xF7\xAD\xDB\xF6\xCC\x25\x24\x81\x42\x80\xF9\xF2\xF0\xF9\x0F\x90\x16\x32\x8C\xA1\x3F\x8F\xEE\x7C\x2A\x26\x2E\x56\xA5\x94\x89\x25" + + "\x22\xF8\x1F\x1B\xA3\x42\x38\x7D\xE1\xC2\x05\x1C\xC1\xF4\xF4\x34\x12\x27\x23\xBF\xA5\x69\x5B\x64\x54\x24\x0D\x08\x57\x21\xFE\x84" + + "\x8C\x20\xA9\x86\xB6\x0C\xE6\xE1\x46\xC9\xEA\x37\xCA\x86\x90\x4C\xBF\xF3\xB9\xF7\x0F\xBD\x4A\xD4\x72\xCF\xA9\xB7\x66\x2C\x7F\x30" + + "\x29\x23\x3B\x22\x2A\x12\x3F\x5C\x46\x1B\x41\x2A\x93\x24\x26\x7A\x1E\x59\xF5\xC8\x99\x33\x67\xDE\x7E\xFB\x6D\x34\x14\x7F\xF6\x18" + + "\x87\x6C\xDA\xB4\xA9\x10\x6D\xF4\x6E\xA0\xB7\xA8\xB2\x7E\xFD\x81\x17\x9E\x38\xF6\x0A\xDE\x93\x71\x7B\xE4\xC2\x87\x47\x2F\x7E\x04" + + "\x68\x0F\x72\x9F\xF5\xEE\xFE\x33\x6F\x1F\xB9\xF8\xF3\xC7\x0E\xBE\x68\xB6\xDA\x25\x34\x25\x5E\xB3\x66\x0D\xEB\x1A\x46\x72\xD0\x6F" + + "\x16\xC0\x43\x87\x9A\xD9\x8B\xD9\xFD\x0A\xE1\xED\x70\x75\x78\x3E\xFC\x7F\x19\x5D\x21\x76\xE5\xCA\x95\xE0\xC2\x47\x81\x05\x00\x93" + + "\x91\xAD\x82\xE2\x8A\xC2\x92\xCA\x02\xFE\x3C\x13\xD2\x63\x1A\x69\xE7\xB3\x3C\x99\xED\xA1\x2F\x2B\xA0\xCC\x17\x96\x01\x60\x6B\xB2" + + "\xD4\x96\x2C\xB6\xA5\x48\xA8\x14\x4B\x48\x9D\x90\x2C\xB3\x01\xDD\x44\x19\x93\x62\xAB\xF7\x0C\x13\x65\x98\xA2\x8B\x24\x39\x81\x8E" + + "\x6F\x79\xF8\x40\x9A\xCC\xBB\xD4\xDB\x7F\x3A\x7A\xEC\x9D\x63\xFC\xEF\x1A\xEB\x7F\xD7\x18\x7F\x54\xA4\x0A\xA5\xDB\xE3\xA9\xA9\xA9" + + "\x99\x32\x65\xCA\x82\x05\x0B\x1E\x78\xE0\x01\xFC\x48\xF4\x46\xEC\xC6\xA2\xEC\x6E\xC0\xFC\x02\xB4\xC3\xC2\x7C\xEB\x00\xC6\x51\x3F" + + "\x72\xE4\x30\x3C\x0C\xAE\xE6\x49\x4E\x7D\x78\xEB\xE1\x0D\x87\x4F\x91\xC8\x8D\x7A\xCF\x80\xCB\xBE\x42\xD4\x72\xE7\x0B\x97\x9F\x7C" + + "\xFA\x02\xE8\x25\x0C\x9F\x7E\x1B\x0C\xCF\x5E\xB9\x06\x0A\x40\x46\xA7\x25\x22\xE8\xED\xB5\x6B\xD7\xF6\xED\xDB\x5B\x5F\x5F\x8B\x30" + + "\x92\xC6\x93\xF2\x90\xA0\x80\x98\xD8\xD8\xFC\xB2\x9A\xE5\x6B\x77\xE0\xF5\x48\x23\x79\x19\xF9\xD6\x71\x3B\x12\x92\xE9\xAF\x7B\x97" + + "\xC6\xBA\x1F\x2F\x5F\xBB\x2D\xAF\xB4\x5A\x17\x17\x17\x12\x34\x4E\xA9\x90\x21\xDC\x05\xA5\x79\x79\xB9\x08\x27\x2F\x5D\xBA\x48\x4F" + + "\xC2\x5D\x02\xCC\xAB\x56\xAD\x02\x81\x68\x43\xA0\x9E\x53\x52\x01\x2C\x1F\x3B\xF0\xFC\xB6\x67\x5F\xA3\x87\xE0\x1D\x28\xFC\x63\x07" + + "\x5E\x9C\xBC\xE0\xDE\xCD\x27\x5E\x65\x83\x02\x8C\x61\x74\x13\xCF\xBD\xFD\xCF\x35\x6D\x13\x64\x74\x72\x4B\x43\xC3\x78\x76\x66\xF8" + + "\x56\x2B\xF0\x50\x68\xF9\x3B\x06\xC3\x9F\xF7\xEC\xD9\xF3\xC4\xA6\x4D\xF0\x70\xF8\x39\xBC\xBD\xAE\xAE\x2E\x21\x31\x31\x34\x34\x2C" + + "\x44\x24\x0E\x41\x37\x2F\x96\xA0\x12\x14\x1C\x32\x3C\xC0\xD4\x0A\x09\xC0\x55\x85\xC5\x95\x1C\xA2\x45\x84\xD8\x3C\x00\x5C\x58\x4E" + + "\xEB\xC4\xD8\x53\xE4\x95\xC5\xE4\x22\x47\x3F\xB9\x2D\x45\x46\xE8\x4D\x95\xD8\x52\xBC\x18\xF3\x96\x24\xB5\x81\x5E\x32\xB8\x25\xB3" + + "\x10\x86\xF9\xAC\x58\x6E\x4E\x94\x51\x11\x96\x83\x61\xA3\x07\x0A\xAC\x34\x41\x87\xB9\xB1\x68\x95\xC1\xAA\x8C\x23\xE7\x84\x15\x3A" + + "\xB3\x24\x3C\x3A\x58\xA1\xF6\x0F\x12\x8D\x1E\x17\x10\x14\x22\x36\x9A\xCC\x79\x79\x79\x0D\x0D\x0D\x3D\x3D\x3D\x8B\x17\x2F\x5E\xBB" + + "\x76\x2D\x7E\xF6\x6E\x3A\xEB\x83\x87\xF9\xB1\xC1\x1B\x5E\x83\x5E\x6D\xF2\xE4\xC9\x43\x17\xB5\xFB\xEA\x0A\xBC\x6D\xDB\x56\xB8\x57" + + "\x48\x70\x40\x6A\x4E\xFE\xE3\x87\x5E\x5E\xB3\xE7\x69\x80\x7A\xD0\x1B\x30\xB3\xB0\x16\xB8\x9E\x7C\xE3\x37\x1D\xD3\xE6\xC5\xA7\x66" + + "\xAC\xDD\xF7\xDC\xC1\x73\xEF\xB1\x88\x0E\x59\x71\x69\x7D\xB3\x28\x24\x40\xAD\x56\xDA\x6C\xD6\x39\x73\x66\xB1\xE1\xE5\xB0\xB0\x50" + + "\x51\xF0\xB8\xC8\xA8\xA8\xD2\xBA\x96\x7B\x1F\xDB\x75\xF2\x32\x19\x94\x62\xC3\x51\xDF\x6A\x62\x47\xC8\x33\x19\xD0\x3E\xFD\x36\x7E" + + "\xF2\xC9\xCB\x9F\xAC\xDC\xB0\xA7\xBC\xA1\x1D\xBD\x58\x48\xA0\xBF\x36\x54\x23\x97\x93\x59\x9C\xCD\xCD\x4D\x38\xE6\x1F\x7E\xF8\xE1" + + "\xB1\x63\xC7\x70\xF4\x14\x4A\xB9\x4C\x2A\x8A\x4F\x49\x7F\x74\xE7\x89\xF5\x07\x9E\x5F\xB7\xEF\xB9\x7D\x34\x8B\x01\xA5\xCF\x5E\xFD" + + "\x5D\x6D\x7B\xCF\x8F\xFD\xFC\x96\xAF\xDD\x7E\xF8\x22\x17\x51\x23\x7E\x46\x4B\x22\x1A\x5A\xB6\x66\x6B\x54\x74\x94\x28\x24\x28\x21" + + "\xC1\xC3\x52\x98\x2F\x15\xE1\x2F\x05\xD8\xEE\x5D\xD4\x0E\xFE\x06\xAF\x63\xEB\x2E\x0A\x37\xE6\xA2\x1B\xE9\x0C\x0D\xE4\x89\xFB\xF6" + + "\xED\xDB\x48\xD7\xA0\x04\xF0\x48\x71\x73\x73\x73\xAD\x36\x9B\x52\xAD\x91\x2B\x55\x61\x11\x51\x26\xAB\x23\x25\x3D\x3B\x0F\xB2\x49" + + "\x06\x99\x2B\x85\xA7\x7F\x87\x0B\xA1\x41\x66\x65\x61\x51\x65\x41\x61\x05\x2B\x0B\x8A\x2A\xF3\x0B\x2B\x98\x91\x3D\xF4\x21\xAB\x14" + + "\x16\x83\xF3\xEA\xBC\x12\x02\x70\x9A\xCC\x96\x8A\x10\x1A\xF4\x8A\xBC\x0C\x8B\x79\x1D\xB6\x26\xCB\x80\xB1\x95\x4B\x89\xC5\x1C\xC3" + + "\x09\x04\x60\x33\x15\x61\xEF\x70\xB4\xDC\x44\x63\x69\x32\x16\x6D\x53\xC4\xD9\xE4\x71\x16\x98\x2C\xD6\xA4\x88\x35\xAB\x74\x26\xAD" + + "\xCE\x18\x1A\x6B\x54\x84\xC7\x88\x55\xA1\x81\x62\x99\x7F\x50\xC8\x68\xFF\x80\xB0\x88\x08\xB7\xDB\x0D\x9E\xC7\x8F\x1F\x3F\x6B\xD6" + + "\xAC\x87\x1F\x7E\x04\x2D\xB2\x67\xCF\xDE\xAD\x34\x6F\xE0\x6D\xF3\x96\x2D\x7B\xF7\xED\x9B\x39\x73\xE6\xCD\xBD\x1A\x89\x29\xF0\xE6" + + "\xCD\x9B\xC8\x89\x90\xA0\x71\x19\x79\x45\x4F\x1C\x3D\xB3\x7A\xF7\x53\x1B\x8F\x9C\x86\x8C\xC0\x57\xE0\x22\xA4\xB3\x7F\xF9\xAD\x9D" + + "\x2F\x5E\x86\x2F\xE6\x96\x54\xFC\xF4\xC7\x7E\x8B\x1E\xDA\xB8\xED\xD9\x4B\x07\xE0\xB2\xE7\x88\x1B\xAD\x58\xBF\xC3\xEA\x74\x42\x07" + + "\xF0\x26\x21\x21\x08\xE7\xD4\x64\x6C\x59\x26\xCE\x2F\xAF\x59\xB6\x66\x1B\x1B\xEC\x21\x67\x65\xBF\xD3\xE8\x0E\x8B\x31\x7A\x37\xFC" + + "\xF0\x63\xAF\xFD\xF2\xC4\xEB\xBF\x02\xC6\x95\x4D\x1D\x1A\xAD\x06\x91\x4E\x58\x78\x68\x50\x50\x80\xC5\x62\x9A\x3D\x7B\x56\x4D\x4D" + + "\xB5\x88\xE4\xB1\xD2\x38\x83\x61\xF9\xBA\xED\x1B\xD0\x81\xEE\x7E\xFA\xB1\x03\x2F\x1C\xF4\xC6\xCF\x78\x93\xF4\xDC\x02\x04\x32\x1B" + + "\x0F\x9F\x3A\x72\xF1\xA3\x03\x7C\x14\x4D\xE2\xA3\xF7\x37\x1C\x39\x15\x67\x34\x04\x07\x07\x98\x2D\xE6\xB3\x67\xCF\xDE\xAC\x1C\x58" + + "\xB8\xA8\x1D\x18\xDE\x36\x78\x43\xF0\x08\xC9\x01\xD8\x0B\x17\x2E\x6C\x6F\x6F\x2F\x28\x28\x48\x4A\x4A\xD2\x1B\x0C\x6A\x4D\x28\x88" + + "\xD5\xC5\x19\x1D\xEE\xC4\xD4\xCC\xDC\xC2\xD2\xAA\x02\x04\xC3\x94\x5B\x42\x2C\x58\xA5\xC6\x4E\x1A\x71\xA7\x91\xBC\x67\x92\xD8\x28" + + "\x34\xB9\x9C\x98\x20\x7A\x3D\xAB\x28\x28\x04\xD5\x55\xA4\x2C\xAA\x62\x00\xE7\x14\x57\xF8\xC9\xEC\xE9\x32\x5B\x9A\x84\xB3\x54\x56" + + "\x8A\xAD\xC0\x98\xAA\x31\x57\x49\x41\x45\x8A\x3A\xE2\x6D\x0B\x2A\xC9\x04\x6C\x0B\x2C\x51\x6E\xE6\x93\x61\x8F\x12\x00\xB3\x69\x95" + + "\x71\xE4\xAA\x06\x65\xAC\x45\xA9\x83\x99\x95\xD1\x46\x55\x54\x9C\x3A\x1A\xA6\x87\x69\x62\x0C\x30\x65\xA4\x4E\xAA\x8D\x08\x51\xA8" + + "\xC1\xF3\xD8\xC0\x60\x74\x5A\xB1\xB1\xB1\x1E\x8F\xA7\xB8\xB8\x78\xE2\xC4\x89\xE8\xFF\x26\x79\xB7\xDE\xDE\xDE\xE9\xD3\xA7\x23\x7F" + + "\xB8\xB9\xD7\x03\x33\x05\xDE\xB1\x63\x3B\x14\x80\x28\x70\x56\x2E\xB2\xAF\xB5\x7B\x9F\x5D\xBB\xE7\x99\x27\x4F\x9E\x87\x0F\x3D\xB4" + + "\xF5\xC8\xCE\x17\xDE\x40\x14\x07\x59\xDE\xF1\xDC\xEB\x75\x6D\x3D\x52\x49\x48\x77\xFF\x62\x78\xD8\xE6\x93\xE7\x10\xE6\x21\xDE\x43" + + "\x68\x87\xB4\x4D\x22\x0E\x82\xBC\x84\x85\x69\xE1\xA0\x16\x87\x6B\xD6\xBD\x8F\x02\xFB\x93\x6F\x7C\xC2\xA6\x4F\x08\x43\xCD\xDB\x0E" + + "\xD8\xD7\x8F\xF1\xBE\xD3\x57\x4F\x5C\xFE\x04\x0F\x97\xAD\xDD\x9E\x5B\x52\x89\xAC\x95\x9E\x3D\x56\x90\x51\x2B\x35\x99\xBE\x02\xB0" + + "\x7B\xE7\x2C\x43\xF2\xB2\x76\xEF\x33\x68\x7F\x06\x30\x4B\x52\x56\x3E\xBE\x3B\x46\xA7\x8B\x4F\x49\xDB\xFD\xD2\x95\xC3\x17\x3E\xF4" + + "\x19\x18\xDF\xF1\xC2\x65\xBD\xC9\x84\xEE\xC0\x64\x32\xBC\xF0\xC2\x0B\x23\x39\xF4\x23\x54\x60\x78\x1A\xFC\x0D\x5E\x07\xDF\x9B\x24" + + "\xD8\xD8\xDD\xBA\xE1\xA5\x26\x93\x29\x4E\x6F\x08\x0D\x8F\x8C\x33\x98\x2D\x76\x57\x7C\x52\x5A\x46\x6E\x21\x0F\x2D\x0C\xAC\xE6\x14" + + "\x96\x31\x68\x79\xC9\x15\x06\xCC\xC2\xC8\x99\xB7\xBC\x22\xF2\x32\xB0\x9A\x47\x55\xF7\xBA\x25\x8D\xA5\xF3\xE8\x1B\xFA\xC9\x1C\x19" + + "\x52\x7B\x06\xB8\x95\x32\x86\xAD\x5E\x92\x2D\x34\xAE\xB6\x52\xE3\xF6\xF3\x0F\x53\x21\xDA\x84\x61\x2B\xD3\x61\x3A\x4C\xCD\x0D\x65" + + "\xD1\x0B\x0F\xF5\x94\x61\x44\xD1\xB1\x16\x95\x0E\x66\x64\xE8\xC2\x40\xB2\x32\x32\x16\x46\x91\x26\x0F\x21\xCE\x8A\x08\x9D\x2C\x34" + + "\x12\xE2\x0C\x9E\xFD\x83\x45\x21\x64\x16\xB2\x52\x2C\x53\xF0\x26\xF5\x2E\x6A\xA7\x50\x28\x6E\xD6\x8A\x1C\x4C\x81\x4F\x9C\x38\xAE" + + "\x56\xAB\x24\xE2\x60\x77\x62\xF2\x03\x5B\x0E\x3D\xB6\xFF\x79\xE6\x43\x2B\x1E\xDB\x15\x1D\x0B\xD7\x49\x9F\x34\x6F\xC5\xBA\xFD\xCF" + + "\x03\xE9\xAE\x19\xF3\x11\x2A\x97\xD7\xB7\xAC\xDF\xFF\xFC\x9A\x3D\xCF\x20\x37\x43\x59\xD9\xD8\x11\x16\x16\xA6\x26\x2E\x29\x83\x6B" + + "\xD6\xB4\x75\x43\xC6\x8F\xBD\xFE\xCB\x43\xAF\xBE\x0F\xC7\xFD\x1E\xA2\x2B\x64\x78\x00\x63\xDA\x8B\x21\x8A\x41\x87\x38\x7B\xE5\x6A" + + "\xA3\xD9\x2A\x15\x07\x6B\xB5\x64\xB9\x38\x89\x28\x38\x31\x2D\x73\xF5\xEE\x93\x00\x18\xED\x89\xF8\x19\xCD\xBB\xEB\xC5\x2B\x88\x59" + + "\x9E\x7A\xF3\xD3\xB6\x49\xB3\xEE\xFC\xC9\x8F\x67\x2C\x7D\x80\x8E\x3C\xBF\xBB\x7F\x60\xF8\xE0\x1A\x82\xA0\x27\x9F\xBE\xA0\x37\x1A" + + "\x83\x83\xC6\x99\xCD\xC6\xD3\xA7\x4F\xDF\x14\x80\x51\x2A\x95\x4A\x3C\x25\x16\x4B\x62\xE3\x0C\x91\xD1\xBA\x28\x66\x31\xB1\x30\x3C" + + "\x8C\x88\xD6\x59\xEC\x6E\xA8\x6C\x4A\x46\x4E\x76\x41\x49\x01\xA0\xA5\xDC\xE6\x32\x8D\x15\x40\x9B\xEB\x45\xD7\x67\xE6\x06\x3F\x64" + + "\xC5\xE2\x6A\x3E\xBA\x46\x99\x5B\x8C\x17\x94\x31\xA1\xFE\xF2\x12\xB9\x31\x00\x96\x3A\x32\x01\x30\x44\x18\x52\xCC\x30\x26\x24\x33" + + "\x68\x7D\x2D\x95\xC3\x98\xA4\xCD\x60\x18\x6A\x8C\xD0\x7A\x40\x81\xC1\xB0\x92\x84\xD0\x4E\xAA\xC0\x00\x98\x89\xB0\x59\x19\x63\x12" + + "\x02\x2C\x64\x58\xC5\x4A\x6A\x4C\x9C\xD9\xB3\x40\x9A\xBD\x86\xAF\x23\xEA\x66\x4B\xEA\xDC\x5C\x05\x3E\x73\xE6\x4C\x9C\x3E\x56\x2A" + + "\x15\xA3\x2F\x9F\xF7\xC0\x7A\xC4\xCF\x70\xA3\xF5\xFB\x5F\x78\x70\xCB\x21\x67\x42\x62\xC0\xB8\xD1\x24\xBF\x75\xB9\xA7\x2E\xFA\xD9" + + "\x92\x55\x9B\x63\x74\x31\x0E\xB7\x07\x1E\x86\x88\xEE\xE1\xAD\x47\xB2\x8B\xCA\x64\xE4\xEA\x1F\x72\x99\x5E\x54\x4C\xCC\xF4\x25\x0F" + + "\xC2\xB1\x8E\xBD\xF6\x0B\x12\x30\xD3\x31\xB0\xEF\x27\xBA\xD7\xC5\xF8\xCC\xDB\x08\x67\x10\x09\x6F\x3E\xF9\x6A\x7D\x47\x1F\x1B\x7F" + + "\x52\xA9\x14\x08\x5E\x52\xB2\x72\xEF\x7D\x7C\xCF\xC6\x23\xA7\x00\x30\x3A\x50\xB4\x3F\x24\x17\x07\x02\x87\x00\xB9\xC9\xCF\x9E\xD8" + + "\x77\x84\x26\xC0\x3C\xC3\x28\xF1\x56\x8F\x6C\x3F\x16\x13\x1B\x87\x10\xDA\xE1\xB0\xB1\xFB\x2D\x7C\xF5\x1C\x98\xDC\x5F\x5A\xAD\xC6" + + "\x53\x61\x91\xD1\x39\x85\xA5\x99\x79\xC5\x28\x61\x60\x15\x61\x71\x2E\xA9\x73\x93\x1F\x79\x90\xF2\x8A\x39\x31\xF4\x95\xD3\xC1\x7A" + + "\x2B\xB4\x7C\x01\xBD\x82\x6B\x1B\xA8\x02\x17\x96\xE7\x32\xC5\xFE\xB2\x92\xF5\x05\x04\x60\x88\x30\x0B\xA4\x69\x99\xCE\x18\x26\x0F" + + "\x6D\x74\xE7\x60\xA3\x90\x43\x7E\x53\x86\x28\xB0\x67\x90\x02\xEB\x85\x0A\x3C\x0C\xC0\x3C\xB7\x23\x31\x02\x70\xB0\xE8\xA6\x03\x8C" + + "\xA3\x7E\xE1\xC2\x85\xC2\xA2\x02\x72\x95\xAC\x5C\xD2\x39\x6D\xEE\xD6\xA7\x2F\xAC\xD9\xF5\x14\xDC\x08\x22\x8C\xC8\x79\xFA\xD2\x07" + + "\xAD\x0E\xA7\x84\x4E\xC0\x48\xCB\x2D\x8C\xD6\xE9\xE0\x4F\x8F\xEE\x7A\x1A\xD1\x75\x52\x7A\x26\x3D\x47\xA2\x40\x09\x0D\x81\x20\xC3" + + "\x35\x0F\x9E\x7B\x1F\xF4\x1E\xFC\x7E\xA4\xBB\xFF\x08\xC6\xEC\xCC\x10\x1A\xEA\xD5\x0F\xEE\x59\xBF\x03\xE1\xA7\x5C\x26\x51\xD0\x0B" + + "\x95\x75\x71\x71\xB3\x56\x3C\x8A\x34\x18\xFD\xE3\xEA\x5D\x4F\x21\x37\x69\x9B\xD4\x3F\xE6\xAE\x51\x55\xCD\x9D\x38\x16\x88\x6B\x70" + + "\x68\xB6\x3F\xFB\xDA\xEE\x97\xDE\x3C\x84\x46\xA6\x01\x76\xFF\x3D\xAB\x90\x51\x8B\xC5\xC1\xB9\xB9\xD9\x37\x71\x14\x5A\x4D\x01\x46" + + "\x3E\x9B\x4B\xC3\x60\xE1\x7C\xA9\x81\x09\x18\x54\x4E\x85\x83\x52\xC3\x02\xCC\x57\xF8\xD4\x97\xA7\x97\xAD\xC2\x33\x40\xB2\x57\x96" + + "\x69\xA7\x50\x31\x12\xCB\xA5\x63\x63\x08\xA1\x29\xC0\x8E\x74\x29\x29\x49\x45\x62\x4F\x23\x0F\x99\x20\xDB\x07\x19\xDB\x23\x63\x21" + + "\xB4\x2D\x99\x9D\x67\x12\x02\x4C\xAF\x19\x76\x8E\x1C\xE0\x81\xB8\x3A\x42\x27\x0F\x8F\x96\xA8\xC3\x02\x44\x92\xC0\x10\x71\x90\x48" + + "\x12\x24\x62\x25\x7D\x28\x96\x8E\xF5\x1F\x77\x73\x43\x68\x7E\x46\xC1\xC2\x85\x0B\x24\x12\x64\x64\x01\xF9\x65\xD5\xF0\x95\x75\x48" + + "\x83\xF7\x3E\xB7\x6E\xFF\x73\x48\x89\x1F\x3F\xF8\xE2\xBA\x7D\xCF\x76\xCF\x5C\x18\xAB\x37\x48\x24\xE4\xFA\x58\x95\x5A\xD9\x3A\xA9" + + "\x1F\xC4\x42\x7B\x11\x38\x23\x6E\x2E\xA9\x6B\x46\x32\x76\xEC\xD2\x47\x42\xB5\x39\x78\xF6\x96\x53\xF1\xAD\x33\xC1\x30\x35\x09\x4F" + + "\xD0\x62\x5B\x9F\xB9\x58\x5C\xDB\x88\x10\x86\x4A\xB1\x5C\xAD\x52\x76\x4E\x9D\xBB\x76\xCF\xB3\xA0\x77\xF9\xDA\xED\xC0\x1B\xB9\x49" + + "\xFF\x3D\x8F\x20\x37\xBE\x7F\xF3\x01\xC4\x44\x8F\xEE\x3A\xB9\xED\xE9\x8B\x7B\x5E\x7E\x13\x00\x3F\x73\xF5\xB7\x65\xE3\x5B\x24\x62" + + "\x72\x50\xFA\xFA\x7A\xDE\x7E\xFB\xED\x9B\x02\x30\x1F\x42\x87\x84\x88\xC2\x22\xA2\x34\xA1\xE1\xA1\xE1\x11\xA1\x61\xD4\x68\x25\x3A" + + "\xD6\xE0\x4E\x4C\x49\xCB\xCA\xCB\xCC\x2D\xE2\xD5\x78\x20\x60\xF6\xC6\xCF\xFC\x95\x46\xDC\x20\xD6\x10\x7A\x99\x71\x24\x7B\x5F\x2C" + + "\x4C\x95\xBF\xD4\xBC\x00\x3B\xB3\x64\x4E\xCA\xB0\x93\x98\xD4\x91\x4E\x31\xCE\x00\xC6\x52\x42\xB5\xD0\xD2\x08\xD5\x0E\x9E\xE1\x91" + + "\x03\x6C\x54\x7B\x23\x64\xBE\x54\x46\xEA\xE4\x61\x51\x64\x1C\x4B\x4E\x4E\x32\x49\x64\x72\xC0\x19\x1E\x1E\x9E\x95\x95\xD5\xDA\xDA" + + "\xDA\xD1\xD1\xD1\x4E\x2E\x5D\x26\x5B\x5B\x5B\xDB\xC4\x89\x13\x73\x73\x73\xEF\xB8\xE3\x8E\x9B\x3B\x88\x05\x86\xAF\x5E\xBD\x7A\xE8" + + "\xD0\x41\x72\x51\x81\x4A\x19\xA3\xD3\xCD\x7F\xE0\xB1\x27\x8E\xBE\xC2\x92\x31\x66\x88\xE8\x9E\x38\x72\x06\xE9\x31\x02\x66\x36\x7D" + + "\x92\xAD\x7D\x41\xAE\xF8\x93\x8A\x9A\x7A\xA6\x23\x6C\x66\x9A\x40\x66\x0E\x73\xF6\xB6\xC0\xDE\xD9\x3F\xF8\xAA\x03\x9F\x69\x5E\xDF" + + "\x61\x1B\xF6\x44\x31\x3F\xB3\x6A\x1F\xBB\x10\xEA\xC2\x07\x53\x16\xDD\x17\x11\x19\x29\x93\x89\x91\xAD\x90\x4B\x14\x1A\xDB\x1F\xDE" + + "\x76\xB4\xA4\xB6\x31\x24\x68\x1C\x64\x59\x17\x17\x8B\xA6\x46\x10\x44\xE6\x4E\xAA\x15\x28\xCB\xC7\xB7\x1D\xBE\xF0\xE1\xF6\xE7\x5E" + + "\x73\x78\x12\x43\x82\x03\x42\x43\xD5\x9B\x37\x6F\xBA\x59\x13\x39\xD8\x20\x16\x3C\x0D\xFE\x06\xAF\x83\xEF\x31\x27\x64\xDE\x08\xCF" + + "\xCC\xCE\xCE\x8E\x88\x88\x40\x24\x18\x11\x19\x85\x94\xD8\xEA\xF4\x24\xA5\x66\xA6\x66\xE6\x65\xE7\x97\xF0\x23\x58\xF9\xDE\xBC\x57" + + "\x78\x02\x49\xA8\xC9\xDC\xF5\x83\x65\xD5\x3C\xC6\xF9\xFF\x18\xC0\x64\x10\xCB\x99\x25\x77\xC1\x28\xC0\x43\x30\x1E\x6C\xE9\xDE\x32" + + "\x4D\x66\x1D\x1E\x60\xB2\x48\xAD\xDE\x41\x47\xB0\x6C\x6C\x14\x5A\x1D\x6B\x55\xEB\xCC\xA1\xB1\x46\x32\x58\x15\x1E\x03\x8D\x15\x29" + + "\x35\x81\x12\xB9\x7F\x50\xB0\x36\x34\x2C\x2A\x2A\x0A\x4D\x56\x5C\x5C\xCC\x16\xEE\xD8\xB5\x6B\x17\x5B\x03\xE0\x49\xC1\xB6\x69\xD3" + + "\xA6\xDD\xBB\x77\xCF\x98\x31\xE3\xA6\x2F\x6A\xC7\xD2\xE0\x57\x5F\x3D\x5B\x5A\x5A\x22\x83\xA4\x06\x07\x54\xB7\x76\x3F\x7E\xF0\xA5" + + "\xB5\xFB\x9E\x85\xF0\x22\x96\x63\x63\x2A\x60\x18\x15\xA4\xC7\x65\x75\xCD\xEC\x2A\x19\x72\x5D\x9B\x38\xB8\x6D\xD2\xAC\xFD\x64\x84" + + "\x86\xC4\xCC\x47\x2F\x7E\x44\xAE\x43\x20\x57\xDE\xFE\xE6\xE9\x37\xC9\x95\xB7\xD4\x3E\xC5\xC3\x13\x97\x3F\x61\x97\x13\x1D\xA4\x83" + + "\xAB\xFB\xBC\x13\xAD\x85\x5E\xFE\x9D\x31\x0E\x54\xAF\xD2\xB2\x2B\x9C\xE8\x4F\x26\xAA\x7B\xE8\xFC\x07\x6C\xF6\x28\xB1\xF3\x1F\x90" + + "\x06\x39\x75\xF5\xD8\xEB\xBF\xB8\x67\xDD\x4E\x8B\xC3\x05\x1A\xD9\x2A\x3F\x20\x13\x89\x31\xCB\x5C\xE2\x0C\x46\xAB\xC3\x65\x77\xC7" + + "\xBB\x12\x92\xDC\x89\xC9\x06\x93\xA5\xBA\x65\xC2\xC9\x37\x7E\x3D\x73\xD9\x43\xDA\x50\xAD\x5C\x2E\xB1\x58\x4C\x17\x2E\x9C\xBF\x7C" + + "\xF3\xA6\x52\xB2\xD3\x48\xF0\xB7\x3D\x7B\xF6\xF0\xB7\x08\x65\xB7\x32\x63\x6B\x54\x60\xFF\x63\x8F\x3D\x36\x6B\xD6\xAC\xBA\xBA\x3A" + + "\xB7\xDB\xAD\xD3\xE9\xA2\x63\x62\xC2\x23\xA2\xE2\x0C\x66\x9B\x2B\x3E\x3E\x39\x3D\x3D\xA7\x60\x90\xCC\x0A\x43\x6B\xCA\x33\xA3\x97" + + "\x01\x3C\x10\x42\x0B\x84\x9A\x2F\x87\x35\x0E\x60\xAA\xFF\x08\xA1\xB3\xE4\xCE\x4C\x85\x8B\x18\xA3\x97\x23\x59\x68\x4E\x9F\x32\x5D" + + "\xFA\x65\x0A\xAC\x32\xD8\xE9\x0A\x3B\x16\x59\x44\x9C\x48\x1D\x16\x24\x51\x8C\x0B\x11\x8B\xA4\x72\x5D\x6C\x2C\x7E\x73\x66\x66\x66" + + "\x63\x63\xE3\xFC\xF9\xF3\xD7\xAE\x5B\xB7\x77\xEF\xDE\x9D\x3B\x77\xB2\x85\x3B\xD8\x2C\x8E\x61\xEF\x4E\x78\x2B\x26\x72\xB0\x61\x0F" + + "\x88\xF0\xEA\xD5\x8F\x22\x8A\x0E\xD5\x6A\x22\xA2\x22\x17\x3D\xBC\x71\xC3\xE1\x97\x11\xB6\x31\x7A\xD7\xEF\x27\xE5\xEA\xDD\x4F\x3D" + + "\x76\xF0\xA5\xFA\x8E\x3E\x04\x75\xE4\xB2\x04\x51\x70\xC7\xD4\xB9\x04\xD4\x2B\x9F\x1E\xBD\xF4\xD1\xAE\x17\xDF\xC0\x9F\x3C\xB2\xFD" + + "\xE8\xCA\xC7\x77\x2F\x5D\xBD\x65\xE1\x43\x1B\xE6\xDF\xBF\x1E\xB6\xF0\xC1\x0D\x78\x78\xDF\x86\x3D\xAB\x76\x9E\xD8\x74\xEC\x0C\xB8" + + "\x7D\xEA\xCA\x6F\x60\x48\x02\xB9\x0B\x7D\xBC\xF3\xBD\xBE\xED\x18\x0B\xD3\x07\x76\x11\x15\x7E\xE0\xE1\xF3\x1F\x9E\xF8\xA7\x5F\xB1" + + "\xD5\x05\xD0\x4A\x7B\x4E\xBD\x05\xD9\xDC\xF2\xD4\x79\x44\xC8\x5B\x4E\x9E\xDB\xF6\xCC\xA5\xDD\x2F\xBD\x81\x3F\x41\x6B\x9C\xFA\xF0" + + "\xDF\xB7\x3F\xF7\x7A\x41\x45\xAD\x54\x1C\x42\x4F\x32\xC9\x80\x2E\x88\x9D\x30\x63\xC1\x9C\xFB\xD6\xDD\xB7\x61\xEF\x83\x5B\x0E\x92" + + "\x6B\x92\x8E\xBD\xB2\xE1\xC8\xA9\x5D\x2F\x5D\x41\x6F\x98\x5B\x52\x01\x89\x56\x28\x10\x3F\xF7\x5E\xB9\x32\x22\xF9\x1D\x09\xC0\xC2" + + "\x89\x1C\xC3\xDE\x9D\x90\x9F\x7D\x05\x8F\xDD\xB1\x63\xC7\xDE\xBD\xFB\x36\x6D\xDE\x0C\xDF\x83\x44\x43\xB4\x9D\x4E\x67\x6C\x6C\x1C" + + "\x22\xED\xB0\xF0\x28\xBD\xC9\xEA\x8C\x4F\x4A\xCB\xCE\xCF\xA3\x92\x2B\x1C\xBB\x62\x8B\xE9\x0C\xC5\x98\xC7\xF2\x4B\xA5\x98\x87\x99" + + "\x86\xD0\x2E\x58\x86\x0C\x00\x13\xCB\xF0\x96\x19\x52\x27\xA9\x4B\x89\x20\xD3\x87\x48\x8F\xBD\xB1\xB4\x84\x01\x6C\x21\x97\x10\x0B" + + "\x01\x96\xEB\x1D\x77\x07\x86\x8C\x0E\x0C\x19\x13\x28\x1A\x83\x4A\x40\xB0\x44\xA1\xB4\xDA\x6C\x39\x39\x39\xB5\xB5\xB5\x68\x94\x7B" + + "\xEF\xBD\x17\xBF\x7C\xFF\xFE\xFD\xEC\x2E\x6F\x1B\xE8\x9A\x75\x6C\x2A\xE5\xF5\x56\xDB\xB9\xA5\x4B\xEA\xB0\x85\x97\xCE\x9C\x39\x5D" + + "\x54\x54\x08\x86\xE5\x52\x51\x7A\x6E\x21\x1B\x08\x65\xC2\xBB\x6E\x1F\xE8\x7D\xFA\x89\x63\x67\xBA\x67\x2C\x94\xCB\xA4\x72\x7A\xE9" + + "\x5C\x4D\xDB\x44\x3C\x05\x50\x27\xF4\x2F\xAA\x69\x9D\x00\x67\x4A\x48\xCD\x30\xDB\xEC\xD1\xBA\x98\xD0\x30\x2D\xBD\xA4\x46\x02\x53" + + "\x29\xE5\x78\xC8\xD6\xBE\x49\xCE\xCC\x2E\xAA\x1E\xDF\xD2\x3B\x7D\xD6\x8A\x47\x91\xCB\x1D\x3A\xF7\xC1\x53\x57\x3E\x85\x0A\x91\xAB" + + "\xEA\xBF\xCD\x43\xD6\x83\xD0\xA5\xBD\x12\xD4\xF5\xA9\x37\x41\xEC\xC7\x1B\x0F\xBF\xBC\x7C\xED\xB6\xA9\x0B\xEF\x6B\xED\x9D\x51\xD9" + + "\xD4\x51\x58\x59\x9B\x5D\x54\x9A\x96\x5B\x90\x9A\x9D\x97\x96\x93\x9F\x59\x50\x92\x57\x56\x55\x5A\xD7\x3C\xBE\xB3\xAF\x6D\xCA\xEC" + + "\x79\xF7\xAF\x5B\xF4\xF0\x13\x99\xF9\xC5\x6C\x76\x2A\x42\xE5\xA4\xF4\x2C\x74\xA3\x9B\x8F\x9F\xA5\x87\xE3\xB9\xBD\x2F\xBF\x45\x67" + + "\x53\x92\x4E\x70\xC1\x43\x8F\x87\x85\x87\x42\xAB\xC3\xC2\x42\x8F\x1E\x3D\x32\xF2\xDB\xCA\x7E\xF5\xA9\x94\xFC\x6C\x4A\x1E\x66\x54" + + "\xE0\xC9\xF0\xE7\x7D\xFB\xC8\xEA\x3F\x2B\x56\xAC\xC0\xDF\xC2\xDB\xE1\xF3\x78\x3F\x28\xB3\x52\xAD\x55\x6B\x42\x61\x2A\x4D\xA8\x52" + + "\xAD\xE1\x89\x15\xCA\x2F\x7F\xB6\x49\x38\x49\xCB\xE7\xB2\x61\x61\x9D\x27\x99\x28\x30\x72\x60\x29\x0B\xA1\x39\x86\x33\x05\x30\x53" + + "\x03\xC3\xCE\x74\x90\x2C\x61\xF4\x92\xD1\x2C\x32\x0A\x2D\xE5\x15\x98\x9B\x11\xED\x92\xE9\xC9\xB2\x5D\x19\x19\x19\xD3\xA6\x4D\xEB" + + "\xED\x25\x77\x60\x83\xCC\x3E\xFC\xF0\xC3\x6C\x4D\xA0\xED\xDB\xB7\x23\x1E\x66\xA2\x7A\xDB\x2F\x66\xE0\x8F\xE8\x6B\xAF\xBD\xF6\xCE" + + "\x3B\xEF\xE0\x53\x42\x43\x35\x5A\x3A\x29\xB7\x61\xC2\x94\x27\x8E\x9C\x5E\x47\x01\x86\xF6\xA2\xE3\x9F\x7B\xDF\xDA\xC8\xC8\x08\x05" + + "\xBD\x9A\x1F\xEE\x05\xFF\x73\x26\x24\x46\x44\x86\x4B\xC9\x35\xB0\xFE\x62\x51\x10\xC3\x15\xCF\x22\xC0\x1E\x6A\x78\x0A\x92\x22\x0A" + + "\x09\x10\x05\x8F\xD3\x6A\x35\x56\xA7\x2B\xB7\xB4\xB2\x77\xCE\xB2\xC7\x0F\xBD\x84\xA8\x1B\x1E\x2F\x9C\xAA\xF5\x2D\xC2\x98\xFB\xAA" + + "\xDE\xEB\xB4\xD8\x75\x7F\x8F\xEE\x3C\x39\x71\xD6\xE2\x82\x8A\x3A\x44\xBC\xE8\xBC\x00\xA4\x28\x68\x5C\x70\xA0\xBF\x38\x24\x50\x4A" + + "\x56\xCF\x13\x31\x43\xD3\x49\x44\x41\x48\x5B\xD0\x80\xA8\xA0\x5B\x34\x5A\x2C\x8E\xF8\x04\x15\xBD\x2C\x11\x91\x8E\x94\x9C\x9C\x4F" + + "\x79\x70\xF3\xC1\xC7\x0E\xBE\x88\x2E\x6F\xF3\x89\xB3\x07\xCE\x92\x4F\x44\xBC\x93\x5F\x5E\x2D\x0A\x09\x44\x28\xD4\xD4\xD4\xF8\xFA" + + "\xEB\xB7\x67\x49\x9D\x61\xE7\x45\xA3\xC2\x2B\x33\xFE\xFC\xA1\x87\x1E\x82\xFF\x83\x02\xB0\x00\x22\xC0\x05\xE8\x00\xC0\x03\xE3\xCF" + + "\x83\x23\xE7\x41\x02\xCB\x70\x2D\x2C\xCB\xF1\xCE\xD9\xE2\x2A\x6C\xE4\xCC\x0B\xBC\x9F\x9C\xC8\x6F\x16\x00\x96\x40\x63\x05\xE6\x7D" + + "\x08\xB6\x33\x25\x4E\xF2\x90\x18\x44\xD8\x49\x47\xB3\x86\x84\xD0\x72\xAF\x02\xFF\x64\xD4\xA8\xCE\xAE\xAE\x7D\xFB\xF7\x6F\xDF\xB1" + + "\x63\xE7\x4E\xE4\xB4\x1C\xB4\x7C\x78\x2C\xFC\xE5\xD7\x6B\x9D\xAF\x4D\x81\x2F\x7B\x87\xA3\xDF\x78\xE3\x4A\x77\x77\x17\x70\x24\xAB" + + "\x37\x6A\x54\x3D\xB3\x97\x20\x66\x5B\xB3\xE7\x69\xC4\xC6\xF7\x6F\xDA\x0F\x5C\xA5\x52\x72\xC5\x0C\x97\x00\x8B\x82\x91\xA1\xD1\xA1" + + "\x2C\xA5\x9C\xAC\xF3\x28\x09\x0E\x09\x0A\x21\x17\x15\xCB\xA3\xA3\x23\xCD\x66\x03\xBE\x1A\xBE\x97\xC9\x64\x20\x6B\x4A\xD2\x25\xF2" + + "\x82\xE8\x2A\x79\x0A\xF2\x27\xF8\x03\x11\xF2\x3D\x54\x2C\x76\x47\x45\x43\xDB\x23\x3B\x8E\x1E\x7B\xED\xE3\x83\xAF\xD2\xC9\xFA\x02" + + "\x59\xFB\xC6\x92\x2C\xFC\x7A\x6C\x70\xEE\xD8\xA5\x8F\xF7\x9D\x79\x7B\xF6\xCA\xD5\x39\xC5\x15\x46\xB3\x95\x2C\xB8\x43\x17\xBB\x54" + + "\xD2\x33\xBD\xC8\x6C\xC9\x1A\x1A\xE4\x52\x61\x51\x08\x5D\xBE\x03\x25\x5B\x67\x13\x4D\x27\x27\xCB\xDC\x12\x68\xD1\xC7\x91\xB1\x7D" + + "\x6F\xAF\xA7\xD1\xA8\xA4\x52\x11\x42\x50\xD0\x8B\x08\x08\x9D\xE9\xE6\xE3\xAF\x1E\xBE\xF8\xF3\xFE\x7B\x56\xA1\x93\x45\x3F\x88\x23" + + "\x75\xF0\xE0\xFE\x37\xDF\x7C\x8B\x45\x52\x5F\x33\xC0\x23\x54\x66\x88\xD6\xAE\x5D\xBB\x80\x34\xA2\xCE\xAE\xAE\xAE\x51\x77\xDC\x81" + + "\xE0\x79\x90\x02\x0F\x37\x3D\x6B\x20\xD1\xE5\xB5\x57\x30\xF5\x92\x1F\xD0\x26\x0A\xAC\x70\x65\x53\x86\xC1\x67\xA6\x54\x60\x12\x46" + + "\xAF\x3B\x8B\x55\x24\x02\x8C\x65\xCE\x74\x19\x19\x88\x26\xD3\xA4\xE9\xA9\x60\x02\xB0\x02\x66\xF2\x28\x0C\xCE\x1B\x2C\x6A\x77\x63" + + "\xA5\xFD\xFA\x01\xBE\x2C\x58\x96\x19\x79\xD4\xA9\x53\xA7\xB2\xB3\xB3\xC8\x0A\x55\x08\x7D\x43\x43\xBB\xA6\xCF\xDF\x74\xFC\x95\x87" + + "\xB7\x1F\x23\x13\x00\xC5\x1C\xBD\xC2\xB5\x97\xF1\xD0\x13\xEF\x6E\x6E\x6E\x5A\xB2\x64\xF1\x96\x2D\x9B\x4F\x9C\x38\x8E\x77\x38\x77" + + "\xEE\xDC\xA5\x4B\xEC\x66\x08\x97\xDE\x78\xE3\x32\x12\xEC\x6B\xD7\xDE\xBE\x70\xE1\xC2\xBE\x7D\xFB\x96\x2C\x59\x54\x5C\x5C\x14\x1E" + + "\x1E\x0A\xAF\x55\xD2\xD5\x98\xE9\x38\x8D\x24\x26\x56\x57\x5A\xD7\xB4\xFE\xC0\x0B\x47\x2F\x7E\x74\xF0\xEC\x7B\xDE\x6B\x6E\x6E\x3F" + + "\xA8\x37\x50\x5D\x7E\xB0\x0A\x59\x00\xE4\x77\xC6\xD2\x07\x5D\x09\xC9\x61\xE1\x61\x44\x57\xE9\x05\xFD\x60\x52\x46\x17\x1E\x42\x2F" + + "\x56\x5C\x5C\x38\x71\xE2\x84\x85\x0B\xC9\xB5\x68\xEB\xD6\xAD\xA5\xBD\x39\xB9\xA5\xFD\xCF\x7E\x76\x1F\x76\x76\x77\x4F\xC8\xCF\xCF" + + "\x8D\x8B\xD3\xE1\xAF\xA4\x52\xB2\x22\x07\x5B\xC2\x9A\xEA\x30\x1A\x5C\x66\x77\xC7\x77\xCD\x58\x08\x61\x47\x38\xBD\x72\xE3\x5E\xB3" + + "\xD5\x86\x3E\x10\x87\xA9\xAF\xAF\x87\x2D\x48\x36\xF2\x65\xB1\xBE\xB6\x0B\xFA\x37\x5E\x7F\x51\x3B\x21\xC0\x3C\xC3\x03\x63\x5D\x82" + + "\xA9\x1D\x43\x63\x69\x21\xD5\x79\x5E\x05\xCE\x96\x5D\x1F\x60\x99\x3B\x8B\x2F\x25\xDC\x6B\x38\x80\xE5\xF6\x14\xB9\x2D\x59\x6E\x4B" + + "\x92\x5B\x12\xE4\xE6\x78\x25\x05\x58\x69\x74\x7D\x5B\x96\xD4\xF1\xD9\xD8\xEA\xED\x87\x0F\x1F\x76\x3A\x1D\x6C\x4D\x89\xD0\xB0\xD0" + + "\x8C\xFC\x22\x33\x39\x31\x48\x64\x13\x7B\xE8\x6A\x2F\x4A\xBD\x3E\xAE\xA5\xA5\x19\xFD\xD2\xD9\xB3\x67\x11\x7B\xBF\xFF\xFE\xFB\x1F" + + "\x7D\xF4\xD1\x27\x9F\x7C\xF2\x9B\xDF\xFC\xE6\xB3\xCF\x7E\xFB\x2F\xFF\xF2\x2F\x9F\x7F\xFE\x1F\x7F\xFA\xD3\x9F\xFE\xF6\xB7\xBF\x7D" + + "\x31\x78\xFB\xDF\xFF\xFD\x5F\xEC\xFF\xED\x6F\x3F\xC3\xA7\xB4\xB4\x34\x45\x45\x47\xE2\x9D\x89\xCB\x4A\xC5\xF0\xF6\x68\x9D\x6E\x62" + + "\xFF\xA2\xDD\x2F\x5E\x39\x4C\xAF\x3A\x3E\x70\xC3\xC5\xAE\x6E\xA3\xF0\x1E\xF4\x8E\x54\x1D\x3A\xFF\x3E\x92\xD2\x15\xEB\x77\x7A\x92" + + "\x53\xC9\x22\x38\x32\x09\x04\x53\x46\xFA\x35\x55\x6C\x6C\x4C\x4D\x4D\xF5\xEA\xD5\x8F\xBE\xFC\xF2\x4B\x6F\xBF\xFD\xF6\xBB\xEF\xBE" + + "\xFB\xC1\x07\x1F\x7C\xFC\xF1\xC7\xBF\xFC\xE5\x2F\x3F\xFB\xEC\xB3\x3F\xFE\xF1\x8F\xFF\xF3\x3F\xFF\x83\xD6\x40\x13\xA1\xFC\xF3\x9F" + + "\xFF\x8C\x66\xC1\xCE\x6B\xD7\xAE\x21\xCF\x9A\x31\x63\x7A\x42\x82\x07\xE9\x0C\x6B\x1C\xB6\x18\x3D\x9A\xDD\xEA\x70\xF6\xCC\x5A\x52" + + "\x5C\xDD\x80\x5E\x0F\x7B\x6C\x36\x2B\x7A\x4C\xF4\x8F\x23\x39\xFD\xFB\x75\x02\x3C\xEC\x26\x5C\x52\x47\x18\x42\x0F\x30\xCC\x1B\x3F" + + "\xD6\xE5\x73\xE9\x92\xCF\x7C\x12\xFA\x90\x00\xAC\x70\xE7\xC8\xDD\xD9\x32\x37\x11\x5B\x99\xC0\x18\xB7\x32\x0F\x67\x1C\xC6\xEE\x2C" + + "\x2E\x2B\x76\xA4\x29\x1C\xA9\x72\x7B\xB2\xC2\x96\xAC\xB0\x26\x2A\x2C\x09\x0A\xCA\xB0\xD2\xE8\xFE\xD6\x01\xCC\x8F\x7F\xB0\x25\xB2" + + "\x90\xBD\x78\x3C\x2E\x39\x77\xFB\x02\x12\x01\x32\x59\x88\x8A\x8A\x28\x2B\x2B\xC1\xF7\x81\x9F\xFD\xEA\x57\xBF\xFA\xF8\xE3\x5F\xC0" + + "\x1D\x51\xF9\xF5\xAF\x7F\xFD\xCF\xFF\xFC\xCF\x7F\xFC\xE3\xE7\xF0\x42\xE6\x94\xFF\xEF\xFF\xFD\xBF\xBF\x0D\xD9\xBE\x18\xB2\xE1\x0F" + + "\xEF\xBD\x77\x85\xD3\x69\x57\x28\xE4\xE8\x32\x08\x03\x52\x71\x4A\x56\xEE\xEA\x5D\x4F\x1D\xA5\x57\xDE\xF0\x83\x5B\xB7\x1D\x5D\xE1" + + "\xD7\x60\x3D\x0B\xF2\xF6\xAD\xCF\x5C\xA8\x6D\x9B\xA8\x06\x68\xE4\x02\x2C\x89\x44\x22\x8A\x8C\x0C\xCF\xC9\xC9\x5E\xB5\xEA\x11\x84" + + "\x33\x68\x99\x5F\xD0\x8D\xB5\xD2\x6F\x7F\xFB\xDB\xCF\x3F\xFF\xFC\x2F\x7F\xF9\x0B\x6B\x8A\x61\x1B\x84\xDF\xFE\xFA\xD7\xBF\xE2\x40" + + "\xDC\x73\xCF\xF2\xD4\xD4\x94\xF0\x88\x50\x84\xDC\x38\x04\x6A\xB6\x36\x25\x3D\x8D\x07\x7B\xE8\xA1\x07\x79\x7A\x47\x38\x82\xF5\x0D" + + "\x01\x78\xD0\x14\x0E\x0A\xAD\x8F\x20\x0F\x9C\x7C\x12\x0C\x71\x09\x47\x9E\x85\xA1\xB5\x9F\xD2\x93\xAB\xF0\x80\xE1\x4C\x9E\x55\xCE" + + "\xDC\x84\x58\xB9\x27\x1B\xC6\x93\x4C\x31\xCE\x54\xB8\x32\xE4\x8E\x74\x25\x61\x38\x59\x69\x4F\x56\x5A\x13\x89\x59\x12\x00\xB0\xFA" + + "\xDB\x09\x30\xAB\xB0\xD5\x9B\xDE\x7C\xF3\xCD\xBE\xBE\x5E\x16\xBF\x91\x5C\x4E\x14\xAC\xD3\x45\x23\x4E\x3E\x7E\xFC\x04\x34\x16\xD4" + + "\xFD\x9C\x6E\x70\x4A\x70\xFB\x9F\xFF\xF9\x9F\x80\x96\xB9\x9D\xD0\x29\x87\x02\x7C\x3D\xA4\xFF\xED\xDF\xFE\x15\x9E\x6A\xB7\x5B\xC0" + + "\xB0\x52\x25\x07\x0C\xD1\xBA\x98\x05\x0F\x6D\x38\x74\x8E\x9C\x26\xFD\x86\x30\x2C\x14\xDE\xFD\x67\xDF\x3D\x72\xF1\xE7\x0F\x6C\x39" + + "\xE8\x4E\x4A\x91\x48\x42\x34\x1A\x35\x9A\x28\x2C\x4C\x5B\x5A\x5A\x8C\x64\x8F\xF5\x68\x10\x5B\x34\x11\x02\x13\xD4\x11\x92\x40\x6F" + + "\x85\x4D\xF4\xA5\xCD\xC2\x37\xCE\x5F\xFE\xF2\xD7\xE3\xC7\x8F\xD6\xD5\xD5\xC6\xC4\x44\x07\x05\x91\x51\x03\x72\xC9\x97\x38\x24\x2B" + + "\x2B\xF3\xC5\x17\x5F\x60\xAB\x02\xF8\x2C\xB2\xF5\xCD\x07\x78\xD0\x54\x4A\x7E\x51\x68\xEF\xF9\x24\x52\x52\x89\xA6\x2F\xA8\x12\xAA" + + "\xF1\xA0\x33\xC3\x24\x25\x26\xC3\x5A\x14\x60\x77\x0E\x19\xC7\x72\xB3\x58\x3A\xDB\xAB\xC0\x84\x58\x45\x7C\xAE\x7C\x10\xD5\x59\x72" + + "\x22\xC2\x99\x1C\xC0\xF6\x54\x05\x00\xB6\x31\x86\x09\xC0\x2A\xB3\xDB\x27\x07\xE6\x97\xB6\xDB\xF8\xF7\x0C\x5C\x7D\x6D\x00\xF3\x87" + + "\xFF\xE2\xC5\x8B\x6F\xBD\xF5\xE6\x2B\xAF\xBC\x32\x61\x42\x27\xB7\xDA\xAB\x4C\x02\x6D\xAC\xAC\xAC\xD8\xBF\x7F\x1F\x04\x04\x41\x32" + + "\xE2\xC0\x0F\x3F\xFC\x10\x3E\xEA\xE3\x94\x6C\x83\xF0\xFE\x2F\xDD\x98\x02\xF3\x4F\xF9\xC8\x8B\xD0\x4D\x99\x62\xA3\x7E\xED\xDA\x3B" + + "\x9D\x9D\x1D\x2C\x31\xD6\x68\x48\xE2\xD7\x37\x67\x19\x5D\x77\xEA\xFD\x6F\x0E\xC3\x3C\xBD\x73\x56\xAE\x41\x2F\x23\x97\x8B\x41\x2F" + + "\x72\xD1\xF4\xF4\xD4\xF5\xEB\xD7\xFF\xFA\xD7\x9F\xB0\xDE\x0D\x4D\x04\x74\x3F\xFD\xF4\x53\x44\xC5\x68\x0A\x61\x13\xB1\x3A\x76\xFE" + + "\xD5\xBB\xF9\xB4\x15\xDF\x5C\xEC\x65\xEC\xCF\xB1\x3D\xFD\xF4\xD3\xB5\xB5\x35\xEC\x22\xC4\x70\x72\x02\x49\x06\xAA\x9F\x7D\xF6\x19" + + "\x61\x08\xFD\xCD\x59\xD4\x4E\xE8\xED\x0C\x01\x61\x0E\xCC\xAE\x22\x62\x1A\xCB\xC4\x96\x07\x78\xC0\xD8\x7E\x76\x7D\x62\x69\x65\xDE" + + "\xE0\xA9\x9A\xFC\xD0\x34\x01\x58\xE1\xC9\x05\xC3\x4A\x77\x1E\x2A\x32\x0F\x70\xCD\x93\xD1\x0A\x4C\x8A\x87\xF1\xB9\xB2\xF8\x1C\x39" + + "\xF7\x54\x0E\x79\x25\x4A\x77\x96\xD2\x95\xA9\x74\xA1\xCC\x00\xC6\x44\x84\x6D\x44\x84\x55\x96\x04\x95\xD9\x33\xCA\x3B\x0A\xBD\x6D" + + "\xFB\xF6\x1D\x3B\x77\x6E\xDD\xBA\x6D\x23\x9D\xA1\xC1\x46\xA1\xFF\x81\xE5\x29\xBF\x9E\x5B\xAB\xD0\xF5\x65\x5F\x44\x90\x8C\x0E\x5E" + + "\xAB\xD5\xC0\x51\x8C\x46\xC3\xCF\x7E\x76\x1F\xA0\x45\xDA\xF6\x01\xDD\x20\x2C\x7F\xF8\xC3\x1F\x18\xBA\xC2\x50\x19\x1C\xFE\xE5\x2F" + + "\x7F\x16\xB2\x8A\x58\x71\x58\x65\x1E\x8A\x31\xDE\x04\x49\xE0\x17\x34\x43\xDE\xB4\xE9\x89\xD8\x58\x1D\xC2\x45\x80\x21\x97\x89\xDB" + + "\xA7\xCC\xDE\x7F\x86\x2C\x40\x71\x7B\x19\x16\x5E\x06\x74\xF8\xE2\xCF\xFB\xE6\xDD\xA3\xD1\x6A\xD8\x5D\x1A\x34\x1A\x15\xA2\x15\xA4" + + "\x1E\xBF\xFB\xDD\xEF\x3E\xF4\x6E\xE8\xE9\xFE\xFD\xDF\xFF\x9D\xFD\xFC\xBF\x0D\x4E\x28\x40\x2C\x5A\xC6\xA7\x29\xB0\x47\xC8\xB9\x4F" + + "\x85\xFF\x93\xFF\xF9\x9F\x3F\xA3\x7D\x3C\x1E\x77\x40\x80\x7F\x38\x59\x15\x20\x30\x2D\x2D\x65\xFF\xFE\xFD\xC2\x59\xD0\xB7\x6B\x51" + + "\xBB\x8D\x43\xCE\x2A\xF1\x0B\x77\xB0\x9B\x24\x6D\xDF\xBE\x9D\x1F\x85\xE6\x72\x60\xAF\xFC\x0E\x18\x1E\x92\x9B\x86\x57\xB3\x32\xBF" + + "\x94\x58\x1E\x44\xB8\xB4\x0A\x65\x6E\x31\x5E\x4F\x4A\x7A\x35\x12\x29\x73\x69\x26\xEC\xA7\x64\x00\x7B\xF2\x95\x9E\x02\xB9\x27\x5F" + + "\xE1\xC9\x97\xC5\xE7\x49\x12\x50\x92\x8A\x94\x3C\x64\xF4\x32\xCE\x73\x55\x6E\x54\xB2\x95\x9E\x2C\x86\xB1\xCA\x49\xA4\x58\x69\x4B" + + "\x52\x59\x13\xD5\x30\x4B\xFC\x8F\x7E\xF4\xA3\xC4\xC4\xC4\xCE\xCE\x4E\x36\xA5\x79\xD6\xAC\x59\x8F\x3E\xBA\x7A\xCF\x9E\x3D\xBB\x76" + + "\xED\x66\x37\xB9\x61\x83\xEC\x23\x3F\xA5\x74\xEB\xD6\xC4\x12\xD2\xFB\xFC\xF3\xCF\xE7\xE5\xE5\x82\x5E\x38\x47\x70\x70\x60\x61\x61" + + "\xFE\xD1\xA3\x47\x11\x24\x43\x52\x98\xF0\x22\x7E\x46\xC0\xCC\x7C\x8E\xD7\x0D\x26\x26\x6C\x27\xC0\x46\xBE\x87\xD7\x43\x79\xF8\x5C" + + "\xEE\x6F\x37\x4C\xF9\xF8\xFD\x4C\x8B\x50\x39\x7B\xF6\x6C\x42\x82\x47\x42\x18\x56\xCA\xA4\x92\x8E\xA9\x73\x0F\x78\x57\x66\xBC\xBD" + + "\x0C\xD3\xAB\x88\x7E\xDE\xDD\xBF\x48\xA5\x26\x8B\xE9\x4A\x65\x12\x83\x21\xEE\xD1\x47\x57\x41\x75\xF1\xAB\xD1\x44\x1F\xD1\xED\xF7" + + "\xBF\xFF\xBD\x4F\x07\xC7\xFF\x52\xBE\xA1\x40\xFB\xF9\xF3\xE7\x5E\x78\xE1\x85\xF3\xE7\xCF\xFF\xEB\xBF\xFE\x2B\xDF\xA4\x43\xFB\x3B" + + "\x21\xC6\xEC\x05\x90\x5C\xA4\x33\x62\x31\x74\x98\xC4\xD2\x2E\x97\x03\xBE\x31\xC2\x2B\x19\x6E\x2E\xC0\x3E\x4A\x2B\x5C\xD7\x6E\xEB" + + "\xD6\xAD\xBB\x77\xEF\xDE\xBB\x77\xEF\xEA\xD5\xAB\xFB\xFB\xFB\xDB\xDB\xDB\xC1\x02\x88\x00\x17\xBE\xE7\x81\x7D\x86\xAF\x00\x6D\x59" + + "\x0D\x31\x52\xA9\x66\xDC\xE6\x12\x86\xB9\x7A\x9E\x97\x61\x56\x12\x05\x56\x79\x01\x56\x10\xED\xCD\x07\xC3\x32\x54\x80\x2E\x00\x4E" + + "\xC8\x93\x26\xE4\xA2\x84\x0E\x73\x42\xED\xC9\x55\x13\x86\x29\xC0\x44\x84\x99\x02\xA7\xA9\x6C\x44\x84\x55\x96\x44\x95\x39\x7E\x6C" + + "\x88\x64\x9C\x58\x16\x28\x95\x07\x4A\xE4\x81\x62\x99\x42\xAD\xD1\xE9\x74\x68\x9A\xFC\xFC\xFC\xDE\xDE\xDE\x9F\xFD\xEC\x67\xDB\x77" + + "\xEC\x40\xB2\x84\x1F\xC9\xCE\x0F\x7F\xE9\x8C\x8E\x5B\xAA\xC0\xEC\xC6\x48\xA7\x4E\x9D\xCA\xCB\xCB\x91\x48\x44\x8C\xDE\xD6\xD6\xE6" + + "\xD7\x5E\xBB\x84\xB0\x19\x7E\xC9\x72\x39\xF8\x25\xD3\x01\xA1\x53\xF2\x3E\x77\xE1\xC2\x85\x79\xF3\xE6\x54\x56\x96\x67\x66\x66\x64" + + "\x64\xA4\x15\x17\x17\x4E\x9F\x3E\x15\xE9\xB4\xF0\xF5\x37\x60\x98\xEF\x0B\x20\xE3\xA8\xBC\xFB\xEE\xBB\x59\x59\x19\xDE\xF5\xCD\xA5" + + "\x53\x16\xAC\x3C\x72\xE1\xE7\xFB\x6F\xD3\xA2\x3C\x9C\xFC\x9E\x79\xE7\xE8\x6B\x1F\x4F\x5F\x72\x3F\x99\xC7\xA2\x51\x49\x24\x62\x87" + + "\xC3\xB6\x6F\xDF\xBE\x4F\x3F\xFD\x8C\x8F\x99\x11\x9E\xF8\xC4\xCC\xFC\x6F\xE4\x83\x91\x17\x9E\x7F\xAE\xA3\xA3\x2D\x27\x27\x0B\x07" + + "\x0D\xFC\xE3\x4D\xF2\xF3\xF3\xEE\xBB\x6F\x25\xEB\xF2\x84\x6D\x3B\xB4\x8F\xA3\xED\x43\x0E\x01\x5E\xBC\x74\xE9\x12\x36\x29\x1D\xD1" + + "\x8A\xD5\x6A\xDE\xB1\x63\x87\x70\x40\xEB\x96\x02\xEC\x03\x2D\xDB\x9E\x78\xE2\x09\xF8\x33\x3B\xDF\xFB\xC0\x03\x0F\x4C\x9A\x34\xA9" + + "\xB0\xB0\x10\xEF\x16\x17\x17\x17\x15\x1D\x13\x11\x19\x1D\x19\xAD\x83\x85\x47\x46\x6B\xC3\x23\x07\xA9\xEE\x08\x14\x98\x19\x88\xCD" + + "\x29\xE2\xB8\xCD\xA6\xD7\x0C\xE3\x61\x36\x00\x56\xC7\xE7\xC2\x94\x9E\x3C\x22\xC2\xF1\x79\xDE\x28\x3A\x4F\x12\x4F\x30\x96\x25\x12" + + "\x53\x26\x90\xA7\x80\xBA\x2A\x3E\x4F\x0D\x86\x3D\x39\x60\x58\xE5\xCE\x52\x81\x61\xAA\xC0\x2A\x7B\x8A\xCA\x96\x04\x05\x46\x08\xAD" + + "\x32\x3A\x55\x7A\xBB\x2A\xCE\xAA\x22\x97\xF2\x1B\xE4\x91\xB1\xB2\xD0\x28\xB1\x52\x1B\x28\x96\x02\x67\x8D\x46\x1B\x1E\x1E\x8E\x66" + + "\xAA\xAB\xAB\x5B\xB8\x70\x21\x7E\x39\xA2\x8B\x2D\x5B\xB6\xB0\xB5\xA3\x37\x0C\xB7\xF9\xDC\x1F\xF8\xA6\xCC\x85\x66\x47\x9A\xDD\x18" + + "\x09\xF8\x55\x57\x57\xD3\xC5\xE8\xB4\xC8\xE8\x7A\x7A\x26\x5E\xBB\x76\x0D\xC2\x42\x55\x85\xD0\x0B\x95\x60\x7E\x29\xA4\x91\x39\x25" + + "\xC4\x64\xDA\xB4\x29\xF0\x45\x72\x39\x62\x80\x7F\x08\xBD\xF1\x57\x60\xE0\x38\x54\x0C\x06\xFD\xC1\x83\x07\xBE\x18\x1C\x10\x0E\xCB" + + "\xF0\x60\xA9\x21\x3E\x8A\x0F\x4D\x4B\x4B\x95\xC9\xA4\x4A\x95\x3C\x34\x54\xB3\xF4\xD1\x2D\xC7\x5F\xFF\xC5\xD7\xBC\xB0\x16\x7F\xD2" + + "\x08\x9F\x7B\xF4\xD2\xC7\x4B\xD7\x3C\x19\x11\x15\x41\x2E\x0C\x92\x88\x9C\x4E\xC7\xC9\x93\x27\x11\x92\x00\x5D\xD6\xC1\x41\x84\xFF" + + "\xEB\xBF\xFE\x6B\x28\xBA\x4C\x87\x51\xF9\x3F\xFF\xE7\x5F\x16\x2C\x9C\x37\x6B\xDE\xBC\xFE\xB9\xF3\xB4\xA1\x5A\x51\x48\x10\x3B\xEB" + + "\x1B\x14\x14\x80\x37\xAC\xA9\xA9\x42\x83\xF3\x2D\xEC\xD3\x50\xC2\x06\x64\x0C\xA3\x5C\xB7\x6E\x2D\x02\x01\x60\x8C\x3F\x77\xBB\x9D" + + "\x47\x8E\x1C\x41\x47\xCC\xEE\xB1\x7C\x03\x8C\x47\x3E\x17\xFA\xC6\xF7\x07\xDE\xE8\xBD\xD3\x37\x5B\xF3\x79\xC5\x8A\x15\x6D\x6D\x6D" + + "\xA9\xA9\xA9\x91\x91\x91\x2A\x95\x2A\x34\x2C\x3C\x22\x4A\x67\x73\xC6\x27\xA6\x64\xA4\x65\xE7\x67\x17\x94\xF2\xD3\x30\xD8\xF5\x49" + + "\xFC\x78\xD5\xC0\xF0\x15\xCB\x7B\x09\xBA\x35\x05\x44\x84\x39\x86\x69\x08\x5D\xCD\x70\xE5\x0D\x00\x33\x23\x0A\xAC\x4D\xCC\x87\xA9" + + "\x13\x88\x81\x4F\x80\x4A\x06\xAE\x12\x72\xA5\xF1\xC4\x64\x89\xF9\x72\x06\x30\x5E\x00\x7A\x13\xA8\xC5\xE7\x32\x80\xD5\x34\x84\x56" + + "\x39\xD2\xD4\xF6\x14\xB5\x2D\x49\x63\x49\x54\x9B\xE2\xB5\x26\x97\xC6\xE8\xD4\x18\xEC\x1A\xBD\x4D\xAD\xB3\x68\x62\x8C\x1A\xBA\xA8" + + "\x1D\xB9\x84\x90\x2C\x9D\x13\x25\xD5\x44\x04\xCB\x94\x81\x22\x89\x44\x2A\x0B\x0E\x0E\x8E\x89\x89\x29\x2E\x2E\x9E\x36\x6D\x1A\xE2" + + "\x0D\x76\x03\xE1\x4D\x83\x37\xB4\x17\x3A\x36\xBC\xE0\x66\x5D\x8D\xC4\x9F\x34\x42\xF9\xC6\x1B\x6F\x4C\x9F\x3E\x0D\x92\x02\x4E\x40" + + "\x5D\x6F\xEF\xC4\xF7\xDF\x7F\xFF\x57\xBF\xFA\x15\x73\x4D\xA8\x0A\xD2\x39\x7E\x8C\xCA\x87\xDE\xAB\x57\xDF\x84\x54\xC2\x05\x43\xA8" + + "\x3B\xAA\xE8\x8D\x1A\x20\x50\x28\xB5\x74\xAD\x59\xA4\xB2\xE7\xCE\xBD\x7A\x3D\x6D\x19\x96\x61\x36\x12\xF6\x05\x1D\xD6\xB2\xD9\x2C" + + "\x0A\x32\x6F\x44\x62\xB2\xDA\xD6\xED\x7B\x8E\x2C\x6D\xF9\xB5\xEB\xF0\x3E\x7A\x4D\xC2\x63\x07\x5F\x30\x59\xED\x32\x99\x18\xC8\x99" + + "\xCD\xC6\x63\xC7\x8E\x31\x7A\x81\x2E\x5A\x09\xF4\xFE\xE9\x4F\x7F\xFA\x62\x48\x12\xCB\x37\x14\x5E\x5C\x52\x52\xB4\xF2\xFE\x07\xFF" + + "\xF8\xF9\x7F\x7C\xFE\xE7\xBF\x9D\x3A\x77\x31\x3A\x3A\x92\xCC\x79\xD6\xA8\xD0\xEC\x28\x03\x03\xFD\xD1\x6F\x22\x43\xE1\x81\xBF\x5E" + + "\xFB\x7C\x41\xF4\xFC\xAF\xEC\x65\xF0\x16\xB4\xB3\x82\xDC\x31\x29\x24\x3B\x3B\x13\x61\x14\x5B\x71\xFA\x2B\x2A\x30\xBB\x1A\x09\xFE" + + "\x06\xAF\x83\xEF\xF9\x78\x23\xF3\xCF\x75\xEB\xD6\xCD\x9D\x3B\xB7\xBE\xBE\x1E\x7F\x15\x12\x12\x82\x3F\xD1\x68\xC3\xE2\x0C\xE6\x84" + + "\xE4\xF4\x74\x10\x9B\x5F\x0C\x56\xB9\xC5\xB1\x86\xBD\xDC\x7F\xF0\xA9\x23\x6E\x28\x8B\x53\xE0\x91\x02\x9C\x55\x48\xD6\xDF\xF1\x8B" + + "\x48\x2E\x0C\x4F\x2E\x24\x18\x27\x15\x68\x40\x32\x85\x59\x99\x98\xAB\x48\x04\xBD\xB9\x8A\x24\xD4\x89\xA9\x18\xE4\x89\xF9\x1A\x56" + + "\xF1\xE4\xA8\x3D\x00\x38\x4B\xED\x48\xD7\x38\xD2\xD5\xF6\x54\x8D\x2D\x59\x83\x1C\xD8\x1C\xAF\x31\xBB\xB5\x46\x97\xD6\x68\xD7\xEA" + + "\x6D\x9A\x58\x8B\x86\x5C\xCD\x6F\x14\x2E\x88\x45\x2F\x06\x8E\x65\x75\x59\x58\x94\x48\xA1\x0E\x08\x11\x8F\x0B\x0C\x1A\x3D\x7A\x8C" + + "\x4A\xAD\xC9\xCE\xCE\x66\x17\x61\xFA\x5C\x0F\x9C\x97\x97\x77\xC7\x1D\x77\x28\x14\x8A\x9B\x75\x35\x12\x3B\xEB\x8B\x8E\x5C\x49\x07" + + "\x63\x10\x39\xB3\xE5\x85\x69\x1E\xCB\x09\x0B\xE8\x15\xBA\xA3\x50\x52\xC0\x36\xE8\x1D\xE7\x3F\xA6\xBB\xB7\xF7\xD2\x1B\x6F\x1D\x3A" + + "\x7E\xD2\xEE\xB0\x33\x8C\xD9\x29\x28\x76\xF3\x1E\xE4\xD2\xFF\xFD\xDF\xFF\xED\x93\x10\xDE\x80\xE1\xBF\x79\x47\xB3\xF1\xF0\xCC\x99" + + "\x33\x08\xE9\xD5\x1A\x95\x54\x1C\x52\x54\x59\xB7\xFB\xA5\x2B\x82\xB5\x91\xBF\x96\xC8\x99\x0E\x3B\xA3\xCC\x2A\x2C\x65\xD3\x27\x22" + + "\x23\x23\xB6\x6F\xDF\xF6\xE9\xA7\x9F\x0E\xA5\x97\x1F\x34\xF6\x19\x88\xFA\xFC\xF3\xCF\xCB\xCA\x4A\xAC\x56\xCB\xE5\x77\xDE\x43\x12" + + "\xFC\x6F\xFF\xFD\x57\xE4\x09\x39\x79\xB9\x32\xA9\x98\x9D\xA8\x63\x6D\x85\xB0\x05\x04\xFA\xB4\xF6\xF5\x18\xE6\x3F\x6B\xCD\x9A\xD5" + + "\xF4\x74\x3D\xB9\xC1\x5A\x73\x73\x23\x00\x66\x81\xD5\xF5\x44\x78\x24\x0A\x0C\x1F\x83\xA7\xC1\xDF\x86\x5E\x0F\x8C\x87\xD8\x1F\x11" + + "\x11\xE1\xEF\xEF\x2F\x95\xC9\x23\x63\x62\xED\xAE\x84\x8C\xEC\x82\x9C\x82\xD2\x3C\xEF\x85\xBE\xC2\x15\x36\x06\x16\xC1\xF2\xB9\xA5" + + "\x28\x3F\x11\x7A\x98\x1C\x78\x50\xFC\xCC\xF2\xDE\x61\x43\xE8\x6C\xBA\xFE\x8E\x5F\x74\x6A\x61\x64\x4A\x61\x78\x62\x41\x58\x52\x41" + + "\x28\x30\x4E\xCE\xD7\x24\x01\xD7\x3C\x30\xAC\x4C\xCA\x53\x25\x17\xA8\xC8\xC3\x02\x75\x22\xC1\x5B\x93\x58\xA0\x4D\x2C\x24\x0C\xBB" + + "\xB3\xB5\x9E\x1C\x0D\x00\x76\x66\xA8\x09\xC0\x29\x6A\x7B\xB2\xD6\x9A\xA4\x36\x79\xA0\xC0\x5A\x23\x18\x76\x00\x60\x75\x9C\x45\x4D" + + "\x00\x36\x08\x97\xB3\xE3\xCD\x67\x6D\x1D\xD4\xC5\xAA\xD0\x80\x10\xC9\xD8\x80\x20\xD8\x98\x71\x81\xFE\x01\x41\xC4\x02\x61\xC1\x77" + + "\x8F\x19\x8B\x16\x57\x2A\x95\x5F\x71\x45\x0E\x61\xF0\xFC\xDC\x73\xCF\x42\x4F\x70\xF8\xE9\xA9\xC5\xF4\xF3\xE7\xCF\x7F\xF2\x09\x8B" + + "\x9C\x89\x6B\xFE\xE1\x0F\x7F\xF8\x62\x70\x4C\xC8\x73\x08\x97\x9D\x36\x6D\xEA\x4F\x7F\xFA\x93\x8A\xEA\xAA\x8F\x3F\xFD\x3D\x3C\xF2" + + "\xFF\x7E\xF1\xC5\xF1\x67\x9E\x95\x0A\x9C\x92\xCD\xC8\x87\x63\xC1\x9D\x84\xE4\x8F\x64\xE3\x5F\x8C\xDC\x02\xEF\x10\x1A\xAA\x95\x88" + + "\x43\xFA\x57\xAC\x62\xB7\x86\xF8\xDA\x18\xDE\x7B\xFA\xEA\xF1\x7F\xFA\x55\x77\xFF\x22\xB6\x80\x01\xCA\x7B\xEF\x5D\xF1\xD9\x67\x9F" + + "\xB1\xDE\x8D\xE5\xBD\xE8\x9E\xBE\x18\x92\xEA\xF3\xDF\x1F\x95\xF5\xEB\xD7\x8D\x1E\x7D\x27\xA2\x89\x17\xCF\x9E\xC3\x1E\xB0\xFE\x6F" + + "\xFF\xF7\xAF\xF1\x89\xF1\x72\x3A\xAD\x8D\x35\x14\x00\x46\x14\x83\x50\x88\x1F\x68\xB8\x41\xCB\xF0\x0C\xB3\xFA\xBC\x79\x73\x24\xE4" + + "\x5A\x7F\x32\xCB\x75\xF9\xF2\x65\xC2\x7B\x7F\x0F\xF5\x84\x91\x00\x8C\x18\x18\x4F\x05\x06\x05\xAB\xD4\x5A\xA5\x4A\xC3\x4C\x41\x6E" + + "\xB5\xAE\x51\xAA\xB5\xD1\x3A\x7D\x7C\x52\x5A\xAE\xF7\x4A\x7D\xE1\x3D\x7E\x87\x5D\x6A\x23\x77\xC8\x72\x59\xBE\x24\x0B\x27\x42\x93" + + "\x58\xDA\x57\x81\xF3\xAE\x33\x88\x95\x43\xDE\xBC\xC2\x4F\x97\x5A\x44\x18\x4E\x2E\x80\x45\x24\x15\x02\x63\x6D\x12\x18\xE6\x00\x56" + + "\xFA\x28\x70\x42\xBE\x26\xA1\x90\x44\xD1\xA0\xD7\x9D\x4D\x14\xD8\x95\xC1\x14\x58\x6D\x03\xC0\x89\x1A\x12\x42\xBB\x43\x8D\xAE\x50" + + "\x03\x01\x58\xA3\x1B\x46\x81\x85\xDC\xFA\x2C\x8E\xC5\x3F\xEB\xC3\x39\x6C\x5C\x88\x84\x01\xFC\xD5\x15\x18\x47\x97\x8D\x5D\xD5\xD7" + + "\xD7\x42\x55\x64\x32\x89\x5E\x1F\x7B\xF8\xF0\xA1\xDF\xFE\xF6\xB7\x88\x9F\xD9\x24\x04\x88\x0C\xAF\x87\x42\x6D\x64\x0F\x2F\x5C\x38" + + "\x2F\x93\x4B\x03\xC7\x8D\x9D\x36\xB3\xFF\xF3\xBF\x7C\xF1\xAF\xFF\xFD\x97\xFF\xF8\xCB\xFF\xFE\xE2\x37\xBF\xFB\xFF\xD4\xBD\x07\x78" + + "\x54\xD5\xF6\xF7\xCF\x73\x9B\xA2\x40\xDA\xD4\x94\x99\xC9\x64\x26\x99\x64\x92\x4C\x32\x99\x9A\xC9\xF4\x5E\xD3\xE8\x4D\x40\xA4\x89" + + "\x22\x4D\x50\x8A\x02\xA2\x22\xBD\x48\x2F\xD2\x12\x4A\xA8\xD2\x7B\x2F\x16\x10\x10\x6C\xD7\x6B\xC1\x76\xD5\x5B\xFD\xDD\xAB\xEF\xFF" + + "\xF7\xFE\xE5\xFD\xEE\xB3\x33\x87\x43\x12\x30\x40\x54\x3C\xCF\x7A\xCE\x73\x32\x99\x4C\x66\xCE\xAC\xCF\xFE\xAE\xB5\xCB\xDA\xA9\x62" + + "\x11\xAB\xC0\xD4\x35\x81\xF4\xEC\xD9\xB3\x7E\x32\x07\xE6\x3A\x28\x1B\x4B\xE3\xF8\xF7\xBF\xBF\xEB\xDF\xBF\x7F\x62\x52\x02\x5C\x3C" + + "\x57\xAD\x5E\xBC\xF5\x28\xDD\x88\x88\xBB\x71\xC4\xCF\x24\xBF\xEB\x8E\x5C\xDC\x7A\xF6\xC3\x19\x2B\xB7\x16\x14\x15\x89\x99\xE0\xB9" + + "\x6B\xD7\x2E\x1F\x7F\xFC\xF1\x07\xF1\x03\x22\xCC\xE6\x17\x0D\x3E\x20\x7D\xF3\xF8\xF1\x9B\x6F\xBE\x29\x28\xC8\xA7\x01\x4E\xCF\x5E" + + "\xBD\xDE\xB8\x78\xE5\xED\x0F\x3E\x18\xFB\xEC\xB3\x54\x36\xB9\x0B\xB6\x10\xBC\x38\x9D\x8E\x7F\xFF\xFB\xDF\xB7\x50\xE0\xC6\xB7\x08" + + "\x17\x3F\xFC\xF0\x3D\x52\x68\x3A\xFB\x15\x3A\xBF\x7E\xFD\x86\x5B\x74\x4A\x37\x1F\x60\xA5\x2A\xAF\xE9\x1A\x57\xEC\xB4\x0A\x0E\xC3" + + "\x8D\x7B\xA4\x58\xA4\x03\x37\x72\xDB\x64\xF5\xAC\xEB\x54\xDF\x52\x81\x59\x7A\x99\x8B\x7A\x35\x6E\x95\xE7\x88\xE4\x82\x61\x6B\x48" + + "\x69\x83\x14\x87\xE4\xD6\x90\x0C\x22\x4C\xF2\x5E\x3F\x31\xAB\x5F\x6C\x21\xE3\xC0\xA9\xA5\xFE\x8C\xD2\x70\xBA\x39\x44\xFA\xBA\x8C" + + "\x3E\x02\xB0\xC9\x43\x15\x98\x0D\xA1\x65\xDA\x32\xA9\xA6\x94\x01\xD8\x08\x7A\xA5\xB9\xC5\x52\x95\x46\xAA\x2A\x44\x1A\xCC\x56\xD2" + + "\x61\x49\x66\x4B\x61\xB1\x25\x66\x61\x48\x95\xF1\xB4\xD4\xAC\x9C\x1B\x4C\x9E\x9D\x9A\xA5\x6A\x93\x98\x7C\xF7\x00\xB3\x4B\x17\x2E" + + "\x5D\xBA\x34\x77\xEE\xDC\xCC\x4C\x29\x33\x5B\x43\x34\x61\xC2\x33\x5F\x7E\xF9\x25\x9D\xD5\x0C\x80\x3F\xFC\xF0\x43\x3A\x16\xD2\xA0" + + "\x4F\x85\xF5\x9B\x67\x9E\x19\xCF\xE7\x91\x75\x08\x0E\x97\xF3\xDC\x95\xF7\xC8\x83\xD7\xAE\x2D\x5A\xB6\x5C\xC0\x2C\xA6\x61\x01\xA6" + + "\xB3\x41\x86\x0F\x1F\x7A\xED\x5A\xC3\xDE\x9D\xE6\x60\x4C\xC7\x5D\xF0\x56\xF5\x7A\x1D\xD9\x2B\x4C\x2C\xEC\xF2\xF0\xC0\x4D\xCC\xD6" + + "\x5E\x1B\x7E\x66\x11\x66\xB6\x9E\x20\x18\x57\x75\xEB\xC5\x4B\x4E\xC8\xC8\xC8\x40\xA8\x72\xFA\xF4\x29\xDC\x19\xDA\x35\x80\x33\xDA" + + "\x3B\x76\xEA\x68\x83\xE6\x89\xFD\xB0\xFB\xF7\xEF\x63\xEA\x3F\x93\xA5\x45\xBC\x94\xA4\x9C\x1C\xA5\xA6\x48\xC3\x67\x96\x6D\xDD\xB0" + + "\xDC\x92\x29\xC4\x01\xD4\xD9\x9C\xE5\x27\xA3\x15\x4E\xC7\x04\xD2\x99\x0F\x0A\x0B\xE3\xCD\x44\xCF\xEE\x74\x9F\xAA\x26\x03\xE9\xE6" + + "\xE4\xC0\x69\x0C\xC0\x99\x59\x4A\x04\xC6\x6E\x5F\xD8\x13\x88\x52\x73\xE3\x1C\x8C\xB2\xF3\x2B\xD8\x25\xF8\xA1\x38\xAB\xD7\x07\x78" + + "\x1B\x50\xCA\x29\xB2\x73\x7D\x3D\xE0\x8D\x95\x65\x03\xB4\xB0\x56\x1C\x4B\xE6\x5C\x7D\xC3\x88\x51\xA4\xCA\x7F\xC3\x13\xAA\x7C\x74" + + "\x35\x52\x81\x2B\xAA\x06\xC3\xB6\x70\xBD\x14\xDB\xC3\x72\x5B\x58\xC6\x04\xD2\x19\x30\x6B\x90\xE8\x30\xA3\xC0\x12\x4B\x38\x03\x56" + + "\x1A\xA2\x1D\xD1\x52\x44\xD1\x06\x8F\xD4\xE0\xCA\x28\x71\x4A\x4B\xEC\x52\x28\xB0\xB6\x4C\xA6\x31\x67\x16\x18\x89\xA9\x4B\x64\x79" + + "\x8C\x02\xE7\x5C\x57\x60\x56\x84\x01\x24\xCB\x30\xAD\xF3\x2E\x92\x29\x52\x90\x0C\xF3\x84\x6D\x93\x52\x12\x49\xED\x0E\x51\x32\x5F" + + "\x98\x22\xA8\x37\x9E\x28\xF5\xC1\x36\x6D\x5B\x24\x84\xA6\x55\x38\x10\x2D\xBB\xDD\x4E\x3A\x57\x3E\x10\xF0\xD1\x19\x08\x94\x5E\x5C" + + "\xD0\x51\x8D\xC6\x6E\x44\x9D\x06\x41\x63\xFB\xF6\xD5\x20\x53\x26\x93\xF0\xF9\xC9\xD5\x1D\xAA\x17\xAF\x78\xE5\xC5\xA9\xD3\xF2\xF2" + + "\x54\xA9\xA9\x62\xAE\x53\x32\xE3\x1C\x82\xC7\x1E\x1B\xCC\xE5\xBF\xF9\x07\xCB\x30\x34\x9C\x66\xD7\x59\x8A\xAC\x79\xEB\x76\x6F\x3C" + + "\xFE\xCE\xCF\x47\x6F\x5C\x7E\xC9\x26\xC9\x13\x66\x2F\xCF\x94\xCB\xA4\x52\x32\x6E\x84\x48\xF8\xA3\x8F\x3E\x62\xE5\x17\xA9\xEF\x7F" + + "\xFF\x8B\xBC\xE1\xA6\xFD\xC6\xF4\x62\xEE\xDC\xD9\x22\xA6\x04\x02\x8D\x93\x69\xA0\x2B\x8D\xAF\xCA\x64\x6F\x14\x05\x18\x61\x36\x12" + + "\xE6\x6B\xB7\xD3\xD8\xFD\xFF\xF5\xC7\x8F\xAB\x57\xAF\x66\x06\x87\x65\x78\xA9\xF9\xF3\x5F\xA6\x9B\x36\x37\x5E\x63\xD8\x9C\xA2\x76" + + "\x54\x81\x53\x52\x78\xD9\xAA\x3C\xB9\x42\x99\xA5\xC8\x86\xC9\xB3\x94\x59\xCA\x1C\x99\x5C\x91\x29\x57\xE6\xE6\x6B\x90\xFA\xDA\x5C" + + "\xBE\x10\x53\x5B\x83\x9D\x05\x19\x60\xEB\xCB\x72\xD6\x24\x04\x6E\x94\xD9\x06\xF3\x99\xAF\x2F\x4E\xA8\xFF\x5B\x32\xEA\x1B\x88\xAB" + + "\x2E\x57\x78\xE3\x09\x70\x43\xB0\x5B\x69\x5C\x31\xC2\xB0\x33\x9C\xE7\x08\xE7\x3A\xC3\x39\x0E\x86\x61\x3B\x49\x86\x33\x6C\x38\x87" + + "\xC1\x30\x89\x9F\xCB\x42\x12\x6B\x34\xC3\x1A\x01\xC3\x92\xD2\xA0\xD4\xE0\x93\x1A\x08\xC0\x12\x28\x70\x89\x53\xA2\x25\x00\xCB\x8A" + + "\x89\x02\xCB\x18\x05\x06\xC0\xD2\xDC\x78\x08\x9D\x53\x5F\xD4\x8E\xBB\x33\x03\xC4\x56\x28\xCD\x4A\x22\xC5\xB1\xC8\x36\x2B\x02\x91" + + "\xB8\xA8\xA8\x38\x18\x0C\xF6\xE8\xD1\x63\xF0\xE0\xC1\x43\x38\xC7\x63\x8F\x3D\x36\x62\xC4\x88\xCA\xCA\xCA\xBB\xDC\x99\x81\xB6\xC7" + + "\x68\x9E\x2F\x5F\xBE\x32\x61\xC2\xB3\xF0\x4B\x50\x01\x11\xAE\xAB\xAB\xFB\xE4\x93\x4F\xC0\x2D\x1B\x3C\x37\x58\x93\xD0\xC0\x2F\xFF" + + "\xE7\x7F\xFE\x27\x1C\x0E\xD2\x95\x49\xF0\xC5\xE4\xE4\x84\xC4\xC4\x76\x6D\xDB\x3E\xC0\x94\x56\x4C\x6B\xA4\xC0\xFC\x91\x23\x47\xDC" + + "\x96\x53\x72\xFF\x17\x33\xC7\xEB\xFF\xFB\xFA\xEB\xAF\x83\xC1\x00\xFE\x51\x7A\x9A\xB8\xB2\xDB\x43\x88\x6C\xEB\xAB\x6A\xFD\x3C\x18" + + "\x93\xF8\xFC\xC4\x3B\x6B\x0F\x9C\x2B\xEF\xD4\x83\xEC\x30\x28\x16\x56\x54\x94\xC7\xBB\xF7\xDE\xA7\x1D\x04\xDF\x7E\xFB\x6D\x73\x7A" + + "\x9B\x66\xCE\x9C\xC1\xEC\x66\x5E\xDF\x29\x40\xF6\x31\x93\xA4\x37\xB8\x45\x6C\xA8\x12\x8D\x46\x70\x6F\x9B\x7F\xA3\x38\x22\xFC\xE3" + + "\x77\xDF\x7D\x07\xED\xA5\xC3\x01\xB8\x57\x47\x8E\x1C\x61\xB7\x32\xE5\xFA\x43\x33\x87\x91\xE0\x69\xF0\x37\x78\x1D\x7C\x8F\xEB\x8A" + + "\xF0\x4C\xF8\x67\x2C\x16\x33\x9B\xCD\xAA\xDC\xBC\xD4\x74\x89\x2C\x4B\x99\x57\x50\x64\xB6\x3A\x02\xD1\x4A\xB6\x48\xDD\x0D\x30\x37" + + "\xB5\x70\xBF\xE9\x62\x57\x10\xE7\x9B\x2B\x30\x47\x7E\xAF\x3F\x4E\x14\x58\xE3\x8E\x69\x5C\xD1\x7C\x67\x38\xDF\x15\x56\x3B\xC2\x2A" + + "\x67\x98\xD1\xE1\x90\xDC\x16\x92\xD9\xC2\x12\x5B\x28\xC3\x1A\x02\xBD\xC4\x40\x6F\x19\x14\x38\x0C\x05\x96\x18\xEB\x15\x58\x62\x70" + + "\x49\xB5\x4E\x49\x89\x5D\x56\x6C\xCD\x2C\x82\x02\x97\x66\x92\x04\xD8\x00\xF9\x95\xE6\x21\x84\x2E\x92\xE6\x14\x4A\x18\x05\x06\xB1" + + "\x69\x0A\x95\x20\x5D\x96\xC0\x13\x3C\xD0\xB6\xDD\xFD\x0F\xB6\x49\x4D\xCF\xB0\x5A\xAD\x1D\x3B\x76\xC4\x6D\x1A\x33\x66\xCC\xD4\xA9" + + "\x53\x97\x2F\x5F\x5E\x53\x53\xB3\x6A\xD5\xAA\x95\x1C\x5B\xBE\x62\xC5\xFA\x0D\x1B\x46\x8E\x1C\x79\xF7\xC3\x48\xF4\x1B\x3D\x76\xEC" + + "\x98\xDF\xEF\x4D\x49\x49\xA6\x1B\x6D\x21\xAF\x63\x7B\x65\x70\xB0\x3E\xD4\x38\x8A\xA3\x8F\x7F\xFF\xFD\xF7\xBD\x7B\xF7\x64\x46\x89" + + "\x88\x2F\x42\x87\x65\xCC\xBE\x2A\xCC\x8F\xD7\xFD\x92\x0A\x8B\x50\xC8\x9B\x3B\x77\x4E\x03\xB7\xBE\x2D\x86\x69\xBF\xCE\xA2\x45\x8B" + + "\xA4\x52\x89\x48\xC8\x57\xE5\xE5\x2E\xA8\x3B\x58\xC7\x59\xFD\xDF\xE2\xF2\xBB\xFE\xC8\xA5\x6D\xAF\xFF\xE5\x85\x45\x35\x12\x69\x86" + + "\x8C\xC9\x32\xD6\xAD\xAB\xFD\xF4\xD3\x4F\xE9\x5D\x42\x4B\x87\xF6\x8E\x4E\x32\x6B\x1C\x3C\x73\x6F\x14\x2E\x36\x6D\xAA\x63\x16\x5A" + + "\x35\x41\x2C\xF7\x2E\x31\xED\x60\xE2\xB3\xCF\x3E\xC3\x4E\xC0\xBC\xAD\x74\x83\xFE\xD5\xD1\xA3\x87\xB3\xB2\x32\xF1\x5D\xE0\xAB\x41" + + "\xBC\x00\x67\x68\xBC\xD0\xBF\xF9\xC3\x48\x4F\x3E\xF9\xE4\x86\x0D\x1B\x56\xAC\x58\xB1\x8A\x73\x90\x2D\x08\x6B\x6B\x71\x31\x6B\xD6" + + "\x2C\xBC\x02\xDD\xD0\xCC\xEB\xF5\xE6\xA9\xF3\x53\x48\x61\xD5\x34\xB9\x32\x47\x67\xB4\x40\x9B\x43\x37\xAE\xD7\x67\x37\x46\xF2\x35" + + "\xA8\xB3\xD1\xC0\x68\x9C\x7C\x3D\x5A\x6E\xA0\xBA\x0D\x15\x98\x00\x5C\xE4\x8E\x6A\x5C\x91\x02\x02\x70\x44\xED\x22\x3A\xCC\x88\x70" + + "\x10\x22\x2C\xB3\x87\xA4\xB6\x70\x06\xE9\x85\xA6\x22\x4C\x42\xE8\x74\x73\x38\xDD\xE8\x97\x90\x10\xDA\x43\x42\x68\xBD\x4B\x5A\xE2" + + "\x90\x6A\x6D\x54\x81\x49\x08\x5D\x68\x24\x0C\x23\x84\xCE\xD5\x4A\x73\x8A\xD2\xE5\xB9\x7C\xB1\xA4\x5D\x32\xEF\xBE\xD6\x0F\xFE\xE9" + + "\xFE\xD6\x0A\xA5\x32\x14\x0A\x0D\x1A\x34\x08\xC4\x4E\x9E\x3C\x79\xF6\xEC\xD9\xCB\x96\x2D\x5B\xCD\x14\xA3\xA4\x25\xB2\xE6\x37\x3A" + + "\x5A\x64\x77\x42\x56\x7E\x91\xE8\x4E\x9B\xF6\x92\x4C\x96\x41\x47\x8F\x0E\x1C\xD8\xCF\xE6\x75\x70\x4D\x64\xC2\xDC\x39\x1B\x0D\xDC" + + "\x88\xF5\x57\x44\x86\x09\x09\x6D\xE1\x2B\x0D\xBA\xAC\xA8\x02\xB3\x3F\xE2\xF5\xA1\x09\xA7\x4E\x9D\xBC\x59\x8B\xD0\x9C\x83\xCE\xD6" + + "\x44\xDC\x6E\xB3\x59\xF1\x6A\x78\xD9\x5E\x8F\x0E\x7B\xF5\x8D\x4F\xD6\x1D\xB9\xB8\xF1\x67\x58\x30\x4C\x16\xFA\x9E\x20\xD5\x33\xBB" + + "\x3C\x3C\x48\xC8\x4F\xE6\x0B\x78\x1D\x3B\xB4\xC7\x8D\x45\xFC\xCC\xCA\x2F\xCD\x54\x9B\xBC\x45\xEC\x7B\xA6\x1F\xF6\x93\x4F\x3E\xE6" + + "\x26\x14\x37\x63\x18\x77\x12\x00\x9F\x3A\x75\x8A\xFB\xB7\xCD\xA4\xF7\x5A\x7C\xF0\xFC\xFF\xFC\x9F\xFF\x33\x74\xE8\x90\x36\x6D\x1E" + + "\xC0\x0B\x86\xC3\x21\x64\x49\x8D\x6B\x65\x35\x7F\x22\xC7\xCD\x76\x27\xA4\x13\x07\x69\xB5\x4A\x52\x44\x75\xE5\xCA\x79\xF3\xE6\xBD" + + "\xF8\xE2\x8B\xE3\xC6\x8D\x03\xCF\xD5\xD5\xD5\x78\x19\xA1\x48\x9C\x98\x94\x92\x21\xCD\xCC\xD7\x68\x11\x69\x37\xA1\xC0\xB7\x01\x70" + + "\x03\x6B\x04\xB0\xD6\x13\x2B\x26\x22\x1C\x29\x70\x47\x19\x86\x23\xB9\xAE\x88\xD2\x19\xCE\x72\x20\x90\x0E\x4B\xED\x61\x09\x55\x60" + + "\x12\x4B\x43\x81\x23\x8C\x02\x07\x18\xF9\xF5\xCA\xF4\x1E\xA9\x8E\x28\xB0\x14\x21\x34\xE8\x2D\xB2\x20\x84\xFE\xC3\x1F\xFF\xC4\xB1" + + "\x3F\x26\xA7\xF0\xF4\x06\x43\xD7\xAE\x5D\x9F\x7E\xFA\xE9\x97\x5E\x7A\x69\xE6\xCC\x99\x64\x69\x15\xD9\x7E\x70\x25\x2D\x19\x4B\xA1" + + "\x6D\x30\x9B\x92\x3B\xA1\xB2\xA5\xA6\x52\xC6\x03\xAA\xD7\xBA\x75\xEB\x92\x94\x94\x80\x88\xB7\x7B\xF7\x6E\x34\xEF\x65\x07\x45\x9A" + + "\x9C\x4E\xD4\xD8\x2F\x2F\x5E\xBC\x40\xF9\xE7\x02\xDC\xD8\xF0\x2F\xF0\xEE\xD8\x79\x82\x77\x00\x30\x7D\x1B\x34\x13\x9E\x32\xE5\x45" + + "\xFC\x2F\xC4\xB4\x06\x8B\xB5\xE6\xD0\x5B\x74\x8B\xD3\x96\x97\xDF\xA3\x6F\x6F\x39\xF3\xC1\x82\xBA\x03\x39\x2A\x15\x1D\xCA\xC6\x57" + + "\xF0\xF9\xE7\x5F\xB0\xA3\x6B\x90\x5F\x9A\x62\xDC\xBA\xA3\x98\x7E\x58\xBC\xF3\x41\x83\x06\x00\xCE\x06\x79\x2F\x57\x7E\x41\x2F\xBE" + + "\x8E\x5E\xBD\x7A\xD2\x2E\xE8\xE6\x0C\x98\xDF\xEC\x16\xA1\x39\xCE\x66\xCA\x24\xA4\xA5\xA5\xD6\xD4\xAC\xA5\x51\x34\x57\x84\xEF\x66" + + "\x2A\x65\x93\x93\x9F\xE9\x3C\x4A\x78\xF2\xCA\x95\x2B\xF1\x7C\xFC\x16\x9A\x84\x58\x12\xDE\x0E\x9F\x37\x1A\x4D\x02\xA1\xF0\xFE\xFB" + + "\x5B\xDF\xDF\x1A\xF6\x00\x73\x6E\xDD\x44\xB5\xBA\x78\x08\xED\x8B\x54\x7A\xC9\x54\x8D\xCA\x06\xD3\x36\x68\x0F\x96\xAF\x11\xD8\x04" + + "\x60\x9D\xB7\xA2\xC4\x5B\x51\xEC\x89\x6A\xBC\xD1\x42\x6F\xAC\xC0\x13\xCD\x73\x47\xB2\x5D\x51\x85\x2B\x92\xE5\x8C\x64\x3A\xA2\x0C" + + "\xC3\x8C\xD9\x62\x19\x48\x83\x2D\x91\x0C\x13\xC9\x81\x33\x0D\x3E\x19\x47\x81\x65\x5A\x6B\x26\xA3\xC0\xBF\xFB\xDD\xEF\xBA\x75\xEB" + + "\x86\x4F\x32\x67\xCE\x1C\x34\x4E\xB4\x38\x10\x9D\x77\x86\x26\x8D\xCE\xB5\xA2\x9F\x9F\x3B\x31\xED\x16\x47\x8B\x00\x4C\xE5\x17\x89" + + "\xDC\xDA\xB5\x6B\x0A\x0B\xF3\xE9\xD8\x2F\x02\x3C\x3A\x2E\x42\xE5\xF7\x8B\x2F\xBE\xB8\x59\xB7\x2A\xD7\x2F\x99\xA1\x8B\x1F\x46\x8C" + + "\x18\x9E\x90\xD0\x06\x91\x73\x93\xF2\x42\xFD\x12\xB9\xF1\xB4\x69\x53\xB9\xA9\xDA\xED\x02\x4C\x0F\xFA\xB7\x78\xAB\x79\x79\x2A\x3E" + + "\x2F\x59\x99\xAD\x1C\x3F\x73\x09\x32\xE1\xDA\xF8\xD6\x87\x2D\x28\xBF\x1B\x8E\x91\xEA\xCD\x23\x9F\x9B\x21\x60\x96\xD1\x7B\x3C\xEE" + + "\x13\x27\x4E\xD0\x3E\x02\x0A\xF0\x37\xDF\x7C\x73\xED\x96\xD3\x2D\xB8\xF7\x0A\x17\xF8\xC3\x82\x02\x35\x0D\xA4\x69\xD2\xC1\x1A\x9D" + + "\xB5\x86\x88\x37\x37\x57\xF5\xE6\x9B\x6F\x5C\x6B\xDE\x94\xB5\x26\x0F\xFA\xC5\xE1\x7B\x79\xE8\xA1\x9E\xED\xDA\xB5\xC1\xF7\xDB\xB7" + + "\x6F\x1F\x76\x5E\x47\x8B\x00\x7C\x8B\x49\xD1\xAC\x3F\xE3\x11\x68\x12\x78\x86\xAB\xC3\xCF\xE9\xB2\x24\x50\x00\x16\xF0\x2B\x70\x01" + + "\x3A\x9A\x2E\x13\x4B\xCE\xCC\xF4\x8C\x78\x0F\xF3\x75\x8B\x90\x73\xFD\xC0\x2F\x47\x81\x7D\xB4\x13\x4B\xEF\x2B\x87\x95\x78\x62\x5A" + + "\x2F\xAC\x42\x43\x18\x8E\xE5\xBA\xC3\x60\x58\xE9\x8A\x29\x5C\x31\x86\xE1\x88\xD4\x46\x8C\xF4\x63\x91\x8E\x68\xA2\xC0\x32\x1A\x42" + + "\xEB\xE2\x5D\xD0\xC5\x65\x99\x45\x96\xCC\x42\xD3\xEF\x7F\xFF\xFB\x87\x1E\x7A\x08\x1F\x1E\x9F\x67\x71\xFC\x68\x3C\xCF\xB9\xB1\xD2" + + "\xFE\x7C\x00\xB3\xA3\x47\x00\x78\xFC\xF8\x71\x34\x10\x75\x3A\x6D\x78\x3E\x9B\x00\xE3\x4C\xBB\x40\x6F\x11\x19\x72\xFD\xF2\xDD\x77" + + "\xDF\x31\x18\xF4\x3C\x5E\x8A\x4C\x76\x03\xC3\xAC\xAA\x20\xFB\xD5\xE9\xB4\x57\xAF\x5E\xBD\x1B\xBF\xBC\xC6\xE9\xAA\xC1\x75\xE7\xCE" + + "\x9D\x44\x62\xA1\x50\xC0\xEB\xD4\x7B\xC0\x8E\x73\x9F\xB2\x1B\x20\xB6\xA0\x02\xD7\x9D\x78\x17\xF2\xEE\x89\x54\xA4\xA7\x89\x91\x26" + + "\x8C\x1E\x3D\xEA\xB3\xCF\x3E\xE7\xCE\xBB\x42\xA4\xFA\x93\xE9\xC0\x8F\x37\x4E\xE7\x38\x76\xEC\x98\xC1\x40\x46\xC2\x70\xE7\xE9\x86" + + "\x66\x30\x5A\x87\x84\xC7\x4B\xCE\xCF\x57\xEF\xD8\xB1\xE3\x5A\xA3\xD9\x20\xB7\x7B\x8B\x68\x67\x01\xC8\x61\x5E\x5C\x94\x9F\x9F\x77" + + "\xF4\xE8\x51\xCA\x30\xEB\x12\x3F\xC7\x72\xC2\x06\xFE\xDC\x60\xBE\x34\x3D\xF0\x23\x5E\x0D\x5C\x80\x8E\x9B\x57\x6C\x67\x4A\x4F\x46" + + "\xE8\x6F\xAB\x58\xF3\x85\x2B\x6F\x16\x5A\x53\x05\x8E\xE8\x3C\x11\xBD\x27\xA6\xF7\x54\xE8\x3C\xE5\x0C\xC3\xE5\xF9\xAE\x68\xAE\x2B" + + "\x9A\x0D\x11\x46\x20\xED\x88\x20\x96\x96\x59\x43\x64\x60\x89\x99\x2F\x1D\x1F\x04\x76\x4A\xC9\x2C\x0E\x87\x44\x6B\x93\x68\xCB\xA4" + + "\x24\x7E\x36\x4B\x0B\xC8\x82\x7E\x64\xF6\xB8\x8F\xEC\xEA\xDF\x06\xD0\xFE\xE4\x1D\x69\x71\x80\x69\xFC\x8C\x8C\x08\xDF\x68\xFB\xF6" + + "\xD5\xF0\x1B\x04\x75\x93\x26\x4D\x44\xF6\xCB\xCE\x49\x80\xC8\xFC\xA4\x6B\xB2\xEE\x45\x7B\x4D\x0E\x1F\x3E\x0C\x6D\x49\x4A\x4A\x04" + + "\xB7\x90\x62\x3A\x05\x1A\xE8\xCA\xE5\x32\x66\x6E\x50\xEA\xAE\x5D\xBB\xAE\x71\x02\xF2\x3B\x66\x98\x7D\x91\x35\x6B\x56\xA7\xA6\x89" + + "\x79\x29\x89\x56\x97\x77\xCD\xBE\x37\xE8\x56\xD7\x2D\xC5\x30\x5D\xB4\xB8\xE9\xD4\x7B\x8B\xB7\x1E\x93\xCB\xE5\x69\xA9\xA2\x9C\x1C" + + "\xE5\xEA\xD5\xAB\xBE\xFC\xF2\x4B\x76\xB5\x20\x82\x94\x6B\x3F\xD5\xC6\x35\xB8\x57\xF4\x7E\x7E\xF4\xD1\x87\x8F\x3F\x3E\xB8\xB4\xD4" + + "\x84\xD7\xA4\x83\x46\x0A\x45\x26\xBE\xBA\xEE\xDD\xBB\xE2\xDB\xB9\x16\x97\xD0\xBB\xB9\x4B\xF4\x15\xD0\x22\x3B\x1C\x36\xC4\xE4\xF8" + + "\x52\xE6\xCE\x9D\xD3\x60\xCB\x95\x5F\x66\x41\x7F\x63\x98\xF1\x3A\x20\x02\x5C\x50\x05\x46\x02\xEC\x0D\x91\x8D\x0E\xB9\x76\x7D\xCD" + + "\x43\x53\x46\xD7\xF1\x5F\xDF\x7B\x29\x9E\x57\xB7\xD2\xF9\x22\x7A\x6F\xCC\xE0\x29\xD7\x7B\x2B\x60\x25\x9E\x0A\x8D\xA7\x9C\x88\xB0" + + "\x0B\x81\x34\x19\x52\x52\x38\xC2\x99\x00\xD8\x16\x26\x03\x4B\x96\x40\xFD\x34\x2C\x93\x5B\x6A\x74\x49\xF4\x8E\x0C\xBD\x4D\x5A\x62" + + "\x95\x6A\x2D\x00\x58\xA6\x31\x49\xEF\xC9\xA2\x76\xF1\xC9\x1B\x6F\x6F\xD8\xB0\x01\x0D\x33\x95\xCA\x57\x5F\xDD\xFE\xD9\x67\x9F\xD1" + + "\xD1\x23\x9C\xBF\xFA\xEA\xAB\x1F\x9B\x1A\x3A\xBA\x99\x5F\x52\x86\x4F\x9D\x3A\x59\x55\x55\x21\x12\x09\x1E\x7C\xB0\x35\xE4\x05\x4D" + + "\x03\x5C\x07\x21\x1C\xA2\xF4\x9A\x9A\x9A\x1F\x39\x93\xB7\xEE\x92\x5E\xFA\x22\x9F\x7E\xFA\x09\x99\x7C\x22\xE4\xA9\x0B\x0A\x5E\x58" + + "\x5C\xCB\x6C\x65\x7A\xB1\x85\x15\xF8\xE4\xBB\x63\xA6\x2D\x4C\x15\x0B\xD1\xC6\x05\x02\x7E\xDC\x3A\xA6\x93\xAF\x7E\x69\x07\x3B\x53" + + "\xAA\x99\x6F\x9B\x45\x8B\x5E\x7C\xF4\xD1\x47\x9B\x37\x6F\xA2\x15\x2A\x6A\x6A\xD6\x9C\x3F\x7F\x2E\xFE\x84\x9F\x58\x38\xDD\x9C\xFF" + + "\xC5\x8A\xF0\xA0\x41\x03\xF1\x2D\xA0\x8D\xE8\xD6\xAD\x6B\x83\x59\x59\xF7\x42\x49\x9D\x26\x3B\xB1\x58\xA4\xAF\xF7\x54\xC7\xAD\xFE" + + "\x47\xAA\xDB\x71\xE1\x65\x07\x99\x5B\x19\xFC\x31\x83\xAF\xDC\xE0\xC1\xB9\xC2\xE0\xAB\xD4\xF9\x2A\xB4\x9E\x8A\x42\x4F\x2C\xCF\x1D" + + "\xCB\x26\xBD\x59\x11\x85\x33\x02\x11\x26\x0C\x97\x85\x98\x75\x4B\x7E\x89\xD9\x27\x35\x79\x00\xB0\xD4\xE0\x90\xE8\xEC\x12\x0A\xB0" + + "\xA6\xF4\x9E\x05\x98\xF6\x64\x20\x7E\x9E\x3D\x7B\x36\x18\x43\x7C\x15\x0C\xFA\xF1\xBD\xD2\x12\x30\x34\x07\xFE\xD7\xBF\xFE\xD5\x4C" + + "\xD7\x64\x5D\x8D\x76\x9C\xFC\xE3\x1F\x7F\x5F\xB1\x62\xF9\xC0\x81\x03\xA2\xD1\x88\xCF\xE7\xA9\xAE\xAE\x7A\xEA\xA9\xD1\xF8\x77\xD7" + + "\x1A\xCD\xEF\xBF\x9B\x83\x75\x50\x7F\xC0\x47\x26\x75\xA4\x89\x1F\x1F\x3B\x79\xE7\xB9\xAB\xB5\x87\x5A\x2C\x8A\xAE\x7F\x9D\x13\xEF" + + "\x74\xEC\xD5\x3F\x3D\x9D\xC4\xCF\xFD\xFB\xF7\x43\xBB\x46\x27\xA8\xD1\xC9\x1B\x14\xC5\xE6\x67\x04\xEC\x2D\xE5\x56\x3E\xE0\x1E\xB4" + + "\x08\x11\xF7\xC6\xDE\xCD\x41\x8B\x7B\xAC\x59\xB3\x26\x2B\x4B\x8E\x2F\x1A\xAE\x41\xE7\x45\xB3\x22\x7C\xCF\x02\xDC\xF0\x91\x06\xE3" + + "\xC3\x37\x4E\xFC\xE0\xEE\xE4\xD0\xCA\x18\x88\x9A\xFC\x31\xA3\xB7\xDC\xC8\x02\xCC\x44\xD1\x6A\x77\x2C\xD7\x13\x63\x32\xE1\xA8\xA2" + + "\x3E\x8A\x0E\x4A\x2D\x01\x09\x12\x60\xB3\x5F\x66\xF2\xC8\x28\xC0\x7A\x7B\x46\x49\x99\xB4\x18\xF2\x6B\x96\x16\x9A\xA4\xF9\xFA\x7B" + + "\x10\xE0\x78\xF1\x8D\xD7\x86\x0C\x79\x8C\x89\x9F\x13\x46\x8C\x18\x06\x72\xE9\xCC\x0D\x1C\x88\xBB\x68\x5D\x9B\xDB\x62\xF8\x5A\xBC" + + "\xF3\x93\x3A\xE2\xA7\x9F\x7E\xFA\x01\xB3\xF4\x9F\xFD\xD5\xDD\x47\xCE\x0D\xFE\x23\x94\x78\xDC\xB8\xB1\x48\x83\x53\x92\xDB\x21\x0D" + + "\xDE\xFE\xFA\xC7\xB5\x47\x2E\xB6\xD4\xBC\xE8\xFA\x5E\xE8\x63\x6F\x9B\xAC\x36\x5A\xF5\x7A\xEA\xD4\x29\x7F\xFD\xEB\x5F\xE9\xFC\x70" + + "\x7C\xB4\xCF\x3F\xFF\xFC\x27\xFB\xAE\x6E\xF9\xE6\x49\xD8\x42\x4B\xE4\xD0\x83\x1B\x36\xB7\x48\x1B\x47\xDB\x82\x8F\x3F\xFE\x08\x5E" + + "\x01\x11\xCE\xCE\x56\xD4\xD6\xD6\x22\x75\xBA\xE7\x00\x6E\x24\xB3\xB7\xB2\x9F\x00\xD8\x1F\x35\xFA\x62\x26\x5F\xB9\xC9\x5F\x61\x0A" + + "\x54\xE9\xFD\x15\x25\xBE\x0A\x8D\x8F\x44\xD1\x79\x9E\x58\x8E\x3B\x4A\x18\x86\x0E\xDB\xC3\x64\x9A\xB4\x25\xC8\xD0\xEB\x97\x9B\xDC" + + "\x72\x13\x72\x60\x87\x54\x87\x04\xD8\x2A\x2D\x2E\x95\x12\xF9\x35\x4A\x99\xC2\xEE\x37\xCB\x81\xEF\x2C\x13\xBE\x4B\x80\x99\x7E\xC8" + + "\xD7\x91\x0B\x21\x65\x8D\xC5\xC8\xD6\x3B\xF8\x6A\x17\x2C\x98\xFF\xE5\x97\x5F\xD1\xBE\x19\x9C\x11\x4B\x73\xFB\x8A\x9A\xE9\x2E\xAC" + + "\xB6\x34\xA8\xF3\x44\xDD\xB4\x05\xE9\x65\xFF\x1D\x0E\x3A\x35\x82\x9F\x92\xE8\x8B\x56\xAD\xD9\x7F\x6E\x23\x53\xE7\xB5\xA5\x72\x60" + + "\x9C\x97\xEF\x38\xA5\xCC\xC9\xC6\xBF\x28\x2A\x2A\xAC\xAB\xDB\x88\x56\x89\x4D\x80\xE9\xD2\x85\x3B\x1B\xCD\xFE\x65\x0E\x3A\x20\x8C" + + "\xF8\x20\x14\x0A\xE2\x5B\x96\xC9\x24\x13\x26\x3C\xD3\xB8\x68\xD6\xCF\x04\x70\x93\xD9\x6F\x93\x39\x70\x13\xC3\x48\xF1\x09\x1E\xCD" + + "\x54\x60\x4E\x08\xED\x8B\x98\xFC\x51\x73\x20\x66\x0E\x56\x9A\x03\x55\x86\x60\x85\x2E\x50\x51\xE4\xAB\x28\xF4\xC5\xD4\xC8\x84\x3D" + + "\x51\x95\x3B\x9A\x03\x80\x1D\x64\xC5\x92\xDC\x12\x90\x99\xFD\x99\x26\x9F\xDC\xE4\xC9\x34\x3A\x65\x06\x87\x4C\x67\x95\x96\x94\x49" + + "\x8A\xCC\xA4\x07\xAB\xD0\x20\x55\x13\x05\xEE\xD5\xAB\xD7\xCA\x95\x2B\xE9\xD0\x11\x5D\x03\xCD\xFD\x90\xB7\xDB\x17\xDD\x12\x0A\x4C" + + "\xB6\x20\xDC\xB5\x6B\x27\x9C\x92\xE9\x3E\xC9\xDA\xBC\x79\x33\xDB\x37\xC3\xAE\x1C\xBC\x83\xBE\x62\x6E\x57\x4D\x73\x4A\x52\xDE\x8D" + + "\x6B\xD2\x57\xBE\x72\xE5\x4A\x0A\x59\x47\xC1\x37\x95\xD9\xE6\x6F\xD8\x47\x37\x3A\xBC\xFB\x28\x9A\x4D\x80\xA7\x2C\x59\x4F\xA6\x55" + + "\x24\x25\x58\xAD\x65\xB8\x6F\xB4\x83\x80\x86\x2A\xFF\xFD\xEF\x7F\xEF\x4C\x81\x7F\xB1\x83\x4D\x83\x87\x0F\x1F\x2A\x12\x09\x60\x3D" + + "\x7B\xF6\xC0\x1D\x3B\x73\xE6\xCC\xCF\xA1\xC0\xB7\xE8\x7F\xA6\x07\x5D\xFD\x4F\x87\x4E\x41\x04\xB8\x00\x1D\x4D\x6E\x3B\xC8\x22\xDA" + + "\x84\x32\xB3\x8F\xC4\x2F\xB8\xD3\xAD\x01\x70\x18\x22\x5C\x1A\xAC\x80\x81\x61\x06\xE0\x72\xAD\x2F\xA6\xF1\xC6\xF2\xBD\x51\xB5\x27" + + "\x92\xEB\x89\xA8\x5C\xE1\x6C\x47\x48\x61\x0D\x66\x59\x40\xAF\x17\xF4\x66\x41\x81\x0D\x2E\xB9\xC1\x91\xA9\xB3\x31\x09\xB0\x99\x51" + + "\x60\x83\x34\x9F\x6C\x6E\xA6\xD7\xEB\xBB\x75\xEB\xD6\xA9\x53\xA7\x2E\x5D\xBA\x0C\x1B\x36\x6C\xCE\x9C\x39\x0B\x39\x55\x48\x28\xD5" + + "\x37\x83\xF9\xE7\x51\xE0\xB3\x17\x2F\x5E\xAA\xAB\xAB\xA3\xDB\x76\xD8\x6C\xD6\x43\x87\x0E\x73\x2B\xC2\xFC\xF3\x9F\xFF\xBC\x97\xFD" + + "\xF2\x1A\xA7\x39\x40\x88\x9E\x9D\xA3\x4C\x15\x0B\xD5\x85\x05\x80\x6D\xEB\x6B\x7F\xA1\x3B\x65\xB7\x88\x02\x6F\x3A\xF5\xFE\xB0\x67" + + "\x5F\xA2\x25\x32\x22\x91\x30\xF7\x16\x81\x61\x9A\x2F\xDC\xCB\x77\xE9\x5A\x3C\x73\x59\xB6\x6C\x29\x2D\xB1\xE2\xF5\x7A\xF0\xD5\x37" + + "\x28\x1F\x7D\x97\x00\xDF\x0C\x5A\x76\xB2\x03\x3B\x6E\x0A\xCF\x87\xFF\x83\x02\xB0\x00\x22\xC0\x05\xE8\x68\x7A\x18\xA9\x11\xA5\x0D" + + "\x3A\xB1\x1A\x2A\x70\x7C\x99\x44\x2B\x23\x01\x38\xC2\xD0\x5B\x6E\x0E\x51\x86\xCB\xB5\xFE\x98\xC6\x17\x2B\x60\xE6\x75\xA8\xDD\x11" + + "\xB2\xC8\xC1\x1E\x52\x5A\x43\x0A\x8B\x3F\xAB\xD4\x9F\x65\xF2\x28\x4C\x2E\x05\x05\xB8\xC4\x2A\x23\x5D\xD0\x66\x09\xA1\x17\x0A\x5C" + + "\xD2\x8E\x27\x4C\xE4\x09\x49\x91\x8D\x64\x7E\x42\x32\xAF\x5D\x42\xD2\x7D\xF7\xDD\x9F\x21\x91\xB8\xDD\xEE\xFE\xFD\xFB\x3F\xF7\xDC" + + "\x73\x33\x66\xCC\x98\x3B\x77\x2E\x3E\x21\xB3\x67\xF2\x0A\xDA\x3E\xB1\xF5\xC1\x1A\x87\x1F\x6C\x4D\xAC\x3B\x03\x98\x4E\xC0\x82\x02" + + "\xE3\xBF\xF0\x98\x9D\xB5\xDA\xB7\xAF\x3E\x77\xEE\x4D\x76\x6A\x3E\xBB\xB0\xE6\x5E\x66\x98\x7D\x6F\xFF\xF8\xC7\x3F\x5C\x2E\x27\xD2" + + "\x60\xB9\x3C\xF3\x99\x59\x4B\x77\xBC\xF9\x49\x8B\x8C\x06\x33\x73\xB0\x48\xED\xAB\xEE\xFD\x1F\x47\x90\x02\xD7\x87\x76\x7D\xFD\xF5" + + "\xD7\x90\x2F\x9A\x00\x7F\xF2\xC9\x27\x2D\xD5\x21\xF7\xF3\x1D\x3F\xC6\x4B\x6D\x1F\x3F\x7E\x5C\xA9\xCC\x42\x14\x6D\x32\x19\x71\xCD" + + "\x4E\xE7\x68\x3E\xC0\xB7\xA8\x89\xC5\xFA\x2A\x7C\x98\xCE\xA9\x04\xEA\xB4\xCE\xCE\xAC\x59\xB3\xE0\xE1\xF0\x73\xB7\xC7\x23\xCB\xCC" + + "\x7C\xE0\xC1\x07\x85\x22\xB1\x34\x33\x4B\x96\xA5\x24\x2B\x99\x98\xF3\xAD\x15\xB8\xC9\x19\x5A\x4D\x28\x70\xBC\x90\x40\x2B\x53\x20" + + "\x6C\x26\x16\x2B\x65\x00\x36\x85\xCA\x0D\xC1\x58\x49\xB0\xBC\x38\x50\xCF\x70\xBE\x87\xCC\x91\xCE\xB5\x07\x73\x6C\xC1\xEC\xB2\x00" + + "\x31\x8B\x5F\x69\x72\x2B\x0C\x0E\xB9\xCE\x2E\x2F\xB1\xCA\xB5\x16\x39\xC9\x81\x8D\xD2\x02\x3D\x59\x06\x9C\x57\x4C\x17\x21\xD1\x65" + + "\xC0\x52\x52\x8E\x23\x4F\x90\x91\x99\x24\x14\x3F\xD0\x36\xE1\x8F\x7F\xBA\xAF\x6D\xBB\x04\x4D\x51\x51\xC7\x8E\x1D\x47\x8E\x1C\x39" + + "\x71\xE2\xC4\x69\xD3\xA6\xE1\x36\x21\xC0\x58\xB5\x6A\x35\x3B\x7F\xA5\xC1\x06\xDF\x77\x33\x17\x9A\x8E\xE3\x9F\x3B\x77\x6E\xF2\xE4" + + "\xC9\x02\x01\x2F\x31\xB1\x5D\xBF\x7E\x8F\xD0\xA4\x8E\xDD\x63\x81\x8E\x00\xDF\xCB\xAE\x79\x2D\x4E\xCE\x77\xDF\x7D\xD7\xB9\x73\x27" + + "\x21\x42\x09\x91\x60\xE4\x73\xB3\x76\x9E\xBF\xDA\x22\xFD\x58\x64\x57\xEE\x23\x97\xB6\x9C\xFE\x20\xDC\xBE\x0B\xDD\x05\x6A\xD8\xB0" + + "\xA1\x6C\x0F\x16\x5D\xFD\x7B\xEF\x03\x7C\x2D\x3E\x5F\xFD\xEA\xD5\x4F\xF3\xF2\x54\xC9\xC9\x09\x48\x9A\xB6\x6E\xDD\xCA\xF6\x63\xDD" + + "\xEE\x5C\xE8\xC6\x1B\x7C\xD3\x89\x93\x74\x69\x03\x60\x9E\x39\x73\x26\xFC\x6A\xF4\xE8\xD1\x3D\x7B\xF6\xB4\x94\x95\x65\x48\xA4\x6D" + + "\xDA\xB6\x4D\xE1\x0B\x94\x2A\xB5\xCE\x5C\xE6\x0B\x97\x37\x58\x1B\xCC\xB2\x1A\x8C\xD7\x6A\x0F\xDE\xD8\x29\xD5\x04\xC0\xEC\x44\x4B" + + "\x4E\x86\xCC\x96\x7A\x27\x0A\x6C\xF2\x87\xCD\xFE\x18\x93\x06\x97\x33\x00\x97\xEB\x83\x31\x6D\x30\x46\x18\xF6\x46\x21\xC2\xF9\x64" + + "\x91\x43\x48\x65\xF3\xAB\xAC\x41\x95\xC5\x9F\x6B\xF1\xE6\x98\x3D\x4A\x23\x44\xD8\xA1\xD0\x59\x15\x84\xE1\x52\xB9\xC6\x94\xC9\x94" + + "\xD1\x61\x16\x21\x69\x24\x39\x00\x58\x2D\xC9\x26\x96\xA1\xA4\x2B\xF8\xEB\x57\x14\xA6\xCA\xB3\x79\xA9\x19\x6D\x93\x52\xEE\x7F\xB0" + + "\xCD\x9F\xEE\x6F\x9D\x9B\xA7\xF6\xFB\xFD\x7D\xFB\xF6\x7D\xF2\xC9\x27\xD1\x7A\xE1\x96\xD1\x5A\xD8\xEC\x81\x1F\x37\x6E\xDC\x78\xC7" + + "\xAB\x91\xD8\xD8\x69\xC4\x88\xE1\xF0\xCB\xB6\x6D\x1F\x1C\x39\x72\xC4\x17\x5F\x7C\xCE\xF6\x60\x01\x60\x36\xC3\xFC\xB5\xDD\xEF\xA6" + + "\x07\xDB\xBE\x20\x58\x18\x38\x70\x80\x40\xC8\x17\xF0\x93\x9F\x18\x3F\x65\xC7\xB9\xAB\xEB\x8E\xB4\x94\x02\xBF\x8D\x1C\xD8\xE9\x0F" + + "\xD3\x6A\x55\x13\x26\x4C\x60\x8B\x1C\xE0\x2E\x01\xE6\x96\xED\x96\xFB\x99\x0E\x7A\xA3\xBE\xFF\xFE\x7B\x78\x45\x4A\x4A\x22\x30\x5E" + + "\xB1\x62\x39\x1C\x83\x2D\x58\xF9\x93\x0A\xCC\xAE\x46\x82\xD7\xBD\xB2\x72\xE5\xEA\x35\x6B\x58\x03\xB5\xF0\x4F\x10\x3B\x6A\xD4\x28" + + "\xC8\x6C\x79\x79\xB9\xC1\x68\x14\x89\x53\x93\x79\xFC\xD4\x74\x49\x5E\x61\xB1\xC9\xE6\xF4\x84\xCB\xBD\x64\x56\x73\x85\x97\x21\xAD" + + "\x41\x2D\xBB\x60\x53\xF3\x28\xEF\x58\x81\x49\x27\x96\xD9\x1B\x36\x53\x86\x03\x11\x73\x30\x6A\x0E\xC7\x8C\xA1\x0A\x88\xB0\x2E\x58" + + "\x5E\x12\x8C\x15\xF9\xC2\x85\x9E\x48\x81\x2B\xA2\x76\x84\xF2\xEC\xC1\x3C\xAB\x3F\xB7\x0C\x00\xFB\x73\x4B\xBD\x2A\x93\x2B\xDB\xE0" + + "\xC8\xD6\x3B\x94\x60\x58\x6B\x51\x14\x99\xE4\x54\x81\xD5\xC5\xD2\x5C\x8D\x44\x55\xBF\x88\x5F\x92\x9D\x9B\x91\x9D\x9B\xA6\xC0\x75" + + "\x6E\x06\x07\x63\xBA\x24\x38\x2D\x4B\xC5\x4F\x93\x26\xF0\x04\x0F\x26\x24\xB5\x6E\xD3\x36\x4B\xA1\xB4\xDB\xED\xED\xDB\xB7\xEF\xCC" + + "\x39\xA0\xD5\xDD\xBB\x77\x77\x3A\x9D\x77\xB6\x1E\x98\xFE\x88\xEF\x6F\xC0\x80\xFE\xA9\xA9\xA2\x36\x6D\x1E\x78\xE6\x99\xF1\xDF\x7C" + + "\xF3\x2D\xAB\x2D\x1F\x7F\xFC\xF1\xB5\x7B\x3B\x7E\xA6\x07\x7D\x7B\x08\x16\xD0\x00\x01\x5F\x7E\x4A\xC2\xA0\x51\x13\x5E\x7D\xF3\x53" + + "\x28\x70\x4B\x75\x62\xAD\x3F\x7A\xD9\x6C\x77\x0A\x05\xA4\xC2\xEE\xF4\xE9\xD3\x68\x65\x6C\x7A\x97\xD8\x0A\xEC\xF7\xF8\x5D\x62\xC7" + + "\xDE\xED\x76\x1B\xD2\x25\x04\xD2\xB3\x67\xCF\x42\x1A\xDC\x4C\x80\xD9\xF5\xC0\xF0\x37\x78\x1D\x7C\x8F\xEB\x8A\xF0\x4C\xF8\x27\x24" + + "\x07\xC4\x8A\x52\xD3\x33\x15\xD9\x85\x5A\x43\xA9\xDD\xE3\x0A\x44\xDC\xC1\x28\xCE\x2E\x72\x8E\xE2\xDA\x1D\x8A\x81\x64\x7F\xE4\xFA" + + "\x96\x82\xDC\x4D\xBD\x1B\x57\xD5\xF9\x69\x05\xBE\x11\xE0\xEB\x0A\x6C\xF2\x85\x60\x06\xCA\x30\x00\x0E\xC5\xCC\xE1\x0A\x23\x74\x38" + + "\x5C\xAE\x83\x08\xFB\xA2\x94\xE1\x42\x57\x38\xDF\x1E\x54\x5B\x03\x6A\x6B\x30\xBF\xCC\x9F\x67\xF6\xE6\x9A\x5C\x39\x00\x58\x67\xCB" + + "\x2E\x29\x53\x68\x4B\xB3\x34\xC6\xCC\x02\xBD\x2C\x5F\x2B\x53\x17\x91\x32\x3A\x2A\x5A\x40\x27\x8F\xE1\xB6\xBE\xAE\x15\xBB\xA6\x1F" + + "\x8F\xB3\x8F\xD0\xF5\xFD\xB2\xDC\x02\xFC\x88\x48\x3B\x59\x94\x06\x9E\xDB\xA5\x08\x12\xE2\x46\xAE\x79\x82\xFB\x5A\x3F\x48\x2A\x72" + + "\xA4\xA7\xDF\x6E\x45\x8E\xD7\xC9\xE6\xDD\x6F\x9E\x3E\x7D\x1A\x49\x1D\x82\xC3\x84\x84\xB6\x2F\xBC\xF0\xFC\xB7\xDF\xFE\x0D\xD9\x1D" + + "\x8D\xA2\x3F\xFD\xF4\xD3\xDB\x1D\x43\xFA\x55\x8E\x1F\xE3\xCB\x83\xC7\x8C\x19\x23\xE0\xF3\x52\x92\xDB\xF6\x1F\x3E\x76\xFB\x1B\x1F" + + "\xAF\x6B\xA1\x5E\x68\x12\x45\x1F\xBE\xA8\x33\x97\x0A\x04\xC9\x59\x59\x99\x90\x1A\x76\xA6\x1A\xDD\x6E\xE2\xB7\xA2\xC0\x34\x0D\x0E" + + "\x85\x82\x74\x9F\x8D\x17\x5F\x7C\xFE\xED\xB7\xDF\xA6\x1D\xD1\xCD\xAF\xC8\xD1\x2E\x31\x29\x3D\x33\x2B\x5D\x26\xC7\x39\x43\xAE\x90" + + "\xC0\xB2\xC8\x59\xA1\xCA\xD3\x94\x18\x4B\x1D\x1E\xBB\x37\x68\xF7\x86\x1C\x3E\x62\xEC\x35\xE2\x17\x77\x30\xE6\x09\xC5\x20\xBF\x5E" + + "\xCE\x80\xD0\xF5\x95\xFD\x2D\x04\x30\x47\x81\x7D\x21\xB3\x2F\x68\xF4\x05\x49\x26\x1C\x0A\x9B\xC3\x44\x84\x4D\xE1\x98\x81\xEA\xB0" + + "\x3F\xA6\xF5\x45\xC9\x5A\x25\x57\x58\x63\x0F\x17\xDA\x82\xB0\x02\x60\x6C\xF6\xE4\x01\x60\xBD\x23\xBB\xC4\x96\x0D\xF9\x2D\x36\xCB" + + "\x35\x06\x59\x81\x0E\x00\x4B\x01\x70\x2E\x05\x98\xD0\x9B\x4E\xE8\xCD\x8D\xC3\xAC\x6E\xCA\xF2\xB8\x78\x53\x65\xA6\x67\xD6\x64\xAA" + + "\x82\x24\x81\xE8\xCE\x6A\x62\xD1\x04\xF8\xD4\xA9\x53\xB4\x84\x5D\x4A\x4A\xD2\xD4\xA9\x53\xB9\x0A\x0C\x80\xAF\xFD\x76\x14\xF8\x7F" + + "\xFF\xF7\x7F\xC7\x8D\x1B\x43\x16\x06\x24\xB5\xED\xC7\x00\xBC\xBE\xE5\x14\xB8\xE6\xE0\x5B\x25\x06\x13\xFC\x5E\xA1\x90\x2F\x58\x30" + + "\xFF\xEA\xD5\xAB\xAC\x02\xD3\x95\x1E\xD7\x7E\x0B\x00\xD3\x6C\x88\x4E\x7A\x97\x4A\x25\x13\x26\x3C\x7B\xF9\xF2\x65\xB4\xE0\xCD\x54" + + "\x60\xF8\x18\x7E\x95\x91\x99\x65\xB0\xB9\x88\xD9\x5D\x46\xBB\xDB\xE4\xF0\x50\x33\xDB\xDD\xA5\xE4\xEC\xC1\xB9\xCC\xE5\x2B\x73\xFB" + + "\x6D\x9E\x20\x0C\x0C\x53\x80\x21\xC2\x84\xE1\x70\xB9\xA7\x51\xD6\xCA\xA9\x5F\x57\xD9\x38\x37\xBE\x5D\x05\xAE\x9F\xC8\x61\x86\xF0" + + "\x42\x84\xFD\x41\x73\x10\x00\x47\x2C\xE1\x68\x69\xA4\xC2\x18\x26\x0A\x6C\x08\x21\x90\xA6\x0C\xC7\x8A\xDD\xE1\x22\x07\x18\x0E\x11" + + "\x83\x08\x97\x7A\xD4\x26\xB7\xCA\xE0\xC8\xA1\x0A\x5C\x8C\x1C\xD8\x80\x1C\x38\x93\x28\x70\xB1\x34\x0F\x00\xAB\x29\xBD\x69\x0A\x55" + + "\xBA\xF2\x86\xD2\x93\x3F\x69\xF8\x13\x31\x53\xC8\xAE\xDE\xE4\x39\x78\x10\x39\xF3\x1D\x03\x4C\x15\x18\xC1\x38\x00\x46\x58\x35\x7D" + + "\xFA\x8C\x6F\xBF\xFD\x86\x0B\xF0\xBD\x4F\xEF\x35\x8E\x02\x3F\xF5\xD4\x68\x3E\x9F\xCF\x4B\x6E\x37\x60\xE4\xF8\x57\xDF\xFC\x78\xDD" + + "\xE1\x16\x1B\x07\x5E\x7B\xE0\x7C\x89\xD1\xCC\xE7\x27\x03\xE0\xF9\xF3\x5F\xA6\xF5\x9F\x59\x80\x7F\x2B\x0A\x4C\x23\xA9\xAE\x5D\xBB" + + "\xD0\xDA\xFA\xE3\xC7\x8F\x63\x87\x82\x9B\x0F\xB0\x40\x9C\xA6\x31\x5A\xD4\x3A\x43\x81\xDE\x54\x68\x30\x6B\x8C\xA5\xB0\x62\xB3\x55" + + "\x6F\x71\x18\xCA\x1C\x06\xAB\xD3\x64\x73\x51\x98\x2D\x4E\xAF\x05\x24\xBB\xFC\x56\x4F\x80\xC1\x38\xCC\x44\xD4\x44\x87\x3D\xA1\x72" + + "\x4F\x30\xD6\xB8\xF3\xC9\x1F\xB9\x9E\xF7\xDE\x90\x03\x5F\x9F\x4D\x59\x19\x3F\xB3\x9B\x89\xDE\xB8\xB0\x21\xFE\xFC\x56\xA5\x81\xB0" + + "\xC5\x1F\x2E\x0D\x10\x80\x4B\xC3\x51\x4B\x38\x56\x1A\x2E\x67\x14\x98\xB1\x20\x02\xE9\xA8\xCE\x17\xD5\x7A\xC2\xC5\xCE\x90\xD6\x1E" + + "\xD2\xDA\xC2\x45\x10\x61\x8B\x4F\x6D\x76\xE7\x1A\x1D\x2A\xBD\x55\xA5\xB3\x12\x11\xD6\x18\xE5\x05\x3A\xB9\x5A\x2B\x27\x69\xB0\x26" + + "\x83\xD4\xA0\xAC\x07\x18\x46\x8B\xB9\xDF\x44\x81\x89\x89\x65\x4A\x04\xCF\x6D\x12\x93\xFF\x74\xDF\xFD\xF7\xB5\x6E\xFD\x40\x9B\xB6" + + "\xAD\x1F\x6C\x83\x33\xBD\x78\xB0\x6D\xBB\xFB\xEE\xBB\xFF\xCE\x8A\xDA\xB1\x0A\xDC\xB9\x73\x27\x84\xD0\x0C\xC0\xD3\xBE\xF9\xE6\x1B" + + "\xDA\x3D\x43\x57\xA8\xDF\xE3\xF3\x13\xE8\x41\xDF\xDE\x0F\x3F\xFC\x30\x64\xC8\x10\x01\x72\x60\x5E\xE2\x63\x63\x9E\xDB\xD1\xA2\x39" + + "\xF0\xDA\x83\xE7\x8D\x65\x56\x81\x80\x44\x9E\xB3\x66\xCD\xA4\xDB\x32\xB2\x21\x34\xF7\x6D\xDC\xB3\x07\x0B\x70\xB7\x6E\x5D\x99\x7D" + + "\x1E\xD3\xC7\x8D\x1B\xDB\x7C\x05\xC6\x99\x02\x7C\x7F\xEB\xD6\x88\xA2\xDB\xB4\x6B\xD7\x36\x21\x91\x58\xBB\x84\x76\x89\x89\x0F\xB4" + + "\x69\xF3\xC0\x83\x6D\xF8\x42\x71\xA6\x22\x27\x5F\x6B\xB8\x0E\xB3\xDD\x0D\x4D\x06\xC9\x14\xE3\x7A\x29\x06\xC6\xA4\x90\x65\x0C\xE6" + + "\x0D\x97\xB3\xFA\xE9\xA3\x55\x29\x6F\xA2\xC0\xF1\x89\x1C\xEC\xB9\x82\xFB\x87\xF5\x52\xCC\x2C\x69\x08\xD2\xCD\xCD\xCA\xFC\x11\x4B" + + "\x30\x6C\x09\x46\x4A\x83\x11\x4B\x28\x66\x09\x57\x58\xC2\xE5\x60\xD8\x1C\x2C\x37\x32\x66\xF2\xC7\x0C\xDE\xB0\xCE\x1D\xD6\x39\x82" + + "\x5A\x7B\xB0\xC4\x16\xD4\xDA\x82\xC5\x56\x9F\xC6\xE2\x2A\x30\x39\xD4\x06\x6B\xAE\xAE\x2C\xA7\xA4\x54\x59\x64\x54\x00\xE0\x7C\x6D" + + "\x26\x55\x60\x02\x70\x1E\x8D\x9F\x1B\x14\x7F\x66\x4B\x40\x0B\x25\xF2\x44\xBE\x28\x31\x99\x77\xDF\xFD\xAD\x93\x92\x92\x71\xEF\x3A" + + "\x75\xEA\x34\x76\xEC\xD8\x19\x33\x66\x4C\x67\x8E\x19\xCC\x81\x88\xF7\xE5\x97\x5F\xEE\xDF\xBF\xFF\x1D\x0F\x23\x51\x05\xEE\xD1\xA3" + + "\x1B\x14\x38\x31\xB1\xDD\x94\x29\x2F\xFE\xED\x6F\x7F\xA3\x23\x9C\x14\xE0\x6B\x77\x5A\x31\xE3\x17\x3B\x38\xBD\xD0\xFF\xE9\xDD\xFB" + + "\x21\xA1\x50\x20\x14\xA4\x0C\x9B\x30\x6D\xE7\xB9\xCF\xD6\x1D\xBE\x70\xF7\xC3\x48\xF5\x21\xF4\xA1\xB7\xAC\x6E\x9F\x50\xC8\x93\x4A" + + "\x33\x9E\x7F\x7E\xF2\x17\x5F\x7C\xC1\xF6\x42\xE3\x8E\xFD\x86\x14\x18\xE7\x0E\x1D\xAA\xA1\xC0\xF8\x20\x13\x26\x3C\x73\x5B\x0A\x4C" + + "\x87\x91\xE0\x6F\xF0\x3A\xF8\x1E\x75\x42\xD6\x21\x27\x4C\x98\xD0\xAB\x57\x2F\x9B\xCD\x9E\x9A\x9A\xD6\xFA\x81\x07\xF8\x02\xA1\x38" + + "\x5D\x92\x9B\x5F\xA4\x2F\xB5\x99\xAC\xCE\x52\x06\x63\xAB\xDB\x5F\x1F\x51\x43\x8D\xFD\x21\x77\x20\xE2\x09\x46\x19\x8C\x63\x7E\xD2" + + "\x47\x1D\x63\x3A\xB7\x2A\xFC\x51\x72\x46\x38\xCD\x5C\xDF\x9E\x02\x07\x22\x0C\xF0\x00\xD8\x1A\x88\x94\x05\xA3\x96\x60\xCC\x12\x2A" + + "\xB7\x04\xCB\xCB\x82\x95\x96\x70\xA5\x35\x5C\x45\xCD\x12\x28\x2F\xF5\xC5\xCC\xDE\x88\xC1\x1D\x32\x38\x82\x3A\xBB\x9F\x31\x9F\xDE" + + "\xEE\xD3\x5A\x9C\x1A\x93\xBD\xC0\x50\xA6\xD6\x5B\x72\x4B\xCC\x39\xC5\x86\x6C\x8D\x4E\x51\xA0\x95\xE7\x69\x68\x12\x4B\x76\x45\x22" + + "\x18\xE7\xD3\x3A\xB2\x62\x79\x0E\x53\x3B\x56\xD2\x2E\x85\x9F\xC2\x17\x24\x26\x26\x8A\xC5\xA9\x56\xAB\xF5\x91\x47\x1E\x99\x34\x69" + + "\x12\x9D\xB9\xC2\x4E\xD5\xE2\x1E\xF8\xD5\xEA\xD5\xAB\x87\x0E\x1D\x7A\xC7\xC3\x48\x74\xCB\x9C\x7E\xFD\x1E\x81\x02\xA3\x0D\x45\x52" + + "\x44\x73\x60\xEE\x30\xD2\x6F\x45\x81\xFF\xF5\xAF\x7F\x45\xA3\x11\x91\x98\xD4\xC4\x7C\x6A\xCA\xCB\xA4\x17\xBA\x25\xEA\x72\x50\x80" + + "\x6B\x0F\x5F\xF0\x45\x2B\x53\xC5\x42\xB4\x74\xA3\x46\x3D\xF9\xD5\x57\xD7\xC7\x81\x7F\x43\xC3\x48\x74\x49\x43\x28\x14\xA0\xBB\x81" + + "\xBF\xF0\xC2\xF3\x74\xBB\x86\xDB\x1A\x46\x82\xBF\xC1\xEB\xE8\x54\x8D\x06\x07\x3B\x8F\x10\x78\x3F\xFE\xF8\xE3\x7E\xBF\x3F\x53\x2E" + + "\x4F\x48\x48\x10\x08\x45\x74\xEB\x86\x12\xA3\xC5\x64\x71\x5A\xEC\x10\x64\xAF\xDD\xE3\x73\xFA\x02\x4E\x7F\xD0\xE5\x0F\xE2\xC2\x1D" + + "\x0C\x79\x42\x11\x6F\x38\x82\x33\x73\x11\xF5\x85\x11\x63\x03\xE9\x72\xF0\x4C\xF6\xFE\x0E\x55\x04\xC2\xC4\xFC\xA1\x8A\x20\x73\x11" + + "\x04\xC3\xC1\x72\x5F\x30\x86\x73\x00\xBF\x65\x1E\x0F\x85\xEB\xC3\xEF\x56\x8E\x60\xD4\x16\x8C\x59\x21\xBC\xA1\xCA\xB2\x50\x45\x59" + + "\x18\x06\x80\x2B\xAC\xC1\x4A\x6B\x10\xE7\x72\x8B\x3F\x56\xEA\x8B\x98\x3C\x21\xA3\x33\x60\x70\xF8\x0D\x76\x98\x47\x6F\x73\x03\xE0" + + "\x22\xB3\xAD\xD0\x58\x56\x60\x40\xAA\x60\xCE\xD5\x1A\x29\xC0\xE9\x0A\x55\x6A\xA6\x12\x21\x31\x4C\x24\xCD\x62\xA6\x70\xA4\x25\xF1" + + "\x04\x69\x19\xA4\x84\x54\x6E\x6E\x6E\x38\x1C\xC6\xDD\x99\x3B\x77\xEE\x8A\x15\x2B\xE8\xBE\x84\xB7\x98\x2C\xBD\xF0\xAE\x77\x27\x64" + + "\xC7\x81\x87\x0D\x1B\xCA\x8C\x03\x93\x21\x3E\xBA\x21\x35\x9D\xC8\x41\xAB\x4C\x5C\xBB\xB7\x5D\x93\x6D\x5F\x10\xFC\xE3\x13\x8B\x45" + + "\xC2\x1C\x95\xEA\xB9\xF9\x6B\xB6\xBF\xFE\xD1\xBA\xC3\x2D\xB0\x24\x98\xF6\x42\xA3\x2D\xA8\xEE\xFE\x30\x53\x6F\x28\xB9\x6F\xDF\xBE" + + "\xCC\x4C\xAC\xFA\xB5\x84\xBF\xA1\x89\x1C\xB4\x39\xB6\xDB\x49\x0D\x40\xA5\x52\x31\x7B\xF6\xEC\x8B\x17\x2F\xDE\xAE\x02\xDF\x62\x26" + + "\x16\x77\xAA\x33\x95\x1C\x3C\x13\x8F\x8F\x19\x33\xA6\x43\x87\x0E\x78\x85\x0C\x72\x48\x52\xD3\x32\xE4\xD9\x2A\x8D\xCE\xA0\x33\x5B" + + "\x0C\xA5\x65\xFA\xD2\x32\x83\xA5\xCC\x58\x66\x87\x26\xBB\x82\x08\xB0\xC9\xD9\xCD\x18\x25\x19\xCA\x0C\x4A\x29\xA8\xF4\x0C\x86\xEB" + + "\xCF\x9C\x0B\x06\xEF\xCA\x60\x24\xDE\x89\xE5\x08\xC6\xEC\xA1\x98\x2D\x52\x69\x8D\x20\x78\xAE\x00\xBA\xB6\x50\x39\x01\x38\x5C\x6E" + + "\xC5\x45\x30\x56\x16\x00\xC0\x61\xB3\x27\x64\x72\x05\x8C\x4E\x3F\xC3\x30\x14\xD8\xA3\xB3\xBA\x8A\x4B\xED\x1A\x93\x95\x0B\x70\x56" + + "\x7E\xF1\x1F\xFE\xF8\x47\x64\x11\x2A\x95\x2A\x27\x47\x05\x27\xCB\xCB\xCB\x83\xCC\xF6\xE8\xD1\x63\xFC\xF8\xF1\x60\x95\xEE\x0C\x4C" + + "\x0B\x50\x36\x39\x71\x72\x61\xA3\x15\x0E\x77\x3F\x17\x9A\x8A\xF0\xC4\x89\x13\x99\x99\x58\x6D\x07\x0E\xEC\xCF\x2D\x71\xFC\xE1\x87" + + "\x1F\xB2\xA5\x64\xEF\x59\xEF\x64\x23\xFC\x8F\x3F\xFE\x18\x80\xA5\x8A\x05\x5A\x83\x71\xD6\xEA\xED\x5B\xCF\xFE\xB9\xA5\x86\x91\x88" + + "\x02\x1F\xBA\xD0\xE7\xF1\x51\xD0\xF6\xA4\xA4\x76\x55\x55\x15\x5F\x7C\xF1\xF9\x3B\xEF\xBC\xCB\xCE\x57\x63\x6B\xBE\xFE\xDA\x37\xE3" + + "\x56\x07\x3B\x91\x43\xAB\x2D\x4A\x4E\x26\x13\x39\x96\x2F\x5F\x4E\x77\x0F\x6E\xA6\x02\x37\x39\x17\xBA\x81\x67\x36\x9E\x5C\xB9\x90" + + "\xD9\xC7\x10\xFF\x0B\xBA\x0D\xF7\x86\xB7\xC3\xE7\xE1\xF9\xF0\x7F\xB0\xA0\xCA\x25\x07\x04\xEC\x4F\x7F\xFA\x93\x8D\xE9\xEB\x22\xE6" + + "\x43\x98\x1D\x74\xFA\x43\xCE\x40\xB8\x1E\x66\x7F\xC4\xE3\x8B\x78\xFC\x51\x98\x37\x40\x60\xA6\xE7\xEB\x48\x07\xEB\x95\x99\x2A\x70" + + "\x3D\xC0\x8E\x70\xB9\x3D\x5A\x05\x80\x19\x6E\x2B\xAC\x21\x08\x6F\x8C\xA1\xB7\xDC\x16\x24\x0C\x5B\x08\xC0\x61\xB3\x2B\x48\xE8\xAD" + + "\x67\x98\x00\xAC\xB5\x38\x20\xC2\x60\x38\x5F\x5F\x9A\x57\x62\xCA\x29\xD2\xCB\xD5\x45\xBF\xFB\xDD\xEF\xBA\x74\xE9\x82\x4F\x3E\x73" + + "\xE6\x4C\x34\x7E\xB8\x0B\x35\x35\x35\x38\xB3\x35\xBE\xD8\x1A\x94\x8B\x9A\x57\x16\xEB\x2E\x01\x66\xE7\x42\xE3\x75\xE8\x5C\xE8\x4E" + + "\x9D\x3A\xE2\x99\x2C\xC3\x38\x68\x82\x77\x2F\xBB\x26\xDB\xBE\x1C\x3B\x76\x2C\x39\x25\x09\x09\xB0\xDD\x17\x58\xBE\xE3\x44\xDD\xC9" + + "\x77\xD7\x1F\xBD\xD4\x00\xC5\x8D\xDC\xED\x05\x8F\x5E\x62\xEC\x6D\x76\xBF\xDF\x26\x2B\xC2\x33\xBF\xBA\x5C\x73\xF0\xFC\x88\x49\x33" + + "\x91\x37\x26\x25\x25\xB8\x5C\x0E\x08\x17\x6D\xE3\xE8\x5D\xBA\xF7\xE3\x94\x6B\xD7\xA7\x52\x5E\x05\x38\xF8\x14\x45\x45\x85\x5B\xB6" + + "\x6C\x39\x77\xEE\xDC\x5D\x02\x7C\xB3\xA3\x01\xD8\xDC\x52\x95\xF8\xF3\xDA\xDA\x5A\x9C\x67\xCF\x9E\x03\x16\xF0\x70\x97\x2E\x5D\x41" + + "\x87\xC5\xE5\x41\x68\x6D\x75\xFB\xAC\x1E\xBF\xCD\x83\x6C\x39\xE0\x60\x49\x46\xCE\xEC\x0D\x93\xFD\x5C\x08\xC6\x11\xBA\xA5\x8B\x17" + + "\x18\xC7\x8D\xD1\xE1\x72\xAA\xC3\x7E\x52\xAD\xB2\xA2\x1E\x60\xA2\xC0\xD0\x5E\x42\x2F\x23\xBF\x8C\xF6\x5A\x09\xBD\x15\x50\xE0\x32" + + "\x6F\xA4\x34\xAE\xC0\x26\x46\x81\x59\x80\x29\xC3\x54\x84\x55\xC5\x06\x84\xD0\x0D\x16\xF4\xE3\xF3\x34\x86\xF6\xD6\x37\xA5\x65\x01" + + "\xA6\x13\xD9\x2F\x5D\xBA\xB4\x61\xC3\x7A\x28\x30\xA2\x68\xB7\xDB\x79\xF4\xE8\x51\xEE\x6E\x0C\xDC\x52\x4F\xBF\xB6\x07\x36\x7D\xB0" + + "\xF9\xE7\xBC\x79\x73\x85\x22\x41\x4A\x72\xBB\xF2\x4E\x3D\x19\x7A\x41\xE6\xDB\x37\x70\xCB\xCC\xC7\xA8\x65\x56\x38\x6C\x3A\xF9\xEE" + + "\x96\xD3\x1F\x6C\x3E\xFD\x01\xB3\xA3\x12\x22\xE4\x0B\xF8\x15\x5B\x46\x6B\x03\xA7\xAC\x34\x73\x7D\x65\xF5\xBE\x37\x5E\x5C\xB4\x2E" + + "\x53\x2E\xE3\xF3\x92\x75\x3A\xED\xAE\x5D\xBB\x20\xF8\xEC\x5D\x6A\xCE\xCE\x63\xBF\xFA\x11\x5F\xCC\x70\x22\xBE\x98\xC1\x80\x26\xEF" + + "\x0E\x16\x33\xDC\xD9\x82\x7E\xD6\xC3\x29\xC9\xD4\xF3\x17\xDD\xB0\xA0\xFF\x0F\x26\x9B\xD3\x6C\x77\x95\x3A\xDC\x16\xA7\x07\x30\x5B" + + "\x01\x33\x30\x06\xCC\x5E\xBF\xC3\x1B\x74\x78\x42\x0E\x2F\x43\x32\xE9\x00\x8B\xC0\xDC\xCC\xB6\x4C\xEE\xFA\xCD\x99\x62\xF5\xDD\xDA" + + "\x4C\xFD\x1D\x4F\xA8\xBC\x3E\x84\x06\xB1\x16\x9C\x89\xF0\x32\xC6\x44\xCE\x0C\xC3\xB1\x32\x7F\x94\x28\xB0\x3B\x08\x7A\x8D\xF5\xF4" + + "\x7A\x29\xC0\x25\x65\x4E\xCA\x30\x44\x98\x8D\xA2\x1B\x2F\xE8\x5F\xD4\xEC\x02\x94\x3F\x07\xC0\x54\x84\xA1\xC0\x3B\x76\xEC\x60\xB6" + + "\x2F\x12\xA9\xD5\x79\xDB\xB7\x6F\xA3\x69\x30\x5B\xD1\x8E\xBB\x9D\xCA\xAF\xED\x84\x4D\x1C\xEC\x5C\xB1\x3E\x7D\x7A\x8B\xC5\x42\x81" + + "\x20\xF9\xE1\x21\xA3\x77\x9C\xFB\xAC\xF6\xF0\xF5\x95\x0C\x40\x74\xFD\x91\x4B\x75\x27\xDE\xDD\x71\xEE\xD3\x5D\x6F\xE1\x57\x17\xE6" + + "\x6F\xDC\x3F\xFD\x95\x2D\xB0\x05\x75\x07\xF0\xCC\x9D\xE7\xAF\xEE\x38\x7F\x75\xD3\xA9\xF7\xF1\x34\xCE\x5F\xB1\x3B\x86\xBF\xB3\x72" + + "\xF7\xD9\x79\xEB\xF6\x14\x68\x8A\x44\x22\xBE\x42\x21\x87\xFF\xE1\x2E\xD1\x91\x24\xDC\x28\xA4\xC4\xD7\x6E\xB9\xF7\xE7\xAF\x7E\xB0" + + "\x3D\x58\xAF\xBC\xB2\x82\x16\x8B\xF7\x78\x5C\x68\xBB\x5B\x76\x39\x61\x33\x49\xE6\x7A\x3E\x77\x41\xBF\xCE\x62\xD5\x97\xD9\x0D\x56" + + "\x07\xCC\x48\x60\x66\x06\x93\x5D\x14\x66\x3F\x35\x9B\x3B\x60\xF7\x00\xE6\x20\x0B\x33\x8B\xB4\xDB\x7F\x7D\x74\xCA\x13\x8A\x31\x00" + + "\x07\xA3\x16\x3F\x19\x49\x82\x95\x05\xA3\xD6\x40\xC4\x1A\x8C\x92\x0B\xE6\xBA\xCC\x17\xB6\x78\x83\x66\x37\xE8\x25\xDC\x92\x1E\x2C" + + "\xBB\x5B\x6F\x23\xC6\x32\x4C\xA3\x68\x0A\xF0\xBD\x56\x52\x87\xE6\xC0\xE7\xCF\x9F\x3F\x78\xF0\xA0\xDF\xEF\xA5\x73\x39\x96\x2F\x5F" + + "\xF6\xD5\x57\x5F\xB1\x83\x9C\x08\xA7\xD9\x92\xEE\xBF\xB6\x13\x36\x71\xB0\xA2\xF7\xDD\x77\xDF\x21\x26\x44\x10\x91\x95\x95\x35\xE6" + + "\xA5\x05\xAF\xBE\xF1\xF1\x3A\xA6\x0B\x9A\x46\xCB\x20\x73\xDB\xD9\x0F\x67\xAF\xDD\xD9\xF7\x89\xA7\xBC\x91\x0A\x43\x69\x99\xA6\x44" + + "\x97\xAF\xD1\xE4\x17\x6A\x34\x3A\x9D\xC1\x52\xE6\x09\xC7\x1E\x1A\x3C\xFC\x85\x45\xB5\x5B\x4E\x7D\x00\x65\x6E\x20\xC5\x75\x27\xAE" + + "\xBC\xB2\xEB\xCC\xFC\x0D\xFB\x7D\xD1\xAA\xF4\x34\x31\xBC\x7F\xE8\xD0\x27\x98\x01\xF3\x2B\x34\x84\x86\x1A\xB3\xDD\xF5\xF7\xE6\x8D" + + "\xBA\x16\x5F\x0F\x3C\x7A\xF4\x93\x74\x41\x7F\xF7\xEE\xDD\xE8\x18\xD2\x2F\x0C\x70\x83\x83\x5B\x52\x47\x63\xB4\x14\x97\x5A\xB5\x16" + + "\x9B\xD6\x62\x2F\xB1\x38\x74\x56\xA7\xC1\xEE\x32\xD8\xDD\xF5\x83\xC9\x30\x87\xB7\xCC\xE9\xB3\x3A\xEB\x49\x86\x51\x92\x29\xCC\x5C" + + "\x71\xAE\x07\xD8\x16\x8C\x96\xFA\x42\x84\x61\x66\x52\x47\x19\x03\x30\xA5\xD7\x8A\x07\x01\xB0\x27\x68\x76\xF9\x4D\x4E\x12\x39\x1B" + + "\x6C\x6E\x62\x4C\x47\x34\x00\xA6\x0C\x73\xA3\xE8\x7B\x0D\x60\xAA\xC0\x74\x28\xB8\x5F\xBF\xBE\x88\xA2\x13\x12\xDA\x3E\xF3\xCC\x78" + + "\xEE\x96\x48\xEC\x64\xFD\x7B\x76\x3C\x89\xBE\xAB\x53\xA7\x4E\xA6\xA7\xA7\x0A\xF8\xC9\x3A\x93\x19\xA4\x21\x30\x26\x3D\x58\x44\x4B" + + "\xDF\x41\x9C\xFC\xD2\xD2\x8D\xAE\x40\x24\x47\xA5\xCA\xC8\x48\xE3\xF3\x92\xF8\x29\x89\x02\x41\x8A\x48\xC8\x13\x0A\x79\xF8\x13\x5E" + + "\x4A\x22\x2F\x99\xD4\x6A\x54\x64\x2B\xCD\x36\xC7\xF8\x19\x4B\xF1\x27\x37\x2A\xF0\x95\x15\x3B\x4F\xE3\x65\xFB\x3E\xF1\x74\x7A\xAA" + + "\x38\x31\xB1\x5D\x65\x65\x05\x3B\x63\x9C\x56\xA5\xFC\xFE\xFB\xEF\xAF\xDD\xAB\x22\x4C\x6F\x11\xAD\xC8\x51\x5E\x1E\x4D\x62\x36\x55" + + "\x1E\x3B\x76\x0C\x14\x98\x26\xC0\xF7\x08\xC0\xF9\x3A\x53\x81\xC1\x5C\x68\x28\x05\xC9\x45\xA6\xB2\x62\x33\x81\xB9\xC4\x62\xD7\x95" + + "\x31\x9A\x6C\x75\x9A\xAC\x2E\xB3\xCD\x5D\x3F\xA4\x4C\x35\x19\x18\x7B\x82\x71\x4D\x26\x93\xBD\x9C\x94\xE1\x60\xB4\x95\xD5\x17\x06" + + "\xA5\x66\x4F\xB0\xD4\x1B\x22\x18\xFB\x08\xC3\x30\x4A\x2F\x91\x5F\x06\xE0\x52\x77\xC0\x8C\x04\x18\xC1\xB3\xCD\x43\x2C\x0E\x30\x55" + + "\xE0\xE2\x52\x3B\x00\xA6\x5D\x59\xF7\x66\x08\x4D\xFB\xB1\x5E\x78\xE1\x85\xE4\xE4\x04\xA1\x90\xDF\xA9\x53\x47\x68\x32\xED\xC7\xA2" + + "\x55\x63\x3E\xFB\xEC\x33\x4A\xEF\xBD\xE6\x9D\xDC\x85\x16\xE3\xC7\x8F\x03\x81\xE0\x30\x50\xD1\x61\xCB\x99\x0F\xD6\x71\x22\xE1\x9E" + + "\x83\x86\x67\x48\x32\xC4\x90\x1D\x21\x3F\x2D\x4D\x94\x7E\xE3\x36\x08\x74\x0F\x84\x74\x66\xB7\x17\x3C\x41\xC8\x6C\x69\xDF\xB5\xFF" + + "\xE3\x5B\x4E\xBF\x4F\x75\x98\xEE\x48\xB8\x62\xD7\xE9\x05\x1B\x0F\x4E\x9C\xBB\x32\x3D\x5D\x2C\x22\xFB\x65\x6B\xB6\x6C\xD9\x4C\xE7" + + "\x63\x35\x6E\xE6\x7E\xED\x1B\xD3\xC4\x41\xDF\xD8\x57\x5F\x7D\x69\x34\xEA\xD1\x00\x21\x0D\x5E\xB9\x72\x15\xBE\xE8\x5F\xA6\x26\x16" + + "\xF7\xB8\x45\x08\xAD\x2A\xD2\xE5\x6A\xF5\x79\x5A\x83\xBA\xC4\x48\x60\xD6\xD7\xC3\xAC\x31\x59\xB4\xA6\x32\xAD\xC9\xAA\x2B\xB5\x91" + + "\x39\x5E\xF1\xD9\x9A\xC0\xD8\x4C\xC5\xD9\xE5\xB3\xBA\xFD\xD4\xC0\x33\x30\xB6\x7B\x83\x04\x60\x8B\x2F\x44\x22\x64\x8F\xDF\xE4\x09" + + "\xC0\x08\xCC\xBE\xA0\x85\xC0\x0C\x0B\x32\xF4\xFA\x4B\x5D\x7E\xB3\xC3\x6B\xB4\x7B\xA8\x35\xC8\x81\x59\x05\x46\x14\xDD\x40\x81\xD9" + + "\x7E\x39\xEE\x47\xFA\x85\x01\x66\xB7\x65\x58\xBD\x7A\x35\xDD\x42\x16\xC9\x30\x22\x6A\xBA\xDA\x86\x8A\x30\x1D\x4C\xBA\x76\x4F\x8A" + + "\xF0\x8F\xF1\x9A\x5B\xA5\xA5\x66\xBA\x2B\xE2\xA0\x51\xCF\xBE\xFA\xE6\x27\xB5\xCC\x1C\x2C\x90\xDC\xB5\xEF\x60\xC8\x6C\xAA\x58\xC8" + + "\x6C\x9C\x9D\x8E\xCF\x98\xA7\x56\x19\xF4\x25\x6E\xA7\xA3\x3C\x1A\xAE\xAA\x88\x45\x42\x01\x97\xD3\x8E\x47\x72\x72\x94\x20\x19\x4F" + + "\x13\x8B\x05\x69\xE9\xE2\x41\xA3\x27\xD1\x91\x64\x12\x45\x1F\xBF\xB2\x72\xCF\xD9\xF9\x1B\x0F\xCC\x5A\xFD\xAA\xCE\x68\x06\xE1\x29" + + "\x29\x49\x93\x27\x3F\xF7\xD5\x57\x7F\x65\x73\x0D\xEE\xB4\xD3\x7B\xEA\x16\x5D\x8B\x17\xC4\xC2\x79\xDB\xB6\xAD\xF8\x98\x48\x94\x34" + + "\x9A\x82\x53\xA7\x4E\xFF\x92\x65\x65\x9B\xEC\x91\x5E\x74\xA3\x02\x67\x17\x6A\x73\x34\x3A\x58\x6E\xB1\x1E\x24\x03\x63\x35\x83\x31" + + "\x91\x65\xBD\x59\x63\x28\x2D\x32\x82\x64\x6B\x49\xA9\x4D\x67\x71\xE8\x99\xA9\x9A\x30\xA3\xD5\x45\x63\x6C\xB3\x83\x98\x85\x59\x47" + + "\x01\x92\x5B\x11\x3E\x3D\x41\xA3\xCB\x63\x70\x7B\xF4\x38\xBB\x3C\x66\xB7\xD7\xEC\xF1\x95\x7A\xFC\x16\x6A\x84\x5E\x9F\xD9\xE5\x35" + + "\x39\x3D\x46\x07\x22\x75\xB2\x38\x83\xCA\x2F\xA5\x97\x1D\x0D\x86\xFC\x22\x84\x46\x1B\xC3\x6E\xAD\xB2\x64\xE9\x52\x52\xB9\x60\xCD" + + "\x9A\xE5\x2B\x56\x2C\x5E\xBC\x98\xBB\xBF\xDB\x2F\x36\x8C\xC4\x8A\xF0\xF9\xF3\x6F\xED\xDD\xBB\xC7\xE7\x73\xD3\xC2\x94\x4B\x96\x2C" + + "\xA6\x75\xA1\xA9\x08\xC3\x47\x91\xEF\xE3\x72\xA8\xDA\x00\x00\x7C\x23\x49\x44\x41\x54\x71\xE5\xEE\x1E\x39\x7E\x8C\xAF\x8F\xDB\xB9" + + "\x73\x47\x66\xA6\x94\xC7\x4B\x2A\x28\x2A\x7A\x79\xFD\xDE\x3A\xC4\xCF\x87\x2F\x6E\x3A\xF5\xDE\x8B\x8B\xD7\x4B\x65\xD2\x54\x31\x84" + + "\x37\x55\x91\x95\x69\xD4\xEB\x3C\x2E\x67\xC0\xE7\x69\x5F\x55\xDE\xB5\x73\xC7\x2E\x9D\x3A\x74\xEE\xD8\xBE\x7B\xD7\xCE\x60\xD8\xA0" + + "\xD3\x56\x96\x47\x43\x01\x9F\x4A\x95\x4D\xC3\x6C\xAD\xDE\x50\x73\xF0\x2D\x3A\xCE\xB4\xF1\xD8\xE5\x35\x07\xCE\xBF\xBC\x61\xFF\xCB" + + "\xEB\xF6\x76\xEF\xF7\xB8\x58\xC4\x4B\x4E\x49\x6A\xDF\xBE\xEA\xDC\xB9\xF3\xEC\x90\x1B\x9A\x39\xE4\xE1\xD7\x38\x1B\x35\xFE\xDA\xB7" + + "\xA7\xFE\xE0\xC6\xCF\xA3\x46\x8D\x02\xBD\xF8\x96\x91\x02\x5C\xBC\x78\x91\xC6\x5F\x3F\x13\xC0\x4D\x0E\x23\xE1\xA0\x85\x3B\x56\xAF" + + "\x26\x35\x00\x96\x2C\x21\xB3\x1E\xE8\xD6\x2A\xA0\x43\xAE\x2E\xCE\xCA\x2F\x56\x14\x68\x61\xCA\xC2\x92\x6C\xC0\x5C\xA4\x57\x69\x8D" + + "\xB9\x8C\xE5\x11\x9E\x8D\xF9\x84\x67\x2A\xCB\x65\x45\x66\x6B\x11\x0D\xB3\xCB\x90\x30\x93\x9C\x99\xA6\xCD\x26\x86\xE4\x56\x48\x6E" + + "\x61\x46\x06\x5D\xBD\xD3\x6D\x00\xA5\x2E\x8F\xC9\xE5\xA5\x00\x9B\x5D\x3E\x4A\xAF\xD9\x49\x9E\x6D\x22\xA9\x36\x49\xB8\xA9\xFC\x52" + + "\x74\x61\x85\xC6\x32\xDA\x89\x85\xB7\x42\xFA\xD9\x74\xBA\x8E\x1D\x3B\x56\x55\x55\x55\x57\x57\xF7\xE9\xD3\x67\xE8\xD0\xA1\x13\x27" + + "\x4E\x9C\x33\x67\x0E\xD9\x5E\xB5\xA6\xE6\x95\x95\x2B\x97\x2C\x59\xD2\xFC\xE1\xA5\x16\x51\x60\xA6\x15\x7E\xFD\xFC\xF9\x73\x8F\x3D" + + "\x36\x18\xF4\x8A\x44\x82\x87\x1E\xEA\x71\xF9\xF2\x65\xB8\x26\xAD\xD8\xC6\xAD\x0E\x7D\xEF\x88\x30\x6D\x4D\x68\xC7\x4C\x8F\x1E\xDD" + + "\x84\x02\xBE\x48\xC4\x0F\x94\xB7\xA7\xB2\x59\x7B\xE8\xC2\x8E\x73\x57\xDB\xF7\xEC\x9B\x9A\x4A\xB4\x57\xA9\x54\xB8\x9C\x0E\x9F\xD7" + + "\xED\x72\xD8\x21\xBC\x5D\x3A\xB5\x07\xBA\xB0\x4E\x1D\xAA\xBB\x75\xE9\x04\x80\xA5\x32\x49\x96\x5C\x56\x59\x11\xEB\xDC\xA1\x1A\x6D" + + "\x01\xC4\x5C\x5D\x50\x30\xFD\x95\x2D\x08\x9E\xE9\x7C\x4C\x60\x8C\x1C\x78\xE1\xA6\x43\xE3\x67\x2E\xCD\xC8\x20\xDB\xA3\xE2\x69\xB5" + + "\xB5\x6B\xD9\xBE\x68\x3A\xE4\x76\x6F\x2A\x30\x0D\x52\xBE\xFB\xEE\xDF\xA1\x50\x30\x21\xA1\x2D\x22\x11\x84\x0F\x88\x9F\x6F\x6B\x7B" + + "\xD1\x66\x02\xDC\xE4\x70\x11\xA0\x25\x7B\x8E\xAE\x5D\x0B\x3F\x87\xB7\xC3\xE7\xE1\xF9\xF0\x7F\x50\x00\x16\x40\x04\x5E\x1C\x74\x64" + + "\xE6\x69\xE4\xEA\x22\x6A\x8A\x82\x1B\x48\xCE\xD6\x94\xE4\x68\x4A\x68\x8C\xCD\x28\xB3\x91\x2A\x73\x01\x59\x0E\x15\x4F\x98\x4B\x89" + + "\x21\x67\xD6\x13\x65\x76\xB5\x32\x39\x7D\x26\x97\xCF\xE4\xF6\x1A\x9D\x1E\xD0\x6B\x70\xB8\x8D\x44\x84\x7D\x16\x4F\x00\x66\x26\xF4" + + "\xFA\xCC\x4E\x06\x60\xD0\x6B\x73\x19\x99\x45\x92\x54\x7E\x29\xBA\xD0\x5E\x36\x7E\x06\xC0\xC2\x74\xA9\x20\x35\x83\xCF\x18\x4F\x9C" + + "\x9E\xC4\x17\xB6\x4D\x4C\x52\x28\xB3\xCB\xCA\xCA\x2A\x2A\x2A\x10\x45\x0C\x1F\x3E\x7C\xEA\xD4\xA9\x2B\x57\xAE\x5C\xB7\x6E\x1D\x85" + + "\x99\x16\xBE\xBA\x99\x32\xB7\xE0\xEE\x84\x57\xAE\x5C\x99\x37\x6F\x2E\x4D\x0E\xB3\xB2\x32\x4F\x9C\x38\xCE\xDD\x9C\x81\x9D\xB2\x7F" + + "\x8F\x88\xF0\x8F\xF1\x05\xC0\x68\x4F\xF0\x09\xD4\xEA\x3C\x5E\x4A\x12\xA9\x65\x37\x73\xE9\x16\xA6\x9A\x6C\xCD\xE1\x0B\x3B\xDF\xFA" + + "\xCC\x13\x29\x17\xF0\x93\xE1\xAF\x3A\x9D\xD6\xE7\x76\x21\x6C\x86\x21\x6C\xEE\xD2\xA9\x23\xD0\xA5\x0A\x8C\x0B\x88\x70\x87\xEA\xCA" + + "\x4C\x99\x04\x4F\xC3\x83\xF8\xF8\x68\x0B\xC8\x46\x87\x33\x96\xEE\x3A\xFF\x19\x9D\x08\x0D\x92\x17\x6F\x3E\x0C\x86\x67\xAC\xDC\xEE" + + "\x0A\x44\xC8\xDA\x8F\xA4\x84\x21\x43\x1E\xA7\x43\xC1\xDC\x89\x6B\xD7\xEE\xA5\x66\xEE\x1A\x27\x7E\x7E\xF5\xD5\xED\x88\x2F\xD0\x40" + + "\x2B\x14\xF2\xDD\xBB\x77\xBF\xF9\xE6\x9B\x2D\xA2\xC0\x5C\xA5\x6D\x0C\xED\xDA\x9A\x9A\x35\x6B\xD6\xCC\x9A\x35\xEB\xA9\xA7\x9E\xEA" + + "\xDB\xB7\x6F\x65\x65\x25\xBC\x3D\x33\x2B\xAB\xF5\x83\x6D\xDB\x24\x26\x93\xBA\x14\x3C\x21\x2C\x91\x2F\x4C\x16\xA6\x92\xF5\xED\xB9" + + "\x85\x30\x90\xCC\xC2\x0C\x4D\xCE\xCA\xD7\x2A\x0B\xB4\xD9\x05\xC5\x88\xB1\xB3\x35\x5A\x82\x71\x71\x7D\xB6\x0C\xE3\x76\x7D\x51\x98" + + "\x81\xB1\xCE\x62\x6B\x45\xBB\x97\x09\xC0\x10\x61\x87\x4B\x0F\x81\x75\xBA\x21\xB9\x24\x78\xF6\xFA\x89\xF6\x12\xF3\x98\x1C\x0C\xBD" + + "\x04\x7A\x87\xAE\xCC\xA9\xB3\x38\x8B\x4A\xEB\x27\x42\x43\x7B\x41\x2F\xE2\x67\x3A\x8C\xA4\x2A\x32\xE0\x02\x8F\x50\xA4\xF3\x98\x07" + + "\x65\x39\x6A\xB1\x54\xCE\x07\xCF\x3C\xA1\x28\x2D\xBD\xB0\xB0\xD0\x66\xB3\x45\xA3\xD1\x81\x03\x07\xA2\xA1\x42\xB0\x01\x98\x81\x34" + + "\x12\x7D\x3A\x5B\x8B\x7B\xA0\x31\x5B\xBA\x74\xE9\xE0\xC1\x83\xEF\x66\x83\xEF\x37\xE2\xFB\x9B\xED\xDD\xBB\xD7\xE7\xF3\xD0\x7D\xF1" + + "\xA6\x4D\x9B\x0A\x77\xA4\xC2\xC2\xEE\x1E\xF2\xC3\x0F\x3F\x5C\xBB\x67\xBC\xF3\xC7\xF8\x06\x2E\x83\x07\x0F\x62\x36\x85\x11\x9A\xCA" + + "\x6C\x74\x17\x32\xA4\xAC\x6B\x0F\x9C\xDB\x77\xE5\x9B\x2E\x7D\x1F\x25\x09\x6D\x9A\x58\x95\xA3\x84\xFA\x7A\x9C\x4E\x46\x81\x23\x14" + + "\x5D\x18\xBD\xE8\xD8\xBE\xAA\x67\xF7\xAE\x7A\x1D\xEE\x58\xB1\xCD\x56\x86\x26\x8C\x6E\x71\xAC\x33\x95\xF6\x1D\xFA\xF4\xAA\x7D\xAF" + + "\xD3\x5E\xB1\x15\xBB\xCE\xCC\xAD\xDD\xB3\x68\xF3\xE1\xC1\x4F\x3F\x27\x12\xF2\x25\xD2\x8C\xEC\x6C\xE5\x9E\x3D\x7B\xB8\xFB\x48\xFD" + + "\xE4\x3E\xAC\xBF\xFC\x5D\xA2\xF2\x7B\x8D\xC4\xCF\x23\x21\xBF\xE9\xE9\xA9\xB1\x58\x94\xDB\x71\xD5\x4C\x80\xD9\xB9\xD0\xF0\x37\x78" + + "\x1D\x7C\xAF\x81\x37\x02\x5A\x48\x0E\xD8\x5E\xCB\xCC\x2F\x9C\x32\x65\xCA\xB0\x61\xC3\xA0\xB1\x0E\x87\x83\x54\xF3\x90\x48\x1F\x6C" + + "\x97\xD8\x2E\x85\x9F\x24\x14\xF3\x33\x64\xE9\x0A\x95\x2C\xB7\x80\xAE\xEA\x89\xAF\xF0\xC9\x6F\x5C\xB2\xA2\x1E\x66\x42\xB2\x26\x4B" + + "\x5D\x98\xA5\xD6\x28\xF2\x8B\x94\x71\x92\x73\x18\x59\x66\x60\x36\x50\x59\x26\x31\x36\xC3\xB3\xC6\x60\x69\x05\xF9\x35\x3A\xBC\x26" + + "\xD0\xEB\x74\xE9\xEC\x4E\x9D\xCD\x61\xB0\x3B\x4D\x2E\x77\xA9\xC7\x07\x80\x2D\x6E\x84\xD0\x1E\xC8\xAF\xD1\x5E\x4F\xAF\x9E\x89\xC5" + + "\x4B\x2C\xF5\x43\x47\x94\x5E\xCA\x2A\x05\x38\xBB\x48\x87\x4C\x18\x06\x35\xC6\x8F\x24\x36\x28\xD2\x01\x6F\x58\x3E\xC3\x39\xDE\x9C" + + "\x34\x3B\x2F\x55\xA6\x10\xA4\x65\x88\xD2\x32\x94\xD9\x39\x94\xE7\xCE\x9D\x3B\x8F\x1E\x3D\x1A\x8D\x1C\xC2\xEC\xB5\xCC\x51\xC3\x1C" + + "\x08\x48\x36\x6F\xDE\x3C\x6A\xD4\xE8\x3B\x5B\x8D\xC4\x7E\x73\xAC\x08\x0F\x1D\xFA\x44\x4A\x4A\x12\x3C\xD8\x62\x31\xE3\x47\x76\x8F" + + "\x42\x4A\xF2\x97\x5F\x7E\xC9\xED\x8E\xFE\xB5\xBC\x93\x9B\xD4\x9D\x3C\x79\xB2\xA0\x40\x2D\x10\xA4\x64\xA4\x8B\x47\x4C\x9C\xBE\xF9" + + "\xD4\x07\xCC\xC2\x83\x0B\xDB\xDF\xF8\xE8\xF9\x45\xEB\xB4\x06\x13\xE9\x76\x66\xB6\xFC\x2B\xD6\x14\xFA\x3C\x6E\xE4\xC0\x20\x19\x7A" + + "\x0B\x74\xA1\xBD\x2C\xC3\x30\x28\x73\xC0\xEF\x85\x3A\x41\x5D\xE9\x66\xA8\x42\x41\x8A\x50\xC8\xB3\x7B\x83\x2F\x6F\xD8\xB7\xE5\xCC" + + "\x9F\xD7\x1E\x38\x0F\x80\x17\xD6\x1D\x44\x6A\x6D\xB4\xD8\xD2\x52\x45\xC9\xC9\x89\xC3\x86\x0D\xA5\xDA\xFB\x41\xFC\x60\x77\x2D\xFF" + + "\xD5\xE9\xA5\x07\x6D\xE6\xDE\x7B\xEF\x5D\x87\xC3\x8A\x96\x4E\x2C\x16\xCE\x9E\x3D\x0B\xED\x35\x77\x6F\xD1\x66\x2A\x30\x5D\x8D\x84" + + "\x44\x7A\xD3\xA6\x4D\xC8\x60\xA9\x2B\xAE\x61\x0E\x78\xE3\xB2\xE5\xCB\xF1\xB7\xBD\x7B\xF7\xF6\xF9\x7C\x45\x45\x45\xD9\x39\x39\x42" + + "\x71\x6A\xDB\xA4\x14\x10\xCB\x4B\x4D\x17\x4A\xE5\x69\x8A\x1C\x49\x4E\x1E\x53\x07\x2E\x87\x2C\xA4\x55\xE4\xD2\xD5\x78\x30\xBA\xAE" + + "\x96\x2E\x80\xE7\x56\x98\xE2\x14\x9F\xC9\x97\xA9\xF2\x33\x73\x0B\xE4\x79\x05\xF2\xEB\x24\x17\xD5\xF3\xCC\xC0\x0C\x65\xAE\x8F\xB1" + + "\x81\x71\x89\x11\x00\xFB\x0D\x2E\x1F\x12\x60\x9D\xCB\x55\xE2\x70\xEB\xEC\x2E\x9D\x03\x99\x30\x02\x69\x1F\xE9\xCD\x22\x21\xB4\x87" + + "\xF4\x60\x21\xB4\xB6\xB9\x89\xFC\x92\x8E\x2B\x3B\x8D\x9F\x49\xE4\xAC\xBF\x4E\x2F\x81\x56\xA3\x87\x02\xC7\x4D\x9F\x0B\xD3\xE8\xF1" + + "\x60\x6E\x31\xF3\x48\xB1\x81\x49\xD3\x4D\xC0\x1E\x39\x3A\x52\x73\x52\xF4\xA0\xC4\xA8\xD2\x68\x65\xD9\x39\xA2\x74\x49\x86\x44\x8A" + + "\x43\xAD\x56\xE3\xD6\x80\x6A\x0D\x73\xE0\x02\x37\x5A\x2E\x97\x23\x7F\xB8\x83\x8A\x1C\xDC\x2F\x8F\xD9\xA3\xF0\xD2\xEA\xD5\xAB\x34" + + "\x9A\x02\xA1\x90\x0F\x41\x43\x23\xCA\xA4\xC1\xEF\xD3\x10\x91\x5B\x7D\x82\x55\xE0\x5F\xDE\x47\x7F\x8C\x6F\xDA\x82\xE3\xFB\xEF\xBF" + + "\x47\x54\xC6\xEC\x97\x99\xAA\x2F\xB5\xAC\x3D\x78\x7E\x23\x09\x77\x2F\xBE\xFA\xC6\xC7\x63\xA7\x2F\x56\xE6\xA8\x84\x02\x1E\xDD\x71" + + "\x97\x61\x38\x55\x53\x90\x0F\x11\x06\xC0\x20\xB9\xAA\xA2\x1C\xE8\xB2\xF4\x22\x13\xAE\xAA\x2C\x57\xE7\xA9\x98\x3D\xEC\xC5\x08\xA7" + + "\xF3\xF3\x72\xF8\x02\x3E\xD9\x65\x9B\x9F\x5C\xA8\xD5\xBE\xBC\x7E\xEF\x96\xD3\xEF\x2F\xA8\x3B\x34\xA7\x66\xF7\xE2\x2D\x47\xFB\x0E" + + "\x19\x0D\xBC\x91\x39\xE3\x09\x74\x5A\x25\xED\xF0\xA3\x6B\x1B\xD8\x31\xE1\x5F\xEB\x2E\xB1\xF7\x8A\x8D\x53\x10\xDB\xE2\x46\x21\xAC" + + "\x28\x2E\xD6\x1C\x3C\x78\x90\xEE\x2D\x7A\x5B\xDB\x8B\x96\x30\x15\x39\x48\x57\x93\x5C\x8E\xDF\x72\x9D\x10\x3E\x09\xCF\xCC\xCC\xCC" + + "\x4C\xCF\x90\x24\xA6\xF0\x11\x12\x27\x8B\x33\xF8\xE9\x52\x91\x2C\x2B\x35\x2B\x07\xC4\xE2\x0C\x68\x53\xB3\xB2\x53\xE5\xC4\xC4\xF2" + + "\x6C\xA6\x9A\xC5\x0D\x00\x37\x58\x1B\xCF\x32\xCC\x2C\xBC\x05\xC9\xF9\xD4\x64\x44\x96\x0B\x40\x72\x66\x5E\xA1\x1C\xA6\xD6\x10\x71" + + "\xCE\x27\x39\xB3\x92\x24\xCC\x5A\x12\xEA\x16\x83\x2F\x5D\x2B\xA3\x27\x64\xF0\x04\x75\x2E\x2F\x4C\xCF\x18\xB9\x76\x7A\x74\x0E\x8F" + + "\xCE\xEE\xD6\xDB\x11\x57\x7B\x4C\x4E\xAF\xD1\x41\x86\x7F\x49\x0F\x58\xA9\xA3\xD8\x64\xD3\x98\xAD\x85\x00\x18\xF8\x19\x4A\x69\xE7" + + "\x33\xD5\xDB\x5C\x50\xCA\x10\xAB\xC2\xB5\xC6\x90\x57\x6C\x54\x83\xED\x22\x03\xD3\x69\x4E\x3B\xD9\x4C\x00\x1E\x00\x6B\x4C\x16\x9D" + + "\x0D\x52\xEF\x35\x7B\xFC\x65\xBE\x00\xCC\xEC\xC6\xFF\x42\x08\x60\x2B\x36\x31\x3D\xE9\x08\xF4\x0D\xB0\xD2\x42\x9D\x49\x57\x6A\x17" + + "\x88\x49\x9D\x84\xF4\xDB\x2F\x6A\xD7\x98\xE1\x0B\x17\x2E\x40\xED\x21\xC2\x70\x62\x84\xD3\x7F\xF9\xCB\x87\x34\x82\xFE\x33\x73\xD0" + + "\x8B\xFF\xFC\xE7\x3F\xBF\x96\x77\xB2\xFF\x91\xCA\xEF\xBA\x75\xB5\x54\x2D\xC5\x62\xFE\xD8\xE9\x8B\x36\x9D\x7A\x1F\x81\xEE\xF6\xD7" + + "\x3F\x7A\x6E\xC1\x9A\x2C\xA5\x52\x2C\xE2\xA7\xA7\xA7\x49\x24\x69\x79\x79\xD9\xEC\xDE\xD9\x4A\x05\xE9\x8B\x46\x26\x0C\x86\xC3\x41" + + "\x3F\x64\x97\x4A\xB1\xDD\x56\x86\xD4\x97\x2C\x66\x4A\x15\x89\x53\x45\xD3\x26\x3E\x79\x60\xF3\xF2\xBE\x3D\x3B\x42\xAF\x24\x92\x0C" + + "\x34\x04\x45\x3A\xFD\xF2\x1D\x27\xD7\xEE\x3F\x37\x67\xED\xAE\x05\x75\x07\xA7\x2C\xDE\x80\x88\x1D\xFA\x2C\x12\x09\xAB\xAA\x2A\x10" + + "\x3C\x53\x11\xA6\x0C\x5F\xBD\x7A\x95\x62\xF3\x2B\x32\x4C\xFF\x23\x8D\xE7\x11\xE4\x47\xA3\x11\xC8\xAF\x40\xC0\x1B\x3E\x7C\x18\x9B" + + "\x37\xDD\x96\x02\x93\x8A\x1C\x4C\x51\xBB\xD6\x6D\xDA\xF2\xD2\xA5\xC9\xA2\xB4\x64\x71\x7A\xDC\x70\x9D\xC1\x4B\xCF\x14\x48\xB2\x44" + + "\x99\xD9\xA2\x4C\x22\xB0\x62\x39\xB3\xD0\x3D\x33\x87\x79\x84\x3C\x88\x1F\x61\xF1\x82\x50\xF5\x2B\xE1\x99\x67\xE6\x34\x10\xE1\x06" + + "\x86\xC7\x1B\x47\xD7\x4C\x75\x57\xFC\x88\x9C\x59\x23\xAB\x4F\x98\xEB\xFB\xBD\x14\x05\x25\x88\xB1\xEB\x01\xD6\xBB\x7D\x3A\x97\x8F" + + "\xA2\x5B\x62\x07\xBA\x38\xBB\x61\x3A\x1B\xE2\x6A\x37\x9D\x80\xA5\xB7\xBA\x90\xFA\x6A\xCD\xF6\x22\xA6\xE7\xB9\xC0\x54\x96\xCF\x28" + + "\x70\x2E\x24\x54\x4B\x00\xCE\x61\x24\x17\xAC\xAA\x34\x06\x08\x6F\x5E\x11\xCC\xA0\xA6\x0C\x17\xD3\xFE\x71\x22\xD7\x85\x80\xD3\x62" + + "\xD7\xDB\x5C\xA0\xD7\xE2\x0D\x02\x5D\x7B\x30\xE4\x08\x47\x60\xAE\x68\xCC\x53\x5E\xE9\xAF\xAC\xF6\x57\x74\x08\xC4\x3A\xF8\x63\xED" + + "\x7D\xB1\x6A\x6F\xB4\xDA\x13\xA9\xCC\xCA\xC9\xA3\x00\x97\xDC\x51\x08\xCD\x8D\xA2\x21\xC2\x0B\x17\x2E\x50\xA9\xB2\x69\xC9\x95\x45" + + "\x8B\x16\xD2\x3D\x44\xB8\x22\x0C\x59\xFE\x55\x14\x86\xFD\x5F\xF1\x98\xF0\x3D\xE4\xAB\x24\x58\x10\x0B\xFC\xB1\x2A\xBA\x44\x01\xC9" + + "\x2A\xE8\x2A\x31\x9A\x45\x42\x68\x6F\xBA\x42\x21\x1D\x3D\xA4\xDF\x4B\x13\x46\xEA\x75\x1A\x91\x58\x44\x31\xA6\x7B\x8E\xE3\x33\x16" + + "\xE4\xAB\x0B\x0B\xF2\xF3\xF2\x54\x72\xB9\x8C\xC6\xCC\xA0\x51\x2C\x16\x3D\x3D\xB4\xFF\x5B\x47\xB6\x9C\x3F\xB2\xF9\xC2\xD1\x2D\xCF" + + "\x8F\x1B\x26\x21\x8B\xB5\xD3\xF0\x82\xBE\x68\xD5\xBA\x23\x17\xE7\x6F\xD8\x3F\x7B\xED\xCE\x25\xDB\x8E\xF7\x1F\x31\x2E\x9D\x99\x0A" + + "\x22\x14\x09\x66\xCC\x98\x41\xFB\xFC\x68\x4B\x87\xF7\x86\x74\xE3\x76\x37\x1C\x6D\xF1\x7B\xC5\x66\xBF\x08\xAC\x92\x92\xDA\xE1\x53" + + "\x23\x41\xD8\xB2\x65\x0B\x9A\xE9\x06\xF4\x36\x5F\x81\xF1\xAB\xB6\xC9\x3C\x28\xAA\x98\x11\xD2\xB8\x29\xF1\x08\xF3\x60\xFC\xF1\x4C" + + "\x25\xC5\x95\x1A\x65\x98\xFD\x91\xE2\xCA\x6A\x2F\xAB\xC0\x2C\xC3\x37\x23\xB9\x31\xD8\x6C\xB1\x47\x9A\x30\x5F\xEF\xC4\xCE\x2F\x6A" + + "\x45\x56\xEA\x7B\x82\x06\x37\x09\xA4\x19\x86\x89\xF0\x6A\x6D\x2E\xAD\x15\xE6\xD4\x22\xDD\x25\xE3\x4E\x2E\x5D\x99\xB3\x04\xC1\x33" + + "\x95\x5F\x23\xA1\xB7\x5E\x7E\x75\x04\xE0\x6C\xAD\x9E\xE9\x04\x27\x23\x5A\xCC\x20\x35\x14\xF8\x3A\xBD\x8C\xD5\x0B\x2F\xA2\x6E\x84" + + "\xDF\x06\xBB\xDB\xE2\x09\x58\x7D\x21\x47\x30\xEA\x8A\x94\xFB\x2A\xAB\x02\x55\xD5\xC1\xEA\x0E\xB8\xF0\xC4\xCA\x3D\x11\x52\x43\xC8" + + "\xCB\x2C\xB6\x70\x87\x62\x64\xE2\x58\x20\x22\x95\x2B\x49\xAD\xC0\x8C\x8C\xBB\x51\xE0\x37\xE2\xDD\xD1\xF8\x76\xCB\xCB\x63\x68\xAA" + + "\xC1\x86\xD5\x5A\xC6\xD6\xC7\xE2\x32\x8C\x28\x91\xDB\xA1\x75\xED\x17\x64\x98\xA6\xDF\xF8\xEF\x83\x06\x0D\x4C\x4C\x6C\x87\x08\x36" + + "\x4B\xA1\x98\xBD\x76\xC7\x96\x53\x1F\x6C\x60\x76\x51\xE8\xD8\x7B\x60\x72\x52\x5B\x32\xCC\x23\x93\x8E\x7E\xA2\xFF\xA2\x99\x13\x17" + + "\x4C\x9F\x30\x73\xF2\x53\x61\xBF\x43\x2A\x4D\x17\x91\xAD\x15\xE8\xA4\x0E\x32\x07\x0B\xFA\x4C\xBB\xAC\x04\x42\x01\x38\x54\x2A\xE4" + + "\x93\xC7\x0E\x3D\x7F\x64\xCB\x1B\x07\xEB\x5E\xDB\xBF\x01\x76\xE5\xD4\xCE\x49\x4F\x3F\x91\xCE\xC4\xD5\x62\x91\x60\xD8\x84\xE9\x6B" + + "\xF6\xBF\x09\x11\x9E\xB7\x6E\xEF\xBC\xF5\x7B\x3D\xE1\x72\x21\x3F\x39\x35\x55\x9C\x93\xA3\x3C\x78\xF0\x00\xBB\x8A\x8B\xDD\x18\x9D" + + "\xCB\xF0\x2F\xDC\xF3\xF7\x63\x7C\xFD\x09\xC2\x01\x87\xC3\x46\x27\xBA\x3F\xFA\xE8\x40\x1A\x36\x73\x57\x20\xDD\xAE\x02\x3F\xD0\x2E" + + "\x81\x9F\x91\xC9\x4F\x97\x91\x73\xBD\x91\x6B\xA1\x34\x4B\x28\x53\xB2\x4C\x52\x62\xE3\xF2\x9B\xDD\x98\xE1\x06\xC6\x65\x98\x1B\x4E" + + "\xB3\x8F\x34\x69\x0D\x82\xED\xB8\x3E\x6B\x10\x63\xB7\x22\x2B\xF5\x01\xB0\xC7\x0F\x86\xF5\x00\x98\x28\xB0\x9B\xA5\xB7\x98\x99\xAA" + + "\x41\xAC\xD4\x5E\x4C\xB4\x97\xD0\x4B\x46\x7D\x0D\xA5\x84\x5E\xC8\xAF\xCE\xA4\xD2\x1A\xB3\x8B\xF5\x4A\x8D\x4E\xC9\x30\x4C\xAC\x90" + + "\x99\x68\x02\x86\x8B\x49\x2F\x34\x0D\xA4\x29\xC0\x45\x66\x9B\xDE\xE6\x2E\xF3\x06\x5D\xE1\x72\x4F\xB4\x12\xE6\x0C\x45\x6C\x3E\xBF" + + "\xD9\xE5\x2A\x2C\xD1\x29\x55\xB9\xF0\x54\xA4\x19\xC8\x40\xB2\xE2\x07\xAE\x15\x0A\x05\xCD\x4C\x52\x53\x53\xEF\x38\x07\x66\x7F\x75" + + "\xFA\xF4\x69\x10\x4B\x2B\xEC\xC0\x65\x21\x4A\xE3\xC6\x8D\xFD\xFC\xF3\xCF\x29\xC6\x5C\x86\x91\xF5\xFD\x92\x0C\xB3\x23\x58\x14\x89" + + "\x99\x33\x67\x24\xA7\x24\x42\x39\x91\x88\x0E\x7E\x7A\x72\xDD\xC9\x77\x37\x30\xF3\xAE\x5E\x5C\xB2\x41\x2C\x12\x4A\xA5\x12\xBC\xFF" + + "\x01\xBD\x3B\x2F\x9A\x31\x71\xEE\x4B\xE3\xE6\xBE\x34\xFE\xE5\xA9\xCF\x2C\x9A\x31\x61\xE4\x63\x7D\xED\x65\xC6\xBC\xDC\x6C\x70\xCB" + + "\x17\xF0\x92\x53\x92\x93\x92\x93\x52\x78\x29\xF8\x98\xF9\x6A\x55\x65\xD8\xB7\x69\xE5\x9C\x8B\xC7\xB7\x81\xDB\xD7\x0F\x6C\x04\xC3" + + "\x38\x9F\xD9\xB7\xFE\xED\xE3\xDB\x7A\x77\xAF\x66\xA4\x5E\x58\x50\x54\xBC\x66\xFF\x1B\xF3\x37\x1E\x00\xC3\x0B\xEB\x0E\x8D\x9F\xB5" + + "\x34\xAF\xA0\x80\x4C\xD2\x14\x0B\x3D\x1E\xF7\x5B\x6F\x5D\x40\xD3\x46\x87\x85\x1B\xEB\x30\xFB\x41\x7E\xBE\xBB\xC4\xBD\x5D\xF1\x3A" + + "\x07\x3F\x4E\x9B\x36\x35\x21\x81\xB4\x68\x6A\x75\xEE\xC6\x8D\x1B\x10\x64\x51\xF9\xBD\x03\x05\x86\x8F\xD1\xDE\x16\x78\x5D\x03\x3F" + + "\x84\x67\x66\x48\x24\x49\x3C\x32\x2C\x94\x92\x8A\x04\x58\x86\x70\x9A\x62\x79\x03\xC9\x32\x25\xBD\xA6\x0C\x73\x55\x9A\x8D\xA2\x6F" + + "\x46\x2C\x17\x72\xEE\x23\x0D\x4A\x2F\xD3\x92\x55\xC8\x96\x5B\x99\xBD\x41\x98\xC9\x13\x30\x82\x61\x97\x5F\xEF\xF4\x92\xF8\x99\x8E" + + "\xF4\x5A\x9D\xC5\xF1\xB9\x56\x74\xE1\x3E\x3B\xF0\x4B\xD0\xD5\x9B\x55\x3A\x53\x36\x43\x6F\x76\x91\x4E\xA1\xD1\x29\x98\xC1\x68\x92" + + "\x64\x93\x11\x2D\x04\xE8\x25\xF5\x1D\x57\xC5\x06\x60\x8C\x3F\x44\x13\x80\x68\xBC\xD4\x1D\x30\x22\x38\x2F\xB5\x16\x96\xE8\xB3\x72" + + "\x72\x33\x15\xCA\xEC\xEC\xEC\xFC\xFC\x7C\x87\xC3\xD1\xAB\x57\x2F\x70\xB8\x98\x74\xD3\xAF\x5C\xC1\x1C\xAF\xBC\xF2\xCA\xD2\xA5\x4B" + + "\x6B\x6B\x6B\x47\x8C\x18\x71\x37\xBD\xD0\xDC\xAF\x10\x00\xC3\xFF\x3A\x76\xEC\x40\xA7\x25\xE2\xAC\xD1\x14\xEC\xDE\xBD\xEB\xEA\xD5" + + "\x4F\xD9\xDD\xE8\xB9\x3A\xDC\x38\x1F\xFE\x39\x1C\x94\x0D\x08\x69\xF0\xBC\x6E\xDD\x3A\xE8\x09\xE8\x15\xF0\x93\xC3\xD5\x9D\xD7\xEC" + + "\x3F\x07\x80\x37\x1E\xBF\x82\x28\x3A\xDA\xA9\x3B\x62\x5D\xC8\x69\xC0\x63\x9F\xF3\xE2\xD8\x97\xA7\x3D\x33\x77\xCA\x38\xD0\x3B\xEF" + + "\xA5\xF1\x73\x5E\x1C\x07\x35\x5E\x38\x7D\xE2\xD8\xE1\x03\xFB\xF4\x68\xDF\xBE\x22\x58\x1E\xF6\x54\x45\xFD\x3D\x3B\x57\x3C\x39\xE4" + + "\x91\x9A\xC5\xD3\x2E\x1E\xDD\x86\xB0\xF9\xEC\xBE\xF5\x40\x97\xD2\x8B\xF3\xD9\xFD\x1B\x70\xDE\xB7\x69\x99\xA1\x44\xC3\xE3\xA5\x48" + + "\x25\xE9\x4F\x8C\x9F\x52\x73\xE8\xC2\xEC\xB5\xBB\xE6\xD4\xEC\x5E\xB2\xED\xD8\xC3\x4F\x8C\x66\x5A\x3A\xB1\x48\x2C\xE8\xD5\xAB\x27" + + "\x3B\x77\x8D\x36\x76\x94\x61\x76\xEF\xC2\x5F\x26\x5A\xF9\x91\xB3\xF6\xF3\xC2\x85\xB7\xD0\xEC\xCB\x64\x12\xC8\xEF\x88\x11\xC3\xE8" + + "\x4E\x48\x37\x1B\x8C\xB8\x35\xC0\x6C\x2F\xF4\xF0\xE1\xC3\x6B\x6A\x6A\x96\x2C\x59\x02\x27\x5C\xCE\x1C\xB8\x58\xB4\x78\x31\xDC\xAC" + + "\x77\xEF\xDE\x2E\x97\x0B\x7F\x9B\x9B\x97\x27\x4A\x4D\x6F\x93\x94\x92\xC0\x17\x25\x89\xD2\x78\xE9\x32\xA1\x4C\x71\xBD\x02\x1C\x00" + + "\x66\x8C\xF0\xCC\x9C\x53\x91\x0C\x37\xE2\xB3\x39\x46\xD1\xE5\xD6\x75\x25\xFB\x16\x11\x86\xD5\xAD\x2C\x3E\x0E\xC0\x4C\x20\xAD\x27" + + "\xDD\x57\x24\x90\x26\xB1\x74\xBD\x0E\xDB\x35\x66\x6B\x01\x3B\x67\xC3\x00\x74\x89\xF6\xE6\x90\xE0\xD9\x50\x4F\xAF\xA6\x44\xA1\xD1" + + "\x12\x1D\x2E\xD4\x12\x05\x2E\xD2\xAB\x8A\xF4\x8C\xF6\xD2\xD1\x23\x23\x12\xEE\xAC\xDC\x7C\x49\x56\x76\xAA\x44\x26\x57\x66\x17\x15" + + "\x15\xD9\xED\xF6\x58\x2C\x36\x68\xD0\xA0\xC9\x93\x27\xE3\xF6\xAC\x5B\xBF\x7E\xE5\xCA\x95\xC0\x95\x9D\x8F\x46\x8F\xB9\x73\xE7\xDE" + + "\xCD\xE6\x66\x0D\x0E\x7C\xB5\x08\xA1\x2F\x5F\xBE\x1C\x0E\x87\xF0\x7D\x03\x60\x7C\xF1\x7C\x7E\x4A\x55\x55\x05\x9A\xED\x0F\x3F\xFC" + + "\x90\x4D\x86\xB9\xF9\x30\xBB\xD8\x90\xF5\xCB\x96\x75\xD0\x06\x1D\x57\x3B\x77\xEE\x50\x28\xB2\x24\xD2\x0C\x80\xAA\x33\x5B\x16\x6E" + + "\x3E\x04\xE1\xAD\x3D\x7C\x71\xF3\xE9\xF7\x17\x6C\x3A\x28\x21\x49\x69\x7A\x66\xA6\x64\xF8\xE0\x3E\xCB\xE6\x4C\x9E\xFD\xE2\x38\xA0" + + "\x3B\x8F\x51\x60\x48\xF1\xEC\x17\xC6\x2C\x9B\xFB\xFC\xD6\x35\x2F\x1F\xDE\xB6\xEA\xEC\xBE\x0D\x6F\x1E\xDA\x74\xF1\xD8\xD6\x77\xCF" + + "\xEC\x7C\xF7\xCC\xAE\xB7\x8E\x6E\x85\xD8\xBE\xC6\xE0\x0A\x74\x59\x05\x86\x9D\xDE\xB3\xEE\xBD\xB3\xBB\x06\xF7\xED\x0E\x50\x85\xFC" + + "\x14\x87\x37\xB8\xFD\xF5\x8F\x16\xD6\x1D\x9C\x5B\xBB\x67\x6E\xCD\x6E\xA8\x71\xB4\x23\x5A\x0D\x3E\xB3\x1C\x42\x38\x62\xC4\x70\xDA" + + "\x9B\xC5\xDE\x2B\xBA\x1A\x84\x3B\x8F\xAD\xC5\x6F\x51\xE3\xDB\x45\x43\x95\xEF\xBF\xFF\xBE\x7D\xFB\x2A\x91\x48\x20\x10\xA4\xD8\xED" + + "\xD6\x5D\xBB\x76\xD1\x9D\x90\x1A\xCB\x6F\x33\x15\x98\xBB\xB9\x19\x7C\x8F\xEB\x8A\xF0\x4C\x3A\x08\x5C\xBB\x6E\xDD\xAA\x55\xAB\xA6" + + "\x4E\x9D\x3A\x74\xE8\xD0\xEA\xEA\x6A\xF0\x8C\x3F\x94\x48\x65\xAD\xDB\xB6\x6B\x93\xC4\x03\xCF\x29\xA9\x12\x0A\x33\xCB\x33\x7B\x6E" + + "\x52\x66\x6F\x61\x5C\x05\x6E\xD4\x7D\x9D\x0B\x80\x03\xA5\x60\xD8\xC3\x30\xEC\xF6\x1B\xC9\xB4\x4A\x9F\xC1\x41\x3A\x9F\xF5\x90\xE2" + + "\xB8\x0E\x6B\x4A\xEB\xFB\x9C\x49\xAF\x95\xCE\x0C\x74\x55\x84\x5E\x02\xB0\xA2\x5E\x7E\xB5\xC4\x34\x25\xA9\x72\x45\xAA\x34\x2B\x55" + + "\x96\x95\x86\x0F\x90\xA9\x14\xA4\x49\x92\xF9\xA2\x84\x64\x5E\xB6\x2A\xD7\x6A\xB5\x55\x55\x55\x41\x66\x47\x8E\x1C\x39\x7D\xFA\xF4" + + "\x35\x6B\xD6\xD0\xF9\x1B\x14\x5A\xEE\xCC\x4A\xEE\x71\x97\xDB\x8B\x36\xFE\x0A\xF1\xED\xA2\x91\x76\xBB\x9D\x00\x98\xE9\xD4\xE1\x93" + + "\x3E\x58\x21\xFF\xE9\xA7\x9F\xFA\xE8\xA3\x8F\xDF\x7F\xFF\x3D\x36\x19\x66\x19\x86\xBF\xFE\xFD\xEF\x7F\xBF\x76\x63\xC3\xDF\x52\x0E" + + "\xCA\xBE\x1A\x05\x60\xDB\xB6\x6D\x79\x79\xAA\xB4\xF4\x54\xB1\x58\xA0\xCA\xCB\x7B\x69\xD9\x46\x32\xC5\xE2\xD0\x05\xBA\x01\xF7\xB0" + + "\x09\x53\x45\x82\x14\x1E\x9F\xE7\xB2\x99\xA1\xB7\x24\x78\x9E\x42\xD0\x25\xF4\x32\x3A\x5C\xB7\x72\xCE\xC9\xDD\xB5\xE7\x0E\x6F\x7E" + + "\xF3\x50\x7D\x8A\x0B\x8C\xCF\xEC\x5D\x7F\x66\xEF\xBA\xB3\x9C\xB0\x99\x2A\x30\x6B\x94\xEA\xAD\xAB\xE7\x65\x67\x67\x25\x27\x27\xAA" + + "\x0B\x0B\x5F\xD9\x75\xA6\xE6\xE0\xF9\x97\xD7\xEF\x03\xC3\x38\xCF\x58\xB9\xCD\xEA\xF2\x23\x90\x4E\x4F\x27\xE9\xF4\xD8\xB1\x63\x98" + + "\x39\x30\x1F\xB0\xF9\x30\x5D\xEA\x40\x37\x6A\xFD\xB9\xA3\x95\x6B\x9C\xB5\xFB\x2F\xBC\x30\x19\xED\x2F\xB3\xE8\x2A\x75\xF2\xE4\xE7" + + "\x68\x09\xE8\x5B\x74\x64\xFE\xA4\x02\xDF\x7A\x7B\xD1\x26\xA7\x61\xAD\x5D\xBB\x16\xA8\x8F\x19\x33\xA6\x5F\xBF\x7E\xF0\x70\xAB\xD5" + + "\x9A\x99\x95\x75\xDF\x03\x6D\x1E\x68\x97\xD8\x2E\x99\x9F\x28\x10\x27\x0A\x53\xA9\x25\x8B\xD3\x29\x96\x4D\x66\xC8\x4D\x1A\xFB\xCC" + + "\x86\x6C\x83\x64\x45\x4E\xAB\x32\x6F\x80\xAC\xD7\xF7\xC0\x02\x30\xD3\x8D\x00\xD7\x33\x5C\x06\x80\x6D\x05\x26\x6B\xBE\x91\x09\x9E" + + "\x19\x80\x41\xAF\x52\xAB\x57\x14\xEB\xB2\x34\x25\x59\x50\xD7\x42\xAD\xBC\x00\x56\xFC\xFB\x3F\xFC\x01\x29\xAC\xD1\x64\xD2\xE9\xF5" + + "\x06\xA3\x31\x18\x0C\xF6\xED\xDB\x77\xD8\xB0\x61\x93\x26\x4D\xC2\x87\xA4\xA3\xE1\x34\x30\x6E\xE6\x74\xE8\x16\x99\x4A\xC9\xFD\x0A" + + "\x71\x9C\x38\x71\xBC\xAC\xAC\x34\x25\x39\x51\x96\x29\x23\x9D\x34\xA4\x3B\x37\x55\x26\xCB\xC0\xBB\xFA\xF4\xD3\xAB\x74\x89\x12\x97" + + "\x61\x7A\xD1\xA0\xC3\xE6\xDA\x5D\x33\xCC\xFA\x37\x9B\xF7\xC2\x15\xB2\xB3\x95\x24\x39\x4F\x15\x65\x29\x15\xCF\xCE\x5E\xB6\xE5\xF4" + + "\xFB\x64\xA2\x32\x33\xF5\x0A\x0C\x87\xAB\xBB\xE0\x57\x22\x91\xB0\x47\xA7\xF2\x15\xF3\x5E\x80\xDE\x52\xF9\xA5\xB6\x71\xC5\x6C\x48" + + "\xEE\x9B\xB4\x77\x8A\x91\x56\xD6\xB8\x31\x73\x03\xA3\x4F\x00\xDE\x17\x8E\x6D\xD3\x69\x0B\x53\x52\x92\x72\x54\xAA\xE7\x17\xD6\x6C" + + "\x39\xF3\xE7\x15\x3B\x4F\xCF\x5B\xB7\x17\x0C\x2F\xA8\x3B\x88\x47\xB4\x06\x53\xAA\x18\x0C\x23\x4F\x14\x3D\xF9\xE4\x93\x74\xEE\x1A" + + "\x7B\xBB\x68\x4B\xF7\xAF\x7F\xFD\xEB\xDA\xCF\x1C\xAD\xB0\xBD\xF4\x5B\xB7\x6E\x91\x4A\x33\x98\x31\x36\xA1\x4A\x95\x0D\xBE\x98\x0A" + + "\xB2\x67\x6E\xE6\x06\x2D\x32\x17\xBA\xF1\x9C\x4A\x1C\x8B\xC8\x7E\xD7\xCB\xE9\x7E\x9A\xF0\x73\x78\x3B\x7C\xFE\xE1\x87\x1F\x86\xFF" + + "\xEB\x0D\x06\xBC\xAC\xD1\x68\x44\x0A\xFD\xFB\xDF\xFF\x81\x8B\x6E\x03\x99\x65\x33\xE7\x06\x9D\xDB\x4D\xF5\x8A\xE5\xA4\x92\xBF\xCA" + + "\x6E\x65\xF5\x05\xAC\x5E\xA0\xEB\x2F\xA5\x0C\xBB\xFD\x64\x6A\x87\xD3\x4B\x19\x86\xE9\x6C\x04\xE0\x22\x8B\xBD\x90\x61\x58\x6D\xB0" + + "\x20\xFB\xCD\x66\x82\x67\xD0\x2B\xD7\x94\x80\xDB\xCC\x82\xE2\x4C\x86\xDE\x4C\xA6\xA8\x5D\xE7\xCE\x9D\xE7\xCD\x9B\x37\x63\xC6\x8C" + + "\x59\xB3\x66\xE1\x43\xD2\x4F\x85\x8F\xB7\x28\xBE\x20\x89\xDD\xCB\x7B\x51\x33\x16\x24\xB5\x2C\xC0\xB4\x67\x72\xEF\xDE\xBD\xB8\xAB" + + "\xC9\x49\x09\xD9\x39\xD9\x73\x6A\x77\x19\x2C\x56\x44\x86\x70\x4A\x48\x1F\x7C\xE2\xD3\x4F\x3F\x65\x27\x48\xB3\x7D\x5A\x34\x50\xC4" + + "\xAF\x1A\x84\xD3\x77\x20\x35\x0D\x9C\x9B\xF6\xFD\xFC\xEF\xFF\xFE\xDF\x29\x53\xA6\xC0\x1D\xF1\x36\x80\x68\x66\x56\xE6\xD8\x19\x8B" + + "\x10\x33\xD3\xA2\x93\x64\xC1\xFD\x09\x02\x70\xB1\xDE\x88\x70\x31\x5B\x29\x1F\xF6\x68\xEF\xC5\x33\x27\x91\x1C\x98\x91\x5F\xA8\xF1" + + "\xD2\xD9\x93\x21\xB6\x40\x91\xE9\xA0\xAA\x7B\xFD\x46\x80\x7F\x12\x66\x44\xD7\x57\x4E\xED\xF4\xBA\xCA\xF8\xBC\x64\x85\x52\x31\x6E" + + "\xFA\xE2\xAD\x67\xFF\xBC\xFE\xC8\xA5\x65\xAF\x9E\x9C\x5B\x4B\x18\x5E\xB4\xE9\xF0\x84\x39\x2B\x34\xA4\x9B\x87\x30\x0C\x66\x1E\x79" + + "\xE4\x61\x00\xC3\x96\x46\x60\x27\xA5\xFE\xF5\xAF\x7F\x65\x4B\x58\x72\x3F\xE9\xDD\xB7\x77\xF4\x82\xBE\x38\xBE\x68\xAD\xB6\x08\x77" + + "\x03\x79\x10\x99\x97\xC2\xEC\xA8\xC8\xD4\xDF\x68\x01\x05\x6E\xCE\x6A\xA4\x9B\x2D\x45\xC2\x23\x08\xBF\x99\x2D\x84\x57\xE3\x41\x50" + + "\x00\x16\x40\x04\xB8\x00\x1D\xDC\xCE\xAD\x06\x32\xDB\xA0\x37\x9B\x6B\x6C\x8F\x77\xDC\xE8\x75\x76\x2B\x1B\x00\x26\xC6\x2C\x00\xF6" + + "\x04\xE9\xEA\x42\x33\xD5\x61\x60\x4C\xFA\xB4\x48\x26\x5C\x84\x28\xDA\x62\x2F\x30\x5B\xD5\x46\x4B\xAE\xC1\x9C\xAD\x33\x2A\x4A\xE2" + + "\x00\x17\x6A\x65\x05\xC5\xB2\xFC\x22\x98\x54\xAD\xF9\xFD\xEF\x7F\x4F\x97\x13\xE2\x63\xD0\x9A\xCF\xEC\xE6\xC8\x77\xB6\x24\xB8\x65" + + "\x01\xA6\xF1\xF3\xA6\x4D\x9B\x8A\x8B\x8B\x52\x52\x12\xB3\x55\x39\x5B\xCF\x7E\xF8\xE2\x92\xF5\xCA\x1C\x65\x06\x23\x2C\x1A\x4D\x21" + + "\xF0\xBE\x7A\xF5\x2A\xBB\xD2\x90\xD5\x61\xDA\xE9\x8A\xF3\xD7\x5F\x7F\xCD\xAD\xB1\x7A\x5B\x6A\xC3\xFD\x13\xB6\xDB\x16\x0C\x3C\xF4" + + "\x50\x4F\x81\x80\xCF\xCC\xB2\x10\x2A\xB2\x95\x13\x66\xAF\xD8\x7C\xEA\xFD\xEB\xA5\x24\x8F\xBE\x5D\x77\xFC\x9D\x75\x87\x2F\x2A\xB3" + + "\x95\x88\xF6\x0B\xF2\x55\xCF\x3C\x39\x78\xC1\xB4\x67\x11\x36\xD3\xEC\x17\x24\xAF\x5D\x34\xED\xC2\xB1\xAD\x10\xDE\x37\x6F\x14\x58" + + "\xA2\xC9\x8C\x2C\x73\xF5\x96\x0B\x33\x3D\x03\xE0\x77\x4E\xEF\xB4\x5A\x0C\x64\x73\xB3\x6C\xE5\x33\x10\xFF\x33\x64\xC9\x04\xDE\xC0" + + "\xE2\xAD\x47\x49\x32\x5C\xBB\x67\xF1\xE6\x23\xCF\xCE\x5E\x5E\xAC\x37\x30\x13\x48\x52\x45\x62\x81\xDF\xEF\x3D\x7C\xF8\x30\xDE\x3F" + + "\xB4\x97\xBD\x5D\x34\x9C\xA6\x9D\x7F\xEC\x87\xBD\x9B\xA0\x9A\xFB\xE7\xF4\xCE\xBF\xF7\xDE\xBB\x2E\x17\x49\x82\x10\x39\xD3\x01\x33" + + "\x9C\x11\x42\xBF\xFB\xEE\xBB\xA7\x4F\x9F\xB9\x45\xFC\xD5\x82\x00\x37\xE6\x99\x0B\x33\xBB\x21\x38\x2D\x04\x4F\x97\x13\x82\x8E\xC6" + + "\x1A\x7B\x33\xBD\xE5\x3E\xD2\x00\xF8\xD4\x4C\x0A\xBC\xB2\x95\xC3\x17\xB0\xFB\x43\xF6\x40\xD8\xE6\x8F\xC0\x48\x81\x0E\x5A\x82\xC3" + + "\x13\xAC\x57\x63\x87\x47\x6B\x73\x15\x11\x11\x76\x40\x84\xD5\x26\x00\x5C\x9A\xAD\x33\x29\xC0\xB0\x56\x2F\xD7\x10\x7A\xA5\x0C\xBA" + + "\x12\xB5\x26\x23\xB7\xA0\x71\x45\x8E\xBB\x2C\xCA\xD1\xE2\x00\x5F\xB8\x70\x61\xD5\xAA\x95\xF9\x05\x6A\x48\x4D\x61\xB1\x16\x2A\x87" + + "\x58\x71\xF4\x0B\x73\x33\x32\xD2\x33\x48\x4A\x2C\xC2\x4B\x1E\x38\xB0\x9F\xEA\x70\x63\x86\xA9\x83\x7E\xF4\xD1\x47\xFF\xFC\xE7\x3F" + + "\xE9\x1C\xA0\x06\x6E\x7A\xB3\xE8\x9A\x7D\x9C\xBB\x8D\x0B\xF2\xDE\x8D\x1B\x37\xE0\x3F\x42\x49\xD2\xD2\x44\x48\x32\xF1\x96\xA6\x2E" + + "\xAF\xC3\xBB\xE2\x16\x82\x25\x09\xF0\xF1\x77\x6A\x0F\x5D\x90\x67\xC9\xC1\xB9\xA6\x30\x6F\xC2\x53\x8F\xCF\x67\x00\x66\x13\xE0\x85" + + "\xD3\x27\xEC\xA8\x59\x70\x7C\xC7\xDA\x53\x7B\x6A\xCF\xEC\x5B\xC7\xA4\xB5\x9B\xDE\x38\x08\x38\x37\xD2\x64\x18\x18\x9F\x3F\xB2\xE5" + + "\xE2\xB1\x6D\x30\x24\xC9\x54\xAB\x19\x23\x23\x49\xE7\x0E\x6F\x3A\xB8\x65\x45\xAE\x4A\x89\x76\x2D\x57\xAD\x9E\x5B\xBB\xBB\xEE\x04" + + "\x29\xD9\xB3\x91\x59\x66\xB8\x78\xCB\x11\xA6\x43\x8B\xE8\xF0\xA4\x79\xAB\xCD\x56\x87\x48\xC8\x4B\x23\xD1\xBC\x00\x61\x0B\xE4\x05" + + "\x4D\x1B\x30\x66\x45\x98\xDE\x37\x48\x31\x8D\x75\x1B\x60\x7C\x5B\x24\x73\xFF\x84\xBE\x1A\xE2\xF6\x50\x28\x98\x9C\x92\x88\x46\x44" + + "\x22\xC9\xD0\x68\x4B\x70\x81\x76\x07\x99\x39\xFE\x2F\x5B\x01\xEB\x17\x06\x98\x4B\x32\xD7\xE7\x1B\x54\xE4\x68\x3C\x6E\xDC\x60\x0C" + + "\x99\xCB\xF0\xCD\x1E\x27\xDD\xDA\xCC\xB9\x95\x2B\x18\x72\x05\xC2\xCE\x50\xCC\x19\x2C\x77\x06\x63\xA4\xC6\x5D\x20\x0A\x86\xCB\x68" + + "\xA5\x0E\xB2\xD6\xDF\xAF\x63\x18\x2E\xB6\x3A\x35\x16\x47\x7E\xA9\x35\xCF\x64\xC9\x8E\x8B\x30\x00\x96\x16\x14\x11\x74\xD5\x85\xA0" + + "\x37\x5D\x55\x70\x0F\xD6\xC4\x6A\x00\xF0\xA5\x4B\x97\x10\xEC\x20\x65\x12\x08\x52\xCC\x56\xFB\xE6\xD3\x64\x15\x0E\xD4\xE6\xB1\x31" + + "\x93\x53\xD3\x44\xE9\xA4\x5A\x85\x90\xD6\x13\x06\xC3\xB4\x5F\x9A\x3B\x3E\xCC\xF2\x4C\x77\x36\x44\xCA\x47\x17\xB2\x35\xC6\xB8\xF1" + + "\xF1\x7F\x99\x83\x3E\xF3\x87\x1F\x7E\x40\x2C\xD0\xA3\x47\x37\x78\x5E\x3A\xC9\xE2\x04\xC0\xC1\xE5\x0F\x2F\xDA\x7C\x18\x6F\x69\x3D" + + "\x2D\x73\xC3\xAD\x59\x75\xE2\x1D\x3C\x52\x58\x44\x82\x46\xA5\x22\x73\xC4\xE0\x87\x97\xCC\x7A\x8E\xCD\x81\x01\x30\x8C\xFE\xB8\x78" + + "\xD6\xA4\x05\xD3\x27\xCC\x78\xEE\xE9\x17\x9E\x19\xFE\xF4\xB0\x01\x8F\x3E\xDC\xED\x91\x9E\x1D\x87\x0C\x78\x68\xC2\xA8\xC7\xF1\x84" + + "\xF5\xCB\x66\xEE\xAF\x5B\x76\x7C\xE7\x5A\x30\x7C\xE5\xD4\x8E\xB7\x4F\x6C\x07\xCF\x97\x8E\x13\x7B\xB8\x47\x07\xD2\x0B\x2D\x48\x31" + + "\x94\x5A\x11\x98\xB0\x15\xF3\x36\x32\xB3\x47\x96\x50\x1D\xAE\xD9\xBD\xB0\xEE\xD0\xD4\xE5\x9B\xFD\xE5\xED\xC9\x26\x2C\xCC\x58\x3A" + + "\xDE\x52\xA7\x4E\x1D\xF6\xEC\xD9\x4D\xA7\x58\xD2\x50\x85\xDD\xF8\xE2\x1F\xFF\xF8\x47\x93\xB7\xA8\x01\x9F\x4D\x36\x76\x8D\x6F\x1D" + + "\x34\x36\x14\x0A\x24\x27\x27\xD2\xC8\xF9\x91\xA1\x4F\xF7\x1B\x3E\x0E\x11\x01\x52\xF7\x27\x9F\x1C\x89\xFF\x0B\x80\xB9\xF3\x9F\x7F" + + "\x79\x80\x1B\x1F\xDC\x8A\x1C\x14\x48\xA1\x4C\xD9\x00\x5D\xEE\x23\xB7\x90\x68\x36\x84\x06\xC0\x22\xB9\xB2\x95\x2B\x14\x26\x3B\x2F" + + "\x85\x2B\xDC\xA1\x4A\x77\xB8\xC2\x15\xAE\x70\x86\xCA\x69\xA5\x3B\x6B\x20\x62\xF1\x87\xCD\xDE\x20\x1D\x1F\xD6\x3A\xDC\xC5\x36\x57" + + "\xA1\xC5\x9E\x6F\xB6\xE6\x9A\x2C\x39\x06\x33\x44\x58\x5E\x54\x42\x14\x58\x5D\x94\x91\x57\xC0\x00\x9C\x7F\x8F\x03\x8C\x6F\x17\x69" + + "\xDB\xF4\xE9\xD3\x15\x4A\xB9\x50\xC8\xF3\x84\xA2\x9B\x99\xFA\x8C\xA4\xAA\xE3\xC9\xF7\xFA\x8F\x18\x0F\x8A\x08\xC3\xA9\x22\x95\x4A" + + "\xB9\x78\xF1\x42\xB8\xCB\x67\x9F\x7D\x06\x47\xC4\x05\x9B\xE9\x71\x49\xA6\xCA\xF3\xB7\xBF\xFD\xED\xFB\xEF\xBF\xE7\x0A\x32\xD7\x17" + + "\xF1\x38\xB3\xAC\xB7\x5E\x75\x91\x45\xBF\xFE\xFA\x6B\xC3\x87\x0F\xA3\xAE\x4F\xC6\xA2\xF9\xC9\x88\x5A\x7B\x0D\x1E\x51\x73\xE8\xAD" + + "\x4D\xA7\xDE\xE3\xD6\x8B\x6C\x50\xFC\x35\xD2\x9E\x74\x62\x21\x8A\x8E\x06\x5D\xCB\xE6\x4C\x46\x14\x8D\xE0\x99\x06\xD2\x48\x89\x97" + + "\xCC\x7E\x0E\xDC\x8E\x7B\xF2\xD1\xDE\xDD\xAA\xAD\x16\xBD\x4C\x9A\xC1\xE3\xA5\xF0\xF9\x3C\x66\xFA\x24\xB3\x21\x1A\x2F\x25\x39\x39" + + "\x39\x2F\x37\xBB\x43\x45\xE8\xD9\x51\x8F\xAD\x9C\xFF\xE2\x96\x55\x73\xB7\xAF\x79\x79\xCB\xAA\x79\x43\x06\xF4\xCC\x90\x20\x8B\x10" + + "\x21\x86\x1F\x32\xEE\x45\x9A\x00\xD3\xFF\x5E\x5F\x37\xEB\xD8\xE5\xA5\xDB\x8E\xD3\x3E\xAD\x97\x37\xEC\x9F\xB7\x7E\x5F\xB7\x7E\x8F" + + "\x93\x90\x9E\x9F\x22\x91\xA4\xE1\x2D\xC9\xE5\xB2\x91\x23\x47\xEC\xDD\xBB\x07\xB7\xE5\x8B\x2F\xBE\x00\xBA\xB8\x69\xEF\x31\x07\x6E" + + "\xD1\xDF\xFF\xFE\x77\xB4\x59\xDC\xC9\x1E\xCD\x3C\xF0\x27\x74\x74\x0D\xC7\x89\x13\xC7\x99\x3D\x53\x92\x99\x79\x2C\x82\xCE\x7D\x06" + + "\xE0\x5B\x7B\x7C\xCC\x64\x00\x9C\x98\xD8\xEE\xB1\xC7\x06\x33\x21\xF4\x2F\x94\x03\x37\xFF\xE0\x02\x4C\xB5\xF4\x66\x00\xDF\x4C\x81" + + "\x9B\x96\x6B\x28\xB0\x27\x1C\x26\x9B\xB2\x84\x2B\x3C\x91\x2A\x4F\xB8\x9E\x61\xA6\xD6\x2C\x31\xB2\x2D\x03\xC3\x30\x33\xCD\xC3\x57" + + "\xE2\xF0\x68\x6C\xCE\x82\x32\xBB\xBA\x94\x30\x9C\xAD\x37\xCA\xB5\x3A\x69\x61\x71\x46\x3E\x01\x18\xF4\xA6\xE5\xA8\xEF\x65\x80\xE9" + + "\x2C\x8E\x2B\x57\xAE\x4C\x9A\x34\x41\x2A\xCB\x10\x89\xF8\xB1\x8E\xDD\x37\xC5\x53\x4D\xB8\x69\xDD\xA9\xF7\x06\x8E\x9A\x40\x12\xAA" + + "\x54\x11\x2D\x01\x37\x60\x40\xFF\x1D\x3B\x5E\xFD\xE8\xA3\xBF\x7C\xF9\xE5\x97\x50\xE3\x77\xDE\x79\xE7\xDD\x77\xDF\xA1\xF2\xC2\xED" + + "\xA3\xA6\xB3\x1A\x80\xFA\xB7\xDF\x7E\x0B\x4D\x46\xFA\xF7\xDF\xFF\xFE\x17\xFE\x8A\x08\x99\x8B\x34\x5E\x61\xCB\x96\xCD\x83\x06\x0D" + + "\x04\xB4\x50\x8C\xCC\x4C\x99\x48\x48\x56\xF9\x22\x08\x7A\x6E\xFE\x6A\x88\x1E\xA9\xED\x7C\x63\xC5\x66\x2E\x42\x70\xD6\x71\xD3\x17" + + "\x0B\x78\xC9\x12\xA9\x44\x26\xCB\xE8\xDA\x3E\xFA\xD2\x84\x27\x17\xCE\x98\xB0\x74\xF6\x73\x00\x78\xC2\x53\x43\xFA\xF7\xEE\xE2\x71" + + "\x94\x49\xA5\xE9\x3C\x3E\x8F\x64\x04\xCC\xE4\x67\x49\x46\x1A\x62\x0D\xF8\x37\x62\x63\x32\x96\xCB\xCC\x94\x46\x1C\xDE\x2E\x21\x21" + + "\x85\x97\x9C\xA7\xCA\x36\x94\x68\x48\xB1\x1E\x3E\x0F\x54\xF0\x92\x13\xAC\x2E\xEF\xFA\x23\x6F\xB3\x9B\x39\xDC\x68\x57\x56\xEC\x24" + + "\xA5\x67\xEB\x53\xE2\xAD\xC7\x46\x4E\x9E\x6D\x71\x7A\xC0\x4F\xAA\x58\x20\xCB\x94\x26\x25\x27\xE6\xE7\xE7\x8E\x18\x31\x6C\xE3\xC6" + + "\x8D\x97\x2E\x5D\x44\x08\x8D\x7B\x82\xFB\x83\xFB\x46\xB7\x83\xFC\xEA\xAB\xAF\xFE\xFD\xEF\x7F\x73\x49\xBE\x75\xF0\xCC\x06\x2C\xF8" + + "\xC3\xC5\x8B\x17\xA9\xD5\xB9\x42\xA1\x80\x74\xF5\xA5\x89\xAA\xBB\xF5\xAE\x39\x78\x1E\x5F\xDF\xC8\xE7\x66\x22\x9E\x4F\x48\x6C\xD7" + + "\xBF\x7F\xBF\xCB\x97\xAF\xFC\xEA\x21\x74\xE3\xA3\xB1\x02\xDF\xAE\x35\x02\x5E\x29\x64\xCE\xAD\xFC\x91\xA8\x2F\x1A\xF3\x46\x2A\xBD" + + "\xD1\x2A\x0F\x2C\x52\x49\x45\x98\x02\xEC\x88\x90\x6D\x56\x4A\x03\x61\x93\x8F\x4C\xB7\xD4\xB9\x7C\xC5\x76\x77\xA1\xCD\xA9\xB6\x58" + + "\xF3\xCC\x65\x08\xA4\xB3\xB4\x06\xA9\x46\x9B\x91\x8F\x10\x9A\xC4\xCF\xE9\x39\xF9\x88\xF2\xBB\x75\xEB\x86\x37\x3D\x67\xCE\x1C\xA4" + + "\x46\x77\xB9\x2D\x43\xCB\x02\xCC\x28\x30\x99\x86\xF5\xD4\x53\xA3\x69\x61\xB7\xCE\xBD\x07\xD2\xFD\x0D\xEA\x37\xF8\x3A\x72\x69\xF3" + + "\x99\x0F\x86\x4F\x9C\xAE\xCC\x26\x01\x76\xA6\x5C\x86\x50\xAD\xA0\x40\xFD\xC4\x13\x8F\xAF\x5C\xF9\x0A\xFE\xFC\xAB\xAF\xE0\x93\x5F" + + "\x23\x72\xA6\xB5\x78\x40\x32\x83\x74\xFD\x01\x1F\xC5\x8F\x40\x1B\x61\xE4\xD7\x5F\x7F\xFD\xDD\x77\xFF\x03\x59\x06\xF9\x70\xA9\x35" + + "\x6B\xD6\x3C\xFD\xF4\x53\x3E\x9F\x17\x01\x33\xBC\x1C\xE8\xA6\xA5\x42\xBA\x12\x4D\x56\x3B\x42\xF7\x55\xFB\xDE\xD8\xFA\xDA\x5F\x6A" + + "\xE3\x1B\x85\x72\xF7\x4C\xE0\x6E\x3E\x86\xB7\xBA\xF6\xC0\xB9\x32\x97\x17\xAF\x21\x95\x49\xD0\xBE\x18\x74\x45\x15\x11\x5F\xFB\xF2" + + "\x40\xC8\xE7\x44\x62\x0C\x20\x05\xCC\xF2\x40\x08\x7B\x42\x42\x1B\x29\x59\x8E\xAF\x00\xAE\x0E\x87\xBD\x73\xE7\x8E\x95\x95\xE5\x2E" + + "\x97\xB3\xB0\x30\x1F\x7F\x08\xCD\x44\x13\x00\x89\x26\x8B\x10\x49\x26\x49\xD6\x32\x24\x27\xB5\x35\xDB\x9C\xD3\x5F\xD9\x52\x77\xE2" + + "\x9D\xC6\xFB\x2D\xB1\xEF\x6A\xCD\xBE\x37\x17\x6E\x3A\x0C\x80\xE7\xAC\xDD\xB5\x68\xCB\xD1\x19\xAB\xB6\xF7\x1C\x30\x54\x53\x52\x82" + + "\x8F\xC3\x4C\xBD\xCE\x48\x48\x68\xAB\x50\x64\x75\xE9\xD2\x79\xCA\x94\x17\xB7\x6F\xDF\x8E\x26\xEF\x9B\x6F\xBE\xC5\x7D\xA0\x73\x30" + + "\x29\xC9\x00\x1B\xB7\x08\xD1\x35\x78\xA6\xED\x1D\xEE\x15\xCE\x08\x4F\xF0\x08\x1A\x41\x5C\x40\x78\xD1\x02\x5E\xB9\x72\x79\xE9\xD2" + + "\xA5\xED\xDB\x57\x25\x25\x25\xA2\x55\x4A\x4F\x17\x4B\x32\xD2\xBB\xF6\x1D\xBC\x72\xCF\x59\xBC\x19\xDC\x93\x67\x66\x2E\x11\x0A\x92" + + "\x93\x92\x12\x7A\xF7\xEE\xF5\xD6\x5B\x17\xD8\x1A\x94\xBF\x0A\xC0\x8D\x07\x99\x40\x01\x58\xC0\x83\xE0\x82\xE6\xC0\xCD\x37\x56\x93" + + "\x85\xB2\x46\x48\x93\xB3\x02\x0A\x0C\xED\xAD\x74\x47\x2B\xDD\x91\x0A\x17\x39\x57\xBA\x22\x15\x8E\x68\x85\x23\x52\x4E\xF6\x4C\x0A" + + "\xC7\x6C\x61\xE8\x70\xC4\x02\x86\xBD\x01\x83\xDB\xAB\xB5\xBB\x8A\x6C\x2E\x8D\xDD\x95\x6F\xB1\xAB\x0C\x65\x8A\x12\x63\xA6\x46\x8F" + + "\x34\x38\x83\xF4\x60\x15\xA6\xA9\xF2\xFF\xF0\x87\x3F\x0C\x18\x30\x60\xF3\xE6\xCD\xB5\xB5\xB5\xEB\xD7\xAF\xAF\xA9\xAD\x65\xA6\x6A" + + "\x2C\xBB\xB3\x8D\x91\x5A\x16\x60\xBA\x92\xE1\xBD\xF7\xDE\xC5\xAB\xC1\xC5\x21\x7D\xBD\x07\x8F\x44\xC8\xCA\xED\x2E\x42\x3E\x0C\x25" + + "\x9C\xBC\x60\x8D\xCD\xE3\x87\x1C\xD1\x61\x46\xEA\x91\xE1\x70\x08\x41\xDA\x8C\x19\xD3\xEB\xEA\xEA\x4E\x9E\x3C\x09\x56\x01\xEA\x57" + + "\x0C\xD3\xF4\x80\x8F\x02\xEC\x0B\x17\xDE\x3A\x78\xF0\x60\x4D\x4D\xCD\xF4\xE9\xD3\x86\x0C\x79\xBC\x7D\xFB\x6A\x93\xC9\x00\x66\xDA" + + "\xB4\x7D\x00\xFF\x14\x32\x85\xBC\x11\x31\xB3\xD9\xE6\x18\xFC\xD4\xC4\x85\x9B\x0E\x6E\x7F\xE3\x13\xFC\x6B\x76\x93\xC1\x9B\xED\x54" + + "\x46\x24\x11\x0C\x9F\x78\x67\xE6\xAA\xAD\x45\x3A\x03\xDE\x9B\x8C\x30\x2C\x26\x51\x71\x4A\x32\x8F\xCF\x17\x8B\x45\xF5\xA3\x50\x69" + + "\x22\x87\xC3\xF6\xE8\xA3\x8F\x22\x53\x40\x6A\x8A\x07\x71\x73\x8E\x1D\x3B\xB6\x63\xC7\x8E\x43\x87\x0E\x9D\x3A\x75\x6A\xEC\xD8\x31" + + "\x12\x26\x5A\x46\x2B\x20\xCF\xCA\x44\xCA\x20\x97\x67\xEA\x4D\xA5\x5D\xFA\x3E\xFA\xD2\xD2\x0D\xEC\xC0\xD5\x8D\x1B\xAF\xB0\xDD\x69" + + "\x64\x44\xBA\xF6\xF0\xC5\x65\x3B\x4E\x22\x9C\x9E\xBD\x66\x27\xC2\xE9\x25\x5B\x8F\x4F\x98\xB3\xA2\xF3\xC3\x83\xD4\x05\x05\x7C\x5E" + + "\x12\x83\x71\x3A\xDA\x29\x1E\xD9\xA2\xA5\xA4\x63\xC7\xF6\x4F\x3E\xF9\x24\xF2\x91\xFD\xFB\xF7\xE1\xA6\xE1\x8E\x7D\xF3\xCD\x37\x9F" + + "\x7F\xFE\x39\xDA\x41\x60\x8C\x60\x1B\xF7\x8D\xB4\x8B\x5F\x7F\x8D\xF8\x05\x48\xFF\xF3\x9F\xFF\xC4\xAF\x8E\x1F\x3F\xB6\x64\xC9\xE2" + + "\xC7\x1F\x7F\xDC\xE3\x71\xE3\xBE\xD5\x07\x2C\x82\x94\x9C\xDC\xDC\x81\x4F\x3E\x4B\xE9\x25\x0D\xEE\xA9\xF7\x9F\x5F\xB8\x96\xCF\x4B" + + "\x44\x53\xDB\xB5\x6B\x97\x78\xFD\xB3\x5F\x2E\x07\x6E\x50\x6D\x87\x2D\x46\x89\x46\x87\x6E\x0C\x06\x0A\xC0\x02\x88\x00\x17\xA0\xE3" + + "\x36\xB5\x57\x19\xB7\xEC\xF8\x39\x9B\x73\x8D\x1C\x38\xDC\xDE\x15\xA9\x76\x46\x41\x6F\xB9\x8B\x9C\x89\x39\x71\x1D\x23\x67\x5B\x38" + + "\xEA\x88\xC4\xEC\xE1\xA8\x35\x14\xB6\xF8\x83\x26\x8F\x4F\xE7\x74\x6B\xED\x1E\xAD\xCB\x5F\x60\x75\xE5\x1A\xAD\x8A\x12\xB3\xBC\xC8" + + "\x28\x2D\x28\x91\x90\x34\x58\x93\xA6\x52\xE3\xBE\xA4\xA5\xA5\x15\xA2\x9D\xCF\xCF\x2F\x28\x28\xB0\x58\x2C\x3D\x7A\xF4\x18\x3B\x76" + + "\xEC\x92\x25\x4B\xD6\xAE\x5D\x4B\xA7\x70\x2C\x62\x82\x8A\x85\x4D\x1D\x8B\x16\x2D\x6E\x00\x76\x0B\x02\xCC\xCC\xA3\x3C\x0D\xD9\xEC" + + "\xD7\xEF\x11\xF8\x16\xE2\xE4\x41\xA3\x9F\xA5\x00\x73\xF3\xCC\x75\x47\x2E\x6E\x7D\xED\xC3\x65\xAF\x9E\x18\x34\x6A\x42\x7E\xA1\x86" + + "\x7A\x24\x94\x0A\x3E\x94\x98\xD4\x0E\xD7\x45\x45\x1A\xAB\xD5\xE2\xF7\x7B\x2B\x2A\x62\x9D\x3A\x75\xEC\xD6\xAD\x6B\xF7\xEE\xDD\x3A" + + "\x77\xEE\x54\x5D\x5D\x19\x89\x84\xDC\x6E\xA7\xD9\x6C\xC2\x0D\x00\x39\xF0\x2A\x28\x83\x90\x49\x74\x49\x28\xCB\x4F\x96\xCA\xA4\xC1" + + "\x8A\x0E\xA3\x5F\x9C\xBB\x68\xF3\x61\xB4\x14\x64\xA4\x97\xF4\x15\x35\x2D\xBC\x0D\xD4\x6F\x3D\xB3\x2F\xD9\xFA\xA3\x97\x5E\x5C\xB2" + + "\x3E\xDA\xA9\x1B\x5A\x16\x5E\x4A\x62\x2A\xE9\xFD\x12\x20\x88\x95\x4A\xD2\xE1\xE8\xC5\xC5\x9A\x89\x13\x27\x6C\xD8\xB0\xE1\xD0\xA1" + + "\xC3\xC8\x17\x00\x00\xDE\xF9\xC8\x91\x23\x0F\x1F\x3E\x0C\xE9\xA3\xBD\xB8\xDB\xB6\x6D\x95\xC9\xA4\x02\x7E\x0A\xF4\x76\xD2\xBC\x55" + + "\x23\x27\xCD\x1C\x33\x75\xC1\xE4\xF9\x6B\x16\xD6\x1D\x5C\xBD\xEF\xF5\xEB\x95\xA2\x9B\xD8\x00\xAD\xFE\x9D\x6C\x38\x4E\xCE\x6B\xF6" + + "\xBF\xB9\x78\xCB\x91\x39\x35\xBB\x67\xAF\xDD\xB9\x68\xD3\xE1\x05\x75\x07\x9F\x9D\xBD\xE2\xA1\x41\xC3\xB5\x7A\x83\x50\xC8\xC3\xED" + + "\xC5\x1D\x40\xEE\x9D\x98\x98\xC0\xEC\xF4\x99\x65\x34\xEA\x11\x83\x20\x16\x18\x3C\x78\xD0\x33\xCF\x8C\x47\x53\x88\x2F\x1A\xB1\x25" + + "\xA2\x1B\x26\xE7\x7A\xF9\xA5\x97\x5E\x7A\xEA\xA9\xA7\x1E\x7E\xB8\x4F\x2C\x16\x2D\x2B\x2B\xCD\xC9\x21\x5D\xE2\xF8\xA6\x48\x29\xDC" + + "\x54\x11\x22\x26\x5F\xB4\xF2\xD9\x59\xCB\xD6\xEC\x3F\x47\xC3\x25\x9C\x37\x9F\xFE\x60\xFA\xCA\xAD\xBC\x14\xF2\x2F\xD0\x56\xA2\x79" + + "\x6A\x72\x12\xE5\xDD\x03\xDC\xB8\x6F\xB9\xC1\x0C\xAD\x85\xCC\x06\x85\x2B\x56\xAC\x58\xBD\x7A\xF5\xE2\xC5\x8B\xE1\xF3\xF0\x7C\xF8" + + "\x3F\x28\x00\x0B\x20\x82\x2E\x54\x84\x6C\xDE\x96\x09\x65\xE4\x2C\x96\x2B\xE9\x99\x5A\xFC\x11\x65\x2B\x4F\xA4\x83\x2B\xDA\xDE\x19" + + "\xAD\x72\x12\x62\x2B\x9D\x31\x62\x50\x60\x7A\x66\xCD\x1E\x2E\x2F\x0B\x46\xCC\x3E\xB2\xF0\x50\xE7\xF2\x68\x9D\xBE\x02\xAB\x3B\xD7" + + "\x64\x53\xEA\x4A\xE5\x5A\x2A\xC2\xC5\x19\xEA\xA2\x34\x55\x01\x4F\x9A\x25\x20\x4B\xAE\xF0\x5F\x95\xE2\x2C\xA5\x48\x96\x29\xCA\x20" + + "\xA5\x36\xF0\xEE\x73\x72\x72\x7C\x3E\x1F\x5C\x6A\xE6\xCC\x99\xCD\xDC\x1C\x78\xE1\x5D\xEF\x0F\xDC\xE0\xFB\x63\x56\x32\xBC\xD7\xAB" + + "\x57\x0F\xA0\x05\xE5\x19\x3E\x71\x1A\x12\xCB\xC6\x7D\x45\xB4\x69\xC7\xAF\xE6\xD7\xED\x47\x88\xAB\x37\x5B\x98\x6D\xAF\x85\x74\xAC" + + "\x18\xDE\x09\x77\x01\x99\x48\x2C\x71\xC6\x4B\x51\x50\xD9\x1F\xE1\x73\x4C\xC5\x0F\x11\x9E\x9F\x4E\x7A\xAA\xF8\xB2\x4C\x99\xD3\x1F" + + "\x1A\xFC\xF4\xA4\x99\xAB\xB6\xAF\xDE\xFB\xFA\xD6\xB3\x7F\x66\x3A\xCF\xC8\xD6\x81\x0D\xE4\xEE\x16\xC6\xE6\xA5\x6B\x0F\x9E\x9F\x5B" + + "\xB3\xEB\x99\x59\xCB\xFA\x0F\x1B\x5B\xD5\xB5\x77\x45\x97\x87\xAA\xBA\x3F\x4C\x78\xE6\x25\x23\x5A\xDE\xB2\x65\xCB\x91\x23\x47\x76" + + "\xEE\xDC\xB9\x7B\xF7\xEE\x49\x93\x26\x32\x33\x2E\xFA\x22\xE0\xA7\x1D\xB9\x60\x18\xB7\x9D\x56\xE1\x40\xEA\x54\x73\xE0\xAD\x45\x9B" + + "\x0E\x2D\xDE\x7A\x74\xD9\xAB\xC7\xF1\xC6\x58\x7A\x9B\x7C\x3F\x0D\x6F\x14\x79\x4B\x97\x56\xED\x79\x0D\xE4\xCF\x5E\xBB\x8B\x64\xC5" + + "\x5B\x8E\xCE\xDF\x78\x60\xCA\x92\x0D\xC3\x9E\x9D\x16\xAC\xEA\xA8\xCC\xA1\x25\x07\xC4\x74\xE2\x07\x49\x1F\x92\x12\x60\x02\xA6\x8A" + + "\x88\x5C\x2E\x53\x2A\x15\x2A\x55\x76\x6E\x6E\x0E\xCE\x88\xF6\xF1\x08\xA9\x5C\xCF\x23\xF1\x30\xCE\xF8\x13\x32\xCC\x4B\x62\x0A\xB1" + + "\xC3\x1F\x1A\x36\x61\xDA\xBC\x75\x7B\x98\x3B\xF6\x76\x7D\x61\x30\xB2\x3A\xFA\xCF\x78\x90\xCF\x70\x5E\x5E\x1E\x3D\x7A\xF4\xE8\x1B" + + "\xF1\xE9\x3A\x77\x00\x70\x49\x33\xF6\x07\xE6\xAA\x0B\x1D\xE6\xA5\x5B\x04\x83\xF6\x51\xA3\x46\x55\x56\x56\x6A\x34\x1A\x78\xBB\x50" + + "\x24\x6A\x97\x94\xDC\x2E\x45\x90\x22\xCE\x48\x49\x93\xB0\xC6\x11\xD5\x66\x59\x3D\x4A\xF2\x6C\x7A\xA6\xC6\x3E\x42\x00\x76\x47\xC1" + + "\x70\xB5\x33\x56\xE5\x8A\x56\xB9\x62\xC4\x9C\xD1\xFA\xB3\x83\x20\x8D\x33\xAC\xC2\x1A\x8E\x31\x81\x74\x50\xEF\x0E\x40\x81\x0B\x6D" + + "\x9E\xBC\x52\x47\xB6\xC1\xA2\xD0\x12\x11\xCE\x2C\xD4\x4A\xD4\xC5\x69\xB9\x85\xA9\x39\x6A\x64\xC2\xD2\x3C\x8D\x2C\xBF\x28\x4B\xA3" + + "\xCD\xD1\xE9\x0B\x8D\xA5\x25\xA5\x36\x63\x99\x43\x6B\x2C\xCD\xCE\xCB\x97\x66\xCA\x53\x52\x52\x52\xD3\xD2\x6C\x36\x5B\xEF\xDE\xBD" + + "\x27\x4F\x9E\x4C\x6F\x0A\xEE\xC5\x32\xE6\x58\x72\xE3\x81\x5F\xAD\x5A\xB5\xEA\x89\x27\x9E\xB8\xFB\xD5\x48\x0C\xC0\x67\x2E\x5F\xBE" + + "\x02\x11\x80\x8B\x90\x39\xBD\xD3\x16\xB2\x0A\xDC\xC0\x47\xA9\x04\x31\xFB\x8F\xBC\x03\x1F\x9D\xBA\xBC\xAE\xCF\x90\xD1\x36\x4F\x20" + + "\x5B\x95\x23\x91\xA6\x4B\xE2\x9B\x1E\x64\xC4\xCB\xD9\x30\x9D\x43\xA4\x7F\x88\xFC\x4A\x92\x06\x42\x72\xD5\x79\x36\x97\xAF\xEB\x23" + + "\x8F\x8D\x9B\xB6\x08\xA1\x32\xF4\x0A\x2F\x08\xD5\xA5\xFD\xCC\x8D\xBB\x9A\x6F\x6D\x6C\x4F\x1B\x3D\xE3\x2D\x41\xFD\xE6\x6F\xD8\x3F" + + "\x67\xED\xCE\x97\xD7\xEF\x7D\x69\xD9\x46\x66\x63\xEE\x14\x9B\xCD\x8A\xB0\x6D\xDF\xBE\x7D\x48\x3E\x91\x6A\xEE\xDD\xBB\x27\x21\xA1" + + "\x5D\x9F\x3E\xBD\xE9\x6C\x4D\xDA\x9D\x8B\x94\x8C\xAC\xD1\x17\xF2\x43\x95\x1D\x97\x6C\x3D\x0A\xE5\x44\x8B\xC0\xEE\x33\x7C\xEB\xD6" + + "\xA4\xC1\xE8\x34\xBD\xC6\xDF\x32\x18\x1F\x9A\x53\xBB\x1B\x71\x35\x5E\x10\x36\xA7\x66\xD7\x4B\x4B\xEB\x86\x3E\x3B\x15\xED\x8B\xD6" + + "\x60\x42\xEE\x40\xC3\x90\x0C\x52\xFA\x87\xC8\x29\xDD\x23\x42\x20\x48\xA1\x86\x6B\x3C\x02\x68\xD3\xE3\x2B\x99\x91\x23\x14\xEB\x8D" + + "\x1D\x7B\xF5\x1B\x3F\x63\x09\x44\x1E\x61\x33\xF3\xD9\x6F\xE8\x57\x43\x53\x88\x7B\x8B\xD0\x1A\x9F\x3D\x14\x0A\x22\x79\x79\xF3\xCD" + + "\x37\xD9\xBD\x54\xEE\x40\x81\xE9\x6A\x24\xF8\x1B\xBC\x8E\x8A\x2A\xF7\x58\xCA\x1C\x54\x75\xF0\xDB\x29\x53\xA6\x20\x55\x09\x86\x42" + + "\x32\x59\x66\xBB\x76\xED\x52\xF8\x82\xB6\x49\x29\x89\xA4\xA2\x5D\x26\x2B\x63\xB4\x0C\x00\x2D\x0F\x70\xBB\xF4\x72\xA4\x58\x19\x3F" + + "\x2B\x39\xD7\xC8\x81\xA3\x1D\xDD\xB1\x0E\xCE\x58\xB5\xA3\xBC\xD2\x01\x56\xCB\x19\x83\xFC\x92\x73\x95\x0D\xF2\x1B\xAB\xC4\xD9\x46" + + "\x76\x0F\x8E\x95\x06\x23\x46\x5F\x50\xEF\x09\x69\x5D\x01\x8D\xDD\xAB\xB6\x38\x73\x4D\xD6\x6C\x43\x59\x96\xD6\xC4\x88\xB0\x96\x11" + + "\xE1\x7C\x04\xD2\x19\x79\x85\x52\xB5\x46\x5E\x50\xAC\x2A\x31\x6A\x4C\x65\x06\xAB\xC3\xE2\xF2\xB9\x82\x51\x7F\xB4\x2A\x5C\xD5\xB1" + + "\xA2\x43\x97\x40\xA4\x42\x6F\xB2\xE4\xA8\xF2\x92\x92\x93\x05\x42\x21\xEE\x5D\x55\x55\xD5\xE8\xD1\xA3\x67\xCC\x98\x31\x9B\x39\xE6" + + "\xC4\x0F\xC8\x35\x6E\xD6\xA0\x41\x83\xEE\x5E\x81\xD1\x30\xE3\xAB\xBD\x78\xF1\x62\x65\x65\x05\xD4\x12\x8E\xF2\xDC\xFC\xD5\x5C\x05" + + "\x6E\x32\xE5\xC3\x05\x90\xC3\xD3\x28\xD5\x90\xA9\x59\x6B\x77\x8C\x9B\xB1\xE4\xB1\xA7\x27\xF7\x7A\x74\x44\xE7\x3E\x03\xE1\x61\x1D" + + "\x1E\xEA\xD7\xA9\x57\xFF\x6E\xFD\x87\xF4\x1F\x3E\x76\xF8\xA4\xE9\x93\x5E\x5E\x35\x7F\xC3\xBE\x35\xFB\xDE\x20\x23\x31\xC7\x48\x47" + + "\x0B\x42\x65\xFA\x0A\x5C\xBF\x6F\xA6\xF0\x36\x7E\x6F\xD4\x6A\x0E\x5D\x78\x65\xF7\x19\x84\xE2\xF0\xE0\xE9\xAF\x6C\x61\xFA\x96\x79" + + "\x16\x8B\x79\xCD\x9A\xD5\xFB\x91\x6E\xEE\xDB\x07\xB1\x45\xC2\xFF\xE0\x83\xAD\xBB\x75\xEB\x72\x8D\x99\x34\x42\x4B\x4C\x3F\xFB\xEC" + + "\x33\x74\x2D\x34\xD4\x7B\xD5\xEE\xD7\x90\x32\x70\x5F\xF6\xD6\xA9\x78\xD3\x52\x1C\x1F\x2B\x26\x41\xF5\xD6\xA3\x2F\xAF\xDF\x37\x8F" + + "\x59\x02\xB1\x60\xE3\x81\xF9\xCC\x80\x13\xC4\x79\xCA\x92\x8D\xC3\x27\xCD\x44\x80\x1D\x6D\xDF\xC5\xEA\xF2\x16\xEB\xF4\xB9\xF9\x6A" + + "\xA2\xBC\x39\xD9\x4A\x55\x0E\xCE\xB8\xCE\xCD\xCF\x2F\x31\x9A\x9C\xFE\x70\xFB\x9E\x7D\x1F\x1D\x3D\xE9\xB9\x79\xAB\xD1\x0A\x20\xC7" + + "\x5E\xBE\xFD\x04\xAD\x46\xD2\xF8\x4D\x6E\x3D\xF3\x67\xB4\x41\xF8\x2A\xF9\x02\x9E\xD7\xEB\xDE\xB3\x67\x0F\x2D\x85\x75\x97\x0A\x0C" + + "\x7F\x83\xD7\xC1\xF7\x58\x3F\xA4\x6E\x09\xFF\xC4\xDF\x76\xEF\xDE\xDD\x64\x36\x8B\xC4\xA9\xF7\xDF\xDF\xBA\x6D\x62\x12\xA0\x4D\x49" + + "\xCD\xA0\xB8\xFE\xC2\xD6\xCA\x1D\xE9\xE0\x8C\xB6\xBF\x0E\x2D\x63\x76\xE6\x1A\x67\xB2\xEB\x77\x94\x5A\xB9\x25\x1C\x33\x07\xC3\x46" + + "\x5F\x48\xEF\x09\x96\xB8\x83\x45\x0E\xA4\xC1\x44\x84\x55\x26\xAB\x42\x57\x9A\x09\x11\xD6\xE8\x64\xF9\xC5\xC8\x84\x33\xD4\x85\x12" + + "\xB5\x46\xAA\x2E\x02\xC0\x39\x5A\x63\xA1\xA9\x4C\x67\xB1\x97\x3A\xBC\x4E\x7F\xC4\x17\xA9\x08\x55\x74\xA8\xE8\xD0\xB5\x43\xD7\x87" + + "\xBA\xF5\xEC\xDB\xAB\xCF\x80\x87\xFB\x0D\xEE\xDA\xBD\xB7\xD7\x17\x2A\xD4\x14\x0B\x91\x2C\x0A\x84\x6A\x75\x3E\x82\x90\x82\x82\xC2" + + "\x82\x42\x62\x48\xA5\x8B\x8A\x8B\x25\x52\x69\x8B\xD4\xC4\xA2\x5F\x6D\x34\x1A\x86\x02\xA7\xA7\x89\xA6\xAD\xD8\xBC\xE9\x44\x43\x80" + + "\x1B\xFB\xE8\x75\xA7\x39\xF1\x4E\xDD\x89\x77\x36\x9D\x7C\x17\x48\x23\xC6\x06\x96\x9B\x99\x0D\x78\xE3\xF6\x3E\x79\x90\xA1\x1D\xD0" + + "\xE2\x99\x78\x7E\x63\xF0\xEE\x0C\xDD\xC6\x50\xB1\x2F\xB8\x7A\xEF\x1B\x33\x56\x6E\x55\x28\xB2\x20\xAA\x7A\x7D\x09\x24\x02\xF4\x42" + + "\x88\x00\xED\x37\xDF\x7C\xD3\xAE\x5D\x9B\x48\x24\x4C\xA7\x31\xD1\x61\xAD\x7E\xFD\x1F\x11\x30\x2B\x78\x1E\x1A\x34\x8C\x66\x92\xF1" + + "\x70\xE0\xF6\xDE\x5B\x83\xCF\xC2\x0E\x35\xAD\x3B\x7C\xE1\x95\x5D\x67\x17\x6F\x3E\x4C\x87\x8B\x49\x65\x8F\x75\x7B\xC1\xF3\xFC\x0D" + + "\x07\x16\xD4\xC1\x0E\xD1\x84\xF9\xE5\x0D\xFB\x66\xAF\xD9\x31\x6D\xC5\x96\xA9\xCB\x37\xE3\x8B\x98\xB5\xFA\xD5\x79\x0C\xF3\x0B\x36" + + "\x1E\x64\x9E\x79\x10\x4F\x5B\xBA\xFD\x44\xCD\x81\x73\x37\xFE\xA3\x1B\xF4\x7F\xCB\xE9\x3F\x2F\xDB\x7E\x02\x29\x3D\x14\xD8\xE9\xB4" + + "\xEF\xD8\xB1\x83\x2E\x27\xBC\x33\x80\x49\x45\x0E\x26\x53\x15\xA7\xA6\x2A\xB3\x73\xB2\x14\x0A\x05\xA2\x7C\xA4\xEF\x0A\xB2\x6C\x5D" + + "\x96\x29\xBF\xBF\xF5\x03\x7F\xBC\xEF\xFE\x07\x13\x92\x12\xF8\x22\x7E\x86\xEC\xE7\x47\xF4\x86\x4C\xB8\x71\x6E\xDC\xCA\x19\x6E\xEF" + + "\x88\xB6\xB7\x45\xAB\xEA\x2D\x46\xCC\x1A\xA5\xE7\x4A\x4B\xB8\x82\x61\xB8\x0A\x67\x5C\x9B\x83\x51\xA3\x3F\x6A\xF0\x85\x75\x9E\x60" + + "\xB1\x93\x44\xD1\xEA\x32\x57\xAE\xD9\x4E\x45\x58\xAE\x21\x0C\x4B\x98\x79\x1D\xD2\x7C\x9C\xC9\x0A\x87\xEC\x12\x23\x29\xA3\x63\xB6" + + "\x9A\xED\x2E\xBB\x2F\xE8\x09\xC5\x02\xB1\xAA\x58\x75\xA7\xAA\xCE\xDD\x3B\x77\xEF\xD5\xB3\xD7\x23\xBD\xFB\x0E\xEC\x37\xF0\xB1\x81" + + "\x8F\x3E\xF1\xE8\xE0\xA1\x8F\x3D\x3E\xBC\x6F\xBF\x41\x55\xED\x3B\x95\x57\xB5\x2F\xAF\xEE\x18\xAB\x6A\x0F\x8B\x54\x54\x57\x75\xEA" + + "\xA2\x54\xE5\x52\x80\xEF\xB2\x13\x0B\xBF\x3D\x79\xF2\x64\x20\xE0\x43\xA6\x9A\x96\x2E\x9A\xBB\x7E\x0F\xB3\xF9\xF5\x4F\x45\x8C\x4D" + + "\x8C\x88\xDE\xB6\x35\x3F\x5A\x6E\xA6\x02\x53\xD1\x63\x36\x16\x7D\x0F\x22\x5C\x54\xA2\x17\x89\x04\xC8\x27\x67\xCE\x9C\x71\xE0\xC0" + + "\xC1\xCB\x97\x2F\x83\xD5\xFF\xFC\xE7\x3F\x50\x5A\x97\xCB\xF9\xFD\xF7\xDF\x23\x8A\xA6\x2B\x16\xFD\x7E\x2F\x64\x23\x53\x9E\x39\x62" + + "\xE2\x0C\xEE\x7A\x89\x3B\x6E\x53\x1A\xA8\xE2\x06\x66\xDE\x18\x0C\x31\xC2\xCA\x3D\xAF\x01\xC2\x45\x9B\x8F\xCC\xAF\x3B\x48\xD4\x78" + + "\xDD\x3E\x3A\x9D\x6B\x0E\xB1\x5D\xB8\xA0\x43\xCA\xF3\x6A\xEB\x21\x5F\xB0\x61\xFF\x82\x4D\x87\x96\x6C\x3B\x8E\x80\x19\x0D\x01\x79" + + "\xCD\x63\x0D\xDA\x88\x1B\xDA\xD6\xCD\x67\x3E\x58\xBE\xE3\x24\x33\xEC\xC7\x2B\x2B\x2B\x65\xAB\x61\xDD\xB1\x02\xA7\x32\x00\xB7\x6E" + + "\xD3\x36\x25\x35\x3D\x49\x94\x96\xCC\x35\x71\xBA\x40\x22\x6F\x8A\xB1\x9F\x0C\x80\x1B\xDB\xAD\xFF\xF0\x86\x04\x18\x67\x1A\x90\x73" + + "\x8D\x3E\xD2\xCA\x16\xAE\xB6\x46\xAA\xAD\xD1\x6A\x42\x69\xA3\x73\x59\x84\xC2\x4C\x1F\xA9\xB2\x84\x2A\x4C\x81\x98\xC1\x17\x29\xF1" + + "\x84\x8A\x5D\x81\x42\xBB\x37\xDF\xEA\x66\x32\x61\x2B\xC9\x84\x8B\x8D\x30\x04\xD2\x52\x32\x3B\xBA\x18\x29\x31\x2E\x94\x5A\x83\xDA" + + "\x60\xD6\x9A\x2C\x26\x9B\xD3\xE6\xF1\xBB\x83\x11\x7F\xB4\x22\x52\xD5\xA1\xAA\x53\xD7\x4E\xDD\x20\xC2\x7D\x1E\xEA\xD3\xAF\xCF\x23" + + "\x03\xFB\xF6\x7F\xF4\x91\xFE\x83\x07\x3E\x3A\x64\xF0\x90\xE1\xB0\x41\x43\x86\x0D\x7A\x82\x39\x0F\x19\x36\x70\xC8\xD0\x01\x8F\x0F" + + "\x35\x59\xCA\x68\x4D\xAC\xBB\x09\xA1\x69\xC3\x7C\xE8\xD0\x21\xB7\xDB\x95\x92\x92\x84\xB8\x6B\xC9\xD6\x23\x8D\x43\xE8\xDF\x8A\xB1" + + "\xD4\x41\xEA\xD7\x1C\x38\xE7\x8D\x56\xA6\x33\x3D\x40\x4F\x3D\x35\xFA\xE8\xD1\x63\x6F\xBF\x7D\x89\x4E\xD8\xCC\xC9\xC9\xB6\x5A\xCB" + + "\xE8\xA6\x13\xC8\x81\xFF\xFA\xD7\xBF\xEA\xF5\xBA\xC4\xC4\xB6\xCA\x6C\x25\xE4\x8E\xCE\xD0\x6C\xD9\xF7\xB3\xF1\xF8\x65\xEE\x7B\xA3" + + "\xA3\xCA\x35\x87\xDE\x5A\xB3\xEF\xCD\x57\x76\x9F\x5D\xB1\xF3\xF4\xF2\x57\x4F\x2E\xDD\x76\x7C\xC9\xD6\x63\xB0\xA5\xDB\x8E\x81\x70" + + "\x3C\xF2\xCA\xAE\x33\x2B\xF7\xBC\xCE\xEC\xD5\xC4\xFC\x55\x83\xD8\xA7\xA9\xE6\x8F\x51\x60\x00\x7C\x2A\xBF\x80\xD4\x09\x36\x1A\x0D" + + "\x1B\x37\x6E\x44\x8A\x74\xC7\x0A\x5C\x12\x2F\x6A\x87\x74\x96\xCD\x5D\xB9\x46\xF3\x58\x8A\x90\x48\xD6\x44\x52\x7A\x5B\x7C\x36\x4F" + + "\x81\x95\x0D\x14\xF8\x06\x80\x41\x2F\x28\x85\x59\x18\x2B\x8B\x56\xC7\x8D\x5C\x03\x63\xF2\xAB\x30\xB1\xD2\x70\xA5\x39\x58\x61\x24" + + "\x00\x47\x75\xBE\x68\x89\x27\x5C\xE4\x0C\x14\xD8\xBC\x79\x16\xA7\xCA\x64\x57\xEA\x2C\x59\x5A\x73\x56\x89\x59\xA6\xD1\xCB\x0A\x75" + + "\xD2\x82\x12\x90\x2C\xD7\xE8\x14\x5A\x63\x9E\xCE\x58\x64\x2A\x35\x58\x6D\x56\xB7\xD7\x15\x08\x79\x23\xB1\x70\x65\x75\xAC\xBA\x63" + + "\x55\xC7\x2E\x9D\xBA\xF6\xE8\xDE\xEB\xE1\xDE\x8F\x0C\x78\x64\xC0\xA3\xFD\x07\x3E\xD6\xBB\x4F\xBF\x58\x65\x7B\x8F\x2F\xE8\xF6\x05" + + "\x88\xF9\x83\x30\x97\x2F\xE0\x0D\x84\x32\xE5\x59\x14\xE0\xBB\x53\xE0\xB3\xCC\xE6\x0C\x7B\x1C\x0E\x1B\x8F\xA9\xED\x8E\x1C\xF2\xD6" + + "\x0A\x7C\xEF\x1B\x8D\x7E\xEB\x4E\xBC\x8B\x9C\x5C\x40\x3A\x63\x53\xC2\xE1\xD0\x8E\x1D\xAF\xBE\xFD\xF6\x65\xD0\x0B\x05\x2E\x28\xC8" + + "\x47\x62\xFC\xD9\x67\x9F\xD1\x3A\x9B\x6B\xD7\xAE\xC9\xCC\x94\x21\x84\x86\x62\x6F\x3D\xFB\x21\xDB\x0D\xDE\xB2\x2D\xCB\xC6\x1B\x83" + + "\x05\x6E\x02\xC2\x24\x17\xF1\xFC\x82\x3E\x52\x6F\xEF\x6E\x3C\xCE\x64\x1C\x0D\xFE\xF0\xD8\x4D\x23\x17\xA2\xC0\xA7\xDE\x47\x8B\x50" + + "\xA4\xD3\x43\x81\x75\x3A\xED\xBA\x75\xB5\x97\x2E\x5D\x3A\x73\xA6\xE9\x05\x49\xCD\x02\x98\x29\x6A\x77\xFF\x03\x6D\x12\x05\x22\xC4" + + "\xC9\x38\x73\x4C\x9C\x22\xCE\x10\x91\x52\x1B\xAA\xEB\x9D\x52\xB2\xAC\x46\x30\x5F\xC7\xEF\x66\xA1\x6F\xB3\x09\xBF\x4E\x2C\x6B\xDC" + + "\x36\xA2\x95\x35\xDA\x1E\xA0\x02\x4E\x4A\x69\x19\x07\x63\x2B\x73\xC6\x83\xE0\xD6\x1C\x62\x2C\x58\x61\xF0\xC7\x88\xF9\x62\x25\x6E" + + "\x00\x1C\x2C\xB4\xFB\xE2\x51\x34\x32\x61\x8B\x42\x67\x96\x6B\x8D\xD2\x42\x03\x00\x96\x17\x6A\x15\xC5\x7A\xA5\xD6\x98\x5B\x62\xD4" + + "\x18\xCC\x3A\x4B\x99\xC5\xE9\xB2\x7B\xFD\xEE\x50\x38\x58\x5E\x01\x86\x2B\x3B\x76\xEE\xDC\xB5\x67\x45\x75\x47\xB7\xD7\x5F\xAC\xD5" + + "\x21\xE5\x90\x48\xA4\x1A\x4D\x91\xDD\xE1\x70\x21\xE6\x8B\x1F\x0E\x87\xC3\xEB\xF3\xE1\x5E\xFF\xFE\xF7\xBF\x4F\x4D\x4D\xBD\x9B\x1C" + + "\xF8\xEC\xD9\xD7\xCE\x9F\x3F\xBF\x7D\xFB\x76\x38\x34\x94\x4A\x96\x29\x5D\x7B\xE0\x5C\xDD\xC9\x26\x66\x1D\xFD\x56\x6C\x43\xBC\x6B" + + "\x7A\xCB\xD9\x0F\xE7\xD6\xEE\x96\x48\x32\x64\x32\x49\x7A\x7A\x6A\xEF\xDE\xBD\x8E\x1D\x3B\x46\x27\x21\x66\x65\x65\xE2\x2E\xD2\x6B" + + "\x38\xB7\xD7\x4B\x66\x83\xE1\x39\x5D\xFA\x0C\xA2\x00\xFF\xAC\x6F\xAF\x31\xC9\xCD\xCD\x38\x9A\xD1\xAC\xE0\x09\x9B\x4E\xBF\xF7\xCA" + + "\xCE\xD3\x06\xB3\x45\x28\x4C\x29\x2A\xD2\xAC\x5D\xBB\x96\xBB\xA3\xF7\xED\x02\x8C\x33\x7C\x0C\x9E\xA6\x29\x2A\x72\xB9\xDC\x36\x9B" + + "\xCD\xCE\x1C\xF4\xC2\x6A\xB5\x66\xE7\xA8\xEE\x7F\xB0\x4D\xEB\x36\xED\xDA\x24\x26\x27\x09\x53\xF9\x92\x4C\x3A\xAE\x03\x9E\x45\x74" + + "\x98\xA7\x7E\x80\x47\x81\xF3\x2D\x42\x5F\x36\x3C\xBE\xAD\x10\x9A\xAB\xF0\xA9\x59\xCC\x30\x52\x59\xA4\xDA\x02\x0B\x57\x97\x46\xA0" + + "\xB1\x55\x16\x10\x1B\x6D\x5F\x1A\x21\x67\x4B\xB4\x03\xCE\xE6\x48\x95\x29\x54\x69\x06\xC6\x61\x72\x61\x00\xC3\x81\x98\xCE\x17\xD3" + + "\xBA\xC3\x1A\x28\xB0\xDD\x97\x6F\xF5\xE4\x96\x3A\x73\x4C\x56\xA5\xDE\x02\x05\x96\x93\x1E\x69\x83\xB4\x50\x07\x1D\x46\x44\xAD\xD0" + + "\x9A\x00\x70\x81\xDE\xA8\x35\x5B\x4C\x76\x87\xD5\xE3\x75\x06\x82\x56\x97\x07\xCD\xBF\x4C\x9E\x25\x10\x8A\x84\x42\x11\xEE\x5C\x30" + + "\x18\xEC\xD3\xA7\xCF\xA8\x51\xA3\x26\x4F\x9E\xCC\xED\x82\x6E\xE9\x5E\xE8\xB3\x78\xCE\xA6\x4D\x9B\x8C\x46\x3D\x9C\x18\x31\x24\x02" + + "\xB6\x4D\x27\x7E\xDB\x0A\xBC\x31\x3E\xE2\xB5\xE1\xD8\xDB\x5D\xFB\x0E\x4E\x4A\x68\x9B\xC1\x6C\xE7\x8D\x84\x70\xCC\x98\xA7\x90\x0F" + + "\x8B\xC5\xC2\xC2\xC2\xFC\x91\x23\x47\x3E\xF4\x50\x0F\x04\x99\x74\x5B\x06\xA9\x54\x42\xE3\x67\x32\xB3\xEA\x17\xFC\xF8\xB7\x40\x7A" + + "\xE3\xED\xF7\x11\x50\x05\x46\xEC\x5D\x6A\x73\x0A\x85\xBC\xFC\x7C\xF5\xCA\x95\x2B\x99\xA2\x1C\x77\x1E\x42\xDF\xAC\x17\x9A\x76\x44" + + "\xBF\xF0\xC2\x0B\xF0\xD2\x01\x03\x06\x54\x55\x55\x19\x4D\xA6\x64\x1E\xFF\x4F\xAD\x1F\x40\xC2\x4C\xEA\x54\xA6\x49\x1A\x8D\xD3\xB6" + + "\x8C\x02\x37\x8A\xCF\x39\x9D\x58\x44\x60\x23\x80\xB3\x1A\x67\x70\x6B\x8E\x54\x97\x02\x60\x70\x4B\x48\x06\xC0\x1D\xF0\xB8\x31\x5C" + + "\x69\x02\xBD\x61\x72\x01\x80\x75\xFE\x58\x89\x37\x56\xEC\x0E\x17\xBA\xFC\x00\xB8\xC0\xEA\x55\x5B\x58\x11\x2E\x95\x33\xC3\xC2\x08" + + "\xA4\x81\x31\x2E\x90\x1B\xAB\x4A\x8C\xF9\x25\xFA\x1C\x75\x81\x34\x4B\xC1\x17\x8A\x1E\x6C\xD3\x16\xD0\x9A\x4C\xA6\x2E\x5D\xBA\xE0" + + "\x5E\x4C\x9A\x34\x69\xFA\xF4\xE9\x0B\x16\x2C\xC0\xAD\xA7\x85\x3B\x96\x2E\x5D\xFA\x33\x8D\x03\x9F\x3D\x4B\x2A\x42\xAF\x5F\x5F\x8B" + + "\x58\x0B\x31\x64\x6E\xBE\xBA\xF6\xF0\xC5\xBA\xDF\x78\x08\x1D\x17\x61\x32\xF3\x64\xC9\xB6\xA3\x16\x87\x8B\x97\x92\x48\x27\x75\xD0" + + "\xCA\xF5\x74\x8C\x5A\x20\xE0\x27\x24\xB4\xA5\x65\xC0\x78\xFC\xA4\x81\x4F\x3E\x8B\xE7\x33\xF0\xFF\xB6\x3F\xFB\xA6\x93\xEF\xAD\xDC" + + "\x7D\xD6\xE6\xF6\x0B\x84\x29\xB9\xB9\x2A\xF8\xCF\xE5\xCB\x97\x5B\x64\x1C\x18\x0E\x49\x57\xE4\xB3\x07\xBC\x71\xD9\xB2\x65\x78\x7C" + + "\x25\x33\x44\x3C\x6B\xD6\xAC\xE7\x9F\x7F\xFE\xE9\xA7\x9F\xEE\xDD\xBB\x37\xC4\x19\xED\xE2\x1F\xFE\x74\xDF\xFD\x0F\x3C\xD8\x26\x29" + + "\x25\x49\x94\x2A\x94\x65\xB5\x04\xC0\x37\x4C\xE4\xE0\xBE\x48\x7D\x0E\x6C\x46\x66\x5B\xCF\x27\xC4\x16\xD6\x81\x9C\xA3\x1D\x4A\x19" + + "\xC3\x85\x29\x5C\x6D\x24\xBF\xAD\x26\x17\xA1\x2A\x43\xB0\x4A\x17\xA8\xD0\x7A\x62\x45\xAE\x70\xA1\x33\x58\x60\x27\x0C\xAB\x89\x08" + + "\xBB\x72\x4C\x76\x44\xD1\xC2\xAC\x1C\x21\x82\x07\x39\x99\x6C\x8D\x7F\x90\xFC\xFF\xDA\x3B\x0F\xF7\xA8\xAA\xAD\x0F\xA3\xA0\x88\x40" + + "\xFA\xCC\xA4\x4D\xCA\xF4\xDE\x7B\xC9\xD4\x4C\x9F\x64\x52\x26\x8D\x08\xA1\x49\x87\xD0\xBB\x8A\x72\x15\x3B\x0A\xDC\x6B\xE7\x0A\x28" + + "\x01\x41\xC5\xDE\xAE\x82\x74\x10\x50\x21\x84\x00\x7A\xAD\xF7\xFB\x37\xBE\xB5\xF7\x9E\x39\x39\x99\x24\x18\x48\x03\xE4\x3C\x8B\xFD" + + "\xEC\x99\x9C\x0C\x99\x73\xD6\x7B\x7E\x6B\xB7\xB5\xF3\x0A\xD3\x33\xB3\xEE\x1B\x37\xAE\xA4\xA4\x04\x22\xE1\x39\x73\xE6\xC0\x77\x86" + + "\x07\xDB\x96\x2D\x5B\xE0\x8A\xFC\x1B\x1F\x70\x51\xA0\x4E\x4D\x25\x1D\xBA\x99\x58\x27\x4E\xA0\x41\x60\x78\x4C\xA8\xD5\x4A\x94\x4D" + + "\x56\xA3\x45\x0B\xD6\x7B\x9B\xB8\x7F\xCB\x19\x09\xA4\xC1\x9B\x5F\x79\xEF\x1B\x7F\xAC\xA6\xA0\x20\x17\x4F\x1A\x63\x81\x2E\x91\x55" + + "\xBB\xF9\x68\x56\x13\x9A\x79\x52\x52\x52\x3C\x73\xF1\xDA\xBD\xB4\xC5\x46\x23\xFE\xC7\x0F\xE4\x5B\xEF\x3B\x76\x69\xC7\x67\xA7\x5C" + + "\xFE\x08\x7C\x53\x81\x80\x0F\x8C\x0D\x04\xE0\xFE\xCC\xC4\x22\x5E\xFA\x32\x4E\x38\x43\xD2\xCD\x42\x05\xCE\x04\x9E\x41\x9F\xC1\xC3" + + "\xA1\x91\x52\x54\x5C\x7C\xEF\xD8\xB1\x69\xE9\x19\x69\x59\x39\xD0\x78\xCE\x64\xE5\x65\x24\xED\x06\x14\x98\x3E\xF5\x2A\x89\x34\x00" + + "\xCC\x41\x0A\x6C\x0A\xC7\x0C\xE1\x18\xE6\xB3\x16\x33\x1C\x47\x16\xC6\x25\x92\x5F\x00\xB8\xD6\x10\x02\xED\x45\x27\x40\x09\x00\xEB" + + "\x83\xD5\xA0\xC0\x1A\x6F\x54\xE9\x0A\xC9\x1D\x41\x19\x06\x58\x62\x75\x8B\x4C\x4E\x9E\xDE\x7A\xD7\x5D\x77\x71\x38\x5C\xB3\xC5\x62" + + "\x30\x1A\x4D\x66\x73\x2C\x16\x83\xE0\x0D\x70\x25\x13\xD0\x00\xD4\xD7\x5E\x7F\x9D\x3E\x97\x25\x65\x86\xDA\x4B\x3D\x96\x37\x0C\xE2" + + "\x5C\x68\xB2\x18\x18\x9E\x17\x10\x6B\xE1\x65\xEB\x56\x00\x78\xDF\xAD\x1F\x42\x77\x1B\xCB\x39\xD2\xD1\x76\xE8\xFC\xA3\x5B\xDF\x8C" + + "\x4F\x79\xD0\xEE\xF5\x69\x0C\x46\x95\x4E\x6F\xB4\x96\x79\x02\xD1\xAA\xA6\x96\xB9\x2B\x37\x6C\xDB\xF3\x39\xEE\x2E\xBA\xD8\xD7\x7C" + + "\xC9\x5B\xC8\x88\x02\xEF\xFC\xE2\x3B\x5F\x24\x96\xCB\xCA\xE1\x70\x4A\x80\xAF\x8B\x17\x2F\xF6\xB5\x20\x69\xE0\x8B\x19\x7A\x9D\x0E" + + "\x4D\x9F\x53\x49\x39\x36\xF8\x3C\x78\x7E\x55\x55\x15\x04\x9B\x06\x83\xC1\x6C\x36\x73\x38\x1C\xA0\x63\x90\x15\xD8\x80\x01\x36\x02" + + "\xA5\x91\x1A\x63\xA4\xD6\x00\x94\x82\xEA\x46\xE3\x50\x27\xA5\x21\x5C\xA3\x07\xE1\x85\xF8\x19\xD7\xA1\xA2\x0B\x56\xE9\xFC\x48\x84" + + "\x95\x20\xC2\x4E\x10\xE1\x80\x14\x45\xD1\x1E\x04\xB0\xC1\x3E\x7A\xF4\x68\x88\x28\x40\xE5\xE0\xCB\xC0\xF3\xE9\x2F\x27\x3C\xBF\xFC" + + "\x57\xCB\x92\x06\x11\x60\xB8\xAF\x17\x2E\xB4\xC3\x7F\x08\xB1\x16\x93\x95\x63\x75\x79\x50\x08\x7D\xF8\x36\x51\x60\x54\xA1\x06\x6F" + + "\x48\x16\xF8\xAF\x7F\x00\xE7\x7E\xF3\xB3\x53\xA0\x51\x3B\x3F\xFF\x6E\xF7\x7F\xBE\x7F\xE7\x70\x07\x69\x32\x5C\x63\x6C\xE6\x16\x32" + + "\xD2\xFD\xBE\xEB\xCB\x33\xC1\x58\x1C\x14\xB8\xA4\xA4\xE8\x9F\xFF\xDC\xD6\xD1\xD1\x31\x90\x10\xBA\x9F\xAB\x91\x52\xBC\xB7\xAF\x69" + + "\xD2\xE0\xFF\xA4\x55\x08\x44\x00\x17\x40\x47\xCF\xA0\xFA\x9A\xE3\xC3\x7D\x4E\xE4\x48\xF4\x42\x1B\x42\x95\xFA\x50\x25\xA2\x34\x5C" + + "\x6D\x00\x44\x23\x49\x80\xB1\x19\xA2\x71\x78\x5F\x17\xAA\xD5\x03\xE1\xF0\x32\x02\x2F\x6B\x75\xA0\xC0\xC1\x6A\x4D\x79\xA5\xCA\x13" + + "\x55\xB8\xC2\x20\xC2\x00\xB0\xD8\xEA\x16\x98\x1C\x7C\xBD\x9D\xE4\xC4\x82\xBF\x18\x82\x8A\xBE\x97\x1C\x5D\xC7\xC2\xE0\xC1\x55\xE0" + + "\xF6\xF6\x8B\xDB\xB6\x6D\x11\x0A\xF9\x2C\x26\xC3\xE5\x0F\xED\xFE\xE6\x87\x7D\x47\x6E\x6D\x27\xA6\x7B\x73\xCA\x6C\x8A\x94\xEF\xB5" + + "\xB7\xD7\x19\x17\x23\xFD\x67\x0F\xF0\x2B\xEF\x3F\xDA\xF1\xD6\x57\x67\x23\xB5\x4D\x68\x3B\xF2\x22\xF6\xD6\xAD\x5B\x2E\x5D\xBA\x34" + + "\x74\x0A\x7C\x0D\x9E\x7B\xC2\x4C\x85\xDC\xC0\x02\x10\x41\x72\x62\x81\x72\x5E\xEF\x44\x0E\x26\x5E\x20\x94\xFC\xC5\xEE\xBD\xD0\xE6" + + "\x48\x95\x31\x5A\x05\xDC\x22\x80\x91\xC0\xD6\xEA\x23\x00\x33\xBC\x8C\xEB\x22\xB5\xDA\x68\xAD\x36\x5C\xAB\x89\xC4\xB5\xE1\xB8\x36" + + "\x12\xD7\x44\xE3\xE8\x65\x38\xAE\x09\xD7\xAA\xFC\xD5\x4A\x6F\x85\xCC\x1D\x91\xBA\x42\x62\xBB\x5F\x60\xF5\x0A\x4C\x2E\xBE\xC1\x79" + + "\x33\x67\xE4\x20\xE9\x38\x36\x6F\x7E\x9E\xCB\xE3\x40\xC4\x55\x1E\xAD\x6A\x3B\xF8\x63\xAF\x8B\xD7\x6F\x5D\xFB\xEB\xE1\x99\xDB\x02" + + "\x5D\xEA\xCB\x82\x02\xBF\xF5\x9F\x73\x95\x0D\x93\xF1\x5E\x8D\xF9\x2F\xBC\xB0\xB9\xA3\x03\x00\xEE\x3D\x2D\xD6\xCD\x90\x91\xA3\x2F" + + "\x05\xEE\x23\xB4\xBE\xB6\x4A\xF3\x46\x59\xA2\xD5\xE6\x68\x2D\x0E\xA1\x6B\x89\x0E\xEB\xC2\xD5\xFA\x70\x0D\xD0\xAB\xC1\xE8\x82\xA9" + + "\xA2\x71\x55\x24\xAE\x8C\xD6\x29\x51\x09\xF5\x3A\x78\x53\x19\xAC\x91\x97\xC7\xA4\x9E\x0A\xA9\x3B\x2C\xB0\xFB\xF9\x56\x2F\xCF\xE4" + + "\xE6\x19\x6F\x6A\x80\x41\x81\x21\xBE\x7A\xFA\xE9\xA7\x4A\x4A\x8A\x59\xB9\x8C\x70\x75\xFD\x9E\xDB\xA5\x13\xEB\xEF\x69\xE8\xC6\x1D" + + "\xED\x78\xFB\x3F\xE7\xAA\x27\x4D\x65\x31\x73\xF2\xF2\x73\x9F\x7F\xFE\xB9\x4B\x97\x3A\x4E\x9C\x18\x6E\x05\xBE\xF6\xD1\x3D\xA5\x4E" + + "\x17\xAE\x37\x3A\x3E\xDC\xC5\xF0\x28\x6B\x45\x1C\x00\x36\x87\xE3\x38\x42\xAE\x25\xDA\x8B\xE2\xE4\x28\x42\x17\xC4\x56\x8D\xA1\xC5" + + "\x56\x0F\xE8\x22\x8C\xA3\xF5\xEA\x70\x9D\x22\x58\x2B\xF3\x61\x80\x5D\x61\x91\x23\x20\xB0\x96\xF3\xCC\x6E\x9E\xE9\x16\x00\x78\xD3" + + "\xA6\x27\x8A\x8A\x0A\xE1\x81\x5D\xD1\xF0\x40\xDB\xA1\xF3\xB7\x99\x02\xFF\xAD\x8C\x28\xF0\xDB\x5F\x7F\x5F\x3B\x79\x3A\x5A\x9C\x98" + + "\xCB\x7C\xE6\x99\xA7\x89\x02\xDF\xB4\x00\x5F\xBF\x02\xF7\xD4\xE1\x2E\x98\x47\xD9\x2A\xEB\x81\x61\x13\x6E\xF7\x92\x56\xAE\x21\x52" + + "\x07\xF4\x6A\xB1\x69\xB0\x29\xA3\xB5\x04\x60\x54\x62\x29\x56\x85\xEB\x15\x81\x1A\xA9\xAF\x52\xE2\xAD\x10\xBB\x23\x62\x47\x50\x60" + + "\x2B\xE7\x59\x00\x60\x57\xAF\x79\xA1\xA9\x16\x6F\xFF\x9B\xBE\x83\x0E\x30\xC9\xA7\x03\x0D\xA4\x8D\x1B\x37\xA2\xF5\xE5\x2C\x46\x4D" + + "\xF3\xB4\x3D\x07\xBB\x52\xB7\xDE\xB1\x5B\xCE\xF6\x26\xD3\x65\xD7\xB5\xCC\xCA\xCB\xCD\x61\x32\x73\x20\xBC\xBA\x74\xA9\xB3\xAF\xCD" + + "\x19\x86\x2D\x27\xD6\xCB\xDD\xDB\xC3\xF4\xBC\xD0\x7D\x75\x5F\x5D\x6F\xEF\x34\x05\x70\x9D\x35\x56\x67\xAE\xA8\x33\x45\xC1\xEA\x0D" + + "\xD1\x3A\x7D\x34\x9E\x90\xDF\x24\xC3\x2A\xA4\xBD\x24\x84\x06\xAB\x47\x65\xB8\x4E\x8E\x15\x58\x8C\x00\x8E\x8A\x41\x81\xED\x3E\x9E" + + "\xD5\xC3\x33\xBB\x88\x02\x6F\xDF\xBE\xFD\x25\xBC\x46\xFF\x1A\xC3\x45\xFD\x84\x79\x50\x15\x18\xE5\xD3\x81\x33\xF3\xF2\x72\x51\x2A" + + "\xE3\xA9\xB3\xD1\x70\xE8\x1D\x05\xBE\x65\x0D\x2B\x30\x4A\x27\xD6\x30\x7D\x0E\x28\x30\x83\x91\xFD\xE4\x93\x9B\x3A\x3B\x2F\x0D\x33" + + "\xC0\xD7\xE8\x91\x26\x08\x40\x1D\x88\xA0\x87\xD0\x83\x06\xB0\x3D\x56\x6F\xAD\xAC\x33\xC7\xEA\xCD\x95\xF5\xE6\x8A\x06\x63\x92\x61" + + "\x6D\xA4\x4E\x1B\xAD\xD3\x60\x53\x47\x92\xDA\x1B\x8E\xCB\x41\x7B\x23\xF5\x8A\x70\x5C\x1A\xA8\x96\x94\x57\x49\xBC\x95\x00\xB0\xC8" + + "\x11\x82\x66\x30\x0F\x9A\xC1\x16\x0F\xC9\x4A\x09\x7F\xF4\x96\x2D\x5B\x48\x47\x34\x1A\xFB\x7D\xED\xB5\xD7\x93\xC3\xBF\x2F\x25\x13" + + "\x08\xF5\xB3\x53\x7A\x10\x15\xF8\xF8\xF1\x13\x9D\x9D\x97\xD7\xAF\x5F\xCF\x42\x99\x1F\x18\x4D\x33\xE7\xDF\xD8\x0C\xBE\x3B\x76\x93" + + "\x58\x62\xDC\xFB\xE0\x8F\x70\x2B\xF3\x98\x39\xD9\x39\x59\x4F\x3C\xF1\x38\xEE\x85\x1E\xF2\x10\xBA\x27\xB1\xC4\xAB\xA9\xD1\x23\xE2" + + "\xED\xA4\x0B\x9A\x4C\x5B\x22\x59\x29\x07\x5B\x81\x11\xC0\xF5\x96\x58\xA3\x39\xD6\x68\x8A\x35\x18\x2B\x00\x60\xC4\xB0\x0E\x01\x1C" + + "\xD7\x56\xD4\xAB\xA1\xC5\x4B\x9A\xBE\xC0\x6D\xA4\x4E\x0E\xDA\x1B\xAE\x97\x87\xEA\x65\x81\x5A\xB1\xAF\x4A\xEC\x8D\x89\x3D\x11\xA1" + + "\x23\xCC\xB7\xFB\x04\x36\x2F\x30\x3C\x7A\xCC\x3D\xE9\x19\x99\xAC\xBC\x7C\x66\x6E\x5E\x6E\x7E\x81\x46\xAB\xAB\xAF\xAF\x5F\xBD\x7A" + + "\xF5\x53\x4F\x3D\xB5\x79\xF3\x66\xB8\x22\xD0\x18\xD8\xB1\x63\x07\x94\x64\x9A\x24\x7D\x4B\xD1\x5E\x95\x79\xB0\x00\x26\x19\xED\x2E" + + "\x5F\xBE\xBC\x7A\xF5\x2A\x78\x54\xE7\xE7\x32\xA7\xCC\x59\x82\xFC\xE0\x76\xE9\x92\xFD\x1B\x1A\x59\xAE\xD8\x76\xF0\xFC\x03\xB3\x16" + + "\xE5\xB2\xB2\xB3\xB3\x33\x1F\x7F\x1C\x6D\x8F\x34\x44\x9D\x58\x29\x5E\x4A\x4D\x1C\x24\xD9\xA0\xE0\xFC\x37\x70\x66\x2C\xF0\x73\x92" + + "\x9D\x0F\x3C\x1F\x3E\x96\x95\x9B\xCB\x60\x32\x99\x2C\xD6\xC4\xB4\xF4\xBB\xEF\xFE\x4B\x05\xBE\x3E\x1B\x85\xE9\x6D\xB0\x56\x4D\x42" + + "\x0C\x57\x35\x1A\x63\x08\x60\x1D\x12\xDE\x38\x96\xDF\x06\x0D\xC4\xCF\x51\xD2\x77\xD5\xA0\x40\xF4\xC6\x11\xC3\xA1\x7A\x29\x02\x38" + + "\x26\xF2\x56\x8A\xDC\x15\x42\x57\x98\x57\x16\xE0\x41\x33\xD8\xEA\x65\x2B\x8D\x85\x0A\x5D\xA1\x4C\x53\x28\x55\x17\x4A\x54\x2C\xAE" + + "\x30\x9D\x95\x3B\x6E\xE2\x44\x30\xA1\x58\x12\x0A\x85\xE6\xCC\x99\xB3\x76\xED\x5A\xB2\x68\x01\x9E\x52\xBB\x76\xED\x22\xA9\x2A\x5F" + + "\xC2\xB3\x26\xA9\xBD\x0B\xA9\x63\xEB\xD6\xAD\x40\xFB\xC0\xA7\x52\x02\xC0\xC7\x8F\x1F\xBB\x7C\xF9\xCA\xCA\x95\x2B\xE0\x4E\x83\x02" + + "\x4F\x5B\xB0\xFC\x9D\xE4\xE2\xD5\x11\xF7\xC5\x3B\x76\x03\x86\x6F\x5C\xC7\x9E\x43\xE7\xA7\xCC\x5D\xC2\x62\x65\x67\x65\x65\x6C\xDC" + + "\xF8\x18\x9E\xC8\x71\x83\x0A\x4C\x9F\x4A\x09\x5E\x07\xBE\x97\xE2\x8D\x24\xD5\x33\xD9\xE9\x1B\x25\xA0\xDC\xB5\x0B\xA0\x05\x81\x7D" + + "\xF2\xC9\x27\x21\xB2\x9B\x3D\x7B\x36\x78\xB8\x50\x24\x1E\x3B\x6E\xDC\x3D\xF7\xDD\x37\x3E\x3D\x23\x83\x99\x9B\x53\xC0\xCE\x29\x28" + + "\xA2\xAC\x2F\x14\xAF\x6B\x7C\xB8\x4B\x81\xAD\xB1\x06\x00\xD8\x4C\x14\xB8\xB2\xD1\x58\xD1\xA0\xAF\x00\x80\xEB\x75\x15\x0D\x3A\x2C" + + "\xBF\x2A\xD4\x77\x85\xC3\xE6\x48\x83\x3C\x52\x0F\x26\x8B\xD4\x4B\x42\x10\x42\xC7\xC5\xFE\x1A\x60\x58\xE0\xAD\x10\xB8\xC3\x02\x47" + + "\x90\x5F\xE6\xE7\xDB\xBC\x68\x3C\x09\xF5\x66\x39\x79\x46\x3B\xC7\x60\xE7\xE9\x6D\x3C\x9D\x85\xAF\x37\x73\x34\x7A\xB6\x48\x92\x53" + + "\x58\x98\x96\x95\x3D\x21\x2D\xBD\xA8\xB8\xC4\x66\xB3\xD5\xD4\xD4\xCC\x9F\x3F\x1F\x9E\x55\xF0\xFD\x81\xE1\xDD\xBB\x77\x83\x38\xBF" + + "\xDE\xFD\x80\xC7\x1B\x40\xBE\x78\xC9\x92\x01\x2E\x66\x80\xF7\x8F\x1D\x3B\x7E\xE5\xCA\xD5\x65\xCB\x96\x66\x66\xA6\xE7\xE7\x31\x67" + + "\x2C\x5E\xBD\xB7\xCB\x0F\x46\xDE\x1D\xEF\xD8\xF5\x1A\x1A\xD0\x46\xF3\x70\x2E\xB4\xCC\x5F\x9A\xCB\xCC\xC9\xCA\xCE\xDC\xB0\x61\xC3" + + "\xC5\x8B\x1D\x03\x99\xC8\x41\x16\x33\x2C\x5E\xBC\x78\xE7\xCE\x9D\x20\xB6\xAF\x75\x3F\xDE\x7C\xF3\xCD\xB7\x77\xEF\x06\x74\x9F\x7D" + + "\xF6\x59\xF8\x10\xE0\xBC\xA9\xA9\xC9\xED\x76\xF3\x04\x82\x7B\xC7\xDD\x7F\xDF\xF8\x09\x13\x32\x32\x33\x73\xF3\x99\x68\x99\x61\x5F" + + "\xA3\xB8\x83\xAB\xC0\xB1\x46\xA4\xBD\x95\x09\x7A\x0D\x40\x6F\xC2\x1A\x93\xDA\x5B\x0F\xC1\x33\x0A\x9B\xB1\x49\x91\xD5\x89\x83\x71" + + "\x09\x18\x12\xE1\x6A\xA1\xB7\x52\xE0\x8E\xF0\x9D\x21\x3E\x30\x8C\x02\xE9\x72\xBE\xD5\x93\x60\x18\x00\x36\xD8\xB9\x3A\x33\x57\x6F" + + "\xE2\xEB\x8D\x02\xBD\x41\xA8\x37\x4A\x0D\x66\xB9\xC1\xCC\x95\xC8\xD9\x1C\x2E\xC4\xD8\x59\x39\x8C\xDC\xBC\x7C\x85\x42\xE1\xF7\xFB" + + "\x9B\x9B\x9B\x21\x74\x79\xEC\xB1\xC7\x36\x6D\xDA\xF4\x44\xF2\x00\xAD\x7E\xEE\xB9\xE7\xA6\x4E\x9D\x7A\xDF\x7D\xF7\x0D\x44\x81\x49" + + "\x4E\xD9\xAB\x57\xAF\x2C\x5E\xDC\x9A\x9E\x91\x96\x9F\xC7\x9A\xB5\x6C\x3D\xC9\x59\x75\x07\xE0\x5B\xD4\x92\x0A\x7C\x61\xDA\xC2\x95" + + "\x28\x84\xCE\x02\x80\x1F\xE9\xE8\xB8\xF1\xB9\xD0\x44\x81\xC1\xD3\xC0\xDF\xC0\xEB\xC0\xF7\x9E\xA0\x1D\xE0\x99\xAD\xAD\xAD\xE0\xA5" + + "\x91\x48\x44\xA7\xD7\xE7\x15\x16\x8E\x9B\x30\x71\x7C\x7A\x66\x5A\x36\x23\x33\xB7\x00\x70\xCA\xE7\x0A\xA8\xBC\xCD\xB9\x25\xDC\xDC" + + "\x12\xEE\xF5\x02\xD9\x73\x7C\xF8\xDA\x36\xCA\x5A\xD5\x04\x00\x9B\x2A\x1A\x8C\x95\x0D\x86\xCA\x7A\x43\x65\x83\x3E\xDA\x00\x4D\x5F" + + "\x6D\x14\xB7\x7E\xA3\x8D\xAA\xCA\x46\x65\xB4\x11\x09\x2F\x46\x57\x1A\x8A\x4B\x00\xE0\x10\x62\x58\x1C\xA8\x15\x62\x80\xF9\x5D\x00" + + "\xFB\x05\xF6\x72\xDC\x9B\xE5\xE6\x02\xC0\x26\x27\xD7\xE0\xE0\x19\x6C\x7C\x83\x99\x6F\x30\x09\x74\x46\x81\xD6\x28\xD2\x19\xA5\x3A" + + "\xA3\x4C\x6F\x56\x1A\x2D\x1A\x93\x55\x6B\xB6\x49\x55\x5A\xAE\x48\x82\x78\xC6\x2B\xDF\xC4\x52\x29\x49\x67\x27\x87\x7F\x4A\x25\x14" + + "\x6A\xB5\xA6\xA4\xA4\xE4\xAE\xBB\xEE\x1A\xC8\x82\x7E\xAC\xC0\xC7\x40\x81\x17\x2E\x5C\x90\x9E\x3E\x11\x14\x78\xCE\xCA\x0D\xFB\xBA" + + "\xFC\x60\xE4\xDD\xF1\x8E\x5D\xAF\x51\xF9\x3A\xA6\x2F\x5A\xC5\x62\x66\x65\x65\x67\x3C\xF2\xC8\x43\x17\x2F\xB6\xDF\x30\xC0\x64\x41" + + "\x3F\x78\x5A\x51\x51\x91\x54\x26\x17\x49\x24\xE0\x8D\x50\xA2\x8A\x44\xCA\x17\x08\x33\x73\x18\x09\x62\x59\x79\x8C\xC2\x62\x20\xB6" + + "\x80\x27\x24\x39\xD6\x31\x78\x37\x02\xED\x80\x14\xD8\x56\x35\x09\x18\xC6\x3D\x58\x8D\x06\xB0\xCA\x46\x1D\x58\x45\x83\x06\x9B\xBA" + + "\xB2\x51\x55\x81\x00\x56\x84\x1B\x40\x7B\x25\xE1\xB8\x38\x58\x8B\xD0\xC5\x00\x8B\x82\x35\x22\x7F\xB5\xB0\x3C\xC6\xF7\x54\x00\xC3" + + "\x3C\x47\x90\x07\x51\xB4\xDD\xD7\x3D\x90\x06\x8C\xED\x7C\x93\x05\xED\x48\x6A\x30\x0B\xF5\x66\xB1\xDE\x2C\xD1\x99\x65\xC8\x4C\x0A" + + "\xBD\x51\x85\x33\x66\x69\xCC\x36\x9D\xCD\xAE\xB3\x97\xC9\xF5\x46\x89\x5A\x23\x51\xAA\xA5\x2A\x8D\x4C\xA5\x91\x6B\xB4\x72\xB5\x56" + + "\xA5\x37\xB0\xF2\xF2\x49\x52\x3B\x08\x73\x06\xA2\xC0\x57\xAE\x5C\x59\xB0\x60\x7E\x5A\xDA\x04\x50\xE0\xF9\x6B\x37\x92\x1C\x2E\x77" + + "\x00\xBE\x45\x6D\x6F\x32\x49\xE5\xCC\x25\x6B\x72\x19\x59\x99\x59\x19\xEB\xD7\xAF\x6B\x6F\x1F\x90\x02\x93\x94\x3A\xE3\x26\xA6\xE5" + + "\x14\x16\x65\xE7\xB3\x71\x0B\x16\x19\xAE\x17\x41\x6C\x0C\xC4\x92\x7C\x3A\x5D\x4B\xF6\x4B\xB8\x37\x86\xDF\xC0\x0D\x14\x78\x92\x35" + + "\xD6\x64\xAE\x9A\x64\xAE\x6E\x36\xC6\x26\x19\x62\x4D\xFA\x58\xA3\x3E\xD6\xA4\xAD\x9C\xA4\xAD\x6C\xD2\x54\x36\x82\x08\x63\x05\xC6" + + "\x00\x07\x09\xB7\xF1\x44\x09\x0A\x1C\xA8\x16\xF8\xAA\x70\x33\x38\x0A\x22\xCC\x73\xF8\x89\x08\x63\x86\xDD\xC0\x30\xDF\xEC\x12\x98" + + "\x1C\x02\x93\x5D\x68\xB2\x0A\x8D\x66\x91\xC1\x22\x36\x58\xA4\x7A\xB3\x5C\x8F\x02\x69\xA5\xC1\xA2\x84\xD2\x88\x4C\x65\xB2\x68\xAC" + + "\x56\xAD\xCD\xAE\xB5\xD8\x74\x56\x9B\xDE\x66\xD7\xDB\xCA\x8C\x76\x87\xB1\xCC\x69\x76\xBA\x8A\x71\x4E\xAC\x02\x04\xF0\x8D\x87\xD0" + + "\x78\x63\xA4\xCE\xB9\x73\xE7\x4C\xC4\x0A\xBC\x68\xFD\x13\x64\x61\xDD\x2D\x0D\xF0\xDE\x6F\x13\xE5\x75\x7D\x0B\xEA\x7C\xF2\xEB\xB7" + + "\xA8\x51\x5F\x19\x5A\x43\x2C\x06\xDA\x2B\x63\xDD\xBA\xB5\x17\x2E\xDC\xB8\x02\x6B\x93\x49\xED\x26\x66\xE5\x50\xF1\x70\x32\x2A\x26" + + "\x15\x01\x0E\x8F\xA9\x24\x58\xBC\xA4\xF6\x8E\x14\xC0\xD5\x4D\x16\x88\xA2\xAB\x9A\x4D\xD5\xCD\xE6\x2A\xCC\x70\x15\x48\xF1\x24\x5D" + + "\xAC\x59\x17\x9B\xA4\x8A\x36\x28\x2B\x1A\xE5\xD1\x46\x59\xA4\x5E\x1A\xAA\x27\xDC\x82\x09\x43\x75\xC2\x10\xAE\x04\x6A\x04\xBE\x6A" + + "\x81\x37\x26\x00\x11\x76\x85\x51\x14\x4D\x31\x6C\x45\x0C\x23\xB3\x38\x45\xE6\x32\xB1\xD9\x26\x32\x59\xC5\x46\x8B\xC4\x60\x95\x1A" + + "\x2C\x40\xAF\x02\xE8\x35\x5A\x21\x90\x56\x9A\xCC\x4A\x93\x45\x65\xB2\x42\xC9\x93\xC9\x8B\xB8\xBC\x62\x6C\x25\x3C\x3E\x36\x1E\x57" + + "\x28\x4A\xCF\xCC\x1A\x60\x5E\xE8\xE4\xBE\x2A\x97\xE6\xCC\x99\x95\x96\x3E\x21\x2F\x97\xB1\xF8\x91\xA7\xDF\x39\x7A\x2B\x2B\x30\x62" + + "\xAF\xF7\x8C\xD6\xD7\xB2\x11\xFF\xB3\x07\xCF\xC8\x8D\xDB\x77\xA4\x63\xF6\xF2\x87\x98\x78\x43\x96\xB5\x6B\x57\xB7\xB7\x5F\xE8\x6B" + + "\x87\xD1\x7E\xE5\x85\xC6\x0A\x3C\x76\xDC\xF8\x0C\x06\x0B\x42\xE5\xB4\x1C\x66\xC2\xB2\x51\x99\x95\x5B\x80\x53\x6D\xA4\x4E\x75\x1C" + + "\x31\x80\xC9\x08\xB0\x39\xD6\x6C\xAC\x42\xF2\x6B\xA8\x6C\xD2\x55\x4C\xD2\x61\xED\xD5\x40\xF0\x1C\x69\x54\x44\x1B\xE4\xD1\x06\x04" + + "\x30\x28\x30\x69\xFA\x86\xEA\x04\xE1\xB8\x10\xD1\x5B\x2B\xF2\xD7\x08\xFD\xD5\x82\x72\xD4\x17\x0D\x51\xB4\x00\x03\x2C\x28\xF3\x0B" + + "\x51\x6F\x56\xA2\x43\x4B\x68\x75\x8B\xAD\x0E\xB1\xC5\x2E\x46\x3B\x83\xDB\xA4\x46\xAB\xCC\x64\x93\x1B\xAC\x4A\x83\x55\x61\x30\x4B" + + "\x34\xFA\x52\x81\x90\x55\xC0\xCE\xCC\xCE\xBE\x7F\xFC\x78\x0E\x97\xEB\x72\xBB\x83\xC1\xA0\xDF\xEF\x0F\xE0\xC3\xE7\xF3\x85\xC3\x61" + + "\x9D\x4E\x37\x66\xCC\x18\x68\x9F\x0C\x50\x81\x3B\x3A\x3A\x66\xCF\x9E\x45\xDA\xC0\x4B\x1F\x7D\x6E\xDF\x2D\xD8\x89\xD5\xD7\x22\xC1" + + "\x3D\xD8\x68\xAB\x8E\x52\xBE\x54\xD7\x8F\xBA\x9F\x99\xFA\x51\xA4\x32\xE2\x5F\xB3\x9F\x97\x82\xCC\xE5\x98\xBB\x6A\x03\x33\x27\x33" + + "\x23\x33\x7D\xF5\xEA\x95\x24\x27\xD6\x0D\x2B\x30\xF8\x18\x78\x1A\xF8\x5B\x28\x1C\x2E\x2F\x2F\xF7\xE3\xC3\x87\xBD\xD1\xE3\xF1\x70" + + "\xB9\xDC\xF1\xE3\xC7\xA7\xA5\x67\xA4\x67\xA3\x54\x1B\x0C\x76\x09\xD5\xED\xD4\xCF\x6E\x67\x2A\xB3\x64\x4A\xA6\xD8\x5C\x5A\xDF\x55" + + "\xCF\xF3\xFB\xEC\xC4\x32\x93\xA6\x2F\x8E\x9C\x75\x15\x8D\xBA\x68\xA3\x36\xDA\xA8\x41\xD6\xA0\x82\xC8\x39\x5C\x9F\xEC\xBE\x42\x26" + + "\x0E\xD7\x81\x89\x80\x5E\x90\xDF\x10\x66\x38\x58\x0B\x0A\xCC\x2F\xAF\xE2\xA3\xAE\xAC\x0A\x1E\xE9\xCA\x72\x04\x05\x76\x60\x18\x74" + + "\x18\xCD\xEE\x10\xD8\xDC\x12\xBB\x53\x66\x77\x89\xCD\x0E\x91\xDE\x22\xD4\x18\x78\x72\x55\x21\x7C\xDB\x42\x36\x2B\x37\x2F\x3B\x3B" + + "\x5B\x2A\x95\x56\x57\x57\x2F\x59\xB2\x64\xF3\xE6\xCD\x64\xFE\xCA\x50\xE4\xC4\x82\xF7\xE1\xBE\xB6\xB7\xB7\x3F\xF8\xE0\xCC\xF4\xB4" + + "\x89\xA0\xC0\x2B\xFE\xB1\x79\xFF\xAD\x13\x42\xA7\xAC\x01\x4C\x70\x88\x12\xBB\x63\x15\xC2\xF6\xDE\xD1\x4B\x1F\x9E\xEC\xFC\xEC\xBB" + + "\xAB\x5F\x9E\xFD\xE9\x3F\xE7\x7E\xFE\xFA\xFB\xFF\x7E\xF3\xC3\x2F\x07\xBF\xFF\xE5\x9B\x1F\xFE\xFB\xF5\xF7\x3F\x7F\x75\xF6\x27\xF8" + + "\xD1\xC7\x27\x2F\x1F\x38\x76\x69\x3F\x4E\xBC\xBC\x0F\xE7\xC4\x42\x96\x32\x9B\xE5\x56\xB8\x20\xD4\x8D\xDB\x7F\xF4\xD2\x82\xB5\xFF" + + "\x60\xE4\x64\x64\x66\x66\xAC\x58\xB1\xFC\xFC\xF9\xF3\x24\x83\xFF\x0D\x00\x7C\xED\xBD\x91\x88\x67\x6E\xDB\xB6\x6D\xED\xDA\xB5\x0F" + + "\x3C\xF0\x80\x5E\xAF\xCF\xC1\x47\x46\x76\x0E\x84\xDC\x59\x79\x85\xC0\x33\xB3\x88\xC3\x2A\xE6\xE2\x16\x32\xBF\x8F\x74\xB0\xFD\xB2" + + "\x7E\x9E\x3F\x4A\x5B\xD9\xA0\x45\x62\xDB\x84\x4A\xB0\xE8\x24\xD4\xF3\x8C\xDB\xBD\x8A\x68\x13\x04\xCF\xD2\x68\x83\x34\xDA\x28\x8E" + + "\x80\x35\x88\xC2\xF5\x60\xC2\x50\xBD\x20\x18\x17\x84\xE2\x82\x60\x1D\x3F\x18\xE7\xF9\x6B\x79\xBE\x1A\x5E\x79\x0D\xCF\x5B\xC5\x75" + + "\x55\xF0\x5C\xD0\x18\x8E\x88\x5C\x41\xB1\x23\x20\x82\x70\x1A\x5A\xC2\x7A\x2B\x57\xA5\x2F\x96\xC8\x99\x45\xA5\x85\xC5\x9C\x92\xD2" + + "\x52\x1E\x8F\x67\x30\x18\x9A\x9B\x9B\xE1\x3A\x92\x29\x2C\x24\x71\x47\xCF\xD9\xA4\x2F\x0D\x5E\x4E\x2C\x02\x30\x3C\x9E\x67\xCC\x98" + + "\x9E\x96\x3E\x31\x8F\x95\xB3\x6A\xD3\x96\x7D\x68\xBF\xA2\x5B\x60\x22\x07\xFD\x2F\x04\xDE\xDA\x0E\x5D\x00\xC6\xDE\x3D\xD2\x71\xE0" + + "\xF8\xA5\x4F\x4F\x5D\x05\x38\x8F\xB4\xFF\x7A\xBA\xF3\x8F\xB3\x57\xFE\x77\xF6\xEA\xFF\xCE\x40\x99\xB4\x33\x49\x4B\xBC\xBC\x0A\xE5" + + "\x9F\x70\xCE\x77\x97\xFF\x77\xEC\xE2\x6F\x00\xF6\x67\xA7\xAF\x1E\x38\xDE\xF9\x2E\xCE\xAD\xDB\x86\x49\xA6\xFD\xBF\xB7\xC0\x65\x41" + + "\x6B\xFA\x8F\x75\xB6\xAE\xDF\x94\x93\x9D\x91\x99\x91\xB1\x6C\xD9\x12\x92\xD8\x7D\xE0\x13\x39\xFA\xCA\x89\xF5\x32\xCE\x86\x45\xB6" + + "\xFF\x85\x73\x36\x6D\xDA\x34\x73\xE6\x4C\x97\xCB\x25\x10\x08\xD8\x6C\x36\x4A\xDB\x98\x9E\x09\xE2\x9C\x5D\xC0\x66\xB0\x4B\x81\x43" + + "\x68\x4B\x13\xA3\x82\xED\x9E\x48\x5F\x5B\x81\x7B\xE6\xA6\xED\x52\x60\x0D\xE6\x56\x5D\x81\x02\x66\x75\x74\x12\xB4\x78\x49\xA3\x17" + + "\xD1\x5B\x01\xF4\x36\x4A\xA2\x0D\x62\x0C\xB0\x30\xD2\x20\x08\xD7\x13\x03\x6E\xF9\xA1\x38\x3F\x58\xC7\x0B\xC6\xB9\x81\x38\xC7\x1F" + + "\xE7\xFA\xE2\x1C\x6F\x35\xC7\x5D\x99\x23\x90\x31\xF9\x60\x52\x16\x5F\xCA\xE4\x89\x33\xF3\x8B\xA0\x35\x2B\x16\x8B\xE1\xD9\x16\x89" + + "\x44\xE6\xCF\x9F\xFF\xF4\xD3\x4F\xEF\xDC\xB9\x73\xD7\xAE\x5D\x64\x36\x25\x35\xC7\xA5\xAF\x79\xD1\x83\xBB\x1A\x09\x00\x9E\x3E\x7D" + + "\x5A\x7A\x46\x5A\x2E\x33\x67\xCD\x93\xDB\xF6\x1F\xBB\x74\xBD\xDD\x3F\x23\x85\x2E\x06\x0C\xE9\xED\x7B\x47\x3B\x3E\x3E\x75\x05\x04" + + "\xF6\xE8\xC5\x5F\xCF\x5C\xFE\xDF\xB9\xAB\xFF\x07\x7C\x02\x90\xDF\xA1\xF2\xCF\xFE\x1B\x06\xFB\x4F\xF2\xEB\x47\xDB\x7F\xFB\xEA\xDC" + + "\xCF\x1F\x9E\xBC\xBC\xFF\xC8\xC5\xB6\x83\x17\xDA\x0E\xB5\xA7\xFC\xEF\x37\xA7\x91\x54\x7E\xEF\x1E\xBF\xBC\xE4\xD1\x67\x19\xD9\xE9" + + "\x10\x42\xB7\xB6\x2E\x04\x37\x18\x88\x02\x5F\x7B\x2A\x25\x5D\x63\x88\xDF\x92\x79\x94\x20\xD7\x3B\x76\xEE\x7C\xEA\xA9\xA7\x16\x2C" + + "\x58\x50\x51\x51\x01\x9F\x23\x91\x48\xD8\xC5\x25\xE3\xC1\xD5\x50\x43\x1A\x5B\x36\x03\x84\x9A\xCA\xF0\x4C\x07\x95\x4C\xC3\xEA\x9E" + + "\x79\x83\x4F\xFD\x88\x59\xCC\xA1\x7E\x94\x62\xA3\xD4\xD1\x06\x25\x32\x2C\xB9\x91\x06\x5C\x36\xCA\xC2\x0D\xA8\xDB\x19\x54\x37\x8C" + + "\x4C\x14\x6E\x12\x86\x1B\x05\x61\x04\x30\x2F\x54\x0F\xE8\xF2\x82\x35\xA0\xC0\xBC\x10\x00\x8C\x0C\x31\xEC\xAB\xE5\xF8\xAA\xB9\x9E" + + "\xD8\x5D\x77\xDD\xA5\x50\x28\x2A\x2B\x2B\x01\xD7\x68\x34\x3A\x69\xD2\xA4\x55\xAB\x56\xBD\xF8\xE2\x8B\xBB\x77\xB7\xBD\xF5\xD6\x5B" + + "\xF0\xC4\x82\x4B\xB0\x0D\x1F\x14\xB7\xC3\xB6\x98\x01\x1E\xCC\x10\x5F\x4D\x9B\xD6\x92\x91\x91\xC6\x62\x66\xAF\x7B\xFA\x5F\x37\xB3" + + "\x02\xD3\xFF\x2A\x80\x0A\x5E\x7E\x78\xA2\x13\x30\x3B\xD6\xF1\x3B\x20\x87\xC0\xEB\x05\x4B\xC4\x24\x2E\x7B\x37\x80\xFC\x0C\x46\x37" + + "\x15\xE6\xCB\x44\x96\xFF\x3C\x72\xE1\xD7\xCF\xBF\xBB\x0A\xCF\x08\xF2\x3F\xDE\xE4\x18\x13\x05\x7E\xF7\xF8\x95\x15\xFF\x78\x21\x27" + + "\x2B\x3D\x33\x2B\x63\xC1\x82\xF9\x64\x77\xC2\xE1\x5C\xCC\x40\xA6\x58\x92\x93\x41\x96\x40\x9C\x76\xEF\xDE\xFD\xC2\x8B\x2F\x82\xE7" + + "\x83\xFF\x03\x05\xC0\x02\x10\x01\x5C\x00\x1D\xBD\x76\x7A\xDD\xB8\x02\xAB\xC2\xF5\xCA\x70\xBD\x02\x88\xED\x9A\x68\x85\xFB\xAB\x50" + + "\x8B\xB7\x41\x04\xD1\x32\x18\xA6\x97\x1F\x42\xF4\x72\x83\xF5\x3C\x1C\x39\x43\x14\xCD\xC3\x3C\x23\x80\x41\x87\xFD\x71\x14\x48\x7B" + + "\xAB\xC6\xDC\x73\xCF\xAC\x59\xB3\xF7\xEF\xDF\x0F\xB8\xB6\xB5\xB5\xED\xEA\x01\x6D\x7F\x56\x20\x0D\x11\xC0\x70\x5F\x7F\xF8\xE1\x87" + + "\x96\x96\x29\xE9\xE9\xE9\xB9\xAC\xAC\x75\xCF\xBE\x82\x15\xF8\x66\x4C\xCE\x48\xFD\x49\x6D\x38\x77\xE4\x27\xA7\x2F\x1F\xFA\xF1\x97" + + "\x53\x9D\x7F\x9C\xC3\x11\xF2\xE9\xEE\x42\x9A\x44\xF7\xBA\x8D\xF6\xEB\x7F\x9E\xEE\xC4\x9F\x86\x63\xEC\x63\x17\x7F\xFF\xEA\xDC\x4F" + + "\xEF\x62\x8C\x6F\x66\x86\x31\xC0\x17\xDE\x3B\x71\x75\xF5\x93\xDB\xB2\x33\xD3\xB2\xB2\x32\xE7\xCC\x99\xF3\xDD\x77\x67\x4E\xE3\x63" + + "\x48\x01\xEE\x15\x66\xA2\x49\xC4\xD5\xBB\x60\xC6\x14\xEC\xDB\xBF\xFF\xC1\x59\xB3\xC6\x8C\x19\x43\xDF\xB1\xE1\x9A\x00\xF3\xFB\x05" + + "\xB0\x32\x54\x2B\x0F\xC6\xD1\xEA\xA2\x30\x1A\x28\x92\x06\xEB\xC5\x68\xB8\xA8\x0E\x4A\x61\xB0\x51\x10\xAC\xC7\xD6\xC8\x0F\x36\xF0" + + "\x82\x40\x6F\x03\x00\xCC\x0D\xA1\x10\x5A\x80\x43\x68\x01\xAA\xD7\xF3\x02\x75\xBC\x00\x6E\x0C\x97\x57\xA7\x2C\x27\xBC\x31\x68\x87" + + "\x08\x60\x50\x60\x00\x78\xEA\xD4\x29\xE9\x48\x81\xB3\x1E\x7A\xFE\xD5\x77\xD1\x5E\xDB\x37\x97\x02\xE3\x91\x1E\xBC\xF3\x20\xEA\xA6" + + "\xBA\x00\xD1\xF2\xE1\xF3\xBF\x9E\xBE\x0C\xED\xDB\x3F\x29\x74\xE9\xF8\x0D\x8A\x25\x48\xC6\x95\xD3\xA8\x8E\x0C\x30\xFE\xFC\xCC\x15" + + "\xD2\x5B\xF6\x4E\x8F\x5E\xB4\x9B\xC1\xD0\x9F\x74\x08\x6D\x11\xBC\xEE\x99\x7F\xE5\x64\x4D\xCC\xCA\xCE\x9C\x35\x6B\x26\x71\x80\x91" + + "\x5D\xD0\x4F\x29\x33\x41\x80\xBE\x9C\x10\x37\x86\xFB\xA3\xC0\xFD\x03\x58\x11\xAC\x91\x05\xE3\x60\xD2\x50\x9D\x04\xE8\x45\x00\xD7" + + "\x89\x12\xDC\xD6\x27\xF9\x6C\xE4\x61\x74\x39\xA1\x06\x0E\xC2\x18\x35\x7D\x51\x3F\x16\x3A\xA7\x4E\x10\x6C\xE0\x63\x59\x16\x04\xE2" + + "\x7C\x5F\xF5\x4D\x9B\x52\x87\x28\x30\x9C\xD3\xD2\x32\x19\x1A\x4B\x4C\x46\xE6\xC3\x9B\x5F\xDF\x7F\xF4\xF2\xCD\xE3\x97\x5D\x7F\xC6" + + "\xB7\x28\x69\x33\x08\x20\xA8\x2E\x08\x23\xEE\x8B\xA2\x37\x5C\x07\x13\x5D\x3A\xC3\xF4\xCF\xC7\x75\x54\xC2\xE3\xE3\xFD\xA3\x97\xA8" + + "\x1D\x0C\x6F\x92\x6B\xD5\x05\xF0\xB7\x17\xDE\x3F\xF9\x13\x3C\x8B\x73\xB2\xD2\xB2\x73\xB2\xA6\x4F\x9F\x76\xF2\xE4\xA9\x61\x56\xE0" + + "\xBF\x3C\xE8\x29\x75\x06\x59\x81\x15\xFE\x6A\x79\xA0\x56\x1A\xAC\x93\x12\x7A\x03\x50\x36\x74\x01\x8C\x44\xB8\x01\xCB\x6F\x23\x37" + + "\xD4\xC4\x0D\x36\x71\x42\x08\x66\x1C\x42\xD7\x62\x7A\x71\x8C\x1D\x84\x86\x71\x3D\x1F\x00\x2E\xBF\xD9\x01\x06\x05\x9E\x32\x65\x4A" + + "\x66\x46\x3A\x8B\x91\xF5\xC8\xE6\xD7\xDF\xC5\x7B\x8B\xDE\x0C\x4E\x49\xFD\x0D\x68\x64\xE8\xDB\x0B\x9F\x7D\x77\x05\x02\x66\xDC\xCA" + + "\x4D\x45\x6B\xD0\xD1\x4D\x69\x24\xA7\x62\x7C\xF9\xCF\x93\x9D\x7F\x7C\x72\xEA\x0A\xD9\x8B\xF8\xA6\x62\x18\x2B\xF0\xF9\x03\xA7\x7E" + + "\xDE\xF0\xE2\x1B\xA0\xC0\x39\x39\xD9\x53\xA7\xB6\x90\xAD\x09\x6F\x5A\x80\x7B\xF6\x60\x0D\x2C\x84\xF6\x55\xCB\xFD\x20\xC2\xF5\xB2" + + "\x60\x43\x92\xE1\x46\x51\x00\xE2\x67\xC0\xB2\x41\x10\x68\x24\x0C\x43\xC9\x0B\x4D\xE2\x86\xC1\x9A\x78\xA1\x46\x2C\xBF\x71\x38\x07" + + "\x37\x92\x1B\x12\xB4\x43\x33\xD8\x5B\x75\x93\x03\x0C\xE7\x4C\x99\x82\x15\x38\x27\x6B\xC3\x96\xED\xEF\x1E\xBB\x29\x14\x98\x4A\x0C" + + "\x82\x84\xF7\xC8\xC5\x6F\xCF\xFF\xD2\xB3\xBB\x78\xA8\xD1\xED\x55\x8D\xE9\x7F\xC6\x57\xE7\x7E\xA6\x27\xA6\x1D\x71\x7A\x13\x57\xEC" + + "\xE0\x85\x03\xA7\xFE\xBB\x71\xDB\xCE\x9C\xCC\xB4\x1C\x46\xF6\xE4\xC9\x0F\x1C\x3F\x7E\xEC\x66\x06\x98\xF4\x1E\xA7\x60\x99\x82\x68" + + "\x0F\x80\x39\xD4\xAF\xA4\xF6\x42\xAB\x02\xD5\xCA\x40\x8D\xD4\x8F\x96\x07\x4A\xFD\xF5\x12\x50\xE0\x40\x9D\xD0\x57\x27\xF4\x27\x44" + + "\x98\x8F\xF4\xB6\x91\x1F\xC2\x25\xC2\x18\xEA\xF5\x10\x2D\x0B\x11\xC3\x48\x81\x85\xC1\x06\x61\xA8\x01\x01\x0F\xCD\x60\xDC\x06\xA6" + + "\x27\x76\x1F\x60\x03\x78\xD0\x01\x3E\x77\xEE\x1C\xDC\xE3\xCC\xCC\x74\x06\x23\xEB\xD1\xAD\xFF\x7E\xF7\xF8\xC8\x03\x4C\xA7\xF7\xC3" + + "\x13\x9D\x27\x2F\xFD\xDE\x45\xCE\xB0\xA8\xEE\x35\x30\xEE\xAA\xE0\xFA\xD7\xDF\xFF\xF7\xA6\x62\x98\x0C\xAD\x7D\x70\xFA\x97\xC7\xFF" + + "\xF5\x76\x76\x56\x3A\x83\x99\x33\x69\x52\xD3\xD1\xA3\x47\xCE\x9C\x39\x33\x82\x00\xF7\xCC\xDA\x41\x4F\xEC\x7E\x8D\x69\x1B\x37\xA2" + + "\xC0\x9A\x60\x8D\x32\x58\x0B\x00\x4B\x03\xD8\xFC\x75\x12\x7F\x9D\xD8\x5F\x27\x0A\xD4\x25\x75\xB8\x1E\x47\xD1\x44\x8A\x89\xD5\x0B" + + "\xFD\x71\x61\x80\xCC\xC4\x42\x27\x88\x42\x8D\x22\xC2\xB0\xAF\x7A\xCC\x98\x31\x53\xA7\x4D\xDB\xB9\x6B\xD7\x6B\xAF\xBF\xFE\xC6\xF6" + + "\xED\x50\x92\x2F\x40\x4F\x9D\xD3\x33\x6F\xCE\xB0\x01\x4C\x14\x38\x13\xB5\x81\x6F\x0A\x05\xEE\xA2\xF7\xDB\x76\x08\x9B\xBB\xAB\xEE" + + "\x8D\x77\x2F\x0F\x91\x14\x43\x20\xF0\xCD\xCD\xC4\x30\x79\xEA\x1D\xF8\xEE\xBF\x9B\x5E\x69\xCB\xC9\xCE\x00\x05\x6E\x6C\xAC\x3F\x7C" + + "\xF8\xF0\xD9\xB3\x67\x87\x7F\x67\x06\xFA\xF8\x30\x95\xB8\x83\x6C\x30\xD4\xB5\xB5\xCA\x98\x31\xD7\x48\xF5\xDC\x17\xC0\xBD\x46\xDD" + + "\x89\x99\x58\xBA\x50\x5C\x13\x8C\x2B\x02\x71\x79\xB0\x0E\x75\x47\x07\xEA\x64\xFE\x3A\xC4\x33\x5A\xB2\x8F\x7A\xB3\x84\x20\xB3\xFE" + + "\x3A\xBE\x1F\xF5\x66\xF1\x91\xCC\x62\x62\x03\x71\x91\x0F\x18\xAE\x13\xE2\x4E\x2C\x24\xC2\xB8\x43\x8B\xEF\xAB\x81\x67\x4C\x65\x65" + + "\xE5\x3F\xFE\xF1\x0F\xB8\x46\x1B\x36\x6C\x78\xFA\xE9\xA7\x01\xE3\xDD\x6D\x6D\x3B\x76\xEE\xEC\x15\xE6\x97\xFF\x4A\x99\x87\x0E\xE0" + + "\x11\x57\xE0\xBD\xB4\xDE\xDD\xFF\x9C\xFB\x99\xDE\x53\x45\xC7\x78\xC4\xAD\xDB\x9F\x74\xF9\x7F\x5F\x9D\xFB\x29\x75\xEA\xE5\x08\x19" + + "\x69\x96\x83\x02\x3F\xF9\xEA\x5E\x66\x4E\x26\x28\x70\x5D\x5D\xFC\xDB\x6F\xBF\x05\x05\x1E\x86\x9D\x19\x7A\x0E\x05\x53\xD0\x92\xC4" + + "\x1D\x80\x2E\xF8\x3F\x50\x00\xFF\x1D\x10\x01\x5C\x0C\xBE\x02\x1B\xC2\x71\x5D\x38\xAE\x0E\xD6\x81\xA9\x82\xF5\xCA\x60\x5C\x19\xAC" + + "\x07\x92\x65\x58\x90\xC5\x00\x2A\x36\x61\x80\x84\xCD\x75\x02\x80\x16\xDE\xF1\xD7\x8A\xFC\x50\x42\xA4\x1D\x47\x48\x07\x88\x50\xD7" + + "\xF1\xFC\x35\xF7\xA5\x67\xE6\x16\x73\x78\x52\x39\x57\x22\xE3\x49\xA4\x2A\x8D\xC6\xEB\xF5\xD6\xD5\xD5\xCD\x9D\x3B\xF7\xB1\xC7\x1E" + + "\x7B\xF5\xD5\xD7\xDA\xDA\xF6\x90\x69\x58\x2F\xF7\x18\x1C\xEE\x55\x99\x6F\x57\x80\xC9\x7F\x4A\x06\xB1\xBE\xF9\xE1\xBF\x67\xBB\xCB" + + "\xDD\x88\x43\x7B\x0D\x86\xC1\x3E\xFD\xEE\xCA\x9E\xE4\x06\xA5\x23\x08\x30\x51\xE0\x0F\xBE\xFB\xE5\xE9\x37\xF6\xE5\xB2\xB2\x99\x0C" + + "\x46\x6D\x6D\xCD\xC1\x83\x07\x87\x4E\x81\xE9\xAA\x43\x41\x0B\x75\x0A\xDA\x57\x5F\x7D\x15\xFC\x7C\xC1\x82\x05\xE0\xF3\xE5\xE5\xE5" + + "\x2A\x95\xAA\x84\xC3\x2D\xE6\x70\x4A\xB8\x5C\x06\x2B\xF7\x9E\xB1\xF7\x0D\xB2\x02\xA3\x3C\xB2\x91\x7A\x5D\xA8\x5E\x17\xAE\xD7\x86" + + "\xEB\xD1\x56\x0C\x21\xC0\xB8\x0E\x48\x4E\x60\xEC\xAF\xC5\x6A\x1C\x17\xFB\x31\xC9\xFE\x5A\x21\x42\xB7\x26\xC1\x36\xAA\xD7\x13\x86" + + "\xF9\xFE\x38\x2F\x50\x5B\x5A\x16\x28\xB5\xFB\x4A\x6D\x1E\xAE\xCD\xCB\xB1\xB9\x8A\xB4\xA6\x7C\x89\x9C\xC1\x81\xA7\x48\x89\x48\x2A" + + "\x35\x18\x0C\x6E\xB7\xBB\xA9\xA9\x69\xD5\xAA\x55\x2F\xBC\xF0\xC2\xDB\x6F\xBF\x4D\x36\xF5\x26\x30\xF7\x0C\xB3\x7B\xCE\x85\xBE\x3D" + + "\x00\x4E\xD0\x8B\xFF\xEB\x83\x98\xDE\xD3\x37\x31\xBD\x74\x86\x4F\x77\xFE\x01\xE5\xA9\xCE\x3F\x0E\x1C\xBF\xD4\x76\x13\xA4\xC5\x27" + + "\x0A\xFC\xCC\xF6\xFD\x79\xB9\x0C\x50\xE0\xAA\xAA\xD8\x37\xDF\x7C\x4D\x26\x63\xDD\x30\xC0\xD7\x98\x0B\x9D\x02\xED\x8E\x1D\x3B\xDE" + + "\x7A\xFB\x6D\x70\x59\xF8\xC0\x19\x33\x66\xF8\x7C\x3E\xF8\x04\x1E\x9F\x9F\x91\x9D\x33\x21\x23\x2B\x1D\x2D\x3F\xCC\xCF\x29\x2C\x66" + + "\x14\x96\x50\x36\xC8\x00\x9B\xA2\xF5\x60\x04\x63\x43\xA4\x01\x61\x1C\xAA\x53\x87\xE2\xAA\x50\x9C\xC2\x18\xA2\x6B\xDC\x42\xAE\x45" + + "\x49\xB0\xFC\xB5\x62\x54\xD6\xA0\x0A\x34\x95\xFD\x75\x02\x5F\xBD\x00\x02\xEC\x00\xC4\xCF\x71\x7E\xA0\x96\xEF\xAF\x06\xBC\x45\xFE" + + "\x98\xD8\x5F\x29\xF1\x57\x48\x7C\x11\x99\x2F\x2C\x2D\x0F\x0A\xCB\x9C\x1C\x9D\xA9\x58\xA9\x29\x14\x4A\x18\x85\x45\xA5\x5C\x1E\x1C" + + "\x70\xD5\x42\xA1\x10\x88\xF3\x33\xCF\x3C\xF3\xD6\x5B\x6F\xC1\x33\x8C\x64\xB1\xA3\x1F\x70\xC9\xE0\x7D\x4A\x81\x07\xB2\x98\xE1\x26" + + "\x01\x98\xD6\xEE\xBD\x70\xAB\xD0\x4B\x31\x8C\xE7\x6C\xA1\x55\x13\x87\xDB\x7F\xDD\x77\xE4\x22\x59\x0B\x35\x82\x6D\x10\xAC\xC0\xFF" + + "\x7D\xF6\xDF\xEF\x15\xE4\xE7\x32\x59\x8C\xCA\xCA\x8A\xAF\xBF\xFE\x0F\x28\x70\xAF\x3B\x8C\xF6\x73\x31\x03\x51\x60\xF0\x3A\x32\xD5" + + "\x99\x7E\x80\x7F\xC2\xFB\xE0\xAB\x5B\xB6\x6C\x59\xB2\x64\x49\x6D\x6D\xAD\x5E\xAF\x17\x0A\x85\xC5\x25\xA5\x00\x2D\x26\xB6\x00\x27" + + "\xEE\xE0\x14\xF0\x44\x38\x71\x07\x9F\xE4\xEE\x48\x66\xF0\xB8\xD6\x76\x47\x37\x02\xB0\x19\x03\x6C\xAE\x6C\xA0\x30\xD6\xE3\xA0\x5A" + + "\x1B\x8A\xAB\xC3\x88\x64\x65\x38\xAE\x08\xD5\x63\x8C\xA1\x61\x5C\x0B\x18\x43\x0B\x59\xEC\xAB\x15\xFB\xA0\x8C\x0B\x7D\x71\x81\x0F" + + "\x18\x8E\xF3\xFC\x71\x3E\x2A\x6B\x78\xE5\x31\xB4\x3C\xB8\x3C\x2A\xF0\x46\x45\xDE\xB0\xD0\x13\x12\x78\xFD\x62\x30\x77\xB9\xC4\xED" + + "\x93\xBB\xCA\x95\x2E\x9F\xC2\xEE\x12\x1B\xCC\x42\x95\xAE\x54\x28\x61\x15\xB0\xF3\x0A\xD0\xC1\xE1\x70\x9C\x4E\xE7\xCC\x99\x33\xA1" + + "\xCD\x00\x0D\x86\x8D\x1B\x37\xFE\x03\x1F\x10\x90\x00\xDE\x24\xA9\xDD\x00\x97\x13\xDE\x1C\x00\x77\xF5\x39\xE3\x76\xEF\x2D\x43\x2F" + + "\x1D\xE3\xD3\x9D\xE8\x4F\xFD\xF2\xEC\xD5\x11\x8F\xA2\x89\x02\x3F\xF7\xE6\xFB\x85\x05\x79\x0C\x26\x23\x12\x09\x7F\xF5\xD5\x57\x67" + + "\xCF\xDE\xB8\x02\x83\x8F\x91\xA4\x76\xE0\x75\xE0\x7B\xC4\x09\x89\x37\x82\x67\x82\x7F\x82\x97\x82\xAF\x16\x16\x16\xE6\xE6\xE7\x4F" + + "\xCC\xCC\x26\xC4\xA2\x85\x47\xC5\x5C\x20\x96\x64\xDB\x49\x10\xD8\x95\x1F\xAB\xD7\xAD\xC9\x52\x0D\x8F\x0C\xF1\x7A\x5B\xCC\x90\x58" + + "\xEA\xD0\x0B\xC0\xD6\x68\x1D\xB2\xCA\x06\x0B\x60\x1C\xAD\x33\x47\xE3\xC6\x70\x1C\x37\x8C\x6B\x11\xC6\x10\x51\x23\xAB\x03\x8C\x95" + + "\xC1\x5A\x79\xB0\x1A\x4C\x06\x52\xEC\xAB\x96\x20\x86\x6B\x44\xBE\x1A\x81\xAF\x16\x00\xE6\xFB\x6A\xF9\xBE\x6A\x9E\xAF\x9A\xEF\x03" + + "\x7A\x2B\x31\xC0\x11\xA1\x37\x2C\xF6\x06\xC1\x24\x60\x1E\x9F\xC4\xE5\x95\x38\xBC\x72\x67\xB9\xC2\xE1\x55\xDA\x5D\x2A\x9B\x43\x69" + + "\xB6\x29\x4D\x16\xB9\xCE\x20\x55\x6B\xF9\x12\x69\x7E\x51\x31\x2B\x3F\x9F\x95\x9B\xC7\x64\xB1\x58\xB9\xB9\x94\xE5\xE6\xE5\x65\x65" + + "\x65\x93\xA4\x76\x83\xA8\xC0\xA8\x17\x7A\xD8\x01\x26\x0B\xE8\xC1\xED\x3E\xFF\xEE\x27\xB2\xF6\x80\x04\xA5\xB7\x10\xBD\x67\x70\x20" + + "\x8D\x47\xB9\xFE\x3C\x70\xEC\x52\xDB\x88\x36\x86\x11\xC0\xA7\xFE\xFB\xFC\x8E\x03\x45\x45\x05\xA0\xC0\xA1\x50\xF0\xCB\x2F\xBF\x3C" + + "\x77\xEE\xFB\x1B\x03\x98\x2C\xE8\x07\x4F\xCB\xCA\xCA\xC2\x7E\x08\xAA\xCE\x22\x96\xC3\x64\x32\x58\xAC\xAC\x1C\x66\x26\x93\xC5\x64" + + "\x97\xE4\x95\xF2\x0B\xB8\x42\x90\xD9\x42\xBE\x18\xA0\xC5\x09\x77\x80\xDB\x2E\xA5\xED\xCA\x98\xD5\xFB\x52\xDE\x5E\x18\xEE\xAE\xC0" + + "\xDD\xDE\xEC\x53\x81\x5D\x91\x1A\x67\xA4\xC6\x11\x8D\x3B\xA2\x75\x65\xD1\xB8\x3D\x1A\xB7\x45\x6A\x2D\x91\x5A\x73\xB8\xD6\x14\xAE" + + "\x35\x90\x9D\x0A\xC3\x35\x9A\x60\xB5\x2A\x58\xAD\x44\x16\x93\x07\x62\x52\x5F\x85\xB4\xBC\x42\xEA\xAD\x10\x7B\x2B\x84\xDE\x0A\x94" + + "\x13\xCB\x83\x4A\x21\x36\x91\x27\x2A\xF2\x84\xC5\x9E\xB0\xC4\x1D\x94\xB8\x82\x52\x77\x48\xEE\x0E\xC9\x5C\x7E\x39\x98\xB3\x5C\xEE" + + "\xF0\x2A\x1C\x6E\x00\x58\x61\x2B\x53\x58\xAC\x4A\xB3\x45\x61\x32\x29\x8D\x06\xA5\x41\xA7\xD0\x6B\x94\x3A\x8D\x5C\xA7\x95\x6A\x74" + + "\x32\xAD\x5E\xA6\x45\x25\xB0\x0D\x2F\x19\xB9\x79\x03\x4F\xA9\x43\x07\x38\x31\x0E\x3C\xBC\xC3\x48\xC9\x8E\xAB\x0B\x1F\x9E\xBC\x4C" + + "\x44\xEC\x74\xF7\x71\xA3\x5B\xC2\xA8\xC5\x0F\x67\x70\x20\x3D\xB2\xCB\xB9\xB0\x02\xFF\xBC\x79\xD7\x87\x25\x25\x45\x2C\x16\xC3\xEF" + + "\x2F\xFF\xFC\xF3\xCF\x6E\xB8\x0D\x0C\xFF\x0A\x71\x4A\x9D\xBC\xC2\x62\x95\xD1\x2E\xD3\x9A\xA5\x1A\x93\x48\xA9\x17\xC8\xB5\x7C\xB9" + + "\x86\x27\x53\x73\xA4\xAA\x52\x89\xB2\x44\xAC\x28\x12\xCA\xD8\x02\x69\x01\x4F\x4C\x59\x3E\x57\x94\xC7\x11\x52\x2F\xA1\x0E\x3C\x13" + + "\x63\x95\xF0\xB1\xB4\x02\x84\x7C\x1C\x2A\xF3\x71\x45\x40\x3F\x01\x97\x7D\x02\xDC\xF3\xFD\x04\xC0\x9E\x70\xCC\x1D\xAE\x76\x46\x6B" + + "\x5D\xD1\x38\x94\x65\x91\x1A\x7B\xA4\xDA\x16\xA9\xB6\x86\xAB\xCD\xC8\x6A\x4D\x91\x1A\x43\xB8\x46\x17\xAA\xD6\x86\xAA\x35\xC1\x2A" + + "\x75\x30\x86\x18\xF6\x57\xC8\x7D\x51\x19\xC6\x58\xE2\x8D\x08\xBC\x61\x81\x3B\x22\xF0\x44\x44\x88\xDE\x0A\xB1\x1B\xD0\x0D\x4B\x11" + + "\xBD\x01\xA9\x33\x28\x73\x06\xE5\x8E\x80\xDC\xE1\x97\x39\x7C\x40\xAF\xBC\xCC\xA3\xB0\x23\x80\x95\x56\xBB\xDC\x6C\x91\x9B\x4C\x72" + + "\xA3\x41\x61\xD0\x29\x8D\x3A\x85\x41\xA3\x32\x68\x15\x7A\x2D\xA0\x2B\xD7\x25\x4C\xA6\xD5\x42\xC9\xC8\x43\x00\x43\xA4\x3D\x40\x05" + + "\xA6\x26\x72\x24\x66\x62\x0D\xA3\x02\x27\x3B\xAE\xD0\x24\xE7\x13\x68\xB6\x06\xD2\xDE\xEF\x46\x9A\xC6\x81\x18\x69\x0C\x7F\x72\x3A" + + "\xD1\x23\x3D\x52\x00\x1F\x38\xFD\xF3\x8B\x6F\x7D\x54\xCA\x29\x01\x05\x2E\x2F\xF7\x7C\xF6\xD9\xA7\x64\x49\xF0\x8D\x85\xD0\x24\x27" + + "\x56\x61\x09\xD7\xE8\xF0\x6A\xAD\x2E\xB5\xA9\x4C\x61\xB0\xE2\x24\xAA\x66\x89\xC6\x28\xD6\x18\x85\x2A\xBD\x40\xA9\xE3\xCA\xD4\xA5" + + "\x12\x45\xB1\x50\x56\x2C\x42\x24\x17\xF2\x25\xF9\x5C\xC4\x30\xA0\x8B\xEB\x08\x66\x52\xD2\x49\xC6\x12\x2D\xA4\x88\x4D\xB1\x5E\xA7" + + "\x64\xF5\xAD\xE1\x44\x81\x43\x31\x57\xB8\xCA\x89\x75\xD8\x19\xA9\x76\x86\x6B\xED\xD1\x1A\x0C\x70\x15\x36\x4A\x8A\x6B\xF4\xC0\x70" + + "\xB0\x4A\x1B\xAA\xD2\x04\x63\xAA\x40\xA5\x22\x10\x05\x8C\xA5\xBE\x28\x00\x2C\xF4\x84\xD1\xE6\x0C\x6E\x00\x38\x2A\x84\xD2\x1D\x02" + + "\x86\xC5\xAE\xA0\xC4\xE9\x97\x82\x39\x7C\xD2\xB2\x72\x5C\x7A\x65\x76\xB7\xCC\xE6\x02\x53\xD8\x1C\x0A\x0C\xB0\x12\x89\xB0\x59\xAA" + + "\xD3\x08\x15\x32\xAE\x48\x50\xC4\x29\xC9\x63\x17\xE6\x15\x16\xE6\xB1\xD9\xA8\x84\x96\x46\x61\x61\x41\x49\xC9\x84\xB4\xB4\x41\x54" + + "\xE0\x8C\x4C\x3C\x17\xFA\x85\x37\x86\x5F\x81\xC1\xBE\xFD\xF1\x97\xB3\xC9\x28\xF4\xCC\xAD\x26\xBF\x74\x11\x26\x73\xC5\x4E\x74\xFC" + + "\x4E\x7D\xB5\x11\x01\x18\x42\xE8\x17\xDF\xFE\x98\xCB\xE5\x80\x02\x7B\x3C\xEE\x4F\x3F\xFD\xF4\x87\x1F\x7E\xB8\x41\x05\xD6\x68\x88" + + "\x02\x43\xA8\x2C\x94\x29\x4B\xF9\xA2\x12\x9E\xB0\x98\x23\x28\x2A\xE5\xB3\x4B\xF9\x85\xA5\xDC\x22\xBE\x88\x2B\x51\x80\x1A\x03\xC6" + + "\x12\x0C\x33\x5F\xA1\x05\x59\x2E\x16\xC9\x81\x5B\x36\x98\x40\x4A\x78\x4E\x51\x66\xC2\x2D\x21\x9C\xD4\x29\xB0\x69\x84\xF7\x89\x6B" + + "\x5F\xEF\x8F\x72\x06\x2B\x90\x85\x62\x0E\xD0\x61\x6C\x8E\x70\x8D\x3D\x5C\x6D\x0D\xC6\x40\x84\x6D\xE1\x1A\x6B\xB8\xC6\x1C\xAA\x31" + + "\x86\xAA\x0D\xD8\x74\xA1\x2A\x5D\x30\xA6\x09\x54\xA8\xFC\x15\x4A\x5F\x85\xAC\x3C\x22\xF5\x46\x20\x5A\x16\xBA\x10\xC3\x22\x77\x58" + + "\xE8\x0E\x09\x5D\x41\x31\x4A\xA9\xE3\x17\x3B\xCA\x25\x0E\x9F\xB8\xCC\x23\xB2\xBA\x45\x36\x97\x04\xD0\xB5\xBB\xE5\x20\xBF\x0E\x8F" + + "\xCA\xE1\x96\x1A\xCD\x5C\x85\xA2\x98\x2F\xC8\x2B\x2A\xCA\x62\x30\x8A\x4B\x4B\x44\x22\x91\xD9\x6C\x0E\x87\xC3\x15\xC9\xA3\xB2\xB2" + + "\x32\x1A\x8D\x56\x57\x57\xC3\xFB\xA3\x47\x8F\x1E\xB4\x36\x70\x46\x3A\x8B\x99\xF9\xC8\xF3\xAF\x0D\xDB\x62\x06\xF4\x5F\x7C\xDB\xDE" + + "\x76\x10\x9A\xBE\x57\xBB\x2D\xE5\x1D\x69\x14\x07\xA8\xC0\xC9\x69\xD2\x3F\x51\x2B\x87\x87\x1F\x60\x50\xE0\x2D\xBB\x3F\xE5\xF1\xF9" + + "\x00\xB0\xDB\xED\xFA\xE4\x93\x4F\x6E\x58\x81\x49\x1B\x18\x3C\x0D\xFC\x0D\xBC\x0E\x7C\x0F\x3C\x90\xF2\xC6\x50\x28\x64\xB1\x58\x14" + + "\x0A\x85\x40\x24\xCE\x2D\x2C\xCA\x2B\x2A\x2D\xE4\xF0\x4B\x45\x32\x9E\x4C\x05\x9A\x0C\x24\x73\x71\x8C\x4D\x02\x6C\x60\x98\xC2\x18" + + "\xB8\xA5\x58\x85\x7A\xAF\xCA\xCC\x2A\x11\xF4\xDC\x18\x89\x95\x4C\x5E\xDB\x6B\x0F\x16\x02\xD8\x11\x88\x38\x02\x51\x67\xB0\xD2\x11" + + "\x8C\x39\x83\x55\x50\xDA\x43\x31\x7B\x30\x66\x03\x80\xC1\x42\x31\x73\x10\xAC\x1A\x97\x31\x03\xB1\x40\xA5\xCE\x57\xA1\xF1\x85\x55" + + "\xE5\x11\x85\x37\x22\x85\xE6\x2E\xA0\xEB\x0C\x0A\x9C\x41\x91\x23\x88\x52\x52\x96\xF9\x45\x65\x3E\x61\x99\x57\x58\xE6\x16\xDB\x3D" + + "\xD2\x32\x8F\xC4\x06\xDA\xEB\x91\xDB\x3D\x02\xBD\xA5\x44\xA6\xCA\xE7\xF2\x19\x85\xEC\x8C\x1C\x86\x50\x24\x86\x2B\x02\xD7\xE5\x81" + + "\x07\x1E\x58\xB5\x6A\xD5\xF3\xCF\x3F\xBF\x73\xE7\xCE\xDD\xBB\x77\xBF\xF5\xD6\x5B\x6F\x27\x8F\x1D\x3B\x76\xEC\xDF\xBF\x7F\xE5\xCA" + + "\x95\xE3\xC7\x8F\x1F\x78\x2F\x34\x59\xD0\x8F\x97\x13\x66\x3D\xFC\xFC\x6B\xFB\x87\x51\x81\xDB\x0E\x5D\x78\xFF\xD8\xA5\x93\x1D\x7F" + + "\x9C\x49\x8E\xA6\xDE\x8A\xDA\x4B\x37\x32\xA4\x04\x95\x93\x97\x7E\xDF\x7F\x64\x64\x44\x18\x00\x7E\xFF\xD4\x4F\x5B\x77\x7F\x2A\x10" + + "\x0A\x00\x60\xA7\xB3\xEC\xE3\x8F\x3F\xBE\x61\x05\x26\xBD\xD0\xE0\x69\xE0\x8D\xE0\x75\xE0\x7B\x94\x1F\x26\x7C\x72\xF7\xEE\x6D\xDB" + + "\xB6\xC1\xAF\xCF\x9C\x39\x33\x12\x89\xD8\xED\x76\x99\x5C\xC1\xCC\xCB\xCF\x62\xE6\x32\x0B\x8A\x0A\x4A\xF9\xC5\x42\xA9\x10\x07\xD8" + + "\xF4\x76\x32\x05\x2D\x44\xCE\x04\xDD\xDE\x02\x6C\xD2\x30\x4E\xB4\x93\xFB\x99\xB6\x76\x94\xAD\x3C\x64\xF7\x85\xCB\xFC\x15\x65\xFE" + + "\x68\x59\xA0\xC2\x1E\x88\xD9\xFD\x95\x76\x7F\x85\xD5\x5F\x69\xF5\x55\x5A\xFC\x15\x66\x7F\xA5\xC9\x17\x33\xFA\x63\x46\x5F\xA5\xC1" + + "\x57\x61\xF4\x55\x18\x7C\x51\x4D\x79\x18\x4C\xED\x0D\x2B\x3C\x41\x99\x3B\x24\x71\x85\xC4\xCE\x90\x10\x01\x1C\x00\x93\x38\x03\x62" + + "\xA7\x4F\xE2\x84\xB0\xD9\x03\xC6\xD5\x9A\xF2\x05\x92\x9C\x82\xA2\xB4\x1C\x66\x36\x2B\x57\xA1\x52\x97\x97\x97\x37\x37\x37\xCF\x9B" + + "\x37\x0F\xA8\xFB\xE7\x3F\xFF\x49\x88\xDD\xBE\x7D\xFB\x2B\xAF\xBC\x42\x46\xC9\xE9\xC7\x8B\x2F\xBE\xF8\xDA\x6B\xAF\xCD\x9F\x3F\x7F" + + "\x50\x92\xDA\xFD\xF8\xE3\x8F\x53\xA7\xB6\xE0\x05\xFD\xD9\xEB\x9F\x7B\x65\x78\x16\xF4\x27\xD6\xC4\xE3\x39\x1B\xE7\x68\xC2\x35\xE2" + + "\x04\x0E\xDC\xA8\xEF\xF2\x9F\x73\x3F\x8F\x88\x08\x23\x05\x3E\xF9\xF3\x96\xB6\x4F\x85\x62\x11\x00\xEC\x70\x20\x80\x07\xA2\xC0\x64" + + "\x22\x07\xF8\x1B\x78\x1D\xF8\xDE\xB6\x1E\xC7\xCB\x2F\xBF\xFC\xFA\xEB\xAF\x83\xD2\xB4\xB5\xB5\xBD\xFA\xEA\xAB\x8F\x3F\xFE\xF8\xE2" + + "\xC5\x8B\xA7\x4C\x99\x02\x3A\xA4\xD3\xE9\xF3\x0B\xD9\x69\x19\x59\x99\x39\x2C\x46\x3E\xBB\x80\x2B\xE4\xC9\x35\xA4\xDF\x0B\x62\xEC" + + "\x94\x4E\x2F\x3A\xD8\x74\x8C\xA9\xAE\xEC\x6B\xF7\x66\x93\x77\x46\x59\xBC\x01\xAB\x37\x68\xF7\x86\x90\x95\x87\xCB\x7C\x51\xBB\x2F" + + "\x6A\x2B\x0F\xDB\x7C\x11\xAB\x37\x62\xF1\x86\xCD\xDE\x08\x98\xC9\x1B\x36\x7A\x23\x86\xF2\x88\xD1\x1B\xD6\x7B\xC3\x1A\x4F\x50\xE3" + + "\x09\xA8\xDD\x01\xA5\x2B\x28\x77\x06\xA5\x4E\x68\xEE\x86\xC4\x8E\xA0\xA8\xCC\x3F\x31\x87\x35\x31\x9B\x39\x31\x9B\x01\x36\x21\x2B" + + "\x67\x7C\x66\x56\x61\x71\x89\xCD\x6E\x6F\x6C\x6C\x5C\xB8\x70\xE1\x9A\x35\x6B\x9E\x7C\xF2\xC9\x97\x5E\x7A\x09\x88\xED\x39\xA1\xB2" + + "\xD7\x14\x59\x43\x91\x52\x27\x03\xA7\xD4\x59\xFF\xEC\x2B\xFB\x8F\x0E\x79\x4A\x1D\xF2\xE1\xE0\xDC\x1F\x9F\xBA\x7C\xA6\x2B\xE5\xC5" + + "\xC8\xB3\x37\x70\xA3\xCF\xEB\x38\x7E\x71\x64\x44\x18\x01\x0C\x0A\xBC\xE7\x73\xB1\x54\x0A\x00\xDB\xED\xB6\x8F\x3E\xFA\x70\x20\x0A" + + "\xDC\xD7\x54\xCA\x5E\x67\x3E\x43\x9D\x64\xB4\x03\x7F\x06\x98\xC9\x96\x85\xF0\xBB\x0D\x0D\x0D\x36\x9B\xAD\xA0\x90\x7D\xFF\xC4\xB4" + + "\x09\x69\x19\xE3\x91\xA5\x43\xFD\xFE\x89\xE9\x84\xE4\x42\xDC\x5A\xA6\x37\x95\xC1\x88\xD8\x26\x77\x81\x10\x24\x5F\x0A\x48\x08\xDD" + + "\x6B\x77\xF4\x28\xB3\xDB\x6F\xF1\x04\xAC\x9E\xA0\x0D\x61\x8C\x48\xC6\xE8\x86\xAD\xE5\x61\xAB\x37\x64\x76\x87\x2D\x9E\x90\xD9\x13" + + "\x36\xBA\xC3\x06\x77\xC8\xE0\x46\x15\xBD\x3B\xA8\x71\xFA\x35\x2E\xBF\xDA\xE9\x57\x3A\xFC\xB8\x7B\x39\x20\x75\x04\x25\x65\x01\x91" + + "\xDD\x7F\xD7\x5D\x77\x79\x3C\x1E\x78\x26\x81\xC0\xB6\xB6\xB6\xAE\x5F\xBF\x7E\xD3\xA6\x4D\x2F\xBC\xF0\x02\x7C\x4F\xB4\x15\xF0\x9B" + + "\x6F\xC2\x83\x8D\x60\xD9\xCF\x25\x0D\x43\x90\xD4\x6E\x2A\x49\x6A\xB7\xF6\xA9\x7F\xED\x3B\x36\x1C\x49\xED\x40\x7E\xF7\x1D\xBE\x78" + + "\xB8\xFD\xD7\x84\x64\xDD\xFA\xC1\x33\xDD\x28\x11\xFE\xE2\x0C\xB4\x84\xCF\x0F\x27\xBD\x04\xE0\xF7\x4F\xFE\xBC\xAD\xED\x0B\x89\x4C" + + "\x06\x00\xDB\x6C\xD6\x0F\x3F\xFC\x00\xE2\xAC\x21\x5D\xCC\xD0\x6B\x46\x3B\xA8\xBF\xFA\xDA\x6B\xDB\xFF\xFD\x6F\x10\x67\xF0\x76\xF0" + + "\x79\xF0\x7C\xF0\x7F\xA0\x00\x58\x00\x22\x80\x0B\xA0\x83\x6A\x24\x03\xC9\x24\xC6\xA6\x94\x99\x26\xB9\x7F\x1D\x42\x27\x17\x33\x38" + + "\xBC\x60\x26\xA7\xC7\xEC\xF2\x9A\xDD\x60\xE5\x66\x97\xDF\xEC\xF4\x99\x5D\x3E\xA3\xCB\x67\x72\xF9\x4D\x4E\xBF\xD1\xE5\x37\x38\x83" + + "\x06\xA7\x5F\xEF\x0C\x18\x1C\x7E\x9D\xC3\xAF\x2D\x2B\xD7\x96\x79\xD5\xF6\x72\xA5\xBD\x5C\x6E\x2F\x97\xDA\xBC\x52\xBB\x4F\x6C\xF3" + + "\x8A\xAC\x9E\xBB\x47\x8F\x6E\x99\x3A\x75\xC7\xCE\x9D\xF0\x65\xDE\x80\xB0\x38\x99\xF3\xF9\x25\xDA\x8E\xE6\xD7\xB5\x42\x78\x48\xD2" + + "\xCA\xA6\x4F\x64\xB1\x70\x5A\xD9\xA3\x43\x9B\x56\x96\x28\x12\x38\xD9\x27\xA7\x2E\xD3\x7B\x9E\x47\x9C\xBA\xC1\xB2\x2E\x11\xBE\xFA" + + "\xBF\xC3\x17\x7E\x1D\xFE\x65\x86\x44\x81\xB7\xED\xF9\x5C\x2A\x57\x00\xC0\x56\xAB\xF9\x83\x0F\x3E\x18\x0A\x05\xEE\xEB\x78\xA9\xB7" + + "\x5C\xB3\x2F\xE1\x8C\xF0\xAF\xBF\xF1\x06\xC9\x1D\x4D\x2D\x27\x04\x3A\xC4\x1A\xA3\x48\x6D\x10\x28\x75\x29\xD1\x75\x3E\x57\xCC\x16" + + "\x88\xF1\x04\xCC\xC4\xB6\x69\x84\x64\x5A\xF2\x1D\x3E\x6D\x3E\x66\xA2\x5B\x6B\x94\xD6\xE6\xD6\xD9\x5D\x86\x32\x30\xB7\xC1\xE1\x36" + + "\x3A\xA0\xF4\x18\xCB\xBC\x06\x62\x0E\x9F\x1E\x95\x5E\x7D\x59\xB9\xCE\xEE\xD3\x95\x81\x41\xC5\xAB\xB3\xB9\x35\x76\x8F\xCA\xE6\x51" + + "\xDA\xDC\x72\xAB\x47\x6A\x75\x4B\xAC\x1E\x91\xC5\x23\xB6\xB8\x47\x8F\x1E\xFD\xC0\x03\x0F\x00\xB4\xE4\x99\x94\x72\xF4\x13\xDA\x21" + + "\x53\xE0\x13\x24\xB1\x7B\x3A\x4E\xEC\xBE\x72\xD3\xD6\xFD\x43\x9F\x56\x16\x3C\x0C\x62\xCB\x63\x17\x7F\x3B\x73\x5B\xF4\x3C\xF7\x6A" + + "\xE4\xC1\x74\xAA\xF3\x8F\x8F\x4E\x5E\x1E\xE6\x96\x30\x56\xE0\xAB\xFF\xDC\xFB\x85\x4C\xA1\x04\x80\x2D\x16\xD3\x81\x03\x07\x86\x5A" + + "\x81\xFB\x09\x33\x75\xC0\xE7\x00\x11\xC0\x05\xD0\xA1\xB6\x38\x14\x46\x9B\x4C\x6F\x91\x68\x4D\x64\x48\x99\x90\x0C\x18\x17\x8B\xA4" + + "\x6C\x01\x04\xD5\x22\xBC\x01\xA2\x80\x94\xDD\xE7\x6C\x75\xD5\x09\xD8\xA3\x94\x26\xBB\xCA\x6C\x57\x5B\xEC\x1A\xAB\x5D\x63\xB3\x6B" + + "\xED\x65\x5A\xBB\x43\x63\x75\x6A\x6C\x0E\xAD\xCD\xA9\xB3\xBB\xB5\x36\x17\x7A\x69\x85\xD2\x8D\x4B\x54\xD1\x5A\x5C\x1A\xB3\x43\x65" + + "\x76\x2A\x4D\x4E\xB9\xC9\x29\x35\x39\xC5\x26\xA7\xD0\xE4\x14\x99\x9C\x24\x23\x07\x1D\xE0\x1B\x80\x76\x88\x00\x3E\x71\x02\x6D\xAD" + + "\x32\x73\xE6\xF4\xB4\xB4\xB4\xFC\x5C\xC6\x8A\xC7\x5F\x1C\xEA\xAD\x55\x88\x02\x7F\x72\xEA\x0A\x08\xD4\xED\xD1\xF3\xDC\xD3\x28\x11" + + "\x3E\x77\xF5\xFF\xFE\x73\xEE\xE7\xDD\xC9\x84\xD2\xC3\xB3\xC1\x12\x00\xFC\xDE\x89\x9F\xFE\xF9\xCE\x97\x72\x95\x1A\x03\x6C\xFC\xE0" + + "\x83\xF7\x47\x0A\xE0\xBE\x60\xA6\x00\x06\x3A\xAC\xDE\x20\xB4\x5B\x41\x14\x01\x2E\x95\xB9\x0C\x00\x94\x1B\xAC\x20\xCB\x78\x72\x08" + + "\x08\x72\x02\x63\x50\x63\xBA\x20\x13\xE1\xA5\x4F\xED\x48\x84\xD0\x32\xBC\xCD\xA7\xDC\x68\x56\xE0\x2D\x02\x95\x66\xAB\x0A\xCD\xAC" + + "\xB0\x26\xC1\x06\x4A\xCB\xD4\x96\x32\x95\xD9\x01\xAC\x2A\x4D\x50\x96\xA9\x4C\x76\x8D\xA9\x0C\x4C\x65\x2C\x53\x1A\xCB\xE4\x86\x32" + + "\x89\xD1\x2E\x32\x94\x09\x90\xD9\x6F\xE6\x9C\x58\xA0\xC0\x17\x2F\x5E\x9C\x35\xEB\x41\xA4\xC0\x79\xCC\xE5\x1B\x9F\xDF\x37\xC4\xBB" + + "\x13\xA2\x29\x4A\x87\x2F\x1E\xBF\xF8\xDB\x77\xB7\xE0\x94\xC9\xEB\xC5\x18\x2D\x51\xBA\x80\x97\x28\x0D\x6F\x08\xFD\xFE\xC9\x9F\xB6" + + "\x81\x02\x2B\x55\x00\xB0\xD9\x3C\x92\x0A\xDC\xD7\x41\xCF\x89\xE5\x8D\x56\xBB\xC3\x31\x47\x20\x6A\x2B\x0F\x51\x24\x03\x6E\x20\xCB" + + "\x62\x0D\x08\xB2\x86\x60\x5C\x22\x26\x24\x8B\x29\x41\xA6\x82\x67\x7A\x3F\xD6\x28\xB1\xC6\x00\xBF\x26\xD1\xE9\xA5\x06\x83\xD4\x60" + + "\x94\x19\x8D\x00\xB3\xDC\x64\x26\xA5\xD2\x64\x53\x9A\xAC\x0A\x23\x32\xB9\xC1\x26\x47\xA5\x55\x69\xB0\x69\x0C\x36\xB5\xC1\xAA\xD6" + + "\xDB\x14\x3A\xBB\x54\x67\x93\xE8\xAC\x42\x9D\x4D\xA0\xB3\xF2\x34\xE6\x9B\x19\xE0\x13\x27\x8E\xE3\xDD\x09\x1F\x4C\x4B\x9F\x00\x0A" + + "\xBC\xEC\xD1\xE7\xA0\x0D\x3C\x74\x00\x13\xF9\xFD\xE0\x78\x27\xE5\xE2\x23\x8E\xD9\xD0\xD1\x9B\x88\xA2\x2F\xFD\xF1\xE1\x89\xCB\x89" + + "\xE5\x0D\xC3\x08\x30\x28\xB0\x42\x8D\x14\xD8\x64\x32\xBE\xFF\xFE\x4D\xA1\xC0\xF4\x83\x0E\x70\xA8\xA6\x21\x58\x5D\xEF\x8F\xC5\x81" + + "\x64\x57\xA8\xB2\xCC\x1F\x01\x4D\x36\x3A\xCB\xF5\x65\x1E\x08\x84\xE5\x06\x08\xAD\x41\x8D\xB5\x3C\xB9\x8A\x23\x55\x10\x35\x2E\xE4" + + "\xD3\xDB\xC6\x7C\x7A\x38\x3D\x0A\xE2\x6F\xBE\x42\x2D\x50\x6B\x84\x1A\x8D\x48\xAB\x15\xEB\x74\x12\x9D\x41\xAA\x37\x92\x12\xC4\x99" + + "\x48\x34\x94\x52\x9D\x45\xAA\x83\xD2\x2C\xD3\x9A\x95\x5A\x93\x4A\x63\x56\x6A\xCC\x32\x8D\x59\xA2\x31\x8B\x34\x16\x81\xC6\xCC\x53" + + "\x9B\x39\x4A\x63\x4A\x52\xBB\x81\x47\xD1\x83\x08\xF0\xF1\xE3\x27\xF0\xFE\xC0\xB3\xD3\xD3\xD0\xF6\xA2\x8B\x1F\x79\x66\xA8\x37\xF8" + + "\x06\x57\xA6\x52\x4C\x92\x10\xFA\x76\x35\xAA\x2B\xEB\xB3\xEF\x7E\xDA\x4D\x16\xFA\x0F\x23\xC0\xFF\xDA\xF7\x95\x4A\xAB\x05\x80\x8D" + + "\x66\xFD\x81\x03\xEF\x8D\x38\xC0\x2F\xF5\x48\xEF\x4E\x25\xB5\xAB\x9E\xD4\x52\xD5\x34\x25\xD6\x38\x39\x12\x6F\x02\x92\x7D\x95\xB5" + + "\x40\xB2\x33\x58\x61\xF7\x85\x2D\x1E\x10\x64\x8F\xC6\xEA\x48\x62\x0C\x6D\x63\x25\x48\x71\x91\x50\xDA\xBD\x7F\x0B\xF5\x66\x91\xE6" + + "\xF1\xA8\x52\x89\x92\x23\x95\x73\x15\x72\x8E\x52\xCE\x55\xAA\x78\x6A\x35\x5F\xA3\x11\x68\x34\x42\x84\x34\xF0\xAC\x17\x6B\xF5\x78" + + "\x0E\x37\x12\x6A\x5C\x1A\x25\x2A\x83\x5C\xA9\x97\x2B\x75\x32\xA5\x5E\xAC\xD0\x8B\x14\x7A\xBE\x42\xCF\x53\x18\x4A\x15\xFA\x62\x99" + + "\x16\x9E\x31\x53\xA6\x4C\x79\xF3\xCD\x37\x5F\x79\xE5\x95\x5E\x47\x8C\x28\xA4\x87\x1F\x60\x50\x60\x02\x70\x1A\xDE\x1F\xB8\xF5\xE1" + + "\x27\x87\x74\x83\x6F\xF8\xD8\xFD\x47\x3B\x4E\x61\x69\x4A\xF4\x3F\x8F\x34\x66\x43\xCD\x30\x00\x8C\xB3\xDE\x0D\x5F\x47\x34\xA5\xC0" + + "\x4A\x8D\x06\x29\xB0\xD9\x70\xE0\xC0\xC8\x28\x70\xCF\xC4\x1D\xE4\xD7\xC9\x28\xCC\x8E\x1D\x3B\x5A\x5A\x5A\xC6\x8C\x19\xD3\x38\x6D" + + "\x56\xE3\xD4\x59\xF5\x2D\x33\x6B\x9A\xA7\x02\xC6\x15\xF5\xCD\xE1\xDA\x46\x4C\x72\xDC\x13\x89\x39\x83\x51\xAB\xD7\xAF\x2F\x83\xE6" + + "\x31\xC4\xB6\x26\x22\xC5\x25\x62\x19\x15\x4E\x13\x86\x71\x17\x97\x08\x2A\xA3\xF0\x78\x94\xB4\x58\x2A\x2B\x91\xC9\x39\x72\x05\x07" + + "\x18\x56\xAA\xF8\x4A\x35\x29\x45\x10\x94\xAB\x75\x22\x95\x4E\xA8\xD2\x41\x23\x5B\x00\x15\xA5\x5E\xA4\xD4\x89\x15\x5A\x89\x5C\x2B" + + "\x92\x6B\x04\x72\x0D\x68\x38\x57\xA6\xE1\xC8\x34\x25\x32\x4D\xB1\x54\x03\xCF\x98\x50\x28\xB4\x7E\xFD\xFA\x55\xAB\x56\xAD\x5E\xBD" + + "\xFA\x99\x67\x9E\x81\x3F\xFD\x4D\x3C\xFC\x0B\x48\xF7\xEC\xA0\xFB\xCB\x0E\xEA\xC1\x55\xE0\xCE\xCE\xCE\x79\xF3\xE6\x4C\x4C\x9B\x90" + + "\x9F\xC7\x58\xB4\xEE\x89\xA1\x53\x60\x3C\x7A\xD4\xFE\xC5\xD9\xAB\xC9\xC5\xFA\xB7\xB3\xFC\x9E\xA1\xA5\xAD\x3C\x7A\xE1\xB7\x77\x8F" + + "\x76\x90\xC6\xFF\xF0\x29\x30\x05\xB0\x69\xC8\x01\xBE\x86\x0F\x93\x83\x48\x17\xF8\x3C\x78\xFE\xB3\xCF\x3E\x0B\x14\x00\x0B\x40\x04" + + "\x70\x01\x74\x4C\x99\x35\x6F\xF2\xCC\x79\xCD\x33\x66\x37\xB6\xCC\xAC\x9F\x32\xAD\xB6\x79\x5A\x75\xD3\xE4\x58\x7D\x73\x05\xC2\x38" + + "\x5E\x5E\x01\x6A\x1C\x31\xBB\x7D\x3A\xBB\x0B\x1A\xB0\xB8\x73\x4B\x8B\x7B\xB6\x64\xB8\x83\x5A\x4C\x75\x50\x13\x98\x47\x15\xF0\xD0" + + "\x8C\x10\xC4\xB0\x58\x06\x62\x5D\x22\x91\x43\xE4\x0D\xCD\x68\x30\x40\x1F\x07\xD8\x5A\x52\x92\xE9\xDA\x08\x63\xA8\xE0\xE5\x91\x7C" + + "\x19\xA6\x57\xAE\xE6\xC9\xD5\x70\x3E\x47\x06\x8F\x0A\xD5\xFD\x13\xD3\x98\xB9\x79\xF9\xEC\xA2\xFC\x42\x36\x18\x83\xC9\x2C\x28\x28" + + "\xB0\x5A\xAD\xD3\xA6\x4D\x7B\xEC\xB1\xC7\x5E\xC3\x07\xB5\x5D\x32\x1C\xBD\x5E\x94\x97\x69\xD9\xC3\x06\x57\x81\x2F\x5F\xBE\x3C\x7F" + + "\xFE\xBC\xB4\xB4\x09\x79\xB9\xCC\x05\x6B\x37\xEE\x3B\x3C\x84\x0A\x0C\xF1\xF3\xD1\xF6\xDF\xCE\x24\x53\x58\xDC\xF6\x0A\x4C\x0D\x26" + + "\x7D\x70\xFC\x52\xDB\x70\xED\x38\x95\x50\xE0\x64\x08\x6D\x1A\x9A\x10\xFA\xA5\x3E\xC6\x87\xE0\x4D\xE2\xC6\xC4\xA5\x89\x7B\x6F\xDC" + + "\xB8\x71\xEA\xD4\xA9\x36\x9B\xAD\xB0\xB0\x30\x2F\x2F\x5F\x24\x96\x88\xA5\x32\x30\xBE\x40\x58\xC8\x2E\x9A\xB5\xA0\x75\xE6\x9C\x85" + + "\xD3\x66\xCD\x9D\x36\x63\xEE\xD4\x19\xB3\x5B\xA6\xCD\x7A\xA0\x65\x66\x53\xF3\xD4\xBA\xC6\x29\x95\xF5\x28\xA8\x76\x87\x63\xB6\xF2" + + "\x10\xB4\x8A\x75\x76\xB7\xC2\x68\x93\x68\x4D\x64\xC1\x13\x59\x20\x91\x32\x19\x73\x14\xFD\x05\x99\xDE\x05\xE7\x15\x89\xE4\x45\x68" + + "\x54\x0A\x60\x86\x96\xB4\x8A\xAC\xB1\x80\x12\x8B\xAD\x9A\xAA\x90\x9F\x52\x46\x16\x3A\x83\xC1\xD3\x02\x9E\x05\xA5\xA8\x2E\x2F\x11" + + "\xC9\xE1\x69\xC1\x28\x28\xCA\xC9\xCD\xCF\xCC\xCA\x9A\x98\x96\x26\x12\x8B\xAB\xAA\xAA\x96\x2E\x5D\xFA\xFC\xF3\xCF\x77\x0D\x79\xBF" + + "\xFE\x3A\x91\xE8\x97\x69\xBB\xBC\x91\x63\xEB\xD6\xAD\x6F\xBC\xF1\xC6\xA0\x6C\xF0\x7D\xFC\xF8\xB1\x2B\x57\xAE\x2C\x58\xB0\x20\x0D" + + "\x29\x30\x6B\xDE\xEA\x47\xDF\x39\x72\x71\x28\x00\x26\xDD\x57\xEF\x1F\xEB\x38\x79\xE9\x8F\xA4\x67\x8F\x3C\x60\x43\x6D\x54\x33\xF8" + + "\xA3\x93\x9D\xC3\x36\x1A\x4C\x29\xB0\x4A\x83\xDB\xC0\x26\xFD\x40\x3A\xB1\xB4\xB4\x0D\xBE\xC1\xEB\xC0\xF7\xFE\xD5\xFD\xA0\x04\x16" + + "\x7E\x0A\x4E\x4B\x7C\xF5\xC5\x17\x5F\x5C\xB7\x6E\x5D\x53\x53\x93\xC1\x60\xC8\xC9\xC9\xC9\xCC\xCC\x14\x4B\xA4\x65\x6E\x4F\x7C\x52" + + "\xF3\xEC\x45\x8B\x67\xB7\x2E\x81\x72\xD6\xC2\xC5\x80\xEE\xAC\xF9\x8B\xE6\x2D\x5E\x36\x6F\xD1\xD2\x39\x0B\x5A\x67\xCF\x5D\xF8\xE0" + + "\xEC\x05\x33\x1F\x9C\x3B\x6D\xFA\xEC\xC9\x53\x66\x34\x3D\xD0\x52\x03\x0D\xE3\xDA\x46\x68\x12\x97\xF9\x41\x84\x21\x90\xF6\xA8\xCC" + + "\x65\x52\x9D\x59\xA4\x36\x00\xC3\xC0\x17\x35\x73\x8B\xB2\x51\xF4\x84\x00\x64\x85\x04\x9D\x67\x3C\xB8\x9C\x30\x02\x27\xA1\x94\x5E" + + "\x52\x3F\xBA\xC6\xC9\x54\x05\xD8\xCE\x2B\xE6\x66\x32\x73\xC7\x4F\x4C\xBB\x6F\xDC\xFD\xC5\x25\xA5\x1E\x8F\x67\xF6\xEC\xD9\x8F\x3F" + + "\xFE\x38\x04\x1B\x64\x13\x37\x12\x7B\x50\xC7\xF6\xED\xDB\xF7\xEC\xD9\xB3\x7C\xF9\x72\x78\x2E\x0E\x70\x35\xD2\xB1\x63\xC7\xAF\x5C" + + "\xB9\xDA\xDA\xBA\x28\x1D\xB7\x81\xE7\xAC\x78\x64\xE8\x14\x18\x3C\x98\xC4\xCF\xC9\xEE\xAB\xDB\x5C\x7E\x29\x86\xBF\xBF\xFA\x7F\x9F" + + "\x9F\xB9\x3A\x6C\x7B\x3E\x26\x14\x78\xEF\x17\x0A\x55\xA2\x17\x7A\x80\xC3\x48\xE0\x63\xE0\x69\x2B\x56\xAC\xD8\xBB\x77\xEF\xBF\xF1" + + "\xBC\x48\xEA\x00\x6F\x04\x68\xB7\x6D\xDB\xF6\xDC\x73\xCF\x6D\xDA\xB4\x69\xF1\xE2\xC5\x91\x48\x44\xA5\x56\x67\x65\x67\x33\x59\x2C" + + "\xB9\x52\xED\x0B\x45\xA6\xCF\x9E\xD7\xBA\x7C\x55\xEB\x8A\xD5\x8B\x96\xAF\x5A\xBC\x72\xCD\xE2\xD5\x6B\x17\xAD\x5C\xB3\x70\xE5\xEA" + + "\x85\xCB\x57\x2D\x5C\xBE\x72\xE1\xB2\x95\x50\x2E\x5A\xBA\x72\xE1\x92\xE5\xF3\x17\x2D\x9D\x3B\x1F\x61\x3C\x73\xD6\xFC\x69\xD3\x66" + + "\x4D\x6E\x99\x51\xDF\x3C\xAD\xB2\xBE\xD9\x5F\x15\x77\x85\x2A\x41\x84\x4D\x2E\x9F\xC6\xEA\x94\x1B\xAC\x32\xBD\x05\x62\x69\x6A\xE6" + + "\x16\x1D\xB7\x51\x29\xB9\x02\xE8\x00\x83\x51\xB3\xAE\x89\x91\x07\x00\x7D\x1A\x27\x92\xEB\xEE\x46\x9D\xD0\xAB\x75\x07\x5B\x91\x57" + + "\xC2\xCB\x62\xE5\x43\xD4\x7D\xEF\x7D\xE3\x98\xAC\x5C\xAB\xCD\x06\x8F\xB1\x65\xCB\x96\xAD\x5D\xBB\x76\x35\x3E\xD6\xAC\x59\xB3\x72" + + "\xE5\x4A\xB8\xDC\x0D\x0D\x0D\x63\xC7\x8E\x1D\xB0\x02\x43\x08\x7D\x65\xC9\x92\xC5\x19\x19\x69\x10\x42\xCF\x5E\xF6\xD0\xD0\x29\xF0" + + "\xEE\x83\x17\x0E\x9F\xFF\x85\xCC\xDF\x18\xF1\x0D\x16\x86\x13\xE0\xB3\x78\x07\x16\x74\x11\x0E\x0D\x87\x08\x93\x89\x1C\xDB\xDE\xF9" + + "\x52\x86\x01\xC6\xE3\xC0\x03\x55\x60\xF0\x34\xF0\x37\x38\x07\x7C\x6F\x0D\x3E\x88\x2B\x02\xD5\xD3\xA7\x4F\xF7\xF9\xFD\x12\x89\x14" + + "\x88\x2D\x2A\x2E\x31\x5A\xAC\x55\xF1\xFA\xB9\xAD\x4B\x81\x58\x84\x2B\xCD\x12\xEF\xAC\x5A\xD3\x0A\x86\x5F\x22\xC3\x95\x25\xF0\x23" + + "\xE0\x79\xF1\xF2\xF9\x0B\x11\xC3\xB3\xE6\x2C\x40\x22\x0C\x00\x4F\x9E\x1E\x6B\x9C\x02\x51\xB4\x27\x52\x45\x44\x98\x0C\x11\x83\x01" + + "\xC3\xA0\xC3\xBC\x44\x97\x93\x9A\x8A\x7F\x47\xE5\x76\xCF\xCA\x43\x30\xA6\xD6\x2B\xA6\x04\xD8\xF4\x25\x14\xD4\x7A\x65\xEA\x4D\x2A" + + "\x17\x41\x4F\xE0\xFB\x03\x36\xC0\x9C\x9D\x5B\x30\x21\x23\x13\x78\x1E\x3F\x31\x7D\x7C\xA2\x4C\xC7\x2F\xD3\xEE\xB9\x77\x2C\x49\xA9" + + "\x33\x90\x8C\x1C\x00\x30\x84\xD0\x00\x70\x66\x66\x3A\x84\xD0\x0F\x2E\x5D\xB7\x77\x68\x14\x18\xF4\xE7\xDD\xA3\x97\x8E\x5D\xFC\x7D" + + "\x98\x37\x25\x1B\x71\x7A\xC9\x97\x3D\x72\xE1\xD7\xFD\xC3\x35\x9D\x83\x52\xE0\x41\x99\xC8\x41\x65\xE4\xC8\xC8\xCC\x2C\xE5\x72\x4B" + + "\x38\x5C\x28\x4B\xB9\x3C\x62\x1C\x2E\x4F\x2A\x57\x78\x7C\xFE\xC6\xC9\x2D\xAD\x2B\x56\x81\xD2\x2E\x5A\xBE\x92\xD2\xDB\x45\xB8\x42" + + "\x91\x8C\xDE\x5F\xB9\x66\xC9\xCA\xB5\x4B\x10\xC6\xA8\x5C\x82\x4B\xF8\xD1\x52\xA8\x2F\x5F\xD3\xBA\x74\xE5\x02\x08\xA7\x17\x2E\x99" + + "\x35\x67\xE1\xF4\x99\x73\xA6\x4C\x9B\xD9\x30\x79\x46\xF5\xA4\x29\x61\x1C\x45\x3B\x83\x15\x56\x6F\xD0\xE0\xF0\xAA\x2D\x0E\x30\x6A" + + "\xB6\x16\xE9\x8A\x22\x3D\x53\x60\xA3\x08\xBA\x8C\x22\x92\xCF\x32\x91\x77\x8B\x4A\xBA\x45\x2D\x3B\x26\x30\xA7\x20\x9D\xF2\xB2\x2F" + + "\xDA\xAF\x01\x36\x56\x72\x52\x91\x51\xFA\xCC\x91\x2A\x79\x72\x25\x57\x86\x4A\x62\x50\xCF\xCE\xCD\x1F\x78\x4E\x2C\x12\x42\x2F\x5D" + + "\xBA\x04\x03\xCC\x9C\xB9\x78\xCD\x3B\xDF\x0E\x89\x02\xB7\xE1\xD5\x0B\xA7\x2E\x91\xB9\x93\xB7\xFF\x00\x12\x65\xD4\x74\x8E\xF7\x8E" + + "\x75\x0C\x4F\x3F\x16\x5E\xCC\x70\x75\xDB\xDE\x41\x5B\xCC\x50\xC8\x66\xC3\x8F\x2C\x36\xFB\xDC\xD6\x25\x60\xF3\xC0\x16\x2F\x9D\xBF" + + "\x64\xD9\x82\x25\xCB\x21\x00\x5E\x04\x31\xF0\xD2\x15\x60\x0B\x96\xAE\x98\xBF\x78\xD9\x02\x5C\x49\x60\x4C\xE3\x99\x22\x19\x41\xBB" + + "\x7A\xDD\xD2\xD5\xEB\x96\xAD\x59\xBF\x7C\xCD\xFA\x65\xB8\xBE\x1C\x5E\xAE\x5A\x07\x22\xBC\x68\xC9\x8A\x05\xAD\xCB\xE6\xCC\x6B\x85" + + "\x28\x7A\xEA\x8C\x59\xF5\x53\x66\x54\x35\x21\x80\xCB\x2B\x6A\xC8\xC8\xB0\xD1\x59\x4E\xE6\x32\x2B\x8C\x36\xD2\x18\x06\x80\x85\x2A" + + "\x3D\x54\xF0\x3C\x6A\xFD\x28\x2A\x5F\x1E\x45\x6F\x32\x77\x5E\xAA\x32\xA7\xE4\xEF\xE9\x29\xD1\x14\xD2\x29\x0D\x69\x4A\xA8\x7B\xCA" + + "\x35\xB2\x04\xEA\x12\x0A\x69\x8E\x54\x91\x62\x5C\xA9\x32\x8B\x99\x3B\x70\x80\x49\x08\xBD\x62\xC5\xF2\xAC\xEC\xCC\xFC\x3C\xC6\xB4" + + "\x45\xAB\xA8\x2C\xCD\x83\xE8\x52\x38\x7E\x3E\xFF\xD5\xD9\x9F\xCE\xD2\x52\x28\xFF\x4D\x2C\x39\x29\xFA\x7F\x1F\x9E\xE8\x6C\x1B\xAE" + + "\x10\x1A\x14\x78\xEB\x9E\x2F\x24\x72\x39\x06\xD8\x02\x00\x0F\xA4\x0D\x5C\x58\x88\x00\x86\xD8\x78\xCE\xC2\x56\x64\x8B\x16\xCF\x4D" + + "\x32\xBC\x70\xE9\x72\x44\xEC\x92\xE5\x84\xDE\x39\x8B\x00\xEF\xA5\x08\x6C\x40\x1A\xD8\x5E\xDE\x65\x84\x5E\x8A\x61\x04\x30\x36\xA8" + + "\x90\x97\x4B\xB0\x44\xA3\x96\x70\x2B\xEA\xD0\x42\x00\xCF\x9A\xD3\xD0\x32\xB3\x7A\x52\x0B\x00\xEC\xAB\xAC\x75\x87\x63\x10\x45\x5B" + + "\x3C\x01\x10\x61\x00\x18\xA2\x68\x00\x58\xA2\x35\xA1\x89\x18\x5A\x13\xA9\x4B\xB4\x96\x51\xB4\x6C\x97\x02\x4A\x7B\xA9\x97\x74\x41" + + "\xA6\xE7\xC2\xA4\x87\xD9\x14\xAE\x54\x7A\x81\x5E\xE5\x9A\x0E\x33\x46\xB7\x9B\x20\x03\xB7\xB9\xC5\xDC\x2C\x14\x42\x67\xE1\x75\xCF" + + "\x34\x9B\x30\xF1\xFE\xB4\xF4\x41\x09\xA1\x4F\x9C\x38\x76\xE5\xCA\x65\x68\xD8\x64\xE7\x64\x81\x02\x4F\x5D\xB0\x8C\x42\x6E\xB0\x15" + + "\xB8\xFD\xD0\x8F\xBF\x9C\xBB\xFA\x7F\x7F\x93\xFE\xE7\x14\x86\xA1\xE5\xFF\xE5\xD9\x9F\x86\x67\x71\x3F\x56\xE0\x9F\xB7\xB6\x7D\x26" + + "\x92\x48\x92\x0B\xFA\x3F\x1A\x78\x52\x3B\x08\xA1\x79\x7C\x01\x0A\xA1\x71\x14\x0D\xC1\x33\x87\xC7\xE3\xF2\xF8\x72\xA5\xCA\x5D\xEE" + + "\x6F\x68\x9E\x42\xB4\x77\x3E\xC0\x4C\x33\xD4\x47\x85\x49\x26\x82\x9C\x30\x68\xF4\x42\xD8\xBC\x0A\xD1\x4B\x00\x46\xF4\xAE\x00\x7A" + + "\x57\xCC\x6F\x5D\x36\x17\x42\xE8\x79\x8B\xA6\xCF\x9A\x37\x65\xC6\xAC\x86\x29\x08\xE0\x48\xBC\xC9\x1F\x8B\x43\x33\xD8\x11\x88\x92" + + "\x59\x96\x04\x60\xD2\x9B\x85\xA6\x42\xEA\x2D\x32\x3D\x9A\xD4\x2C\x37\xD8\x46\x11\x2C\xE9\x22\x4C\xB7\x9E\x0A\xDC\x33\xA5\x6D\x4F" + + "\x7D\xA6\xF0\xA6\x5E\xF6\x24\x99\x54\x18\x85\x25\x19\x0C\xD6\xB8\x09\xA8\x13\x8B\x95\x9B\x67\x36\x5B\x1A\x1B\x1B\x17\x2F\x5E\xBC" + + "\x6C\xD9\xB2\xA5\x4B\x97\x2E\xC3\xC7\x92\x25\x4B\xD6\xAC\x59\x53\x5B\x5B\x3B\xC0\x4E\x2C\xB8\xA3\x44\x81\x57\xAF\x5E\x95\x83\x01" + + "\x6E\x99\xB7\x74\x70\xD7\xAF\xEE\x4D\x3E\x0E\xF6\x1F\xED\x38\xDA\xFE\xDB\xD9\xC4\xFC\xE7\xBF\x97\x02\x93\xAF\x7C\xF8\xFC\x2F\x84" + + "\xAE\x21\x4F\x96\x80\x15\x78\x4B\xDB\x27\x42\x91\x70\xB0\x52\xEA\x80\xA7\x81\xBF\x81\xD7\x81\xEF\x11\x27\x24\xDE\x08\x2F\x27\x4F" + + "\x9E\xEC\xF3\xF9\x14\x4A\x65\x6E\x5E\x7E\x51\x49\xA9\xDE\x68\xAA\xA8\xAE\x9D\x31\x67\x3E\x90\x8C\x6C\xF1\x32\x82\x34\xD1\x64\x68" + + "\xE8\x2E\x59\xB1\x06\x42\x65\x28\x97\xAF\x5A\xB7\x72\xCD\x43\x10\x45\x03\xC3\x20\xCB\xF0\x53\x50\xEF\xD9\x0B\xD1\xC0\x12\xFC\x3A" + + "\xD0\xDB\xD8\x32\xAD\x76\x52\x4B\xAC\x61\x32\xA5\xC0\x10\x42\x9B\x5C\x3E\x32\x98\x84\xD7\x14\x39\x88\xE1\x85\x46\x65\x78\x25\x53" + + "\xD9\xA8\x5E\x65\x96\x1E\x48\xF7\x0C\xA7\x7B\x9E\xDC\x33\xF0\x4E\x31\x4A\xA8\x59\xC5\xBC\xEC\xBC\xC2\x89\x59\x39\xF7\x8E\x1D\x07" + + "\xA2\x5A\x50\xC8\xF6\x96\x97\xCF\x9E\x3D\x7B\xC3\x86\x0D\x4F\x3D\xF5\xD4\x8B\x2F\xBE\xF8\xEA\xAB\x68\xC3\xA8\x1D\x3B\x77\x52\xB6" + + "\xFD\xDF\xFF\xDE\xBB\x77\xEF\xA0\x0C\x23\xE1\x89\x1C\x57\xD6\xAE\x5D\xC3\x60\x64\xE7\xE5\x31\x27\xCF\x59\x8C\x9D\x60\x90\x85\x02" + + "\x25\x3A\x3D\xDE\x79\xA2\xE3\xF7\x33\x89\x15\x48\x23\xCF\xD5\x70\xDA\xE9\xC4\xD4\xD1\x3F\x87\xA7\x1F\x8B\x28\xF0\x96\xDD\x9F\xF2" + + "\x05\x28\x2B\xA5\xCB\xE5\xFC\xE4\x93\x81\x26\xB5\x23\xC3\x48\xEF\xBC\xF3\xCE\x9B\x6F\xBE\xB9\x8B\x76\x90\x54\x1B\x5B\xB7\x6E\x7D" + + "\xE6\x99\x67\x36\x6E\xDC\xD8\xDA\xDA\x1A\x8D\x46\x95\x4A\x15\x83\xC9\x64\x30\x59\x0A\x95\xDA\xE3\x0B\x34\x4F\x9D\x4E\x61\xDC\xBA" + + "\x6C\x25\xD0\xDB\x8A\x48\x5E\xBD\x6C\xE5\x5A\x68\xFA\x2E\xC5\x7D\x5A\x20\xCB\xF0\x53\x88\xC0\x1F\x9C\xB7\x70\xC6\xDC\x05\x2D\x0F" + + "\xCE\x99\x34\x75\x46\x7D\x73\x4B\x0C\x4F\xAB\x04\xF9\x25\xF4\x9A\xDD\x7E\x90\x5F\x12\x42\xF7\x6A\x6A\x8B\x73\x54\x5F\x34\xA6\x34" + + "\x89\xE9\x94\x42\x49\xEF\xF4\x22\x46\xDE\x41\x78\x43\x09\x24\x63\x4B\x9C\x5C\x58\x92\xCE\xC8\x4D\xCF\xCE\x99\x90\x06\x47\xBA\x42" + + "\xA1\xA8\xAC\xAC\x84\x47\xDA\x73\xCF\x3D\xB7\x65\xCB\x96\x7F\xFD\xEB\x5F\xAF\xBE\xFA\x2A\x19\x16\x87\xCA\xCB\x78\xE9\x46\xCF\x89" + + "\x1C\x0B\x16\x2C\x18\xE0\x44\x0E\x38\x00\x60\x08\xA1\xD7\xAD\x5B\xCB\x64\xE6\xE4\xE7\x32\x9B\x67\x2D\x18\x0A\x05\xDE\x7D\xF0\xC2" + + "\x27\xA7\xAE\x7C\xD7\x79\xFB\x2F\x60\xE8\xD5\xA8\xE9\x1C\xD0\x0C\x1E\x1E\x05\xFE\xE0\x34\xCA\x0B\xCD\xE1\x72\x98\x2C\x86\xD7\xEB" + + "\x1E\x48\x62\x77\x6A\x22\x07\xF8\xDB\x35\x26\x72\x80\xAF\x6E\xDF\xBE\x9D\x4C\xE4\xD8\xB6\x6D\xDB\xE6\xCD\x9B\x57\xAF\x5E\xDD\xD4" + + "\xD4\x64\x32\x9B\xD1\x44\x8E\xAC\x2C\x81\x50\x64\x77\xBA\x1B\x9B\x27\xCF\x5F\xB8\x64\xC1\xA2\x65\xAD\x4B\x56\xB4\x2E\x5B\x85\x60" + + "\x5E\xBA\x12\x78\x86\xE0\x79\x6E\xEB\x52\xA0\x77\xDA\xEC\x79\x88\xDE\x69\x33\xEB\x9A\xA7\x54\x37\x4C\x0A\x55\xD7\x7B\xA3\x35\xA4" + + "\xFF\x99\xA2\x17\x14\x58\x67\x77\xF7\x34\xBC\x0E\xD1\xD3\x3B\xC0\x7D\xF1\xFC\x97\x00\x83\xDD\x77\xFF\x84\x1C\x26\x8B\x95\x97\x4F" + + "\x2C\x2B\x2B\xAB\xA0\xA0\xD0\x66\xB3\x4D\x9D\x3A\x15\x1E\x5A\xD4\x0C\xCA\x57\x93\x07\x35\xFB\xAA\xAF\x79\xD1\x83\x9B\x52\xA7\xB3" + + "\xB3\xF3\xA1\x87\xD6\xC3\xA3\x1A\x14\xB8\x69\xC6\x7C\xB8\xFD\xEF\x7C\xDB\x31\x88\x00\x93\x1E\xAC\xCF\xCF\xFE\x94\x6C\x00\xFF\x8D" + + "\xE2\x67\x3A\xC3\x10\x45\x7F\x79\xF6\x67\x92\x4E\x68\x18\x14\x78\xF3\xAE\x0F\x8B\xF1\xD6\x2A\x81\x80\xEF\x8B\x2F\x3E\x1F\xC8\xCE" + + "\x0C\x37\x30\x95\x92\x3E\x35\x98\xEC\x0F\x0C\xDE\x6E\xB7\xDB\xD9\x6C\x36\x83\xC1\x14\x8B\x25\x32\xB9\x02\x4C\x2C\x91\x96\x94\x72" + + "\x16\x2D\x59\x4E\x82\x67\xA0\x77\xCA\xCC\xD9\x40\x6F\xFD\x03\x2D\x55\xF5\x93\xC2\x35\xA8\xDD\x5B\x16\x48\x8C\x1E\x01\xB7\xA4\x24" + + "\x46\xBD\x93\xB4\x72\x93\x0B\xF0\xF6\xFF\x85\x02\xDF\x80\xDD\x7D\xF7\xDD\xC1\x60\x10\xDA\x0F\x10\xF4\x42\x1C\xF2\xEC\xB3\xCF\x52" + + "\x69\x81\xFA\x9A\xF9\x3C\x3C\x8B\x19\x88\x02\x5F\xBE\xDC\xF9\xF0\xC3\x0F\xE5\xE6\x32\xC1\x1A\xA7\xCD\xDB\xFB\xED\xE0\xEF\x70\xDB" + + "\x76\xE8\xC2\x57\xE7\x7E\x06\x80\x6F\xFB\x05\x0C\x7D\xD1\x4B\x1A\x0E\x47\xDB\x7F\x1D\x6A\x80\x13\xDB\x8B\x9E\xFE\xEF\x73\x3B\xDE" + + "\x67\xB3\xF3\x21\x92\x0D\x87\x43\x5F\x7D\xF5\xE5\xB9\x73\xE7\x6E\x6C\x7B\xD1\x01\x2E\x66\x20\x27\x90\xB9\x96\x38\x1F\xDC\xBF\xC1" + + "\xFF\x81\x02\x60\x01\x88\x00\x2E\x80\x8E\xF9\x40\xEF\x82\xD6\x99\x10\x39\x53\xF4\x36\x36\xA3\x65\x0C\x51\x12\x36\x07\xC8\x12\x7F" + + "\xAD\xCD\x45\x94\x96\xAE\xC0\x84\x61\x50\x66\x68\x1B\x9B\xDD\x3E\xA3\x33\x30\xEA\x1A\x0D\xE0\x6B\x28\x6D\x5F\xA1\x35\xD8\xE8\xD1" + + "\xA3\x5B\x5A\x5A\xE8\xCB\x09\xE9\xB9\xEC\xE8\xAB\x14\xFA\x79\xF4\x13\x60\xB8\x25\x70\xDB\xFE\x0A\x60\x50\xE0\xCB\x1B\x36\x3C\x92" + + "\x97\x9F\x9B\xC7\x62\xD6\x4D\x9D\xB5\xF7\x50\xFB\x3B\x47\x06\x59\x81\xC1\xBE\xC1\xBB\xFE\xDE\xDE\x29\x38\xFA\xC1\xF0\x9F\xFB\x86" + + "\x3E\xC1\x1D\xDE\x1F\xF8\x17\xB4\x3F\x70\x1E\x8B\xC1\xCA\x89\xC5\x2A\xBF\xFE\xFA\x2F\x36\xF8\x86\x9F\x3E\xF4\xD0\x43\x43\xB4\x9C" + + "\xF0\x65\xDA\x32\x60\x92\xD3\x82\xAC\xDE\xD9\xB1\x63\x07\xC8\xF2\x98\x31\x63\xE6\xCC\x6F\x9D\x39\x67\xC1\xD4\x59\x73\x9A\x93\xF4" + + "\x86\x6B\xEB\xBC\x91\x4A\x87\x3F\x08\xA2\x0A\x88\xE2\xC6\x2D\xEA\xAC\x82\x0A\x60\x9C\xCC\x69\xE5\x24\x48\xD3\x18\xF6\x77\x29\x30" + + "\x9D\xC0\x81\x18\x7C\xC8\x30\x2F\xE8\x87\x43\xA5\x52\x11\x80\xFB\xA1\xC0\x27\x2E\x5D\xEA\x7C\xF4\xD1\x0D\xF9\x00\x70\x2E\xB3\x6E" + + "\xCA\xCC\x3D\x48\x81\x07\x0D\xE0\x77\xF0\xFC\xC1\x77\x8F\x74\x1C\x3E\xFF\xEB\xD9\xAB\x7F\x53\x7A\xCF\xD0\x72\x8F\x7C\x74\xF2\x72" + + "\x72\x07\xF0\xA1\x55\xE0\xA7\x5E\xDF\xC7\x62\x66\x83\x02\xD7\xD4\x54\x1F\x3C\x78\xF0\xEC\xD9\xB3\xBD\xBA\x01\xA5\xC0\x04\x60\xF0" + + "\x1C\xE2\x42\x83\x02\x70\x0A\xCC\x2F\xF7\xB1\xA0\xFF\xC1\x39\xF3\xA7\xCD\x9A\x3B\x79\xFA\x83\x0D\x93\xA7\x56\x37\x36\x47\x6B\xEB" + + "\xFD\x95\x55\xCE\x40\xC8\xEC\x06\xE1\x75\x91\x4E\x66\xD2\xCF\x4C\xB8\x55\x99\x49\x5A\x2B\x07\x79\x49\x63\xD8\xA7\xB7\xFB\xBA\xC6" + + "\x81\xFB\x52\xD4\x7E\x1A\xA5\xCC\x23\x95\x52\x07\x6E\x49\xFF\x14\xF8\xD2\xC6\x8D\x8F\x15\x14\xE6\xE7\xE5\x32\x6A\x1F\x98\xBE\xF7" + + "\xD0\xF9\xBD\x83\xA7\xC0\xEF\xE0\x14\xD0\xEF\x1D\xED\x38\x96\x5C\x45\x38\xE2\x2C\x8D\x14\xC0\xD4\x76\x0D\x43\x9D\xF1\x13\xB5\x81" + + "\xBF\xFB\xE5\x89\x97\xDB\x18\xD9\x19\x0C\x46\x4E\x43\x43\xDD\xE1\xC3\x87\xCF\x9C\x39\x73\x6D\x05\x5E\xBF\x7E\xFD\x48\xA5\xD4\x99" + + "\xF6\xE0\x1C\xA0\x77\x52\xCB\xB4\xF8\xA4\xC9\xB1\x78\x43\x38\x56\xE3\x09\x57\xD8\x3C\xE5\xC6\x32\x60\xD5\x96\x4C\x5F\x05\xA5\x8D" + + "\x90\x8C\xD3\x5A\x75\x21\x9D\xD4\x61\xD2\x89\x55\x7E\xDD\x21\xF4\x5F\xDA\x70\x02\x0C\x37\x80\x54\xE0\x66\x2C\x5E\xBC\x18\x6E\xDB" + + "\x69\x7C\x5C\x13\xE0\x4E\x04\x30\xBB\x00\x14\xB8\x66\xD2\xB4\x3D\x07\x2F\x0C\x56\x08\x4D\xBA\xA0\xC9\x06\x48\x27\x92\x59\xEC\x46" + + "\x9C\xA5\x11\xB1\xD3\x9D\x7F\x90\xEE\xF7\x23\x17\x7E\xDB\x93\xD8\xFE\x7B\xA8\x14\xB8\xED\x20\x52\xE0\x8D\xDB\x76\xE6\x64\xA6\xE5" + + "\x30\xB2\x1F\x78\xA0\xF9\xE8\xD1\xA3\xC4\x13\x7A\x05\x18\x0E\xF8\x29\xB8\x13\xF8\x0C\x71\x24\x3A\xC6\xC3\x00\x70\xF3\xB4\x19\x8D" + + "\x93\x5B\xEA\x26\x4D\xAE\x6E\x68\xAC\xA8\x89\x07\xA2\x31\x97\x3F\x68\x71\xBA\x75\x56\xBB\xC2\x60\xC6\x59\xAB\x8C\x60\x12\x2D\x2A" + + "\x13\x39\x27\x0D\x16\x85\x11\xCC\x0A\x30\xE3\x04\xB2\x65\x5A\x9B\x43\x6B\x07\x92\xBD\xA9\x53\x29\x07\x6E\xC3\x9C\x56\x16\xAE\xBE" + + "\xD1\x68\x1C\x37\x6E\x5C\x20\x10\x38\x79\xF2\xE4\xB5\x19\xC6\x21\xF4\xA5\xC7\x1F\x7F\x9C\x8D\x00\x66\x54\x35\x4D\x01\xDE\xF6\x0D" + + "\x96\x02\x63\x1F\xDD\x73\xB0\xFD\x83\xE3\x97\x4E\x5E\xBA\x3D\x33\xC8\xF6\xD3\xA8\x87\xD7\xA9\x4B\xBF\x27\x07\xEA\x86\x0A\xE0\x3D" + + "\x87\xCE\x1F\x38\xF5\xF3\xC3\xCF\xBF\x96\x9D\x35\x31\x3B\x27\x6B\xFA\xF4\x69\x44\x7B\x7B\xFA\x00\x45\x2F\xF8\x89\xCF\xE7\x03\x77" + + "\x02\xCF\xA1\x34\x60\xD8\xD2\xCA\x82\xF6\xD6\x37\x4F\xA9\x6D\x6C\x8E\xC5\xEB\xC3\xB1\x6A\x5F\x38\xEA\xF0\xFA\x4C\x76\x87\xC6\x64" + + "\x01\x62\x71\xD6\x2A\x83\x48\xAD\x17\xAA\x74\x24\x89\x15\x21\x59\xAC\xA1\x78\x4E\x90\xAC\x42\x9A\xEC\x1C\x95\x32\x08\x34\x70\x1B" + + "\xCE\xC4\xEE\x44\x84\xF5\x7A\x3D\x9B\xCD\x06\x86\x3F\xFD\xB4\x6B\x00\xB0\x57\x86\x01\xE0\x8E\x8E\x8E\x27\x9E\x78\xA2\xA8\xA8\x30" + + "\x2F\x37\x27\xD6\x38\x19\xF5\x91\x0E\xB6\x02\x7F\x78\xA2\x93\xE4\xDF\xF8\xDB\x02\x7C\x26\xF9\xF0\x02\x1D\x7E\xEF\xD8\x60\xB6\x50" + + "\x7A\x02\xBC\xF7\xDB\x0B\xEF\x9D\xB8\xBA\x6A\xD3\xD6\xEC\xCC\x89\x59\xD9\x99\x73\xE7\xCE\xE9\xF5\x21\x4E\x5E\x92\xFD\x65\x3F\xF9" + + "\xE4\x93\xB1\x63\xC7\x16\x15\x15\x81\xE7\x10\xF9\x1D\x2C\x80\xFB\x1A\x6D\xA2\x27\x76\x6F\x6C\x9E\x12\x6F\x6C\xAE\x8E\x37\x54\x54" + + "\xD5\x06\x23\x95\x1E\x5F\xD0\xE6\x70\xEB\x4D\x56\xA5\xCE\x20\x56\xE9\x04\x2A\xAD\x40\xA9\xE1\x2B\x34\x3C\x9C\xE8\x06\xEA\x02\xA5" + + "\x16\x9B\x06\x90\x16\xA9\x75\x14\xD2\xA0\xD5\x89\xA9\x94\x40\x5D\x0E\x9B\x03\x0C\xD3\x8D\xBC\xD3\x4F\xB6\xA9\x33\xE1\xB7\xE0\x19" + + "\xD3\xD2\xD2\xB2\x63\xC7\x0E\x32\xDE\xDD\x73\x86\xC6\xF5\xC2\xFC\x97\x9D\x58\x6A\x7C\xDC\x73\xCF\x3D\xB1\x58\x8C\xDE\x0C\xEE\x79" + + "\x17\x89\x02\x6F\xDA\x84\x00\xCE\xCD\x65\xC4\xEA\x1F\x80\xE7\xF7\x60\x29\xF0\x1E\x2C\x32\xBB\x0F\x9E\xFF\xF0\x64\xE7\x99\xBF\x47" + + "\x16\xBB\x6B\xD0\x4B\x01\xFC\xF1\xC9\xCB\x7B\xD0\xF6\x71\x43\x07\x70\xFB\xFE\xA3\x9D\x8B\x1F\x7E\x8A\x91\x9D\x9E\x91\x91\xB6\x78" + + "\x71\x2B\x99\x86\x45\xDD\x7A\xCA\x0D\xA8\x06\x70\x45\x45\x05\x78\x0B\xF1\x9C\x81\x77\x62\xA5\x40\x4B\x75\x3E\x93\xE9\x49\xDB\xB7" + + "\x6F\x87\x12\xEA\x64\x6B\x15\x00\xB8\x0E\xD3\x5B\x59\x1D\x0F\x45\x63\x5E\x7F\xD8\xE1\x2E\x37\xDB\x1C\x1A\x90\x56\xB5\x56\x98\x40" + + "\x57\xC5\x91\x2A\x93\x2B\x79\x94\x78\x71\x9E\x0A\x60\x86\x1F\x61\x9E\x13\x24\x63\x98\xCD\x83\x03\x30\x9D\x64\x00\xD8\xEF\xF7\xAF" + + "\x5C\xB9\x12\x1A\xA5\x4B\x97\x2E\x7D\xF8\xE1\x87\x93\x73\x24\x5F\x7D\xF3\xCD\x1D\x70\x51\xA8\xB1\xA5\x81\x6F\x6E\x46\x7F\x76\x8A" + + "\x44\x22\x68\xD5\x2C\x5F\xBE\xFC\xC7\x1F\x7F\x84\xFB\x44\x0D\x03\xD2\x19\xA6\x03\xCC\x4A\x00\x3C\x68\x21\xF4\x9E\x43\x58\x81\xBF" + + "\xB9\xF0\xD1\xC9\xCB\x67\x92\xED\xC0\xAE\x9D\xEC\xFF\x66\x96\x9C\x50\xF9\xC7\x67\xDF\x5D\x6D\x3B\x34\x94\x0A\x8C\x2B\x73\x96\x3F" + + "\xC4\x62\x64\x65\x64\xA6\xAF\x5E\xBD\xF2\xC2\x85\x0B\x70\xF7\xE9\xD0\x12\x7F\x00\x65\x06\xDF\x58\xB5\x6A\x15\xF8\x89\x50\x28\xEC" + + "\xD5\x8B\x6E\x6C\x73\x33\xE2\xCC\x50\x07\xDF\x86\xDF\x02\xF5\x22\x5B\x93\x82\xE7\x83\xFF\x03\x05\xC0\x02\x10\x01\x5C\x00\x1D\x35" + + "\xB5\x8D\x95\x55\xF1\x70\xB4\xCA\x1F\x8C\xBA\xDC\x3E\xAB\xDD\x65\x30\x59\xD5\x1A\xA3\x0C\xE0\x54\xA8\x09\xBD\x54\x62\x77\x92\x9D" + + "\x0A\xDE\x41\x39\xE7\x70\x49\xC1\x8C\x79\xD6\x8D\xFA\xCB\x99\x55\xD7\x6B\xE3\x26\x4C\xBC\x6F\xFC\x84\xB1\xF7\x8F\x07\xBB\x77\xDC" + + "\xFD\xF7\xDC\x37\x8E\xC1\x62\x59\xAC\xD6\xA6\xA6\x26\xF8\x1A\xEB\xD6\xAD\x83\x6F\x05\x5F\x78\x07\xCE\x51\x02\xE2\xFC\x72\x1F\x3B" + + "\x15\xBE\xD4\x8F\x99\x58\xF4\xDE\x2C\x78\x1F\x82\x22\x08\x8D\x56\xAF\x5E\x0D\xB7\x0A\xEE\xE2\xF1\xE3\xC7\xE9\x37\x92\xCC\xC4\x82" + + "\x10\xFA\xC9\x27\x37\x15\x17\xB3\x59\x2C\x46\x65\x5D\x33\x56\xE0\x8B\x78\x3A\x47\xFB\x00\x0D\x3F\x05\xDA\xDB\x0E\x9E\xFF\xF8\xD4" + + "\x15\x3C\x8B\xE3\x4F\x32\x91\xE3\x6C\x52\x97\xCE\x26\xCB\xA1\xB2\xAB\x3D\xEA\x57\xFB\xB4\x73\xC9\x72\x88\xEC\xEC\x95\x3F\xC9\x7F" + + "\xF1\xD5\xF7\x3F\xE3\xB9\x1C\x03\xBD\xBC\x7D\x5C\x73\x68\x01\xA1\xBE\xE8\x96\x79\x4B\x73\x59\x39\x59\x59\x99\x8F\x3E\xFA\x48\x47" + + "\xC7\x45\xB8\xD1\xD4\x7D\x87\x3A\x78\x02\xF8\x03\x78\x05\xD0\x7B\xEF\xBD\xF7\x82\x9F\x80\xB7\xD0\xFB\xAE\xFA\x03\x70\x0A\xB4\x64" + + "\x7B\xD1\x97\x71\xD6\x58\xB2\xBD\x28\x40\xFB\xEC\xB3\xCF\x3E\xF2\xC8\x23\x4B\x96\x2C\x69\x6C\x6C\xB4\xD9\x6C\xC5\x25\x25\xD9\x39" + + "\x39\x79\x79\x05\x05\x85\xEC\xFC\x82\xC2\x82\x02\x76\x21\xBB\xA8\x32\x56\x1B\x8E\xC6\xFC\xC1\x88\xDB\x1B\xB0\x3B\xDC\x26\x8B\x5D" + + "\xAB\x37\x2B\xD5\x3A\x89\x5C\xC5\xC7\xC9\x24\xA9\x1C\x94\x78\x77\x15\x09\x5E\x30\x2F\xC5\x0B\xE6\x71\xAA\x39\xCC\x36\x94\xA5\x28" + + "\xFF\xA4\x6A\xF0\x3B\xB1\x88\xD1\x97\x1F\x66\x17\x14\xA7\x33\x72\xEF\x4F\xCB\x1C\x7B\xFF\x84\xF1\x13\xD3\xA4\x32\x79\x20\x10\x98" + + "\x32\x65\x4A\x6B\x6B\xEB\x86\x0D\x1B\xB6\x6E\xDD\xFA\xF6\xDB\x6F\xEF\xDA\xF5\x16\x44\x1A\xD7\xBB\xC1\x37\x55\x27\x87\xC1\x60\x28" + + "\x2D\x2D\x85\xE8\xA8\xBE\xBE\xFE\xDD\x77\xDF\x05\x56\xCF\x9F\x3F\x4F\xEE\x1F\x90\x0C\x61\xD5\xB1\x63\xC7\xE0\xCD\xA7\x9F\x7E\xBA" + + "\xA4\xA4\x38\x37\x37\x27\x1A\x6F\xDA\x7D\xF0\xC7\x3D\xB8\xE1\xBA\x07\xEF\xC1\x3D\x70\x7B\xFB\xE0\x85\x0F\x4F\x5E\x86\x36\xF0\x89" + + "\x8E\x3F\x90\x5D\x4A\x5A\xCF\x3A\x3E\xE1\x38\x36\x5C\xF9\xFD\x78\xF2\xE5\xF1\xAE\x97\xBF\x1F\x43\x95\x84\x91\xFA\xB1\x8B\xA8\x92" + + "\xB0\x8B\xC9\xF2\xE2\xEF\x47\xB1\x51\x95\x84\xB5\xFF\x7E\x24\x51\xFF\x0D\xCA\x23\xED\xBF\x93\xB2\xBB\xFD\x96\x28\x2F\xFC\x86\xEB" + + "\xBF\x51\xF5\xC3\x17\x52\xEC\x57\x52\xF9\xF6\x7C\xE2\x9D\x6F\x93\x65\xC2\xCE\xFF\x4A\xCA\x43\x3F\xFE\x82\xCA\xF3\xBF\xC2\xE3\x6C" + + "\xF7\xC1\x41\xBB\xBC\x29\x86\x6E\xDC\xE1\x8E\xB7\xFE\xF3\x43\xDD\x94\x07\x01\x60\x26\x93\x01\xF2\x00\xB7\x18\x6E\x34\xB9\xEF\x64" + + "\x3F\x4A\x78\x67\xFF\xFE\xFD\x75\x75\x75\x63\xC6\x8C\xE1\x70\x38\xE0\x27\x94\xCF\xA4\x28\xB0\xB6\x1F\x1B\x7C\x03\xC0\xE0\xAB\xBB" + + "\x76\xED\x6A\x6B\x6B\x03\x80\x1F\x7F\xFC\xF1\x65\xCB\x96\x4D\x9B\x36\xAD\xB2\xB2\xD2\x68\x32\x01\xB4\x79\xF9\x05\x25\xA5\x1C\x60" + + "\xD2\xED\xF5\xD7\xC4\x1B\xE2\xF1\xC6\xDA\x78\x63\x4D\x6D\x03\xA0\x1B\xAD\xA8\x46\xF4\x06\xC2\xDE\xF2\xA0\xC3\xE9\xB5\x58\x1D\x06" + + "\x83\x05\x3C\x57\xAE\xD0\x88\xA5\x0A\x9E\x54\x4E\xD1\x4B\x76\x63\x00\xC3\x15\x21\xC9\x23\x0B\x75\xB2\x67\x12\xC6\x1B\xA5\xAC\xEB" + + "\x53\x81\x6F\xDC\xE0\xA3\x92\x86\x3F\x36\x31\x3E\x4C\xD6\x15\xE6\x14\x96\x66\xB0\x0A\x26\x64\xE6\xDC\x9F\x96\x71\xDF\xF8\x89\xA5" + + "\x1C\xAE\xD5\x6A\x85\x6F\x0E\xCD\x66\x50\xCE\xCD\x9B\x37\x83\x2C\xEF\xDE\xDD\xF6\xD6\x5B\x6F\x83\xBD\xFD\xF6\x6E\xB0\x1D\x3B\x76" + + "\xEE\xDF\xFF\x2E\x3C\x3B\xC7\x8F\x1F\x9F\xB2\x1A\x89\x7E\x90\x26\x8D\x5E\xAF\x97\xCB\xE5\x70\x03\x4A\x4A\x4A\xE6\xCD\x9B\x07\x57" + + "\xB9\xBD\xBD\xFD\xA7\x9F\x7E\x82\xF2\xEC\xD9\xB3\x70\x47\xA1\xF2\xD8\x63\x8F\x15\x14\xE4\xB3\x58\x39\x81\xCA\xAA\x7D\xDF\x9C\x79" + + "\xFF\xDB\x1F\xDE\x3D\x78\xEE\xBD\x43\xDF\x0F\x8A\xC1\x47\x7D\x70\xE4\x87\x2F\x4E\xB6\x7F\x7E\xA2\xFD\x8B\x13\xA8\xFC\xFC\xE4\x85" + + "\xCF\x49\x25\x69\x9F\x25\x4B\xB0\x4F\x8F\x5F\xF8\x14\x55\xA0\x3C\xFF\x29\x94\xE8\x25\x2E\x8F\x9D\x47\xE5\xF1\xF3\x9F\x1C\x87\x0A" + + "\xB6\x63\xB8\x0E\xE5\xB1\xF3\x1F\xE3\x92\xAA\x7C\x4C\xEC\xE8\x8F\x1F\x27\xEB\x1F\x1D\x25\xEF\x9C\xFF\xE8\xC8\x8F\x1F\x42\x79\xF4" + + "\xC7\x8F\x8E\xFE\x00\xE5\x87\x47\x7E\x24\x25\x65\x1F\xA0\xF2\x87\x0F\x49\x79\xF8\x07\x5C\xFF\xE1\x03\x5C\x87\xF2\x83\xC3\x3F\x1C" + + "\x38\x8C\x4A\x62\x07\x0E\x7F\x4F\xDE\x81\x8B\x76\x80\x54\x92\x65\xC2\xBE\xFD\x9E\x94\x70\x29\x48\x89\xAE\xC9\xA1\x41\xBB\xBC\x3D" + + "\xAF\xF6\xFB\x47\xCE\xEF\xFE\xFC\xB8\x2F\x12\x83\x1B\x0A\xEE\xF1\xDC\x73\xCF\x42\x2B\x09\xB4\x17\xB8\x85\xFB\x0E\x25\x78\x14\x78" + + "\x02\xF8\x03\x78\x05\xF8\x06\xE9\xB8\xEA\xD5\x7F\xB4\xC9\xD5\x48\xE0\x69\xE0\x6F\xA0\x01\xD8\x1B\x13\x07\x72\x47\x7C\x80\xFC\x3E" + + "\xF4\xD0\x43\x33\x67\xCE\xAC\xAE\xAE\x76\xB9\x5C\x0A\x85\x02\x04\x96\x5D\x5C\xC2\x13\x08\xD5\x5A\x7D\x99\xCB\x1B\xAE\xAC\x06\x8B" + + "\x54\x56\x47\x2B\x6B\x00\xDA\x48\x45\x75\xA4\xA2\x2A\x1C\x89\x85\xC2\x15\x20\xBC\x60\x40\xAF\xD3\xE5\xB5\xDA\x9D\x06\x93\x4D\xAB" + + "\x33\x01\xEA\x52\xB9\x4A\x8C\x12\x57\xC8\xC9\x3E\x0C\x14\xB4\xB4\xFD\x44\xE9\x3B\xAA\xF0\x49\x7A\x77\x94\x95\x72\x88\x14\xB8\x87" + + "\xF5\x02\x33\x83\xCD\xC9\xCA\x63\x83\x38\x4F\xC8\xCC\x1E\x37\x21\xAD\xB0\xA8\x18\xAE\x45\x59\x59\x59\x24\x12\xA9\xA8\xA8\x88\x46" + + "\xA3\x15\xF8\x80\x97\x70\xA5\xCC\x66\x33\x3C\x3E\xF3\xF3\xF3\x7B\x2A\x70\xCA\xA8\x12\xDC\x03\xA3\xD1\x58\x5C\x5C\x0C\x81\x10\x34" + + "\x75\x82\xC1\x20\x3C\x4D\xE1\x51\xFA\xD1\x47\x1F\x1D\x3A\x74\x08\x1E\xC6\xEF\xBD\xF7\x9E\xD9\x6C\xCC\xCD\x65\x6E\x7C\x7C\x63\xFB" + + "\xA5\xCB\x60\xE7\x2F\x5E\xBA\xD0\xD1\x39\x28\xD6\x8E\xCB\x1F\x2F\x5E\xA2\xEC\xFC\xC5\xCE\x64\x25\x51\x76\xB7\xCE\x64\x39\x34\x06" + + "\x7F\x0F\xED\x25\xFC\x6D\xA4\x1C\x6A\x6B\xA7\x95\x43\x67\x70\xE9\xDA\x2F\x5D\xF9\xB1\xBD\x63\xF5\x9A\xD5\x0C\x46\x96\xCB\xE5\x38" + + "\x70\xE0\x7D\x08\xB5\x0E\x1C\x38\xB0\x65\xCB\x16\xE0\x16\xEE\xBE\x40\x20\x00\x4F\x00\x80\xC1\x2B\x48\xE4\x9C\xB2\xFC\x28\xC5\xA3" + + "\xC0\xC7\xC0\xD3\xC0\xDF\xC0\xEB\x88\x2B\x52\x07\xBC\x74\x3A\x9D\xA8\xC3\x45\x2C\xCE\x2F\x64\x97\x72\xF9\x42\xA9\x4C\xA5\x37\x58" + + "\x1C\x4E\x77\x20\xE4\xF6\x87\x3C\x81\x90\x27\x18\x46\xF5\x40\xD0\x1B\x0C\xFB\x02\x61\x68\xE8\xFA\x43\x15\x01\x84\x6E\xB4\xDC\x1F" + + "\xF6\x94\x07\x5D\x5E\xBF\x03\xD1\xEB\x32\x9A\x51\xF0\xAC\x02\xF9\x55\x6A\x01\x60\x11\x02\x58\x81\xE5\xB7\x6B\x43\x33\xB2\x3F\x30" + + "\xD9\x49\x14\x57\x38\x8C\x22\x0E\x94\xAC\x12\xF4\x26\xCA\x0B\x3D\x5C\x00\xF7\x50\xE9\x14\x98\x8B\xB8\x10\x69\x83\x38\xA7\xE5\xB0" + + "\x26\x64\x64\x8F\xCF\xC8\xA2\xDB\xC4\x2C\x06\xB4\xA5\x71\x46\x8E\xC2\x5E\xAF\x7E\x4A\x63\x06\x0E\x93\xC9\x04\x77\x8B\xCF\xE7\x67" + + "\x66\x66\x66\x67\x67\x43\x68\x4D\x62\x6C\x78\x1F\xCE\xC9\xCC\xCC\xB8\xEB\xAE\x51\x62\xB1\x58\xAF\x47\x8A\xAE\x43\x8F\xDE\xC1\x34" + + "\xF8\x54\x7D\x57\x79\x0B\xDB\xE0\x5E\x96\xC1\x37\x2D\x32\x83\x5E\x0F\x94\x82\x7B\x30\x99\x4C\xB8\xC5\x00\x2A\xDC\x6B\xB8\xE3\x59" + + "\xF8\x80\x1F\xC1\x3D\x86\xFB\x4E\x8F\x99\xFB\xF2\x1F\x2A\x23\xC7\x84\xB4\xF4\xC2\x92\xD2\x3C\x76\x51\x3E\xB1\xA2\x62\xA8\x17\x14" + + "\x97\x70\x05\x22\x91\x5C\xA1\xD4\x19\x8C\xB6\x32\x9B\xCB\x6B\x77\x7B\x6D\x6E\x6F\x99\xA7\x1C\x4A\x9B\xCB\x63\xF7\x94\x3B\x3C\x3E" + + "\x67\xB9\xDF\xE9\x0B\xB8\x7C\x41\xC0\xD8\xED\x0F\x7A\x7D\x08\x6C\x2F\xBC\x2C\x0F\x38\xDD\x3E\xF4\x2B\xD0\xF4\xB5\x3B\xF4\x46\xAB" + + "\x5A\x67\x54\x68\x74\x52\x25\xC4\xCF\x4A\x3E\xC8\x6F\x62\xFF\x14\x21\x6D\x17\x6F\x4E\x0E\xBB\x14\x4A\x62\x40\x2F\xBC\x24\x0C\x83" + + "\xA1\xBD\x91\x46\x06\xE0\xEE\xE2\x4C\x2A\xF4\x54\x3E\x3D\xA7\x85\x8D\x4F\xCF\xEC\x99\x13\xAB\xE7\x3D\xA0\x0F\x2F\x41\x05\x6E\x27" + + "\x3C\x4A\xA1\x22\x91\x48\x00\x66\x68\xFF\x14\x15\x15\xC1\x1D\xE2\x72\xB9\x20\xCE\x6C\x36\x3B\x1F\x1D\x05\xF9\x10\x52\xE7\xDF\xB1" + + "\x5B\xD0\x12\x37\x2E\x1F\x6E\x2B\xDC\x50\xB8\xAD\x45\x45\xC5\x70\x97\xE1\x5E\xC3\x1D\x87\xFB\x0E\x77\x1F\x7C\xA0\x57\xDF\xE8\x4B" + + "\x00\xC0\xC7\xD0\xB3\x20\xBF\x40\x61\x30\xC9\x0D\x26\xA5\xD1\x82\xCC\x64\x51\x19\x2D\x1A\x93\x55\x6F\xB1\xEB\xCC\x36\xBD\xC5\xA6" + + "\xB7\xDA\x49\x09\x24\x9B\xCB\x9C\x16\x87\xCB\xEC\x70\x59\x1C\x6E\xAB\xD3\x6D\x75\x79\x6C\x18\x6C\x60\xD5\xEE\x41\x78\x03\xD8\x50" + + "\x87\x1F\x59\xCA\x5C\x70\x32\xFC\x8A\xCE\x62\x53\x1B\xCC\x72\xAD\x4E\xAA\xD2\x88\x15\x2A\x81\x54\xCE\x13\x4B\x8B\xF1\xEE\xDE\x40" + + "\x6F\x52\x6F\xB9\x80\x6B\x56\x41\x31\x81\x16\xCA\x1C\x76\x49\xD2\x4A\x89\xDD\x0C\x00\xF7\x8B\xF0\xF1\xE9\x59\x70\x59\x81\xBD\x6B" + + "\x00\xDC\x2B\xC6\xA4\x0E\x2D\x1F\x03\x3E\xE0\xF1\x0C\x0F\x63\x7A\xFD\xCE\x71\x1B\x1C\x70\x2B\xC9\x2D\x86\x0A\xB9\xB9\xF0\x32\xC5" + + "\x07\xFA\x42\x37\xC5\xA3\x88\x02\x33\xF3\x0A\xA4\x3A\x83\x54\x6B\x90\xEB\x8D\x50\x91\xEB\x8C\x72\x3D\xF0\x6C\x54\x01\xD2\x7A\x93" + + "\xDA\x68\xD6\x98\x2C\x5A\xB3\x55\x67\x01\x43\x18\x1B\x6C\x65\x60\x46\xBB\x03\x9B\xD3\x54\x86\xCC\xEC\x70\x9A\x1C\x2E\x30\xA3\xC3" + + "\x09\x6F\xEA\xED\x65\x70\xA6\x0E\xCC\x6C\x85\x4F\x50\xE8\x8C\x52\x8D\x4E\xA2\xD2\x08\x15\x2A\x90\x5F\x8E\x58\x5A\x84\xE5\x97\x6C" + + "\xE4\x8D\x5B\x9D\x00\x6D\x49\x76\x61\x31\x18\xA9\x00\xCC\xC4\xC8\x3B\x60\xB7\x00\xC0\xA4\x83\x8D\x00\x4C\x4F\x6A\x77\x8D\x9B\x41" + + "\xBF\x25\x9A\x3B\xC7\xDF\xFB\xB8\xF6\xE3\xBE\xE7\x43\x9F\x28\x30\x23\x2F\x5F\x02\x74\x41\x7C\x8B\x30\xD6\xA3\x12\x61\x6C\x50\xE8" + + "\x0D\x0A\x83\x51\x09\x66\x34\xA9\x4C\x66\x35\x36\x8D\xD9\x0A\xA6\xB5\x58\xB5\x56\x9B\x0E\x9B\xDE\x86\x40\x85\x52\x8B\x88\xB5\x69" + + "\xAC\x76\x8D\xC5\xAA\x36\x23\x53\x99\x40\xD2\x4D\xE8\xB9\xA0\xD5\x89\x35\x5A\x91\x52\x2D\x90\x2B\xB9\x52\x59\xA9\x48\xC2\x4E\x2A" + + "\x30\xD9\xC5\x9B\xC4\xCF\x84\x5B\x52\x66\xE6\x17\x11\x4B\x30\x5C\x78\x2B\x00\x4C\x14\x78\x42\x66\x0E\x69\xE4\xD0\x67\xCF\xDC\x39" + + "\xEE\x1C\x83\x75\x10\xA7\x02\xEF\x62\x30\x18\xE0\x69\xAC\xC2\x22\xB1\x5A\x2B\x82\xF8\x16\x63\x9C\x80\x59\xA3\x93\x69\x91\xC9\x75" + + "\x7A\x0C\xB3\x11\x0C\xC1\x0C\xB2\x6C\x30\xA9\x8C\x66\x30\x75\x17\xD5\x16\xC4\xAA\xC9\x8C\x0C\xF4\xD6\x88\x04\x9C\x98\x54\xA7\x87" + + "\x8F\x15\xA9\x35\x42\x95\x5A\xA0\x54\xF1\xE4\x8A\x52\x89\xB4\x58\x24\x66\x77\x57\x60\x0C\x70\x49\x77\x7A\xD9\xB8\xC2\x86\x7A\x36" + + "\xBC\xCF\x2E\xBE\x25\x00\x46\x96\xC1\xCA\xBF\xFB\xEE\xD1\xE3\xC6\x8D\x23\x6B\x38\xEF\x60\x7C\xE7\x18\xAC\x83\x42\x17\x4A\x95\x5A" + + "\x7D\xDF\x7D\xF7\x8D\x1E\x33\x86\xCD\xE5\x0B\x95\x10\xDC\xAA\x81\x61\x62\x80\x9C\x58\xA5\x81\x26\xAB\x54\x03\xA6\x05\x23\x24\x43" + + "\xA9\xD0\x19\x94\x7A\xA3\x3C\x21\xD1\x18\x69\x60\xDB\x80\xC2\x6F\x19\xE0\xAA\x37\x48\x74\x7A\x89\x4E\x27\x06\xD3\xEA\xA0\x22\xD2" + + "\x68\x04\x2A\x35\x1F\xD0\x55\x28\xC1\x38\x32\x79\xB1\x58\xCC\x16\x0A\x0B\xF9\x22\xDC\xF3\xCC\xA3\x3A\x9C\x01\xDD\x8C\x3C\x36\x89" + + "\xA2\xBB\x29\x70\x3E\x92\xDF\xAC\x42\xF6\x2D\x03\x30\x04\xD2\xF7\x8E\xBB\x1F\x1E\x8D\x45\x45\xC5\x64\x28\x2F\x65\x26\xCD\x9D\xE3" + + "\xCE\x71\x03\x87\x26\x39\x93\x8F\x4C\x22\x28\x2A\x2A\x22\x5D\xD0\x7C\x85\x4A\x00\xC1\xAD\x52\x2D\x44\xD3\x8F\x49\xA9\x81\x52\x4C" + + "\x4C\x85\x4D\xAD\x91\x68\xB4\x50\x82\x32\x43\x3C\x8C\x0C\x24\x1A\x90\x46\xFA\x0C\xA5\x41\x86\x96\x1C\xE8\x25\x00\x2D\x8A\x96\x71" + + "\xC0\xAC\x46\x0F\x02\xFC\xC9\x2A\xBC\xEB\x88\x82\x2B\x93\x27\xE5\x17\x0D\xFC\xE6\x26\x7A\xB0\x12\x1D\xCE\xF4\xF8\x99\x62\x98\x6A" + + "\x06\x67\x16\xDC\x3A\x00\x83\x65\xE6\x16\x82\x08\xDF\x7D\xF7\xDD\x3C\x3E\x9F\x4C\xA6\xA1\x74\xF8\x8E\x1A\xDF\x39\xAE\xEB\xA0\xBB" + + "\x0D\xF1\x22\xF0\x28\x1E\x0F\x2D\x86\x05\xF9\x2D\xE6\x0B\x89\xFC\xD2\xE8\x55\x0B\x30\xD2\x42\x55\xE2\x1D\xCA\xE0\x65\x42\x9F\x93" + + "\x86\x82\x6D\x68\x36\x27\x8D\x84\xDF\xE8\x47\x38\x26\x17\xA9\x12\x9F\xC6\x47\xB3\x9A\x95\x1C\x3C\x7A\x54\x2C\x04\x80\x45\xF9\x5D" + + "\xA3\x47\x5C\x5A\x9F\x33\xC2\x98\x6A\xF7\x26\xD4\x38\x61\xB7\x14\xC0\x60\xE9\xCC\x3C\x7C\x85\xC7\xB0\xD9\x6C\xB8\xE8\xF0\xC8\x1C" + + "\xF4\x3E\x8F\x3B\xC7\xDF\xED\x20\x5E\x04\x1E\x05\x7E\x05\xBE\x55\x58\xCA\xA5\xF3\x49\x07\xB5\xAF\xF7\x11\xC0\x00\xA7\x12\x95\x09" + + "\x4B\x12\x4B\xD0\x4D\x9C\xA0\x4A\xFE\x4A\x92\x5E\x9E\x4C\xC1\x91\xC8\x8A\x45\x92\x22\x81\x98\xCD\x17\xE6\x71\xC9\xBC\x2B\x5E\xB2" + + "\x0B\xBA\x94\xDE\xFF\x4C\xEF\x85\x4E\xBC\xBC\xE5\x00\x26\x3A\x7C\xCF\xD8\xFB\x20\xCE\x99\x38\x71\x62\x71\x31\x9A\xBC\xA5\xC7\xB3" + + "\x31\xE0\x20\x15\xEA\xE5\x9D\xE3\xCE\x91\x72\xA4\x78\x08\x54\xC0\x7F\x8A\x8A\x8B\x27\x4C\x98\x00\x1E\x35\x6E\xFC\x84\x22\xBE\x80" + + "\x12\xDB\xFE\x1A\xED\x64\x3A\xD8\x89\x96\x33\x5E\x24\x48\xA1\x4E\xD7\x5E\xA0\x97\x2B\x95\x97\x8A\x13\xF2\x5B\xC8\x13\xA0\x06\x70" + + "\x77\x80\x29\x05\xA6\xCB\x2F\x51\xE0\x5B\x15\x60\x26\x5A\xFC\x58\x9A\x96\xCD\x1A\x73\xEF\xD8\xBB\xEE\xBA\xEB\xDE\x7B\xEF\x85\xAB" + + "\xCF\x60\x30\xF2\xF2\xF2\x0A\x0B\x0B\xE1\x39\x4A\xCA\x3B\xC7\x9D\xA3\xE7\x41\x79\x08\x78\x0B\xF8\x0C\x78\x0E\xF8\x0F\x78\xD1\xD8" + + "\x71\xE3\x72\xD9\x45\x5C\xA9\x0C\xD1\x78\xBD\x96\x64\x92\xAA\x13\x50\xBB\xDE\xA1\x9D\x40\x4A\x42\x6F\x57\xFC\x2C\x92\x80\xFC\x82" + + "\xE5\xF7\x50\xE0\xDB\x13\x60\x62\x0C\x36\x07\xD4\x78\x7C\x46\xD6\xD8\x71\xE3\x47\x8F\xB9\xE7\xEE\xD1\xA3\x47\xDD\x39\xEE\x1C\xFD" + + "\x3B\x20\x54\xBE\xE7\xDE\xB1\xE3\xD3\x40\x08\x72\x8B\x78\x02\xC0\xE9\x46\xD0\xA5\x19\xD0\x08\x70\x12\x69\xA5\x04\x96\x82\xB6\xA7" + + "\x0D\x9A\x02\x8F\x38\x87\x43\x6A\x7D\xED\xFC\xD4\x57\x1E\xBF\xBE\xB2\xDB\xF7\xBA\x5E\xBA\x47\x16\x04\xF2\x92\x5C\xF7\xC4\xCC\x55" + + "\x3C\x6D\x95\x4B\x9F\x86\x4E\xEA\xD4\x5C\x39\x52\x81\x92\x8C\xDD\xD3\xD6\x9D\xF0\xC9\x4A\x14\xF2\x54\x26\x6B\x53\xA0\x8E\x2B\xBD" + + "\x6F\xC8\x4C\xDF\x7B\x19\x0C\xEF\xBD\x2C\x2F\x46\x3B\x3F\x42\x5D\x5A\x92\x34\xF4\x52\x28\x21\x6F\xD2\xAD\x84\x3A\x4D\x88\xE6\xF4" + + "\xC1\x39\x50\xE1\x88\x64\xE0\x64\x3C\xA9\x52\x80\x7B\x74\xC4\x4A\xAD\x58\xA5\x93\xA8\x91\x41\x45\x94\xCC\xFF\x42\x52\xC0\x70\xA4" + + "\x4A\x6A\x29\x5C\x72\x30\x33\xE1\x85\xBD\xB8\x60\x8F\x46\x5D\x4A\x3F\x0D\x31\x06\xBB\x14\x8C\x59\xC4\x61\x15\x73\xE1\xB2\xE4\xE3" + + "\x4B\x51\xC8\x13\x91\x55\x75\x45\xE8\xEF\x44\x7F\x76\xA9\x58\xCE\x91\x60\x93\xCA\xB9\x49\x43\x2A\x47\xB7\xE4\x76\xD3\xBD\x12\xD5" + + "\x4F\xEB\xF9\xEB\xF4\x77\xA8\xFF\x82\xC0\x49\xC1\xDC\x17\xEA\x7F\xD9\x06\x4E\x01\xB8\xCF\x36\xF0\x60\x2E\x27\xBC\x99\xAC\xFF\x00" + + "\xD3\xA1\xED\x67\x7A\xDD\x94\x8B\x96\xC3\xE6\x92\x92\x5C\x74\x42\x2F\x1D\x5A\xDA\x34\x74\x6E\xF7\x25\x26\x5C\x8A\xE1\x24\xC6\x09" + + "\x80\x49\x09\xDC\x12\x8C\xFB\x03\x30\x7D\xD3\x56\xB4\x6F\xAB\x40\x9A\x48\xEC\x20\x92\x81\x97\x97\xE0\x0A\x66\x58\x8A\x2A\xB8\xEC" + + "\x7A\x33\x69\x00\x06\x62\x03\x60\x46\xE9\x20\xC0\xFB\xC1\xE1\x20\x0E\x84\x86\x9C\x56\xA4\xD2\x89\x81\x5E\xB5\x1E\x2A\xF0\x92\xCA" + + "\xDE\x84\x53\x49\x74\x2D\xA6\xA1\x1C\x91\xA2\x17\xCD\x3D\xA0\xA1\x9B\x82\x34\x99\xA5\x40\x8D\x91\x90\x09\x0C\x50\x02\xBA\x4C\xB2" + + "\xFE\x06\x03\x5C\xC0\x15\x20\x7A\xF9\x08\xDD\x2E\x80\xF1\xB7\x40\x0C\x23\x6E\x65\xDD\x18\x46\x93\x9C\xE4\x89\x90\x95\xC6\x70\x57" + + "\xD0\xDB\x3F\xA3\xB4\x94\xE8\x2A\xFD\x59\x40\x29\x2D\x25\xB6\x89\xFF\x94\xA6\xC0\x29\x00\x93\xD0\xBA\xAF\x5E\xE8\x94\x07\x1F\xB9" + + "\x14\xD4\xD5\xA3\x2B\x30\x1A\x46\xEA\xCB\x35\xAF\x8D\x74\xFF\x33\x78\x8C\x6C\x88\x3E\x82\x0A\x4C\x4D\x40\xA7\x48\x4E\x79\xD9\x5D" + + "\xA2\x39\x14\xCF\xC9\x65\x9F\x3C\xFA\xFA\xCF\xA4\x20\x93\x85\xA0\x80\x87\x88\xDA\x90\x99\xDA\x8A\x39\x65\xE7\x74\x02\x70\x91\x00" + + "\xE9\x6D\x11\xF6\x72\xC2\x2D\x18\x25\x5C\x89\x32\x21\xCB\x09\xA4\x8B\x69\x27\x27\xC0\x90\xC8\x29\x86\xF1\x70\xA8\x36\x51\x26\xE8" + + "\x55\xE1\x84\x2F\x0A\xDA\x4A\x74\x21\x6D\x2E\x51\x62\x38\xA4\xA7\xF0\xA6\x0C\x6C\xF6\x94\x5F\x3C\x5B\x10\x79\x30\x25\xC2\x79\xA5" + + "\xFC\x02\xFC\x14\x03\x86\xD9\xFC\x6E\x22\x4C\x14\x18\xC8\x01\x4D\xE3\x50\xF2\x4B\x01\xDC\x83\x61\x52\xEF\x29\xA1\xDD\x84\xB4\x0F" + + "\x4B\x95\x5C\xEA\x93\x69\x82\x9F\x08\x01\x92\xFF\x51\x8A\x74\x93\x77\xD0\x5F\x9B\x04\x18\x4D\x84\xFE\xAB\x10\xBA\xDB\xE5\x22\x0A" + + "\x4C\x25\x64\xA7\xA4\x98\xB8\x66\xAF\x39\xB1\xE8\xC9\xEB\xAE\x9D\x43\x8B\x5A\x5A\x44\x56\x17\x8D\x94\xC2\x5F\x2F\xC0\xF4\x3D\x90" + + "\xFF\xF2\xFB\xA6\x18\xBE\xE2\x84\xC9\x52\x3A\xAE\xD4\xC2\x11\xEA\x4D\x9A\x95\xD0\x16\x8B\xA5\x46\xD4\x04\x66\xA8\xA7\x84\xD6\x78" + + "\x01\x66\xB7\x7D\x5B\xC9\x0E\xCC\x84\x5E\xB2\x8B\x7A\x97\x14\x23\x5C\xC5\x6C\xA1\x84\x88\x2A\x31\xF0\xFB\x6E\x31\x33\xAD\x9E\x08" + + "\xB0\x85\xF4\xD0\x1A\x89\x33\x17\x74\x18\xB9\x1D\xD1\x13\x35\xF6\x42\xB5\xA0\x3B\xBD\xC9\x95\xE8\x68\x3A\x11\xF5\x78\xA2\x7D\xE5" + + "\x92\x6E\x23\x99\xB4\xC8\x19\xB4\x97\x9A\x9D\x9F\xA0\xBD\x20\x31\x7C\x82\x7E\x54\x90\x64\xB8\x98\x93\x8B\xAF\x0C\xC2\x98\x16\x48" + + "\x93\x3F\x12\x1E\x34\x44\x84\x39\x52\x19\x81\xA7\x5B\x14\x4D\xE7\xB6\x0F\xC0\xBA\xEA\x29\xBF\x4B\x3B\x9F\x48\x2E\xFD\x7C\x78\x87" + + "\x70\xC8\xED\x1E\xBD\x73\x92\x95\xAE\xFF\x08\x33\x0C\xF2\x4B\x9D\xCF\x21\x6D\x60\x12\x42\x83\x02\x27\xD7\x00\xD3\xE7\x72\xD0\x97" + + "\x34\x74\xC5\x29\xF9\xC5\xD9\x05\x25\x7D\xB6\x81\x07\x45\x81\x7B\x95\xB2\x9B\x1C\xE0\x41\x54\x60\xBA\xF0\xF6\x65\x74\x95\xA6\x35" + + "\x92\x13\x6A\x4C\x19\x2D\xAE\x4E\x00\xDC\x73\x3B\x75\x22\xC2\x64\xE7\x74\x8A\x64\x9C\x78\x05\x00\x96\x92\x92\x32\x94\x8D\x05\x29" + + "\xB3\x2C\x51\x26\x8C\xD4\x13\x27\xA3\x24\x4C\xE4\x4D\x11\x4A\xF2\x92\xC8\xA8\x26\xC3\x19\xD5\xE4\x20\xBC\x44\x7B\x35\x24\xD9\x1A" + + "\x49\x04\x43\x4F\x25\x91\x0C\x2B\xBA\x01\xDC\xA5\xAB\x34\x98\xE9\x53\x8B\x52\xA3\xC4\x02\x64\x39\xB8\x25\x4C\x14\x98\x04\xD2\x04" + + "\x60\xA2\xC3\xB4\x66\xB0\x0C\x2B\xB0\xAC\xCF\x96\x70\x77\x15\xA5\xB7\x51\x7B\x2A\x70\x97\x6E\xF7\xE7\xFC\xDE\x80\xE7\xD0\x1F\x10" + + "\xDD\xA3\x77\xEA\x7C\x12\x2F\xD0\x15\xF8\x2F\xDB\xC0\x5D\xAD\x0C\x1C\x42\xFF\x3F\x2D\x00\x4A\x1D\xD9\x84\x51\x19\x00\x00\x00\x00" + + "\x49\x45\x4E\x44\xAE\x42\x60\x82" + +const jpegImage = "" + + "\xFF\xD8\xFF\xE0\x00\x10\x4A\x46\x49\x46\x00\x01\x01\x01\x00\x48\x00\x48\x00\x00\xFF\xE1\x8B\x12\x45\x78\x69\x66\x00\x00\x4D\x4D" + + "\x00\x2A\x00\x00\x00\x08\x00\x0E\x01\x00\x00\x04\x00\x00\x00\x01\x00\x00\x01\x40\x01\x01\x00\x04\x00\x00\x00\x01\x00\x00\x00\xF0" + + "\x01\x02\x00\x03\x00\x00\x00\x03\x00\x00\x00\xF6\x01\x0F\x00\x02\x00\x00\x00\x07\x00\x00\x00\xB6\x01\x10\x00\x02\x00\x00\x00\x08" + + "\x00\x00\x00\xBE\x01\x12\x00\x03\x00\x00\x00\x01\x00\x01\x00\x00\x01\x1A\x00\x05\x00\x00\x00\x01\x00\x00\x00\xC6\x01\x1B\x00\x05" + + "\x00\x00\x00\x01\x00\x00\x00\xCE\x01\x28\x00\x03\x00\x00\x00\x01\x00\x02\x00\x00\x01\x31\x00\x02\x00\x00\x00\x1F\x00\x00\x00\xD6" + + "\x01\x32\x00\x02\x00\x00\x00\x14\x00\x00\x00\xFC\x02\x13\x00\x03\x00\x00\x00\x01\x00\x01\x00\x00\x87\x69\x00\x04\x00\x00\x00\x01" + + "\x00\x00\x01\x10\xA4\x0B\x00\x07\x00\x00\x00\x04\x69\x70\x70\x00\x00\x00\x21\x2A\x48\x55\x41\x57\x45\x49\x00\x00\x42\x4C\x41\x2D" + + "\x4C\x32\x39\x00\x00\x00\x00\x48\x00\x00\x00\x01\x00\x00\x00\x48\x00\x00\x00\x01\x42\x4C\x41\x2D\x4C\x32\x39\x20\x31\x30\x2E\x30" + + "\x2E\x30\x2E\x31\x38\x30\x28\x43\x36\x33\x35\x45\x33\x52\x31\x50\x33\x29\x00\x00\x00\x08\x00\x08\x00\x08\x32\x30\x32\x31\x3A\x30" + + "\x37\x3A\x32\x30\x20\x31\x38\x3A\x33\x31\x3A\x34\x36\x00\x00\x2F\x01\x0D\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x82\x9A\x00\x05" + + "\x00\x00\x00\x01\x00\x00\x03\x6A\x82\x9D\x00\x05\x00\x00\x00\x01\x00\x00\x20\xBC\x88\x22\x00\x03\x00\x00\x00\x01\x00\x02\x00\x00" + + "\x88\x27\x00\x03\x00\x00\x00\x01\x00\x64\x00\x00\x90\x00\x00\x07\x00\x00\x00\x04\x30\x32\x31\x30\x90\x03\x00\x02\x00\x00\x00\x14" + + "\x00\x00\x20\xCC\x90\x04\x00\x02\x00\x00\x00\x14\x00\x00\x20\xE0\x91\x01\x00\x07\x00\x00\x00\x04\x01\x02\x03\x00\x91\x02\x00\x05" + + "\x00\x00\x00\x01\x00\x00\x20\xB4\x92\x01\x00\x0A\x00\x00\x00\x01\x00\x00\x03\x72\x92\x02\x00\x05\x00\x00\x00\x01\x00\x00\x20\xC4" + + "\x92\x03\x00\x0A\x00\x00\x00\x01\x00\x00\x03\x5A\x92\x04\x00\x0A\x00\x00\x00\x01\x00\x00\x03\x62\x92\x05\x00\x05\x00\x00\x00\x01" + + "\x00\x00\x20\xAC\x92\x07\x00\x03\x00\x00\x00\x01\x00\x05\x00\x00\x92\x08\x00\x03\x00\x00\x00\x01\x00\x01\x00\x00\x92\x09\x00\x03" + + "\x00\x00\x00\x01\x00\x18\x00\x00\x92\x0A\x00\x05\x00\x00\x00\x01\x00\x00\x03\x4A\x92\x7C\x00\x07\x00\x00\x00\x64\x00\x00\x1F\xDE" + + "\x92\x7C\x00\x07\x00\x00\x00\x04\x55\x00\x00\x00\x92\x7C\x00\x07\x00\x00\x00\x6A\x00\x00\x20\x42\x92\x7C\x00\x07\x00\x00\x1C\x56" + + "\x00\x00\x03\x7A\x92\x7C\x00\x07\x00\x00\x00\x08\x00\x00\x1F\xD0\x92\x7C\x00\x07\x00\x00\x00\x05\x00\x00\x1F\xD8\x92\x90\x00\x02" + + "\x00\x00\x00\x07\x00\x00\x20\xF4\x92\x91\x00\x02\x00\x00\x00\x07\x00\x00\x20\xFC\x92\x92\x00\x02\x00\x00\x00\x07\x00\x00\x21\x04" + + "\xA0\x00\x00\x07\x00\x00\x00\x04\x30\x31\x30\x30\xA0\x01\x00\x03\x00\x00\x00\x01\x00\x01\x00\x00\xA0\x02\x00\x04\x00\x00\x00\x01" + + "\x00\x00\x01\x40\xA0\x03\x00\x04\x00\x00\x00\x01\x00\x00\x00\xF0\xA0\x05\x00\x04\x00\x00\x00\x01\x00\x00\x21\x0C\xA2\x17\x00\x03" + + "\x00\x00\x00\x01\x00\x02\x00\x00\xA3\x00\x00\x07\x00\x00\x00\x01\x03\x00\x00\x00\xA3\x01\x00\x07\x00\x00\x00\x01\x01\x00\x00\x00" + + "\xA4\x01\x00\x03\x00\x00\x00\x01\x00\x01\x00\x00\xA4\x02\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\xA4\x03\x00\x03\x00\x00\x00\x01" + + "\x00\x00\x00\x00\xA4\x04\x00\x05\x00\x00\x00\x01\x00\x00\x03\x52\xA4\x05\x00\x03\x00\x00\x00\x01\x00\x1B\x00\x00\xA4\x06\x00\x03" + + "\x00\x00\x00\x01\x00\x00\x00\x00\xA4\x07\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\xA4\x08\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00" + + "\xA4\x09\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\xA4\x0A\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\xA4\x0C\x00\x03\x00\x00\x00\x01" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0F\x6E\x00\x00\x03\xE8\x00\x00\x00\x64\x00\x00\x00\x64\x00\x00\x00\x00\x00\x00\x00\x01" + + "\x00\x00\x00\x00\x00\x00\x00\x0A\x00\xFE\x51\x78\x3B\x9A\xCA\x00\x00\x04\x8F\xDD\x00\x00\x27\x10\x23\x2A\x23\x2A\x32\x30\x31\x38" + + "\x31\x31\x30\x38\x31\x36\x30\x31\x33\x33\x26\x33\x34\x00\x03\x01\x55\x00\x01\x01\x1B\x41\x00\x00\x3C\x02\x00\x00\x3C\x51\xC2\x01" + + "\xC2\x01\xE1\xFE\x85\x64\x00\x00\x00\xF4\x43\x02\x95\x94\x00\x00\x33\x33\x26\x33\x34\x00\x03\x01\x55\x00\x01\x01\x1B\x41\x00\x00" + + "\x3C\x02\x00\x00\x3C\x51\xC2\x01\xC2\x01\xE1\xFE\x85\x64\x00\x00\x00\xF4\x43\x02\x95\x94\x00\x00\x33\x33\x26\x33\x35\x00\x03\x01" + + "\x55\x00\x01\x01\x1B\x41\x00\x00\x3C\x02\x00\x00\x3C\x51\xC2\x01\xC2\x01\xE1\xFE\x85\x64\x00\x00\x00\xF4\x43\x02\x95\x94\x00\x00" + + "\x33\x33\x26\x33\x35\x02\x03\x01\x55\x00\x01\x01\x1B\x41\x00\x00\x3C\x02\x00\x00\x3D\x52\xC2\x01\xC2\x01\xE1\xFE\x85\x64\x00\x00" + + "\x00\xF4\x43\x00\x95\x94\x00\x00\x33\x33\x32\x33\x35\x04\x03\x00\x55\x00\x00\x01\x8D\x20\x00\x00\x7A\x04\x00\x00\x3D\x52\xC2\x01" + + "\xC2\x01\xE1\xFE\x86\x64\x00\x00\x00\xF4\x43\x00\x95\x94\x00\x00\x33\x33\x26\x33\x35\x02\x03\x01\x55\x00\x01\x01\x8D\x20\x00\x00" + + "\x7C\x04\x00\x00\x3D\x52\xC2\x01\xC2\x01\xE1\xFE\x86\x64\x00\x01\x01\xF4\x43\x00\x96\x95\x00\x00\x33\x33\x32\x34\x36\x04\x03\x00" + + "\x55\x00\x00\x01\x1B\x41\x00\x00\x44\x02\x00\x00\x3E\x53\xC2\x01\xC2\x01\xE1\xFE\x87\x64\x00\x01\x01\xF4\x43\x00\x96\x95\x00\x00" + + "\x33\x33\x26\x33\x35\x02\x03\x01\x54\x00\x01\x01\x1B\x41\x00\x00\x44\x02\x00\x00\x3E\x55\xC2\x01\xC2\x01\xE3\xFE\x89\x64\x00\x00" + + "\x00\xF4\x43\x00\x96\x95\x00\x00\xAF\x91\x20\x00\x34\x01\xC2\x01\xC2\x01\x00\x01\x00\x00\x01\x00\x01\x00\x00\x01\x42\x00\xD5\x00" + + "\x01\x00\x00\x01\x01\x00\x6F\x00\x01\x00\x00\x00\x00\x00\x21\x01\x55\x10\x17\x00\x32\x33\x32\x00\x63\x0A\x00\x00\xE8\x03\x2E\x00" + + "\x2B\x04\x00\x00\x38\x39\x39\x39\x36\x34\x36\x37\x37\x36\x35\x34\x32\x31\x30\x2E\x39\x3A\x3A\x3A\x38\x36\x37\x38\x37\x36\x35\x34" + + "\x33\x32\x30\x2F\x39\x3B\x3B\x3B\x3A\x39\x38\x39\x38\x37\x36\x35\x34\x34\x33\x31\x3B\x3C\x3C\x3D\x3B\x3A\x3A\x39\x38\x38\x37\x36" + + "\x35\x34\x33\x31\x3C\x3C\x3D\x3D\x3D\x3B\x3B\x2C\x2A\x25\x2A\x24\x29\x28\x34\x33\x3B\x3C\x41\x4F\x47\x3E\x43\x1D\x18\x19\x1B\x15" + + "\x1B\x19\x33\x32\x3C\x47\x39\x3B\x3A\x3A\x33\x17\x1B\x19\x19\x16\x1A\x17\x30\x32\x4D\x35\x3C\x41\x54\x5A\x35\x14\x1B\x17\x1D\x12" + + "\x1B\x16\x2C\x34\x5B\x36\x4B\x3A\x52\x4E\x36\x17\x19\x17\x1F\x0F\x19\x12\x24\x36\x46\x53\x43\x20\x20\x1A\x2D\x10\x0F\x14\x1E\x0E" + + "\x17\x0D\x1A\x34\x42\x54\x36\x1E\x1B\x1A\x25\x42\x40\x1F\x1C\x1F\x15\x23\x15\x30\x41\x44\x34\x2B\x42\x44\x3A\x38\x41\x1B\x17\x1D" + + "\x15\x1E\x11\x30\x42\x46\x43\x49\x4B\x45\x25\x21\x37\x3E\x3B\x3A\x38\x37\x36\x35\x45\x48\x4C\x50\x51\x4D\x38\x37\x31\x42\x3F\x3D" + + "\x3B\x38\x37\x35\x45\x4A\x4F\x54\x57\x57\x53\x4E\x48\x43\x40\x3D\x3B\x39\x37\x35\x47\x4C\x52\x58\x5D\x5C\x57\x50\x49\x45\x41\x3E" + + "\x3B\x39\x36\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3A\x00\x3D\x00\x02\x07\xE6\x03\xE9\x02\xE9\x02\x00\x00\x4E\x00" + + "\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\x29\x4A\x00\x00\x00\x00\x33\x00\x80\x0F\xA0\x0B" + + "\x00\x00\x80\x3F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x0A\x00\x05\x00\x01\x00\x00\x00\x00\x00\x00\x32\x38\x38\x1A\x22\x00\x00\x19\x32\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x7E\x3C\x00\x80\x00\x7F\x00\x80\x00\x3F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xF0\x01\x00\x00\xC8\x00\x00\x00\x88\xFF\xFF\xFF\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x01\x00\x00" + + "\x74\x01\x00\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x2A\x00\x00\x00" + + "\x3A\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x2A\x00\x00\x00\x3A\x00\x00\x00\x28\x00\x00\x00\xAC\x00\x00\x00\x02\x00\x00\x00" + + "\x03\x00\x00\x00\x50\x00\x00\x00\x50\x00\x00\x00\x50\x00\x00\x00\x50\x00\x00\x00\x50\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x03\x04\x00\x02\x00\x00\x00\x80\x00\x80\x00\x80\x00\x80\x00\x95\x00\x6B\x00\x00\x00\x00\x01\x03\x05\x33\xFF\xCA\xFF\x2E\xFF" + + "\x97\x05\x3B\xFF\xF4\xFF\x06\xFF\x06\x05\x00\x01\x00\x00\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00" + + "\x00\x00\xFF\x03\x00\x00\x01\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x05\x05\x32\xFF\xC9\xFF\x2D\xFF\x99\x05\x3A\xFF\xF3\xFF\x05\xFF\x08\x05\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7B\x00\x80\x00\x80\x00\x80\x00\x80\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x28\x00\x00\x00" + + "\x4D\x00\x00\x00\x6F\x00\x00\x00\x8E\x00\x00\x00\xAB\x00\x00\x00\xC6\x00\x00\x00\xF5\x00\x00\x00\x1D\x01\x00\x00\x41\x01\x00\x00" + + "\x61\x01\x00\x00\x7F\x01\x00\x00\xB9\x01\x00\x00\xEE\x01\x00\x00\x1D\x02\x00\x00\x45\x02\x00\x00\x68\x02\x00\x00\x87\x02\x00\x00" + + "\xA3\x02\x00\x00\xBE\x02\x00\x00\xD8\x02\x00\x00\xF0\x02\x00\x00\x07\x03\x00\x00\x1D\x03\x00\x00\x46\x03\x00\x00\x69\x03\x00\x00" + + "\x88\x03\x00\x00\xA5\x03\x00\x00\xBF\x03\x00\x00\xD6\x03\x00\x00\xEC\x03\x00\x00\xFF\x03\x00\x00\x12\x00\x64\x1C\x70\x00\xAA\x00" + + "\x00\x4A\x36\x26\x13\x70\x00\x00\x02\x05\x08\x0C\x11\x16\x1B\x1F\x24\x29\x2D\x32\x37\x3D\x42\x49\x4F\x56\x5C\x63\x69\x6F\x73\x77" + + "\x7C\x80\x83\x87\x8A\x8D\x91\x94\x97\x9A\x9E\xA1\xA4\xA7\xAA\xAD\xB1\xB4\xB7\xBA\xBE\xC1\xC5\xC8\xCC\xCF\xD3\xD6\xDA\xDE\xE1\xE6" + + "\xE9\xEC\xEF\xF2\xF5\xF8\xFC\xFF\x05\x0A\x11\x16\x1D\x23\x29\x2F\x35\x3B\x40\x47\x4F\x55\x5D\x65\x6D\x75\x7C\x84\x8B\x91\x96\x9A" + + "\x9E\xA0\xA3\xA5\xA7\xA8\xAB\xAC\xAF\xB0\xB2\xB3\xB5\xB6\xB8\xBA\xBC\xBE\xBF\xC2\xC5\xC6\xC9\xCC\xCE\xD2\xD5\xD7\xDB\xDE\xE2\xE6" + + "\xE9\xED\xEF\xF3\xF5\xF8\xFC\xFF\xE6\x07\x00\x2F\x0E\x1E\x17\x38\x00\x34\x12\x0E\x59\x00\x55\x00\x34\x00\x00\x72\x00\x00\x5A\xA5" + + "\xFF\xFF\xFF\xFF\x41\x57\x42\x01\x00\x00\x1B\x0F\x58\x00\x00\x00\xF5\x03\x3E\x04\x16\x07\x56\x03\x00\x00\x00\x00\x70\x05\x00\x00" + + "\xFF\x02\x00\x00\xBA\x04\x00\x00\x07\x04\x00\x00\x9C\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\xE9\x03\x88\x06\x6D\x03\x9E\x06\x6B\x03\x00\x04\x00\x00\x0D\x00\x9B\x00\x82\x63\x40\x04\x73\x43\x44\x06" + + "\x76\xE3\x48\x08\x7D\xE3\x4F\x0A\x8B\x93\x52\x0B\xF3\xA3\x56\x0C\xB6\x43\x60\x0E\x8B\xF3\x63\x0F\xAB\x83\x67\x10\x08\xE4\x6B\x11" + + "\x5D\x53\x4B\x1A\x70\x13\x5A\x1B\x86\xB3\x5B\x1C\x69\x73\x6E\x1D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00" + + "\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x07\x00\x05\x00\x02\x00\x02\x00\x01\x00\x01\x00\x01\x00\x01\x00\x39\x00\x28\x00" + + "\x18\x00\x11\x00\x1E\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x28\x0B\xFA\x20\xA7\x7C\x02\x00\x00\x00\x00\x00\x95\x06\x6E\x03\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF6\x0C\x00\x00\x00\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x41\x01\x88\x06\x6D\x03\x00\x00\x00\x00\x33\x04\xCB\x03\x33\x04\xCB\x03\x33\x04\xCB\x03\x88\x06\x6D\x03" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x06\x6E\x03\x00\x00\x08\x00" + + "\xBF\x07\x44\x04\x89\x0C\x16\x00\x01\x00\x03\x60\x01\x00\x22\x60\x41\x70\x41\x10\x61\x70\x82\x60\x82\x70\x81\x20\x82\x40\xA2\x40" + + "\xA6\x60\xA2\x20\xC5\x80\xC3\xA0\xC1\x00\xC2\x90\xE4\xA0\xE2\x80\xE2\x90\xE1\x80\x02\x61\x02\x81\x02\x71\x02\x81\x01\xC1\x23\x51" + + "\x22\x81\x25\xA1\x22\xB1\x22\x71\x21\xC1\x25\xE1\x45\x51\x42\x71\x43\xC1\x42\xB1\x41\xE1\x42\x51\x66\x41\x62\x71\x63\xD1\x64\x11" + + "\x62\x21\x63\x31\x62\x41\x63\x61\x62\x71\x83\x61\x85\x71\x82\x81\x83\xA1\x83\x01\x83\x11\x86\x21\x83\x41\x82\xC1\x82\xD1\xA5\xB1" + + "\xA3\xC1\xA2\x01\xA4\x31\xA2\x51\xA5\x61\xA3\x91\xA2\xC1\xC3\xB1\xC3\xF1\xC3\x01\xC3\x31\xCD\x51\xCA\x61\xC2\x71\xC2\x91\xC3\xA1" + + "\xC3\xB1\xC3\xC1\xE4\x41\xE3\x31\xE3\x41\xE3\x61\xE3\x81\xE3\xA1\xE7\xC1\xE3\xF1\xE7\x01\xEF\x11\xEB\x21\xF2\x31\xFF\x41\xFF\x51" + + "\xFF\x61\xFF\x71\xFF\x81\xFF\x91\xFF\xA1\xFF\xB1\xED\xC1\xE3\xD1\x04\xD2\x03\xE2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x33\x26\x33\x34\x00\x03\x01" + + "\x11\x0B\x10\x07\x02\x75\x02\x38\x20\x01\x60\x09\x14\x49\x4D\x58\x33\x38\x36\x44\x55\x41\x4C\x48\x59\x42\x49\x52\x44\x5F\x4C\x47" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\xBB\x06\x00\x00\x3B\x00\x6F\x00\x10\x27\x10\x27\x00\x00\x00\x33\x00\x85\x64\x00\x10\x27\x10\x27\x10\x27\x10\x27" + + "\x10\x27\x10\x27\x58\x00\x88\x00\xF0\x02\xA0\x01\x96\x86\xB2\x21\x00\x00\x00\x00\x00\x00\x00\x00\x46\xA9\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xAE\xC8\x33\x01\x00\x20\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x3B\x00\x6F\x00\x00\x00\x01\x00\x00\x00\x96\x64\x00\x10\x00\x00\x01\x04\x00\x00\x00\x19\x01\x01\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x0B" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x02\x02\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00" + + "\x00\x00\x00\x00\x40\x23\x41\x46\x65\x78\x69\x31\x06\x05\x06\x00\x30\x00\x30\x00\xCF\x01\xE7\x02\xD3\x01\x19\x03\x9D\x01\xA1\x01" + + "\x0D\x02\xD4\x01\x9C\x01\x1B\x02\xEC\x01\x93\x01\x40\x40\x00\x00\xBD\x02\xF1\x02\x00\x00\x00\x00\xDF\x01\x01\x02\x64\x02\xB0\x01" + + "\xD8\x00\xD8\x00\xAC\x02\xF8\x01\x48\x00\x48\x00\x8C\x01\xD8\x00\x88\x02\x88\x02\xB4\x00\x00\x00\x38\x04\x38\x04\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1C\x02\x68\x01\x68\x01\x68\x01\xAC\x02\xF8\x01\x48\x00\x48\x00\x8C\x01\xD8\x00" + + "\x88\x02\x88\x02\xB4\x00\x00\x00\x38\x04\x38\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\xDF\x01\x01\x02\x00\x00\x00\x02\xCD\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x04\x01\x20\x0F\xE4\xE2\x0F\x00\x00\x00\x00\x00\x00\x0C\x00\xF8\xFF\xFF\xFF\x09\x00\x07\x00\xEC\xFF\x07\x00" + + "\x06\x00\x05\x00\x09\x00\xFD\xFF\x0C\x00\x05\x00\x0A\x00\xE4\xFF\x01\x00\x0D\x00\xEA\xFF\xFC\xFF\x01\x00\xED\xFF\xF7\xFF\xF4\xFF" + + "\x0E\x00\xF2\xFF\xF8\xFF\xFA\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x2B\x1E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x1C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\xA0\x0B\x80\x0F\x00\x0F\x00\x14\x38\x04\xA0\x05\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x64\x02\xB0\x01\xD8\x00\xD8\x00\x00\x00\x00\x00\x17\x8D\x00\x00\x3A\x84\x00\x00\x68\x6C\x00\x00\x20\x55\x00\x00" + + "\x00\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\x34\x00\x00\x00\x34\x00\x00\x00\x34\x00\x00\x00\x64\x00\x64\x00\x64\x00\x64\x00" + + "\x64\x00\x00\x00\x1D\x0E\x0C\x00\x2B\x96\x0D\x00\x23\x0E\x0C\x00\xAD\x0E\x08\x00\x02\x00\x00\x00\x00\x00\x00\x00\x08\x07\x00\x00" + + "\x08\x07\x00\x00\x08\x07\x00\x00\x08\x07\x00\x00\x08\x07\x00\x00\x8D\x20\x00\x00\x8D\x20\x00\x00\x8D\x20\x00\x00\x8D\x20\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8D\x20\x00\x00\x8D\x20\x00\x00\x8D\x20\x00\x00\x8D\x20\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x04\x82\x04\x82\x04\x82\x04\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFB\x02\xFB\x02\xFB\x02\xFB\x02\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1E\x0E\x0C\x00\x4E\x42\x0E\x00\x1F\x0E\x0C\x00\x77\x66\x03\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF1\x01\xF1\x01" + + "\x01\x02\x11\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF1\x01\x01\x02" + + "\x11\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x55\x08\x00" + + "\x8A\x82\x08\x00\xA1\x19\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7A\xB0\x00\x00" + + "\x3C\xB4\x00\x00\x38\xDA\x00\x00\x16\xBA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xF7\x39\x00\x00" + + "\x82\x4D\x00\x00\x1E\xAA\x00\x00\x25\xA1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0F\x00" + + "\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xB5\x00\xB4\x00\xB2\x00\xB2\x00\xB5\x00\x1D\x00\x1D\x00\x1D\x00" + + "\x1D\x00\x1D\x00\x00\x3A\x16\x00\x00\x5A\x15\x00\x00\x88\x15\x00\x00\x88\x15\x00\x00\x5A\x16\x00\xB4\x00\xAF\x00\xB1\x00\xB1\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1D\x00\x1D\x00\x1D\x00\x1D\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x16\x00\x00\x5C\x15\x00" + + "\x00\xCE\x14\x00\x00\xCE\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\xB3\x00\xB3\x00\xB3\x00\xB3\x00\xB8\x00\x8E\x00\x8E\x00\x8E\x00\x8E\x00\x97\x00\xB8\x00\xB8\x00\xB8\x00\xB8\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x00\x97\x00\x9A\x00\x9A\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xB5\x00\x00\x00\x01\x00\x00\x00" + + "\x00\x00\x16\x02\x00\x00\x00\x00\x00\x00\xF1\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x1E\x00\x00\x00\x23\x00\x00\x00\x01\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00" + + "\x1C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x01\x01\x01\x01\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x01\x01\x01\x01\x01\xDF\x01\xDF\x01" + + "\xDF\x01\xDF\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xE4\x01" + + "\xE4\x01\xE1\x01\xE1\x01\xE1\x01\xDF\x01\xDF\x01\x11\x00\x11\x00\x11\x00\x11\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00" + + "\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x1F\x1F\x1F\x1F" + + "\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x1F\x1F\x1F\x1F\x1F\xE2\x01\xE4\x01\xE3\x01\xE3\x01\xE5\x01\xE5\x01" + + "\xE5\x01\xE4\x01\xE4\x01\xE4\x01\xE4\x01\xE4\x01\xE3\x01\xE2\x01\xE1\x01\xE2\x01\xE3\x01\xE2\x01\xE1\x01\xE4\x01\xE1\x01\xE1\x01" + + "\xE1\x01\xE1\x01\xE4\x01\xE5\x01\xE4\x01\xE4\x01\xE3\x01\xE3\x01\xE3\x01\xE3\x01\xE2\x01\xE3\x01\xE3\x01\xE3\x01\xE2\x01\xE2\x01" + + "\xE2\x01\xE2\x01\xDF\x01\xDF\x01\xDE\x01\xE1\x01\xDF\x01\xDF\x01\xDF\x01\xDE\x01\x82\x33\xF4\xBE\xFB\xFF\xFF\xFF\xB3\xFE\x00\x00" + + "\xDF\x01\xDB\x01\x87\x53\x9A\xBE\xFE\xFF\xFF\xFF\x06\xFF\x00\x00\xDF\x01\xDC\x01\x23\x84\x9F\xBE\xFE\xFF\xFF\xFF\x93\xFE\x00\x00" + + "\xDF\x01\xDB\x01\x29\xE4\x97\xBE\xFE\xFF\xFF\xFF\x0B\xFF\x00\x00\xDF\x01\xDC\x01\x08\xF2\x42\xBF\xF9\xFF\xFF\xFF\xFF\xFF\x00\x00" + + "\xE4\x01\xDC\x01\x81\x78\x40\xBF\xF9\xFF\xFF\xFF\xFF\xFF\x00\x00\xE4\x01\xDC\x01\x44\x43\x3F\xBF\xF9\xFF\xFF\xFF\xFF\xFF\x00\x00" + + "\xE4\x01\xDC\x01\x03\x1C\x3C\xBF\xF9\xFF\xFF\xFF\xFF\xFF\x00\x00\xE4\x01\xDC\x01\x1E\x48\x2E\xBF\xFA\xFF\xFF\xFF\xFF\xFF\x00\x00" + + "\xE4\x01\xDC\x01\x06\xE5\x1F\xBF\xFA\xFF\xFF\xFF\xFF\xFF\x00\x00\xE4\x01\xDD\x01\xDF\x97\x21\xBF\xFA\xFF\xFF\xFF\xFF\xFF\x00\x00" + + "\xE4\x01\xDD\x01\xFA\xED\x3C\xBF\xF9\xFF\xFF\xFF\xFF\xFF\x00\x00\xE4\x01\xDC\x01\xE0\x0B\x56\xBF\xF8\xFF\xFF\xFF\xFF\xFF\x00\x00" + + "\xE4\x01\xDB\x01\x4E\x7E\x57\xBF\xF8\xFF\xFF\xFF\xFF\xFF\x00\x00\xE4\x01\xDB\x01\xC6\xE7\x4F\xBF\xF8\xFF\xFF\xFF\xFF\xFF\x00\x00" + + "\xE4\x01\xDB\x01\x60\xE5\x4F\xBF\xF8\xFF\xFF\xFF\xFF\xFF\x00\x00\xE4\x01\xDB\x01\x86\x24\x52\xBF\xF8\xFF\xFF\xFF\xFF\xFF\x00\x00" + + "\xE4\x01\xDB\x01\xCE\x68\x44\xBF\xF9\xFF\xFF\xFF\xFF\xFF\x00\x00\xE4\x01\xDB\x01\xA0\x5B\x4F\xBF\xF8\xFF\xFF\xFF\xFF\xFF\x00\x00" + + "\xE4\x01\xDB\x01\xA0\xCF\x0D\xBF\xFA\xFF\xFF\xFF\xFF\xFF\x00\x00\xE4\x01\xDD\x01\xA0\xCF\x0D\xBF\xFA\xFF\xFF\xFF\xFF\xFF\x00\x00" + + "\xE1\x01\xDD\x01\x0E\xAE\xC2\xBE\xFD\xFF\xFF\xFF\xFF\xFF\x00\x00\xE1\x01\xDE\x01\x77\xC9\x0E\xBF\xFB\xFF\xFF\xFF\x34\xFF\x00\x00" + + "\xE1\x01\xDB\x01\x77\xC9\x0E\xBF\xFB\xFF\xFF\xFF\x34\xFF\x00\x00\xDF\x01\xDB\x01\x1E\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xDF\x01\xE3\x01\xE0\x01\xE0\x01\xDF\x01\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x36\xFC\x3D\x00\x00\x00\x00\xFF\xFF\x00\x00\xDF\x01\xDF\x01" + + "\xAC\x8D\x45\x3E\x01\x00\x00\x00\xFF\xFF\x00\x00\xDF\x01\xE0\x01\x10\x94\x99\x3C\x00\x00\x00\x00\xFF\xFF\x00\x00\xE3\x01\xE0\x01" + + "\x25\xC3\x01\xBD\x00\x00\x00\x00\xFF\xFF\x00\x00\xE0\x01\xE0\x01\x7B\x80\x3D\xBE\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xE0\x01\xDF\x01" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xC2\xB8\xB2\xBC\xBC\xED\xFE\xBC\x8B\x99\x4B\xBC\x1E\x42\x09\xBA" + + "\x06\xE1\x43\xBC\x8B\x99\x4B\xBC\x06\x00\xAA\x3C\xF6\xC3\x66\xBC\x13\x28\x3A\xBC\x1E\x42\x09\x3D\x7A\x8D\x93\xBB\x74\xE1\xC5\xBB" + + "\xE4\xC5\x1A\x3D\xA9\x49\xAC\x3C\x47\x71\x3A\xBB\x0D\xF8\x04\x3D\xA9\x49\xAC\x3C\xCD\x56\xE9\xBA\xF7\xE2\xCC\x3C\x31\xD8\x9A\x3C" + + "\x49\xDC\xAD\x39\x2B\x0D\xE7\xBC\x8A\x12\x2B\xBD\x8B\x99\x4B\xBC\x6C\x54\x09\xBD\x47\xCB\x33\xBD\xB6\xAF\x88\xBC\xCA\xB0\x0D\xBD" + + "\x8A\x12\x2B\xBD\xF3\xED\x7F\xBC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x00\x00\x00\x00\x00" + + "\x07\x00\x00\x00\x2D\x00\x00\x00\x08\x00\x00\x00\x3F\x00\x00\x00\x06\x00\x00\x00\x1C\x00\x00\x00\x20\x00\x00\x00\x14\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x32\x00\x00\x00\x32\x00\x00\x00\x1E\x00\x00\x00\x1E\x00\x00\x00\x1E\x00\x00\x00" + + "\x1E\x00\x00\x00\x1E\x00\x00\x00\x1E\x00\x00\x00\x7F\x00\x00\x00\x66\x00\x00\x00\x80\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x7F\x00\x00\x00\x01\x02\x0F\x0F\x01\x01\x40\x01\x2C\x01\x40\x01\x2C\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x40\x6F\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x03\x00\x00\xCB\x01\x00\x00\x02\x00\x00\x00\x0C\x00\x00\x00\x02\x00\x00\x00\x08\x00\x00\x00" + + "\x1E\x00\x00\x00\x1E\x00\x00\x00\x02\x06\x04\x07\x05\x03\x02\x01\x00\x01\x40\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x23\x2A\x2A\x64\x61\x76\x00\x41\x75\x74\x6F\x00\x00\x23\x23\x23\x23" + + "\x0A\x00\x00\x00\xAE\xC8\x33\x01\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6F\x00\x00\x00" + + "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" + + "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" + + "\x48\x55\x41\x57\x45\x49\x00\x00\x49\x49\x2A\x00\x08\x00\x00\x00\x04\x00\x00\x00\x04\x00\x01\x00\x00\x00\x3E\x00\x00\x00\x00\x01" + + "\x04\x00\x01\x00\x00\x00\x50\x00\x00\x00\x00\x02\x04\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x02\x04\x00\x01\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x01\x00\x01\x00\x04\x00\x01\x00\x00\x00\x00\x01\x00\x48\x00\x00\x00\x00\x01\x00\x01\x01\x04\x00\x01\x00" + + "\x00\x00\x00\x01\x00\x48\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x64\x00\x00\x00\x5F\x00\x00\x00\x64\x00\x00\x00\xA0\x00\x00" + + "\x00\x64\x00\x00\x00\x87\x00\x00\x00\x64\x32\x30\x32\x31\x3A\x30\x37\x3A\x32\x30\x20\x31\x38\x3A\x33\x31\x3A\x34\x36\x00\x32\x30" + + "\x32\x31\x3A\x30\x37\x3A\x32\x30\x20\x31\x38\x3A\x33\x31\x3A\x34\x36\x00\x39\x34\x39\x30\x34\x36\x00\x00\x39\x34\x39\x30\x34\x36" + + "\x00\x00\x39\x34\x39\x30\x34\x36\x00\x00\x00\x02\x00\x01\x00\x02\x00\x00\x00\x04\x52\x39\x38\x00\x00\x02\x00\x07\x00\x00\x00\x04" + + "\x30\x31\x30\x30\x00\x00\x00\x00\x00\x09\x01\x00\x00\x03\x00\x00\x00\x01\x02\x00\x00\x00\x01\x01\x00\x03\x00\x00\x00\x01\x01\x80" + + "\x00\x00\x01\x03\x00\x03\x00\x00\x00\x01\x00\x06\x00\x00\x01\x12\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x01\x1A\x00\x05\x00\x00" + + "\x00\x01\x00\x00\x21\x9C\x01\x1B\x00\x05\x00\x00\x00\x01\x00\x00\x21\xA4\x01\x28\x00\x03\x00\x00\x00\x01\x00\x02\x00\x00\x02\x01" + + "\x00\x04\x00\x00\x00\x01\x00\x00\x21\xAC\x02\x02\x00\x04\x00\x00\x00\x01\x00\x00\x69\x5E\x00\x00\x00\x00\x00\x00\x00\x48\x00\x00" + + "\x00\x01\x00\x00\x00\x48\x00\x00\x00\x01\xFF\xD8\xFF\xE0\x00\x10\x4A\x46\x49\x46\x00\x01\x01\x01\x00\x48\x00\x48\x00\x00\xFF\xDB" + + "\x00\x43\x00\x07\x05\x05\x06\x05\x04\x07\x06\x05\x06\x08\x07\x07\x08\x0A\x11\x0B\x0A\x09\x09\x0A\x15\x0F\x10\x0C\x11\x18\x15\x1A" + + "\x19\x18\x15\x18\x17\x1B\x1E\x27\x21\x1B\x1D\x25\x1D\x17\x18\x22\x2E\x22\x25\x28\x29\x2B\x2C\x2B\x1A\x20\x2F\x33\x2F\x2A\x32\x27" + + "\x2A\x2B\x2A\xFF\xDB\x00\x43\x01\x07\x08\x08\x0A\x09\x0A\x14\x0B\x0B\x14\x2A\x1C\x18\x1C\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A" + + "\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A" + + "\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\xFF\xC0\x00\x11\x08\x01\x80\x02\x00\x03\x01\x22\x00\x02\x11\x01\x03\x11\x01\xFF\xC4\x00\x1C\x00" + + "\x00\x01\x05\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x01\x03\x06\x07\x05\x04\x08\xFF\xC4\x00\x42\x10\x00\x01" + + "\x03\x03\x03\x02\x04\x04\x03\x06\x05\x03\x03\x04\x03\x00\x01\x00\x02\x03\x04\x05\x11\x12\x21\x31\x06\x41\x13\x22\x51\x61\x07\x32" + + "\x71\x81\x14\x42\x91\x15\x23\x52\xA1\xB1\xD1\x16\x33\x43\x62\xC1\x24\x25\x72\xE1\xF0\xF1\x17\x34\x82\x92\x53\xD2\xE2\xFF\xC4\x00" + + "\x1A\x01\x01\x01\x00\x03\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\xFF\xC4\x00\x2F\x11\x00\x02" + + "\x02\x01\x04\x01\x03\x02\x05\x04\x03\x01\x00\x00\x00\x00\x00\x01\x02\x11\x03\x04\x12\x21\x31\x13\x22\x41\x51\x32\x61\x14\x71\x91" + + "\xB1\xC1\x23\x81\xA1\xD1\x05\x33\x52\x42\xFF\xDA\x00\x0C\x03\x01\x00\x02\x11\x03\x11\x00\x3F\x00\xB9\x0C\x26\x3C\xA1\xCA\x41\xC4" + + "\xEC\xB8\x0E\xE4\x83\xC6\xE8\xB6\xF4\x51\x64\xE5\x2D\x4E\xCE\xE8\x28\x90\x81\xD9\x36\x76\x43\x9F\xAA\x6C\x7B\xA0\x0F\x3B\x6C\x12" + + "\xCE\x79\x08\x30\x7B\x14\xF8\x27\xBA\xA0\x2D\x93\x82\x54\x7A\x5D\xF6\x4F\x92\x36\x41\x41\x1C\x25\xD9\x0E\xE5\x2D\xD0\x0F\xF6\x4B" + + "\x56\x0E\x10\xEE\x96\x0F\x64\x01\x9C\x26\x24\x0D\xD0\x12\xF0\x13\x64\x90\x84\x1C\x9C\xA8\xC8\x20\xEE\x98\x93\x9E\xE9\xF3\x90\xAD" + + "\x80\x49\xDD\x39\x28\x73\xBE\xE9\x13\xE8\xA9\x04\x76\x43\xDD\x39\xE1\x31\xCE\x10\x50\x40\x8C\xF2\x8B\x9E\xEA\x3F\xAA\x76\xB8\x20" + + "\xA1\xCE\x72\x88\x12\x50\x9F\x54\xFA\xB6\x50\x50\x41\xF8\x38\x2A\x4C\xEC\xA0\xEF\xBA\x2F\xA1\x50\x12\x26\x39\xEC\xA3\xD4\x42\x20" + + "\xE2\x50\xA1\x73\xCE\xC9\x64\x20\x2E\x43\x95\x01\x29\x28\x73\x82\x83\x51\x4B\x52\x02\x42\xEF\x54\xD9\x41\xAB\x29\xB2\x72\x80\x97" + + "\x00\xA6\x2A\x3C\x9E\xE5\x36\xAD\xD0\x50\x7F\x44\xE5\x46\x5E\x40\xD9\x0F\x89\xB2\x96\x28\x94\x84\x3B\x20\x0F\x71\x48\xB8\xF2\x96" + + "\x5A\x0C\x0C\x9E\x12\xC0\x05\x47\xAC\xE1\x2D\x79\x4B\x14\x18\x00\x26\x38\x28\x35\x61\x31\x90\x65\x05\x06\x47\x64\xDA\x1B\xDD\x06" + + "\xA2\x96\x70\x37\x50\xB4\x1E\x86\xFA\x21\x2D\x1F\xC2\x83\x5B\x9D\xC2\x72\xE7\x77\x28\x28\x22\xD4\x3A\x46\x37\x09\xBC\x53\xE8\x9B" + + "\xC4\xDF\x75\x05\x31\xF4\x83\xD9\x30\x60\x29\x8B\xF3\xC1\x4D\xAC\x81\xBA\x14\x3D\x01\x36\x86\x9E\x0A\x1D\x7E\xE9\x17\x0C\x72\x80" + + "\x5A\x00\x39\xCA\x5A\x72\x96\xB0\x38\x4C\x5F\xEF\x84\x02\xD1\xE8\x53\x11\x9D\x89\x48\xBF\x1C\x14\x25\xC4\xA0\x1F\x48\x1B\x02\x87" + + "\x07\x29\xB5\x7B\xA7\xD6\x00\x40\x36\x92\x4A\x5B\x80\x9B\x59\x4D\x9C\xF7\x40\x77\x42\x2F\xB2\x0C\x10\x39\x47\xB8\x1C\xAC\xCC\x46" + + "\x77\x29\xF2\x39\x4B\x1A\x87\xBA\x40\x6C\x80\x47\x70\x9B\x04\x04\xB4\xE7\x82\x8B\x49\xD3\xCA\xA0\x6C\xA5\x8F\x40\x96\x0F\xBA\x7D" + + "\xFB\xA0\x07\x2E\x09\xF6\x4E\x58\x49\xC8\x29\x8B\x37\x40\x37\xBE\x52\x1F\x54\xE1\x89\x69\x28\x05\xEC\x53\xE0\xE3\x94\x8B\x72\x9B" + + "\x49\xEC\x50\x0B\x7C\x6E\x83\xEA\x8C\xB7\xD7\x94\x25\xA7\xBA\x10\x13\x84\x38\xC8\xD8\x27\x2C\x48\xED\xC2\xA0\x8D\xCD\x23\x94\xE0" + + "\x0C\x67\x09\xF7\x71\xDD\x3E\x92\x06\xC5\x50\x46\x47\xAA\x58\xF4\x49\xCD\xC9\xE4\xA1\xC1\x3D\xD0\x0B\x4E\xE9\xC0\xEC\x53\xB5\x11" + + "\x1E\xAA\x30\x06\x30\x51\x83\x9E\xC8\x70\x71\xC2\x76\x83\xD9\x40\x16\x9C\x76\x42\x73\xE8\x8F\x07\xB9\x48\xB7\x08\x00\x19\x3B\x27" + + "\xD2\x51\x7F\x44\xB1\x9E\xE8\x01\x2D\xC7\x64\xC7\x70\x8B\x43\xBD\x50\xE9\x23\x92\x80\x6C\xF6\x4E\x53\x10\x78\x4F\x8C\x72\xA0\x16" + + "\x3D\x10\xE3\x27\x74\x58\x3D\x92\x2D\x38\x40\x07\x1E\xE9\x60\x1E\xC9\xC8\x70\xE5\x36\x0F\xD1\x0A\x22\xD4\x24\x63\xB2\x3D\xFD\x53" + + "\x6F\x85\x28\x01\xF6\x4B\xEC\x8B\x7E\xE9\x60\xF6\x4A\x16\x0E\xFD\x82\x6D\x28\x8E\xA4\xD8\xFD\x52\x8B\x60\x67\x24\x80\x13\xE9\xF5" + + "\x01\x16\x08\x4D\x8C\x9D\xD2\x85\x82\x5B\x84\x25\x9E\xAA\x4D\x3B\xA4\x42\x85\xB2\x3E\x36\x6A\x58\x23\xE6\x28\xC3\x70\x79\x09\x88" + + "\x77\xAA\x0B\x03\x29\xB0\x30\x8F\x25\x36\x92\x4E\xE8\x00\xC6\x38\x4D\x82\x8F\x49\x4B\x71\xB0\x08\x08\xB4\xA5\x80\x14\x98\x39\xDC" + + "\x26\x2D\xDF\x85\x0A\x06\x9F\x74\xC7\xE8\x88\xE5\x2D\x28\x00\x23\xD3\x94\xC7\xDD\x11\xC8\xE0\x24\x49\xEE\x10\x01\xB2\x13\x92\x8F" + + "\x1B\x64\x84\x81\xF6\x40\x47\x82\x91\xFA\x23\x24\x7A\x14\x88\xC8\x40\x77\xC7\xD1\x17\x6C\x21\x0E\xF5\x08\x8B\x81\x1B\xAD\x86\xB1" + + "\x63\x7E\x12\xC1\xF4\x4D\xA8\x8E\xE9\xC3\xF2\x85\x16\x92\x7B\x25\xA4\xF2\x9C\x3B\xD1\x36\xB2\x7B\xE1\x00\xE3\x3F\x54\xE4\x13\xEE" + + "\x10\x6A\x4B\xE8\x80\x5E\x61\xD9\x2C\x14\xF9\x38\x4C\x33\x94\x02\x01\xC9\xF7\x23\x74\xF9\xD9\x2C\x8E\xC8\x01\xE3\x82\x9F\x07\xD9" + + "\x36\x72\x53\xEA\x42\x08\xEF\xD9\x31\x3F\x62\x91\x7E\x3B\x21\x27\x3B\xA0\x18\x82\x4F\x09\xB4\x90\x9F\x51\x4B\x52\xA0\x1D\x38\xDC" + + "\x6C\x91\x6E\x41\x44\x48\xC2\x07\x11\xD8\xA5\x81\x83\x47\x09\x8B\x4F\x64\xE5\xC9\xB5\x60\xEC\x96\x04\x19\xBE\x4A\x72\x30\x37\x29" + + "\xB5\xE4\xEE\x91\x70\x42\x0B\x1D\xB2\x9C\x02\x98\x90\x90\x7F\xDD\x19\x42\xD2\x4A\x5A\x0F\xAA\x63\x20\xF4\x48\x49\x9E\x06\x14\x03" + + "\xE3\x6D\xD2\xDF\xB2\x6D\x5E\xA9\x6A\xD9\x00\x88\x27\xBE\x10\xE3\x7E\x52\x25\x36\xA6\xF7\x08\x02\xC0\xF5\x49\xC0\xF6\x42\x1C\x33" + + "\xB2\x7D\x78\xE5\x40\x2D\xF8\xE1\x2C\x6F\xB1\x4C\x5C\x3E\xA8\x41\x6F\xA2\x00\x89\x3C\x14\x3D\xD2\xD4\x3B\x6C\x91\x21\x00\x88\xF5" + + "\x4B\x09\x64\x76\x09\x64\x04\x03\x11\x84\xC5\x11\x23\xB2\x62\xEC\x21\x41\x4B\x04\x70\x96\xA0\x96\x42\x01\x8E\x47\x3B\xA5\x82\x79" + + "\x4F\x91\xDC\xA4\x5C\x08\x40\x0A\x62\x09\xE1\x16\x52\xCB\x4F\x2A\x00\x71\x84\xC4\x23\xD8\x1E\x53\x0C\x03\xB1\x4A\x04\x64\x3C\xF6" + + "\x4B\x07\xBA\x32\x46\x77\x29\x64\x29\x40\x1D\xFD\x13\x12\xEE\xC1\x16\x5B\x9E\x52\xF2\x94\x00\x13\x94\x27\x3E\x85\x48\x71\xD9\x2C" + + "\x6D\xCA\xB4\x5B\x21\x39\x1F\x95\x37\xB9\x53\x60\x77\x28\x4E\x33\xCA\x50\xB2\x21\xCF\x05\x3F\x3E\xC8\xC8\xDB\x62\x12\xD2\x7B\xA9" + + "\x42\xC0\xC0\x4C\x5D\xE8\xA4\x2D\x07\x84\xC6\x30\x82\xC8\x49\x19\x4D\xED\x95\x36\x84\xC1\xBB\xF0\xA0\xB3\xB5\x82\x5B\xBA\x0D\xF2" + + "\xA7\xD2\x0A\x8D\xCD\x3A\xB6\x2B\x61\x88\x83\x5D\x8E\xC4\x27\x2D\xDB\x21\x10\xC8\x4E\x06\x7B\xA5\x00\x74\xED\x91\xCA\x60\xDC\xF2" + + "\x30\xA4\xC6\x3D\xD3\xE4\x13\xEE\x80\x88\xB3\x6C\x84\xE0\x67\xD9\x11\x04\x0C\xA7\xC6\x46\x46\xE8\x01\x23\x29\xB0\x02\x2C\x25\xFC" + + "\xD0\x02\x40\xCE\xC9\xC8\x1F\x74\x5A\x32\x9C\x34\x0D\xB3\x95\x68\x11\x80\x02\x58\x47\xA4\x04\xB4\xB7\x3C\xA5\x00\x0B\x73\xBE\x10" + + "\x96\x7A\xA9\x1C\x31\xCA\x58\x4A\x00\x68\xC0\xC8\x40\x41\xCF\x1B\x29\xBB\x6E\x70\x9B\x09\x40\x8F\x1B\x6C\x10\x98\xC1\xE4\x29\x4B" + + "\x46\x3D\x10\x91\xE8\x52\x81\x13\x99\xE8\x98\x31\x4B\xA7\xD5\x36\x91\x9C\xA5\x02\x3D\x20\x1D\xD3\xE8\x07\x70\xA4\x0D\x19\xD9\x16" + + "\x91\xEB\x85\x01\xE6\x2C\x23\xE8\x9F\x6C\x70\xA6\x2D\x43\x8C\x1E\x15\xA2\x00\x00\xC6\xC1\x3E\x91\x9D\x86\xE8\xF7\xEC\x9B\x73\xEC" + + "\xA1\x46\xD2\x7B\x94\xDA\x3E\xE8\xB1\xEA\x52\xD3\x8E\x0A\x02\x3D\x21\x2D\x21\x19\x6E\x50\xE3\x01\x00\x3A\x7D\x93\x68\x28\xF7\x4C" + + "\x40\xE4\x92\x80\x1D\x20\x6F\x84\xC4\x6F\xE8\x8F\x03\xB2\x58\xDF\x74\x00\x16\x82\x37\x4B\x4F\xB2\x32\xD1\xCA\x6E\x12\x80\x3A\x53" + + "\x69\x28\x88\x3E\xA9\xB1\xEA\x10\x03\xA1\x31\x18\x47\x8F\x42\x9B\x4E\x14\x00\xE0\x8D\xC6\x13\x6F\x84\xE4\x7A\x27\x03\xEC\x80\x1C" + + "\x13\xC8\x4C\x73\x8E\x11\x6E\x0E\xDB\xA7\xC1\x40\x47\xBA\x62\x0F\x74\x78\x39\xDD\x22\x32\x77\x42\x80\x1B\xE8\x12\xC6\x3D\x11\x1D" + + "\xF8\x4D\xA7\xF5\x40\x0E\x9C\xF2\x53\x63\xDD\x1E\x9C\xA1\xD2\x07\x0A\x50\x18\x81\x94\xC7\xE8\x88\xB4\x25\x8F\x47\x15\x40\x03\x3D" + + "\x82\x7D\xD3\xE0\xF6\x25\x2C\x1F\x54\x03\x7D\xB7\x42\x73\xE9\x94\x67\x29\x83\x71\xCA\x00\x30\x3B\x6C\x52\x39\xFA\xA2\x23\xD1\x0E" + + "\x3D\x90\x0B\x27\x94\x24\xE4\xA2\xC6\xDC\xA1\xC1\xF5\x50\x0D\xDF\x20\xA5\x93\xDD\x10\x08\x48\x24\xEC\xE5\x01\xDD\x07\xD9\x3E\xC5" + + "\x08\x2E\x4B\x2E\xEE\x16\x44\x1F\x1E\xC9\xFB\xF0\x9B\x51\xEE\x12\x27\x2A\x8A\x1F\x3E\xC9\xF6\x3C\x9F\xD1\x08\x27\xD1\x2D\x47\x9C" + + "\x20\x0B\x8F\x74\x80\xDF\x29\xB2\x4F\x64\x90\x0F\x8D\xD3\x9C\x9D\xC2\x12\xE2\x3E\x85\x37\x9B\x1B\x20\x0B\x74\xDB\xE7\x84\xD9\x77" + + "\x74\xB5\x38\x2A\x02\xC6\xDB\xA6\xC2\x6C\xA7\x27\x3B\xF7\x40\x3E\xE9\x0D\xB9\x4D\x93\xF5\x4D\xAC\xE7\x70\xAD\x81\x11\xEF\x94\xC4" + + "\x63\x70\x9F\x20\xF0\x13\x1C\xF6\x52\xC0\xB9\xE5\x31\x6E\x7B\xA4\x1C\x08\xC6\x13\x64\x15\x6C\x08\xB4\x8E\xE8\x49\x20\xA7\xD7\xEC" + + "\x91\x39\x52\xC0\xD8\x29\x00\x72\x7B\xA2\x2F\x00\x26\x0E\xC7\xB2\x01\x8E\x71\xB0\xC2\x1C\xB8\x8D\x91\x39\xD9\x29\xB2\xAD\x80\x40" + + "\x78\x3C\x22\x07\x6D\xD2\x0E\x23\xB6\xC9\xB5\x7A\x28\x07\xC9\xEC\x98\x93\xE8\x96\xBF\x64\xDA\xF7\xE5\x40\x2C\x94\xB7\xC2\x6D\x41" + + "\x22\x50\x0C\x49\x4F\x9F\x54\xC5\xC3\x29\xB5\x7A\x04\x03\x93\xB2\x6C\x6C\x90\x78\xE0\x84\xB2\x10\x0B\x27\xE8\x9B\x51\xEE\x9C\xB8" + + "\x0E\x42\x12\x42\x01\xCE\xC9\x67\x7E\x50\x9C\x76\x29\x6A\x08\x02\xC9\x43\xBA\x59\xF4\x4C\x4A\x01\x67\xD1\x31\x29\xB2\x0A\x59\xF4" + + "\x50\x0F\xAB\xF5\x4F\xAB\xEA\x9B\x8D\xCA\x6C\x84\x02\x27\x74\xB2\x01\x4D\x9C\xF7\x4C\x80\x72\x42\x47\x7E\x02\x6C\x8F\x54\xC4\x8C" + + "\xEC\x85\x1F\x3B\xA4\x4E\x13\x26\x38\xF5\x40\x11\x3E\xDB\x26\xCA\x1D\x87\x74\xB5\x20\x0B\x29\x8E\x31\xC2\x1C\xFB\xA6\xD5\xEE\x80" + + "\x3F\xA2\x6E\x10\xE4\x7A\xA4\x71\xD8\xA0\x1C\x92\x78\x09\x88\xDB\x94\xB3\x8E\x0A\x12\xE2\x7B\xA0\x1F\x01\x2D\xBD\x13\x67\x6E\x53" + + "\x7E\x8A\x01\x11\xD9\x0E\x3D\x13\xE7\x1D\xD3\x12\xA8\x2C\x38\x18\xC2\x7C\x05\x08\x71\xC6\x11\x8D\x95\x21\x28\x68\x4D\xA0\x13\x84" + + "\x1A\x9D\xD9\x36\xA7\xA0\x24\x6B\x30\x08\xEC\x90\x6B\x7B\x28\xC3\x88\xE7\x94\xB5\x6E\x80\x90\x30\x65\x2C\x01\xB2\x60\xF3\xDD\x31" + + "\x76\x55\xB0\x11\x6E\xDB\xF0\x96\x1A\x50\x87\x13\xC8\xD9\x39\x1E\x88\x02\xD0\x10\x96\x80\xED\xC2\x5A\xCB\x79\x09\xF5\xE4\x25\x81" + + "\x10\x3B\x26\xF0\xC1\xDC\xA7\x71\xDB\x60\x85\xB2\x13\xB1\x0A\x90\x7F\x0C\x76\x4D\xA4\x24\x79\xD8\xEE\x90\x27\x1B\xA1\x46\xD0\x37" + + "\xCA\x41\xA3\xB2\x62\xE3\x9E\x13\xEA\x50\x02\xE6\x6F\xB1\x42\xE6\xFA\x04\xE5\xC9\x07\x7A\xA0\x04\x34\x63\x94\xB4\x04\x9C\x73\xDB" + + "\x29\x35\xDE\xCA\x01\x08\xF0\x36\x4C\x1B\x93\xBA\x2D\x5E\xC9\xB2\x33\x85\x40\x2E\x6F\x74\xB4\xA7\x27\x1D\x93\x6B\x04\x71\xB8\x4E" + + "\x00\xFA\x48\x43\xA7\x6D\xF7\x4F\xAC\x1E\x52\x07\xD9\x38\x00\xF8\x69\xB4\x9C\xF0\xA4\x27\xD9\x09\x72\x00\x4B\x0F\xA2\x1D\x1B\xA9" + + "\x75\x04\xC4\x60\x92\xA0\x23\xD3\xEA\x97\x86\x7B\x23\xD4\x31\x84\xE1\xD8\x08\x08\xBC\x32\x52\x2D\x20\x23\x24\x7A\xA5\x91\xEA\x80" + + "\x8F\x19\x4C\x5A\x7B\x04\x79\x00\xA7\xFB\xA0\x23\x0C\xC7\x21\x31\x69\x3C\x29\x75\x02\x84\x81\xCA\x02\x2D\x19\xED\x84\x8B\x30\xA4" + + "\x07\x64\xB5\x65\x01\x1E\x8C\x14\xC5\xA7\xD1\x4A\x33\xDD\x33\xB2\x38\x28\x08\xF4\x7B\x26\xD3\xBE\x30\xA4\xDC\xF0\x9F\xB6\xE8\x08" + + "\x74\xA4\x40\xEC\x54\xB9\x01\x36\x90\x38\x09\x40\x8B\x09\xB0\xA5\x38\xCF\x09\x7D\x90\x59\x16\x12\x20\x05\x2E\xC9\x63\x23\x74\x04" + + "\x5A\x42\x6C\x29\x31\x84\x38\xCF\x08\x00\xD2\x52\xD3\xEE\xA4\x07\x6D\xD3\x64\x28\x08\x8B\x42\x6D\x01\x4C\x40\x4B\x03\xB2\x51\x6C" + + "\x80\xB4\xF6\x09\x69\x1E\x8A\x6C\x26\x2D\xC8\x4A\x16\x42\x5A\x32\x91\x6E\x54\x9E\x1E\xDD\x92\xD0\x00\xE1\x28\x59\x18\x60\xC6\x70" + + "\x98\xB7\x2A\x50\x07\xD1\x31\x68\x4A\x25\x9D\xAD\x04\x6F\x94\x88\x3D\xCA\x3C\x7B\xA2\xD2\x30\xA8\x03\x07\x1B\x24\x1A\x7B\x94\x5A" + + "\x40\xEE\x91\x6E\xFB\x14\x00\x86\x83\xC8\x4B\x48\x44\x39\x48\x84\x00\x39\xA5\x16\x36\x4F\x84\x21\xA4\x6C\x02\x01\x69\x48\xB0\x8D" + + "\xC1\x4B\x74\x4D\xDF\x90\x80\x03\x92\x36\xE5\x08\xCF\x04\x29\xB0\x13\x16\x83\xC2\x00\x5A\x31\xDD\x3E\xC9\x00\x96\x34\x9E\x15\x00" + + "\xBB\xD4\x84\xE0\x83\xC2\x2C\x0C\xE7\x29\x8B\x5A\x80\x17\x20\xD2\x73\xB6\x14\xB8\x18\x43\xA4\x7E\x52\x80\x6D\x20\x84\x00\x63\x62" + + "\x11\x96\x91\xC2\x62\xD2\xA0\x1B\x48\x1C\x21\x2D\xF4\x45\xF5\x3B\xA6\x23\x03\x25\x00\xDB\x67\x05\x22\xCD\xF2\x11\x02\x0A\x5A\x4E" + + "\x76\x28\x00\xC1\x03\x84\xC7\x9E\x54\x99\xC6\xC4\xA6\x2D\xCA\x00\x30\x3B\xA6\xDF\xB6\xE8\xF1\xEC\x90\x3F\xC2\xA8\x00\x93\xEF\x94" + + "\xE0\x12\x37\xCA\x19\x9D\xE1\x42\xE9\x08\xDD\xA3\x2A\xB7\x76\xEA\x63\x43\x4A\xFA\x87\x93\x1B\x58\x37\x03\x92\xB6\x43\x1C\xA7\xD1" + + "\xAE\x79\x14\x3B\x2C\x9E\x18\x05\x22\xD2\x0E\xC4\xAC\xD0\xFC\x4A\x68\x39\x3E\x20\xCF\x19\x5E\x8A\x5F\x89\xD0\xC6\x1C\x2A\xA2\x7B" + + "\x81\xE0\x80\xB7\x3D\x1E\x65\xEC\x6B\x5A\x88\x3F\x73\x44\xD3\x91\xBA\x1C\x00\xB3\x57\x7C\x51\x1A\xCE\x03\x5A\x33\xB0\x2A\x5A\x5F" + + "\x88\xE6\xAA\x5D\x2C\x6C\x64\x8E\xDB\xA8\xF4\x99\x52\xB6\x8A\xB3\xC1\xFB\x9A\x26\x9F\x44\xDA\x77\xC8\xD9\x73\x2C\xB7\xD8\x2E\xA1" + + "\xCD\x8C\x16\xBD\xA3\xCC\x0A\xAC\xF5\x4F\xC4\x78\xEC\xB5\x72\xD0\x53\x52\xBD\xF5\x0D\x38\x0E\x38\xD3\x95\xA3\x64\xAE\x8D\x9B\xD5" + + "\x59\x79\xD3\x94\x3B\x83\x82\x56\x75\x07\x54\xF5\x54\xD1\x36\x4F\xC3\x53\xB4\x38\x64\x02\x4F\xF7\x5E\xCA\x2E\xA9\xBF\xB2\xA0\x7E" + + "\xD0\xA4\x85\xD1\x77\xD0\x77\xFE\x65\x73\xBC\xF8\x57\x1B\xD7\xEA\x6C\xDB\x3F\x86\x5E\x77\xEC\x96\x4E\x37\x54\xBB\x8F\x54\xDD\xCC" + + "\xAD\xFD\x95\x44\xCD\x38\xDF\xC4\x23\xFE\x0A\xF0\x3B\xAA\xBA\xA1\xA0\xB8\xDB\xE0\x38\xF4\x3F\xFA\xA9\xE7\xC3\xFF\x00\xB5\xFA\x8D" + + "\xB3\xF8\x66\x82\x77\x4B\x0A\x85\xD3\xFF\x00\x12\x9B\x5D\x56\xDA\x3B\x8D\x29\x8E\x77\x3B\x48\x2D\xC6\x3F\xAA\xBE\x8C\x16\xEA\x1C" + + "\x11\x95\xBD\xC5\xAE\xCC\x13\x4F\xA1\x64\xFA\x26\x25\x52\x3A\x83\xE2\x5D\x25\xAA\x79\x29\x69\xA1\x74\xD5\x0C\x38\xF6\xCA\xE2\xFF" + + "\x00\xF5\x2A\xEE\xEC\x16\xD0\x47\xBF\xAF\xFF\x00\x2A\xED\x6B\xB3\x38\x46\x59\x1D\x41\x37\xF9\x1A\x88\x08\x7C\xC4\xEE\x16\x77\x6F" + + "\xF8\x93\x54\x6A\x00\xB8\xD0\x81\x1F\xAB\x0F\xF7\x29\xEE\x3F\x12\x2A\x4C\xE0\x5B\xE8\xC7\x86\x39\x32\x1D\xFF\x00\x91\x58\xD2\xF9" + + "\x37\x7E\x1F\x37\xFE\x1F\xE8\x68\x78\x3C\x14\xDA\x71\xC1\x59\xB3\x3E\x22\xDD\x33\xE7\xA6\x88\x0F\x6F\xFE\x57\x7E\xC7\xD6\xD1\x5C" + + "\xE6\x8E\x9A\x58\x8B\x66\x79\xC6\x47\x0A\xED\x6D\x5A\x35\x4E\x13\xC6\xEA\x69\xAF\xCC\xB5\x76\xC1\x4B\x71\xF4\x4F\x9C\x85\xC3\xBD" + + "\x75\x55\x25\x9C\xF8\x72\x02\xF9\x31\xB0\x08\x93\x6E\x91\x83\x69\x76\x76\xC9\xDB\x28\x35\x9E\xC5\x67\xAE\xF8\x95\x37\x88\x43\x69" + + "\xDB\x8F\x74\x51\x7C\x48\x2E\x94\x09\xA0\x6E\x8C\xEF\x85\x9F\x8E\x46\xBF\x34\x17\xB9\xA0\xEB\xCA\x5A\x8F\xAA\xA5\x54\x7C\x44\xA5" + + "\x0D\x1F\x86\x6E\x0F\x7D\x6B\xC4\x7E\x21\xBC\xBB\x6F\x0C\x0F\xBA\x78\xE4\x4F\x3E\x3F\x93\x42\xCE\x53\x1D\xB8\x2A\xAB\x6E\xEA\xE3" + + "\x29\x02\xA6\x3C\x87\x70\x5A\xAD\x2D\x78\x7C\x6D\x70\xEE\x16\x0E\x2E\x3D\x9B\x23\x25\x2E\x86\xC9\xF5\xC8\x43\xA8\x82\xA4\xC0\x09" + + "\x8E\x9E\xEB\x13\x31\xB5\xFB\xA1\x2F\x70\x39\x45\xA4\x72\x13\x69\x69\x3C\xFD\x90\x0D\xAC\xFD\xD3\x6B\x23\xB2\x22\xC0\x7B\xA6\x2D" + + "\xC7\xBA\x01\xB3\xAB\x94\xD9\x21\x17\x95\x2F\x29\x28\x43\xB2\x32\x8F\x3B\x28\xC1\x39\xE0\xA7\xD5\x8E\x5A\x50\x04\xE1\xEE\x99\xAE" + + "\xEC\x0E\x42\x1C\x83\xBE\x0A\x7F\xE4\x85\x08\x8C\xEF\xC2\x6F\x33\x4F\x39\x4D\x9E\xC9\x1D\xF8\x40\x11\x24\x8C\xE7\x05\x2C\xBB\xD5" + + "\x33\x4F\x62\x96\x77\xD8\xA0\x0B\x72\x9B\x51\x05\x2C\xE3\x9E\x13\xE4\x1D\xB2\xA8\x16\xA3\xE8\x96\x0F\x20\x90\x90\xDB\xBA\x5A\xB0" + + "\x78\x42\x08\x9C\x0C\x94\xE4\x92\x36\x29\x8B\x9B\x8E\x51\xC7\x4D\x2C\x8D\x2E\x89\xA4\x80\xAF\x61\xF0\x46\x73\xF4\x4B\x19\x1B\xA4" + + "\xEC\x67\x04\xE0\xFA\x24\xCD\x4E\x38\x6E\x5C\x80\x60\xDD\xF0\x72\x9C\xB7\x01\x7A\xE2\xB7\x4D\x27\x99\xF8\x8D\xBE\xAE\x2B\xCB\x71" + + "\xEA\x1E\x9B\xB0\x0F\xFA\xFA\xE8\xE4\x98\x7F\xA6\x0E\xEB\x74\x30\xCA\x46\xA9\x64\x8C\x43\x86\x09\x66\x38\x8D\xAE\x71\x5E\xB7\x59" + + "\xAA\x19\x4E\xE9\x49\x00\x81\x9D\x3D\xD2\xB0\xF5\xB5\x8A\xEF\x4C\xE7\xD2\x4C\xD8\xF4\x72\xC7\x72\x17\xAE\xA3\xA9\xE8\xD8\x30\xC6" + + "\x3E\x50\x76\xCB\x57\x54\x74\xB1\xAE\x59\xCE\xF3\xCA\xF8\x47\x08\x97\x67\x8D\xC2\x5A\x8F\x75\xEF\xAF\xA6\x0C\x90\x49\x08\x26\x39" + + "\x06\x5B\xB2\xF2\x0A\x79\x4F\x0C\x27\xEC\xB8\x65\x07\x17\x47\x54\x64\x9A\xB2\x1C\x90\x77\x44\x33\xCE\x54\x9F\x82\xA8\xCE\x3C\x17" + + "\x10\xA6\x8E\xD9\x56\xF1\xE5\x84\xE3\xDD\x45\x19\x3F\x62\xEE\x4B\xDC\xF2\x12\xE3\xD9\x38\x27\x0B\xA6\xCB\x25\x43\xF9\xC3\x54\xAC" + + "\xE9\xC9\x3F\x34\xC1\x6C\x58\x72\x3F\x63\x07\x96\x0B\xDC\xE2\xEA\x39\x4B\x2E\xCE\xCB\xDD\x72\xB7\xFE\x05\xCD\x01\xDA\xB5\x2F\x0E" + + "\x0F\x72\xB5\xCA\x2E\x2E\x99\x9C\x64\xA4\xAD\x0C\xE9\x06\x83\xE2\x60\x37\xBE\x55\x0F\xE2\x00\x85\xF6\x97\x36\x95\x83\x53\xF6\xC3" + + "\x7B\x95\x7A\xA8\x8D\xB3\x42\xE8\xDC\x71\xA8\x63\x2A\x8B\xD6\x11\x0B\x7C\x50\x65\xC1\xE3\xC4\x05\x74\xE9\x6B\xC8\x8D\x19\xEF\x69" + + "\xCB\x8B\xA3\x64\x9E\x8A\x96\x39\x81\x64\xD3\x8C\xB1\xC4\x7C\x8B\x3F\xEA\x3A\x7B\xAD\x8E\xEF\x25\x0D\x5C\xEE\x71\x69\xC3\x4E\x06" + + "\xEB\xE8\x4B\x6D\xDE\xDD\x35\xAE\x29\x9D\x3C\x60\xC6\xDD\xF2\x7E\x55\x8E\x7C\x40\xAA\xA6\xBE\x75\x2B\xAA\x69\xA4\x05\x90\xEC\x3F" + + "\xDC\xBD\x53\x85\x33\xC9\x41\xD2\x75\xD3\xDA\xA2\xAF\xAC\xC6\x99\x5D\x86\x07\x37\x73\xFA\x25\x15\xA2\x6B\x57\x53\x32\x96\xB1\x9E" + + "\x0E\x46\xE7\xD4\x2D\x77\xA4\x6E\x16\xEB\x97\x4C\xD2\x31\xAE\x8D\xCE\x85\x80\x16\x93\xF2\x95\x4D\xEB\xAA\x88\x2E\x5D\x5F\x05\x35" + + "\x1B\x9A\xE9\x23\x66\x97\x11\xEB\x94\x72\x7B\x5F\x24\x5C\xB2\xED\x67\xB6\xD0\xD0\x46\x5D\x48\x03\x8B\xC6\xEE\xF5\x55\xEE\xBB\xB7" + + "\xD9\x64\xB4\xCF\x51\x24\x50\x8A\xC1\xB8\x77\xE6\xCA\xE9\xF4\xC5\xAE\x6B\x6C\x2F\x15\x33\xB6\x4D\x7C\x01\xD9\x53\x3A\xEB\xA2\xA6" + + "\x65\x4C\xB7\x86\x56\x6A\x6B\x9E\x1C\x62\xDD\x78\x6F\xEA\x7C\x9E\x9F\xFF\x00\x3D\x10\xDC\xA3\xAC\x7B\x63\x96\x8A\x52\xC8\xA0\x8F" + + "\xF7\x8F\x1C\x34\xA8\xEA\xE9\xEA\xE9\xA3\x8A\x6A\xD7\x3E\x46\x4C\xDC\xB2\x43\xC3\x95\xC7\xA4\x5F\x47\x35\x3D\x75\x0D\x50\x63\x9C" + + "\x5E\x09\x6B\xFB\x8D\x21\x78\x7A\xFA\xAE\x9E\x4A\x7A\x6B\x75\x08\x12\x49\x1B\xB5\x69\x67\x61\xBE\xCB\x92\x1A\x3C\x5F\x85\x53\x7D" + + "\xD7\x65\x9E\x69\xF9\x5C\x4A\xD5\x1C\x75\x15\x2F\x70\xA2\x2F\x69\x60\xD4\xE2\xDE\xC1\x4D\x42\x6E\x4E\x97\xF1\x35\x32\x3D\xD4\xCF" + + "\x04\x35\xDD\x89\xF4\x5D\x6E\x80\x9E\x0A\x7A\xBA\xAA\x4A\xE0\x19\x24\x83\x60\xFE\xE3\x6D\x97\x7B\xAB\xA4\xA3\xA3\xB2\xB2\x92\x95" + + "\xAC\x6B\x9E\xEF\x23\x5B\xDB\x63\xBA\x2D\x0E\x19\x69\xDC\xDB\xE6\x82\xCF\x35\x91\x44\xE1\x74\x35\x86\xCD\x51\x4D\xF8\xE9\xDA\xC9" + + "\x2A\xBC\x42\x46\xAC\x64\x2D\x00\xE9\x68\xC0\x1B\x61\x64\xBD\x11\xD1\xB5\xEF\xAC\x86\xEE\x6A\x83\x21\x2F\x2E\xF0\xF7\xC9\x0B\x57" + + "\xD2\xEF\x0C\xB7\x39\xDB\x0B\xA2\x5E\xDC\x99\x44\xCE\x7E\x21\x58\xAD\x30\xD0\x3A\xB2\x06\xB1\xB5\x2E\x7E\x4E\x31\x93\xB2\xA7\x32" + + "\xDB\x5B\x54\xD3\x51\x09\x2C\xA7\x88\x61\xF2\x1E\x07\xB2\xEA\xF5\xA7\x4B\x57\xD1\x55\x3A\xBE\x7A\xAF\x16\x29\x1F\xB3\x46\x7C\xAA" + + "\xF5\xD0\x0D\xB6\xD7\xF4\xD3\xA9\x27\x64\x72\x39\xAE\x1E\x23\x5D\xDC\xE1\x6F\x86\x35\x39\x24\xD9\xBF\x1E\x79\xE0\xC1\x37\x0E\x1B" + + "\x6B\xF9\x32\xEB\xB5\x9E\xE1\x6A\x2C\x75\x68\x76\x89\x06\x58\xFE\xC4\x25\x68\xB3\xD6\x5D\x04\xB2\x53\x38\xB5\x91\x0C\xB8\x91\xB0" + + "\x57\xFF\x00\x8A\x55\x54\x92\x53\x53\x50\x53\x16\x99\x19\xBE\x1B\xF9\x46\xFB\x20\xF8\x5B\x3D\x1B\x68\xEB\x28\x6A\xB4\x78\x8F\x7E" + + "\x74\xBB\xB8\xC0\x59\x78\x63\xE4\xDB\xEC\x6D\xFC\x66\x6F\x07\x93\xDC\xA6\xCD\x68\xAD\xA3\xA5\x65\x4C\xE0\x98\x24\x1E\x57\xE3\x63" + + "\xBA\xD0\x7A\x3A\xD7\x6A\xFD\x9F\x4D\x54\xD0\xC7\x54\xE3\x24\xF7\x05\x4D\xF1\x12\x7A\x3A\x6E\x9D\x65\x24\x3A\x03\x8B\xBC\x8C\x6F" + + "\x61\xBA\xE2\x74\x67\x4C\x55\x41\x2C\x17\x19\x2A\x5B\xE1\xB8\x67\xC3\x19\x58\xE4\x84\x71\xB6\x93\x35\x4B\x3C\xF3\xE2\x8B\x9F\xB3" + + "\x66\x87\x86\xAA\xBF\x55\xD9\xED\xF5\x34\x53\xD4\xC9\x86\xCE\xD6\x92\x0E\x55\x97\x38\x1B\x2A\x0F\x58\x5A\xAB\x5D\x24\x95\x9E\x3E" + + "\x60\xFE\x0F\x45\xA7\x1B\xF5\x76\x73\xCF\xA2\x8D\x4B\x6B\xA9\xB8\x56\x3D\x94\xAC\x2E\x6B\x37\x73\xBB\x00\xA4\xBA\x58\x6E\x16\xBA" + + "\x36\xD5\x39\x81\xD0\x3F\x87\xB4\x2B\xDF\xC3\x86\xD2\x4B\x47\x5B\x0C\xA1\xA5\xEF\x7E\x08\x77\x71\x80\xBD\xBD\x7D\x51\x45\x4B\xD3" + + "\x26\x82\x32\xC6\xBD\xDB\x31\x83\xB2\xF4\x14\x3D\x36\x79\x74\x8C\xBE\xCB\x49\x5B\x79\xAB\xF0\x29\x63\x12\x63\x92\x46\xC1\x76\x2E" + + "\x1D\x37\x51\x47\x6F\x35\x02\x36\xB9\x83\x67\x39\xA3\x82\xBB\x5F\x0B\x1F\x4D\x4D\x35\x54\x35\x0E\x60\x95\xE7\x2D\xCF\x71\xB2\xB7" + + "\x75\x6D\x45\x1D\x17\x4E\xCB\x10\x0C\x06\x41\x86\xB4\x22\x82\x71\xB1\x4A\xB9\x38\xDD\x29\x6F\xA3\x9E\x8D\xAF\xA8\xC3\xA4\x6E\x30" + + "\x0A\xB9\x00\x03\x40\x68\xD8\x70\xA9\x36\x0B\x2C\xD5\x22\x1A\xB1\x28\x63\x01\xCE\x9F\x55\x73\x07\x48\x0D\x1B\xE1\x70\x64\xEC\xF4" + + "\xF1\x2F\x49\x27\x64\xC4\x6D\xD9\x01\x07\xB6\x52\x1F\x5D\xD6\xB3\x68\x5A\x48\x29\x18\xC1\xDF\x1B\xA1\xCB\x82\x1C\x9F\xE2\xC2\x00" + + "\xB0\x47\x64\xFF\x00\x50\x80\x34\x9E\x5C\x9F\x4B\x87\x0E\xC8\x54\x50\xBB\xF0\x96\x9F\x54\x24\xBB\xD7\x08\x75\xBF\xB1\xCA\x0A\x3B" + + "\xB8\x3E\xA8\xB7\xEE\x10\x8C\x11\xBA\x7C\xE1\x40\x33\x89\x27\xD1\x3E\x3D\x52\x27\x57\xCA\xEC\x24\x36\xE5\xF9\x52\xC0\x8B\x7D\x0A" + + "\x70\x31\xDD\x36\xE7\xE5\x28\x9A\x1C\x3E\x62\x15\x03\x69\xC9\xCE\x52\x0D\x69\x3B\x22\xDF\xD4\x61\x3F\x3C\x15\x40\x3A\x4E\x77\x1B" + + "\x24\x1B\xBE\xC1\x1B\x47\xBA\x70\xC2\x4E\x03\x73\xF4\x42\x00\x5A\x8E\x38\x1D\x21\xC3\x5B\x92\xBA\x14\xB6\xA9\x26\xC3\xA4\xF2\x37" + + "\xDD\x7B\x67\x9A\x82\xD3\x4C\x5F\x35\x44\x50\x80\x37\x7B\x8A\xE9\xC7\xA7\x94\xF9\x7C\x23\x44\xF3\x28\xF0\x8F\x3D\x1D\x8D\xA7\x0F" + + "\xA9\xC7\xFE\x2B\xB1\x1C\x31\xC4\xCD\x0C\x60\x03\xD1\x50\xCF\xC4\xBB\x0D\x35\xE2\x3A\x48\x2A\xE5\xAF\x92\x57\x69\xD4\xC2\x34\xB5" + + "\x59\x6E\xBD\x44\xDB\x74\x8C\x8D\xB0\xB9\xEE\x7B\x75\x03\x8D\x82\xF4\x31\xE3\x84\x17\xA4\xE3\x9C\xE7\x27\xC9\xE8\x9E\xCB\x4D\x2C" + + "\xE6\x57\x79\x47\x24\x05\xCB\xA9\xEA\x8E\x97\xB2\xCA\x61\xA8\xB8\x53\xC3\x2B\x76\x20\x93\x95\x5E\xEA\x5E\xB2\xAE\x86\xCD\x53\x23" + + "\x34\x47\x86\x1C\x63\x39\x59\x47\x4F\xF4\x84\xDD\x46\xC7\x56\xD7\xD7\x36\x9A\x17\x1F\x9E\x42\x7C\xCA\x38\xC6\x2E\xE2\x8B\x72\x6B" + + "\xD4\xCD\x5E\xF1\xD6\xBD\x25\x5E\x0B\x67\xBE\x39\xF1\xF7\x8E\x37\x6C\x7F\x92\xAC\x49\x79\xF8\x6F\x13\x8B\x8D\x0F\xE2\x4F\xA9\xC1" + + "\xCA\xF1\xD3\xFC\x35\xB0\x4B\x2B\x63\x37\xBD\x6F\x27\x60\xC3\xCF\xF2\x5D\x4A\x3F\x85\x5D\x3D\x51\x34\x91\x47\x5D\x2C\xAF\x88\xE1" + + "\xE0\x1E\x3F\x92\xBC\xB1\xC2\x1A\xDF\xD7\xDD\x0F\x6F\xAA\x6B\x68\x6C\x6E\x88\xBC\x86\x97\x80\xDC\x7F\x55\xAB\x51\x8B\x5D\x4D\x33" + + "\x27\xA6\x10\xB9\x8F\x19\x04\x15\x9F\x45\xF0\x9B\xA7\xE3\x23\x53\xA4\x71\xF7\x21\x76\x68\xBA\x3A\xD9\x6F\x67\x83\x4E\xF7\xB5\xBF" + + "\xC3\xA9\x66\xAD\x76\x62\xD2\x7D\x1E\xDE\xB3\xEB\x5A\x0E\x97\xB6\x19\x1A\xE8\xE6\xAA\x3B\x47\x16\x73\x92\xB3\x49\x3E\x36\xDE\x5F" + + "\xFE\x4D\xB6\x9C\x7D\x9C\xAF\x55\x9D\x2D\xD3\x50\x47\x25\x4D\x75\x2C\x2F\x11\x8D\x4F\x73\xF7\xC2\xAE\x47\x55\x6C\x96\x37\xD4\x59" + + "\xBA\x49\xD5\x34\xD1\xFF\x00\xAC\xD0\xDC\x38\x7B\x65\xCB\x19\x5D\x95\x51\x5C\x9B\xE2\xDF\x54\xD4\x7F\x95\x00\x8F\x3F\xC0\xD7\x2F" + + "\x0C\xFD\x7D\xD6\xD3\xB0\xB9\xB5\x35\x51\xB7\xFD\xAC\xFF\x00\xD1\x6A\xD6\x2A\xAB\x2D\x7D\xA3\xF1\xED\xA1\x65\x1B\x5B\xF3\xB6\x56" + + "\xE0\xB4\xA9\xE1\xBF\xF4\xF5\x4C\xE2\x92\x1A\x98\x0B\xDF\xB3\x5B\xA4\x8D\x5F\xC9\x4A\x7F\x25\xB5\xF0\x66\xBD\x0B\xF1\x0E\xFC\x3A" + + "\x89\x90\xDC\xEA\xE6\xAC\x85\xFB\x18\xDF\x8D\x96\xB0\xDE\xB2\x8B\xF3\x52\x4B\xF6\x23\xFB\xAC\x6A\x6A\x78\xA0\xF8\xAF\x51\x15\x3B" + + "\x44\x6C\x12\xEC\x1B\xF4\x5A\x4D\x15\x6D\x2D\x20\x06\x6A\x31\x3B\x87\x73\xCA\xB1\x6C\x92\x48\xEE\x5D\xEA\x85\x65\x25\x35\x4B\x18" + + "\x5A\x24\x6E\x43\x4F\x21\x72\x08\xC8\xCE\xE1\x78\xFA\xDF\xA8\xDF\x43\x45\x6A\x9A\x9E\x2F\x0D\xB5\x07\x1A\x4F\xE5\xE7\xFB\x29\x28" + + "\x2A\x5F\x51\x4C\xD9\x1D\x8C\x90\xBC\xCD\x47\xFD\x8C\xED\xC1\xF4\x23\xC9\x79\xB8\xC7\x47\x4A\xE0\xE9\x74\xBD\xC3\xCA\x56\x6D\x7F" + + "\xBE\x47\x59\x88\xEA\x1C\xE2\x1A\xEC\x83\x9E\x56\x87\xD4\xB4\x11\x54\xD0\x3E\x77\x12\x1D\x1B\x76\xC2\xC4\x2F\x30\x89\x6F\x4C\x88" + + "\x12\xEC\xF0\x17\x4E\x91\x26\x69\xCF\x77\xC9\x2B\xC4\x67\x5B\x5B\x5D\x33\x58\xEF\xCA\x1C\x30\xBC\xF1\xD1\x98\x63\x95\x91\xD7\x46" + + "\x62\x78\xDC\x9C\xE4\x21\xAC\xB1\x4D\x49\x0F\x8E\xDA\x79\x64\x68\x19\x38\xE0\x2E\x2B\xAA\x5A\x5D\xA7\xC2\x00\x7A\x05\xE8\x46\xBD" + + "\x99\xCC\xEC\xEB\xD2\x38\xD1\x92\x29\x6E\x2F\x8C\x9E\x74\x95\xD0\xB6\xCB\x17\xE3\x3C\x57\xD4\x17\x48\x46\x0B\xCF\xAA\xE1\x32\xD9" + + "\x3B\xE3\x6C\xBE\x0C\x8D\x6B\xFE\x5C\xF7\x53\x5A\xC3\xD9\x5A\xF8\x1A\x71\x9D\xB7\xEC\xB0\x92\xE1\xD3\x2A\xEC\xD2\x28\x2E\x75\xC2" + + "\xA6\x38\xDB\x36\x5A\xEE\x0E\x79\x4D\x77\xA9\xB9\x47\xAB\xF6\x9C\xC5\x94\xE0\xE4\x6A\xE0\xA8\x7A\x5A\x95\xD3\x57\x30\xF8\x7A\xDA" + + "\xD1\x9D\x5E\x8A\x2B\xED\xD6\x5B\x85\x63\xA8\xEA\x60\x60\x89\x8E\xC6\xD9\xCA\xF1\xF2\xED\xDC\xEF\xA3\xB6\x36\xE2\x8E\x6B\xAE\x4E" + + "\xB8\x57\x48\xEB\x65\x3C\xB2\xB8\x7C\xD8\x20\x7F\xCA\x06\xC1\x72\xF1\x3C\x47\x5B\x67\xD4\x3F\xDC\xDF\xEE\xBD\x96\xC8\x1B\x6F\x9E" + + "\xE4\x29\x9D\xF2\x7C\xA7\xEC\x13\x53\xD6\x5E\xA4\x6C\x8C\x2C\x7E\x91\xE6\xD7\xB6\xA0\x3D\x57\x98\xF2\x4D\xB7\x1C\x30\x4E\x2A\xBB" + + "\xBF\x83\xA3\x6C\x12\x52\xC8\xDD\xB2\x28\xA8\xAB\x25\x7F\x8D\x24\x12\x42\xEF\xE1\x24\x67\xF9\x26\x75\x4D\x7B\x26\xD6\xEB\x6D\x4C" + + "\x87\x18\x05\xC5\xBF\xDD\x18\xAB\xA9\xCE\xF5\xB2\x93\xF6\xFE\xCA\x63\x73\xB8\xC3\x4C\x5D\x16\x27\x07\x60\x5D\xCE\x56\x95\x9B\x2C" + + "\xAE\x31\x82\x7F\xA9\x52\xC6\x9D\xB6\xD7\xE8\x41\x47\xD4\xF7\x1B\x23\x58\x1F\x05\x4C\x74\xE0\xFC\xA4\xB7\x01\x5F\xAC\x9D\x51\x4B" + + "\x78\x81\xCD\xA6\x98\x3E\x60\xDC\x96\xF7\x0A\x87\x5B\x34\xD5\xF6\x1D\x15\x3E\x57\xBA\x4D\x23\x23\x7E\x15\xCB\xA6\xBA\x46\x9B\xA7" + + "\xA1\x7D\x6C\x4F\x73\xE5\x7C\x7E\x60\x78\x5E\x86\x1C\x9E\x48\x3D\xEA\x9A\x74\x61\x28\xED\x97\xA5\xDA\x65\x3A\xFB\x55\x75\xB8\x55" + + "\xC9\x0D\xC1\xFA\x29\xE3\x3A\xBC\xFC\x00\xB8\xAC\xB8\xC3\x47\x3E\x28\x27\x99\xCF\x77\xCC\x63\x23\x07\xF5\x5D\x4B\xED\xDD\xD5\x95" + + "\x92\xC6\xD8\x00\xD4\x4B\x49\xF6\x5C\x01\x48\xDA\x5A\xD6\x96\xED\xAE\x3D\x58\x3D\xB7\x5D\x56\xA2\xAF\xDD\x1D\x98\x71\xCF\x26\xD8" + + "\x75\x19\x3F\xEE\x7A\x7F\x10\x5F\x53\xE3\xCD\x1C\xD2\x3B\xBE\xA2\x37\x4A\x26\x13\x54\x26\x86\x57\x53\x1C\xEF\x92\xA3\xA7\xA1\xBB" + + "\xD4\x11\xE0\x53\x3D\xE1\xFF\x00\x29\x38\x19\xFA\x2F\x24\xC6\xA2\x19\x5C\xC9\x9E\xF6\xBC\x6C\x5A\x7B\x2C\x65\x29\xAE\x5A\x3A\xA1" + + "\x8F\x4E\xF8\x8C\xDB\xFB\x70\x74\xEA\xEA\x4C\xB3\x1F\x10\xCF\x50\x31\x80\xE7\x10\xBA\x76\xAE\xAB\xAB\xB5\xB5\xAD\x1E\x29\x89\x83" + + "\x66\xB8\x8C\x2E\x25\x35\x1D\xCA\x6A\x57\x54\x41\x1B\xA4\x8D\xBC\x93\x8C\x26\x92\x0A\xB8\x1A\xF8\xEB\x58\xE8\xDC\x78\x0E\x53\x74" + + "\xFB\x6B\x83\x17\x83\x4F\x3F\x42\x9B\xB5\x7C\x70\x6A\xD6\x4E\xB0\xA5\xBB\xE9\x89\xA7\x4C\xC4\x7C\xA5\x55\x3A\xB6\xEF\x71\x92\xA6" + + "\x4A\x52\xE3\x1D\x39\x38\xC7\xAA\xB0\xF4\xDF\x4A\x50\xDB\xE9\xE3\xAC\x8E\x57\x49\x33\x99\x93\x93\xB0\x54\xEE\xAA\xB8\xB1\xF5\xF3" + + "\x44\x19\xB8\x38\x04\xAD\x98\xD4\x77\x70\x78\x99\x5B\xDB\xC9\xE0\xA4\xA5\xA8\xB7\xCE\x27\xFC\x79\x80\x91\x9D\x0C\xF9\x8A\xF3\xD4" + + "\xC9\x15\x45\x60\x96\xA6\xA6\x79\x9C\x0F\xE6\x23\x08\x04\xD2\x55\x3F\xCC\xC2\x08\x66\x4B\xBB\x2F\x3C\x54\xB5\x15\x53\x16\x53\xC6" + + "\x64\x39\xDF\x0B\xA6\xCE\x1A\x51\x49\x2E\x6C\xF4\x48\x20\x75\x47\x8F\x4B\x3C\x90\x4B\xF9\x48\x3B\x05\xD0\x8E\x52\xE8\x43\xEE\x57" + + "\x27\x54\xB8\xF0\xC6\xFE\x55\xC5\xAC\xA3\xAD\xA0\xC1\xA9\xA6\x74\x60\xF0\x5D\xDF\xF4\x50\xD3\xBA\x6A\x89\x84\x50\xC2\x64\x71\xEC" + + "\xDE\x56\x36\x61\xB9\xDD\x51\x7C\xB6\x75\x30\xA3\x73\x5B\x13\x9F\xE1\x8F\xCA\x48\xC1\x56\x8A\x4E\xAD\x82\x62\x3C\x68\xCB\x01\xFC" + + "\xCB\x2F\x7D\xA6\xAA\x9E\x1F\x12\x6A\x79\x18\x3B\x93\x8D\x95\xB7\xA5\x6D\x22\xE7\x42\x35\x3C\xB4\x33\x6D\xB9\x5A\xE7\x18\xF6\xCE" + + "\xAC\x59\x26\xE5\xB6\x8B\xFC\x55\x4C\x9E\x31\x23\x37\x6B\xB8\x28\xCE\x0E\xF8\x51\xD2\xC1\xF8\x6A\x66\x42\xCD\xC3\x46\x02\x93\x2E" + + "\xFE\x15\xC6\xCF\x45\x0D\xAC\xB7\x62\x09\x48\x90\x7B\x61\x10\x39\x1B\x8C\x21\x70\xD2\x72\x37\x54\x0B\x6C\x6C\x70\x9B\x5E\x3B\x14" + + "\xE3\x71\x92\xD4\xB4\x82\x76\xC8\x42\x8D\xAC\x77\xD9\x3F\x97\xB1\x4C\x43\xB3\xB8\x18\x4D\x80\x7B\x21\x89\xDB\x00\x8F\x98\x27\x23" + + "\x5F\xD1\x10\x6E\x4E\xE4\x7D\x91\x60\x0E\x10\x26\x47\xE1\x0C\x71\x84\x5E\x10\xF5\xCA\x3D\x0E\x23\x20\xA4\x1A\x7D\x30\xA5\x0B\x03" + + "\x1A\x79\x09\xF4\xE7\xB1\x0A\x40\xC2\x07\xAA\x7F\x0F\x3D\x96\x54\x42\x10\xCD\xFD\x54\xF1\x51\x4B\x31\xF2\x35\xCB\xD7\x43\x46\xF7" + + "\xCA\xD7\xBA\x3F\x20\x3B\x92\xBB\xD2\x4F\x4F\x49\x0E\xB9\x1C\xD6\x30\x77\x5D\x58\x74\xFE\x4E\x5F\x06\x8C\x99\xB6\x70\x8E\x2C\x56" + + "\x47\x86\xEA\x99\xE1\x8D\x1B\x95\x5D\xBC\xFC\x43\xE9\xBE\x99\x91\xD1\x31\xC6\xB2\xA1\x9B\x16\xC6\x46\x41\xFB\xAE\xB5\xEF\xA9\xC4" + + "\xB4\xB3\x41\x42\xCD\x5A\x9A\x46\xB3\xC7\xD9\x60\x56\x7B\x2C\x75\xDD\x60\xEA\x1B\x8B\xCE\x96\xBC\xEA\xF5\x76\xD9\x5D\x6B\x0C\x61" + + "\x5B\x51\xCF\xE4\x94\xBB\x2D\xD7\x5F\x8C\x17\xEB\xB3\x8C\x16\x4A\x43\x03\x5D\xF2\xB9\xA0\xEA\xFE\xCB\x99\x07\x49\x75\x77\x54\xCC" + + "\x26\xBA\xCF\x2C\x6D\x71\xCE\xB9\x88\xFF\x00\x85\x63\xA9\xBD\xD2\x74\xC1\xA6\xA7\xB6\x74\xFF\x00\xE1\x84\xCF\xF0\xDB\x53\x38\x1A" + + "\x49\xFB\x1C\xAB\x45\xE2\x2B\x84\x3D\x2C\xEA\xB9\xA5\x15\x13\xC5\xFB\xC0\xD8\xBE\x53\xEC\xB6\x55\xF6\x61\x75\xD1\xCD\xE9\x8F\x84" + + "\xF4\x36\xBA\xD8\x6A\xAA\xE7\x75\x44\xCC\x3A\x86\x38\xCA\xB4\xDE\x2F\x6F\x8A\xAA\x4A\x76\xD2\xB0\xB5\x87\x4E\xA7\x34\xEE\xA2\xE9" + + "\x2B\x93\xEF\xD6\xDA\x6B\xA4\x52\x96\xB4\x47\xE7\x88\x71\x9C\x28\x6B\xAF\xB5\xD2\x17\x35\xD1\x88\x5B\x9E\x43\x77\x5B\x7A\xE8\xC7" + + "\xB6\x50\x3A\xFE\xAC\x1B\x3B\x9B\xF2\xBA\x53\xA7\x01\x75\xED\x76\x6A\x08\x7E\x18\xB2\x7A\xDA\x66\x48\xE6\xC3\xAC\x17\x76\x2A\xAF" + + "\xD7\x93\xBA\xAA\xBA\x86\x98\xC8\x5E\x5D\x28\x24\x15\xA9\xB6\xC5\x1D\x77\x48\xC7\x6B\x91\xCE\x8D\x8E\x88\x34\x96\xF2\x16\x1D\xB6" + + "\x64\x57\x3E\x1C\xD9\xE9\x61\xE8\xF8\xEB\x65\x81\xAE\x99\xC0\xBC\x3C\xF2\x36\x5C\xFA\x4B\xE5\x60\xE9\xAB\xF5\xC9\xB3\x16\xBD\xB2" + + "\x16\xC4\xE1\xDB\xE5\x5A\x05\xB2\xCF\x05\xB2\xCB\x1D\xB6\x17\x13\x13\x19\xA0\x13\xCE\x17\x3E\x1E\x8D\xB6\xC1\x66\x96\xD8\x35\x3A" + + "\x09\x5D\xA9\xF9\xE4\x9F\xFD\x85\x69\x92\xCA\x35\xCD\xF7\x7A\x1E\x98\xB4\xDC\x9F\x78\xA9\x75\x54\xEF\x68\x20\x91\x83\x9E\xDC\x2F" + + "\x77\x5B\x5C\xAB\xBA\x7A\xE5\x6A\xBC\xB6\x49\x1D\x01\xF2\x4D\x18\xE0\x9C\x1D\xFF\x00\xA2\xBA\x55\xD8\xAD\x75\x54\x74\xD4\xD5\x4C" + + "\x63\xA3\xA5\x39\x8C\x13\xC1\x55\xEE\xA4\xA2\xA8\xEA\x0A\xA8\xE8\x6A\x1F\x4F\x05\xBE\x29\x03\xB5\x1C\x97\x38\x29\x54\x2C\xE0\x56" + + "\xD1\x5C\xEE\x5D\x0F\x5D\x76\xC4\x8E\x96\xB4\xF8\x9E\x17\x70\xCD\xB6\xFE\x4B\xDF\x4F\xD4\xD4\x47\xA2\x69\xE3\xB7\x57\xB6\x86\xA2" + + "\x18\xF0\xE8\x8B\x4E\xAC\xFA\x70\xAF\x54\xB3\x50\x45\x4A\xCA\x68\x65\x8F\x43\x1B\xA4\x35\x03\x2D\x36\xA3\x31\x95\x94\xD0\x97\x9E" + + "\x48\x4D\xA4\xB3\x2A\x6D\x5D\xFA\xFB\xD0\xED\xA8\x90\x4B\x30\x65\x5F\xEF\x5A\x06\x0B\xA3\xC7\xF7\x5D\x7B\xC4\x2C\xEA\x67\xDA\x69" + + "\xAC\x74\x6F\x8F\xF0\xF2\x07\xC9\x36\x30\x23\x18\x3B\x2D\x0E\x5A\x8B\x7D\xB6\x3D\x32\xBE\x38\x5A\x7B\x61\x4B\x4D\x3D\x35\x4C\x1E" + + "\x2D\x23\x98\xF6\x1E\xED\x09\xB4\x59\x89\x4C\xD7\x0F\x8A\xF5\x2D\xCE\xED\x97\x73\xFF\x00\xE2\xB4\x9A\x1B\x83\x29\x00\x73\xA8\xA1" + + "\x91\xE3\xF3\x60\xE5\x67\x33\xEA\x3F\x16\xAB\x0B\x71\xB4\xDD\xFF\x00\xF1\x5A\x35\x0D\xCC\x51\x8D\x5F\x82\xA7\x73\xC7\xE6\x00\xE4" + + "\xA9\x12\xC8\xE1\x7C\x50\xA9\x35\x76\xFB\x1D\x41\x8F\xC3\xF1\x24\xCE\x9F\x4D\x9C\xBA\x96\x86\x07\x5B\xA2\x20\x91\xB2\xE6\x7C\x51" + + "\xA9\x35\xD6\x6B\x1D\x53\x99\xE1\x99\x26\x04\xB7\x1C\x6C\xE5\xD3\xB2\x1F\xFB\x74\x78\x3D\x97\x9D\xA9\xFA\xCE\xCC\x1F\x41\xCC\xEA" + + "\x78\xAE\x12\x46\x3F\x07\x1B\x9C\xCD\x3E\x6C\x2C\xF2\xC1\x49\x0D\x5F\x5E\xC0\xCA\xD6\x83\xFE\xD3\xF7\x5A\x37\x52\x5F\x24\xB5\x3D" + + "\x8C\x8D\x85\xE1\xED\xC9\x3E\x8B\x21\xB8\x57\x56\x43\x7C\x92\xE1\x4A\xD3\xE2\x30\x6A\x07\xDF\x2B\xA3\x48\x9D\x72\x69\xCF\x56\x6C" + + "\x71\xF4\xED\x25\x34\xF5\xB3\xBC\xEB\x65\x43\x70\xE6\x3B\x80\x3F\xF6\x16\x0B\x2D\x04\x7F\xE2\xE3\x1E\x9C\x53\x19\xF0\x0F\x65\x65" + + "\xB9\xFC\x4B\xBE\xD6\x5A\xCD\x2B\x69\xBC\x27\x11\x87\x3C\x72\x55\x46\x4A\xD7\x78\x21\xF9\x7F\xE2\x0B\xB3\xA7\x1C\x15\xDB\x5F\x07" + + "\x32\xFB\x9B\xDF\xF8\x5A\x8A\x49\xA8\x26\x8F\xCB\x1D\x33\x76\x8C\x70\xEE\x7F\xBA\xCC\xFA\xA2\xD9\x4F\x41\xD6\x73\xB2\x85\x83\x0E" + + "\x39\xD0\xDF\x54\x76\x8F\x8A\x77\x3A\x2A\x06\xD3\x54\x51\x19\x8B\x5B\x86\xBC\x8D\xD7\x32\x82\xF1\x54\xFE\xA3\x75\xDE\xAE\x37\x3D" + + "\xDA\xF5\x11\xF6\x58\x4B\xE9\x74\x65\x1E\xF9\x34\x4E\x85\xA3\x92\x38\x26\x9A\x6A\x51\x01\x27\x00\x01\xCA\x8F\xAA\x3A\x56\xA6\x58" + + "\x5F\x3D\x84\x16\x54\x48\xEC\xC9\x8E\xE1\x7A\x2D\x7D\x63\x1D\x63\x98\xD8\xDA\xE1\xAB\xB3\xB1\xB2\xF6\xDF\xBA\x86\xA2\xDF\x04\x6E" + + "\xA6\x8D\xA7\x58\xDC\xB8\x1D\x97\x8D\x27\x25\x3B\x67\xA0\xAB\x61\x9F\x74\xBD\x3C\xF1\xDC\x8C\x17\x5C\x82\x6A\xF4\xCD\xAB\xD3\x4F" + + "\xFF\x00\x0B\x55\x8E\xC1\x41\x4D\x73\x9A\xE6\xC6\xE2\x49\x23\xD2\xEC\xF1\x85\x9A\x3C\xBA\xA2\x96\xA2\xA4\x83\xE2\x4B\x36\xA7\x11" + + "\xEB\x85\xE8\xAB\xBF\xDD\xE7\xB7\x8A\x5F\xC4\x48\x58\x5B\xA4\xEE\x37\x5A\xF0\xEA\xA1\x8E\x53\xDC\xBD\xCC\x72\xE3\x93\x51\xAF\x83" + + "\x8B\x75\x7B\x05\xDA\xA7\xF0\xF8\xF0\xCC\x9E\x4D\x23\x6C\x2D\x3A\x93\xA7\x2D\xB7\x1B\x55\xB9\xE7\xE4\x80\x07\x37\x4F\x07\x9E\x7F" + + "\x55\x9C\x0A\x7A\xB6\xD1\x39\x86\x07\x10\x47\x3B\x70\xBD\xF6\x9E\xA2\xB9\xDA\xE9\xBF\x0F\x0B\xCF\x86\x36\x0D\x77\xE5\x53\x4F\xA9" + + "\xC7\x19\xC9\xC9\x76\x63\x93\x1C\x9A\x54\x1F\xC4\x88\xC5\x3D\x68\x8E\xDA\x30\xF7\xB8\x17\x06\xFF\x00\x16\x36\xFE\x4B\xAD\xD0\xB2" + + "\x75\x05\x4C\x53\xC5\x7E\xF1\x3C\x2D\x38\x8C\xBF\x1E\xDE\x8B\x83\x53\x24\xB5\x02\x3A\xC9\x5F\xAE\x6F\x1F\xC4\x25\xDF\x4C\x2B\x15" + + "\x93\xAA\xA5\xAE\xA8\x74\x26\x22\xD3\x19\xC1\x27\x82\xB2\x8E\x55\x93\x73\x8A\xF7\x36\xA8\xED\x69\x36\x43\x79\xE8\xD9\x69\xA9\xE6" + + "\x9A\xD3\xAE\x49\xE4\xCE\xC7\x1B\x7D\x16\x7B\x15\x2D\x5C\x77\x97\x47\x76\xD4\xD7\xB4\x86\xBB\x57\x65\xAD\xF5\x15\xFE\x7B\x55\xAD" + + "\xB3\x45\x0E\xB7\x38\xE1\x64\xD7\x1A\xE9\xAE\x75\xD5\x15\x73\x33\x43\xDE\x38\x1D\x96\xC5\x27\xB3\x93\xAF\x4F\x07\x2C\xCA\xBE\xFF" + + "\x00\xB1\xB7\x47\xD3\xB4\x12\xD4\xD1\x57\x35\x80\x3E\x9E\x30\x18\x07\x0B\x27\xF8\x84\xDA\x77\x75\x54\xFF\x00\x85\xC6\x01\xF3\xE9" + + "\xF5\xC0\x43\x4F\xD6\xD7\xFA\x7A\x06\xD2\xC7\x34\x85\xAD\x18\x04\x8D\xD7\x1C\x3E\x79\x7C\x59\x2A\x19\x23\xE4\x7E\xF9\xF7\x5D\x19" + + "\x73\x42\x51\xDA\x86\x9B\x49\x96\x19\x37\x3F\xF6\x6B\x5D\x31\x66\xB7\x5C\xFA\x2A\x8E\x17\xB1\xAE\x69\x01\xCE\xC7\x73\xBA\xE1\xFC" + + "\x50\x82\x9A\x28\xE9\x19\x10\x68\x94\x33\x00\x0E\x71\x95\x4A\xB3\xF5\x45\xD6\xC4\x1D\x15\x24\xCE\x6B\x1C\x73\xA0\xA0\xAF\xBB\x57" + + "\xDD\xA7\x7D\x5D\x6B\x9F\x23\xC7\x19\x1C\x2A\xF3\x45\xC3\x6A\x5C\x98\xC3\x49\x92\x19\x5C\xDB\xE3\x92\xF3\xD1\x34\xB7\x98\x9F\xFF" + + "\x00\x5D\xE2\xB6\x94\xB3\xCA\x1E\x47\xFC\x2F\x5D\xC7\xA0\x68\xAA\xE7\x7D\x43\x65\x7B\x5E\xE3\x9C\x76\x5E\x1E\x94\xEA\x8A\x8A\xF9" + + "\x45\x3C\xB1\x69\x0D\x6F\x2A\xEB\x24\xC6\x3A\x63\x2B\x9A\x34\x81\x95\xCB\x27\x25\x23\x9D\x28\xB4\x65\x57\xDA\x3A\xEB\x7B\xDC\xC7" + + "\x40\x61\xA7\xE0\x11\xC1\x56\xAE\x81\xB3\x52\x56\x74\xD5\x46\xBF\xF3\x26\x38\x73\x87\x23\x65\x5D\xEA\x7E\xA9\x92\xE2\xE7\x53\x0A" + + "\x5C\x31\x87\xE6\x2B\x8F\x64\xEB\x0B\x87\x4F\xCA\xF8\xE8\x99\xAD\x8E\xDC\xB3\xDD\x76\xE3\x6D\x73\x23\xCE\xCB\x28\xA9\x52\x34\x2E" + + "\xBF\xA1\xA3\xA4\xE8\xD6\xC0\x00\x2F\x8F\x66\x13\xCF\x75\x5C\xF8\x4F\x43\x04\xB5\xF5\x32\xD4\x34\x19\x58\x30\xD0\x7B\x70\xAA\xF7" + + "\x6E\xA8\xB9\xDF\x2B\x98\xFB\x80\x90\xC2\xD3\xF2\x34\x70\x14\x34\x57\xEA\xCB\x35\xCF\xF1\x36\xD1\x23\x1A\x3B\x38\x72\x3D\xD6\x6E" + + "\x49\xCA\xCD\x5B\x95\xD9\xB5\xDC\xED\x14\x54\x7D\x3F\x5C\x1E\x32\x1E\x0B\x89\x77\xAA\xA5\xD9\x19\x59\x0B\x3F\xE8\x35\x63\x3B\xE9" + + "\x5C\x6A\xBE\xBB\xB9\xF5\x05\x3B\xA9\x65\x66\x86\x69\xDF\x4F\x75\x61\xB1\x5D\x5F\x41\x0B\x62\x31\xEA\x6B\xB0\xB0\xCB\x2B\x5E\x94" + + "\x6F\xC2\xD3\x97\x25\xD6\x1D\x5E\x13\x49\x3E\x7C\x6E\x8B\x5B\x89\xDD\x41\x15\x43\x65\x60\x76\x31\x95\x26\xAE\xE7\x70\xBC\xEB\x3D" + + "\x4A\x24\x27\x6D\xC0\x29\x03\xDC\x20\xDB\x91\x92\x96\x5B\x8E\xE1\x51\x41\x17\x77\xC2\x70\xF0\x7D\x90\x6D\xC6\xB3\xF5\x4C\xE1\x91" + + "\x8C\xE5\x05\x20\x8B\xF1\xCE\xE1\x2D\x6D\x27\x65\x19\x2E\x1B\x69\xC8\xF6\x4E\xD8\xF5\x73\xFC\xD0\x94\x58\x75\x02\x8B\x56\x13\x33" + + "\x49\xE0\x23\xD2\x15\x31\x04\x9C\x72\xEC\x22\x04\x91\xB1\x53\x43\x4B\x25\x41\xD3\x1B\x49\xF7\x52\xDC\x1F\x41\xD3\x96\xE7\x57\x5D" + + "\xE6\x01\x8D\x1C\x1E\xFE\xCB\x64\x31\x4A\x7D\x18\x4B\x24\x63\xD8\x10\x52\x4D\x3B\xBC\xA0\xE3\xB9\xEC\xA0\xBC\x75\x05\x8F\xA5\xA9" + + "\xCC\x97\x3A\xA6\x3E\x60\x3C\xB0\x83\xB9\xFA\x2C\xD3\xA9\x3E\x2F\xD7\xDC\x8B\xA8\xFA\x72\x07\x52\xC6\xED\x83\xC7\xCE\x7F\xA8\x5C" + + "\xBB\x3F\x40\x5E\x2F\xF2\x7E\x3E\xFB\x3B\xA9\xE1\x77\x99\xCF\x98\xEE\xE5\xD9\x0C\x31\x8F\xDC\xE6\x96\x49\x3F\xB1\xD0\xBE\xFC\x55" + + "\xBC\x5F\xEA\x05\x2D\x86\x17\xD3\x42\x5D\xB0\x60\xF3\x38\x7B\xF6\x5A\x9D\xB2\x95\xD7\x6E\x90\xA2\x7D\xE8\xC9\x4F\x2C\x2C\x05\xE4" + + "\xF3\x9C\x2A\xDD\xBE\xDD\x65\xE9\x6B\x7C\x55\x16\xAA\x41\x56\xDD\x58\x92\xA7\x1F\x2F\xB9\x57\x7B\x5D\x75\x2D\xDA\x8F\x34\xEE\x6C" + + "\xD4\xF2\xB7\x67\x37\x82\xBB\x20\xA8\xD1\x22\xAD\x58\xEB\x78\x06\x3A\x26\x19\x47\xFF\x00\xC8\xFE\x0F\xD1\x65\xDD\x4B\x19\xB2\x75" + + "\x75\x2D\xC6\x12\x43\x5E\xF1\x9F\xAA\xD7\x2B\xA5\xB5\xD1\x3D\xF4\xB4\x54\x2D\x74\x91\x1D\x25\xEE\x1B\x05\x43\xEB\x7B\x7F\xE3\xEC" + + "\xAF\x94\x02\xE9\x21\xF3\x37\x6E\x12\x5D\x04\x5A\xBA\xAA\xDC\xDE\xA9\xE8\x86\xCF\x46\xD0\xE9\xB4\x89\x62\xC7\xAA\xE9\xF4\xAB\x2A" + + "\xEB\x3A\x42\x9E\x0B\xAC\x2E\x8A\x5F\x0B\x43\xDA\xEE\x78\x5C\x2F\x85\x17\x81\x5F\xD3\x82\x92\x47\x65\xF4\xFE\x5C\x1F\x45\x67\xBC" + + "\x5D\xCD\xBE\x58\x29\xE1\x0D\x12\x4C\x70\x1C\xFE\x06\xCB\x24\xAF\x92\x3E\x06\xE9\xFB\x0B\x7A\x46\xCB\x54\x28\x9C\xE9\xB5\x38\xBD" + + "\xAC\x3D\xB3\x8D\x97\x36\xB6\xF7\x5F\x30\x22\x67\x78\x3E\xA1\xAD\x5D\xDA\x8B\x9D\x55\x15\x92\x09\xA3\x63\x26\x92\x5E\x48\x07\x0A" + + "\xB9\x5B\x78\xAA\xA9\x6B\xBC\x59\x8B\x07\x76\x86\xEC\x9D\x70\x45\xCF\x26\x73\x74\x3F\xB4\xFE\x21\xD1\x40\x1C\x5E\x1A\xE1\x9F\xAE" + + "\xEB\x61\xBD\xD7\x3E\xD7\x64\x7C\xF0\xB7\xCC\xC6\x8C\x7B\x2C\x9F\xA5\x63\xFD\xA5\xF1\x41\xF3\x7C\xCD\x89\xE4\xE7\xEC\xB5\x5A\xCD" + + "\x77\x7A\x97\x5A\xE9\x80\xD1\x8F\xDF\x3C\xF6\x1E\x83\xDD\x63\x13\x26\x53\xEA\x7A\x9E\xA6\x92\xB9\x8C\xA7\xAB\xA8\x9A\x6C\x6A\xD0" + + "\xFC\x16\x3B\xF4\xDD\x76\x9B\x76\x9A\xE1\xA4\x4D\x70\x6D\x2E\x78\x6C\x40\x83\xF7\xC8\x51\xF5\x35\xBD\x9D\x21\x6C\x80\xD9\x2C\xEE" + + "\xAA\x99\xE7\x41\x99\xA0\x6A\x6E\xDC\xF2\xAC\x3D\x2F\x4F\x53\x73\xE9\x98\x5D\xD4\x54\x6C\x6C\xF2\x37\xCC\xC2\x3F\xAA\xCD\x35\x7D" + + "\x1A\xDD\xD1\xCD\x65\xA2\x92\x41\xAA\x62\x6A\x4F\xF1\x3C\xF3\xFA\x29\x9B\x69\xA1\x6F\xCB\x4C\xC1\xFA\xA8\xAB\x68\xFF\x00\xC3\xB7" + + "\x9A\x78\xE9\xC9\xFC\x1D\x63\xB4\x36\x3E\xD1\xBB\x04\xED\xED\x80\xBA\x58\xEE\xBA\x63\xB5\xAE\x11\xA5\xDA\x67\x82\x4B\x5D\xB8\x30" + + "\xBA\x5A\x76\x06\x8E\x49\xCA\xE5\xBE\x9A\x29\x09\x36\x38\x2A\x32\x39\x92\x9C\x81\x8F\xFF\x00\x65\xD2\xA7\xA6\x37\xDB\xD3\xE9\xDC" + + "\xE3\xF8\x4A\x6F\xF3\x00\xE1\xEE\xF4\x3F\xC8\xAE\xA7\x52\xD8\xAB\xAE\x36\x76\xD2\x58\xEB\x1B\x41\x23\x4F\xCD\x8D\x88\xC7\x0B\x54" + + "\xE4\xBA\x48\xCA\x29\x94\x17\xD0\xF5\x3C\x55\xAE\xA9\xFC\x0C\xB5\x71\x17\x64\xCA\xE7\x34\xB8\x37\xD3\x63\x85\x66\xE9\x12\x1D\x41" + + "\x53\x2B\x9C\x1B\x2C\xD2\x17\xBE\x2E\xF1\x9C\x01\x85\xD6\xE8\xBE\x9A\x9B\xA6\x6C\xA6\x92\xAA\xAC\xD5\x4A\xF7\x6B\x73\xCF\x19\xF6" + + "\x5E\x5E\xA3\x80\x5B\xAF\x54\x15\x94\xA3\x41\xA9\x90\xC3\x30\x1F\x98\x69\x27\x3F\xA8\x0B\x57\x34\x6C\x55\x66\x46\xFD\x4E\xF8\xB1" + + "\x58\x5B\x8F\xF3\xBB\xFF\x00\xE2\xB4\x8A\x2B\x93\x68\xDB\xAB\xF0\x54\xEE\x78\xFC\xD8\x39\x2B\x36\x60\x74\x9F\x14\x6B\x1C\xD3\x83" + + "\xE2\xFF\x00\xC2\xD2\x68\xAB\xE3\xA3\x01\xCF\xA2\x86\x47\x8F\xCD\xBE\x56\x11\x36\x33\x89\xF1\x42\xB0\xD7\xF4\xFD\x8E\xA8\xC7\xE1" + + "\x99\x27\x07\x4E\x38\xD9\xCB\xAD\x64\x69\xFD\x99\x19\x04\x71\xDD\x72\xBE\x28\xD6\x0A\xEE\x9A\xB1\xD5\x08\xFC\x3F\x12\xA0\x1D\x3E" + + "\x9E\x57\x2E\xAD\x8C\xFF\x00\xDA\xE2\xE3\xE5\x5E\x7E\xA7\xEB\x3A\xF0\xFD\x05\x2F\xE2\x0D\xC6\xB2\x9A\xB1\x91\x44\x31\x19\x6F\x21" + + "\x65\xD5\xB7\x5A\x96\x55\x18\xE3\x1A\xC9\xE7\x2B\x59\xF8\x87\xF8\x67\xF8\x4D\x75\x4C\x50\xCA\xDE\x43\xF3\xB8\x59\x4D\x1D\xAA\x5B" + + "\xD7\x53\x36\x92\x9B\xFD\x43\x8C\xFB\x2D\xFA\x6A\x6B\x93\x5E\x4E\x0F\x18\xBB\xD6\x6B\xC0\x88\x6A\x52\xFE\xD8\x98\x65\xCF\xA1\x85" + + "\xD2\xF6\x90\xF2\x15\xB9\xBD\x04\xDB\x94\xD5\x94\x8D\xF1\x62\x96\x99\xB9\x6B\xDD\xF2\xB8\xAC\xE2\xAA\x92\x6A\x5B\x8B\xE8\xDF\x9F" + + "\x11\x8F\xD3\x85\xD6\x9A\xF6\x54\x68\x7C\x9D\x29\x6F\x95\x85\xDE\x66\xE0\xAF\x45\x05\xE6\x73\x3F\x87\x2F\x7E\x0F\xA2\xED\x45\xD1" + + "\x12\xD2\xDA\x69\x26\x98\x49\x24\x95\x44\x60\x30\x7C\xA3\xDD\x73\x2F\xFD\x3B\x51\xD3\x97\xA8\xA1\x9F\x05\x8E\x19\x63\xFD\x42\x3D" + + "\xAD\x3E\x0A\xBF\x32\xD5\xD3\x2E\x75\x5D\xD6\x28\x9B\x18\xE7\xE6\x0A\xF5\x7E\xAB\x82\xDB\x49\x1D\x3C\x91\xEB\x7C\x8D\xDB\xD1\x70" + + "\x3E\x1D\x32\x8E\x49\x1C\x1D\x3C\x4F\x97\x19\x6B\x5B\x9C\x85\x61\xEA\xFB\x1C\x97\x08\x1B\x34\x33\x47\x13\x61\x1E\x62\xFC\xF0\xBC" + + "\x7C\xAE\xE7\xCA\x3B\x20\xBD\x34\x65\x6F\xBA\xD7\x56\x5C\x99\x46\x3F\xE9\xA3\x7B\xB8\x62\xEC\x7E\xC9\x84\x4C\x61\x92\xE9\x2F\x88" + + "\xE1\xF2\xE4\x6D\xFC\x97\x82\x47\xD2\xB2\xE7\x45\x0C\x75\x51\x4D\x28\xA8\xC9\x6B\x3B\x0D\x25\x7A\xAE\x56\xA9\x67\x8A\x6B\xAB\x83" + + "\xCD\x2F\x8A\x1A\xD6\xB4\x6E\xF3\x8E\x47\xB2\xE3\xCC\xF3\xE4\xCA\xB1\xE3\x7B\x78\xB3\x64\x3C\x71\x83\x94\x95\xF2\x49\x1D\x3D\x25" + + "\x0C\xF9\x37\x89\x75\x0F\xCA\x71\xFD\x92\xAA\x8E\x86\xBD\xE1\xA2\xEA\xF8\xFD\x99\xDC\xFE\x8A\x4B\x95\xA2\x6B\x2C\x14\xF2\x48\xD0" + + "\x60\x9D\xB9\x6B\xBB\x83\xE8\x7D\xD4\x56\xEA\x39\x6E\xD5\xA2\x96\x9D\x8D\x2E\x23\x2E\x24\x6C\xD1\xEA\xB8\x65\x0D\x4C\x72\xEC\xB7" + + "\xBB\xE7\x8F\xF4\x6C\xF2\x63\x71\xBA\x54\x45\x27\x4F\x53\xB5\xCD\x63\xAE\xD3\xEA\x77\xCA\x35\x0D\xFF\x00\x92\xE1\xCF\x57\x72\xB0" + + "\x5F\x5D\x0D\x14\xD2\x4E\x07\x1B\x67\x3F\xA2\xEE\xD1\xD8\x2A\x6A\x1F\x59\x53\x4E\xD7\x88\xE8\xDF\x87\xB1\xC3\x77\x8D\xBE\x5F\xD5" + + "\x7B\x3A\x7A\xEF\x68\xA1\xEB\x1A\xB7\xDD\x24\x63\x03\x9A\x03\x1C\xFF\x00\x5D\x97\x6E\x18\xEA\x31\x65\x4B\x23\xDC\x9A\x66\x12\x78" + + "\xE7\x0B\x8A\xAE\x4E\xDD\x45\xE3\x57\x47\xD3\xD4\x5D\x99\xA2\x49\x5B\xBB\x71\xF5\x54\x2B\x95\xDE\x92\x84\x31\xD4\xF4\xA2\x6F\x14" + + "\x67\xCE\x38\xFD\x16\xA1\xD4\xF6\x3F\xF1\x2D\xAE\x19\x2D\x93\xB3\xC3\x3B\xB4\xF6\x21\x67\x35\x96\x09\x6D\x95\x46\x3A\xE9\x58\xD6" + + "\x0E\x75\x70\xBB\xA0\xD5\xF4\x64\x9D\x46\xD4\xA9\x9C\x08\x6E\x97\x2A\xC0\xE9\x45\x57\x84\xC0\x76\x68\x01\x4B\xF8\x9B\x90\xC3\x8D" + + "\x79\x23\xE8\x3F\xB2\x1B\x6D\xB6\x6B\x99\x14\xB4\x4D\xD6\xE9\x1E\x71\x8E\x31\xEA\xBA\x34\x9D\x1D\x51\x58\xCA\xA6\x53\xCC\x25\x92" + + "\x94\xF9\x98\x01\xDF\x6E\xDF\xAA\x56\x49\xB6\xD1\xDC\xA5\xA6\xC3\x18\xA9\xAB\x6D\x5F\x6C\xF2\xC7\x5E\xC6\xBC\x3E\x56\xC1\x2C\xA3" + + "\xF3\x3B\x2A\x3F\xC4\xD7\xBC\x92\x2B\x3C\xA7\xB0\x03\x01\x78\x5F\x1F\x87\x21\x8D\xCD\xC3\x81\xC1\x0B\xB6\x3A\x5E\xAA\x3A\x3A\x79" + + "\xA4\x93\xC1\x35\x27\x0C\x61\x07\x27\xDD\x63\x15\x37\xC4\x4D\xB9\x27\xA7\x8D\x3C\x91\xBF\xEE\xC8\x63\xB8\xDC\xA9\x8F\x89\x15\x5B" + + "\x81\x1E\x98\x56\xFE\x9F\xEB\x2A\xEA\xE7\x36\x8A\xB1\x9A\x98\x46\x0C\x9D\xD5\x46\xBE\xD1\x51\x66\x94\xC1\x5A\x31\xA8\xE4\x1E\xC4" + + "\x2D\x52\xDD\x45\x69\xAA\xB2\x08\xAD\x2C\x87\xC7\x31\xE3\x53\x79\x05\x5B\x69\x35\x33\x87\x53\x1C\x69\xC6\x58\x78\x4D\x19\xD5\xEE" + + "\x6A\x59\x6B\x5C\x21\x98\x3C\xB9\xF8\xC0\xEC\xA3\x96\xAA\x0A\x17\xB9\x94\x94\xEC\x6B\xF1\x83\x26\x37\x5D\x2A\xFE\x87\xBA\xC1\x2B" + + "\xA4\x10\x78\x80\x9C\xF9\x3F\xF5\x5C\xE9\xE8\xCD\x3C\x12\xFE\x28\x96\x4A\x06\x03\x1C\x57\x44\x64\x9A\xF4\x9E\x53\x83\x52\xB9\x23" + + "\x9E\x6E\xD5\x1A\x8F\x9C\x9F\xB0\x4D\xFB\x46\x47\xE4\x3C\x6B\x07\x90\x7B\xAF\x65\x9F\xA7\xAA\x2E\x94\xF3\xD5\xFC\x94\xF0\x6E\xE7" + + "\x91\xCF\xB2\xF4\x5E\xFA\x3E\xA6\x82\xCB\x1D\xD2\x09\x4C\x90\x3C\x64\xB7\x1B\xB5\x65\x4F\xB3\x9F\xD4\xD5\xDF\xF8\x3C\x74\xF7\x31" + + "\x4D\x11\x65\x3D\x1B\x22\x27\x97\xB7\x92\xBD\x2C\xEA\x19\x86\xDA\x1D\x90\xB8\xF6\x3B\x65\x55\xE6\xE7\x1D\x25\x26\x75\xB8\xEE\x7D" + + "\x15\xDA\x2E\x8B\x98\xB6\x78\xA2\x9D\xD2\x4D\x00\xCB\x8E\x39\xF6\x09\x4D\x92\x3B\x9F\x4C\x8E\xD7\x7D\xAC\x90\x78\xB1\x48\xE1\xA4" + + "\xE3\x49\xEE\xAE\x96\x4B\x8D\x45\x7D\x33\x9F\x34\x60\x16\x9C\x6D\xDD\x53\x7A\x3E\x38\x29\xEB\xA4\x6D\xC0\x00\xD6\xBB\x1E\x6F\x55" + + "\xA3\xC3\xE0\xBA\x20\xEA\x50\x34\x76\xD3\xC2\xE6\xCA\xFD\xA8\xEF\xD3\xB9\x38\xDB\x63\xB5\xD9\x6F\x18\x29\xCE\x0F\x74\x40\x83\xB1" + + "\x6E\x12\x11\xB7\x1C\xAD\x07\x50\x04\xB7\x82\x90\xD2\x8D\xD1\x8E\xC5\x09\x8D\xB8\xEF\x95\x40\xB2\x31\x81\x84\x3A\x0F\x20\xFD\x91" + + "\x35\x83\xD4\xA7\x2C\x03\x7D\xD2\x81\xDC\x01\xE1\xDB\x60\x85\xD7\xB7\x5B\x9B\x33\x04\xB3\x67\x07\x80\xB9\xD4\xD0\x49\x51\x28\x6B" + + "\x41\xC7\x75\x63\x85\x82\x08\xDA\xD6\xF0\x36\x5D\x3A\x7C\x6A\x4E\xE4\xB8\x39\xB3\x4E\x95\x20\xA4\x92\x9E\x86\x02\xF7\x96\xC6\xC6" + + "\x85\x9B\x7C\x43\x94\x75\x55\xA5\xD4\xB4\xED\xD2\xD8\x89\x73\x1C\x79\x25\x5C\xAF\x56\x49\x6E\x55\x2C\x98\x55\x68\x89\xA3\xCC\xC3" + + "\xC0\xF7\x0A\xB7\x5C\xCA\x08\x3F\x73\x48\xE3\x50\xEE\xF2\x3B\x81\xF4\x5E\x9D\x2A\xA3\x8D\x77\x66\x4D\xD0\x26\x96\x87\xA9\x9D\x15" + + "\xC6\x26\xFE\x20\x79\x62\x12\x70\x1C\xAE\xBD\x65\x69\xEA\x57\xDB\x59\x72\x92\xA8\x49\x14\x4E\xD6\xFA\x38\x7E\x52\xDF\xEB\xFC\xD5" + + "\x7B\xAC\xEC\x0E\x04\x5D\x6D\xE0\xF8\xD1\x9D\x52\x63\x93\xEE\xAE\x9F\x0F\x3A\xB6\x2E\xA1\xB4\x7E\xCF\xAF\x70\x35\x31\xB7\x49\x0E" + + "\xFC\xE1\x60\x97\xB1\x9B\xF9\x3A\xDD\x2D\x70\xB5\xF5\x3F\x4A\xB6\x3A\x78\x98\xC6\x39\x9A\x64\x84\x7E\x52\xBC\x3D\x27\x66\xBB\xF4" + + "\xBF\x52\xCB\x45\x13\x4C\xB6\x89\x0E\xA8\xDC\x7F\xD3\xF6\x5D\x6B\x17\x47\x51\x58\x2E\x75\x55\x94\x52\x3D\xAD\xA8\x39\x31\x7E\x56" + + "\xFD\x17\xB6\xBA\xFD\x05\x1C\xAE\x8E\x38\x9F\x51\x23\x3E\x66\xC7\x8F\x2F\xD7\x2B\x65\x18\x59\x2D\xF6\xA6\x8A\xD9\x30\x77\xE0\x9A" + + "\xF9\xE6\xE1\xE4\x6D\x9F\x75\x54\xB8\x39\xF7\x28\xE4\x13\x0D\x41\xC0\x80\xDC\x60\x05\x70\x75\xD6\x9A\xAA\xC3\xFB\x45\xD4\xA6\x43" + + "\x10\xC8\x61\xC1\x20\xFF\x00\xEC\xAA\xDD\x5D\xC2\x7B\x9B\xB7\x6E\x98\xFB\x46\xD1\xB2\xAC\x23\x3A\xE8\x5A\xE7\x74\xEF\x5D\x49\x41" + + "\x29\x2C\x8A\x57\x68\xC1\x5A\xE7\x50\x52\xD2\x54\x51\x31\xF5\x4C\xD4\xE6\xB8\x18\xC8\xE4\x1F\x65\x8D\xF5\xAD\x3B\xED\xD7\xDA\x5B" + + "\x84\x6C\x2C\x3A\x80\x3F\xD5\x6B\x96\xA9\x3F\xC4\x76\x6B\x6D\x54\x6E\x07\x87\xBC\x7D\x96\x31\xF8\x2C\x8F\x6D\xCE\xEF\x3D\xA2\x1A" + + "\x7A\x58\x62\x6B\xBF\x76\x09\x73\xC1\xDB\xF4\x55\x8B\xB5\xCA\xA2\xA2\x92\x59\x65\x98\x80\x1A\x4E\x00\xD9\x59\x2E\x9D\x48\xF8\x6B" + + "\x66\xA5\x86\x08\xDD\xE1\x9D\x25\xCF\x05\x51\xBA\xBE\xB9\xDF\xB1\x2A\xE7\x73\xC3\x5C\x5B\xC3\x78\x49\x31\x14\x72\xFE\x13\x44\x6A" + + "\x2E\xB7\x1A\xD7\x0C\x90\xDD\x8F\xBE\x56\xA7\xD2\x25\xB2\x43\x55\x29\xDE\x47\x4C\x75\x7D\x70\x15\x0B\xE0\xFD\x2F\x85\xD3\xD5\x35" + + "\x0E\x1F\x3B\xC8\xCF\xB6\xCB\xB3\x67\xB9\x57\xDB\xAE\x95\xF5\x50\xD3\xBA\xA2\x86\x59\xCF\x92\x3E\x5B\xB0\xDF\x75\x60\x9D\x23\x19" + + "\x1A\x39\x68\x77\xCC\x01\xFA\xA5\xB0\x1B\x2E\x03\x7A\xBA\x89\xCD\xDA\x39\x0B\xFF\x00\x80\x0D\xD4\x13\xDF\x6B\xEB\x5A\x63\xA2\xA4" + + "\x75\x30\x3C\xC9\x37\xFC\x60\xAC\xD2\x6F\xA3\x5F\x47\x3F\xAD\xAE\xB4\xD0\xD6\x52\x78\x8F\x1A\x68\x9C\x67\x97\xE9\x82\xDC\x7F\x35" + + "\x54\x87\xE2\xA5\x04\xF5\xAC\x80\x51\x54\xB5\x8F\x3A\x44\x98\x18\x1F\x5D\xD4\x9D\x55\x6B\xAA\xA5\x73\x6B\x3C\x27\x56\xC4\x06\xA9" + + "\x73\xC9\x77\x19\x2B\xC5\x40\xD7\xD3\x98\x9D\x45\x6C\xB7\x32\x4A\x89\x4C\x40\x34\x3B\x23\xCB\x9C\x95\x25\x29\xC1\xD2\x46\x4A\x31" + + "\x92\xB6\x5C\x3A\x2E\xE5\x01\xBB\xDC\x61\x32\x02\x67\x93\xC6\x8C\xE7\xE6\x69\x00\x7F\xC2\xBC\xAC\xD6\x97\xA5\x3C\x2A\x46\x3B\xC6" + + "\x30\xD6\x30\xEA\x6C\xB1\x7E\x43\xE8\x33\xD9\x76\x20\xB8\xF5\x25\x24\x62\x37\x0A\x5A\x90\x36\x0F\x76\xAD\x47\xEA\xB3\x70\x97\x74" + + "\x63\x68\xB9\x2A\x9D\xE6\x76\xDD\xAF\xD0\x53\x53\xB8\x39\x94\x0E\x32\xC8\xE1\xFC\x58\x23\x4F\xF3\xCA\x09\x2B\x6F\xF5\xCC\xF0\xA4" + + "\x7D\x3D\x2C\x6E\xE5\xD1\x67\x58\xFA\x67\x65\xCD\xE9\x9A\x56\xD1\xDC\xAE\xD0\xB1\xC5\xDE\x72\x4B\x9D\xC9\x38\x0B\x07\x16\xBB\x2C" + + "\x5A\xB3\x38\xA5\x1E\x27\xC4\xBA\xCC\x12\xDF\xDE\xF2\x3E\x8B\x4A\xA2\xAB\xA3\xA3\x6E\xAA\x9A\x23\x52\xE1\xF9\xBB\xFF\x00\x55\x9B" + + "\x50\x6A\x1F\x11\x2A\x9D\xA4\xBB\xF7\x9B\xE9\xE7\x85\xA5\xD0\xC9\x6D\x60\xD5\x57\x4F\x51\x2F\xA8\x7E\x30\xB5\xC4\xDA\xCE\x17\xC5" + + "\x4A\xA8\xAB\xFA\x56\xC9\x53\x04\x46\x28\xDF\x54\x08\x61\xED\xE5\x72\xE9\xD8\x07\xFD\xAE\x2E\x31\x80\xB9\xDF\x15\x24\xA6\x9F\xA4" + + "\xAC\xF2\x50\xB3\x44\x3F\x8A\x1A\x5A\x3B\x0D\x25\x74\x6C\x1A\x7F\x65\x44\x48\xEC\xBC\xFD\x4F\xD6\x75\x61\xFA\x0E\x4F\x55\x74\xAD" + + "\x15\xE8\x99\xEA\x27\x7C\x52\x31\xBB\x10\x46\x16\x51\xD3\xB7\x0A\x7B\x07\x5A\xB5\xD3\xC8\x1D\x10\x76\x97\x3B\xD1\x68\x7D\x77\x6C" + + "\xBB\x54\xCF\xE3\x50\x48\xEF\x08\x37\x76\xB4\xAC\x72\xBA\x82\xA8\x4D\x3E\x23\x71\x71\x1C\xFB\xAD\xDA\x6A\xF9\x35\xE5\xB7\xC1\xBC" + + "\xD7\xF5\x1D\xAA\x86\xDE\xFA\xB7\xD5\x45\xA4\xB7\x23\x07\x77\x2C\x1E\xBE\x58\xEB\x6F\x52\xDC\x5A\xEC\x6A\x97\x58\x1D\xB0\xB9\xEF" + + "\xA6\xB8\xC8\xCD\x0F\x6C\x84\x7A\x12\x84\xB2\xB2\x18\x5D\x4E\x58\xE0\x0F\x3B\x2E\xE5\x1D\xC7\x3A\xF4\x9B\xEF\x4C\x75\x0D\xBA\xE7" + + "\x66\xA7\xD1\x3C\x7E\x23\x1B\x87\x34\x9E\x0A\xA2\x7C\x46\xBB\x52\x5C\xFA\x82\x96\x96\x9A\x40\xEF\x08\x69\x73\x87\x00\xE7\xFF\x00" + + "\x55\x9D\xC5\x15\xC6\x1D\xA1\x12\x33\xE8\x70\xBD\x90\x41\x55\xA9\xAE\x92\x27\x97\x63\x72\x4E\xF9\x58\xCB\xAA\x62\x2A\x9D\xA3\x67" + + "\xE8\xFE\x92\xA7\xB2\xCE\xDA\xD3\x59\xE2\xC8\xE6\x8D\x87\x0A\xE3\x57\x4F\x1D\xCA\x82\x5A\x67\x92\xD6\xC8\xDD\x25\xC3\xB2\xC5\xEC" + + "\x37\x8B\xAD\x3C\xAD\x86\xA2\xA2\x4F\x0B\x86\xB0\xE1\x69\xD1\xBA\xB6\xA2\xC9\x21\xA5\x27\xC4\x2C\xF2\xFA\xE5\x78\xF9\x13\x52\xE5" + + "\x9E\x84\x1D\xC4\xCF\x6F\x1D\x17\x1F\x4F\xF5\x25\x0C\xB4\xD5\x0E\x99\xAF\x90\x97\x07\x1D\xC6\xC5\x5F\x7A\x3A\xBE\x96\x4B\x28\xA2" + + "\x97\x48\x92\x9F\xCA\xE0\xEE\xFD\xF3\xFC\xD5\x25\xE2\xB0\x5E\x23\xFD\xA2\xF7\xEA\x6B\xBF\x39\x0A\x0D\x44\xD4\x48\x01\xE4\xF2\x0A" + + "\xE3\x96\xA6\x58\x33\xEE\xAB\x55\xFC\x99\x3C\x6A\x78\xEB\xEE\x59\x7A\xF6\xE5\x05\xC0\x53\xD0\x51\x91\x23\xE3\x7E\xB7\x16\xF0\x36" + + "\x23\x1F\xCD\x72\xBA\x3E\xB5\x96\x8B\xF9\xFC\x70\xF0\xDB\x2C\x7A\x03\x8F\x63\x9C\xAF\x2C\x56\x79\xA6\x77\x89\xE2\x01\xF5\x3B\xA8" + + "\xAA\xAD\x33\x42\xE2\xFD\x61\xDF\x45\xCE\xFF\x00\xE4\x23\x2C\xEA\x6B\xB5\xEC\x5F\xC3\x49\x63\xA6\x8D\x32\xF1\x73\xA3\xA0\xB3\xCD" + + "\x3B\x9E\xCF\x33\x7C\xA0\x7E\x62\xB2\x0A\x3E\x97\x86\xFB\xD4\x75\x8D\xA8\xA8\x31\x36\x27\x76\xE4\xE4\x03\xFF\x00\x2B\xD6\x43\xB2" + + "\x1A\xF2\x48\x1D\x89\x5C\x4A\xE9\x2E\x70\xF5\x15\x54\xB6\xD9\x1E\xC6\xB9\xC3\x2E\x6E\x3D\x02\xEE\x8E\xA6\x5A\x8C\xAA\x95\x24\x9F" + + "\xF0\x6B\x58\xD4\x20\xFD\xF9\x37\x1B\x14\x14\xF4\x16\x8A\x7A\x08\x5E\x5E\xD8\x5B\xA4\x39\xDC\x95\x48\xEB\x9E\x84\x75\xC6\x6A\x9B" + + "\xAB\x2A\xCB\x43\x5B\xA8\xC7\x95\xDA\xE9\x29\xAA\x2A\x2D\xF1\x19\x9E\x5D\x26\x3C\xC7\xD5\x55\x3A\xD2\xF5\x7D\xA6\xAB\xA9\x80\xF8" + + "\xAC\xA7\x27\x00\x8C\x60\x8C\x2D\x91\xBD\xCF\x93\x6E\xDD\xD4\xA8\xF3\x7C\x3B\x75\x25\xBE\xF8\x23\x95\xD8\x2F\x8F\x43\x0B\xBD\x72" + + "\xB4\x9A\xCA\x8B\x7D\xA2\x92\x7A\x97\x78\x71\x87\x0D\x4E\x23\x97\x15\x85\xBE\x49\x4F\x86\xE6\x6A\xD7\x8C\xE4\x76\x47\x34\x97\x1A" + + "\xC6\x86\xCB\x24\x8F\x68\xF5\x2B\x76\x3C\xFB\x23\x4D\x1D\xBA\x8D\x0F\x93\x22\x71\x7E\xCB\xF6\x15\x53\x44\xB7\x27\xD4\x96\xFE\xED" + + "\xD2\x67\xED\x95\xB7\x5B\x25\xA1\xAF\xB6\xD3\xCD\x1F\x86\xF6\xB5\xA3\x4F\xB2\xC3\xE4\x82\x71\x4E\x19\xA0\x64\x77\x1C\xA1\xA6\xB8" + + "\x57\x52\x83\x1D\x3C\xD2\x33\x3C\xB5\xA5\x4C\x79\x94\x5B\x2E\xA7\x47\x29\x25\xED\x5F\x25\xD7\xE2\x04\xD1\xDC\xAE\xF0\x52\xD2\x96" + + "\x97\xB0\x68\x24\x76\x2A\xC1\xD1\xFD\x25\x53\x65\x9F\xF1\x13\xD5\xB6\x40\xE6\x6C\xD6\xE7\x65\x97\xB1\xF3\xE1\xB2\xE5\xC6\x4D\x59" + + "\xC9\xE7\x2B\x42\xE9\x1B\xD5\x74\xC7\x4D\x64\xBB\x0E\x35\x15\x27\x27\x3B\x67\x26\x58\x47\x13\x8C\x17\x3C\x17\xBA\x98\x99\x2C\x0F" + + "\x8D\xCF\xC6\xA1\x8C\xAC\x9F\xAA\x7A\x75\xD6\xC9\x4C\xED\xA9\x13\x35\xE7\x38\xEE\x16\x9B\x72\x9E\x46\x5A\xDF\x24\x79\x2E\xC6\xD8" + + "\x58\xFD\xE6\xE3\x5F\x54\x5E\xDA\xB9\x5F\xA4\x1D\x9A\x54\xC4\x8E\x4C\xD2\xA4\x68\x7F\x0D\xA7\xA4\x9B\xA7\x5F\x4C\x74\x6B\x0E\xF3" + + "\xB4\xF7\x45\xF1\x0A\xEB\x47\x4F\x60\x7D\x04\x6F\x67\x8B\x20\xC0\x60\xEC\xB1\xC8\x2A\xAB\xE1\xA8\xC5\x1C\x92\x31\xC7\x61\xA7\xBA" + + "\x99\xF4\x97\x89\x6A\x1B\x35\x43\x64\x7B\x9A\x7F\x39\x0B\xB1\x4F\x8A\x3C\xF5\x2E\x0B\x57\xC3\x59\xE9\xED\xBD\x48\xE3\x56\xF6\x8F" + + "\x15\xB8\x69\x3D\x8E\x56\xBB\x59\x57\x4B\x45\x47\x2D\x4B\xDC\xC0\xD0\xDC\x92\x0F\x2B\xE7\x7A\xBA\x6B\x84\xD5\x02\x61\x09\x8C\x8E" + + "\x03\x0F\x0A\x48\xAE\x57\x59\x67\x8E\x9A\x6A\x89\x5C\xDC\xE3\x49\x48\xCF\x6F\x03\x71\x77\xB5\x52\x9B\xBD\x5C\xC6\x27\xB6\x30\xF7" + + "\x97\x64\xAB\xFD\xA2\x83\xF6\x7D\x03\x61\xF1\x35\x91\xDD\x66\x96\x87\xCF\x49\x4A\xC2\xC2\x58\xFE\xEB\x42\xB3\x55\x87\xD0\xB1\xD5" + + "\x32\x0D\x78\xDF\x25\x72\x65\x4D\x9D\xF8\x1A\xA3\xAA\x77\x1B\x8C\xA1\x2D\x60\xDC\xB7\x08\x9B\x20\x78\xCB\x77\x09\xF7\x3D\x87\xDD" + + "\x68\x3A\x88\xF2\xDE\xC7\xEC\x96\x73\xCE\xC8\x88\xF6\x08\x71\xDC\x85\x40\xE7\x8D\x88\x4D\xA5\xDE\xA9\x67\x7C\xE1\x33\x88\x27\x63" + + "\x82\xA8\x2D\x76\xEA\x81\x0C\xC0\x64\x06\xBB\x95\xDC\x18\x23\xD9\x56\x03\x03\xBB\xE5\x74\x68\x2B\x8C\x6E\x10\xCA\xED\xBB\x15\xD3" + + "\x83\x25\x7A\x59\xCB\x97\x1D\xFA\x91\xD5\x2D\x6C\x8C\x74\x4F\xDD\xAE\x18\x55\x9A\xFA\x0B\x4D\x82\x36\xEB\x84\xCE\xF9\x0E\x23\x6B" + + "\xB8\x0A\xCF\xC8\xD9\x47\x3D\x2D\x3D\x6C\x61\xB5\x50\xB6\x5D\x07\x20\x1E\xC5\x77\xC5\xFB\x1C\xA6\x7D\x51\x1B\xEE\x3A\xCB\xA2\xD6" + + "\x08\xF9\x1A\x36\x68\x59\x9D\xDA\x8E\xAB\xA4\x7A\x86\x3B\x95\xBB\x2D\x84\xBF\x38\x6F\x0D\xF6\x5A\xFD\xD2\xBA\xA2\xAE\xAE\x4A\x0A" + + "\x6A\x67\x44\xC8\x9D\xA7\x43\x46\xEE\x5C\x3B\xD5\x94\xD4\x50\x3A\x9E\xBA\x30\xCD\x63\xE4\x3F\x32\xAD\x19\x26\x59\x7A\x5F\xA8\x69" + + "\xFA\x8E\xCF\x1D\x4C\x2E\x01\xE4\x79\xDB\xFC\x25\x71\xAF\xD6\x6A\xDA\x3F\xC5\x54\x53\x4D\x1B\xE9\xE7\x76\xA7\x47\x26\x73\x93\xB6" + + "\xD8\x59\xAD\x82\xE9\x59\xD0\x9D\x4D\xE0\x4E\x5C\x69\x9E\xEC\x3B\x3C\x11\xEA\xB5\xFB\xC5\x53\x2E\x3D\x3A\xDA\xCA\x27\x09\x23\x25" + + "\xAF\xDB\xB8\xC8\x55\x4B\xDC\x8D\x1D\x0E\x90\xB1\x9B\x3D\x80\x45\x36\x5C\xE9\x7C\xEE\x8C\xF0\xD3\xE8\x17\x32\xE7\x79\x9E\x6A\x89" + + "\x68\xE0\x8B\xC0\x64\x4E\xD2\x43\x5B\xB9\x56\xCB\x7D\x5C\x55\x94\x51\xCD\x03\x83\x98\xE6\xE4\x10\xB8\xDD\x45\x76\x7D\xB2\x46\xC5" + + "\x04\x2D\x06\x6F\xF5\x08\xEE\xB2\x66\x2B\xB3\x39\xEA\xFB\x63\xAA\xAC\x52\x87\x42\xE0\xE6\x8D\x4C\x71\xF5\x5D\x0F\x82\xB7\x67\x4F" + + "\x6B\xA9\xA5\x94\x12\x29\xBC\xC3\xE8\xBD\x75\x2C\x9A\xAA\x37\xBE\x46\x3E\x52\xE1\xE6\x71\x53\xFC\x39\xB5\x43\x61\xB6\xDC\xEA\xAA" + + "\x1B\xA6\x27\xCA\x46\xFF\x00\xC3\xB2\xC1\x76\x64\xFA\x3A\x75\xB7\xFA\x3A\xC2\xEF\x0A\xDE\xC7\xEF\xF3\x4B\xDF\xF4\x2B\x39\xF8\x87" + + "\x2B\x1B\x67\x0D\x64\x11\xC2\x65\x7E\x9C\x33\x2B\x40\xAD\x96\xCE\xF6\x96\xD1\xDB\xDD\x1B\xFB\x3C\x71\xFD\x56\x67\xD7\x6E\x7B\xEB" + + "\x28\xE9\x89\xC8\x2F\x07\x1F\xC9\x49\x74\x58\x97\xBE\x86\x80\x5B\x7E\x1E\x47\x23\xB6\x2F\x8F\x59\xFB\x85\xD7\xE9\xD8\xB4\x58\xE9" + + "\xCB\x87\x99\xED\xD4\xEF\xAA\xF2\x54\x45\xF8\x0E\x81\x86\x9C\x6C\x44\x4D\x6F\xF3\x0B\xB5\x47\x17\x83\x49\x1C\x63\x60\xD6\xE1\x74" + + "\xE2\x46\x8C\x8C\x3D\x0D\xCF\xCA\x3F\x44\xF8\x45\xA4\x93\xB2\xF4\xC5\x4D\xB6\x5F\xFA\x2D\xD7\x46\x93\xC3\x2C\x02\x78\xCC\x6F\x66" + + "\xA6\xBB\x62\x0F\x75\xE2\xA5\xB0\xD1\x50\x48\x64\xA5\xA3\x6C\x4E\x3D\xC2\xB1\x06\x00\x36\x09\x16\xAC\x77\x14\xE4\xE9\x39\xDD\x1E" + + "\x3B\x2F\x7C\xB0\x35\xED\xD8\x6E\xBC\x7E\x1E\x1D\xBA\xCB\x75\x90\x10\x32\xB8\xF6\x56\xFF\x00\xDE\x6E\xE7\xFD\xC7\xFA\x05\xDC\x2D" + + "\xD9\x71\x6C\xC3\x37\x4B\xC1\xF4\x90\x8F\xE4\x16\xAC\x9D\x1B\x31\xF6\x66\x56\xA0\x4F\x5D\xD5\x38\x16\xB7\xCF\xCB\xB8\x5A\x4D\x1C" + + "\x16\xE9\x40\xFC\x7D\xC5\xB1\xBB\xF8\x59\xDF\xF5\x0B\x39\xB2\x93\xFE\x33\xAA\x21\x85\xF9\x77\x65\xA4\xD0\x5A\x24\xAF\x1A\xBC\x58" + + "\xE3\x6F\x70\xEF\x99\x73\x44\xDE\xCE\x1F\xC5\x28\xE9\x23\xE8\xEB\x53\x68\x5E\x1F\x0B\x6A\x86\x97\x0E\xFE\x52\xBD\xBD\x3A\x5D\xFB" + + "\x26\x3C\x6F\xE5\x5E\x2F\x8A\x74\x0C\xB7\x74\x75\xB2\x9E\x37\x99\x1A\xCA\xA1\xE6\x3D\xFC\xA5\x7B\xFA\x6C\x03\x68\x88\xE4\x9D\x97" + + "\x06\xA7\xEB\x3A\xB0\xFD\x05\x2B\xAF\x2E\x77\x28\x2E\x06\x28\xA4\x74\x71\x11\xB6\x3B\x85\x97\xD7\x5C\xA7\x8A\xA7\xC3\x8D\x81\xCE" + + "\x3B\x92\x56\xD7\xD6\x5F\xB0\xA6\xC3\x2E\xB2\x16\x4A\xC1\xE5\x03\x95\x8D\xC3\x6B\x96\xF1\xD5\x31\xD2\x51\x8C\xEB\x38\x1F\x45\xBB" + + "\x4B\x4F\xB4\x63\x93\xEC\x73\x1D\x71\xAB\x73\xF1\xE1\x0C\x8F\x75\x23\x2F\x15\x71\xE0\x79\x32\x38\xCF\x65\x79\x8F\xA0\x22\xAF\xB8" + + "\xD4\xDA\xDC\x65\x64\xF0\x37\x22\x4C\x0D\x24\xAC\xE2\xF1\x6C\x9E\xCF\x75\x9A\x86\xA3\x21\xF1\x3B\x0B\xB6\x2D\x7B\x2A\x34\x3F\xCC" + + "\x92\x5A\xEA\xA7\x38\xBD\xE3\x39\xEE\x80\x56\xCC\x08\x0E\x1B\x15\x68\xB2\xF4\x4C\xB3\x74\xDC\x97\x6A\x91\x21\x69\xF9\x18\xDE\x7E" + + "\xAA\x2E\xA2\xE8\xBA\x9B\x45\xA2\x96\xE6\xDD\x46\x19\xF7\x73\x5D\xCB\x0E\xFB\x1F\xD1\x16\xC6\xEB\x68\xB7\xF2\x41\x67\xA9\xAC\x92" + + "\xB2\x26\x53\xB0\xC8\x75\x01\x80\xB5\x1E\xAD\xAE\xB9\x59\xAC\x34\xC6\x81\xAE\x63\xDC\x3F\x79\x8E\xCA\xAD\xF0\xFA\xA6\xC5\x4B\x24" + + "\x4E\xAE\x98\xC7\x54\xD7\x79\x43\xB1\x82\xB5\x1B\xE5\x4D\xB6\x3B\x73\xA2\xB8\x4C\xC8\xE3\x99\xB8\x04\xFF\x00\xC2\xF2\x32\x37\xBB" + + "\xA3\xB2\x29\x57\x66\x29\x41\x15\x55\xFE\xBE\x57\xD5\xD5\x3D\xA5\xA3\x24\xAF\x73\x3A\x72\x09\x32\x63\xB8\xC8\x74\xF3\x82\x3F\xB2" + + "\xF4\x52\x3A\x8E\x3B\xBD\xC0\xD1\xC9\xE2\x53\x81\x86\xBB\xD7\x84\xC2\xC3\x3D\x35\xC6\x8E\x9A\xAD\xCE\xF1\x6B\x06\x58\xD1\xC3\x46" + + "\xFC\xFE\x8B\xCF\xC9\xF8\x8C\xB9\x64\xB1\xCB\x6A\x55\xEC\x6E\x5E\x38\x41\x39\x2B\xB1\xA9\x29\xE2\xB7\x3C\xE8\xBB\xBF\xDD\xAE\xC7" + + "\xF6\x43\x53\x42\xCB\x94\xF9\xFD\xAD\x21\x27\x80\xD2\x36\xFE\x48\xEE\x74\xB2\xDA\x2A\xDD\x4B\x54\xC0\x1C\x37\x0E\x1C\x38\x7A\x84" + + "\xA8\x28\x66\xBB\x6B\x6C\x0C\x1A\x23\x6E\xA7\xBC\xF0\x02\xE3\x51\xD4\xF9\x76\xAB\xDD\xFD\xBF\xD1\x9F\x93\x1E\xDE\xB8\xFE\xE7\x95" + + "\xDD\x34\xC1\x20\x61\xB8\xC9\xA8\xF0\x32\x3F\xB2\xE1\x55\xBA\xA6\xD3\x75\x92\x06\x4A\x65\xD2\x7B\xF7\x56\x1A\x2B\x3D\x4C\xD1\x3E" + + "\xE9\x19\x71\xA7\xA7\x97\x4C\x80\xE7\x38\xC7\x23\xD9\x0D\x13\x2D\xD5\x5D\x55\x58\xCB\x85\x6B\x69\x40\xC6\x97\x1E\xFB\x05\xDF\x87" + + "\xCF\x8F\x2E\xDC\xAF\x72\x6A\xCD\x72\xF1\xCE\x17\x15\x5C\x97\xEE\x84\xF1\x2A\x6C\x6D\xA8\x99\x9E\x1B\xB1\xD9\x54\x3A\xB3\xA9\x21" + + "\xA8\xAA\xA8\xA4\x34\xE5\xC4\x1D\x3A\xDD\xC7\xD5\x69\xF6\x6A\x7A\x78\xED\x31\x32\x8E\x61\x2C\x5A\x70\x1E\x3B\xAA\x7D\xEB\xE1\xE7" + + "\xE2\xA7\x9A\x68\xEA\xC0\xD6\x73\x87\xF1\xFD\x16\xF4\xD2\x7D\x1B\x21\x4B\xB3\x33\xB8\x5D\xA5\xA7\x2F\x86\x8A\x9D\xB0\xB5\xA3\x49" + + "\x91\xBC\x95\xE6\x63\xEA\x9D\x0B\x64\x7D\x63\x99\xAB\xB6\xDF\xD9\x58\xEF\x56\x28\x2D\x16\xA9\xC4\xF5\xF4\xD2\x3B\x49\x0C\x63\x73" + + "\xAB\x2B\x91\x41\x65\xA9\xBD\x16\x41\x49\xB6\x86\xE5\xEF\x3C\x34\x7A\xAD\xB2\x72\xE1\x47\x83\x7E\x9D\x63\x7E\x4C\x99\x7D\x54\x8F" + + "\x2B\xDB\x3B\x06\x5D\x5A\xF0\x3E\xDF\xD9\x7A\x29\xEB\xE3\xA7\x8C\x96\x18\xBC\x63\xFE\xB7\xE6\x0B\xD5\x4D\xD2\x55\x15\x96\xAA\x9A" + + "\xDA\x29\x3C\x51\x4A\xE2\xC7\xB4\x83\x93\xDF\x65\xC2\x20\xB5\xFA\x08\xF3\x03\x8C\x2C\x24\xB2\x47\xB6\x75\xC3\x26\x9F\x22\x7B\x23" + + "\xFE\x59\xEF\x1E\x33\xFC\xDF\x8A\x73\xB2\x79\xD9\x1F\x8D\x50\xC6\x97\x47\x50\xFD\x97\xB4\xF4\xBD\x54\x14\x10\x54\x54\x3F\xC2\x35" + + "\x07\x0C\x61\x07\x29\xAE\x16\x2A\x9B\x24\xBE\x0D\x60\xDA\x4F\x33\x5C\x38\x21\x56\xB2\xC7\x96\xCC\x63\x2D\x1E\x4B\x82\x87\x34\xFD" + + "\xCE\xBD\x9F\xAB\xEE\x8D\x8D\x94\xD5\x25\xD2\xD3\xF0\x49\x1B\x80\xB8\x77\xAB\x9D\x3D\x64\x85\x94\xF1\x39\xA4\xBB\x25\xCE\xE5\x6A" + + "\x14\x14\xB6\xAB\x9F\x4F\xB2\x8A\x8A\x48\x9B\x23\x99\x8C\xB7\x90\x55\x76\xBF\xE1\xA5\x51\x70\x74\x15\x11\xBB\x7C\xF9\x81\x59\xA9" + + "\xC5\x3E\x51\xE1\xE4\xC7\x29\x2E\x19\x56\x8E\xAF\xF0\xF4\xD1\x36\x97\x4B\x5E\x1B\xE6\x20\x6F\x95\xE4\x9E\xB6\x6D\x7F\x31\x24\xF2" + + "\xBA\xF3\x59\x63\xB6\x4C\xE1\x55\x51\x01\x7B\x7B\x37\x39\x5E\x3B\x55\x92\x7B\xFD\xDF\xF0\xB4\xBB\x03\xF3\x3B\xF8\x47\xAA\xDA\xB9" + + "\x39\xE5\x70\x8E\xD4\x78\x5B\x5D\x38\x38\x03\x25\x7A\x60\xAF\x9E\x39\x44\x82\x9D\x85\xE3\x87\x1E\x42\xB1\xC3\xD0\x6D\xB8\x32\xAA" + + "\x2A\x49\xA5\x6C\xB4\xDB\x79\x80\xD2\xE3\x8E\xCA\x8D\x55\x0C\x94\x95\x8F\xA7\x93\x3A\xD8\xEC\x15\x69\xA3\x4C\xF7\x2E\xDD\x9D\xE7" + + "\x5E\xAA\x58\x73\x25\x38\xDD\x4B\x1D\xFA\x73\x23\x1A\xF8\x74\x87\x1E\xC5\x74\x6D\xBD\x19\x3C\x16\xC8\xAB\x6B\x66\x91\xBE\x29\x1A" + + "\x63\x68\xDF\xEE\x86\xFB\xD3\x33\x59\xEA\xE9\xC3\x8E\xA8\xE5\x70\x21\xC9\x4C\xBE\xB4\xAE\xCE\xFD\xA6\xEB\x5D\x09\x8E\x38\x5E\xE7" + + "\x31\xC7\xE5\x3C\x2B\xDB\x09\x74\x6D\x24\x0C\xE3\x75\xC3\xE9\xCA\xBA\x06\xD0\x43\x0B\x34\x78\xC0\x60\x8E\xF9\x5D\xDC\xFF\x00\x0E" + + "\x01\x5C\xB3\x76\xCF\x4F\x1A\xE0\x63\xA8\xEC\x30\x96\xA2\x36\x21\x22\xE7\x0E\x70\x98\xBF\xDC\x2C\x2C\xD8\x23\x83\xF4\x4D\x91\xA7" + + "\x8C\xA6\x2F\xC9\xC0\xD9\x0E\x48\x3B\x8C\xFB\xA5\x83\xBE\xD6\x9F\x47\x04\x41\xB9\xDF\x51\xCA\x70\x71\xC9\x45\xB3\x86\xD8\x28\x43" + + "\xAB\x6E\xA9\xCB\x04\x52\x3B\xCC\x38\x27\xBA\xE8\x71\xE6\x6F\xDD\x56\x41\x7B\x5D\x96\x1C\x10\xBB\x54\x35\x7E\x34\x78\x90\x80\xF1" + + "\xCA\xED\xC3\x96\xFD\x2C\xE4\xCB\x8E\xB9\x42\xBB\x3E\x78\x6D\xB2\xCD\x6F\x85\xB2\x4F\x8D\x86\x37\x2A\xA4\xCB\x65\xC2\xAD\xA6\xA6" + + "\xA4\x18\x81\xF3\x19\x26\xEF\xFA\x2B\xCB\x48\x07\xD8\xAA\xF7\x50\xD1\x5C\xEA\xEB\x62\x65\x30\x2F\xA5\x70\xC1\x68\xE1\xA7\xD4\xAE" + + "\xD4\xEC\xE7\x33\x9E\xAB\xE9\xE6\x5D\xE9\x1C\x61\x76\x65\x8F\x76\xBF\xD7\xE8\xBC\x5F\x0E\xBA\xA9\xD6\xEA\x97\x58\xEE\xE7\x11\x38" + + "\xE9\x6E\xBF\xCA\x7D\x15\xEE\xB6\xD6\xDB\x7C\x60\x55\x4E\x1D\x31\xE2\x38\xBF\xE7\x2B\x3A\xEB\x1E\x9E\x73\x5D\xFB\x52\x85\xBA\x24" + + "\x61\xCB\xDA\xCF\xEA\x14\xE5\x3B\x32\xEC\xD3\x6A\x28\xEB\xAC\x71\x49\x57\x63\x93\x5C\x5F\x31\xA6\x7F\xCB\xF6\xC6\xEB\xAF\x15\xED" + + "\xB5\x1D\x2E\xCB\xB3\xA0\x6C\xB2\x06\x07\x16\x34\x67\x05\x53\x3E\x1D\x75\x7B\x6F\x34\x02\xDD\x5C\xF1\xF8\x98\xDB\x80\x5D\xF9\xC2" + + "\xBB\xDA\x2D\xCC\xA2\x7D\x4C\x20\x07\x53\xCA\xED\x61\x87\x80\x7D\x16\x68\xC5\x95\x5A\xAB\x8C\xB7\x49\x73\x21\xF2\xF6\x8D\xA3\x60" + + "\xAC\xF1\x53\xD1\xB3\xA7\x19\x0D\x7C\x82\x18\xE5\x1B\x93\xEA\xBC\x15\x97\x77\x3E\xB5\xD4\x14\x70\x8A\x76\xC7\x26\x82\xEC\x6E\x7E" + + "\x8B\xAB\x76\xB2\x3E\xE5\x4F\x4C\xC8\xE5\xD1\xE0\x9D\x58\x3C\x1D\xB0\x88\x8C\xAC\xD7\x43\x6E\x8B\x26\x8E\xAA\x79\xF1\xD9\xB8\xC2" + + "\xCD\x2F\x4E\x37\x1E\xB9\xA5\x80\x35\xD8\x6B\x83\x70\xEF\xAE\x56\xAF\x37\x4C\xDC\x62\x6B\x8B\x5D\x0B\x86\x3F\x2E\x72\xB0\xEB\xDD" + + "\xDA\xA2\xDB\xD7\x15\x13\x06\x8F\x16\x9E\x6E\x3E\xCB\x09\x70\x66\xB9\xE8\xDB\x7A\x94\x62\x0B\x7D\x2B\x78\x96\x5D\x38\xFA\x0C\xFF" + + "\x00\xC2\xEB\xB4\x61\x80\x7B\x2C\x86\xAB\xE2\xAB\x2E\x15\x74\x12\xCB\x46\x41\xA6\x7E\xA7\x01\xC1\x38\x23\xD7\xDD\x75\x4F\xC5\xB6" + + "\xE3\xC9\x43\xFA\xFF\x00\xF2\xB7\xC3\x24\x52\x34\xCE\x12\x6C\xD4\xA9\xA3\xD4\x75\x1E\xCB\xD4\xB2\x26\xFC\x61\xA8\x8D\xB8\x65\xBA" + + "\x33\xF5\x27\xFB\xA1\x3F\x18\xAE\x2E\xF9\x2D\xD0\x7D\xCB\x95\x79\x62\x61\xE3\x91\xAF\xA4\xB1\xB7\xFC\x5D\xBB\xB8\x79\x68\x60\x6F" + + "\xDD\xCA\x07\x7C\x55\xBD\x3B\x88\xA3\x6F\xD3\x2B\x1F\x24\x4B\xE3\x91\xB5\xE1\x79\x25\x6E\x24\x3E\xEB\x1B\x3F\x12\xEF\xD2\x1C\x35" + + "\xE1\xBF\x44\x2E\xEB\x3E\xA5\xA8\x39\x6D\x4B\xDB\xF4\xC2\xAB\x2C\x50\xF1\x33\x62\x38\x03\x75\x5E\xB6\xD6\xD3\xD1\xBE\xF9\x53\x53" + + "\x2B\x58\xC6\xCE\x46\x49\xFF\x00\x68\x59\xAC\xBD\x47\xD4\x73\xBB\x43\xAB\x67\x77\xB0\xD2\xB9\xF2\x1A\xB9\x1C\xEF\xC5\xC8\xE6\x6B" + + "\x3A\x9C\x5E\x79\x2B\x09\xE5\x52\xE8\xCE\x38\xDA\x7C\x9D\x7E\x97\x91\xB2\xF5\x34\xF2\xF6\x70\xC8\xFD\x56\x87\x15\xB6\xA2\xB0\x83" + + "\x0D\x33\xDC\xD3\xF9\xF8\x01\x55\xFA\x12\xB2\xC5\xD3\xF2\xCB\x5B\x70\xB9\xC0\xF9\x64\x6E\x96\xC4\x39\x6F\x7F\x45\x6F\x9B\xE2\x9F" + + "\x4F\xD3\x34\x96\x97\xBC\x7F\xB3\x0B\x08\xB5\x5C\x99\xB6\xFD\x8E\x17\xC4\x8B\x6C\xF4\x9D\x0F\x43\x0C\xBE\x77\x47\x38\x27\x4F\x6D" + + "\x8A\xF5\xF4\xD9\xD3\x69\x8B\x63\xC2\xE5\xF5\x97\x5F\x53\x75\x0F\x4B\x3F\xF6\x6C\x32\xC6\xD1\x2E\x87\xF8\x80\x6E\x31\xD9\x75\x3A" + + "\x6E\x40\x6D\x11\x79\x4F\x0B\x83\x53\x5B\xF8\x3A\xB0\xDE\xD3\x89\xD5\x7D\x1E\xCB\xD4\xCF\xAB\x6D\x4B\xA3\x78\x6F\x0E\xE1\x66\x7D" + + "\x2D\x70\x8A\xD1\xD7\x50\xBA\xA4\x81\x1B\x1D\x87\x38\xF6\xE5\x5D\xBA\xF6\xAA\xF1\x15\x73\x85\x38\x95\x94\xD8\xF9\x87\x0B\x23\xB8" + + "\x3D\xC2\x79\x9E\x1C\x75\x06\x67\x3F\x75\xBB\x4C\x63\x93\x93\xE9\x79\xAB\x68\xE0\xA7\x75\x5C\x92\xC6\xD8\xF4\xE4\xBF\x3D\x97\xCF" + + "\x3D\x63\x55\x4D\x7A\xEA\x6A\xCA\xD8\x9F\xA5\xAE\x7F\x93\xDF\x85\xC2\x7D\xF2\xE9\x2D\x3F\x80\xFA\xC9\x5D\x17\xF0\xE5\x0D\x35\x74" + + "\x94\xF0\x48\xCD\x21\xFA\xC6\x01\x3D\x97\x7A\x8C\xA4\x73\x2A\x89\xBA\xFC\x38\xBD\xD1\xD7\x74\xD4\x34\x5A\xD8\xD9\xA0\x01\x85\x8E" + + "\xE4\xFB\xAF\x37\xC5\x5B\xAD\x35\x3F\x4E\x8A\x20\xE6\xBA\x59\x5D\xB3\x07\x61\x8E\x56\x1B\x05\x6D\x4D\x24\x85\xD4\xF3\xBE\x27\x1D" + + "\xF2\xD2\xBD\x0E\xAE\xA9\xAE\x76\xAA\xB9\xDF\x2B\x87\x05\xC5\x4A\x6B\x86\x29\x37\x65\xBF\xA7\x7A\x7A\x1A\xD6\xC7\x57\x51\x56\xD8" + + "\xB4\xB8\x10\xD1\xCA\xD0\xBA\x8A\xD5\x17\x56\xD0\xC1\x1C\x35\x42\x13\x08\xC0\x3D\x8A\xCB\x6D\xD3\xD4\xC4\xF6\x36\x17\x13\x19\x3B" + + "\x85\x74\x6D\xC2\xB6\x9A\x8E\x17\x52\x46\x7C\x32\x3C\xC4\x2F\x23\x25\xA9\x5D\x9D\xAA\xA8\xE0\x5B\xED\xB2\x5A\x2A\xEB\xA1\x79\x12" + + "\x08\x1C\x32\x47\x0E\xE1\x6C\x54\xD2\xD1\xD5\xD2\x43\x56\xD3\x1B\x80\x60\x2D\x79\xEC\xB3\x06\xD4\x3E\xA2\x96\xAE\x59\x36\x71\x1B" + + "\xAF\x1B\x26\x98\xC1\xE1\xC5\x23\xC0\x3F\x94\x15\xC1\x0D\x6A\xC3\x92\x6E\x4B\xB7\xFC\x1B\x32\x61\x72\x8C\x68\xE9\xF5\xB5\x73\x6E" + + "\xD7\xC6\x8A\x16\x99\x5B\x03\x0B\x1C\xE6\xF7\xDF\x2B\xDF\xF0\xFA\xB2\x2A\x59\xEA\x68\xEA\x88\x8E\x59\x1D\x96\x87\x77\xD8\x6C\xB8" + + "\x14\xD6\xDA\xC0\xE2\xFD\x38\xCF\xF1\x2F\x34\xD4\x95\x54\xD3\x78\x92\x07\x37\x7D\x9C\x16\x11\xD7\x43\xCD\xBE\xD0\x78\x25\xB2\xA8" + + "\xD5\x2F\xD3\xD3\x51\x58\x6A\x06\x18\x35\xB7\x0D\x68\xFC\xC5\x64\x10\xF4\xBD\x45\xEE\xFD\x54\x3C\x76\xC0\xD6\x9C\xEA\x7E\x77\xD8" + + "\x2E\x83\x6A\xA5\x9A\x78\x9B\x2C\xAE\x78\x07\xB9\x45\x25\x6C\xD4\xB7\x09\x5D\x03\xB1\x93\xFF\x00\x0B\xA7\xF1\x5E\x6C\xAB\x6A\xAE" + + "\x3F\xD1\x23\x87\x6C\x1B\x7F\x26\x9D\xD2\xD4\xC2\xD5\x65\x82\x87\xC6\x6C\xA6\x36\xE3\x50\xEE\xBB\x13\xB1\x93\x42\xF6\x13\x82\xE1" + + "\x8C\xAA\x77\x4A\xD6\x4B\x57\x4C\xC3\x26\xCF\xEE\x15\xA2\xB2\x57\xC1\x41\x23\xD9\xBB\xC3\x72\x02\xAE\xEC\xD8\xBA\x31\xAE\xB1\xE8" + + "\x7A\x8B\x66\xBA\xC3\x5A\xD9\xA3\x73\xF3\xA7\x27\x65\xDF\xF8\x61\x24\x11\x4B\x55\x4F\x29\x6F\x8A\xFF\x00\x30\xCF\xA6\x00\x5C\x6B" + + "\xFD\xFE\xB6\xBD\xCE\xA7\xAB\xF2\xC5\xAB\x70\xAB\x8E\xAA\x96\x8E\xAC\x4B\x4B\x2B\xA3\x7B\x78\x2D\x5B\xF7\xB8\x49\x36\x75\x62\xD3" + + "\xF9\x30\x4D\x2E\x2E\x8D\xBE\xE9\x35\x05\x96\xCF\x50\xFC\x47\x13\x0B\x49\xD2\x3F\x31\x58\x59\x69\x35\xE6\x77\x37\xC8\x64\xCF\xDB" + + "\x2A\x6A\xBB\x9D\xC6\xE7\x81\x53\x3C\x92\x81\xEA\x82\x4F\x14\xD3\x06\x78\x43\x23\xF3\x0E\x53\x2E\x65\x36\xAB\xD8\xDB\xA7\xD0\xCF" + + "\x1C\x5B\x76\xEF\xE0\xDD\xA8\x1D\x47\x70\xB6\xD3\xCA\xC0\xC9\x18\x1A\x0B\x4F\xA2\xA2\xFC\x49\xAA\x86\xA2\xA6\x9E\x96\x02\x1D\x23" + + "\x46\x1D\x8E\xCA\x8D\x49\x7B\xB8\xDB\xD8\x59\x4B\x57\x24\x4D\x3C\x80\x9C\xD5\x4B\x2B\x4C\xD2\x3C\xBE\x47\x3B\x24\x95\xB2\x59\xD4" + + "\xA3\xB5\x23\x9E\x1A\x27\x8E\x4E\x6D\xF0\x93\x34\x1E\x90\xE9\x79\xE8\x2B\x62\xAC\x9E\xB1\x8E\x68\x19\xF0\xDB\x95\x7D\x91\xC1\xAC" + + "\x25\xCF\x38\x59\xBF\x48\x5E\x6A\xEA\xEA\xC4\x13\x33\xCA\x1B\xF3\x2D\x02\xA3\x2D\xA0\x79\xC1\x2E\xD3\xB2\xE6\x9D\xEE\xE4\xE6\x8D" + + "\x57\x06\x79\xD5\x76\x08\x44\xB2\x55\xC1\x3B\xDC\xE7\x1C\x96\x9E\x13\x7C\x34\xAB\x86\x9E\xFB\x3C\x53\xB8\x35\xD2\x37\x0D\x27\xB9" + + "\xDB\x65\xC6\xBF\xDD\x2E\x66\xAE\x58\xDE\xE2\x23\x07\xE5\x55\xC9\x2A\x66\x81\xE2\x48\x9E\x58\xFD\x59\xD4\x39\x5D\x50\x4D\x72\x79" + + "\xF9\xB2\x73\x54\x7D\x0D\x5F\x5F\x47\x6A\xA5\x92\xA6\x77\xB1\x80\x0C\x9D\xF9\x58\x35\xC5\xCD\xAC\xBE\xC9\x59\xA8\x06\x3A\x4D\x58" + + "\xF6\x5C\xEA\xAB\x95\xC6\xB9\xBA\x66\xA9\x92\x46\xFA\x12\x9D\xD5\x52\x1B\x78\xA7\xF0\x9B\xA8\x1F\xF3\x07\x25\x6D\x94\xF7\x1A\x3C" + + "\x91\x3E\x88\xB4\xD4\x53\x56\xDA\xA0\x7C\x2E\x63\xD8\x1A\x3E\xCA\xAB\xD7\x75\xF0\x3E\xA6\x96\x91\x8E\x0E\x7B\x5D\x93\x8E\xCB\x28" + + "\xB7\xDF\x6E\x76\xF8\xF4\x53\xD5\x48\xC6\xFF\x00\x0E\x57\x62\xDF\x51\x35\x75\x4C\x12\xD4\xC8\x64\x71\x69\x24\x9F\xAA\x39\xDA\xA3" + + "\x62\x92\x7D\x17\xFB\x25\x98\xFE\x26\x1A\xA3\x2B\x30\xD3\xAB\x48\x57\x0D\x2D\x2D\x54\x9B\x05\x54\xAE\xAB\x6C\x2D\x39\x62\xBA\xB0" + + "\x06\xB4\x6E\xB8\x67\x77\xC9\xE9\x63\xAA\xE0\x1D\xB8\xC2\x58\xDF\x81\x84\xEE\xD2\x76\xD5\x84\x06\x2F\x47\x15\x81\xB0\x72\xD6\xF1" + + "\xC1\x42\x41\x69\xD8\x92\x9C\x0C\x72\x4A\x62\x32\x79\x28\x42\xC2\x1C\x1B\xC8\xCF\xBA\x40\x77\x23\x21\x3B\x47\x6C\x10\x89\xA3\x6E" + + "\x50\x0E\xD7\x35\xC3\x64\xED\x71\x8D\xE1\xED\xD8\x85\x1B\x99\x87\x6D\x90\x7D\x91\x0D\x6D\x1E\x62\x30\x89\xD7\x21\xAB\x3B\x94\xB3" + + "\xB6\xA2\x10\x41\xDF\xB8\x53\x64\xB9\x8E\x60\x25\xA7\x18\x05\x70\xA0\x95\xF0\x48\x24\x63\xB2\x3B\x85\xDA\x8E\x56\xCA\xC0\xF6\x1C" + + "\xE5\x7A\x38\x72\xEE\x5F\x73\x87\x26\x3D\xAC\xAB\x0E\x9A\xAF\x7D\x44\xAF\xAC\xA9\x6E\x80\xE3\xFB\xD7\x7C\xCE\x1E\xBE\x8B\x93\x5D" + + "\x4F\x4A\x4B\xA0\xA7\x73\xA6\x60\xD8\xCA\xFE\xFF\x00\x45\x75\xBC\xD0\x4B\x73\xB6\xBA\x18\x25\xF0\xA4\xED\xE9\xF7\x55\xF9\x6C\x50" + + "\xDB\xA9\x84\xD7\x3A\xAF\x3F\x68\xA3\xE1\xC7\xEE\xBA\x7B\x35\xA6\x63\xF7\x8A\x19\xFA\x5A\xFB\x1D\x75\xBD\xC5\xB1\x17\x6A\x18\xED" + + "\xEC\xB6\x7E\x8E\xEA\x68\x3A\x82\xDB\x15\x43\x48\x12\x81\x89\x19\xE8\x55\x5E\xE7\x6F\xA7\xB9\xD3\x49\x0C\xB1\x35\x91\xBB\xE5\x60" + + "\xFC\xAA\x8B\x66\xB9\x56\x74\x47\x52\x00\x5C\x5D\x03\x8E\x0F\xA3\x9B\xEA\xA2\x74\xCA\xF9\x37\x7B\x8C\xF4\x16\xC9\xFC\x77\xD3\x03" + + "\x2C\x80\xBB\x5F\xB8\x19\xDD\x65\xB3\x7C\x77\xA9\x6C\x8E\x6C\x36\xB8\x4E\x0E\x06\xA2\x7F\xBA\xBB\x75\x6D\xEE\x96\x7F\x87\x15\x37" + + "\x3A\x77\x35\xD9\x87\x31\x9C\xF7\x38\x5F\x32\x4B\x36\x1F\x91\xCE\x72\xA4\xA4\xD3\xE0\x89\x23\x66\x93\xE3\x15\xFA\x58\x1E\xFA\x7B" + + "\x65\x11\x73\x1B\x93\x1E\xB7\xEA\x0A\x81\x7A\xBD\xCD\x7F\xBC\x99\xEA\xEC\xD4\x70\xC9\x20\xD6\xF9\x1A\x5C\x72\x3D\x57\x17\xF6\xB5" + + "\x68\x8F\xF7\x53\x68\x24\x61\xC4\x7E\x60\xA3\x65\x65\x53\x6A\x44\xFE\x39\xF1\x00\xC0\x38\x1B\x05\xAD\xB6\xFB\x32\x54\xBA\x3A\xB1" + + "\x52\xB6\x67\x07\xC1\x45\x4E\xD6\x3B\xE5\x2F\xD5\x92\x7D\x17\xB5\x94\x72\x13\xA6\x21\x48\xD7\x01\x9C\x02\xEC\xAE\x28\xB9\x56\x3C" + + "\x16\x99\xCF\x9B\x91\x80\xBD\xF1\xD0\xDC\x69\x9D\x1D\x53\xDC\x62\x2E\x8F\x5B\x1C\xEF\xCC\x0E\xCA\xA4\x2C\xF6\x47\x47\x58\xE1\x96" + + "\xCF\x1F\x9B\x76\x96\x71\xFC\xD0\x56\xB2\xB2\x81\x8D\x26\xBD\xAE\xD4\x70\x03\x40\xFE\xCB\xC4\xFA\x4B\x9B\xDA\x67\x74\x72\x63\x3B" + + "\xB9\x44\x29\x6B\xAA\x24\x20\xC5\x23\xDD\xAB\x1F\x75\x68\x1D\xC7\x17\xBB\x44\x51\xD6\xEB\x90\x0F\x38\x68\x1A\x87\xF2\x5E\x6A\x99" + + "\xA7\xA5\xAA\x8E\x2F\xC6\x3D\xE5\xC7\x27\x61\xC7\xE8\xBC\x72\x59\x2E\xB0\x39\x9A\xE9\x24\x6B\xA4\x76\x96\xEE\x37\x38\xCE\x39\x5C" + + "\x3B\xCD\x1D\xD2\x86\x56\xBA\xBA\x09\x22\x0F\xF9\x32\x79\x51\xBA\x1D\x97\x6A\x97\xB0\xBC\x19\xAA\x4C\x2D\xD3\x90\xD6\xE3\x27\xEA" + + "\xBC\xB2\x32\x9A\x5A\x6D\x6D\xAD\x79\x24\x70\x48\xC8\x55\x38\xAC\x17\xA9\x29\x45\x4F\x83\x21\x69\x6E\xB0\x09\xDF\x49\xDB\x2B\xA7" + + "\x41\xD3\x97\x16\x54\xE9\xAA\xFD\xDB\x40\xD4\xF2\xE3\xB3\x1B\xEA\x54\xBB\x14\x7A\xA8\x1F\x47\x4B\x75\xF1\x4C\xAE\x2D\x0C\xDF\x49" + + "\xEF\xF7\x5D\x68\x2E\x16\xFA\x89\x1C\x6A\xC0\x38\xE3\x51\xDC\xAE\x75\xC2\xCC\xFB\x63\xA1\x2F\x73\x64\x64\xEC\xD6\xC7\xB7\x82\x17" + + "\x8A\x3A\x73\xE3\x12\x1C\x4A\xAB\x82\x1D\xDA\x6A\x8A\x38\x1F\xAC\xC5\xAF\x6F\x29\xF4\x51\x5D\x6B\xA1\xAA\xA4\x8E\x18\x63\xD0\x43" + + "\xB2\x71\xC2\x86\x38\x1C\xE8\xC1\xEE\x97\xE0\xDE\xE2\x09\x1A\xBD\x15\x25\x9E\xF8\x22\xC7\x46\xCD\xBE\xFE\x3F\x3F\x60\xB4\xFE\x95" + + "\x1A\x6C\xB1\x02\xF0\x4E\x91\xCA\xCF\x3F\x0F\xE1\xF4\x74\xE7\xBF\x8D\xFF\x00\x01\x68\xFD\x34\x3F\xEC\xD0\x9C\xE3\xCA\x17\x16\x7F" + + "\xA8\xEA\xC5\xF4\x95\xAE\xB9\xEA\x86\xD1\x3C\xD0\xF8\x59\x24\x6E\xE0\x16\x27\x71\x21\xD2\xD4\xB8\x0D\x8B\x33\xFC\xD6\xED\xD5\xFD" + + "\x1D\x3D\xFA\xA5\x93\xD2\xBE\x36\x16\xB7\x04\x3B\x3B\xAA\x0D\x57\xC3\xAB\xB1\x95\xED\xFC\x2F\x88\x38\x24\x70\x42\xCF\x0E\x58\xC3" + + "\xB1\x28\x36\x67\xCC\xF0\x24\x89\xA0\xB5\xAD\x25\x99\x24\x7A\xE5\x23\x4B\x06\x9D\x4D\x79\x20\x0C\x95\x77\x3F\x0C\xAE\xB8\xF2\xDB" + + "\xCB\x54\x67\xE1\xAD\xE0\x64\x0A\x23\x82\xBB\x63\xAA\x82\x5C\x36\x69\x78\xA5\xEE\x8A\x5B\xE1\x81\xE7\x96\xB4\x0E\x3D\xD4\x14\xE0" + + "\x79\xF1\xBE\x0E\xCA\xF4\x3E\x1A\xDD\x8E\xCE\xA1\x3B\x22\x1F\x0D\xAE\xCC\xF9\x28\xDC\xCF\xA2\xC5\xEA\x71\xDD\xD9\x7C\x72\x38\xF6" + + "\xCA\x98\x44\xEC\x8D\xEE\x78\x79\x3B\x69\xC2\xD2\x23\xAF\x8E\x82\xD3\x04\x55\x8C\x73\x5F\x2B\x72\x08\x01\x72\x2D\x5F\x0D\xAB\xF5" + + "\x36\x49\x84\x71\xB8\x1C\xE5\xD9\xCA\xB9\x5E\x7A\x56\x4A\xCA\x1A\x58\xE1\x95\x82\x58\x59\xA4\x97\x77\x5E\x6E\x49\x26\xF8\x3A\x23" + + "\x16\x50\x8E\x87\x47\x5A\xE8\xDC\x4B\x5E\xEC\xEF\xF6\x50\x52\xC6\xE6\x39\xF2\x30\x7C\x8D\xC8\xFA\xA9\x7A\x86\x59\xFA\x4C\x0A\x77" + + "\xD2\x32\x79\x26\x19\x24\xE7\x03\xE8\xB8\x16\x88\xEE\x7D\x45\x3D\x44\x9F\x8C\xF0\x5A\xD3\x8C\x0E\xDF\xC9\x79\xB9\x74\xC9\x29\x65" + + "\xC9\x2A\x46\xF8\xE4\xB6\xA1\x15\x6C\xBB\xD1\xD5\x32\x46\x39\xD5\x25\xB1\xE0\x64\x6F\xCA\xF0\x57\xC8\xE9\x5B\x28\x2D\x71\x18\xF2" + + "\xB4\x7F\x55\xCC\x6F\x4B\x56\x3B\x7F\xDA\xCE\xDB\x9C\x63\xFB\x2F\x45\x2D\xBE\x6B\x64\x87\xC5\xBA\xEB\x1D\xD8\xFC\x63\xFA\x2E\x45" + + "\xF8\x35\xF4\x3E\x7F\x26\x74\x7F\x59\xFD\x4B\x83\xC7\x4D\x19\x35\x0D\x38\xEE\x9A\x48\x3C\x4A\xD9\x4C\x85\xC0\x6A\xC8\xC6\x3D\x17" + + "\xAA\xAA\xD6\xDB\x9C\x8D\x11\x5C\xFC\x30\x38\x64\x78\xC7\xF3\x0A\x17\x74\x70\x04\x19\x2E\x72\xFE\xA3\xFB\x2E\x8C\x7A\x8D\x36\x39" + + "\xDB\x97\xF8\x66\x9F\x1E\x57\x1A\x48\xBF\x74\x6C\x11\x9A\x60\x3C\x40\xD7\x0E\x06\x79\x56\x6A\xF9\x19\x4F\x45\x24\x8F\x39\x0D\x6E" + + "\x4A\xC1\x6F\x34\xF5\xBD\x2D\x53\x4F\x51\x43\x70\x95\xCE\x3B\xB4\x93\xC2\xBA\x74\x5F\x50\xDD\xBA\xAE\x9A\xB2\x86\xE0\xE7\x7F\x95" + + "\xE5\x7B\x86\x37\xC8\x5E\x8C\x1C\x32\x43\xC9\x07\x68\xD4\xDB\x8C\xB6\xCB\xB3\x83\xD4\xF7\x5A\x2A\xB9\x1D\x1D\x33\x5E\xE9\x5C\xEE" + + "\x70\x30\xB9\x11\x5B\x9C\xFA\x96\xC9\x51\x13\xBC\x1F\xCE\x76\x56\xB9\xBA\x2E\xE1\x45\x55\xE3\xB2\x21\x21\x69\xDB\x40\xFE\xEA\x9B" + + "\x7B\x6D\xDE\x9A\x52\xCA\xE0\xF8\xF5\x1D\x81\xDB\x21\x6D\x8C\x63\x37\x67\x4B\xD4\x3C\x50\xD9\x15\xD9\xD2\x9A\x0A\x72\xD6\xFE\x19" + + "\x81\x98\x1B\x80\xBC\xB2\x53\x4B\x81\xA0\x67\x3C\xEF\xC2\xF0\x98\x22\x63\x5B\xAE\x47\x34\x91\xCE\x53\x8A\x48\xC6\x3F\x7A\xFF\x00" + + "\xD5\x6A\x7E\x26\x7A\xF0\x7A\xE8\x2A\xB5\x4B\xEE\x47\x24\x2E\x74\xD8\x6B\x5C\x5C\x7B\x63\x95\xEB\xA7\xA6\x91\xAD\x61\x7B\x0E\x03" + + "\xB2\x54\xD0\xD5\xBE\x98\x00\xD9\x7C\xC3\x82\x71\xB2\xF3\x16\x4A\xF2\x5D\xF8\x97\x9C\x9C\x9E\x15\x4E\x11\xED\x9A\xA7\x8F\x3E\x4B" + + "\x51\x49\xDF\xDD\x1A\x07\x48\x3E\x9C\x4F\x8C\x86\xFF\x00\xE5\xCA\xBC\xD6\x96\x0B\x73\xDE\xD7\x0C\x06\xF2\x16\x12\x1F\x52\xC1\xFB" + + "\xBA\xA7\x82\x17\xAE\xDB\xD5\x57\x4A\x66\x3E\x95\xD3\x3A\x48\x9E\x70\x72\xB3\x4A\x33\x7E\x96\x79\x39\xB0\x66\xD3\xA5\xE5\x55\x67" + + "\xB6\xEB\x5F\x49\x5B\x5B\x24\x10\x78\x86\x67\x1D\x3A\x9E\x06\x02\xAE\x57\xD2\x1A\x73\x11\x7B\x9A\xE0\xFD\xF1\xF7\x57\x06\xF4\x85" + + "\x74\xB4\xD1\xDC\x29\xC3\x5E\x64\xF3\x01\xDC\x2F\x1D\x4F\x4A\xD4\xED\x35\xCE\x37\xC7\x0B\x06\xEE\x0B\x6A\x9C\x7A\x47\x99\x97\x0C" + + "\x9F\xA8\xAB\x08\x8E\x8F\x28\x03\xD9\x26\xB5\xC0\xEE\xC3\x8F\xA2\xB1\xB2\x6A\x28\x1A\x62\xA4\xA7\x19\xEE\xF7\xF2\xBC\xE2\xFD\x1B" + + "\x1F\x82\xCD\x87\xA0\x5B\x28\xE5\x78\x92\xE6\x5C\x1C\xC9\xA9\x61\x30\x3A\x66\x92\xD7\x63\x66\x81\xB2\xEB\x59\xD8\x4B\x62\x03\x91" + + "\x19\xDF\xEE\x93\xAF\xF4\xF2\xB0\xB5\xF0\xB9\xCD\x3C\x8C\x05\x24\x37\xF8\x29\xA3\x22\x0A\x3D\x07\x18\xD4\x3F\xF9\x4E\x0C\x93\x4B" + + "\xDC\xBB\x74\xB4\x91\xC4\xF2\xC9\x5E\x03\x86\xF9\x2A\xD9\xF8\xDA\x50\x7C\xD3\x47\xF6\x2B\x18\x77\x52\xBC\x1F\x2B\x1C\x32\x94\x17" + + "\xD9\xAA\x2A\x9B\x11\xD4\x35\x1C\x72\xB4\xBC\x71\x6C\xEA\x8E\xA5\x74\x6D\xED\x7B\x1E\x32\xC7\x07\x03\xDD\x31\xD5\xF9\x70\xB3\x8B" + + "\x2D\xC2\xE4\xDA\x88\xE2\x6C\x8F\x73\x0B\xB1\xA5\x68\x8C\x18\x8C\x1C\xEF\x8D\xD6\x99\x47\x69\xD7\x19\x6E\x13\x9C\x40\xF3\x7F\x24" + + "\x23\x18\xDB\x21\x49\xBA\x17\x12\x38\x0B\x13\x32\xC2\xD6\x6D\xE6\x7E\x42\x7C\x01\xB0\xCF\xD5\x36\x70\x3C\xC3\x21\x23\x87\x37\xCA" + + "\x3F\x55\x48\x89\x00\x38\xDC\xE5\x2C\x92\xEC\x60\x8F\x75\x18\x2F\x07\x80\x51\x78\x9B\xE0\x82\x0A\x80\x3D\x0E\x07\x72\x48\x53\xD2" + + "\x4C\x69\xDF\x92\xE2\x58\x79\x1E\x8A\x0E\x46\x32\x98\x42\xC6\xEF\x8C\x95\x94\x64\xE2\xED\x12\x51\x52\x54\xCB\x04\x6F\x04\x07\x34" + + "\xE4\x1E\xFE\xAB\x91\x78\xE9\xF7\xDC\xAB\xA3\xA9\x86\x7D\x1B\x69\x78\x3E\x9E\xDE\xE8\xA8\xAA\xCC\x6E\x0C\x93\x21\x87\x8C\xF6\x5D" + + "\x66\x9D\x4D\x2D\x3B\x82\x17\xA7\x8B\x22\x92\x38\x27\x17\x16\x53\xAE\x10\x50\x5B\xF3\x4F\x07\xFD\x55\x4F\x79\x1F\xF9\x3F\x45\x54" + + "\xEA\x1B\x0C\x57\x6A\x22\xD0\x33\x53\xCB\x1D\x8D\xC9\x57\xE1\xD2\x0D\x35\xD2\xC8\xEA\x97\xB6\x17\x3B\x53\x58\xDE\xDE\xDF\x45\xED" + + "\x9C\x59\x7A\x6E\x9B\xC7\xA8\x31\x40\xDE\x35\xBC\xF2\x56\xEA\x30\xDD\x46\x29\x7D\x35\x76\x7F\x86\x50\x50\x56\x6B\x64\xB2\xD5\x16" + + "\x98\xDD\xD8\x69\xCF\xFC\x2C\xD5\xEC\x04\xE4\xAD\xD7\xAE\xED\xB4\x5D\x69\x35\x2B\xE9\xAF\x14\x94\xB1\x31\xB9\x2C\x90\x9C\xEA\xDF" + + "\xD0\x2A\x75\x47\xC3\x9B\x45\x1C\x86\x3A\xFE\xA8\xA2\x85\xE3\x96\x97\x10\x7F\xA2\xD2\xFB\x32\x33\xA2\x06\x76\x44\xDF\x75\x7F\x6F" + + "\x46\x74\x7B\x47\x9F\xAB\x60\x71\xFF\x00\x6B\xC7\xF6\x52\x0E\x94\xE8\xA6\xE3\x3D\x4D\xAB\xFF\x00\x17\x37\xFB\x21\x4A\x1C\x63\x0E" + + "\x07\xDD\x5C\xFF\x00\x6D\x52\x32\x89\xAC\x7C\xA2\x53\xF8\x56\x46\x00\xFC\xA4\x3B\x2B\xAD\x47\xD1\xFD\x1F\x51\x28\x8E\x9A\xF7\x51" + + "\x33\xDD\xC3\x59\xA4\xE7\xF9\x2B\x23\x7E\x12\x58\xE2\x80\x4D\x3D\x6D\x6B\x1B\x8C\xF9\x83\x3F\xB2\xB6\x42\x82\xDB\xC8\xA9\xB9\xD7" + + "\xF8\x21\xCF\x35\x64\x08\xDB\xB6\xD8\x20\xFF\x00\xC2\xE9\xD4\x5C\x69\x4F\x50\xB2\x9A\x9D\xA4\x33\x25\xD2\x69\xC6\x75\xE3\x1B\x7D" + + "\x97\x4A\x5B\x27\x44\x51\xBC\xB5\xF5\x95\x6E\x73\x7B\x8D\x2B\x9D\x3D\x6F\xC3\xCA\x49\x31\x23\xAB\xA5\x78\xEE\x03\x73\xFD\x56\x3B" + + "\xD1\x76\xB3\xC5\x5F\x75\xA2\xB1\xD0\xC1\x49\x2B\xA6\x90\x3A\x42\xE9\x33\x82\xF6\x64\x63\x65\x59\xAE\xB8\xD0\x54\x52\x43\x4B\x4F" + + "\xF8\x87\xC3\x13\xFC\x50\xE9\x31\xA8\xBB\x8C\x7D\x15\xB5\xF7\xBF\x87\x4E\xFF\x00\x32\x86\xBA\x6F\xFC\x9A\xD3\xFF\x00\x28\x3F\xC4" + + "\x5F\x0F\x19\xF2\xD8\xE7\x77\xD5\x83\xFB\xAC\x5E\x48\xFC\x99\xA8\x4B\xE0\xAF\x3A\xFB\x45\x1B\xFF\x00\x1B\x14\x53\xFE\x30\xB0\x02" + + "\xC3\x8F\x0D\xA7\x3D\x97\xB2\xC9\x73\x8E\xBE\xE9\x73\x7D\x69\x64\x30\xD6\x46\x1B\xFB\xC2\x76\xDC\x71\xFA\x2E\xA9\xEA\xCE\x83\x6E" + + "\x31\xD3\x65\xF8\xFE\x26\xFF\x00\xFE\x91\x37\xAE\xFA\x3E\x01\xFF\x00\x4F\xD2\xB0\xE7\xFD\xC0\xFF\x00\xFD\x94\xF2\x47\xE4\x6C\x97" + + "\xC1\xE1\xBE\xBA\x3A\xC7\x52\x53\xD2\x1F\xDD\xD3\x43\xE1\x65\x9C\x3B\x7C\xAF\x35\x3D\xB6\x4C\x61\xAD\x71\xFB\x2E\xB9\xF8\xA5\x6B" + + "\x87\xFF\x00\xB5\xE9\x4A\x2F\x6D\x4E\x77\xF7\x51\x3B\xE2\xF4\xC3\xFC\x8E\x9F\xA1\x8B\xE8\xE7\x27\x9A\x1F\x23\xC5\x3F\x80\x23\xB6" + + "\xCC\xD2\x1A\x62\x70\x3E\x98\x5D\x1A\x6B\x25\x5C\x98\x2D\xA7\x7E\xFE\xCB\x95\x37\xC5\xDB\xE3\xC6\x29\xE2\x86\x9F\xFF\x00\x11\x9F" + + "\xEA\x17\x82\x5F\x89\x9D\x57\x39\xDA\xE8\xF6\x0F\x40\xC6\x7F\x65\x3C\xF1\x45\xF0\x4C\xBB\x5D\xAD\x53\x50\xF4\x64\xE6\x66\x63\x32" + + "\x67\xFA\x2B\x4F\x4E\x1F\xFB\x34\x3E\x5F\xCA\x16\x27\x37\x54\xDE\xEE\xAE\x64\x37\x0A\xF9\x27\x88\xB8\x79\x48\x00\x7F\x20\xB6\xFE" + + "\x9B\xC8\xB2\xC3\x9F\xE1\x0B\x9B\x2C\xD4\xDD\x9B\xE1\x07\x08\xD3\x3A\x82\x4C\x01\x91\x84\xC5\xE4\xF0\xC3\xF5\x44\x5C\x3B\x84\x81" + + "\x2E\xE1\xB8\x5A\x8C\x88\xF2\xE3\xF3\x34\x61\x09\x0D\x3C\x60\x15\x23\x8B\x9B\xCE\x30\x84\xE9\x3B\xE9\xC9\xF6\x50\xA4\x7A\x70\x7E" + + "\x6C\xFB\x21\x73\x09\xFC\xC4\x29\x4B\x75\x0C\xE7\x4A\x88\x69\x1B\x38\xE4\xA1\x50\xDB\xB4\x60\x92\x7D\xD1\x64\x16\xE0\x3B\x51\x4E" + + "\x1A\xD1\xC0\x09\x07\x02\xEC\x00\x0A\x14\xE7\xDC\x2D\xF6\xCA\xA6\x1F\xDA\x30\xC4\xED\xBF\xD4\x59\x1D\xBE\x18\x29\x6E\x97\xC8\xA0" + + "\x73\x63\x85\xB2\x79\x48\xE0\x0D\x2D\x56\x6F\x89\xB6\x9B\xE5\x7C\xD1\x3E\xD2\x24\xF0\x43\x0E\xB0\xC3\x85\x41\xE9\xB8\xE5\xA6\x65" + + "\x5C\x55\xCD\x73\x4B\x66\x02\x60\xF3\xB8\x18\x1C\xAD\x3A\x9C\x6A\x78\x76\xDF\x6D\x7E\xE3\x1C\xEB\x25\xD7\x47\xA2\x0B\x65\xC2\x3A" + + "\xAA\x78\xE6\x9D\xB4\xBF\x8B\xC8\x64\x72\x13\xE7\x19\x3F\xD9\x7A\xAA\x69\x65\xB5\xD4\xBA\x9A\xAA\x03\x14\xA3\x7D\xF8\x70\xF5\x0B" + + "\x5D\x96\xC7\x6D\xAE\x96\x92\xB2\x7A\x68\xE4\x96\x9D\xA3\xC2\x7F\xF0\xAA\x2F\xC4\xC9\x61\x17\x2A\x40\xC2\xDF\x11\xB1\x1D\x58\xEC" + + "\x32\xB7\xEA\x74\x50\xF1\xB9\x2E\xCE\x68\x66\x93\x95\x15\xA8\x61\x92\xE1\x50\xCA\x6A\x78\x8C\x92\xBC\xE0\x35\xA8\x3F\x62\xDC\xAB" + + "\x6E\x15\x14\xD4\x92\xB2\xA2\x4A\x56\x64\xC2\xC2\x78\xF6\xFD\x57\x6F\xE1\xF5\x4C\x0C\xEA\x62\xD9\x88\xCB\xE1\xD2\xCC\xFF\x00\x16" + + "\x56\x9B\x05\xB6\x86\x92\x79\xAA\x60\xA7\x64\x72\xCB\xBC\x8F\x1C\xB9\x4D\x26\x8E\x0F\x1A\x93\xEC\x64\xCB\x24\xE8\xC7\xEA\xFF\x00" + + "\x0A\xEB\xB5\x94\x56\xB8\x18\x1A\xEC\x3C\xBF\xEF\xCA\xD6\x6D\xDF\xB3\xCC\x23\xF0\x0C\x8F\x48\x1C\xB1\x62\x9D\x67\x1B\xAB\x6F\xB2" + + "\x36\x88\x65\x92\x4F\xFB\xAC\x71\x8C\x6F\xFC\xF2\xAD\x3F\x0D\xED\xB5\x56\x9A\x99\xA4\xAD\x9F\x58\x91\xB8\x0D\xD4\x4E\x38\x5A\xF1" + + "\x62\x8E\x38\x6D\xBE\x9B\xFD\xCE\x87\x37\x29\x5D\x1A\x1D\xCA\xBE\x9E\xDB\x4D\xE3\xD5\x10\xC6\x7A\x95\x94\x7C\x40\xBE\xDB\xEF\x92" + + "\x53\x36\x81\xCD\x79\x66\xCE\x2D\x5A\x57\x50\xDB\x22\xBB\x5A\xCC\x52\x4A\xE6\x37\x9D\x96\x4D\x77\xB2\x47\x6D\xAC\x2D\x18\x76\xD9" + + "\x0E\x1D\xD7\x46\x35\x1A\x6D\xF6\x65\x15\x27\x38\xA5\xD5\xA0\x28\xBA\x72\x7B\x9D\x14\xF5\xCE\x26\x3A\x6A\x66\xF9\x9D\x8E\x7E\x8A" + + "\x59\xBA\x4A\x69\x3A\x7B\xF6\xAD\x0B\xA4\x74\x6C\x19\x73\x1E\x37\x03\xD5\x68\xBD\x07\x25\x35\x47\x4D\x78\x18\x6B\x8B\x7C\xB2\x34" + + "\xF7\x2B\xD9\xD5\x35\x94\x76\x9E\x98\xA9\x8C\xE8\x8F\x5C\x65\xAC\x60\xEE\x57\x54\x30\xC7\xC6\x8B\x9F\x57\x91\xEA\x25\x2F\xB9\x83" + + "\x92\xED\x58\x3C\xAE\xE1\xE9\xCA\xBA\x7B\x5C\x75\xB5\x32\x0A\x71\x27\xC8\xD9\x39\x77\xD1\x73\xE9\x22\x0E\xB8\xC6\xF9\x47\xEE\xCB" + + "\xF2\x56\xF6\x28\x68\xAB\xE8\x69\xFC\x58\x59\x2B\x1A\xD0\x59\x9E\x02\xD5\x87\x0A\x95\xD9\xBF\x55\xA9\x94\x29\x44\xC4\x6B\x2C\xB5" + + "\x96\x79\xC3\x6B\x1A\x40\x7B\x72\xC7\x76\x70\x57\x4E\x87\xB0\xD9\xAA\xAD\x7E\x25\x54\x71\xC9\x3B\x9D\xF9\xB9\x0B\xD5\xF1\x2E\x48" + + "\x1B\x4B\x4D\x0B\x40\xF1\x06\xE3\xD4\x05\x4E\xB2\x5B\x6E\x4F\xAA\x8A\x4A\x76\xC8\xC8\xCB\xB3\xA8\x1D\x92\x78\x92\x6F\x93\x54\xB3" + + "\xCB\x26\x18\x26\xBA\x6C\xD9\x63\xA7\x6C\x11\x36\x38\xB1\xA1\xBB\x01\xE8\xA3\xAC\xA3\x82\xB2\x99\xD0\xD5\x44\xD7\xC6\xE1\xB8\x2A" + + "\x58\x9E\xD3\x03\x01\x23\x3A\x46\x57\x13\xAA\xA4\xAD\x8E\xD6\xE7\x5B\xCB\x9C\xF1\xD9\xAB\x96\x2A\xD9\xAE\x4F\x82\x81\xD6\x16\xAA" + + "\x4B\x4D\x5E\x68\x06\x86\x91\xB8\x0A\xBB\x6A\xB5\x54\x5C\x18\xF7\xC4\xD2\x22\x61\xCC\x8E\x3C\x29\x2E\x75\x35\x72\xBA\x46\xD7\x39" + + "\xFA\xC0\xE1\xCB\x51\xE9\x5B\x3D\x1C\xFD\x15\x04\x25\x80\x89\xD9\x97\x91\xCE\x57\x74\x23\x7C\x1E\x7E\x4E\x67\x6C\xCD\x6E\x7D\x3F" + + "\x71\xB6\xD0\xB6\xB1\x8D\x06\x99\xC3\xE7\x60\xDB\xF9\xAE\x0C\x6F\x9E\x79\x9B\x1C\x65\xCE\x7B\x8E\x00\x0B\x6E\xEA\x76\x52\xDB\xFA" + + "\x3E\x7A\x72\x1A\x18\x23\x2D\x60\x3E\xAB\x28\xE9\x28\x98\xCE\xAD\xA4\x75\x48\x02\x2F\x13\xBF\x0A\xCA\x34\xE8\xD4\xE3\x6F\x83\xAF" + + "\x4F\xD1\x75\xAD\x34\xED\xAB\xA9\x6B\x25\x9B\xE5\x8D\xC3\x8F\xE4\xBC\x55\x36\x7A\x9B\x4D\xF6\x18\x2A\x9A\x72\xD3\x90\xEF\x55\xB5" + + "\xBA\x9A\x09\x24\x8E\x57\x46\xD7\x39\x83\xCA\xEF\x45\x41\xEB\x2A\xA8\x27\xEA\x28\x22\x8F\x05\xF1\x34\xEA\xC2\xCA\x50\x49\x59\x95" + + "\x2E\x8B\x25\x8A\xA2\xDE\xEA\x38\xA2\x8F\x40\x97\x1B\x8E\xF9\x5D\x9C\x69\x1E\x41\xF6\x55\x6B\x1D\x8E\x68\xAA\xA3\xAA\x74\x8C\xC3" + + "\x77\x0D\x0A\xD4\x5E\x46\xC7\x00\xAF\x3E\x75\x7C\x1E\x8C\x2E\xB9\x23\x25\xE7\xE6\xDB\xE8\x93\x76\xDC\x38\xB9\x16\xA3\xDC\x20\x71" + + "\x7F\xE5\xC2\xC4\xCC\xB2\x06\x9C\x79\x4A\x6D\x6E\x6E\xC5\xB9\xFA\x27\x6B\xC3\xB6\x19\xFA\xA9\x32\xDD\x96\x44\x23\x12\x9C\xEE\xC7" + + "\x05\x2E\x73\xBE\x10\xBB\x24\x79\x50\x80\x33\xCF\x99\x01\x27\x23\x61\x82\x9D\xA5\xE3\x63\x84\x20\xB8\x1D\xF0\x8B\x5B\x40\xC9\x28" + + "\x02\xC6\x79\x3F\x65\xEE\xA2\xA9\x3F\xE5\x3C\xEE\x3E\x52\xBC\x01\xCC\x76\xF9\x49\xDA\x75\x64\x34\xE4\x77\x0B\x38\x4D\xC5\xDA\x30" + + "\x9C\x14\x91\xEB\xEA\x5B\xB5\x6D\xAB\xA7\xEA\x2A\xED\xD4\xE2\xA2\x78\xDB\x90\xC2\xBE\x6D\xBD\x75\x45\xD6\xFB\x70\x35\x17\x1A\x97" + + "\xBF\x0E\xC8\x61\x38\x0D\xF6\x5F\x4C\x53\x54\x36\xA6\x23\x1C\xAD\x04\xE3\x0E\x07\xB8\x58\x97\xC4\xEE\x89\xFD\x8B\x71\x37\x2A\x08" + + "\xCF\xE0\xEA\x1D\x92\xD0\x36\x61\xF4\xFA\x2F\x45\x4B\x72\xB3\x89\xC6\x9D\x15\x76\x5F\x5C\x26\x12\xC7\x13\x63\x90\xB8\x17\x3B\x27" + + "\xD5\x58\x3E\x20\x53\xFE\x3E\x86\xD7\x7C\x81\xB9\x15\x51\x06\xC9\xA7\xF8\xF7\x2A\x92\x03\x41\x57\x2B\x07\x5C\xC7\x6A\xB0\x7E\x02" + + "\xA6\xDD\x15\x6B\x99\x21\x7C\x3E\x31\x38\x61\xC6\x3B\x2A\x43\x89\x67\xE8\xBB\xD5\xEB\x0F\xA6\xA4\x7B\x61\xEF\x2B\xB6\x68\x56\x5A" + + "\x6E\x94\xE9\xCB\x2C\xAC\xFD\xAB\x71\x37\x1A\xA0\x7F\xFB\x6A\x5C\x10\x4F\xA1\xCE\xE9\xE9\x26\xEA\x9E\xB8\xA9\xD1\x14\x8E\x86\x90" + + "\x7C\xC5\xA0\x35\x91\x8F\xA8\xDD\x77\xA3\x92\xC9\xD1\x91\x16\xD2\x69\xB8\xDC\xC8\xF3\x4E\xFD\xC3\x4F\xB2\xC5\xB4\xBB\x2A\x4D\xF4" + + "\x77\x28\x5F\x1D\xAA\x88\x54\xCD\x49\x05\x8E\x94\x0C\xB2\x26\x0C\xCB\x27\xD7\x39\x0A\xAB\xD5\x3D\x73\x2D\xC0\x3A\x1A\x32\x69\xA9" + + "\x78\x38\x3B\xB9\x57\x6F\x7D\x43\x53\x5D\x52\x5F\x57\x2B\xA6\x95\xDF\x2C\x68\x6C\xFD\x31\x70\xEA\x0A\x80\xE7\x82\xD6\x67\x7F\x41" + + "\xF4\x5A\x27\x90\xDF\x18\x51\xC5\x9E\x4A\xCB\x8C\x86\x2A\x08\x9F\x21\xEF\x8F\xF9\x51\xC7\xD1\x97\x89\x9D\xA9\xD4\xCF\xC9\xEE\x42" + + "\xDD\x2C\x3D\x27\x45\x67\xA6\x6B\x5B\x1B\x5C\xFC\x6E\x48\x5D\xA1\x4D\x1B\x78\x63\x7F\x45\xCA\xDB\x66\xF5\x48\xF9\xEA\x3E\x81\xBB" + + "\xBC\xE3\xC2\x23\xEC\xBD\x4C\xF8\x6F\x78\x76\xE5\x80\x0F\xA2\xDE\xCB\x03\x70\x04\x60\xFD\x91\x34\x03\xCB\x31\xEC\x54\xA3\x2D\xC6" + + "\x1B\x0F\xC2\xBB\x9C\x98\x2E\x70\x01\x7B\x62\xF8\x4B\x52\x70\x1F\x3E\x16\xC8\x41\xEC\x02\x6D\x51\xB4\xF9\xF0\x12\x89\xB9\x99\x43" + + "\x3E\x11\x1C\xF9\xE7\x77\xFE\xFE\xCB\xD3\x1F\xC2\x38\x47\xCF\x31\xC2\xD3\xF5\x30\xEE\xDC\x20\x73\x8B\x77\x00\x94\xA2\x5B\x33\xC6" + + "\x7C\x27\xA1\x6E\xEE\x79\x2B\xD5\x17\xC2\xFB\x58\xF9\xDA\x0A\xBC\xE5\xC4\x6C\x07\xDD\x31\x0F\x23\x92\xDF\xA2\x0B\x65\x45\x9F\x0E" + + "\x6D\x31\x10\xE6\xC4\x32\x38\x38\x56\x3A\x4A\x6F\xC1\xD3\xB6\x16\x81\xA0\x70\xBD\x41\xC4\x0D\xF2\xE4\x89\xCF\x64\x16\x46\x40\x23" + + "\x38\xD9\x38\x7B\xB8\x6B\x08\xF7\x28\x9C\x41\xC0\x38\x4B\x3B\x2A\x40\x4E\x7F\x30\xCF\xD1\x36\xA0\x46\xC3\x1F\x54\x45\xDA\x77\x77" + + "\x0A\x23\x23\x1E\x3C\x9B\x95\x0A\x36\x1E\xFD\xA4\x03\x1E\xC9\xF4\x35\xBC\x26\x74\xA4\x73\x1B\x90\x12\x5D\xC0\x2D\x40\x11\x70\x07" + + "\x83\xF5\x44\x31\xC8\x51\x83\xA0\x79\xCE\x47\xAA\x45\xF1\x3B\xBE\xEA\x14\xA8\xF5\x97\x56\x53\x59\x24\x6D\x3C\x91\xC9\x23\xDE\xDC" + + "\x8D\x38\x59\x8D\x3D\x63\x6E\x14\xB7\xDA\x96\xB7\x40\x94\xE4\x0F\x4D\x9A\xB4\xBE\xB8\xB3\x50\x57\xB1\x92\x4D\x4E\x65\x98\x0C\x34" + + "\x8E\x42\xCD\x69\xA9\x99\x49\x0D\xE6\x9D\x83\xC8\xCD\x87\xE8\x16\xAD\x4D\x78\x7E\xF6\xBF\x71\x8E\xF7\xF3\xF7\x3B\x94\x3D\x53\x7A" + + "\xA2\xB5\xB6\x96\x1A\xAD\x6D\x6B\x70\xD7\xBB\xE6\x68\xFD\x17\x17\xC5\xA8\x9E\xB5\xF5\x15\x2F\x7D\x44\xAF\x39\x73\x9D\xDD\x3C\x53" + + "\x36\x29\xD9\x1C\x8D\x71\x6E\x32\x4F\x60\x17\x7A\x2B\x95\xAE\x36\xB9\xAD\x9A\x26\x96\x0F\x30\xF4\x5E\x6E\x5D\x5E\x74\xA9\xA7\x24" + + "\x6C\xC5\x86\x32\x76\x9D\x15\xD9\x5D\x27\xE2\x84\xCC\xD5\x13\xDB\xBB\x5C\x36\x21\x75\xE4\xEA\x7B\xE4\x94\x0E\xA7\x7D\xC2\x4D\x25" + + "\xB8\x2E\xC0\xC9\x1F\xA2\x92\xB2\xE5\x45\x33\x84\x4D\x60\x90\x11\x92\xF6\xF0\x17\x0C\xCA\xC7\xC8\xE6\x31\xC0\xE3\xD1\x65\x87\x53" + + "\x9B\x6F\x0B\x69\x32\xE2\x8A\x7C\xBB\x3C\xD7\x8A\xA3\x45\x47\x6A\xA8\xD3\xE2\x39\xAD\x24\x83\xDF\x72\xAC\x7D\x15\x79\x8E\xE3\x54" + + "\xE6\x46\xC7\x31\xC3\x90\x78\x5C\x1B\x94\x71\xC9\x4F\x69\x6C\xCD\x0E\x6E\x93\x96\xBB\x83\xB9\x56\x8E\x92\xA6\x8A\x1A\xC0\xC3\x48" + + "\xD8\x03\xB8\x70\xEE\xBD\x0D\x3B\xFE\x8F\x2B\xDD\xFE\xE6\x32\xBD\xFC\x7D\x8B\x17\x53\x55\x57\xD1\x51\xC4\x69\x1E\xEC\x11\xB9\xF4" + + "\x54\x4A\xF9\xEA\x2A\xDA\xE9\x6A\x9F\xAD\xD8\xC6\x56\x85\xD4\x55\x34\xB0\x42\xDA\x79\x1E\xF6\xEA\x6E\x46\x9C\x7F\xCA\xA0\xDC\x99" + + "\x18\x0E\xF0\x4B\x8B\x1C\xED\xB5\x72\xBB\x23\x7E\x37\xC1\x9E\x14\x9E\xA2\x1F\x99\xC4\x86\xF5\x5B\x6B\xAB\x90\xD1\x4E\xE8\x8F\xA8" + + "\x50\x56\xDD\xEE\x37\x39\xDB\x25\x5C\xCF\x98\xB7\x80\x53\x36\x16\x4F\x51\x2E\xAC\xFD\x97\xB8\x52\x68\x18\x69\xD8\x2D\x4E\x53\xAA" + + "\x89\xEB\xE2\xC7\x82\x52\xBC\x9C\x3F\x93\xC1\x57\x3F\xEE\xDB\xE1\x31\xCC\x3D\xCA\xEA\x5B\x3A\xDE\xEF\x6C\xA7\x10\x43\x50\xE3\x18" + + "\xE1\xA7\xB2\xF3\xBA\x0F\xE2\x5C\xBA\x98\x0C\x6F\x71\x1C\x65\x48\xCB\x22\xE7\xA1\x9F\x0E\x9D\xA4\xB7\x6E\xFC\xCE\x9D\x5D\xD2\xAA" + + "\xEA\xF7\xD4\xD6\x48\x64\x91\xDE\xBD\x97\x7B\xA7\x6F\x61\xB3\xC1\x4E\x75\x82\x4E\x9C\x0E\x15\x5E\x9C\x03\x0B\x47\xAA\xB5\x74\xD5" + + "\xBC\x0A\xE8\xDD\x2C\x18\xDF\x2D\x70\x5B\x6D\x38\xB7\x2E\x4F\x37\x52\xB6\xB8\x46\x3C\x52\xFE\x4D\x2A\x86\x57\x18\xB7\x69\xFB\xAE" + + "\x37\x51\x5C\x9B\x43\x1B\x9F\x31\x70\x6F\xB2\xEF\xC3\xA6\x28\x00\x23\xB2\xA7\x75\x83\x3F\x19\x13\xA3\x85\x8E\x7B\x87\xA2\xD3\x0A" + + "\xBE\x4E\x59\xDA\x5C\x14\x0B\xFD\xC2\x1A\xE9\x4B\xE1\x69\x1B\x6E\x4F\x75\xEA\xB2\x75\xED\x77\x4F\x40\xEA\x46\x46\xD9\xA2\x1F\x28" + + "\x71\xE1\x72\xAE\x94\x8E\xA3\x2D\x6B\x8F\x98\xF2\x3D\x17\x22\x56\x6B\xA8\x7E\x5D\x85\xDA\x9D\x74\x79\xD3\x6F\x77\x07\x62\xF9\xD6" + + "\x57\x1B\xE4\xCD\x35\x07\x11\xB4\xED\x18\xE1\x79\x6B\xAB\x21\x6F\x84\x68\x35\xB5\xC0\x65\xCE\x3C\x82\xBC\xAC\x83\x1F\x2F\xF3\x5E" + + "\x88\xA9\x43\xBF\xCC\x27\x7D\x80\x6A\x97\x66\xAD\xD2\xF8\x3B\x34\xDF\x10\x2F\xB0\x51\xF8\x02\xA0\x96\x81\x80\x4E\x3F\xB2\x7B\x65" + + "\x44\xB5\x95\xE6\x79\xDC\x5C\xF2\xC2\x49\x3F\x55\x5E\xA8\xA4\x74\x2C\xD4\x5C\x31\x9C\x63\xB8\x5D\xEB\x4C\x64\x3E\x40\xD3\x8C\x00" + + "\x33\xF6\x4B\x66\x71\xB6\xD5\x97\xEE\x9C\xB9\xD4\xCF\x56\x21\x70\xF2\x01\xC9\x57\x26\x90\x42\xAB\x74\xBC\xB0\x16\x68\x0F\x05\xCD" + + "\xE4\xAB\x39\x6E\x47\x93\x6F\x75\xC9\x3F\xA8\xF4\xE1\xF4\x8E\x5B\x8E\xF9\xFA\xA1\x00\x0E\xC9\xF7\x68\xF3\x12\xE4\x06\x6C\x1F\x94" + + "\x8F\xAA\xC0\xCC\xB0\x80\x48\xDC\xE3\xE8\x8B\xC3\x04\x64\x00\x53\x60\xE9\xF3\x6C\x8E\x3D\xDB\x8D\x59\x59\x10\x4C\x78\x1B\x12\x11" + + "\x38\x03\xC0\x19\xF5\x4C\x61\x61\x39\x23\x74\xE2\x3C\x70\x76\x40\x3B\x0B\xB8\x70\x1F\x64\xEE\x68\xCE\x70\x0A\x17\x44\x1D\xBF\x29" + + "\x35\xAC\x6F\x97\x56\xFE\x88\x07\x01\x84\xE7\x6C\xA3\x0E\x6E\x70\x81\xD4\xEC\x76\xE7\x94\x7E\x10\xD2\x06\xAE\x15\x04\x8D\x25\xAE" + + "\x0E\x61\xDC\x29\xEB\xA8\xE9\xAF\x76\xA9\x69\x2A\x58\x1F\x1C\xAD\xC1\x07\xB1\x5E\x50\xC2\x3F\x31\x2A\x78\x5E\x61\x78\x70\xDC\x77" + + "\x0B\x76\x2C\x9B\x5D\x3E\x8D\x39\x21\x6A\xD1\xF3\xEF\x51\x74\x95\x6D\x92\xFE\xEB\x7F\x84\xE9\x35\x9F\xDD\x10\x3E\x70\xAC\xB6\x8E" + + "\x85\xA5\xB5\x40\xCA\xFE\xAB\x97\xC2\xDB\x53\x29\x07\xCC\xEF\x62\xB4\xDE\xA9\xAA\x96\x92\x80\x56\x52\x53\xC7\x23\xC6\xC2\x62\x37" + + "\x8C\x2C\x86\xEB\x73\x9E\xA2\x57\xCD\x59\x39\x3E\xAF\x71\x5D\x52\x9D\x74\x68\x8C\x6C\xEC\x5D\xFA\xAA\x49\xA1\x14\x76\xC8\x9B\x45" + + "\x46\xD1\x81\x1C\x7D\xC7\xBA\xAA\xC7\xF8\xAB\xB5\x59\xA7\xB6\xB0\xC8\xE1\xFE\x64\xC7\x86\x2E\x85\x97\xA6\xAE\x1D\x4C\xEF\x1A\x5D" + + "\x74\x36\xB6\x9F\x34\x87\xE6\x9B\xD8\x2D\x32\xD1\xD3\xB4\xD4\x34\xEC\x8A\x9E\x99\xB0\xC0\xCF\x95\x9D\xCF\xB9\xF7\x5A\x64\xEB\x96" + + "\x6C\x4B\xD9\x15\x6E\x9B\xE8\x18\xF6\x9A\xA8\x99\x32\x72\xE9\x1D\xCB\xFE\x9E\xCB\x40\xA6\xA2\xA7\xA3\x84\x47\x4B\x1B\x5A\x07\xA2" + + "\xF4\x32\x3C\x34\x00\x34\x81\xE8\x8B\x40\x1D\xF7\x5A\x1B\x6D\x9B\x52\xA2\x3F\x0D\xF8\xD9\xDA\x4F\xB2\x7C\x39\xAD\xDF\xCC\x8D\xD1" + + "\xEA\x1B\x94\x06\x22\xC1\xE5\x72\x85\x10\x39\xF6\x28\x0C\x6E\xCE\x7C\x42\x12\x0E\x3C\x10\x7E\xA9\xC9\xC8\xC6\xE8\x06\xD6\x1A\xE0" + + "\x1C\xE4\x44\x67\x94\x20\x7B\x65\x3E\x0F\xD1\x00\x25\xB8\x3E\x52\x47\xB0\x5E\x3B\x8D\xCE\x92\xD3\x07\x8F\x5F\x54\xD8\x63\xE3\x2F" + + "\x38\xCA\xF7\x17\x69\xF9\xB0\xA9\xDF\x10\xEC\x93\x5E\xAD\xB4\xED\x81\xB2\x3C\x47\x26\xA7\x36\x3E\x71\x82\xB3\x84\x62\xE4\x94\x9D" + + "\x23\x19\xB6\xA3\x68\x82\x5F\x88\x6D\xA9\x9E\x46\x58\xE8\xDF\x5A\xD8\x86\x5E\xF1\xC0\x19\xFA\xAF\x15\x5F\xC4\x2B\xB5\x3B\xF4\x36" + + "\xD0\xD9\x1D\xE9\x93\xB2\xAB\x5B\x6E\xF0\x74\x75\x5D\x65\x2C\xEC\xA8\x67\xE2\x61\x0C\x6E\x1A\x0B\x9A\x75\x67\xFE\x17\x52\x0F\x88" + + "\x74\xD4\xE6\x07\x3E\x13\xB4\xBA\xA4\x2F\x68\xF3\x0D\x38\xFE\xAB\xDD\x8E\x8F\x0B\x8F\xA1\x5A\xF9\x3C\xA9\x6A\x32\xA7\xEA\x75\xF6" + + "\x3A\xB6\xEF\x88\x37\x9A\xAA\xC6\xC7\x2D\x84\xF8\x7A\xF4\x3B\xC3\x24\x9C\xE3\x38\xDC\xAF\x45\xFB\xAC\x6E\xAD\xA2\x9A\x4B\x4D\x9A" + + "\x7C\x42\x71\x33\xE6\x00\x68\xFD\x0F\xD1\x2A\x2E\xA5\xA5\xA9\x9E\x9A\x9A\x01\x03\xE0\x73\x35\x54\xCF\x9F\x29\x7E\x7B\x1F\xA6\x17" + + "\x9F\xA8\x3A\x92\x66\xBE\xE0\x29\x68\xA0\xA8\x8A\x67\xE1\xAE\xD4\x73\x8C\x0F\xEC\xB4\xBC\x5A\x55\x2A\x6B\xFC\x99\xF9\x33\xB5\xC1" + + "\xC6\xA1\xEA\x3E\xAF\xB9\x51\xBE\xA1\x94\x32\x8A\x71\xFE\xA3\x30\x71\xFA\xAF\x44\xB2\x75\xDC\x21\xEE\x6C\xAE\x63\x63\x3B\xEC\x30" + + "\x4F\x38\xE1\x78\x19\xD6\x52\x41\x41\x3D\x35\x25\x14\x50\x93\xE5\xD0\x1C\x72\xC1\xE8\x3D\x94\x96\xDE\xBD\x65\x34\x55\xED\xB9\xB6" + + "\x57\xCB\x55\x27\x89\x1B\x1B\xBB\x5A\x74\x81\xCF\x3D\x97\x62\xD3\xC2\x31\xDC\xA2\x9A\x39\xDE\x69\xB7\xB5\xC9\xA6\x7B\x3A\x73\xE2" + + "\x55\x4D\xC6\xF3\x0D\xBA\xE7\x48\xC6\x17\x3B\x41\x90\x13\xB1\x5A\x50\x2C\x03\x62\x37\x59\xA7\x4C\x74\x69\xAC\x10\x5C\xA6\x99\xAC" + + "\x0F\x3A\xC0\x67\x3F\x75\xA6\x08\x59\xA0\x02\x33\x80\xBC\x0D\x47\x8F\x7F\xF4\xD5\x23\xD6\xC1\xBF\x6F\xAD\x8C\xE7\x01\xCA\x89\xD3" + + "\x37\x86\xE4\x9F\x64\x4E\x63\x06\xF9\xD2\x9C\x31\xA7\x8D\xD7\x31\xBC\x06\x12\xED\xC9\x3F\x42\x91\xC7\x70\x85\xED\x7B\x5F\xE5\x03" + + "\x1E\xE9\xF2\xFE\xEC\x1F\x65\x0A\x67\xDF\x12\x3C\x47\xBA\x26\x47\x2F\x86\x48\xE3\x38\xC8\x54\x2A\x67\x8A\x0B\x7D\x75\x3D\x40\x77" + + "\x8B\x23\x3C\xA4\xFE\x63\xB2\xDD\x6B\x6D\xF4\xB5\xC0\x1A\xA8\x5B\x26\x3D\x57\x0A\xA3\xA3\x2D\x53\x4A\x5C\xE8\x40\x07\xB2\xCA\x4D" + + "\x4E\x1B\x24\xB8\x31\x51\xA9\x6E\x46\x61\x45\x55\x46\xE7\x97\x54\x9C\x02\xCD\x39\x52\x4D\xFB\x29\xB0\x4A\xD8\xDD\xA8\xC8\x72\x75" + + "\x2D\x18\xF4\x3D\xA3\x1E\x5A\x66\x38\x7B\xE5\x3F\xF8\x1E\xC8\x47\x9A\x8D\x9F\xCD\x71\x7E\x16\x17\x69\xB4\x6D\x53\x69\x51\x9C\xB2" + + "\x4B\x58\xA7\x8D\x87\x59\xD0\xCD\x04\x8C\x6E\x33\x95\xE1\x9E\x5A\x66\x4E\xE7\x51\xC4\xFD\x24\x6D\xEC\xB5\x4F\xF0\x45\x90\x71\x44" + + "\xC3\xFA\xA1\x77\x47\xDA\x59\xC5\xBE\x2F\xE7\xFD\xD6\x4B\x4F\x08\xBB\xB6\x25\x27\x25\x5C\x19\x0D\x7F\x89\x72\xA5\xA3\xA7\x8E\x27" + + "\x46\x61\x6E\x1C\xF7\x76\xDC\xAB\x8F\xC3\xAA\x0F\xC3\xDC\x64\xF1\x9E\x66\x04\x64\x67\xB7\x0A\xDD\x17\x4C\x5B\xA0\x90\x3E\x3A\x28" + + "\x81\x1F\x55\xD8\x82\x08\xE0\xC6\x88\x9A\xCF\xA0\x5B\xE3\x25\x18\xEC\x8A\xE0\xC7\x6F\x3B\x99\x5C\xEA\xAB\x35\x6D\x75\x44\x73\x50" + + "\x46\x1D\xA5\xB8\x2D\x72\xA7\x56\x50\xD7\x34\x08\xEA\x68\xA5\x6B\xDB\xC9\x03\x65\xAD\xEB\x20\x60\xB5\x44\x58\xD7\x9F\x34\x59\xF7" + + "\xC2\xCE\x39\x1A\x54\x5A\xA6\xA4\xBB\x30\xE1\x6C\x92\x19\x5C\xE7\xB6\x41\x9E\xD8\x52\x16\x39\xBB\x9D\x5F\x42\x16\xD4\x69\xE1\x77" + + "\xFA\x4D\xFD\x10\x3A\x8E\x03\xFE\x93\x7F\xFD\x42\x9B\x97\x74\x74\xC7\x53\x9A\x2B\x6A\x7F\xB1\x89\xBD\xC7\x51\x3A\xB1\x9F\x65\xE2" + + "\xA9\x85\xF2\x1D\x9D\xB7\xD1\x6E\xA6\x82\x9B\x07\x54\x2C\x3F\xFE\x2A\x27\x5A\x68\x24\x69\x0E\xA6\x8D\xDF\x64\xDC\xBB\xA0\xF5\x39" + + "\x5A\xA7\x5F\xA2\x31\x16\x46\xED\x01\x8D\x0A\xDF\xD1\x34\xB2\xBA\xEB\xAA\x50\xED\x21\xBB\x67\x85\x7D\x65\x92\xDF\x1B\xF5\x32\x95" + + "\x8D\x23\xD9\x7A\xA3\xA7\x64\x47\xC8\x00\xFB\x2A\xF2\x3A\xA4\x73\xCB\xD7\x2D\xD2\x27\x6B\x81\x6E\x31\x8C\x7A\xAA\x07\x5F\x78\xF1" + + "\x61\xB0\x87\x30\x3F\x7D\x4D\x57\xC2\xD7\x3B\xD9\x41\x3D\x1B\x66\x6E\x25\xFD\xE0\xF4\x70\x58\x29\x38\xBB\x24\xA2\xA4\xA9\x98\x1D" + + "\x43\x5E\xFF\x00\x99\xCE\x2E\xCF\x75\xE3\xFC\x34\xC6\x42\x4F\x7F\x65\xBC\x49\xD3\x56\xC9\x9F\xAC\xD2\x30\x3B\xD5\x49\x1D\x82\x82" + + "\x3F\x96\x99\x87\xEC\xB6\xF9\xFE\xC7\x3C\xB4\xE9\xF3\x66\x12\xD8\x24\xD5\xBF\xF4\x5E\xA8\xA9\x67\x27\x2D\x73\x86\x7D\x02\xDC\xBF" + + "\x64\x51\xF7\xA6\x67\xE8\x8C\x5B\xA9\x98\x3C\x90\xB0\x7B\x61\x4F\x33\xF8\x22\xD3\x47\xE4\xC3\xDD\x67\x9A\x60\x03\xCC\xA4\x7B\x05" + + "\xDB\xB7\xDB\x2A\xDC\xE7\x36\x9A\x9A\x47\x39\xDC\x97\x05\xAB\x0A\x38\xFB\xC4\xCF\xD1\x10\xA3\x88\x6E\xD8\xC0\x3E\xA1\x47\x9A\x46" + + "\xC8\xE9\xE0\x8E\x07\x4B\xDA\xE7\xA0\x8A\x47\x55\xB0\x07\xBC\xEC\xBB\xE7\x59\xFC\xC4\x7B\x04\xBF\x0C\xEC\xFC\xC4\x8F\x44\x5A\x0B" + + "\x56\xBB\x6F\xB3\x7A\x49\x74\x46\x4B\xCF\x0E\x29\xC3\xC8\x18\x71\x08\x8B\x4A\x02\x01\x1B\x1D\xD0\x70\x59\x5A\x64\x27\x0E\x03\xEC" + + "\x88\xB1\xD9\xCB\x5C\x42\x66\xC8\x72\x72\xDC\x27\xC6\xAE\xE5\xAB\x33\x58\x47\xC4\x03\xCB\x83\xF5\x4D\xAD\xCD\xDD\xCD\xCF\xD1\x3F" + + "\x88\x23\x18\x71\xFB\xA3\x0F\xD5\xC1\x04\x2A\x06\x6C\x81\xDF\x94\x84\x43\x18\xE1\x22\xE0\x0F\xCB\x94\x5A\x43\x8E\x48\x42\x01\x90" + + "\xE3\x82\xC3\xF5\x46\x06\x06\xDB\x27\xE3\x80\x98\x3F\x27\x05\x85\x00\x24\x3B\x39\xC6\xEA\x46\xB9\xC4\x6E\xD4\xB1\x9F\x64\x9A\xFD" + + "\x1B\x13\x9F\xAA\x0B\x3C\x57\x73\x53\xFB\x26\xA2\x38\x61\x12\xEB\x6E\xCC\x59\x85\xBB\xA1\x2E\x37\x9B\x8F\x8F\x78\x0E\x82\x06\xBB" + + "\x22\x25\xAD\x99\x09\x3E\x70\x30\x90\xF0\xF3\x80\x16\x56\xDF\x04\x49\x23\xCB\x43\x41\x4D\x49\x4D\x0C\x0D\x19\x6C\x23\x0C\x1E\x8B" + + "\xDB\xB0\x28\x75\xB0\x6C\x88\x48\xCE\xE5\x5B\xBE\xC0\x07\x1A\xB6\x76\xFE\x89\x6A\x70\x3C\x29\x48\x69\x00\xA4\x70\x80\x10\xE2\x06" + + "\x5E\x40\x4B\x5B\x48\xF2\x90\x51\x60\x11\x84\x25\x8D\x03\x61\xBA\x01\xC0\x07\x72\x12\xC0\xCF\x64\x38\x71\x3B\x9C\x04\xCE\x24\x1E" + + "\x50\x0E\x49\x07\x60\x10\xF8\x8D\x6F\xCC\xA4\x03\x23\x94\x38\x1D\xF0\x84\x03\x53\x1F\xC1\x0A\xA9\xD6\xBD\x51\x2F\x4E\x42\xC1\x4D" + + "\x03\x24\x73\xC6\x72\xE2\x76\x56\xED\x2C\xF5\x0A\xB3\xD5\xF4\x16\xEA\xEA\x30\xDA\xDB\x83\x68\xC6\x37\x27\x1B\x8F\xBA\xDD\x85\xC5" + + "\x4D\x39\x2B\x5F\x06\xAC\x96\xE2\xF6\xBA\x30\xFA\xFB\x95\x45\xF2\xED\x25\x75\x6E\x35\xF6\x03\xB2\x3B\x1D\x9E\x4E\xA0\xBC\xF8\x2D" + + "\x38\x86\x2F\x33\xFE\x8A\x4A\xF8\x29\x69\xEE\x15\x10\xD0\x4C\x27\x89\xA7\x0D\x90\x7E\x65\x65\xF8\x4D\xE0\xBA\xF3\x71\xA3\xA8\x7B" + + "\x58\xFA\x98\x03\x63\xCF\x73\xAB\x3F\xF0\xBE\x8B\x24\x9C\x34\xAB\x62\xA3\xC9\x82\xDD\x9D\xEE\x3B\x32\x51\x52\xDB\xAD\x4F\xFC\x4B" + + "\x0E\x88\xC6\x03\x40\xD8\xAA\xD5\x82\xE5\x1D\x7F\xEE\x25\x6E\x97\x93\xB6\xAE\xEB\x67\xA0\xB4\x52\x37\xF1\x10\xDD\xA2\x64\x94\xF3" + + "\xB7\x49\x6F\xF0\xFB\xAA\xA4\xBD\x1D\x6F\xB2\xDF\xAA\x66\xA0\x8D\xCF\x84\xBB\xCA\xE7\x8E\x7D\x82\xF9\xA7\xD7\x27\xAC\xBB\x33\xCE" + + "\xA8\xB6\x3A\x97\xC3\xAC\x81\xA5\xA1\xC7\x07\x1C\x15\xC1\x98\x07\xC0\x1E\x06\xE3\x70\xAE\xBD\x79\x57\x04\x31\x41\x6F\x89\xD9\x79" + + "\x3A\x9D\xEC\x15\x3E\x56\x78\x74\x80\x11\xDB\x0B\xE8\xBF\xE3\x9C\xBC\x2D\x4B\xA3\xC9\xD6\xD7\x92\x2D\x1D\x6B\x2D\x65\x55\x3C\x94" + + "\xF2\x32\x67\x07\x35\xC0\x06\x6A\x2B\x70\xA7\x7B\xDD\x03\x09\xC6\xE0\x2C\xA7\xA5\xAF\x96\xFB\x7C\x51\x47\x35\x0B\x1C\xF2\x46\x64" + + "\xDF\x2B\x57\x85\xAC\x9A\x36\xC9\x1B\xBC\xA4\x64\x61\x79\x3A\xF7\x95\xC9\x6F\x8D\x7C\x1D\xFA\x4D\x89\x3D\xAE\xC3\x3C\x1F\x28\x25" + + "\x01\x71\xC6\xED\xC2\xF0\xDD\x2F\x30\x5A\xDC\x1A\xF3\xA9\xC7\xB2\xA8\x5C\xBA\xC6\xE7\x5F\x70\x86\x1B\x6C\x6C\x65\x2B\xCE\x1D\x2B" + + "\x4E\x74\x9F\x45\xC3\x18\x39\x72\x75\xB9\x24\x5E\x5C\x5F\xDB\x07\xEA\x90\x79\xC7\x98\x0C\xFB\x2A\x3D\x17\x56\xD4\x45\x73\x34\xF5" + + "\x6D\xD3\x18\x38\x0E\x2A\xE7\x4F\x53\x15\x54\x41\xD1\xBC\x1F\x51\xE8\xB0\x71\xA2\xA9\x26\x13\x81\x39\x3A\x88\x42\x0E\x79\xDF\xDD" + + "\x48\xE6\xE7\xBA\x8F\xC2\x70\x39\x0E\x38\xF4\x50\xCC\x67\x38\x01\xBA\x8D\xEE\x60\xDC\x8D\xD4\xA6\x30\x7E\x64\x3E\x1B\x41\xD9\x42" + + "\xA2\x2C\x6A\xE3\x21\x03\xC9\x07\x00\x12\xA5\x78\x3D\x94\x26\x07\xEB\xCE\xA3\x8F\x45\x8B\x2A\x1C\x34\x91\x9C\x26\x73\x32\x72\x42" + + "\x23\xA8\x6C\xD4\x8E\xA6\x8C\xBF\x1F\x64\xA0\x20\xE0\x06\x01\x08\x9A\x71\xEF\x95\x10\x73\x5C\x7C\xA7\x29\xC9\x23\x61\x9F\xA8\x40" + + "\x13\x9A\xCC\xEC\x02\x8C\xBC\x33\x61\x19\x21\x48\x18\x7B\x92\x50\xBF\x2D\x1B\x0C\xA9\x45\x00\x06\x38\xEE\xDD\xD3\xE1\xAD\xDF\x00" + + "\x26\xD6\x40\xC9\x61\x43\xA5\xAE\x76\x40\x42\x85\x86\x3F\xB6\x50\xB8\x38\x0C\x30\x7E\xA9\x39\x87\x39\x0F\xC2\x36\xB8\x16\xFC\xD9" + + "\x42\x10\x89\x1E\xDF\xF3\x30\x11\x78\xCC\xEE\x42\x27\x00\xE1\xBE\xE8\x03\x1B\x8D\x82\x17\x81\xC3\xDA\x77\xDB\x08\xB0\x31\x96\x8D" + + "\xD4\x06\x22\x0E\x41\x52\x31\xA7\xB8\x00\xFA\xAC\x4B\xC0\xFE\x21\x07\x0E\x6A\x6F\x0D\xA5\xD9\x0D\xDD\x10\x07\xF3\x61\x31\x3B\x79" + + "\x48\x56\x88\x39\x07\xD1\x36\xE8\x08\x90\xFE\x60\x9B\xC1\x1C\xB9\xC4\x94\x2D\x92\xEA\xC0\xDF\x01\x42\xFD\x6E\x27\x1A\x4B\x7D\x53" + + "\xF8\x63\x90\xEC\x22\x2D\x38\xF9\x90\x59\x0E\xB7\x37\xF2\x12\x98\x3B\x57\xE5\x23\xEA\xA6\xD1\xA4\x6C\x81\xCE\x63\x76\x71\x00\xA1" + + "\x0B\x23\x46\xA1\xB2\x3D\x07\x09\xF0\x9B\x46\x93\x96\x80\x3E\xEB\x69\xA8\x5A\x5D\xE8\x85\xA5\xC0\xE1\xC0\x05\x30\x28\xB6\x3D\x95" + + "\x16\x47\x8C\x8D\xF7\x4B\x04\x0E\x30\x14\x98\x0E\xEC\x9C\x63\xD5\x5A\x04\x63\x53\xB7\x69\x4E\x4C\xA3\xE5\x68\x3F\x55\x28\xD8\x24" + + "\x36\x09\x40\x84\x3A\x57\x6C\xE6\xE9\x3E\xC8\xF5\x60\x60\x82\x51\xE4\x8E\x00\x4E\xD7\x07\x0C\x1C\x25\x10\x06\x9C\x9D\xC2\x93\xCB" + + "\x84\x60\x0F\x44\xB6\xCA\xB4\x4B\x23\xCB\x78\xC0\x4E\x00\xF6\x44\x5C\xC0\x7D\xD3\xB4\xB4\xEC\x42\xA2\xC8\xFC\xC0\xF6\xC2\x72\xEF" + + "\xB2\x90\xB4\x39\x38\x89\x83\x7C\x64\xA5\x0B\x22\x07\x7E\x72\x91\x78\x01\x4A\x40\x1F\x93\x29\x06\xB4\xFE\x55\x68\x96\x41\xAD\xAE" + + "\x1B\x10\x53\x81\x9F\x94\x29\xBC\x36\x8C\xE0\x04\x05\x8D\x07\x3C\x14\xA0\x06\x24\x1C\x00\x9B\x39\xE5\xAA\x60\x40\x18\xC1\x48\xB7" + + "\x6D\x94\x04\x1A\x00\x39\x0D\x59\xF7\xC4\x4A\x01\x51\x55\x1B\xDE\x64\x0D\x31\xE9\x1A\x38\xCE\x56\x8D\xA0\xEF\xA8\xAA\x4F\x55\x75" + + "\x18\xB7\x5D\x59\x40\xD8\x58\x03\xDB\x9F\x15\xDD\x8A\xE9\xD3\x3C\x8B\x22\x78\xFB\x34\xE6\x51\x70\xA9\x74\x63\xF4\xD4\x66\x3A\xFF" + + "\x00\xC3\xB8\xF2\xED\x39\x3D\x8A\xB0\x7F\x84\x2F\x76\x7B\x9C\x55\x74\x0D\x13\x4D\x1F\x9D\xEC\x8F\x39\x6F\xD5\x59\x5F\xD1\x2D\xBA" + + "\x43\xF8\xB3\x57\xA6\xAA\x47\x78\xA6\x5D\x83\x4B\x7D\xBE\xEB\xDF\x45\x5F\x53\x57\x59\x5D\x6D\xAB\xB9\x96\x3A\x9A\x21\xAA\x76\x86" + + "\xE5\xC7\x20\x63\x8F\x45\xEF\x6F\x7B\x76\xB3\xCA\xA4\xE5\xB9\x76\x75\x2C\x9D\x4D\x5B\x75\xB7\x43\xF8\xBB\x63\x89\x74\x7A\xBC\x5E" + + "\xEE\x19\xE5\x35\xD2\xE7\x77\xAD\x64\x74\xF4\xB4\x91\xC2\xC7\x79\x44\x8F\x27\x5B\x3D\xF1\xC2\xF3\x53\x5A\x69\xE9\xE3\x86\x38\xBA" + + "\xA4\xC7\x13\x1B\xA7\x49\xD1\x90\xDE\x71\xC2\x85\xF5\xF4\xA2\xEF\x45\x05\x3D\xCE\x37\x89\xA5\x2C\x73\x98\xEC\x90\x34\x93\x9F\xE4" + + "\xB9\x1E\x9F\x13\x95\xA3\x77\x9A\x75\x45\x7A\xAB\xE1\xC5\x6D\x4C\xD1\xD4\x49\x5B\xAE\xAE\x67\xFE\xF3\xC4\xF9\x5A\x31\xF4\x55\xCB" + + "\xFD\x82\x4B\x6D\x44\x11\xCD\x53\x14\x84\x8D\x47\x41\xE1\x5F\xEA\x2B\x6C\x95\x13\xBD\xA2\xF0\x03\x61\x8F\x4B\x5C\x1F\xB9\x76\x57" + + "\x39\xEC\xE9\x68\xC9\x75\x45\x43\x24\x3E\x27\x77\x64\x63\x1F\xDD\x76\x63\x6D\x46\x97\x47\x3C\xFE\xAB\x7D\x95\xEB\x07\x4F\xD4\xDD" + + "\x48\x7C\x2F\x8A\x38\x9A\xEC\x79\x8E\xE5\x6B\xD4\x71\x1A\x4A\x08\xE2\x07\x51\x63\x71\x9F\x55\x86\xBA\x47\x36\xF1\x23\xE9\x25\x74" + + "\x74\xFE\x26\x63\x01\xC4\x0C\x2D\xC2\xD1\x2B\xEA\xEC\xF4\xF3\x49\xB3\x9C\xCD\xD7\x8B\xAE\xB7\x3B\xDD\x7F\xC1\xE8\xE9\x1A\x51\xAD" + + "\xB4\x64\xFD\x73\x73\xAE\xFC\x5D\x4B\x22\xD5\xAA\x57\x65\xA0\x76\x5C\xAE\x9D\xB8\xD7\xD0\xD3\x3E\x79\xD8\xD7\xC0\xC6\xF9\xDC\x7B" + + "\xFB\x2D\x06\xF5\x6D\x11\x5F\xDD\x2B\xC3\x7C\x53\xE6\xA6\xD4\x36\x27\x8D\x3F\xD5\x51\x6A\x6D\xB7\x9A\x9A\xC8\xED\xB5\xD4\x0E\x31" + + "\x39\xFB\xBC\x6C\xB9\x55\x55\x9B\xDD\xD9\x0D\x3D\xCD\xB2\xDE\xA1\x6B\x62\x6C\xC1\xB2\x6A\xCE\x4E\x97\x0C\x70\xB4\x6E\x9F\x7E\x6A" + + "\x7C\x33\xE5\x63\x9B\xA9\xA1\x52\xDB\x69\xA6\xB6\x5C\x64\x86\x98\x02\xE6\xEC\x30\xAC\x9D\x1B\x1C\xB5\x77\x19\xAA\x19\x93\x0C\x43" + + "\x43\x5C\x7B\x9E\x56\x2E\x5C\x34\xCC\xE2\xBD\xCB\xAF\x84\xDE\xFB\xA6\x25\x8D\x18\x05\x49\xE1\x3B\x1E\x72\x3E\xC8\x1D\x1B\x5D\xB6" + + "\xC5\x69\x36\x90\xB8\x39\xFC\x3B\x64\xCD\x89\xAD\xE7\x9F\xAA\x98\x43\xA7\x84\x2F\x63\xF3\x80\x1A\x47\xBA\x94\x5B\x07\x2D\x3C\x14" + + "\xC4\x27\x10\x01\xBE\x37\x4F\xA7\x4F\x25\x51\x64\x5A\x5D\xBE\x50\xE8\x39\xF3\x38\x90\x7B\x29\xB0\x08\xD8\xA6\xD1\xEE\xA0\xB2\x07" + + "\x60\x0E\x13\x00\x5C\x72\x09\x1E\xCA\x72\xC4\xC5\xA4\x04\xA2\xD8\x27\x50\x1E\x5C\x1F\xAA\x1F\x31\xF9\x9A\x07\xD1\x10\x2E\xCE\xED" + + "\x4E\x08\x3C\x9C\x28\x52\x37\x1F\x64\xC7\x8E\x14\x87\x03\x94\xC5\xA0\x8C\x85\x68\x96\x43\x86\x72\x41\x1F\x54\xC2\x38\xDC\x72\x39" + + "\x53\x16\x1F\x65\x1B\xDA\xF1\xF2\x01\xF7\x52\x8B\x60\x3A\x06\x93\x9D\xC2\x1C\x86\xEC\x72\xA5\x01\xC7\xE6\xC0\xFA\x26\x74\x5B\x72" + + "\xA5\x14\x0D\x8E\xE9\x6A\x1F\x44\x25\xAF\x69\xF2\xEE\x12\xC1\x3B\x16\x15\x00\x40\x6A\xFC\xD9\x09\xBC\x36\x03\xEE\x9C\x34\x81\xE5" + + "\x08\x4C\x01\xCE\xC9\xD8\xA5\x0B\x0B\x64\xC7\x74\xE1\xB8\x42\xE7\x11\xB6\x92\x50\x08\x84\x90\xBA\x46\x0D\x9C\xEC\x14\xC1\xAE\x3B" + + "\xB6\x4C\x84\x04\x88\x24\xD3\xC9\xC2\x1D\x0F\x3F\xEA\x63\xE8\x9F\xC3\x1F\x9D\xD9\x50\x16\x76\xB9\xC7\x94\xB5\xBC\x9C\x06\x84\xC1" + + "\xC0\x70\x9C\x11\x8C\xAD\xC6\xA0\xC6\x48\xDC\x61\x2C\xBB\x38\xD2\xA3\x13\x60\xE9\x0D\x77\xD5\x4A\xD7\x7B\xAA\x80\x80\x24\xF9\x8A" + + "\x67\x34\x0D\xF1\x92\x88\xB8\x04\xC6\x40\x37\x3C\x2A\x02\x05\xA5\xB8\x71\xC2\x26\x34\x0C\xE0\xA0\x6C\x8D\x77\xCB\x82\x9C\x16\xB4" + + "\xE7\x84\x04\xA3\x18\x4B\x03\xD1\x0F\x88\x1C\x3C\xA4\x24\xDD\x5D\xF7\x54\x04\x58\xE2\x3E\x62\x11\x34\x10\x37\x39\x4C\x48\xEF\xB9" + + "\x4D\xB9\xF5\x08\x62\x1E\x9D\xD2\x70\x38\x1A\x42\x66\x6E\x33\x9C\xA3\xCA\xA8\x02\xDD\x47\x90\x30\x9C\x46\x73\x90\xF2\x88\x11\xC2" + + "\x70\x41\x0A\x90\x66\x8C\x0F\x54\xBD\x53\xF6\x48\x1C\xA0\x04\x39\xC7\xF2\xFD\xD3\x39\xB9\x44\x49\xC6\xC8\x32\xEE\xE1\x00\xB4\xE0" + + "\xA7\xD0\x73\xB1\x4E\x08\x44\x48\x03\xEA\x80\x12\x31\xC1\x55\xBE\xA6\xE9\x36\xDF\x9F\x1C\x82\x67\x44\xE6\x70\x00\x18\x2A\xC9\x8C" + + "\xF7\x44\x30\x3B\x2A\x9B\x4E\xD1\x1A\x4F\xB3\x34\x1D\x3F\x7E\xB6\x17\x52\x47\x4F\x1D\x75\x21\xF9\x43\xDE\xE1\xA7\xF4\x50\xBB\xA6" + + "\x2E\xB3\xEA\x26\xD1\x49\x19\x77\x27\xC5\x7E\x56\x9C\x70\x49\xC2\x12\xC3\xDD\x6E\xFC\x4E\x64\xA9\x48\xD5\xE0\xC6\xDD\xD1\x92\x3B" + + "\xE1\xBD\xEA\x69\x09\xF1\x21\x8D\xA4\xFC\xA1\xEE\xD9\x13\x7E\x18\xDC\x63\x78\x71\xA9\x8D\x85\xBC\x16\xB8\xAD\x68\xB4\x35\xB9\xC6" + + "\x54\x60\x87\x72\xD2\x3E\xAB\x17\x9F\x2B\xF7\x2A\xC5\x0F\x83\x34\x8F\xE1\xC5\x6B\x9B\xE6\xB8\xE3\xFF\x00\x10\x3F\xB2\x3F\xFE\x97" + + "\x99\x5D\x9A\x8B\x94\xA7\xE8\x1B\xFD\x96\x8A\xE6\x6F\xE5\x25\xA8\x40\x70\x3E\x63\x95\x8B\xCF\x95\xF0\xE4\xCA\xB1\x63\x5D\x22\xB5" + + "\x68\xE8\xDB\x55\xA2\x30\x0C\x62\x79\x73\x9D\x6F\xE5\x77\xC1\x6B\x1A\x1A\xD6\x96\x81\xC6\x02\x37\xB7\x71\xBE\x37\x4E\x77\x1E\x81" + + "\x69\x7C\x9B\x29\x23\x9B\x74\xB5\xC5\x74\xA7\xD1\x29\x20\xFE\x57\x0E\x5A\x55\x6A\x5B\x15\xF2\x98\x49\x1D\x34\xF1\xCD\x13\xB8\x32" + + "\x7C\xC3\xF9\x2B\xAB\x80\xEC\xA2\x78\x76\x76\x79\x08\x9B\x5D\x16\xAC\xCF\xA2\xE8\x5B\x8D\x75\x48\x75\xCE\xA4\x32\x30\x73\xA6\x3E" + + "\x7F\xA2\xBC\x5B\xED\xF0\x5A\xE8\xDB\x05\x33\x03\x5A\xD1\xD9\x7A\x3C\xCD\x1E\xA8\x4B\xDC\x07\xD5\x46\xEF\xB2\xA5\x42\x74\x80\xF6" + + "\x50\x93\x83\xC1\x53\xF7\xE1\x03\xCF\xA0\x50\xA4\x65\xED\x07\x77\x24\x30\x46\xC5\x22\x1A\x4F\x9B\x01\x2F\x2B\x06\xC0\x95\x00\x07" + + "\x57\x03\x08\x34\x3F\x3F\x36\x54\x9A\xB3\xD8\x84\xDB\x63\x64\x28\x2E\x0E\x03\xCB\x84\x04\x49\xD8\xE1\x13\x75\x07\x6E\xED\x93\x97" + + "\x03\xDD\x01\x1E\x1D\x8F\x37\xEA\x98\x97\x04\x64\x6A\xE4\xA1\x00\x37\xD4\xA8\x50\x70\xE3\xC1\x21\x39\x68\xEE\x13\x97\x60\x64\x04" + + "\xC1\xE4\xF2\xDF\xD1\x00\xB4\xEC\xA3\x2E\x2D\xE4\x7E\x88\xFC\x56\x8D\x9C\x70\x9F\x20\x8C\x8E\x10\x11\x9C\xB8\x6C\x48\x4D\x82\x3E" + + "\x63\x95\x21\x2D\x0A\x32\xF6\xFE\x5D\xFE\x88\x51\x14\xC9\x6B\x71\x3B\x8D\x92\x24\x11\xB6\xC8\x04\x42\x0C\x24\x35\x77\x39\x4F\x8D" + + "\xB7\x42\x89\x01\x0E\xCE\xC7\x64\xC6\x32\x5D\x91\x21\x1E\xC8\xC0\x00\x29\x40\x71\xC6\xE8\x48\x1D\xCA\x62\x08\x39\x27\x64\xD9\x6B" + + "\xF6\x2D\x28\x04\x43\x0F\x60\x53\x60\x0E\x02\x61\x13\x18\x72\xD0\x41\x45\xB2\x01\x0C\x24\x40\xC2\x1F\x2F\xAA\x17\x1C\x8C\x35\xD8" + + "\x50\x16\x86\xB4\x37\xB2\x61\xAB\x56\x08\x18\x47\xB0\x4C\xB6\x9A\xC2\xD2\xDC\xEE\x13\x69\x39\xF2\xA1\xD2\xE3\x8C\x3C\x8F\xA2\x91" + + "\xA4\x81\xB9\x40\x20\xDC\xF2\x13\xF8\x4D\x29\xB5\x39\xC7\x60\x47\xBA\x90\x07\x00\x32\x55\x00\xF8\x2D\x1B\x8D\x92\x6C\x63\x7C\xBB" + + "\x28\xF2\x4E\xC8\xB5\x00\x3C\xD8\x0A\x90\x06\xC4\xC1\xC0\xDD\x1E\x97\x0E\x00\x4B\x51\x23\xCB\x8C\x23\x69\x38\xDD\x52\x58\x21\xA4" + + "\xEF\xC2\x45\x84\x8D\x89\x52\x03\xEC\x9F\xB7\x0A\xD0\xB3\xCE\x21\x90\x12\x75\x93\x94\x6C\x88\x8D\xF5\x15\x26\x7B\x77\x4D\xFB\xCC" + + "\xF0\x30\x94\x2C\x44\x1F\xCA\x9C\x87\x63\x60\x32\x96\xA0\x0E\xE8\x81\xF4\x42\x11\x6A\x90\x1F\x33\x3F\x44\x41\xCE\xEC\xDF\xD5\x48" + + "\x31\x94\x5B\x05\x41\x18\x6B\xB9\x21\x38\x1B\x10\x40\x4F\xE2\x76\x20\x84\xE7\x04\x6C\x80\x85\xF1\x64\x6E\x9C\x45\xE5\xC1\xDD\x49" + + "\x8D\xD2\x3C\x25\x02\x31\x16\x8E\x02\x2E\xC9\xF9\x76\xC9\x12\xE1\xBE\x06\x10\x84\x2E\x6B\xBB\x14\xE4\x86\x37\xCC\x7F\x55\x2B\xB7" + + "\x6E\x70\xA1\xC9\x27\x0E\x6A\x01\xB5\x6B\x1E\x52\x90\x6E\xC8\xDA\xD6\xFA\x24\x4E\xD8\x0A\x14\x81\xC4\x85\x11\x2E\x77\x19\x0B\xD3" + + "\xA4\x0E\x53\x10\x3B\x6C\xA5\x03\xCA\x0B\x8B\xB0\x5A\x73\xEA\x88\xE7\xB2\x98\x8C\x9F\x54\x0E\x73\x5B\xDB\x2A\x02\x02\xD7\x3B\x9D" + + "\x93\x16\xEF\xCA\x93\xC4\x07\x83\xBA\x17\x6B\xE4\x00\x7E\xAA\x14\x0C\x10\x39\x51\x3A\x46\x83\x82\x40\x53\x39\xC4\x7C\xD8\x0A\x32" + + "\x5A\xEF\x97\x05\x42\xD8\x03\x24\x73\xB1\x40\xE7\x6F\x8C\xA3\x2D\x7E\x76\x38\xFA\x22\x03\x03\xCD\xB9\x42\x90\xE9\x71\xF9\x8A\x11" + + "\x16\x0E\x72\xA6\x7B\x41\xEC\xA3\xC3\x46\xC7\x65\x88\x1B\x4F\xBA\x89\xED\x71\x1B\x3B\x0A\x42\xC0\x3E\x54\x98\x7F\x8C\x0C\x21\x48" + + "\x7C\x37\x11\x87\x39\x0F\x83\x83\xEE\xBD\x07\x1D\x90\x9C\x63\xD1\x05\x81\xE6\x68\x43\x82\x47\x29\xF4\x9F\xE2\x29\x1C\xF0\x80\x8C" + + "\x9C\x1D\x86\x53\x82\x4F\xB2\x3C\x0C\x26\xD9\x42\x81\xA4\xE7\x7C\x21\x79\x20\x70\x4F\xD1\x4B\xB2\x12\x85\xB2\x00\x0F\x20\x7E\xA9" + + "\xC6\x7D\x00\x52\xED\x84\x2E\x19\xE0\xE1\x28\x03\x92\x81\xED\xCA\x3C\x38\x0D\xB7\xFA\xA4\x32\x79\x08\x52\x3C\xB9\xBB\x03\x94\xFA" + + "\x8E\x94\x6E\xC2\x1D\x4D\x1C\xA0\x21\x2F\x76\x70\x41\xFB\x24\xDD\x60\xEE\xEC\xA9\xB6\x23\x84\x3B\x7A\x29\x40\x62\xE3\xDD\x09\x38" + + "\x49\xC5\xC0\xEC\xD1\x84\xC5\xA5\xC3\x75\x00\x20\xC8\x4E\xE0\x61\x39\xCF\xA2\x36\x80\xD1\xB2\x67\x6A\xC7\x94\x67\xEA\xAD\x02\x03" + + "\x13\x49\xE0\xA1\x6C\x2D\x6B\xB2\x01\x53\x8D\x47\xE6\xD9\x22\xE1\xE8\xA5\x0B\x2C\xAD\x61\x1B\x97\x12\x11\x8C\x93\x8C\x14\x3A\xCF" + + "\x66\xA9\x32\x4B\x7D\x16\xD3\x58\xE0\x27\x03\x3C\xA1\x6B\x5C\x0E\xEE\xC8\x46\x39\xE1\x50\x2C\x7A\x22\x19\xCA\x12\xC0\x77\x3B\x24" + + "\x5E\xD6\x8D\xB2\x7E\x88\x03\xDC\x70\x9C\x0D\x43\x24\x26\x69\xD4\x32\x06\x3E\xA8\x81\x3D\xD5\x25\x8C\x01\x1B\x04\x81\x78\xEC\x3E" + + "\xAA\x4C\x60\xF2\x91\x3D\xB0\xAA\x20\x81\x3C\x90\x9C\xBC\x24\x37\x1E\xC9\xBC\x30\x55\x20\x41\xC0\x8D\x91\x35\xCD\xCE\x0A\x06\xB0" + + "\x34\xEC\x8B\x4F\xAA\xA0\x3C\x04\xBE\xC9\x80\x00\x60\x14\x43\x84\x02\x0D\x4C\x4E\xF8\x45\x94\xB0\x0A\xA4\x10\x66\xA0\x91\x60\x0A" + + "\x50\x40\x61\xC2\x8B\x51\xDD\x5A\x20\xC5\x2C\x02\x06\x12\x24\xF2\x30\x98\x38\x37\x1A\xB6\x50\x08\xE0\x6C\x9B\x19\xD8\xA3\x2E\x69" + + "\xEE\x87\x20\xBB\x28\x08\xE4\x25\x8C\x38\xDD\x31\xDD\x48\xF6\xEA\x07\xD1\x03\xB6\xE0\x28\x54\x01\xF2\x8E\x3F\x44\x05\xDB\x63\x70" + + "\xA4\x07\x3C\xEC\x87\x92\x85\x23\x0E\xCF\x39\x4B\x19\x3C\x9C\x29\x30\x10\x3C\x86\x9D\xD4\x00\x1C\x34\x65\xC7\x65\x16\x43\x8E\x43" + + "\xB2\x14\xA5\xCC\x70\xDC\xA0\xD0\x1B\xC2\x8C\x03\x8D\xD3\x1F\xAA\x4F\x0E\x18\xD2\x50\x82\x38\x24\x65\x42\x8C\x4E\x7B\xE5\x36\x9C" + + "\x9E\x02\x67\x6B\xD4\x74\xB4\x61\x09\x79\x67\xCD\x8C\x28\x03\x2D\x2A\x33\x9C\xF2\x9C\x3C\x3C\x65\xA5\x46\xF7\x69\xE0\x13\xF4\x42" + + "\x89\xEE\x19\xC1\x70\xCA\x8F\x43\x8B\xB2\x4E\x7D\x93\x8F\x31\xE3\x07\xDD\x11\x70\x19\xC9\xC2\xC4\xA3\x11\xE5\x51\xEF\x84\x7A\x9A" + + "\x78\x39\x51\x39\xE4\x9C\x00\x47\xBA\x80\x7D\xC7\x64\x04\x92\x77\x09\x00\xF0\x79\xD9\x3B\x9B\xA8\x6F\xB2\x14\x6D\xFB\x26\x24\xE3" + + "\xB2\x12\xD2\xDF\x93\x9F\x74\xC3\x56\x32\xE0\x10\x02\x5C\xF0\x77\xE1\x0B\xB2\xEF\x94\x90\xA5\x2D\xD9\x37\x0A\x15\x51\x1E\x25\x1C" + + "\x10\x7E\xA8\x9A\x5D\x8D\xF9\x48\x3C\x12\x40\x29\x9C\xE0\xDE\x4E\x3E\xA8\x51\xCB\x87\xB6\x50\x93\xEC\x90\xDF\x71\xB8\x48\xA0\x07" + + "\x25\x46\xE6\x3C\x9D\xA4\x21\x4B\x8F\x54\xDD\x90\xA3\x37\x3C\x1D\xD3\x3E\x30\xEE\x42\x71\xF5\x48\xE4\x8E\x54\x04\x64\xF8\x7F\x28" + + "\xCA\x5A\xCB\x87\xCA\x42\x47\xDD\x25\x00\xC1\x9B\xE7\x29\x17\xE3\x6C\x12\x91\x38\x4C\x4F\xEA\x80\x63\x97\x0D\x8E\x13\x00\x5B\xB9" + + "\x79\x29\xCE\xE8\x4A\xA0\x20\xF0\x50\x3C\xB4\xED\x94\xCE\x76\x91\xC2\x88\x3C\x38\x9C\x72\xA0\x2E\x20\x84\xE4\x7A\x21\x6E\x08\x44" + + "\x08\xE1\x6D\xB3\x58\xC3\x5E\x7B\x22\x69\xD3\xF3\x14\xB6\x3D\xD3\x3A\x36\xBF\x9C\xAA\x09\x46\xFC\x14\xE1\xA3\x2A\x38\xA3\x0D\x1E" + + "\x52\x42\x32\x48\xE1\x08\xC9\x40\x18\x48\x6D\xD9\x00\x71\x71\xF4\x44\xE6\x6A\xE5\x52\x07\xDF\x94\xB1\xB7\x28\x1A\xDE\xCD\x3C\x23" + + "\xCE\xC0\x2A\x41\x36\x33\xEA\xA4\xDC\x0D\x94\x59\x90\x1E\x06\x11\xB5\xC7\xBE\xCA\x80\xDA\x0E\x72\x89\xC3\xCB\xC6\xE8\x75\x7B\x27" + + "\x0E\xEC\xA8\x23\x2D\x39\xE4\xA5\x97\x03\x8C\x12\x11\xE4\x03\xBE\xE9\xCB\x83\x46\xC3\x25\x09\x62\x19\x4F\x8C\xA0\xD6\xFC\xF9\x82" + + "\x71\x28\xCE\xE0\xAA\x4E\x43\xFC\xB8\x41\x8C\x77\x46\x64\xF4\x42\x30\xE5\x40\x89\xC8\x44\xD0\xD2\xDC\x9E\x53\x86\x00\x10\x02\x0B" + + "\xB0\x80\x45\xA3\x3C\xA0\x00\xB1\xD9\x71\xD9\x48\xEE\x37\xD9\x33\x1C\x1D\xC1\x07\x0A\x01\x8B\xB3\xC1\xD9\x36\xC0\x24\xE7\x37\x71" + + "\xB0\x2A\x3C\x90\x7C\xC8\x10\x4E\xF6\x08\x30\x7B\xE3\x08\xC0\x05\x38\x03\x0A\x16\xC8\x1E\x09\x08\x3C\x3D\x2A\x73\xA4\x1D\xD0\x38" + + "\x8C\x14\x16\x42\xE6\x03\xC8\x42\xE7\x88\xDB\x83\xB0\x0A\x42\xD0\x84\xB1\xB8\xDC\xE5\x42\x90\x97\xEA\x19\x6E\xE8\x40\x39\xF3\x34" + + "\x29\x74\x8C\xEC\x91\xC0\x52\x81\x1E\x08\x42\x71\x9D\xF0\x8C\x91\x8E\x54\x2F\x71\xCF\x05\x42\x8E\x5A\x07\x03\x08\x48\xDF\x84\x8B" + + "\x8B\x46\xDB\xA0\xD6\x7F\x30\x50\x0F\x8C\xA0\x74\x6D\x7F\x29\xDD\xA1\xCD\xC6\xAD\xFD\x12\x68\x18\xC0\x28\x00\x0C\x6B\x38\xE5\x2D" + + "\x87\x64\xEF\x63\x5E\x30\x54\x60\x35\x9D\xD4\xA2\xD8\x7C\xF0\xA2\xD2\xE0\x72\x5D\x9F\x65\x2E\xD8\xE5\x0B\xBE\xAB\x12\x81\x94\x0E" + + "\x91\xAD\xD9\xDB\x29\x0B\x71\xDD\x0E\x90\x79\xDD\x00\x20\xE4\x26\x25\x3B\xE3\xC8\xC3\x5D\x84\x0D\x69\x1F\x33\xB2\x80\x72\x07\xA2" + + "\x62\xD0\x47\x19\x45\x8C\x8E\x54\x5E\x1B\xB3\xB4\x85\x42\x8B\x18\xE0\x61\x30\x7F\xFB\x51\xE9\x3E\xA8\x0B\x35\x77\xC2\x16\xC4\x09" + + "\x39\xD4\x30\x93\x9C\x00\x43\xE1\xED\x82\xE2\x42\x61\x13\x47\x05\x0B\x68\x17\x34\xBB\x70\xE2\x10\x98\xDF\xDA\x43\xFA\x29\x34\xE3" + + "\x82\x9F\x1E\xEA\x50\xB2\x36\xB4\xFE\x63\x94\x47\x18\x48\xBB\x07\x72\x9B\x20\x6E\x4E\xC9\x40\x1C\x12\x72\x98\x8F\x54\xBC\x56\xEF" + + "\x83\x94\x3E\x2B\x73\xB9\xC7\xD5\x4B\x45\x1F\x4E\xC8\x77\xF4\x48\xBB\x3B\xB5\xC0\xA4\x38\xDC\xEE\xA9\x06\x3F\x44\x3A\x47\xA2\x4F" + + "\x69\x27\x67\x94\xC7\x6E\xE9\x40\xFF\xD9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xDB\x00\x43\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01" + + "\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01" + + "\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xFF\xDB\x00\x43\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01" + + "\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01" + + "\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\xFF\xC0\x00\x11\x08\x00\xF0\x01\x40\x03\x01\x22\x00\x02" + + "\x11\x01\x03\x11\x01\xFF\xC4\x00\x1F\x00\x00\x01\x04\x03\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x05\x03\x04\x08\x09\x06" + + "\x07\x0A\x02\x01\x00\x0B\xFF\xC4\x00\x3E\x10\x00\x02\x02\x02\x01\x03\x04\x01\x03\x03\x03\x03\x04\x01\x00\x0B\x01\x02\x03\x04\x05" + + "\x11\x06\x07\x12\x21\x00\x08\x13\x31\x22\x09\x14\x41\x15\x32\x51\x23\x42\x61\x16\x71\x81\x17\x24\x33\x52\x91\x0A\x18\x62\x26\x34" + + "\x72\x43\x92\xA1\xB1\xC1\xFF\xC4\x00\x1C\x01\x00\x00\x07\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05" + + "\x06\x07\x00\x08\xFF\xC4\x00\x3F\x11\x00\x02\x01\x03\x03\x02\x04\x04\x04\x05\x02\x05\x04\x02\x03\x00\x01\x02\x03\x04\x11\x21\x05" + + "\x12\x31\x00\x41\x06\x13\x51\x61\x14\x22\x71\x81\x32\x91\xA1\xF0\x07\x23\xB1\xC1\xD1\x15\x42\x16\x33\x52\x62\xE1\x08\x24\x72\xF1" + + "\x34\x53\x43\x92\xA2\xFF\xDA\x00\x0C\x03\x01\x00\x02\x11\x03\x11\x00\x3F\x00\xB5\x5F\x96\x20\x81\x49\x8D\x19\x81\x1B\x6E\xED\x12" + + "\x07\xD6\xFC\x82\x7C\x2E\xB7\xBD\x02\x37\xA1\xF8\xFA\xFA\x93\x40\x8B\x18\x77\x50\x47\x86\x62\x84\xF6\xEC\xF8\xD1\x03\xEB\x5A\x3F" + + "\x43\x7A\xFE\x3F\x96\x91\x44\x92\xA9\x49\x03\xC8\x1B\x7D\x9A\x3B\xDE\x88\x1D\xE7\xF0\x56\xEE\x1A\x2C\x7C\x9F\x23\x64\xEB\xC7\xA5" + + "\xA4\x86\x38\xFE\x07\x78\x88\xFE\xE0\xE4\x8F\x2C\x3C\x0E\xD3\xDA\x7C\xF8\xF2\x49\x0C\x75\xA3\xAD\xEF\xD6\x30\x7B\x62\xC4\x73\xEF" + + "\xC7\x63\xFB\xCF\x5B\x12\x2A\x01\x90\xC4\xF7\xB5\xBD\x45\xAD\xEB\xCD\xAD\xD3\xE3\x3D\x79\x01\x50\x14\xAF\x70\x50\xEA\x92\x68\x10" + + "\x06\x8F\x72\x7F\xF6\x1A\x3F\xE0\x6C\xF9\xDF\xA6\xA6\xD0\x42\x55\xC4\x84\x23\x91\xA1\x13\x10\x50\xFD\x7F\x61\xFC\x80\xFA\x1B\x1B" + + "\xD8\xF4\x98\x8A\xBA\xF7\x01\x1B\x06\x61\xDC\x5B\x6D\x18\xDF\xF1\xDD\xB2\x01\xF1\xFE\xE0\xBB\x3E\x4E\xB4\x3D\x7A\xF8\xDD\x55\x7B" + + "\xC1\x74\x93\xB9\x7B\xA3\x65\x60\x7E\x80\xD2\x9D\x30\xD7\xF3\xAD\xAE\xFF\x00\x8D\x00\x3D\x70\x04\x9E\xDF\xA7\xF4\xFC\xB8\xFA\x63" + + "\xA0\xB0\x04\xF3\x6F\xB5\xFE\xFE\x87\xFB\xF2\x3A\xFA\x6E\xC2\xE1\x89\x2A\xC8\x08\x1A\xF8\x5D\x48\x27\xE8\x1D\xEF\x7E\x48\xFB\x5D" + + "\x7F\xDB\x5E\xBE\xC5\x76\x16\x2A\x10\xB2\x9F\xAD\xE9\xBF\x06\x04\x82\xA4\x1F\xAD\x7F\x1A\x5D\x78\xF0\x7D\x7B\x48\x8B\x79\x44\x61" + + "\xA5\x2A\x7B\x94\x2A\x12\x3E\x8B\x02\x03\x02\xDF\x7E\x01\x1B\x3A\x51\xE9\x12\x76\x4A\xC9\x14\x68\x09\x20\xCA\x81\x7C\x95\x1F\x67" + + "\x63\xC1\x6D\xFF\x00\xC1\xDE\xFF\x00\x9F\x4A\xD8\x0C\xF6\x16\xE6\xDD\xAC\x01\xFD\xFB\xDB\xDC\xDF\x27\xFD\xE7\xD7\x8C\x71\xFF\x00" + + "\x9F\xD3\xE9\xD3\xA9\xED\x46\xE3\xB8\x14\x62\x48\x06\x42\x58\x8F\x1B\x0D\xA5\x0C\x7C\xFF\x00\x27\x40\x7D\x6B\x63\xD2\x2F\x34\x60" + + "\x2E\x9F\x5B\x1E\x7B\xD3\xB9\x4A\x9F\xE4\x7E\x7B\x1B\xFF\x00\xC9\xFF\x00\x3D\xA7\xD3\x7F\xC1\x09\xEC\x30\xFC\x7A\x0A\x14\xC6\xBD" + + "\xE7\x63\xC1\x0E\xAC\x36\x76\x49\x3F\x8F\xF0\x00\x6F\xF0\xA8\x58\xCA\xF7\x3A\xA7\x60\x20\x12\x03\x46\xE9\xBD\x68\xEB\x44\x15\x07" + + "\x7A\x27\x43\xF9\xD1\xD7\x91\xFA\x7D\x3F\x51\x8B\x0F\xD3\xD3\xDB\xA2\xD8\x64\xDF\x1D\xAF\xC9\xC8\x1E\xBF\x5C\xF1\x8F\xB7\x5F\x45" + + "\xE1\x1C\x9D\xA5\x94\x40\x40\x0A\xAC\xA7\xB7\xBB\x5E\x0E\x82\xB1\xD1\x3B\x03\x67\x63\xC6\xBC\x79\x09\xBD\xBA\xE7\x66\x33\x19\x29" + + "\xDD\xA1\xF9\xFD\xF9\xF1\xA3\xB0\x3C\x9D\xF8\x1F\x5B\xDF\xF3\xB7\x7F\x18\x11\xFE\x31\xC1\x22\x8F\xBD\xB9\xF2\xBE\x3C\x92\x10\xED" + + "\x88\xF3\xA3\xA1\xFF\x00\x27\xD0\x99\xA1\x83\xBF\xE4\x44\x88\x21\xFE\xE7\x04\x92\x3F\x82\x3C\xEF\x5E\x3F\xC0\x5D\x0F\xF1\xBD\x7A" + + "\x00\x1B\xD0\x01\xE8\x3F\x7F\xBB\x7B\xDF\xA2\x30\x04\x5C\xF6\xEF\xFD\xBB\x7F\x5E\xF8\xB7\x43\x66\x9E\x3B\x45\xE2\x0E\xCB\x31\x05" + + "\x8B\x28\x60\x3B\xC6\xCF\x8E\xEF\xB1\xBF\xAD\xEC\x78\xDE\xFF\x00\xC8\x79\x18\x89\x23\x45\x1E\x51\xBB\x9C\x30\x6F\x93\x63\xFC\x02" + + "\x14\x15\x1E\x7C\x83\xE0\xFD\x0F\x07\xD1\x29\xAB\xD5\x12\xA9\x5E\xE0\xEE\xC0\x6C\x37\x76\xF4\x74\x08\x3D\xFD\xA3\x44\x68\x78\xD7" + + "\xF0\x77\xE8\x7D\xDA\x73\x23\xA4\xAD\xDC\x14\xFE\x31\x90\xC0\x49\xF5\xE4\x1F\xE0\x83\xE0\xF8\x6F\x3A\xD7\x83\xBF\x4E\xD1\xC9\x20" + + "\x16\x52\x0E\x2D\x62\x0F\xF4\xEF\x9C\x5B\xB7\x6E\x90\x20\x1E\x45\xFA\x46\xC3\x2C\x85\xD7\xEC\xAA\x96\xD3\x10\x00\x1A\x04\x8D\x0F" + + "\x04\x83\xF4\x36\x36\x36\x01\xF2\x0F\xA1\xDD\xFA\x20\x92\xA7\xBB\xEB\x5D\xC3\x5E\x37\xDA\x7C\x9F\xAD\x93\xB1\xAF\xF0\x7F\xCF\xA2" + + "\x12\xD5\x10\xA7\x70\xF2\xAC\xA7\xFD\x49\x34\x07\x93\xF4\x9B\xD8\x2C\xA4\x9F\xF1\xE0\x7D\x1F\x4C\xBE\x1D\x81\xAE\xC7\x6D\x6D\x64" + + "\xFC\x46\x99\x81\xF2\x07\xF2\x7C\x9E\xED\x6F\xF9\xF1\xE9\x4B\x15\x07\x6A\xDF\xD0\x5F\xE8\x39\x22\xF7\x20\x9B\xDC\x9E\x3D\xFA\x0D" + + "\x8A\x0D\xF6\x8B\x9F\xDF\x1C\x7F\xE7\x3C\xF4\xF6\xBC\xDD\xEA\xB1\xB2\xB0\x3B\x1E\x43\x12\xBE\x08\x3E\x0E\xBF\xE7\xC7\xD0\xF0\x77" + + "\xE3\x7E\xBE\xA1\x93\xE6\x61\x1C\xC5\x7C\x91\xBD\x68\x95\xDE\xC8\x1B\xD9\xD0\xF2\x49\xDF\x93\xFE\x09\xF4\xC2\x3A\xCC\x9D\xAD\x2B" + + "\x36\x8E\x87\xC9\xE4\x28\x3E\x0F\x80\xA0\x0F\x3A\xDF\x9D\x6F\xFE\xC4\xFA\x74\x87\x6D\xDB\x29\x69\x02\x78\x43\x1F\xE3\xB2\xDF\x60" + + "\x6B\x47\x5A\x03\xEC\x93\xAF\xF3\xBF\x08\x3B\x90\xFF\x00\x81\x41\x06\xF9\x00\x9E\xDC\x91\xCF\xAF\xB7\xAE\x3A\x0F\x29\x2C\x46\xD1" + + "\x9F\xAD\xFE\xC7\xB7\xD3\x8F\x6E\x88\xAD\xB7\x8A\x65\x45\x66\x91\x7F\xBA\x55\xFE\x77\xE7\xF2\x07\x5E\x7E\xBC\x85\xDE\x81\xFA\xF4" + + "\x45\xB2\x10\x6F\xFB\xDD\x4F\x6F\xD9\x56\x03\x5E\x3E\xF7\xFF\x00\xE7\xFF\x00\x3F\xE4\xFA\x1A\xB4\x88\x41\x30\x0D\xFC\xB0\x1F\x20" + + "\x56\xD0\xD7\xF7\x68\xA9\x23\xC6\xB5\xE4\xF8\x03\xC6\xBC\x36\x2A\xE4\x85\xF8\x9D\xF6\x08\x03\x7D\xE3\xC9\x03\x65\x94\x6F\xB4\x1F" + + "\xF3\xBD\x6C\x7F\x8D\xFA\x44\x92\x49\x26\xD9\x3F\x4C\x9F\x6E\x8C\x00\x1C\x7B\x0F\xB0\xE0\x74\x61\xE6\x56\xD9\x49\xFC\x80\x1B\x40" + + "\x77\x03\xF4\x47\x76\xC0\x1A\xD7\x80\x07\x8F\xA3\xBF\x1A\xF4\x83\x5C\x89\x3B\xBC\x68\x86\x4E\xE6\xD8\x0D\xB2\x76\x7C\x9D\x8D\x6B" + + "\xCF\x68\xF0\x4E\xFB\x7F\x93\xE9\xAA\x56\x98\x0F\x8C\xB2\x46\xAC\x09\xDA\xF8\x6D\x9F\xAF\x24\x83\xE0\x78\x07\x67\xCE\x87\xD7\xA6" + + "\xED\x0A\xA9\x60\x43\x77\xA8\x1A\x67\x60\x7E\xBF\xC6\x98\xEC\x9F\xF3\xE7\x5E\x47\xF8\xF4\x91\x0C\xD6\xC0\xFB\x11\xDF\xEF\xD1\x80" + + "\x1D\xCF\xE5\xF6\xF5\xFB\xFE\x5D\xFA\x21\x2D\xB8\xDD\x4B\x06\xDE\x80\x28\xAD\xA3\xBD\x7F\x3B\x07\xEC\x9D\x6D\x48\xFF\x00\x1F\x47" + + "\xB8\xFA\x4E\x4B\xBB\x55\x07\xB0\xF6\xF9\x0B\xA0\x75\xA3\xFC\x79\x60\x08\x5D\x80\x1B\xC6\xB5\xF5\xF7\xE8\x67\x64\x4D\xE1\x90\xAB" + + "\x68\xF6\x92\xC3\x4E\x40\x04\x68\xEF\x41\x41\xD9\xD7\x81\xFE\x77\xE0\x7A\xF1\xFB\x75\x29\xDC\x88\x5B\x43\xF2\xFC\xCA\x8D\xFF\x00" + + "\xF5\xFC\x9C\x03\xB1\xFC\x79\xF2\x47\xFC\x9F\x45\x24\x9E\x7B\x7A\xFD\x81\xFE\x9F\x9F\xA7\x46\x0A\xBD\xCF\xBE\x45\xB1\x7F\x5B\xDB" + + "\xDB\x9E\x7E\x96\xE8\x8A\x5D\xAD\xBD\x3F\xE6\xA0\x9D\x82\x81\x8F\x90\x7F\xC1\xD1\x07\x63\xC1\xF1\xF5\xB0\x47\xAF\x12\xDA\x81\x89" + + "\x08\x40\xD8\x1F\x89\x0A\xBD\x80\xFF\x00\xE4\x15\xD7\xF2\x3E\x8E\xFC\x7F\x3A\x15\xD8\xE8\x3B\x94\xB0\x5E\xE3\xB8\xD6\x31\xDD\xFC" + + "\x80\x15\x99\x87\x6E\xC8\xF3\xB0\x7C\x7D\xEF\xEB\xD2\x5F\x17\xC9\xB2\xBF\x28\xDF\x92\x09\x50\x4E\xBF\xDA\xDF\x88\x3A\x3A\xDF\x93" + + "\xFF\x00\x3B\xF2\x47\xA2\x92\x76\x9B\x00\x4F\x6B\x7D\x6F\x6E\xDF\xE7\xB7\x18\xE8\xC1\x14\xF7\x3C\x62\xD6\x39\xFD\xFD\x7E\x9D\x12" + + "\x36\xA1\x50\xC9\xF3\x23\x76\x9D\xED\x15\x08\x51\xFE\x0E\x9B\xCF\x9F\x3F\xFE\x06\xFC\x7A\x6B\x25\x8A\x6E\x59\x92\x48\x99\x94\x12" + + "\xCA\x54\x77\x7F\x3B\x20\x02\x48\xDF\xDE\xBE\x8F\xDF\xF3\xE8\x4C\xD4\xB5\xDC\xEC\x8E\x76\x4F\x88\xF7\xDA\x01\x04\x12\x7B\x46\xFB" + + "\x97\xFB\x76\x7F\x8F\x00\xF9\xF4\x8F\xC2\x51\x42\xF6\x4B\xDD\xB2\x7F\x2E\xD1\xE0\xFD\x00\x7E\xF4\x07\x8F\x3F\xF9\x3B\xF4\x87\x9A" + + "\xD7\x03\x60\xB9\xE0\x1B\xDC\x03\xF9\x73\xEA\x31\xD2\xAB\x14\x58\x26\x43\xDB\x00\x11\x63\x82\x73\x6F\xB5\xFE\xFD\xBA\x2E\xB6\x2B" + + "\x79\x2F\x24\x3A\xEC\xD7\xC7\xDB\xF9\x16\x3F\x47\xBC\x1F\xF2\x47\x8D\x77\x78\x3F\xC7\xA6\xE6\x6A\xE3\xB0\x76\xA1\x0B\xB2\x02\x2A" + + "\x30\x1F\x7E\x4E\xCE\xFC\x6F\xFC\x1F\xFB\x7A\x1C\x6B\xB9\x56\xED\x8D\xB4\x7F\x2E\xE0\xDD\xBD\xA4\x79\xD8\x60\x4E\xC0\xF3\xE0\x6F" + + "\xF8\xF1\xE3\xD3\x29\x43\xC6\x15\x07\xCB\x2F\x7B\x14\x2C\x8C\x0B\x81\xF6\x4B\xC9\xAE\xD5\x5D\x8F\xB2\x47\x9F\x03\xCF\xD0\x79\xAF" + + "\xFF\x00\x48\x17\x36\x3F\xF7\x11\x60\x46\x6F\x7C\x0B\x13\x9B\x02\x3D\x07\x4A\x88\x62\x00\x80\xD7\x20\x5E\xF7\x18\x03\xB9\xF6\xEF" + + "\xC8\xE8\xC4\xD3\x57\x3E\x65\x40\x80\x05\x2A\xEA\x15\x81\x3E\x3C\x1D\x68\x68\x80\x3C\x12\x0E\x89\xD0\xFA\xF4\xC5\x9E\x8B\x33\x77" + + "\x44\x27\x72\x76\xC1\x97\x40\x0F\x1A\x52\x09\x23\xFC\x9D\x0D\xFD\x81\xE9\x83\x53\x7D\xED\xE4\x78\xE4\x3A\x3D\xA6\x6D\x80\x9A\xF2" + + "\x42\xF6\x8D\x93\xF6\x7C\xFF\x00\xCE\xC1\xF0\x5B\x3C\x16\x0A\x11\x1C\xAA\xB1\xEC\x96\x60\x43\x3B\x6B\xEF\x47\x5A\xD7\x9D\x9F\x3F" + + "\x7F\xF8\xD1\x19\x88\x3F\x81\x56\xC4\x10\x36\x8C\x5A\xF6\x3D\xAF\xDF\x36\xEF\xD2\x8B\x02\x0B\x10\xE7\x8C\x66\xD6\x18\xB6\x40\xCD" + + "\xFD\x7D\x3E\x97\xE8\x84\x8F\x8C\x1B\x4D\x54\x52\x36\x59\x5E\x20\xCA\x3C\xF8\xD8\x07\x44\xEC\x7F\x07\xC1\x5D\xFF\x00\x3E\x50\x74" + + "\xA7\x24\x4C\x15\xA1\x5D\xA7\x82\x15\x50\x1F\xE4\xE8\x30\x24\x02\x7C\x6B\x5F\x5F\xF6\xF4\xC5\x20\x70\xBF\x1D\x68\x90\xAA\x90\x5E" + + "\x59\x13\x45\x89\x3B\x60\x3B\x76\x58\x8F\x3F\xCF\xF3\xAD\x93\xE7\xD3\x39\xAB\x21\xEE\x26\x19\x18\xFD\x99\x3E\x26\x20\xB0\xFB\x65" + + "\x2C\x7F\x00\x35\xE0\x8D\x7D\xFD\x01\xE9\x22\x49\x2D\x75\x16\x27\x03\x36\xCF\xA7\x3C\x1F\xA8\x1C\x76\xE8\x44\x0A\x08\x2B\x23\x03" + + "\xC5\xEC\x3D\xBB\x7A\x1B\xF7\x3D\xBA\x7A\xD1\xD4\xD2\xBF\x64\x2B\x12\x8D\x31\xEC\x7E\xE6\xD0\x3E\x7E\xB7\xAF\xE7\xBB\xB8\x00\x3C" + + "\x9D\x6B\xD3\x65\x4C\x77\xE4\xEE\x11\xF6\x74\xAE\x8D\x21\xF0\x01\x23\xF1\xDF\x80\x37\xB3\xA1\xA2\x7F\x83\xE7\xD3\x07\x81\x56\x41" + + "\xA9\xA5\x65\x8C\x02\x51\xCF\xE1\xB6\xF2\x43\x37\xE2\x00\x1E\x06\x80\x00\x7D\x9F\xBF\x2D\xE5\x82\x67\x1F\x20\x0C\x06\xF6\xAC\x8E" + + "\x4E\xB6\x37\xB2\x84\x7F\xFE\x3F\x91\xE7\xEF\xC8\x2F\xBE\xCE\x3F\x7C\x5A\xE4\x7E\xFB\x74\xAF\x94\xB6\x00\xBB\x70\x0E\x58\xDC\xD8" + + "\xDE\xF9\x36\xBF\xD4\x7A\xD8\x73\xD1\x47\x14\x08\x3F\xE9\x0E\xD5\x5D\xED\x1A\x40\x49\x27\x4B\xF6\x0A\x92\x0F\xF9\x3F\xCF\xD0\xF4" + + "\x89\xAB\x02\xA1\x51\xDA\x81\xC6\xDB\xE5\x91\xD9\x89\x20\xEC\x28\x3B\x1A\xD6\xC6\x8E\xFE\xFF\x00\x8F\x07\xD0\x8D\x4B\x18\xED\x36" + + "\x9C\x16\xF0\x12\x32\x4B\x12\xC4\xFF\x00\xB7\xB4\x7F\x00\x93\xA2\x35\xAD\x6F\x47\xD7\xC7\x59\x13\x6F\x24\x9D\xDB\x04\x02\xA4\x87" + + "\xDE\xB4\x08\x2C\x00\x07\xFC\x7E\x47\xFC\x8D\x9D\x1F\x45\x16\x1F\xEC\x51\x6C\x7A\x5B\x8F\x5F\x5E\xDF\x73\xD8\x92\x6F\x2C\x5A\xDB" + + "\x88\xC0\x00\xFF\x00\xB8\xE0\x66\xFE\xB7\xFA\xFB\xDF\xA7\x6D\x05\x45\xEE\x75\x91\xA1\xFB\xD3\x77\xB4\x7B\xFE\x34\x55\xC7\x92\x7F" + + "\xC9\xD1\xD9\xF1\xAF\x43\xE4\x6A\xA5\x8B\x9E\xE7\x93\xC0\xD8\x93\xE9\x4F\xFE\x0E\x8F\x8D\xE8\x0D\x79\xDE\xC6\xBD\x20\xCA\xEE\x00" + + "\x53\x2B\x81\xAF\xC1\x99\x88\x03\x7F\xFD\x80\x24\x36\x81\xF1\xA1\xBD\x7F\x8F\x3E\x99\xCA\x3F\x33\xB9\x5A\x20\xBB\xD0\x55\x71\xDA" + + "\x77\xE7\xF2\x6D\xA1\x07\xEF\xEB\x60\xEB\xCF\xD7\xA0\x24\x76\x03\xD7\xD6\xDD\xFE\x9F\x6B\x63\x3E\xFD\x72\xC6\x40\xB1\x62\x4F\xAD" + + "\x87\xFE\x2F\xDF\xDF\xA7\x32\x46\xBF\x1C\x8C\x6C\x3A\x47\xBD\x8F\xC8\x6C\x00\xDA\xD6\x81\xF1\xB3\xFC\xFE\x43\x5A\xFF\x00\x3E\x9B" + + "\xB0\x86\x25\xED\x8E\xCB\x10\xE8\xC3\xBB\x60\xA9\x24\x92\x4F\x8F\xB3\xE7\xF9\xFB\xFA\xDF\x92\x7D\x0F\x95\xA7\x63\xF8\x19\x3E\x30" + + "\x4F\x97\x66\x72\x4E\x88\x24\x6B\xE8\x7F\x1E\x76\x06\xB5\xFC\xEB\xD2\x07\xE5\x50\x5C\x92\x4E\xBE\xD1\xBB\x94\x0D\x1D\x29\x0E\xBA" + + "\xDE\xCF\xF0\x01\xD8\xFB\x23\x44\x76\xE5\xC5\xD7\xF5\xFF\x00\xC6\x38\xFD\xDF\x22\x63\xF7\xFC\xFF\x00\xA7\xF9\xFE\x9D\x4E\x0A\xF8" + + "\xF8\xC9\x04\x3A\x28\x0B\xD9\xA3\xDD\xB4\x61\xE4\x31\xED\x20\x10\x4F\xDF\x8F\x20\xF9\xD8\xFB\x76\x29\x82\x1A\x27\xD3\xAB\x33\x10" + + "\xA7\xFB\x94\x11\xF6\x83\x5D\xAC\x0F\xDE\x8B\x6F\xEF\x67\xC6\xBD\x7E\x8E\xE0\x87\x46\x58\xA2\x01\x94\x92\x7C\xF6\xE8\x6B\x5A\x25" + + "\x58\x80\x74\x08\x53\xE4\x90\x35\xFE\x02\x89\x71\xCA\xF7\x42\x1A\x45\x52\x58\x46\xC8\xBD\xEA\x4E\xB6\x01\xD9\x01\x7F\xFA\xFD\x6B" + + "\x7E\x47\xA9\x82\x30\x0B\x36\x38\xCD\xCF\xE2\xB7\xAF\x38\xFE\xE3\x3D\x44\x29\x24\x7A\x9C\x1E\x6D\x8F\xB5\xF3\x8E\x93\x6A\xB1\x3A" + + "\xAA\x30\x8D\x82\x78\x28\x43\x02\x47\x9D\x11\xF5\xDA\x41\xED\xEE\x07\x7B\xD9\xD7\xAF\x6B\x56\x16\x58\xD0\xC6\xEA\xAA\x4F\x6C\x8A" + + "\x5D\xF5\xE4\x1E\xD2\x3F\xC7\xF0\xA7\xC8\xF3\xA1\xF6\x0A\xB8\x4C\x81\x3A\x2C\x86\x3D\x30\xDA\x9D\xF7\x2F\x8F\xA3\xE4\xAE\xB7\xE7" + + "\xB7\x7F\x5B\xFF\x00\x1B\xF5\xFA\x4B\xD2\xB0\x31\xB0\xD8\x1F\x41\x62\x4E\xD9\x07\xDE\xC7\xE6\xA5\x59\x7C\xFD\x6C\x12\x7F\x9F\x3B" + + "\x38\x51\xCE\x0E\x07\x3F\x97\xDB\xE9\xFE\x3A\x38\x27\xD6\xDF\x43\xD2\x6B\x49\x63\x40\xE8\xFB\xD6\xF4\xBF\x19\x65\x2C\x34\x40\x7D" + + "\x05\x68\xF6\x36\x7E\x9F\x63\xE9\x88\x3E\x10\xEC\xA4\xED\x23\x88\x37\x26\xF4\xFD\x81\x8F\xD1\x1B\x3A\x50\x5B\x7F\x5F\xC7\xD0\x24" + + "\x6F\xC8\x0E\x56\xDC\x8C\xBD\xEB\x2B\x02\x0A\xA9\xFC\x64\x0A\x46\xFF\x00\xB1\x80\x20\x2B\x0F\xA2\x4F\xFC\x0F\x5F\xA6\x96\x52\x10" + + "\x31\x55\x60\x09\xF0\xAF\xFC\x91\xE4\xB8\x65\x03\xF9\x3D\xA4\xFF\x00\x1B\x07\xD1\xB9\xB8\xB7\xE6\x30\x7A\x10\x48\xE0\x91\xEE\x0D" + + "\xBF\xA7\xBE\x7A\x68\x21\xA9\xF9\x12\x87\x7D\xA0\x02\x22\x2F\xB0\x3F\x13\xB3\xAD\x9E\xDD\x83\xE4\xF8\xD9\x3F\x5A\xF4\xAA\xD6\x89" + + "\x36\x42\xF7\xA3\x0D\xED\x03\x12\x06\x8E\xC0\x8C\xFE\x3B\xDF\xDA\x82\x77\xFC\x0F\x1E\x5D\xAC\xDD\xA3\xB0\xA9\x0E\xC0\x68\x8E\xE4" + + "\x57\x1F\x40\x07\x3B\x4D\x81\xF5\xB6\x25\x87\xF3\xAF\x49\x4D\x29\x2A\x88\xB1\x33\x1E\xF0\x40\x78\xDB\x6A\x48\xF3\xB0\x3C\x10\x7C" + + "\xED\x97\xC7\x9D\x7D\x79\x1D\xC6\x3D\xBE\xDF\x9F\x45\x37\xED\x6F\xBF\xA7\x4D\xC5\x5A\xA5\xD4\x7C\x65\x77\xE1\x59\x91\xE3\x5F\xBF" + + "\x0C\x01\x45\xFC\xBE\xC9\x04\x8D\x9F\x3B\x1A\xF2\x8C\xB5\x62\x7E\xED\x94\xF9\x14\x90\xCA\x87\xCB\x2F\x9D\xFE\x2C\xBA\x04\xFD\xF9" + + "\x3F\xC9\xF3\xE7\x40\x91\x96\x60\x1A\x34\x84\x94\x51\xDD\xDB\xB7\x3A\x04\x79\xDA\x86\x6D\xFF\x00\x21\x75\xB2\x3C\x82\x3C\xFA\x1F" + + "\x2D\x86\x95\x47\x7A\x76\xFC\x7D\xDF\x1E\x84\x9D\xC7\xC6\x88\x60\x02\xB8\x3F\xF0\x47\x90\x3E\xFC\x6F\xD0\xF4\x9B\x6E\xEF\x81\xE9" + + "\xEB\xF9\x67\xF3\xC7\xBF\x1D\x03\x92\xBC\x48\xCF\xF1\xAF\xE4\x1B\x47\xB5\x7C\xF9\x3E\x3F\x15\x1E\x3C\xF8\x3A\x3A\xF3\xFF\x00\x9F" + + "\x4C\x3F\x66\x5A\x51\xDC\x5A\x44\x3E\x07\xE3\x23\xE8\xF8\xF0\xC0\x29\x54\xF0\x3B\x41\x1F\x7F\x63\xFC\x7A\xC8\x16\x79\x88\x24\x00" + + "\x54\xEF\xC7\x6E\xBB\x08\x3A\xDF\x70\xFC\xCE\x8F\xF7\x03\xE4\xFD\x9F\xBF\x5E\x0C\x9B\x4D\xB4\x12\x79\x21\x99\x86\xD5\x4E\xF6\x0B" + + "\xA9\x1E\x03\x0F\xF0\x0F\x9F\xBF\x23\x5B\x58\x3A\x2D\xBE\x53\x70\x2C\x4D\xEC\x6F\xDF\x83\x9F\xEA\x3D\xF3\xD1\x40\x27\x8F\xEA\x3A" + + "\xC7\x2E\x50\xF9\x59\x11\x22\x0A\xBD\xA1\x87\x7E\xD9\x00\xF2\x3C\x24\x80\xE8\x9D\x9D\xE8\x8D\x8D\x7F\x91\xE8\x54\x98\xBF\x8D\xB5" + + "\xF1\xED\xF4\x7B\x11\x62\x24\x7E\x3E\x40\x42\x09\xF1\xE7\x7E\x07\xE3\xFC\x83\xF7\xEB\x23\x92\x72\x59\xD5\xA2\x95\x91\x74\x7B\x66" + + "\x52\x02\xF9\xDE\xC3\xEC\x0F\xF9\xF1\xFF\x00\x9D\x6F\xC3\x2F\xDE\x4A\xA5\x8A\xA7\x77\x77\xD2\x37\x6F\x6F\x77\x9D\x04\x63\xDC\x4F" + + "\x8D\x1E\xDD\xEF\xFF\x00\xF8\x63\x28\x08\x02\xDE\xE0\x0B\xDF\xB5\xBD\x4D\xB2\x3F\x2B\xFE\x63\xA0\xE9\x05\xA9\x28\x8F\x45\x48\x62" + + "\xA0\x1F\x0C\xEB\xAD\xFF\x00\x6B\x7F\x6F\x69\xD7\xFB\x88\xF0\x7F\x9D\x7A\x47\xF6\x2A\x3B\x03\x33\x85\xD9\x07\x6A\x1D\x76\x4F\xD6" + + "\xFC\x30\xF1\xE0\x12\xE5\x86\xBC\x0F\x1E\x9F\xB5\x86\x31\xF9\x86\x52\xAE\x41\x1D\xDB\x00\x1D\x92\x35\xDC\x01\xD8\x6F\x00\x37\x68" + + "\x23\xC7\x83\xE9\x05\xB0\x36\x3E\x14\x2E\x5B\x64\xF6\x7E\x6A\x5B\xF9\x12\x2B\xF6\xF6\xB2\x90\x7E\x8F\xF9\xF1\xE3\x7E\x88\x4C\x65" + + "\x4E\x4E\xEE\x6E\x45\xCF\x61\x6F\x4B\x7A\x58\x8B\x0E\x46\x3A\xEC\xFA\x7E\xFF\x00\x7E\xDF\xA6\x7A\x74\xB5\xE2\x8D\x40\x58\x3E\x43" + + "\xBF\xE4\x17\x3F\xC6\x80\x2E\x5B\x5F\xCF\xF9\x1F\x5B\xDF\xAF\xAB\x5F\xCE\xBE\x29\x60\x04\x6F\xB3\xB1\x63\xD9\xFB\x20\x78\x6D\x06" + + "\x3F\x7E\x36\x7C\x11\xAD\xFA\xF7\xFB\xE9\xF4\x3B\x2A\xCA\xDA\x3E\x54\x49\xDA\xAD\xB0\x41\x07\x60\x78\x00\x1F\x0A\x58\x8F\x3D\xBE" + + "\xBD\xFE\xF6\x59\x40\x63\x10\x44\x1F\x81\x8D\x9C\x06\x0D\xA0\x48\x0C\xC0\x3A\x86\x27\x7A\x1B\xDE\x86\xF7\xBD\x04\xBA\xEE\x91\x7A" + + "\xF0\xB2\x81\x32\x2B\x6B\x7D\xA8\x8A\x4B\x06\x3E\x49\x0E\x18\x68\xFD\x9F\x20\x03\xE9\x84\xB5\x60\xD8\x29\x56\x55\x7E\xE3\xA6\x72" + + "\x08\x6D\x02\x06\xC2\xB9\x1F\x5F\xE0\x02\x3F\xC6\xC0\xF4\xFD\xED\x10\xBD\xA5\x1D\x4A\xEF\x67\xB8\x13\xF9\x6C\x0F\xCB\xB1\x91\x87" + + "\xFD\xB4\x7E\xBC\xEF\xCF\xA1\xB2\x4E\xDF\x26\x8C\x73\x4A\x47\x90\x44\xC8\xA7\xC0\x04\xE8\x12\xAC\x00\xF3\xB3\xE0\x0F\xF1\xE9\x26" + + "\x23\xDC\xDB\xB5\xAD\x6E\x31\x91\xC6\x7F\xA0\xEB\x87\xB1\xE7\xDC\x77\x17\xE7\x8E\xBE\x0C\x70\x1D\xCE\xCA\xE4\x85\x05\x7B\x40\xD7" + + "\xF0\x3B\x41\x1A\x3B\x1A\xFA\x3A\xD9\x1F\xF3\xBF\x5E\x3F\x6D\x1C\x80\x33\x06\x2C\x09\x21\x04\x5A\x25\x41\xF2\x1F\x67\xC7\x80\x08" + + "\x20\x0F\xBF\x1B\x27\x5E\x94\x5B\x65\x54\xB7\xC5\x20\x3F\x6A\x64\x25\xBE\x98\x92\x36\xCD\xD8\x3F\xE0\xF7\x6B\x5F\xC6\xB6\x3D\x27" + + "\x25\xA3\x31\xFC\x60\x9D\xBB\xB7\xA0\x03\x22\x05\xD6\xF4\x92\x2E\xA2\x3F\xF0\x7B\xB7\xB0\x35\xBF\x45\x25\x4F\x03\xD8\xF1\xE8\x3F" + + "\xF3\xDB\xBD\xFD\xBA\x35\x98\xE4\x9F\x5E\x4F\xD3\xDF\xBD\xFE\xE3\xEA\x2E\x8C\xD5\x6B\xB6\xD9\xFE\x78\x98\x37\xE3\xF8\x91\x19\xFF" + + "\x00\xEB\xF9\x2F\x80\x41\x24\x00\x4F\xD0\xED\x23\xCE\xFD\x34\x15\xD7\x7A\x62\xE4\xAF\x82\x5F\xBB\xE8\x8F\xF1\x1E\xFE\x8E\xF5\xB2" + + "\x0F\x8D\xEF\x67\xCB\x93\x61\xFB\x02\x88\x67\xD0\x63\xDF\xDD\x30\x94\x26\xBF\x93\x19\xDB\x37\x8F\xFF\x00\xD6\xC1\xDF\x92\x9F\xCC" + + "\x84\xAB\xFC\x32\x8E\xE1\xF7\xE2\x33\xE7\xF1\x1D\xC0\x13\xB5\x3E\x7E\x80\x3F\xC6\xF5\xE4\x81\xB6\x0F\xA7\x1E\xBF\xBC\xFF\x00\x9E" + + "\x07\x42\x37\x0B\x58\xE3\x8B\x5C\x1F\x4E\xD7\xFB\x76\xF4\xC5\xC7\x4D\x9A\xB9\x4D\x83\xB5\x01\x74\x48\x2C\x14\x2F\x9F\xA0\x77\xA2" + + "\x4E\xFC\x12\x74\xBF\xE4\xF9\xF4\x80\x85\x40\xFE\xE6\x50\x40\xF2\x49\x62\xDE\x40\xD8\xD1\xD0\xD9\xF1\xE3\xFC\xEC\x0F\xE0\xBF\x12" + + "\x22\xB6\xFB\x18\x38\xF3\xD9\xDC\x7B\xBC\x6C\x9E\xEE\xF0\x0B\x1F\xF0\x7C\x10\x00\xF0\x7C\xE9\x09\x2C\x46\xC4\x95\x5F\xC8\x82\x0F" + + "\x73\x9E\xF2\x7C\xF8\xD1\x5F\x1F\x44\x78\xFE\x7F\x8F\x3B\x00\x54\x13\x73\x63\xB7\x23\xDB\x8F\xD7\xFB\x7E\xA7\x05\xAF\x90\x2D\xED" + + "\xFF\x00\xDF\x43\xE4\x85\x08\x3A\x69\x09\xD8\xFC\x04\x8F\xBD\xFD\x68\x0D\xFE\x3F\xCF\x81\xBD\x79\xFB\xF4\x83\x42\xA3\xFB\xBE\x40" + + "\xC3\x67\xC4\x72\x14\x52\x36\x7B\x9D\xB4\xA0\x8D\x7F\x27\xC1\x3F\xE7\x63\xD3\xE6\x95\x89\x20\x56\x72\xC4\x1D\x32\x34\x48\x00\x1F" + + "\x47\x4E\xC0\x13\xF7\xE4\x0F\x3B\x1E\x77\xEB\xC3\x3B\xE9\x81\x8E\x72\xBD\xDF\x92\x90\x8E\x5B\x67\xCE\xF7\xDC\x3B\x7E\xF5\xDB\xB0" + + "\x3F\xE3\xC9\xF5\xD6\x17\x26\xD9\xE2\xF6\x3D\xED\xDF\xBF\x03\x8F\xEB\xD1\xEE\x7D\x78\xFF\x00\xEF\xFA\xF4\xC0\xC6\x9F\x91\x23\xE5" + + "\xFC\x40\x2E\x56\x42\x7F\xC8\x51\xFD\xDD\xDE\x3F\xC0\xFA\xFB\xFF\x00\x1E\x91\x94\x28\x55\xD2\x39\x1A\x1A\x0A\x8E\x5B\xE8\x0E\xD2" + + "\x14\x12\x08\xD9\xD1\xD1\xFA\xF2\xBF\x5E\x88\xBC\xDD\xE8\x9A\xAF\x2C\x63\xC0\xD4\x8C\x84\x12\x36\x7F\x20\xA4\x02\x35\xE7\xC7\xFC" + + "\x83\xAF\x3B\x42\x49\x62\x5D\xEE\x16\x55\xF2\x5D\xD1\x95\x4E\xC7\x8D\xE8\x38\x3D\xA0\x13\xBF\x04\x9F\xF9\xF4\x9B\x00\xD7\x03\xF1" + + "\x5B\x8B\x0E\x2E\x07\x07\x23\xFA\x70\x78\xC1\x1D\xCC\x4F\x26\xF7\x1C\x1E\xE3\x02\xD6\xFD\x2D\xD0\xF2\x91\x18\xD9\x3E\x32\xA3\x7D" + + "\xC4\x09\x26\x12\x13\xA0\x41\x62\x75\xA3\xFE\x3C\x8F\xA0\x4E\xC8\xD7\xA1\xD2\xB4\x71\x9F\x89\x65\x9B\xF2\x3D\xA5\x13\xE4\x91\x94" + + "\x6B\x64\x77\x82\xC3\xC7\xF1\xB0\x3E\x80\xFF\x00\xB1\xC6\x9A\x27\x0C\x17\xF7\x3D\xA5\x95\x83\x7C\x2C\x7B\x8F\x8D\x86\x04\x06\x60" + + "\x08\x1E\x7B\xB4\x06\xCE\x89\x1E\x10\x96\x78\xC3\xA2\x90\x42\x9F\xC4\x2C\x62\x30\x37\xFD\xCC\x48\x24\xB2\xF9\x3E\x41\xFA\xDF\x8D" + + "\x8F\x25\x13\x1E\x32\xEB\x8B\xFE\x99\x3C\xDA\xE0\x5F\x9F\x7F\x7C\x99\x64\x60\x4D\xC9\x3C\x5C\x7A\x9C\x0C\xE0\xF6\x16\xBF\x37\xFA" + + "\x9E\x83\xAC\x35\xF4\xBE\x25\x55\x0C\x0E\xD8\xB8\x32\x33\x78\xFF\x00\x50\xA8\x6D\x6F\x5A\x21\xB6\x35\xBF\x1E\x07\xAF\x0D\x14\x25" + + "\xBB\x0D\xB9\x93\xC6\xC2\x20\xD2\x86\xFF\x00\x20\xF6\x76\xFE\x3E\x40\xDF\xD7\xD9\xF3\xE8\xA3\xD9\x89\x55\x7B\x52\x52\xBE\x34\x63" + + "\x4E\xFD\x03\xBD\x86\x55\x65\x07\xFE\xED\xAF\x27\xC2\xF8\x03\xD2\x4F\x25\x7F\x05\xD6\x64\x04\xFE\x01\xC0\xD1\x07\xC7\x72\xA8\x3F" + + "\x5B\x3E\x76\x09\x3E\x48\xDE\xBD\x00\x4B\xE3\x04\x91\x71\x86\xB0\x38\xEF\x8E\x3E\x84\x0E\x79\xB8\xE8\xDE\x63\xE0\xE7\x6F\xA5\xC7" + + "\x6B\x72\x6D\x7E\x47\xD4\x8B\xD8\xF2\x48\x29\x44\x4B\xF8\xB3\xC8\xC5\x76\x3F\x29\x23\x6F\x04\xF9\xD9\x1F\x90\x63\xF5\xF5\xDD\xE7" + + "\xFC\x7A\x16\xE2\x15\x60\x7B\x95\xE4\x2C\xC3\xB1\x64\xF9\x08\xDF\xFC\x37\xD0\xD0\x25\xBF\x1F\x1B\xFF\x00\x03\xC6\x58\x16\x32\xA4" + + "\x77\x6B\xC1\x2A\xA2\x28\x9C\x8D\x79\xD9\x6F\xC5\xC1\x3F\x7B\xF0\x40\xDF\xF8\xDF\xA6\x93\x45\x12\xA9\xD4\x72\x34\x83\x6A\x0F\x6C" + + "\x6A\x01\x24\x0F\xB6\x23\xB9\x80\x3E\x00\x3A\x3E\x3F\x8F\xA1\xF2\x58\x8C\xED\xBD\xF0\x39\xEE\x05\xF0\x0F\x17\xCE\x31\xDF\xA5\x04" + + "\xEB\x9B\x82\x3B\x63\x38\xEF\x7E\x31\xF9\xFD\x3A\xC5\xDE\x35\x79\x08\x57\xF8\x74\xA1\x8F\x64\xF1\x8F\x24\x1F\xC9\xC0\x53\xB2\x36" + + "\x7E\xDB\xC8\xF2\x07\xF3\xE9\x26\xAB\x23\x1D\xB3\xC9\x20\x1B\x0A\xAF\xDA\xAB\xFC\x69\xBC\xFF\x00\x7F\xD8\xDF\x9F\x24\x01\xE3\x7E" + + "\x8E\xBC\x11\x00\xA8\xA4\x46\xC5\xF6\xE6\x5A\x83\x5A\xDF\x81\xDF\x1C\x81\x0B\x10\x77\xF9\x12\xDF\x5F\x5B\xF3\xF8\x57\x84\x82\x0A" + + "\x97\x6E\xED\x07\x88\x9E\xC0\xDE\x00\x2C\xAD\x22\x83\xF5\xF4\x3B\x87\x8F\xBF\x04\xFA\x4C\x42\x6E\x45\x85\xEE\x05\xAE\x3D\x85\xB9" + + "\x3E\xB7\x3D\xFF\x00\x2E\x8E\x6A\x00\x02\xC4\x91\x6B\x60\x0B\x0F\x63\x7B\x67\x1F\xE3\x07\xAC\x65\xE0\x74\x0D\xAB\x25\xA4\x20\x92" + + "\x0C\x71\x94\x00\xFF\x00\x00\x8E\xED\x6B\xEB\xEF\xC9\x07\x7F\xC8\xF4\xC8\xAB\x10\x55\x80\x90\x78\x20\x24\x71\x22\x92\x4E\xF4\x42" + + "\x91\xB6\xFF\x00\x3F\x7F\xC6\xF4\x00\x1E\xB2\x79\x71\xF5\x17\xC3\xC8\x76\x00\xEF\x56\x57\x28\x46\x89\xD8\x03\xB8\x7D\x1D\x8D\x92" + + "\x37\xB0\x76\x75\xE9\xAA\xD0\xAA\xAC\x8C\xA6\x02\x06\xCA\xF6\x86\x52\x0E\xBF\x98\x82\x7F\x23\xEF\x5A\x3A\xD6\x87\xA4\xCA\x93\x7D" + + "\xD6\xBF\xB7\x62\x31\xFE\x2F\xEB\xF9\x74\x53\x50\xB7\x3F\x8B\xEB\x61\xDB\x8E\xFD\x4C\x6B\x58\xE0\x6B\x13\x1A\x86\x54\x00\xE9\x1C" + + "\x82\x7C\xEC\x1D\xBB\xB1\xFA\xD1\x0A\x7F\x83\xFF\x00\x9F\x49\x52\xA9\x00\x8C\x7C\x95\xB4\xDB\x25\x5C\xB2\xED\x3C\x9D\x94\x90\x17" + + "\x2C\x09\xD1\x28\x40\x03\x7B\xED\xFE\x7D\x3E\x86\x75\x09\xA6\x9A\xBB\x6C\x78\xF0\xC8\x18\xEB\x60\x13\xBD\x0D\xE8\x78\x5F\x2A\x41" + + "\xDE\x80\xF4\xA7\xFA\x2C\xDF\x22\x3C\x44\xE8\x10\xBE\x24\x64\x27\x5B\xDE\xDB\xBB\xB7\x5F\x40\x85\x3E\x09\x3F\x5E\xA6\x4B\x29\x16" + + "\x36\xB5\xEF\x62\x38\x3F\x97\xEF\xB7\x51\xCA\x1B\x95\xBF\xD7\x8C\x63\xFA\xDC\x63\xBF\x5E\xE3\xA6\x03\x89\xBE\x38\xC0\x65\xF8\xD9" + + "\xBB\x90\x92\x0E\xFF\x00\x26\x00\xA8\x6F\xB1\xAD\x69\x81\xF1\xAD\x6C\x8F\x4B\x56\x24\x0C\xB0\x16\x24\x7E\x5F\x1B\x7E\x45\x76\xDF" + + "\x98\x1F\x2B\x10\x14\x9D\x81\xA7\x3A\xF1\xFC\x68\x9F\x0A\xFA\x66\x5E\xE4\xEF\x0D\xF8\xF7\x28\x1B\x03\xE8\xAF\xE6\x41\x03\x67\xCA" + + "\x81\xBF\x07\x5B\x1B\x2E\x3B\xD1\x89\x57\x28\x5C\x21\xED\x90\xD8\x28\xC5\x81\x24\x85\xEC\x54\x52\x46\xBC\x6C\x9D\x7F\x1F\xE7\xD1" + + "\x94\xAF\x02\xDF\x6B\x63\x23\x3F\xDB\xA1\x01\xCF\xAF\xA6\x4D\xBF\x7F\x51\xD3\x61\x54\x77\x4A\xCA\x9D\xAF\xBF\xF5\x63\x32\x3B\xF7" + + "\x80\x3C\xF6\xA1\x07\xEC\x79\xD8\x52\xBB\x1A\x1F\x7E\xBD\x7C\x3A\xF3\xA0\x9F\x7D\xA4\xE9\x5B\xC8\x1B\x00\x30\x57\x52\x01\x00\xA8" + + "\x52\x3F\xC1\x1E\x40\x54\x3A\x16\x0C\xE7\xBD\x93\xB4\xAB\xA0\x04\x9F\xC4\x6F\xB9\xF6\x4B\x11\xBF\x3B\xDF\xD9\x1A\x04\xEB\xD7\xA1" + + "\x62\x08\xC3\x1E\xF1\xF9\xB7\x64\x85\x18\xB3\xA9\xD1\x3B\x64\xED\x20\x6F\xC8\x00\xA8\x27\xCF\x9F\xE7\xD7\x7E\xCF\xD3\xF2\x36\xFD" + + "\xFD\xF8\x6F\x04\x73\xF9\xFD\x2F\x9C\xF3\xFD\x78\xE9\xBF\xED\x66\x70\xA5\x08\x75\x5F\x20\xCC\xA4\x2F\x92\x3F\xB8\xB2\x93\xE0\xFF" + + "\x00\x20\x0F\xC4\x6C\x02\x48\xDA\xE6\x9B\x9D\x38\x23\xB8\xA9\x56\x63\xA6\x00\xFF\x00\xFB\x05\x55\x47\x69\x3F\xCE\x8B\x83\xAD\x8F" + + "\x04\xFA\x48\xCF\x06\xC7\x6D\xB0\xC0\x69\x46\xF5\x1B\x20\x23\x44\x68\xFF\x00\x70\x1F\x5F\x89\xDE\xBF\x8F\x03\xD7\xA4\x78\xC1\xFF" + + "\x00\xE4\x59\x01\xDB\x76\xA2\x85\x21\xBE\xBF\x25\x0C\x9E\x3F\xC1\x2A\x77\xAF\x24\x9F\xB5\x2F\x19\x02\xCA\x41\xC0\xCB\x58\x5F\xD4" + + "\xDE\xE6\xDC\xDF\x18\x1E\x97\xEB\x8E\xF1\x93\x7F\xEA\x3F\xC0\xEB\xCF\xED\x3B\x9F\xCB\x42\xE4\x0E\xED\x0D\xAC\xDE\x7F\xE0\x6D\x8F" + + "\xF1\xB1\xFF\x00\xE0\x03\xAF\x4D\xDA\x14\x25\xCA\x04\x20\x12\x3B\x95\x9C\x30\x23\x40\xAB\x06\xDF\xE5\xB3\xE0\x95\x00\xEB\x47\x5A" + + "\xDF\xA7\x87\xE3\x52\x4F\x77\x6A\x9D\xFC\x72\x46\x9D\xCA\xA5\x87\xF2\x41\x2E\x9F\x43\xC3\x2F\x68\x23\xC1\x3B\xF5\xF5\x48\x07\xBF" + + "\xBF\x6F\xAE\xD5\x56\x2A\x77\xFC\x92\xDD\xA3\x7D\xAD\xE4\x6C\x85\xF2\x76\x7F\x9F\x4A\x04\x88\x8C\xB5\xB3\xDD\x87\xA0\xBF\x61\xDF" + + "\x1F\xA8\xB7\x62\x92\x4E\x4F\xEF\x81\xFE\x3F\x4E\x98\x4F\x56\x39\x95\x43\x45\xB6\x09\xDA\x7F\x38\xC4\xAC\xA4\x7F\x69\x04\xAB\x1D" + + "\x9F\x3F\x8F\xD0\xD9\x07\xCE\xFD\x31\x7A\x6B\x1A\x69\x4A\x15\x0E\x01\x86\x57\x28\xE1\x49\xFA\x2C\x3B\xB6\x06\xFC\x11\xDB\xE0\x8F" + + "\xC8\x6B\xD1\x19\x62\x8F\xB9\xBE\x68\xC8\xDF\x77\x97\x96\x09\x1D\x7C\x82\x3E\x32\x09\x7D\x0F\xB0\x06\x8A\xF8\xFC\x77\xBD\x24\xBB" + + "\x64\x62\x59\xA6\x44\x2A\x10\x86\x5E\xE0\x37\xFF\x00\x0A\x7B\xBB\x7C\xFF\x00\x78\x04\x8F\x20\x79\x1E\xB8\x24\x37\xE6\xFE\x99\xC7" + + "\x61\xCF\x7F\x5E\x78\x3D\xC0\xC0\x74\x1E\x68\x03\xA7\x67\xC4\xA1\x7E\x8B\xB0\x13\x01\xE7\x63\x4C\x36\xC4\x78\xF0\x4B\x0D\x79\xFF" + + "\x00\xB7\xA6\x0B\x48\x8D\xAA\xB4\x1D\xA4\x78\x0D\xDE\x08\x70\x49\xD7\x77\xE4\xAB\xE0\xF8\x20\x29\x27\x63\xCE\xFD\x1A\x78\xA1\xD3" + + "\x10\x25\x56\xD0\x2A\x7B\xD0\x47\x27\x9D\x80\x50\x10\x3B\xB4\x7C\xF6\x8F\xE0\x7A\x69\xF1\xB9\x95\x51\x64\x6E\xC7\xD8\x24\x48\xBA" + + "\xFA\xEE\x0A\xDD\xFB\x1A\xD8\x20\x10\x0E\xC6\xFF\x00\x8F\x42\xC1\x08\x23\x00\x8E\xE0\xAA\x82\x45\xB9\xB5\xED\x93\xC1\x1F\x97\x5D" + + "\xD7\x98\xF1\xC7\xB4\x77\xB2\x30\x70\x40\x8E\x42\x04\x64\x7F\x05\x58\xED\x86\xC1\x1F\xED\xFB\xDF\xFC\xFA\x19\x63\x18\x11\x8B\xA1" + + "\xF8\x5C\x93\xDD\xD8\xA0\x06\x00\x8F\xED\x21\x41\x60\x3C\x9D\xEB\x47\x43\xE8\xEC\x7A\x2C\x2B\x91\x2A\x0E\xF6\xED\xD6\x98\x69\x64" + + "\x42\x1C\x68\xA9\x8D\x54\x32\xE9\x87\xD8\x04\x11\xB3\xFC\x7A\x46\xC2\xBA\x95\x09\x28\x52\x80\xF7\x04\x56\x11\x01\xF5\xAD\x90\x42" + + "\x90\x36\x48\x04\x1D\x7F\xE3\x65\x8D\x52\xC4\xB5\x89\x26\xC0\x5C\x60\x10\x33\x63\xDF\x3E\xFD\xAC\x3A\xEE\x99\xC7\x51\x15\x7C\x99" + + "\xDF\xB8\x99\x00\x1F\x1E\xFE\xB4\x34\xA3\xFD\x4E\xD2\x7C\xEC\xB0\xDF\x8F\xE3\xD2\x86\x30\xC3\xBF\xE3\x46\xD9\x04\x49\x61\x97\x6B" + + "\xF9\x6B\xCA\xB6\xFB\x75\xE4\x0F\x00\x6F\xC1\x3F\x7E\xBC\xAD\x77\x32\x17\x5B\xAC\xCC\x06\xCC\x7D\x8B\xB6\x0C\x3F\xB5\x5F\xB8\x6C" + + "\x29\x03\x5A\xDE\xCF\x82\x0E\xFD\x2B\xB6\x60\x00\x78\xC3\xAA\x80\xDE\x40\x98\x03\xBF\x27\xE4\x1A\xDE\xC6\xFC\x1F\xBF\x3F\xF2\x49" + + "\x22\x05\x37\x52\x0A\x9F\x42\x0D\xB8\xF7\xBD\xB3\xCF\xD2\xE6\xE7\xAE\xE9\x26\xAE\x59\x5B\x69\x10\x1A\xFC\x64\x89\xD5\x0A\x93\xAD" + + "\x37\x6A\x9E\xC3\xE7\xFE\xDB\xFF\x00\x1A\xF0\x07\x34\x52\x46\xCC\x1F\xB4\x83\xE7\x69\xD8\x0B\xEF\x63\x52\x7E\x24\x12\x77\xE7\x44" + + "\x8D\x6F\x7A\x3B\xF4\xF6\x5F\x98\xB1\x06\x60\xC4\xE8\xE9\xAB\x95\x6F\x07\x40\x86\xEE\x1E\x47\x9E\xEF\xA5\xD9\xFE\x77\xAF\x48\x3B" + + "\x30\x0F\xDF\x33\x7D\x01\xAD\xF6\x01\xAD\x6B\xB8\x16\xFC\x87\xF8\x23\xEC\x00\x75\xAF\xB4\xCD\x87\xFE\x7A\xEE\x99\x98\x50\x80\x7E" + + "\x1F\x3B\xF1\xF3\x16\x09\xBF\x23\x5A\x53\xAD\x68\x91\xE5\x7B\x4F\xD0\xFF\x00\x3E\x91\x2A\x3C\x05\xF8\x1C\x2F\xF7\xA4\x0C\xED\x20" + + "\x03\x63\xC2\x90\x34\x3E\xC1\xD8\x1F\xC1\xD9\xF4\xB1\xF9\x44\x8D\xB6\xF0\x00\xF3\xBF\xC0\x2E\xB7\xDD\xE5\x54\x82\x3C\xF9\x56\x3B" + + "\xFE\x14\x9F\x5F\x18\x3B\xC6\xFD\x80\x68\xFF\x00\x71\x12\xB7\xF6\x9F\xB2\x3F\x25\x00\x93\xBF\xE7\x7A\xFA\x3F\x7E\x80\x80\x4E\x40" + + "\xBF\xF8\xFD\xFF\x00\x9E\xBB\xA6\xCB\x5A\x40\x0B\x47\xD8\xAC\x3B\xB6\x64\xED\x24\x8F\xAF\x3F\x89\x27\x5E\x75\xB6\x1F\xC1\xF4\x99" + + "\x40\x09\xDA\x23\x3B\x01\xDA\xA4\xE8\xF8\xD7\x95\x2D\xA8\xFE\x81\x27\x44\xEC\x7F\xCE\xF4\xB2\xC0\xDB\x06\x22\x76\x46\xBF\x25\x62" + + "\xDA\x07\xFB\x84\xA5\x8E\x80\x3A\xD8\xD9\x07\xF9\xF4\x83\x34\xA8\x7B\x64\xEE\x91\x36\x43\x27\x69\xDA\x32\xFF\x00\x3D\xC1\xC1\xD7" + + "\x8F\xE3\x7E\x4F\xD1\x1E\xBB\x6A\x8E\xC3\xEF\xEF\x61\xFD\x87\x5D\xD3\x67\x50\xA7\xCC\x11\x27\xF7\x29\x2C\x80\xA6\x87\xD9\x32\x2B" + + "\x04\x3E\x75\xE0\x79\xF2\x4F\xDF\xA4\x59\x1D\xD3\xB1\x23\x89\x87\x70\xDB\x2E\xD8\xAE\xFC\x9F\xC0\x6C\xF6\xEB\xC8\x3B\xFF\x00\x8F" + + "\xFB\xB9\xF9\x18\x9D\xA7\x78\xD3\xF9\x01\xD8\x10\x06\xB7\xF8\x1F\x1F\x5E\x08\x1E\x49\xD7\xF3\xE9\x19\x25\x27\x5D\xD2\x34\x64\x37" + + "\x80\xCA\x54\xEB\x7A\xDE\xD4\x8D\xF8\xD0\x01\x8E\xCE\xBF\xE7\x7E\x80\x80\x45\xB8\x07\xD3\x1E\x9F\x6F\x4E\xBA\xFD\xFD\x3F\xB7\x43" + + "\xA6\x81\x40\x03\xE3\x85\xB6\x74\x09\x42\x24\x5D\x11\xB0\xCA\xA3\x7B\x3E\x4E\x89\x5F\xF2\x7F\xCF\xA4\xDA\x05\x52\x24\x78\x91\xF5" + + "\xA1\xB0\x4A\x1D\x11\xE0\x22\x0E\xF6\x24\x12\x76\x09\xDF\xFC\x0F\xAF\x4E\x5E\x52\xA7\x48\xCC\x49\x24\x07\x55\xDF\xF0\x7F\xBF\xF2" + + "\x27\x67\xFF\x00\xE5\x61\xF5\xBF\x1F\x4D\xBB\xE6\x0C\x00\xF8\xC9\x3A\x01\x0B\xBA\xEB\xEF\x6F\xA2\xAB\xF4\x77\xB2\x3E\xFC\x01\xE0" + + "\xEF\xD2\x44\x5B\xDF\xB5\xFE\xA0\x1B\x1E\xDC\x64\x7B\x1E\x8E\x37\xF6\xBF\xAE\x78\xFD\x7F\x67\xAF\x8F\x55\x59\x0B\x18\x24\x60\x06" + + "\xC2\x80\x5D\x74\x49\x24\x1E\xF0\xCD\xB2\x08\xEE\xF0\x00\x04\x81\xAD\x7A\x68\xD5\x97\xB4\x6D\x42\x3E\xFC\x92\x63\x61\x18\x1A\x0A" + + "\x00\xD0\x24\x8F\x01\x75\xBF\x3F\xC6\x87\xA7\xE6\xC4\xA1\x48\x76\x50\x48\x61\xBD\xC8\x41\x7D\x90\x48\x21\xCE\xF7\xA2\x00\xD1\xFA" + + "\x3F\x67\xED\xA7\xEE\x18\x1D\x2A\x02\xC0\xE9\xE4\x76\x72\x08\xFA\x00\x6D\xBC\x92\x7E\xF7\xAF\xF8\xF3\xA1\xE8\x18\x29\x00\x5A\xFE" + + "\xB7\xB6\x78\x3F\xDB\x8F\x6F\xAF\x46\x05\xFD\x32\x0F\x7C\x5B\x8F\xA7\xD7\xBF\xD0\x63\xA6\xEF\x00\x20\x7C\x71\x86\xDE\xC7\xCF\x27" + + "\xCA\xFE\x47\x8D\xF6\x29\x0A\x07\x9D\xEF\x6A\x3F\x8F\x23\xD3\x56\xAC\xCB\xDE\x11\x21\x0D\xFE\xF2\x62\x5E\xDF\x3A\xEE\x2F\xA6\xF2" + + "\x08\x24\x80\x4F\xDF\xDE\xF7\xE9\xF8\x76\x05\x89\x8D\x51\x4A\x92\x58\x21\x3B\x07\xC9\xD3\xB3\x22\x8D\x0F\xE7\xCF\xF0\x06\xFC\x7A" + + "\x6F\xF3\x10\x42\x89\x03\x46\x07\x8E\xF8\xC1\x56\x24\x92\x4B\x29\x24\x1D\xFF\x00\x1E\x08\xFE\x74\x3C\x6C\x36\xAB\x15\xB8\xE0\xE3" + + "\x93\x62\x70\x3E\xDC\x5F\x9F\x5E\xDD\x18\x16\x17\xCE\x31\xC5\xC1\x36\xB6\x6C\x2F\xEF\xF7\xE9\x91\x8D\xFB\x19\x11\xA0\x42\x00\x00" + + "\x80\x8A\x1B\x5F\x5A\x45\x6D\xAA\xA9\xD0\xD0\x20\xEB\xEF\xFC\x7A\x6E\xF0\xB3\x13\xDC\x23\x71\xE0\x16\x4B\x8E\x83\xF9\xF1\xDA\x13" + + "\xC6\xFC\x83\xB7\x03\xC7\xD1\xFB\xF4\xFD\xAC\x32\xF7\x28\xDA\x86\xF0\x18\x46\x8C\xCC\x4F\x77\x72\x94\x55\x25\x7F\xC1\x25\x47\xE2" + + "\x47\xA4\x0C\xFA\xF0\x7E\x2D\x01\xA0\xAA\xC9\xDC\xC7\x60\x00\xC0\xF9\xD3\x13\xF6\x48\xD7\x8F\x00\xFD\x9A\xC0\x1B\x1F\xA5\xFB\x0C" + + "\x8F\xBF\xAF\x6E\xBB\x3C\x8B\x5B\xEF\x9F\xD3\x1F\xAF\xDB\xA6\x7F\x10\x1F\x8F\xED\x87\xD9\xDA\x87\x0F\xBF\x2A\x49\xEE\x94\x44\x41" + + "\x3A\x1A\x3F\x5F\x5A\xFE\x4F\xA4\xE4\x89\x8F\xE2\xB1\xB6\x80\xD1\xF9\x18\xF6\xC6\x35\xE0\x05\x5D\x8F\xFC\xF7\x1F\xAD\x82\x3E\xFD" + + "\x3B\x7B\x11\x90\x43\x04\x25\xFC\x69\x87\x78\xF0\x49\x20\x69\x0F\x90\x77\xAD\x1F\xBD\x10\x4F\xAF\x06\x55\x20\xB0\x12\x10\x3F\xDA" + + "\xA8\x02\x8F\x00\x02\x48\xD3\x0D\x03\xB1\xB2\x37\xF5\xF5\xAF\x5C\x40\xC8\xBF\xDF\xF2\xF4\xC8\xB7\xEA\x3F\x5E\xCF\xA0\x1E\xC7\xEB" + + "\xEB\xF4\xF6\xC1\xFB\xF4\x3E\x58\xBB\x01\x00\x7C\x91\x81\xB2\x35\x24\x83\xFE\x00\x0E\x18\x10\x3C\x6C\x12\x3B\x74\x48\x6D\x6F\xD3" + + "\x0F\x8D\x89\x2E\x23\x46\xD0\xF0\x18\xBA\x00\x57\xCF\xE0\x54\xC8\xAB\xAD\xF9\x0C\x01\xD8\xF1\xBD\xFA\x2E\x65\x13\x6F\x72\x7C\x68" + + "\xA5\x88\x05\x18\x77\x01\xE3\xFF\x00\x95\x46\x80\xD9\x1E\x0E\xCF\xD1\x1A\x1E\x99\x3B\xD7\x69\x3F\x16\x2C\x42\xED\x83\x36\xFB\x3E" + + "\xCE\xC1\x00\x36\x88\x00\x68\xF8\xF2\x40\xDE\xBD\x11\x80\xFC\xC8\xBD\xCF\xA7\xD6\xE3\xB7\xDF\xA1\x07\xE9\xFD\x7F\x2B\x8F\xF1\xD0" + + "\xB2\xB2\x9E\xF2\x54\x00\x48\x42\xC7\xB2\x45\xFB\x3E\x02\xF6\x0D\x83\xFE\x5B\xC8\x1E\x47\x8D\x7A\x6F\x3C\x4D\x09\xD2\xC6\xAC\xFA" + + "\xFA\x59\x91\x08\x07\xC8\x64\x05\x08\x3B\xD7\x9E\xE0\x07\x9E\xDD\xF9\x1B\x27\x2C\x91\x90\x54\x22\x6B\xC3\x00\xAA\x8D\x28\xD7\xFB" + + "\xBF\xDD\x20\x52\xDF\xC6\xBE\x8F\xFE\x3D\x31\x91\x63\xD1\x21\x87\xE5\xAE\xF7\x52\xC5\xBC\x91\xE3\xF2\x49\x36\x35\xBD\x0D\x28\x07" + + "\xC7\xDF\x82\x88\x88\x31\x26\xF6\x18\xCF\x72\x6C\x06\x45\x85\xAD\x6F\x4C\x82\x38\xB5\xBA\x1B\xFD\x3F\x7F\x4E\xA6\xBA\x52\xA2\x3B" + + "\x03\xB4\x0A\x80\x12\x5D\xCE\xC1\x27\x7A\x60\xCC\x77\xAD\x12\x01\x53\xB2\x77\xF7\xFC\x3C\x8F\x11\x46\x4D\x38\x58\x81\x0B\xA0\x47" + + "\x77\x7E\xF4\x7B\x76\xDB\x04\x82\x09\x23\xEF\xEF\x7F\xE4\xFA\x0F\x04\x52\x47\xA7\x90\x4C\x4E\x80\x0A\xC9\xB2\x57\xC1\x05\x15\x58" + + "\xE8\x0D\xFF\x00\x9F\x1F\x64\x82\x01\x0F\x15\x59\x90\xB1\xF9\xD1\x4E\xFF\x00\x18\x84\xDD\xC7\xEC\x02\xBD\x84\x90\x46\x87\x8D\x1F" + + "\xA1\xDD\xE3\xD3\xC0\x01\x39\x45\x16\xEE\xC2\xE4\x64\x13\x92\x2F\xEE\x07\xDF\xA4\x01\x3C\x06\x22\xF6\xE0\x9B\x1E\x00\xC6\x38\xFE" + + "\xD8\xE9\xDA\xE2\xA1\x0F\x13\x77\x23\x21\x6E\xC7\x59\x00\x2D\xE0\xF8\x62\xDF\xC8\x03\xC8\xF2\x36\x7E\xC1\xF5\xF4\x62\x6A\x12\xC9" + + "\x1C\xAA\xD2\x23\x77\x0D\xAE\x8A\x31\x24\x10\x06\x87\x7A\x90\x34\x3C\x30\x3A\x1A\x23\xEB\xD3\x15\x82\x42\xC8\xEA\xD3\x2C\xA7\x6A" + + "\xA2\xC3\xCD\xE7\xB7\xEC\x88\xCF\x80\xC4\x79\xD9\xF2\x40\x6F\xBD\xFA\x54\x43\x69\x48\x69\x1D\x80\xD1\x0C\x10\xC9\xDC\x4F\xD8\xD1" + + "\x1B\xDF\xF1\xBD\x0F\x1B\x3B\xFA\xF4\x75\x20\x1B\xEC\x18\xF5\x18\x3C\x7F\x5F\x71\xFA\x8E\x8D\x63\xFF\x00\x5F\xFF\x00\xE8\xF7\xB7" + + "\xEF\xF2\xFB\x3D\x6C\x6C\x11\x2A\xFC\xAD\xDB\xDD\xB5\x05\x4E\x80\x60\x36\x09\xD0\x1D\xA3\x5E\x3F\xC1\x3E\x36\x0E\xBD\x26\xF8\xEA" + + "\xAB\x2A\x3B\x37\x69\x2B\xA5\x20\xFC\x89\x23\x00\x46\xD8\x13\xDA\x58\x01\xB2\x49\x04\x8D\x6F\x7E\x3D\x24\xB2\xD9\x9C\x38\xDB\x95" + + "\x89\x8A\x76\x30\x2F\xDC\xDE\x7C\xED\xB4\xCB\xBD\x82\x36\x37\xF4\x0E\xC6\xCF\xAF\x51\x9B\x11\xA3\x68\x4F\x3F\x70\x21\xA3\x72\x76" + + "\x76\x47\xE2\xAA\x57\xB7\xFF\x00\x07\xCF\xFD\xBD\x2B\xBD\x71\xF2\x28\xCE\x4D\x8F\xB5\xFF\x00\x4B\x7D\xCD\xF9\xC9\x0B\x35\xBF\x17" + + "\xDB\x76\x7F\xC7\x71\xDF\xBF\x4E\x13\x0F\x52\x45\x0E\x8E\x8D\xFC\x1E\xC8\xD1\x07\x70\x1E\x36\xA4\x9E\xD2\x7F\x9D\xF8\xF3\xB3\xF6" + + "\x7D\x20\xB8\x9A\xE4\x49\xDE\xB2\x09\x14\xB0\xED\x6D\x79\x5F\x3A\x75\x64\xED\x1A\x3B\xF0\x36\x08\x3F\xE7\x5E\x92\x92\xCC\x91\x23" + + "\x4D\x14\x93\xC2\x14\xFE\x71\xC8\x8E\xDD\xBD\xA7\xC9\x65\xEC\xEE\x03\xCE\x81\x07\xB7\x5F\x5E\x3C\x95\xE2\xBE\xF2\x9D\x0E\xE9\x11" + + "\xC6\x8C\x88\xED\xF8\xEC\x6B\xF2\x05\x01\x1B\xDF\x81\xFC\x1F\xE3\xCF\xA1\x12\x25\x80\x28\x2F\x8E\x30\x3D\xFE\xE4\x7F\x6B\xF1\xD0" + + "\x7C\xD8\xC9\xCF\xBE\x3F\x3E\x3F\x2E\xBE\x7F\x4A\x8C\xC6\x5D\xA5\x11\xA6\x8F\x68\xD8\x6F\xF9\x25\x8B\x82\xC7\x47\x7A\xD1\x03\xCE" + + "\xB7\xF5\xE9\x09\x71\x70\xB0\x50\xEC\x8E\x54\x02\xB2\x26\xFB\x89\x23\xC6\xD9\x5F\xE8\xFF\x00\x2A\x76\x3C\x9F\x1B\x03\xD3\x98\xD6" + + "\x54\xEF\xEF\xB0\xD2\x44\x7C\x88\xE4\x07\x68\xAD\xE3\x5B\x0A\x43\xEB\xE8\x81\xA3\xA3\xE7\xEB\x45\x18\x02\x8E\xF6\x0C\x14\x9D\xAB" + + "\x46\xB2\x30\x41\xDB\xE1\x4A\xA7\x6A\x94\xD8\xD7\xE2\x06\xB7\xFF\x00\x3A\xD1\x89\x8C\x8B\xED\x00\xF6\x04\x91\x7B\x5A\xFC\x7D\x7D" + + "\x6F\x70\x7D\xFA\x0B\x9F\x53\xF9\xFE\x9D\x35\x5C\x7A\xA0\x55\x69\xB4\x7B\xCF\x8D\x07\x1F\xE1\x01\x3F\x91\x50\xDE\x34\x58\x83\xB6" + + "\x5F\x3B\x07\x6D\x6C\x63\x55\x5C\x38\x68\xC7\xC8\x3B\x65\x1D\xF2\x2B\x32\xE8\x9F\xC5\x55\x8A\x6F\x7B\x23\x60\x6C\x9F\xB1\xE9\xC5" + + "\x86\x9A\x02\xF2\x23\x3C\xAD\xA5\x05\x40\x3B\xF0\x76\x3F\xB5\x19\x88\xDF\xD6\x83\x1F\xE4\x0D\xFA\x6F\x2A\xD8\x9E\x3F\x99\x18\x82" + + "\x01\x25\x58\xC8\xAD\xAD\x0D\x0F\x28\xA4\x11\xA3\xFC\x6B\xEB\xCF\x9D\x94\xD5\x82\xF2\x81\xB9\xC9\xCE\x6E\x3F\x41\xE9\xDE\xF7\xE8" + + "\x3A\x15\x36\x3C\x2B\x00\xEC\xC2\x28\xC1\x21\xE5\xFC\x86\x81\xF0\x4B\x2B\x20\x52\xBA\xF0\x48\x27\xFC\x9D\x7D\x79\x18\xE2\xEB\xB8" + + "\xAC\xEF\x5D\xA5\x5D\x4A\x05\xF2\x74\x35\xF8\x79\x04\x83\xB0\x49\xD1\xF0\x0F\x9F\x44\x49\xB3\x2C\x4B\xA2\x48\x20\x77\x3F\xCA\x7E" + + "\x44\x93\x7F\x90\xF1\x19\x0C\x34\x3E\x99\xBC\x92\x41\xF1\xBF\x4C\xD4\xCF\x5C\xF6\x31\x90\xAB\xF9\x0E\xC5\x34\xA4\x37\xFB\xC8\x8C" + + "\x6B\x63\x63\xCF\x83\xF7\xF7\xBD\x94\x91\x72\x6C\x2D\x7E\x33\x6F\xA7\x37\xF6\xFE\x96\xEB\xBA\x6C\xD4\x7E\x39\x42\x31\x0A\x1C\x16" + + "\x32\x21\xEE\xD8\xF1\xB1\xB6\xD9\x40\x48\x27\xCE\x86\xCF\xF0\x0F\xA4\x5E\x9E\xE6\x62\x1B\xF1\x75\x05\x74\x75\xDD\xD8\x0A\xB1\x32" + + "\xAE\xBE\xCE\xC3\x06\x1B\xD8\xFF\x00\x1B\xF4\xFE\x57\xB2\xBD\x8C\x3F\x34\x63\xF9\x10\x15\x86\x88\x24\xF6\xB0\x42\xAA\x74\x0F\x82" + + "\x57\xEB\x5B\xDE\x87\xA6\xB2\xB4\x85\x83\xC5\x37\xC6\xE0\xF7\xB4\x6D\x1C\x2E\xA5\x48\x3B\x3A\x7E\xC1\xE7\x5F\xC3\x13\xBF\x24\x7A" + + "\x32\x94\xBF\xCC\xA4\x8F\x63\xC7\xDB\xBF\xAE\x4F\xD7\xBF\x5D\xD2\x2D\x40\x88\xC3\x15\x89\xC1\x40\x44\xA6\x52\x58\x0F\x24\x0E\xE1" + + "\xB6\xDE\xFC\x9D\x68\x6B\xE8\x9F\xAF\x4D\x25\xC6\x96\x0A\x63\x7F\x1A\x0A\xC1\xF4\xE8\x41\xFF\x00\x04\xE9\x80\x1A\x3A\x04\xB0\xD6" + + "\x89\xFB\x1A\x77\xF2\x5A\x1E\x03\x82\x8D\xF6\xAC\x88\x8E\x87\x4D\xB0\x83\x65\x58\x6B\x5D\xBB\x21\x7F\xE4\xFA\xF6\xB6\x54\x2B\xA3" + + "\x3B\x2B\x00\x4F\x6B\x24\x2A\xE0\x2A\xED\xB6\x09\x21\x81\x00\xF9\x5F\xB1\xF6\x46\xBD\x0D\xE2\xFF\x00\xA5\xBF\x3E\xDC\xFE\xFF\x00" + + "\xB7\x5D\xD0\x61\x8E\x99\xDD\xC3\x46\xC4\x10\x75\xB9\x42\x06\x2B\xF7\xE0\x48\x40\x07\xB4\x78\xD2\xF8\x3B\x27\xD2\x2D\x8E\xB0\x84" + + "\x26\x98\x03\xE3\xB7\xBD\x58\x85\x20\x90\xC1\xB6\x9B\x5D\x10\x35\xF1\x9D\x0D\xF9\x3B\x04\x17\x32\x4F\x24\x7F\x2D\x72\x25\x60\x74" + + "\x11\xC2\x2A\x9D\xFD\x82\x57\xB9\x94\x1F\xF9\x52\x75\xAD\x82\x06\xFD\x78\x79\x65\xEC\x46\x9A\xBB\x31\x07\xB4\x49\x18\x8C\x84\xEE" + + "\x01\x49\x2A\xC6\x33\xA1\xA0\x0E\xB6\x18\x0F\xED\xD1\x3E\x93\x21\x09\xE0\xDC\x67\x23\x16\xBF\xA8\xC5\xFD\x8F\xFF\x00\x7D\xD0\x36" + + "\xC5\xBB\xF8\x01\xD5\xFC\x1D\x2B\xB7\x63\x8F\xB1\xA2\xC1\xD4\xEB\xFC\xF6\x83\xB3\xE3\xC7\xA4\xDF\x15\x65\x64\x2C\xC1\x51\x82\xF6" + + "\xBB\x29\x52\x58\xFD\x91\xB6\x20\xB0\xD7\xD0\xFF\x00\x69\xF1\xAF\x3B\xF4\x6D\x8D\xA4\x58\xDF\xFD\x37\x41\xE0\x00\x82\x16\x55\xD9" + + "\xD6\xA3\x05\xD3\xE8\xEB\x65\x94\x1F\xB0\x3C\x79\x6F\x24\xD6\x0B\x31\x31\xA1\x3B\x1A\x76\xED\x21\x94\x68\x10\xDA\x24\xA9\x1A\x1E" + + "\x48\x20\x12\x7C\xFD\x7A\x2E\xD5\x3D\xBF\xB7\xF4\xEB\xAE\x7D\x7A\x0D\x25\x69\x51\x84\x6D\xA1\xDF\xDA\xA0\x83\xDA\xAC\x7C\x00\x36" + + "\x01\xFC\xD8\x78\xFB\x4E\xEF\xFF\x00\x1E\x9B\xBD\x0B\x24\xA8\x55\x94\x0D\x78\x6F\x9D\x47\x68\xD8\xFF\x00\x6F\x6E\xB7\xAD\xEB\x6C" + + "\x4E\x81\x04\x9F\x1E\x8C\x34\xF6\x24\x1F\xFC\x41\x18\x93\xA5\xEC\x21\x3C\x7D\x1D\x87\x07\xE8\x7F\x03\xFC\x68\x01\xBF\x48\x9B\x2C" + + "\x76\xA1\x0A\x4C\xA3\xC8\x78\x9F\x44\xF8\xF2\x8C\xAC\x43\x7D\xEB\x5E\x3C\x79\xD6\xBC\x1E\xDA\xA3\xB7\xF7\xFF\x00\x3F\x6F\xD3\x9E" + + "\x86\xE4\x77\x3C\xFE\xBF\x4E\x82\xCF\x4E\x44\x0A\x01\x76\x90\xFD\x97\x93\xB3\xBB\xC7\xD0\xF0\x51\x8E\xFF\x00\x86\x20\x00\x7E\xC6" + + "\xF7\xE9\xB8\xA5\x6C\xA9\x27\xBF\xB0\x02\x42\xBC\x71\x31\x00\x6F\x6A\x19\x1B\xB7\x5A\xFA\x20\x10\x3C\x79\x3E\x47\xA3\xC6\xCA\x4A" + + "\x8C\xAE\xA0\xB6\xBE\xBE\x39\x46\xB6\x49\x1F\xDD\xFE\x7F\x8F\xBF\xAF\xE3\xEB\xD3\x26\xB1\x2A\x78\x8C\x6C\x28\x21\x58\x12\xDE\x41" + + "\x01\x91\x90\x6F\xB4\x1F\x3B\x3D\xDF\x6B\xE5\x49\xF4\x4F\x93\xD4\xFD\x3F\xB1\xE8\x77\x36\x32\x3F\x21\xFB\x03\xA1\x27\x1F\x63\xC3" + + "\x0E\xF2\x18\x79\x1F\x23\x21\xD8\x3E\x37\xDA\xA0\x7F\x1E\x7E\xC9\xFE\x35\xBF\x08\x9A\x76\x47\x71\x50\xF1\x96\x27\xCE\xC4\x84\xFF" + + "\x00\xD8\xB2\x06\x1F\xF0\x4B\x1F\xE3\xEB\xD1\xA4\xB1\x1E\xDB\xBB\xE4\x52\xC4\xEE\x37\x77\x0A\x49\xF2\x48\x56\x8C\x10\x3F\xC1\xEE" + + "\x20\xF9\xD0\x1F\xCB\x49\x1D\x44\xBB\x55\x62\x1F\xC3\x20\x67\x3E\x36\x49\x00\xB0\xD8\xFF\x00\x3F\x8A\x8F\xE0\x90\x0F\xA1\xDA\x9F" + + "\xF5\x7E\xBF\xE7\xF7\x7E\xBB\x73\x7E\xC0\xFC\xBF\x7E\xBD\x07\x7A\x53\xA9\x60\x7E\x70\xAA\x01\x07\xB4\xE9\x81\xFB\x5F\xBE\xE0\xDF" + + "\x5B\xFF\x00\x71\xFA\x1B\x27\x41\x06\x89\xD4\x85\xEF\x7F\x94\x02\x7B\x08\x95\xB4\x9B\x03\x60\x31\x5D\x82\x4F\xD9\x0B\xE4\xFD\x12" + + "\x77\xE8\xDF\xEF\xA2\x01\xE2\x8C\x3B\x88\xD9\x83\x86\x76\x76\x56\x03\x67\xFB\xD7\xBB\x43\x63\xB7\xEC\x11\xAF\x49\x3D\xC7\x6D\xF7" + + "\x40\xF2\x27\xF7\x09\x12\x54\xEE\x3A\x20\x84\xEC\x28\x1F\xC7\xD8\xF0\x41\xFA\xD9\xF4\x4B\x21\xB7\xCD\xFA\x5C\x5E\xF7\xBD\xEC\x38" + + "\x3D\xF1\x63\x92\x6F\xD1\x83\x30\x36\x23\xF3\xC1\xED\xFE\x6F\xF7\xBF\x1D\x01\x68\x26\x6D\x82\xD3\x9D\x90\x0A\x77\x49\xAF\x1E\x47" + + "\xFF\x00\x60\xCA\x3E\xC6\x98\x0F\x03\x7B\x1E\x3D\x79\xFD\xB4\xBB\x03\x6C\x3C\xE8\x15\x56\x05\x35\xAD\x85\x06\x24\x24\x7D\x0F\x00" + + "\x1F\x23\x4D\xE7\xC1\x97\xB4\x46\x9F\x52\xF6\x30\xDB\x00\x8A\xCE\x9A\x1E\x01\x01\x59\xBC\xFF\x00\x80\x08\x1E\x37\xB2\x46\xFE\x3D" + + "\x85\xD1\x3D\xDB\x52\x3C\x8D\x05\x60\x34\x7C\x06\xEE\x04\x37\x9F\xE4\xA9\xFB\x1A\x07\xD1\x82\xAF\x3B\x81\xF5\xED\x8E\xDF\xD7\xF5" + + "\xB6\x0F\x43\xE6\x3F\xE1\x02\xD9\xBF\x19\xBD\x87\x7C\x1F\x7F\x4E\xFE\xFD\x02\x35\xE5\x2E\x63\x12\x4C\xAC\x08\x27\x65\xC0\x75\x03" + + "\x5E\x75\xE4\x6B\xEB\x7E\x77\xE7\x64\xEF\x7E\x9B\x7E\xCD\xF6\x55\x4B\x77\xF8\xFC\x81\xEC\xD8\x27\xC6\xC1\x62\xDD\xDF\x5B\x6D\xA9" + + "\xFF\x00\x1A\xD1\x1E\xB2\x03\x72\xAC\xBB\x03\x6B\x22\x6C\x0E\xF4\x4E\xE3\xB1\xE4\x29\xD8\xEE\x00\x6C\xF8\x3E\x7E\xFD\x34\x66\x8A" + + "\x43\xA6\x72\x1D\x8F\x72\xB2\xC5\x10\x04\x2F\x9E\xD1\xB7\x2C\xDB\x04\x82\x01\x1F\x67\x5A\xF1\xEB\x8A\xA5\xB0\x40\x24\xDF\xEB\xC7" + + "\x3E\x87\xBE\x7E\x9F\x4E\xDC\xDE\x9D\xBD\xF9\xC6\x4F\xB5\x8F\x02\xE7\x9E\x83\x35\x27\x7E\xE1\x23\x3A\xB7\x6F\xE2\x0B\x4E\xE7\xB7" + + "\xCF\x87\xD9\x29\xFF\x00\x20\x92\x48\x3A\xED\xDF\x8D\x33\x7A\xD3\x29\x2A\xB3\xCA\x01\xD0\x3A\x62\x40\xFB\x1A\xD3\x68\xB9\x3E\x7E" + + "\xC1\x03\xC1\xF3\xA1\xEB\x23\x96\x57\x53\xDE\x3E\xBC\x00\x44\x68\x49\xF0\x06\x99\x4B\x0F\xFF\x00\x2A\x7C\x78\x3A\xF1\xE9\xAC\x99" + + "\x04\x5E\xE3\xF1\x94\x50\x3F\xD4\x0F\x03\xAB\x68\x68\x02\xA4\x31\x52\x7C\x9D\x1F\xAF\xF3\xF5\xE8\xBB\x43\x0B\x13\x6B\xFF\x00\x4B" + + "\x8F\x4B\x10\x7B\xFF\x00\x8E\x85\x5D\x81\xB8\x1C\x81\x9C\x1F\x43\xDC\x7D\x3F\x5C\xDA\xFD\x63\xCF\x5E\xD6\x82\x83\x2B\xC7\xFD\xAD" + + "\xE5\x36\x8A\xC3\xC1\x48\x8C\x61\x4A\x83\xE7\x5B\xD8\x1E\x47\xF8\xF4\x83\xC0\x17\x40\x4D\x32\x90\x41\x28\x7B\x40\x3A\x1F\x91\x28" + + "\x03\x6C\x6F\xC9\xFE\x14\x01\xE3\xEB\xD6\x50\x2C\xD7\x75\x0C\x3B\x87\x8E\xE2\xA5\x4F\xD7\x82\x0A\xE8\xEC\xEC\xEF\xC1\xDF\xFC\x00" + + "\x0F\x96\x0D\x3D\x09\x9C\x96\x0E\x1C\x0D\x14\x2B\x32\x12\x03\x1F\x20\x68\x0D\xEB\xC6\xCE\x89\xD6\xBF\x81\xE9\x3F\x26\x30\x7F\xE6" + + "\x02\x48\xBA\x86\x36\xC1\xC0\xCF\xD4\x91\x6B\x1E\x6D\xDC\xDC\xFE\x6B\xE3\xE5\xB5\xBD\x15\x7F\x51\x6B\x77\xFC\xFD\xC6\x31\xF3\x1C" + + "\x8C\x00\x8E\x75\x54\x3D\xA1\x8A\x95\x3F\x63\xC1\xFC\xD5\x14\x9D\xEB\x5F\x7A\x00\xF9\xDF\xAF\x13\x53\x64\xD2\x99\x58\x33\x36\xC3" + + "\xB9\x5D\x31\xD1\xF1\xF8\xEC\x7D\x7D\x06\x20\x6F\xF8\x1A\x24\x9E\xFD\xCD\x25\x50\xA9\x2F\xC6\x43\xF6\x0D\xA1\x66\x60\x76\x4A\x95" + + "\x75\x66\x6D\x8D\xEC\x8F\xFF\x00\xBB\x43\x5E\x91\x92\xCA\x7D\x49\x18\x8C\x13\xE1\xD7\x72\x28\x3F\x43\xBB\x4A\x4A\xFF\x00\xC0\xD6" + + "\xB7\xF4\x48\xF3\xEB\x9A\x18\xC7\x2E\x78\xB9\xF9\xB1\x6F\xE9\xF4\xBD\xB2\x31\xDF\xA2\xF9\x8F\x7B\x85\x37\x3E\xC0\x67\x1C\x62\xDF" + + "\x90\xB9\xC1\xEA\x65\x42\xD5\x64\x60\x3E\x7D\x90\xBB\x29\xDB\xF6\xA7\xC7\x8D\x80\xE0\x8F\x3E\x00\xF0\x01\x27\x7F\x5E\xBD\xF7\xE3" + + "\xEB\x31\x06\xCF\x6A\xB1\x0D\x24\x60\x16\xF1\xB0\x01\x08\xBB\x60\x3F\x96\x60\xA7\xF9\x3E\x3C\x6C\x14\x13\x2A\x13\xA4\x31\x85\xF3" + + "\xB4\x86\x72\xBB\x6D\xFF\x00\x2D\x1A\x82\xC4\xF8\xFC\x09\x00\x6B\x47\xF8\xF5\xF6\x5B\x89\x30\x11\xC7\x32\x9E\xD3\xA7\x3F\x13\xFC" + + "\xAA\x46\xC1\xED\x56\x8C\x7F\xB8\x9F\x04\x6B\xC6\xBF\xCF\xA5\xBC\xC3\xED\x9C\x8F\xD3\xB7\xEF\x91\xF7\x2A\xC7\x71\x7C\xDA\xC0\x9B" + + "\x76\xFB\xDB\x1F\x97\xDF\xA3\x8F\x24\x28\x3E\x41\x37\xC9\x17\x70\x21\x88\x0C\x11\x4F\x80\x54\xC6\xA4\xF8\x07\x64\x10\x4F\xF2\x4E" + + "\x86\xBD\x7D\xF9\x6B\xCB\xE6\x0B\x51\xC9\xDB\xB2\xDD\xB2\x02\x40\x3A\x1A\x3F\xE3\x4C\x3E\xBC\xB7\x93\xE3\x60\x7A\x0A\x93\x7C\x0B" + + "\xA9\x0C\x64\x1F\x01\xD8\x32\xB3\xB1\xF2\x36\xAA\xA5\x76\x74\x76\x36\x3E\xB5\xAF\x00\xFA\xF3\x23\xA7\x72\xBA\x24\x6C\x40\x52\x7E" + + "\x22\x43\x06\x04\x1D\xB3\x86\x5D\xA9\x00\x0E\xD6\x25\x4F\xD6\x87\x8D\x77\x98\x7D\x07\x6C\x7E\xFE\xFF\x00\xE4\xDB\xAE\x31\x8F\x53" + + "\xED\xFB\xC5\xFB\xF4\x58\x7C\x6E\xE2\x48\x6D\xC4\xA7\x46\x37\x43\x2B\x68\x1D\xA9\x2F\xF1\x81\xA6\x63\xFE\x36\xA7\x5B\x1B\xF1\xEB" + + "\xD2\xBB\xC7\x20\x0D\x2C\x4E\x36\x43\x28\x7E\xCF\xAD\x69\x95\xF6\xC7\xF2\x00\xEC\x1D\xFD\x8F\x3A\xF1\xE8\x71\x68\x4F\xFA\x9A\x8A" + + "\x41\x21\x04\x83\xD8\x1D\x59\x3C\x02\xC3\x6C\x7C\x1F\x1B\xFB\x1A\x1F\xC7\xA5\x01\x81\x94\xA3\x94\x46\x1B\x07\xE4\x21\x49\x04\x03" + + "\xB4\x73\xFE\x34\x35\xB0\xDA\xD7\x81\xE7\xC9\xC3\x5C\x5C\x90\x33\x6E\x6C\x3B\x7E\xBF\xD7\x1D\x76\xC1\x6B\x7D\x45\xEC\x2F\x7C\x77" + + "\xF6\xFE\x87\xE8\x7A\x32\x63\xAE\x1C\xC8\x06\xF6\xBA\x24\x36\xC9\x04\x0F\xA2\xA0\x86\x51\xF4\x7C\x02\x37\xE3\xCF\x9F\x4C\x08\xAE" + + "\x58\xBC\x36\x03\xA3\x7F\x7C\x6A\xE5\x9A\x22\xBB\xD3\x1E\xDF\xCD\x3F\xF3\xF8\xE8\x10\x00\x3E\x90\x8A\x21\x1F\x92\xEC\x57\x40\xA3" + + "\x2C\xBA\x0D\xE0\x1D\x14\x05\x57\x7F\xC0\xED\x1D\xAD\xE4\xB0\x1E\x09\x57\xE6\x82\x42\x4F\x70\x8E\x45\x1D\xBB\x62\x50\xF6\xF8\x24" + + "\x82\x49\x46\xD0\xFF\x00\xBE\xBF\x9F\xAF\x06\x1E\xFC\x7E\xBD\xAC\x7F\xF1\xFA\xF4\x52\x9C\x8C\x9F\x4E\xDE\x9F\xD8\xF3\x71\x90\x47" + + "\x4B\x76\xC5\x1B\x02\x5D\x5D\x66\x53\xA6\x59\xBF\x20\x75\xF6\x23\x7D\xA9\xFB\x1E\x14\x0D\x7F\x23\xCE\xFD\x22\xC2\x80\xFC\x99\xD8" + + "\xCA\xA4\x77\xB2\x9E\xD9\x57\x44\xE8\xCA\xB1\x00\xDA\xF1\xB0\x48\xEC\xD7\xFC\x7A\x56\x2A\x57\x67\xA7\x25\xDF\xDB\x4D\x6F\x1D\x5D" + + "\x96\x39\x72\x30\xC7\x23\x55\xAF\x23\x9D\x22\xCF\x61\x17\xE2\x86\x46\x3E\x07\xE4\x3B\x8F\xF1\xA3\xE8\x7C\x6E\x3E\x71\x17\xE3\x23" + + "\xC9\xFF\x00\xC4\x21\x98\x49\x23\xAE\xFB\x7B\x42\x68\xBB\x90\xC3\x5A\x52\xC4\x6C\x9F\x47\xB3\x0B\x02\x96\x2C\x01\x52\x54\xDD\x81" + + "\x26\xC5\x6F\x82\x09\x04\x5C\x0E\xC4\x03\xC8\xE8\x97\x17\x60\x08\x3B\x4D\x9A\xC6\xFB\x4D\x81\x20\xFA\x11\x71\x70\x7D\x47\x5E\xA4" + + "\x92\x9C\xA5\x42\xCA\xF2\x31\x27\x4C\x81\x83\x2E\x89\xFE\xE2\x15\x41\xD7\x90\x55\x87\x9F\x1E\x09\x03\xD7\x85\x51\xA5\x68\xED\x07" + + "\xF2\x56\x40\x4A\x8E\xD1\xAF\x20\xAF\x66\xBB\x94\x79\xD7\xE0\x47\xF3\xB2\x77\xEB\x3A\xA9\xC2\x72\x75\x71\x37\x39\x2F\x25\xB3\x8A" + + "\xE0\xDC\x37\x1D\x11\xB5\x90\xE5\xDC\xE3\x2D\x57\x8D\x71\xFC\x7D\x55\x1B\x7B\x16\x2D\xE5\xE4\xAC\x16\x25\x53\xB3\x20\x51\x10\x23" + + "\x66\x45\xF2\x4A\xBD\x0E\xEA\x5F\xB1\xDE\xA5\x64\x39\x35\x7E\x37\xEE\x63\xA7\x1D\x4D\xC9\x70\xD3\x03\xF2\x4C\x76\x33\x95\x63\xF1" + + "\xF8\x8A\x71\xDA\x92\x48\x61\xB3\x0B\x4C\x60\x97\x35\x42\x49\xE1\x78\x63\xC8\xE3\x2F\xDB\xA3\x24\xBD\xB1\x16\x0E\xF1\xAB\xD9\xF4" + + "\x9F\x07\xEB\x9A\xC1\x8C\x53\xD2\x2D\x3C\x72\xD8\xAC\xF5\xAC\x29\x50\xA8\x00\x96\x89\x64\x3E\x74\xEB\x60\x49\x30\xC5\x20\x39\xCF" + + "\x24\x40\xEA\x3E\x24\xD2\x74\xD5\x73\x2D\x41\x9E\x44\xE6\x1A\x45\x35\x0E\x09\xE1\x5C\xA5\xE3\x8D\x89\xB0\xB4\x92\x21\x17\xE3\xAD" + + "\x6E\x63\x31\x86\x65\x99\x64\x52\x49\x60\xA5\x55\xFF\x00\x8D\x91\xF2\x32\xEB\x5E\x76\x09\x00\xEB\x5F\x7B\x3E\x90\x78\xA4\x8C\xAC" + + "\xBA\x33\x06\xDF\x7A\x2B\xC0\xAB\xDA\x76\x55\x9C\x33\x76\x13\xAD\x7F\x6B\x83\xBF\xB1\xE7\x5E\xA4\x2F\x52\x9B\xA4\x3C\xEA\x3B\x57" + + "\xBA\x4F\x94\xC4\x5C\xB9\xC2\xA8\xD2\xFF\x00\xA9\xB1\x98\x6A\x97\x68\xC2\xF8\x7C\x95\x9B\x15\xF1\xF9\x58\xA5\x96\xAD\x6A\x79\x34" + + "\x82\xD5\x79\xA0\xB7\x66\xA3\xDC\x68\x92\x7A\xED\x6A\x58\x90\xD7\xF9\x74\x27\xF4\x7C\x85\x84\x2B\x53\x1F\x6A\xC2\x86\x05\x52\x2A" + + "\xB3\x59\xF9\x23\x1F\xED\x1D\x83\xBC\x85\xDF\x80\x37\xE7\x5F\xDD\xA3\xE9\x8E\xB9\xA0\xD6\x68\x1A\x83\xE9\xF5\x40\x4C\xFB\x23\x96" + + "\x19\xA0\x0E\x63\x9E\x27\x18\x92\x3B\xAE\xE2\x03\x87\x89\x81\x17\x0F\x1B\x0F\x42\x5C\xE9\x3A\xBD\x36\xAF\x46\xB5\x90\xEE\x88\x6E" + + "\x68\xE5\x86\x6D\xAB\x2C\x32\x29\x1F\x2C\x80\x12\x01\x2A\x55\x94\x83\x62\xAE\x3B\xDC\x06\xAB\x12\x30\x8B\xE2\x94\x56\xDE\xCF\xC5" + + "\xFE\x80\x0D\xBD\xEB\x6B\xF9\x05\xD1\x04\x82\x18\x0D\x78\xDF\xDF\xAF\x25\x0B\x03\x04\xA0\x0D\x6C\x06\x65\x88\xAB\xA9\xDE\x88\x1E" + + "\x48\x3A\x03\xFD\xBA\x03\x7E\x7C\xF8\x3D\x8A\xE1\x9C\xB6\xF3\x34\x54\xB8\xB7\x20\xB9\xB0\x00\x8E\x1C\x2E\x4B\xBA\x3F\x2D\xB0\xDD" + + "\xF1\x68\xA9\x04\xFE\x4D\xD9\xFC\x8D\x93\xE7\xD6\x65\x5B\xA1\x7D\x4E\xB9\xD8\xF4\xB8\x85\xC8\x8B\x10\x4F\xF5\x0B\x95\x68\x69\x58" + + "\xEF\xCA\x5C\xB4\xAC\xBD\x9E\x7F\x0F\x8C\x11\xF4\x08\x1A\xF4\xC6\x0D\x2F\x53\xA9\xB7\xC3\x69\xD5\xD5\x17\x36\x1E\x4D\x24\xF2\xE6" + + "\xF6\xE5\x23\x61\xCF\x4E\x66\xD4\x68\x29\xFF\x00\xE7\xD7\x52\x43\x6F\xFF\x00\x6D\x4C\x31\x9E\xDD\x99\xC1\xEE\x3F\x3E\xB5\x13\x53" + + "\xF8\xCB\x2F\x68\x6D\x01\xA0\x5D\x46\xD7\xCF\x90\x1C\x85\x07\xF8\xD0\xFF\x00\xBE\xC0\xD0\xF5\xEF\xF6\xD2\xD8\x8C\x2B\x04\x58\x14" + + "\x79\x55\x90\x7C\x9B\x5F\xA0\xE5\x0F\x6B\x2F\x91\xF8\xB3\xFD\xFF\x00\x7A\xFD\x9F\x59\xF7\x39\xE9\x6F\x2E\xE0\x35\xF1\xD7\xB9\x25" + + "\x5A\xD0\x2E\x4E\x49\xA1\xAF\x0D\x7B\xF0\xDA\x65\x92\x05\x8D\xDD\x65\x68\xB6\x89\xB4\x7E\xE5\xED\x77\x43\xDA\x54\xE8\x81\xBD\x76" + + "\x61\xD2\x33\x1D\x56\x70\x7F\x0F\xC9\xDB\xBC\x90\x34\x65\x5E\xE4\x52\x76\x74\x74\x48\xFE\x7C\x00\x07\xA4\xEB\x29\xAA\xA8\xE7\x6A" + + "\x7A\xDA\x79\x69\xA7\x8D\x53\x74\x13\xC6\x62\x91\x15\x94\x3A\x6E\x42\x14\x80\xCA\xC1\x86\x06\x08\xB7\x4A\xD3\xD4\xD3\xD5\xC2\x27" + + "\xA5\x9E\x3A\x88\x5B\x70\x49\x61\x65\x92\x36\x28\xC5\x5B\x6B\x29\x2A\xD6\x60\x46\x0D\xAE\x3A\xAB\xDF\x77\xDE\xF5\xBA\x91\xED\xC6" + + "\x1E\x3A\x89\xC0\x6C\xCD\x95\xE5\x19\xFB\x18\x0C\x4E\x27\xE4\xC4\xE3\xA2\x9A\x1A\xD8\xFC\x96\x56\x5C\xC5\xBC\xBE\x79\x5A\xA7\xED" + + "\x62\xA7\x8C\xB1\xDF\x25\x61\x1D\x45\x64\x90\xBD\xA0\xB0\x37\xCB\x04\x22\xFD\x68\x39\xEF\x11\xCB\x3C\x3C\xEB\xA5\x58\xDA\xF1\x55" + + "\x59\xAA\xDE\xE3\x99\xFE\x79\xC1\xB8\xC7\x23\x4B\x00\x29\x4B\x55\x62\xB1\x7E\x0B\xE9\x09\x20\xBC\x32\xCD\x86\xB5\x5A\xDC\x2E\x65" + + "\xAD\x33\xAF\x64\x9E\xA6\xA7\xB8\x7C\x36\x17\x3F\xEE\x97\xDA\x86\x1F\xDC\x45\x8C\x63\xE0\x2A\x73\x1E\x4B\x99\x83\xFF\x00\x77\x1D" + + "\x7C\x04\xC2\xA6\x06\x7A\xD8\xAF\xEA\x12\x2B\xC2\xD0\xE3\x9A\xCD\xFB\x3F\xD4\x05\xE8\xEB\xA7\xC4\x0A\xD8\x32\x57\x05\x8C\x03\xFD" + + "\x6E\xBA\x11\xD0\x8C\x17\x0A\xE8\x9E\x3B\xA7\x16\x78\xDE\x43\xAD\x15\x79\x27\x2B\xBF\xC8\x72\xB1\xE4\x70\x71\x72\x4C\x9F\x00\xC8" + + "\xAD\x9C\x9C\x71\xE7\xE6\xA6\xB5\xA3\xBE\xF5\xB2\xD3\xC7\x57\x8C\xC3\x68\xFE\xF1\xE1\x8E\xC4\x35\x14\xD6\x42\xB1\xFA\x57\xC3\x7E" + + "\x15\xF0\xA5\x7F\x87\x34\x99\xAB\x3C\x3B\xA4\xD5\xCF\x57\x4C\xEF\x3D\x5C\x33\x6A\x28\x4B\x1A\xB9\xA1\x8C\x42\xD0\xD6\x53\x48\xCA" + + "\x62\x88\x6E\x76\x1B\xD6\x51\x30\xB9\x0A\xA3\xAC\x43\x55\xD7\xB5\xAA\x6D\x6A\xAE\x08\xB5\x6D\x4E\x9D\x63\x9A\xD0\xC3\x22\xD3\x10" + + "\x00\x86\x37\x63\x30\x78\x66\x88\x10\xCC\x46\xD0\x42\x15\x68\x89\x02\xE7\xA6\xB3\x7E\xB8\x5D\x46\x31\xDA\xB6\x3A\x4B\x46\x4C\x7C" + + "\x21\xE6\x92\xDD\x2A\xC9\x95\xC7\xC5\x5D\x49\x25\xE3\xC9\x53\xE5\xAB\x5A\xD9\x8A\x30\x4C\x86\x29\x76\xA1\x24\x66\x44\x58\xDC\x2D" + + "\xB6\x7B\x4B\xF7\x53\x9E\xF7\x05\x4B\x21\x1E\x5B\x82\xE4\x31\xCF\x4B\x03\xFD\x6D\x39\x06\x3A\x3B\x32\x71\xDC\xA7\xC9\x6D\x61\x87" + + "\x1B\x5B\xE5\x5B\x1F\x06\x50\x23\xAB\x4D\x14\x79\x3B\xC8\x7E\x39\x1C\x88\x77\xF1\x08\x47\xCA\x3D\x93\xFB\x2E\x83\xF4\xF5\xC9\x75" + + "\x8B\x09\x7F\x0F\x57\x0D\x8F\xF6\xAC\x82\x86\x53\x1F\x26\x26\x37\x5E\xAA\xA5\x65\xCB\x36\x72\xDE\x6A\x18\x8E\x62\xDF\x26\xC8\xF2" + + "\x69\x8F\x10\xB3\x80\xBB\x65\xEA\x45\x56\xE5\x9A\xA2\x82\xDA\x93\xE7\x49\x07\xFA\x78\xE7\xBA\xD3\x3F\x45\xF1\x58\x0E\x45\xC5\xF1" + + "\x78\x9E\x1B\x83\xE2\x4A\xDD\x32\xCC\xFC\x91\xD5\xB7\x9E\x9E\xC5\xDB\xD3\x9A\xD9\x2A\x51\x65\x26\x90\x52\x59\x24\xEE\x8E\xFB\x63" + + "\x68\x19\xA2\x70\x44\xB3\x80\x27\x92\xB9\xFC\x4A\xF0\xF7\x86\x74\xAD\x06\x96\xA7\x49\xD0\xA8\xF4\xEA\xB9\x2A\x9E\x16\x71\x5B\x53" + + "\xF3\x44\xB1\xC0\xCB\x24\x2B\x34\xB2\x19\x65\xDE\xEE\x1E\x0D\xCD\xB2\x16\x12\x31\x62\xB7\xEA\x67\xC1\x5A\xDE\xB1\xA9\x6A\x92\xC1" + + "\x57\xA9\xD5\xD5\x41\x1C\x60\xED\x7A\x68\xDA\xCE\x19\xC3\x24\xAC\x91\xA8\x89\x4A\x85\x22\x5D\xA0\xF9\x96\x8C\x61\x87\x51\x27\x90" + + "\xFE\xA2\x9E\xF1\x73\xFD\x48\xEA\x16\x02\x1E\x97\x74\xEB\xDA\xFF\x00\x1E\xE9\x9E\x3F\x05\x6B\x2B\x57\xAF\x18\x0E\x75\xC9\x73\xB9" + + "\x88\x39\x1E\x5F\x25\x8A\xC2\xE5\x71\xF3\x63\x26\xE1\xD1\x7E\xCB\x27\x26\x3A\x55\x41\x5E\x85\xA8\xE2\x90\xA4\x11\x5A\xB8\xDF\x24" + + "\x89\x9D\xF0\xAF\xD4\x03\xAB\xB8\x8C\x85\xFF\x00\xFD\x4B\xE4\x9E\xDD\x3A\x87\x8E\x92\x80\x18\xC7\xE9\x9E\x33\xA9\x58\x5B\x14\x2E" + + "\xB8\x59\x21\xB1\x77\x2D\x50\x75\x1F\x1D\x6E\xA3\xA3\x01\x2D\x25\x86\x8D\x88\xF6\xB2\x8B\x5A\xDC\x4D\xA4\x38\x9E\x3F\xAD\x1D\x67" + + "\xF7\x87\xCB\x3A\x71\xEF\xD3\x05\xC1\x38\x94\xDC\xAB\xFF\x00\x49\xF8\x60\xC5\xF0\x8B\x4B\xFF\x00\x4F\x65\x78\xC5\x5C\x37\x5A\xB9" + + "\x9F\x08\xA8\x99\x29\x33\x79\xD9\x9A\xDE\x73\x96\xE2\xA9\xC1\x32\xC9\x7E\xB4\xD7\x1A\x35\xC3\xA5\x4A\xB2\x5F\x11\xBE\x33\xEF\x4F" + + "\xA3\x3C\x3B\xDB\xA3\x74\x93\xA7\x9D\x35\xCB\xDD\xE5\xDC\xE3\x17\xC1\xB3\x76\x3A\xA5\x2E\x27\x19\x1D\x75\x71\x4F\x21\x5A\x4E\x25" + + "\xC8\xB3\x1C\x73\x8E\x41\x26\x23\x88\xCD\x91\xA7\x3E\x6A\x9C\xF1\xC1\xFB\x5A\xD3\x51\xC3\x51\xB9\x6F\xBA\xCB\x49\x7E\xFF\x00\x96" + + "\x3C\x4D\x41\xE3\xA9\xE0\xF1\x67\x88\x34\x4F\x10\x68\xBA\x5E\x8B\xA0\xEA\x9A\x6E\x95\x4D\xA4\xC7\x49\xA5\x4C\xD3\x2C\xFA\x27\x86" + + "\xEA\xA5\x94\x6A\x35\x94\x15\x95\x9F\x10\xFA\x86\xAB\x54\xC9\x1C\xAD\xB6\x4A\x68\xD4\xAB\x46\x54\x2C\xDA\x7C\x1A\xB6\x95\x46\xFA" + + "\x46\x9D\x53\xA7\xD7\xD7\x6A\x35\xF4\xB5\x55\x92\xD5\xCD\x3D\x74\x41\x0A\x6A\x5A\x9C\x09\x1F\xC1\xD3\xD4\x45\x00\x45\xA7\xA3\x88" + + "\x36\xD5\x05\x25\x66\x05\x5F\xFD\x9B\xBD\x3D\xED\xFB\xB2\xCA\xD8\xA7\x0E\x23\x9F\x7B\x31\xB9\x63\x29\x66\xDC\x38\x8C\x4B\x63\xFA" + + "\x91\x5F\x29\x6A\x5A\xE8\x66\x6A\x0F\x5D\xB9\x67\xEF\x3F\x75\x14\x46\x31\x63\xE4\xA1\x1B\xA9\x65\x63\x59\x4C\x8A\xA6\x4B\x7B\x01" + + "\xF7\x9F\xD4\x3F\x76\x98\x4C\xF2\xF5\x0B\xA3\x16\xF8\x05\xCE\x39\x56\xBD\x85\xE7\xB8\x68\x73\x83\x80\xF3\x2B\x33\x5E\xB3\x55\xE1" + + "\xC0\x4B\x98\xC6\xC6\x52\xC5\x21\x07\x6D\xDA\xF0\xE5\xB3\x48\x84\x16\xFD\xCA\x6F\xB1\x74\xF7\x23\xF6\xAD\xD0\x1E\x21\xD1\x0C\x7F" + + "\xB9\xBC\x0F\x2F\x6C\xF5\xF5\xE9\xDF\x4B\x7F\xF4\xF5\xF7\x47\xB6\xC7\x3A\xB9\x79\x0E\x76\xF3\xDD\x89\xDA\xC6\x5A\xD7\x35\x39\xC9" + + "\xA8\x5B\xC0\x59\x85\x28\xF1\x34\xA2\xB7\x31\xB5\x69\xD8\xC5\xC3\x3D\x2C\xAF\xF4\xAA\xE5\xDE\xE9\x72\x9D\x00\xC0\x61\x7A\xD1\xD3" + + "\xDC\x07\x15\xE9\xA6\x17\x89\xF1\x74\xE8\xA6\x77\x19\x3C\x50\x72\x0E\x59\xC6\x6E\xAD\xFB\x22\xFE\x72\x9A\xE7\xF2\xDF\x1B\x2D\x37" + + "\xC6\xCF\x04\xF2\x62\xF0\x26\x75\xB4\xD2\x1A\xF3\x31\x66\x49\xDA\x2D\x0F\xC5\xDE\x1E\x93\x53\xA3\xF1\x86\xAB\xA2\x6B\x66\x6D\x2B" + + "\x43\xD4\xB4\xF9\xA8\xA0\xA3\xA1\x9E\x8A\x4A\xBA\xCD\x66\x2A\xB8\x91\x28\xA1\xA6\x35\xB0\xB4\x34\xB4\x4D\x14\xB3\x44\xA5\xCF\x9F" + + "\x2A\xC7\x10\x46\x8D\x49\x06\xAD\xA6\xEB\x02\x8E\x7D\x2A\x92\xBF\x4E\xD9\x57\xA8\x53\x55\x47\x2C\xB5\x15\x70\x4E\xB0\xD3\x50\x49" + + "\x0B\x19\x2A\x4B\xFC\x33\x2C\x93\x4F\xBD\x51\x89\x5B\x44\x85\xDF\xCC\x0C\x58\x7B\xF3\xFD\x41\xFA\x87\xED\x67\x98\x62\xBA\x77\xC1" + + "\x7A\x19\x67\x91\xDA\xCE\xAF\x1F\x5A\xDD\x4E\xE5\xC7\x29\x5B\xA7\x50\x5B\xCD\x4E\xEB\xFD\x22\x05\xC5\xC1\x15\x9C\x96\x46\x08\xE2" + + "\x73\x60\x2E\x52\xA0\xAD\xDE\xAE\x61\xB1\xD9\xD9\xEA\x09\xD0\xFD\x60\xBD\xC1\xD2\xC8\x43\x3E\x67\x8C\x7B\x76\xB7\x8C\x83\x22\x2B" + + "\xE4\xE9\x63\xAC\xF3\x8A\x99\x59\x62\xAE\xE8\x6D\xD4\xA7\x65\xB2\xB9\x15\xAF\x74\xA6\xD5\x27\x6C\x65\xB4\xAE\xCD\x1C\xCD\x5E\x64" + + "\x26\x33\xB7\x3F\x57\x2E\x73\xEE\x45\x67\xE3\x7C\x15\xFA\x7B\x81\x4F\x6D\xF2\x73\x1E\x15\x93\xAB\xD4\x36\xB2\x2C\xF2\x4B\xDC\xC6" + + "\x94\x56\xEE\x0C\x3B\x56\x8F\x33\xDB\x8D\xAB\x13\xFE\xE1\x11\xE6\xC1\xA1\xB9\xF1\x37\xC5\x77\x64\x2B\xE6\xFD\x55\xFD\x3D\xFD\xAA" + + "\xF0\x2F\x66\xDC\xE7\xAE\x10\x72\x0C\x76\x4A\x3C\xF7\x44\xB8\x2E\x7B\xA7\x99\x78\xD6\x0A\xF9\x29\x3A\xA5\x66\xAD\x8C\x8D\xBC\xD5" + + "\x4E\x45\x1D\xD9\x6C\xE7\xD3\xA8\x79\x2C\xBD\x0C\x64\x7C\x55\xEA\x45\x87\xC0\x63\xA9\x22\xE3\x6A\xC0\xF1\xCB\x6E\x2B\xA6\x97\xA0" + + "\x54\xEB\x34\xC5\xA8\x46\x9D\x4C\x28\xB4\xC1\x59\x56\xF2\xBA\xD4\x49\x33\xC8\xF3\x05\x0C\xCC\x1B\xC8\x25\x69\xDC\x3A\xA2\x11\x13" + + "\x95\x05\x73\xF2\xDD\xB4\x4D\x47\xC1\x7A\x36\x9D\x05\x4F\x8A\xF4\x5D\x67\x5D\xAC\xD6\x7C\x55\x36\x89\xA6\xAD\x35\x5D\x6E\x9D\x4F" + + "\x41\x4D\x47\x45\xA6\xCD\x34\xC2\x3A\x49\x20\xF8\xE7\x7A\x8D\x52\x98\x24\x72\x4C\xAD\x34\x2A\xED\x1B\xC6\x50\x09\xB4\xA7\x2D\xFD" + + "\x62\xBA\xA3\x99\xCF\x1F\xFD\x37\xE1\x9D\x24\xC0\x71\xF8\xA9\x42\x1E\x9F\x30\xC8\x72\x8C\xE6\x72\x4B\x9D\xCE\x6D\x5B\x6B\x35\x1F" + + "\x8B\x54\x15\x7B\x5A\x24\x82\xBA\xD0\x9A\x58\xD9\x1E\x49\x6D\xB8\x91\x23\x8E\x42\xFB\x64\xFD\x45\xBA\xC3\xD5\xAE\x79\x89\xE1\x7C" + + "\x93\xA4\x78\xCE\x4D\x57\x31\x7F\x0D\x46\xC7\x21\xE9\xD5\x4C\xE4\x34\x38\xCC\x19\x39\x9A\x33\x96\xCB\x8B\x2D\x9B\x89\xF1\xE6\x2F" + + "\xF5\xFE\x49\x2C\x51\x58\x62\x82\x67\x69\xE6\x1A\x2B\x1F\x7F\x4B\xFF\x00\x66\xDD\x11\xF7\x15\xD2\x6E\x6F\x6F\xA8\x33\x52\x6E\xA0" + + "\x71\xBE\xAF\x71\xA9\xF2\xD8\xAB\x74\xB1\xF7\xF2\x51\xF4\xEF\x15\x8E\xC7\x65\x17\x19\x5E\x3B\x46\x2B\x78\xAA\x9C\xD6\xEC\xD9\x2C" + + "\x75\xAE\x43\x51\x9A\xD5\x48\x71\x6F\x1E\x25\xEB\x5A\xFD\xCC\xF2\x66\xFE\xD1\xD7\xA9\xDD\x39\xF7\x6B\xD6\xDE\x0D\xED\xBB\x01\x83" + + "\xE5\x1E\xDE\x68\xF5\x26\x8F\x19\xE5\xFC\xA3\x27\x76\xAC\xD3\xE0\xB0\x18\x5B\x59\xC8\x71\x52\xE1\x2F\x1C\xBD\x19\xB2\x96\x12\xBC" + + "\x96\xE2\x06\x1A\x19\x48\xAD\x47\x04\x16\x59\x61\x59\x95\xDF\x9F\x40\xAA\xA0\xD2\x69\x35\x5A\xC7\xD3\x67\xA5\xAF\x82\x65\x8A\x06" + + "\x64\x82\xA2\x29\x14\x6E\x8E\x4F\x88\x8D\x51\xDD\xE3\x08\xC5\xD0\xA8\x06\x47\x8E\x26\x2D\xE6\x12\xAF\xFC\x4B\x5D\xE0\x2A\x86\xF1" + + "\x16\x89\xA0\x78\x77\x57\xD2\x35\xEF\x0F\x56\xE9\xE1\xF5\x3F\xF5\x0D\x46\xB6\x82\xAE\x39\x2A\x1A\x0A\xC8\x0D\x15\x6D\x4D\x4C\x70" + + "\x21\xF3\x22\x34\xF2\x17\x69\x25\x48\xE6\x9A\x33\x1A\x47\xB5\xEE\x57\xA8\xDC\xD3\xFF\x00\x4F\x38\x67\x22\xE6\x83\x01\x96\xE4\x27" + + "\x8F\xE3\xE4\xBC\xF8\x4C\x1D\x67\xB3\x93\xC8\x3A\xB2\xA4\x70\x55\x8D\x15\xD9\x9E\x47\x75\x2C\xE1\x24\x11\xA2\xB4\x8E\xA1\x14\x91" + + "\x47\xBC\xCB\xF5\x7D\xEA\x06\x3F\x92\x64\xB1\xB8\xBE\x92\xF1\x6C\x6E\x2A\x19\x64\x58\xF1\xDC\x86\x6C\xC5\xCC\xC5\x73\x0B\xFC\x72" + + "\xC5\x71\xEB\xD8\xC6\xD7\x79\xBE\x44\x72\xD1\xA5\x48\x8C\x64\x34\x43\xBD\x94\xBB\xDD\x5F\x56\xB9\x5F\x3C\xE3\x5C\x07\x3B\x95\xE9" + + "\xCF\x1F\xAB\xCB\xF9\xBD\x5A\xE8\xD8\x2C\x0D\x8B\x31\xD0\xA9\x91\x9C\xCB\x1A\xC8\x25\x9A\x5B\x15\xD3\xFD\x28\x1A\x59\xFE\x35\xB3" + + "\x13\x4C\xD1\x88\xD1\xBB\x9C\x7A\xA3\xEF\x6A\x9E\xDD\x38\xCF\xBB\xCE\xB5\x7B\x8E\xE4\x9D\x5A\x5C\x5E\x27\xA8\x58\x78\xB1\x16\xF1" + + "\x9C\x71\xB1\xAD\x77\x11\x89\xCD\x72\x4C\xD6\x59\xF9\x16\x56\x6C\x04\xD7\xE1\x39\x81\x8D\x82\x8B\x62\xAA\xC3\x62\xF4\xF4\x60\xB3" + + "\x95\xFD\xDD\xB8\xEC\xB4\x75\xA3\xF4\xAF\x84\x34\xCA\x6D\x58\xCB\x1B\x53\xC1\x3C\xA6\x50\xB1\xB4\x92\xDA\x45\x01\x37\x15\x30\x03" + + "\x64\x43\x62\x56\x66\xFC\x6C\x4A\x0C\x21\xB6\x2B\xE3\x5D\x53\x50\xD3\x23\xA5\x34\x35\x6D\x48\xF3\xCA\x91\xB4\x86\x11\x24\x6A\xAA" + + "\xB2\x49\x23\xA6\xE2\xA6\x69\x02\xC6\xAA\x62\xDD\x68\xD4\x87\x39\x20\x8C\x93\x03\xFA\xC0\x64\x9F\x15\x76\x2C\xEF\x48\xB1\xB2\x72" + + "\x56\x91\x3F\xA5\x49\x8B\xCC\x47\x5F\x1B\x1A\x18\xD7\x66\xCE\x23\x29\x90\x5C\x85\x99\xBB\xBB\x98\x2D\x6B\xB5\x95\xD4\x84\x3D\x9A" + + "\x2C\xDE\x30\xBF\xAA\x6F\x53\xF3\xDC\x87\x1B\x87\x1D\x3D\xC4\xE1\x86\x5A\xE3\xD4\xA9\x26\x43\x8E\x5F\x8A\xB9\x9D\x22\x96\x66\x49" + + "\x24\x3C\x9E\x49\x02\xB2\x57\x95\x43\xC5\x14\xA3\xB9\x48\x03\xF0\x66\x11\x83\xAC\xBE\xD8\x3D\xBB\xC1\xFA\x98\x70\xAE\x90\x71\x87" + + "\xA5\x87\xE8\x7E\x4F\x3F\xC5\xAA\xF3\x5A\x54\x72\xB0\x8C\x5E\x27\x3F\x36\x3E\x7B\x79\x2E\x29\x05\xC9\x65\x79\x28\xC1\x7F\x27\x15" + + "\x1C\x5C\xA9\xF2\x31\xA5\x36\x45\xEA\x09\x92\x75\x50\x2C\x0F\xDD\xC7\xB5\xFE\x8D\x74\x62\x6E\x85\xB7\x4F\x31\xF8\xEA\x3D\x47\xC9" + + "\x75\x27\x2B\x17\x1A\xC3\xE1\xA9\x54\xC6\xC7\x77\x8E\xFF\x00\x4E\xC8\x1C\x3E\x31\xB1\x90\xC8\xD1\x4B\x5B\x07\x7A\xCD\x3A\x75\xF2" + + "\x56\x5C\x4D\x76\x4B\x76\x1E\xCC\xAC\xEC\xFF\x00\x1D\xB9\xBC\x2B\x47\x1C\x35\xF3\x1A\x4A\x3D\x94\x6E\xC2\x52\x5C\xB0\x24\x6D\xB7" + + "\x96\x5B\x85\x26\xE0\x00\x14\x5E\xF8\xB8\x3D\x67\x74\xFE\x27\xF1\x54\xD3\x44\x1B\x58\x6B\x0A\x98\x21\x11\x88\x61\xB4\xF1\x99\xA1" + + "\x12\xFE\x18\xE3\x78\xDF\xCA\x91\xAC\x4B\x48\xE5\xFE\x50\xC7\x6A\x93\x63\x3D\x1B\xEA\x0E\x5F\xA9\xBC\x2D\x39\x1E\x7F\x85\xDE\xE2" + + "\x17\x0D\xC9\x2A\x2D\x1B\x82\x72\x2D\xC5\x14\x55\xDC\xE4\x6A\x0B\x75\x68\xCE\x29\xD8\x79\x5D\x62\x63\x1B\x83\xF1\xB1\x12\xC8\x00" + + "\x63\xB3\x5E\xBC\x20\x30\xF8\x19\x90\xEF\x40\x37\x78\xF2\x75\xA0\x58\x96\xFA\x1E\x36\x00\x1F\xC7\x93\xB3\xAF\x3A\x5D\x95\xEA\x05" + + "\xBE\x1B\x8C\xB1\xD5\x0C\x4E\x27\x0D\xCB\x64\x6B\x09\x67\x1D\x88\x91\xA6\xAF\x14\x11\xCA\x63\xA6\xFB\x82\xF6\x45\x56\x69\x2B\xAA" + + "\x4B\x3A\xC5\x6A\x44\x46\x6D\x76\xC6\x41\x45\xD8\x4D\x76\x64\x3D\x9F\x1D\x7D\x05\x21\x64\x61\x27\xE5\xBD\x68\x48\x19\x15\x77\xAD" + + "\x79\xF9\x41\xD9\xFE\x7F\x9C\x96\xA1\x90\xCF\x2A\xA2\xC7\x1A\x87\x6D\xA9\x1B\x99\x63\x51\x70\x00\x59\x0F\xCC\xEB\x8C\x31\x17\x23" + + "\x90\x2E\x07\x5B\xDD\x2A\xC8\x69\xE1\x2E\xD2\x48\xE6\x35\x2C\xD3\x28\x85\xC9\xB0\x2C\x5E\x3B\xED\x46\x1D\xC0\xBE\x41\x1D\x34\x15" + + "\xAB\x13\xF8\xC5\x2A\x6B\xB8\x7C\x4D\xB2\xC7\x5E\x3B\x93\xB6\x4E\xD5\xFE\x0E\xFC\x1D\x10\x18\x0F\x48\xAD\x7A\x92\x19\x17\xBE\xE0" + + "\x90\x92\x1B\xE5\x57\x57\x04\x1F\x1D\x80\xAA\x8E\xD1\xFE\xD2\xA3\x44\x7F\x3E\x9E\xBD\x95\x45\xEE\x7A\x51\xF7\xA8\x3D\xB2\xA9\x3D" + + "\xA4\x9F\x23\x6C\x9D\xDF\x64\xF9\x0C\x75\xF4\x76\x4F\xA6\x52\x5C\x92\xD6\xBE\x3A\x35\xD9\xB4\x00\x91\x2C\x83\xDB\xE7\x47\xE9\x8B" + + "\xA9\x0A\x76\x47\x82\x41\xDF\x76\xFD\x23\xF2\x7C\xA1\xB6\xDC\x5A\xC0\x29\xFC\xEF\x6C\x11\x6F\xDF\x3D\x38\x54\x62\x0D\x81\xE4\x12" + + "\x49\x5C\x5E\xC6\xD9\xCD\x8D\xF1\xC7\xF4\xEB\xCC\xB5\x56\x36\x0D\xFE\xA4\xE0\x0D\x96\x28\x43\xA9\xDF\x8D\x36\xD4\x12\x76\x07\x83" + + "\xDC\x3C\xFF\x00\x3E\x93\x63\x5F\x6A\x8F\x14\xE0\x13\xA2\x44\x8C\xCA\xC4\x8F\xF7\x28\x72\xC3\xBB\xFC\xF6\xF8\xFF\x00\xBE\xFD\x2A" + + "\xEF\x2C\x71\xB0\x92\xA3\x2A\x8D\x93\x2C\x56\x9A\x54\x25\x9B\xCF\x69\x3B\x91\x35\xB5\x23\xF1\x21\x7F\x82\x40\xF0\xC7\xFA\x9C\x70" + + "\x90\xA2\xA4\xAC\xCA\x57\xCC\x76\x16\x59\x3B\x7E\xB6\xCA\x4F\x70\x07\x64\x9D\xFF\x00\xC8\xEE\xFF\x00\x07\x05\x16\xD9\x00\x1C\xDD" + + "\x81\xB8\x38\xB0\xE3\xBE\x4F\xA0\xFD\x3A\x13\x1B\x90\x6C\x38\xB5\x88\x75\xEF\xEF\x7C\x7D\xF1\xFD\xA6\x02\x28\x0C\x08\x79\xD5\x18" + + "\x7F\x7B\x16\x64\x2D\xFE\x1C\x3B\x9D\x12\x35\xDA\x00\xF0\x7F\x8F\xBF\x5F\x6D\x6D\x44\x6F\x24\xCC\xB1\x29\xDB\x14\x59\x81\x6D\x6F" + + "\x61\xA3\x8A\x39\x1D\xBE\xC1\x3E\x40\x23\xFD\xC0\x7A\x42\x3F\x92\x34\x29\x20\xD3\x30\x0A\xA2\x39\x4C\xB0\x6F\x5B\x1B\xD2\xF7\x2A" + + "\x9D\x03\xA7\x1F\x8E\x81\x23\x67\xD2\xD1\xD3\xBA\x01\x71\x71\xE3\x27\xB4\x8E\xE3\x0B\xC0\x8A\x7E\xFB\x11\x11\x1F\xC0\x27\xCB\x13" + + "\xDD\xE0\xEB\xF9\xF4\xDD\x8B\x8B\x6D\x50\xC0\x9E\xF8\xB5\xF3\x6B\x63\xDF\x3F\x9F\x5C\x80\x1C\x96\xB5\xB2\x39\x27\x91\x63\x80\x47" + + "\xEF\x8E\xE3\xD7\xFA\x0D\x1F\x77\x73\x95\x61\xE6\x40\x25\x46\x43\xF6\x0F\x63\x20\xEC\xED\x04\x0E\xE6\x50\x7F\xCF\xD0\x07\xDD\x77" + + "\xAF\x2C\x44\x45\x2C\x6E\x14\x76\xC8\xDF\x2F\x79\xD6\xF7\xE4\x88\xC2\x77\x0D\xEF\xC8\x00\x6B\xEB\x43\xC7\xB5\xAB\x30\xFC\xFF\x00" + + "\x73\x25\xC0\x3B\x74\x03\xEC\x8D\xFF\x00\x70\x8E\x36\x12\xB3\x01\xAF\x1A\x00\x80\x08\x07\x5E\x3D\x39\xED\xB0\xC0\x04\x95\xEB\xF8" + + "\x04\x09\x56\x27\x67\x5F\x27\x41\x56\x43\xD8\x7E\xBF\xB9\x41\x23\x47\xB3\xF9\xF4\xA2\x6F\x20\x60\x5C\x0C\xE0\x1F\xEF\x61\xED\x6E" + + "\x33\x93\xD7\x10\xA0\x91\x7B\xFA\x1E\xDF\xD2\xE7\xB8\xED\xEB\xC7\x49\x47\x56\xAB\x76\xB0\x44\x96\x15\x0C\xCB\x29\x2A\xF2\x12\x75" + + "\xB0\xBA\x85\x48\x1B\x1B\x1D\xAC\x3E\xBC\x82\x3C\x97\x4B\x49\x4A\xB1\x2F\xF2\x2B\x15\x55\x69\x23\x8C\x32\xAE\xB7\xA5\x50\xAA\x0A" + + "\x8D\x68\x16\x93\xBB\x63\xF9\xF1\xEB\x25\xE3\x9C\x23\x99\x72\xB7\x1F\xD0\x68\xE4\x2F\x6D\xC2\xC9\x65\x6B\x19\x29\xC6\xC3\xC7\x6B" + + "\x59\x73\x5A\xAC\x4C\x06\xB6\x5E\x45\x3A\x3F\xDA\xDF\xCF\xAE\xB6\x64\x3A\x63\xED\x3B\xA6\xF3\xF5\x6F\xDD\x0F\x53\xB1\x7D\x3C\xE1" + + "\x30\xDE\xAF\x8B\xAF\x0D\x2A\x76\xF3\xF9\xFC\xF6\x6A\xDC\x36\x2C\xD5\xC0\x60\xF1\x38\xFA\x72\xC9\x7B\x2F\x66\x0A\x96\xA7\x48\x29" + + "\xC3\x79\x21\xAD\x5A\xCD\xDB\x8F\x5E\x9D\x5B\x36\x63\xB0\x69\xBE\x1E\xD6\xB5\x51\xE6\x51\xE9\xD3\xBC\x23\x2D\x54\xEA\x21\xA4\x51" + + "\x8B\xB3\x54\xCA\x52\x11\x6B\x76\x72\xD8\xB0\x04\x9B\x75\x13\x5D\xAC\xE9\x7A\x79\x09\x55\x5D\x0A\x4B\x7B\x0A\x75\x6F\x32\xA1\x8E" + + "\x08\x02\x08\xC3\x4B\x9B\xE3\xE5\x03\xFE\xAB\x03\x91\x74\x70\x56\xB2\xD3\xC1\x4A\x95\x6B\x17\x2D\x4C\xCB\x1C\x30\x57\x81\x64\x91" + + "\xD8\x80\x34\x89\x0F\xC8\x58\x00\x49\xDB\x6D\x57\x5D\xC4\xA8\xF5\xBE\xB8\xF7\x45\x31\x54\x2E\xE2\xDF\x9E\x47\x93\x9E\x5B\x8E\x9F" + + "\x06\x03\x09\x8B\xB9\x94\x92\x35\x25\x4F\xCF\x9F\xC9\xD2\xAD\x2D\x3C\x25\x30\x0F\xE6\xF6\x6C\xD6\x0D\xB6\x48\xEC\x7C\x80\xA7\xAA" + + "\x48\xC9\xFE\xB7\x9C\x9B\x9B\x64\x2C\xF4\xEF\xF4\xDD\xF6\x59\xCD\x7A\x97\x9E\x97\x75\x57\x9E\xF5\x07\x1B\x76\xE0\x49\x09\x08\xB7" + + "\x2E\xF1\x6E\x19\x3D\x91\x0D\x29\x5D\x84\xF1\xD9\xCC\xF3\xBC\x04\x10\xAE\x8D\x9C\x7C\x60\xBA\x26\xBF\x93\xDA\x67\xEA\xA5\xEF\xBB" + + "\x2F\x76\xA7\xBB\xEF\x77\xD8\xCE\x8D\xF1\x05\xFD\x85\x9C\xEF\x45\xBA\x7B\x99\xA4\x6F\xE3\x71\x99\x4E\xF6\xA3\x4F\x37\xC2\x38\x15" + + "\xEC\x47\x1F\x10\xD9\x54\x98\x51\xB3\xCC\x39\x16\x7E\xEB\x18\x98\x9F\x9D\xA1\x70\xBA\xA7\x87\x7C\x01\x43\x4E\xD1\xD4\x6A\x68\xFA" + + "\xC5\x48\x20\xAD\x34\x41\xE0\xD3\x23\x65\xC9\x12\xD4\x4A\x15\xAA\x59\x6C\x49\x50\x8B\x11\x01\x81\x47\x5C\xF5\x40\xD6\x7C\x5B\x5D" + + "\x38\x92\x1A\x17\x5D\x36\x02\x08\xF3\xE5\x65\x92\xBA\x41\x8F\xF9\x70\xC6\x59\x60\xBF\x62\x5F\xCC\x18\xCA\x64\x75\xD4\xDE\x4D\x7A" + + "\x77\xC5\x78\xD4\xD8\xBC\xCC\x9C\x57\x8E\xF1\x59\x2B\xBD\x79\x6B\xE5\x2C\x63\xB1\xB8\xD9\x20\x91\x74\xEB\x2B\x5C\x96\x18\xA4\x67" + + "\x1B\x26\x46\x66\x91\xDB\x6E\x59\x9B\xCF\xAA\x35\xF7\x7D\xFA\xB7\xFB\x6C\xF6\x4B\xD4\xAC\x37\x48\x7A\x29\xD0\xCB\x1E\xE1\x7A\x8B" + + "\x7B\x0F\x57\x37\x90\xB5\xC6\xF9\x1C\x18\xCC\x56\x22\x3C\xA5\x9B\xB0\x51\xC6\x56\xCE\xB6\x13\x98\x65\xF2\x99\xA9\xD2\x94\x96\xE6" + + "\xA5\x8D\xC4\xC7\x56\x1A\x93\x53\x90\xDE\x9A\x69\x9E\x28\xA4\xC7\x5D\x78\x7E\x1F\x87\x63\xB8\xAF\x0A\x8F\xA4\x5D\x4A\xE4\xB2\x74" + + "\xBB\xA7\x3C\x3B\xA7\xD8\xCE\xAE\x5A\xBD\xCB\xDB\x0F\x6F\x19\x83\xC1\xD7\x99\x6D\x3C\x14\x70\xD9\x4C\x2D\xDB\x02\x7B\x73\x2E\x4A" + + "\xDD\xBB\xF5\x2C\x4D\x7D\x27\xAE\xF2\x3C\x55\x20\xED\xA4\x9F\x69\x9C\x56\xBF\x50\x3A\xF7\xFA\x8D\xFB\x82\xB9\xCC\x39\x2F\x0C\x6E" + + "\x8C\xF1\xDA\x38\x0E\x3D\xCD\xB8\x9C\x3C\x72\x0E\x45\x81\x6E\x2B\x88\xC8\x5C\xCD\xD7\xC6\xD8\xE5\x5C\x7B\x93\x52\xA0\xB6\x87\x14" + + "\x9E\xA6\x45\xD6\x82\xDB\x35\x6C\xCD\x14\x56\x2B\xB3\x92\x34\xDA\xFA\x3A\x52\xF4\xA6\x1A\x3A\x24\x9E\x05\x92\x3A\x79\xCD\x24\x0F" + + "\x25\x2C\x11\x23\x48\xE9\x01\x95\x02\xC6\xA4\xA2\x81\xB6\xC8\xB7\x36\x39\xB9\xA3\xD1\x35\x47\x95\x39\x96\xAE\xAE\x48\xA6\x70\xF3" + + "\xC0\x2A\x24\x48\xE7\x95\x98\x28\x79\x4C\x52\x96\x72\x01\x24\xEE\xC9\xE0\xDC\x1B\x75\xFB\xAA\xBF\xA8\xAF\x54\x3D\xC9\xE4\x93\x29" + + "\xC9\x3F\x47\x6C\xF7\x54\xE6\x88\x97\xC6\x27\x53\xF2\x5D\x74\xEA\x86\x0E\x83\x92\x57\xBF\x19\xC7\xEC\xF0\xAC\x5F\x1D\xC6\x16\x1F" + + "\xDE\x31\xB4\xAA\x06\x07\xF2\x63\xE4\xFA\x39\xD1\x3F\x72\xBE\xF2\xB8\x6F\x3B\xE3\x79\x8E\x19\xFA\x2E\x74\x67\x82\x71\x53\x95\xC7" + + "\x56\xE5\x93\x70\xFF\x00\x6F\x3C\x83\x8E\x73\x8B\xDC\x3E\x4C\x85\x69\x33\x94\x30\x9C\x9B\x3B\x95\xC6\xD1\xAF\x94\x9A\x9C\x4C\xD4" + + "\x64\xCA\x52\xB5\x8F\xFD\xF4\x75\xA4\xB7\x59\xE2\x46\x22\x48\x70\x5E\x73\xD6\x3E\x1F\xEC\x9B\xDA\x5F\x53\xB9\x97\x55\x3A\xA5\xD4" + + "\x3E\xB0\xFB\xAB\xEA\x47\xB7\x8E\x2B\x95\x7E\x4B\xCE\x33\x18\xBC\x66\x26\x0E\x73\xCB\xFF\x00\xAE\x5C\x9B\x8D\x50\xE1\xA3\x8C\x49" + + "\x8A\x65\xE2\x55\x64\x5B\x90\x41\x3F\xED\x72\x90\xC4\xF5\xF2\x50\xCF\x8F\x96\x7A\xD2\xE5\xF6\x3D\xED\x7B\x9E\xBD\x91\xAD\xCC\xB0" + + "\xF7\xBA\x4F\x07\x4F\xED\xFE\xA1\xCB\xEC\xFF\x00\x8E\xF0\xF7\xE0\x7C\x82\xCF\x22\xE4\x9C\x32\xAF\x22\x6E\x39\x9C\xE4\x37\x39\x63" + + "\x73\xA4\xA9\x4F\x39\x46\x4A\x39\x69\xEA\x3D\x0E\x39\x25\x27\x35\x5B\xF7\x30\x85\x42\x8C\x92\xAB\x24\x89\x24\x95\x13\x6F\x21\x1C" + + "\xAA\x43\x00\x20\xB8\x42\x77\x10\x8B\x7F\xF9\x91\x96\x03\x75\xF7\x6D\x21\x88\xE9\x43\xE5\x6D\xDA\x90\x26\xD3\x75\xB3\x4F\x3D\xB1" + + "\xF2\xDC\x0D\xD8\x37\x0D\x62\x38\xB0\x6B\xE7\x36\x57\xCB\xBD\xD8\x72\xDC\x57\x4D\x32\x79\x0E\x85\x7B\x2C\xEB\x2E\x5B\xA8\xB9\x5C" + + "\x44\x89\x85\xE2\x9C\x9B\x13\xD2\xEE\x9B\xE1\x68\x66\x1E\xBB\xFE\xC8\xF3\x0C\xCD\xCE\x78\xEA\x31\xD4\x67\x93\xBA\xC2\x60\xEA\xE7" + + "\x27\x9C\x06\x82\x01\x12\xCC\x6C\xC5\x49\x36\xF9\x17\xFF\x00\xA4\x27\xCA\x32\x50\x61\xAF\x75\x63\xA7\x5D\x39\xBB\x91\x0E\xD5\x71" + + "\x1F\xBB\xF6\xDB\x8D\xBA\xD1\x12\x4B\xAD\x6A\xF8\xEE\x39\x9F\xCC\xBA\x44\xBE\x4B\x42\xD2\xC8\xAA\xBD\xC6\x46\x7F\x3E\xA5\x4F\x1C" + + "\xF7\x35\xEE\xFF\x00\x98\xFB\xAF\xEB\x0F\xB4\x5A\x15\xA8\x55\xCE\xF4\x8F\x99\xF2\x7E\xAA\x4D\xD4\x24\xE3\x38\xDA\xF8\x2C\xDF\x40" + + "\x33\x7C\x26\xB5\xCE\x8E\xF0\x32\xF6\x12\xC4\x09\xCA\x73\xBC\xF7\x2E\x98\x8C\xF6\x72\x08\xE1\xB6\x98\x4E\x2F\x9B\x9E\xA3\xC5\x6D" + + "\xBE\x58\x6B\x92\x7C\xBE\x36\x8F\xB5\xCE\x17\xFD\x53\xDA\xEE\x63\xAC\xBE\xF9\xEB\x75\x2A\x8E\x5B\xAF\xF8\xEE\xAB\xF4\x63\xAF\x76" + + "\xBA\xD5\xFF\x00\xA8\x69\xCF\x6A\x3C\x1C\xAB\x88\x75\x63\x81\x63\xB1\x27\x03\xC3\x70\x75\x65\x7B\xB8\x4B\x18\x9E\x6D\x53\x8E\xFF" + + "\x00\xD3\x75\xE8\x61\x28\xD3\x2F\x6E\xE5\x7F\x47\xAC\x90\x4C\x55\x8C\x95\x2B\xE5\xAC\xA0\x90\xCB\x00\x2F\x1B\x46\xAE\x8A\x52\x37" + + "\x67\x7B\x93\x75\xB9\x51\xB5\xB6\xFA\x14\xA9\xA2\x58\x77\x01\x14\x6F\xBD\x91\xBF\x9A\x0C\xC4\x5C\x5D\x4F\xCC\x50\x2A\xD8\x02\x48" + + "\xC9\x05\x43\x1E\x3A\xDE\x39\x1F\x67\xBF\xAE\x67\x38\xAB\x62\x4E\x4F\xEF\xAA\x0C\x0C\x92\x43\x23\x2D\x2C\x37\x57\xB9\xCF\x1E\x79" + + "\x64\xEC\x62\xB0\x06\xE0\xDC\x17\x17\x5E\x0E\xF3\xB4\xDC\x72\x94\x8C\x10\x40\xD7\x8F\x4B\x7E\x96\x3E\xEA\x3D\xE7\x70\xAC\xC7\xB8" + + "\xEE\x87\x75\x23\xA8\xB9\x5E\xA8\xF2\xCE\x9E\x75\x3E\x97\x1C\x9A\x3E\xAA\xF2\x0E\x41\xD4\x69\x30\xD9\xBA\x27\x90\x62\x33\xB4\x70" + + "\xFC\xBB\x37\xCA\xA8\x0A\x78\x4B\xB7\xB1\x09\x34\x70\xD9\xC9\xC3\x45\xA5\x8B\xF7\x95\x85\x59\x2C\x5B\x13\x6E\x2E\xA1\x63\xFD\xE8" + + "\xF3\x6E\x55\xD6\x2C\x5D\x1A\xDE\xE4\x78\xCF\xB8\x1A\x9E\xE3\xB8\xBC\x7E\xDE\x33\xDC\x73\x27\xC8\x30\xBE\xD7\xF0\x1E\xDE\x71\xF9" + + "\x8E\x29\x62\x4C\xD7\x29\x92\x96\x41\x3A\x75\xCA\x16\xFF\x00\x19\x8F\x96\x7F\xD6\xB8\x4E\x67\x57\x3B\xCF\x6E\x66\xEC\xD5\xC7\x60" + + "\xF1\xD0\x56\x8E\xB7\xED\x62\x3F\xB4\x89\x6B\x2F\xBA\x4F\xD4\x06\xC6\x6E\x09\xAD\x62\xE4\xF7\x37\xC9\xA1\xBE\xB4\x72\x75\x70\xF9" + + "\x17\x92\x3E\x59\xCF\x10\xFE\xCE\xE5\xFC\x37\x20\xA5\x19\x62\xC8\xAA\xB3\x63\xA6\x04\xB3\x01\xF4\xBB\x41\x40\x8A\xA6\x9C\xC4\xF5" + + "\x23\xE6\x91\x59\xA5\x95\xDB\x70\x08\xC3\x69\x5B\x59\x58\x15\xB9\x4B\xD8\x06\x42\x72\x6C\x16\xC4\xD1\x4A\xAF\x15\x39\x01\x43\x00" + + "\x90\xA8\xB1\xDC\x99\x16\x65\xB8\x21\x88\xBE\xE1\x90\xC3\x1B\x4F\x57\xD1\xD7\x4E\xA7\x72\x0A\xDD\x34\xE0\x99\x3E\xB9\xE4\x7A\x7D" + + "\xC5\x39\x0E\x6F\x9D\x64\xF1\x1C\x76\x2C\x0E\x42\x3B\x18\xEB\x55\xCE\x0A\x8D\xA8\x29\xD8\x65\xCF\x66\xE0\x39\xA6\x98\x64\x5A\x58" + + "\x69\x65\xAD\x42\x2A\x47\x52\x60\x41\x79\x0F\xA8\xB1\xCF\xF3\x39\x2C\x07\x0D\xE4\x1C\x93\x8B\x61\xE4\xE5\x19\x0A\x38\xF3\x66\xB6" + + "\x16\x95\x9B\xAD\x35\xF9\x19\xE2\x46\x58\xA0\x81\x6D\x31\x55\x86\x57\xB5\xFE\x84\x2F\x27\xC7\x11\x29\x1C\x9E\x37\x1A\xBF\x50\xBA" + + "\x9C\x7A\x87\x45\xFD\xA4\xBF\x1A\xE9\xE7\x2B\xE9\xD6\x3A\x5F\x79\x32\x99\xE1\xE5\x56\xEE\xDC\xB7\xC9\x6D\x5A\xE9\x23\x06\xE4\xF4" + + "\x2C\x5D\xA3\x8B\x49\xB1\x77\x61\x86\x1C\x54\x27\x1D\x8F\xAD\x8E\x6B\x58\x5B\x8F\x04\x65\x8C\x8E\xD2\x33\x96\x8E\x65\x47\xA6\xD7" + + "\xAC\x70\x2A\x15\xB3\x5C\x9D\xB0\xB5\x46\x02\x85\x93\x4A\xAD\x79\xE6\x61\x5C\x4B\x0D\x96\xBB\x6E\x2A\xAF\xBA\xAF\x61\xA3\x04\xC6" + + "\x0C\xCA\x8A\xE4\x86\x20\xE1\x9F\xC4\x58\x80\xF1\x81\x76\x11\xBA\xCC\x9A\x73\x30\x95\xF6\x45\xB4\x47\x14\x64\x4D\x20\xDA\x52\x32" + + "\xAB\x69\x1C\x00\x42\xEE\x2A\x6D\x9E\xB4\xCF\x07\x31\x1E\x19\x01\x37\xA1\x8E\x4D\x41\x57\xCA\x40\xD2\x7F\xCD\x76\x53\x12\x12\xFB" + + "\x9C\x13\x75\x52\xCE\x0B\x00\x2E\x6F\x6E\xB9\x2E\xF7\x7F\xEE\x5F\x2F\xCB\xF9\xB5\x8E\x13\xCA\xF8\x8E\x7F\x92\xC9\x89\xC7\xDD\x9A" + + "\xAA\xD4\xBB\x94\x39\x4A\x14\x72\x56\x6A\x40\xC2\xBE\x46\x2C\xE6\x32\xFD\x9B\xB2\x5B\xC4\xC3\xF0\xFE\xDE\x01\x32\x22\xBA\xD6\x0B" + + "\x23\x4E\xAB\x02\x32\x1C\xB7\x85\xC7\x91\x97\x2F\x36\x0B\xA9\xFC\x7F\x35\x73\x13\x73\x0F\x6B\xB3\x9D\xE3\xDF\x23\x98\xC7\x5B\xAE" + + "\x60\x7C\x76\x42\x1E\x65\x73\x3D\x98\xA2\xAE\x59\x4A\x5B\xAA\xD1\xBC\x31\xB6\xAA\x54\x13\xB4\x56\x60\xBA\x2F\x6F\xDE\xD9\xB0\xFD" + + "\x6D\xF7\xB5\xD7\x6E\x25\xD4\xB7\xFF\x00\xA4\xB9\xE7\x17\xE8\xED\xB9\xB8\xD6\x0E\xF6\xF2\x35\x71\xFC\xBA\x5C\xED\xBA\x30\xE4\x2D" + + "\x63\xE4\xBA\xA9\x9B\xAF\x86\xF9\x5B\x25\x1E\x3A\xBD\xC3\x5A\xCC\x30\xFF\x00\xF2\x49\x8D\x16\x60\x92\x1B\x7E\xAA\x5E\xCF\xFA\x57" + + "\xD1\x7F\x70\xDD\x22\xE3\x7D\x36\x14\xE9\x41\xC8\xF8\x2F\x14\xB9\xD6\x65\xC4\x24\x35\x68\x62\x73\xD2\xE6\x13\x07\x77\x95\x45\x84" + + "\x4B\x33\xB6\x14\x72\x68\x52\x5C\xEC\xD8\x8A\xC6\x5A\xF8\xFF\x00\x97\xF7\x11\x2C\x54\x9A\x32\xBE\x8C\xD2\x25\xA5\xA6\xA0\xD3\xE4" + + "\x8E\x1F\x90\xD0\x42\xFE\x69\xAA\x9A\x68\x0B\xD4\x42\x6A\x19\x23\xA7\x32\x0A\x73\x18\xF3\x49\x86\x45\x40\x37\xB0\x75\x5D\xE7\x78" + + "\xC9\x2A\x83\xBD\x64\xF0\x34\x92\x2C\x82\x69\x0E\xC1\x1A\x23\x81\x1B\x04\xDE\xF2\x5B\x7E\xFF\x00\x97\x6B\xA9\x37\x36\x2A\x58\x81" + + "\xB7\xAA\xF8\xC4\xF5\x03\x03\x88\xC7\x9E\x3E\x30\x1C\xF2\x8F\x1D\x36\x52\x3B\x18\x6B\x3C\xBF\x3C\xDC\x70\xFE\xE6\x03\x4C\x5A\xBD" + + "\x8C\x13\x8C\x73\x58\x49\x26\x33\x40\xE6\x94\x81\x58\xC4\xD1\x1F\x92\x25\x69\xAF\x1B\xDA\x87\x3E\xE4\xBC\xC7\x37\xC7\xB0\x5C\x6B" + + "\x98\x67\xF8\xBE\x21\x68\xE6\x86\x4C\x53\xCD\x55\x7C\x26\x26\xAD\x5A\x56\x1A\x4C\xDE\x3E\x7B\x12\x55\x9C\xD2\xAB\x2C\x89\x68\xC3" + + "\xFB\x78\x85\x45\x58\xE6\x92\xF3\xA3\x3B\xA6\xC2\xF7\x81\xFA\x5E\x7B\x7C\xE9\x67\xB6\x4E\xAE\xF5\x23\x8C\xE6\xEA\xE2\xE8\xF1\x2E" + + "\x1F\xD2\xEB\xBD\x32\xB3\x8F\x47\x8A\x59\xED\x53\xB1\x46\x87\x24\x7E\x43\x71\xB2\x53\xE3\x79\x24\xBD\x45\xB9\x94\xA9\x7A\xB4\xF4" + + "\x28\x63\x64\xA0\xF4\xE9\x2D\x79\x26\xAE\xD6\x92\xD6\xC4\xFD\x36\xBA\x03\x9E\xBF\x86\xE5\x1C\x97\x9B\x70\x3E\x45\x85\xC0\x65\xBA" + + "\x75\x47\x03\xC4\x73\x99\x9A\x94\x3F\x69\x98\xA7\xC9\x28\x49\x46\xDE\x53\x8B\x24\xD8\x88\x32\x90\xD7\x5C\x5D\x6A\xAD\x29\x9E\xF6" + + "\x53\x1B\x94\x8E\xC5\x3B\x31\x18\xD8\x69\xA8\x5F\xC4\xFA\x9A\x68\x74\x00\x64\x49\x22\x77\x96\x71\x1C\x15\x15\x3F\x14\x01\xDF\x40" + + "\x89\x51\x4E\x26\x17\x49\x59\x4C\xC5\xD2\x2D\xE7\x62\xC7\xB8\x91\xB8\x9B\x37\x82\xE2\x92\xA3\x55\x0F\x03\xDD\x57\x6A\xC9\x32\x46" + + "\x62\xC1\x8E\x76\x31\xCB\xB4\x90\xE9\xBB\x60\x05\xC2\xFC\xE5\x88\x00\xED\x06\x18\x75\x5B\x91\x73\x7C\xAF\x52\xA8\x74\xD7\x03\xC9" + + "\x28\xF5\x3F\x0D\xCB\x39\x9F\x18\xC1\xD9\xEB\xA6\x67\x21\x3F\x2D\xA4\x32\x90\x51\xCC\xCD\x8D\x34\x2A\x62\x73\x4D\x14\x7F\xD3\xE9" + + "\x3E\x45\x5A\xA6\x57\x35\x79\x6F\x4F\x5E\x47\xA5\x62\x82\xA3\x7C\x38\x47\xFD\x27\xC7\xE2\x9B\x2B\x6A\x3F\x71\x9C\x37\x23\x6E\x4B" + + "\xF3\xE3\x72\x94\x71\xFD\x1E\xE6\xD6\xB3\xAD\x5F\xB9\x5E\x75\x97\x17\x8D\xE6\x76\xB2\x09\x5A\xDC\x6C\x8B\x47\x3A\xF4\x3F\xA7\x59" + + "\x01\xA4\xAD\x3D\x95\x56\x03\x73\xF5\xF3\xDB\xBF\x5C\x7D\xAF\xF5\x5F\x83\x57\xC6\x61\x70\x99\x1E\x8A\x5C\xE4\xD9\x8C\xCF\x16\xE6" + + "\x0F\x72\x39\xB9\x47\x24\xE6\x9C\x4F\xA4\x5C\xF3\x39\x46\x3E\x47\x80\x39\x26\x83\x10\x63\xB4\xF9\x0A\xF0\x45\x85\xC4\xE3\x29\x58" + + "\xA7\x56\xB7\xEE\xE5\x9A\xC7\x69\x69\xB5\xD6\x8F\x68\x1E\xDE\xBA\x49\xED\xCF\xA8\xFD\x69\xE3\xBC\xA6\xA6\x56\x2E\x6D\xC1\xBA\x5B" + + "\x73\xA4\x12\x41\x4B\x0F\x53\x23\x3F\x3E\x92\x2E\xEB\x39\x7C\x6F\x26\xC6\x57\x7C\xFF\x00\x37\xB3\xD5\xA9\xF2\xAB\x6B\x37\x84\xC8" + + "\xAD\x9C\x6E\x2F\x19\x5B\xB7\x11\x57\x19\x43\x0F\x8F\x9F\x0D\xE4\xBA\xFF\x00\x0A\x78\x93\xC4\x1A\x8E\xBD\xFF\x00\x0F\x6A\xFE\x1F" + + "\xD0\x28\x74\xAF\x0D\xE9\xBA\xFD\x4F\xC3\xE9\xFE\x1F\xD4\xE7\xD5\xAA\xEB\xA6\xD7\x61\x35\x1A\xD5\x6F\x88\x3C\x3D\xAA\x55\xD3\xD4" + + "\xA5\x2E\x87\x15\x31\x92\x94\xAC\x34\xEF\x65\x48\x64\xBB\x98\x74\xF7\xD4\xB4\x9D\x1E\x92\x85\x6B\xF4\xEA\xCD\x52\xAE\xAB\x53\xAD" + + "\xD3\x69\xCD\x45\x46\xA7\x49\x15\x14\x34\xEB\xA7\xCA\x12\x8A\x2D\x3B\x52\xA6\x59\x21\x69\x75\x19\x26\x0B\x31\x32\x4A\x18\xB1\x75" + + "\xF9\x44\xB5\xBD\x5F\x05\x8B\xA8\x28\x8E\x23\xD6\xFE\x11\xC6\x29\xE1\x45\x8C\x94\x49\xD4\xBE\x05\xCD\xEB\x23\x64\x5A\x1B\x29\x76" + + "\xDD\x49\xB2\xFC\x8B\x88\xE1\x1A\x77\xA5\x2B\x24\x55\x6A\xE3\xA6\xC8\x2A\x89\xA4\x79\xED\x77\x81\x16\x69\xD2\xEF\x71\xFE\xE6\xFD" + + "\xBA\xF3\x2E\x05\xC2\xF8\x54\x43\xDC\xC7\x0A\xE4\xFC\x60\x64\x38\xFF\x00\x11\xE9\xFD\x7E\x6F\x5A\xC6\x23\x13\x87\xCA\x8C\x2B\x8C" + + "\x6D\x2C\x86\x43\x96\x0C\x5D\x2C\x74\x9D\xD5\xA5\xA2\x95\xA1\xAD\x19\x54\xAA\xE2\x89\xA4\x16\x4D\xF5\xEC\x9F\xDB\x27\x0D\xF7\x3D" + + "\xC3\x3A\xB1\x86\xE6\x5C\x92\xEF\x1E\xE6\xFC\x7B\x96\xF0\x48\x46\x26\xFE\x22\x2C\x95\xBA\xBC\x0D\xBE\x1C\xDE\x56\x67\xE2\xD9\xA3" + + "\x51\x51\xB9\xBC\xB1\xDF\xE3\xB1\x66\xEF\xD5\xB1\x2E\x1A\xBE\x29\x6C\xE2\xE1\x0B\x7E\xE4\x77\xF1\x49\x6E\x75\xAB\xA2\x1E\xFA\xB2" + + "\x3C\x37\xD9\xE7\x4C\xB0\x9D\x55\xE1\x7C\x2B\x8D\x4B\xC3\xAF\xC5\xC8\x6D\x3C\xD5\x38\xDF\x08\xCB\xF5\x22\xEC\xB9\x66\x4C\xEC\xD9" + + "\xEC\x33\xB6\x43\x8F\x67\xA8\xE7\xB8\xED\x7B\xB7\x6C\xE4\xEF\x5E\x8B\x05\x33\x5E\x87\x27\x7D\xAC\xDC\x70\xF0\x9F\x86\x3C\x6B\xA5" + + "\x41\xE1\x9F\x13\x6B\x3A\xEE\x8D\xA9\xE8\xBE\x21\x5A\x9A\x0A\xAD\x3A\xA2\x87\xC3\xB4\x93\x1A\x6A\x7D\x2F\x5A\xAC\xD3\x59\xB5\x7D" + + "\x3F\x45\xD2\xEB\x99\xE9\xAB\x60\x57\x31\x09\x42\xC5\xF1\x32\x46\x7C\xEF\x3A\x56\x88\xF2\xEB\x1A\x3D\x63\x6A\x3A\x55\x1E\x97\x59" + + "\xA7\xEA\x3A\x6B\x47\x53\x05\x45\x24\xFA\xB5\x4A\x89\x65\xAC\xD3\xA9\xEA\x87\xC0\x55\xD7\x55\xC2\x3C\xD8\x18\xAB\x31\x0C\xD2\x79" + + "\x48\xC7\x6F\x96\xAA\xEC\xBF\x52\xAB\x5C\xA6\x3E\xA1\xDE\xB7\xC9\xBA\x85\x91\xE4\xFC\x62\x9E\x37\x0B\x9B\xE3\xDD\x16\xA9\x9D\xC7" + + "\xE3\xAB\x53\xE5\x09\x5E\x8D\x55\x80\xA5\xC6\xC9\xCD\xFB\x81\x04\xF9\x7C\xAF\xEF\x57\x00\x2D\x45\x14\x72\x55\x86\xC4\x12\x4E\xB2" + + "\x9A\x98\x8B\xA8\x16\x72\xB8\x1C\x4D\x4C\xC9\xC5\x71\x4E\x3D\x0E\x67\x28\x30\x3C\x47\x27\x7F\x9D\xDE\xC7\xE1\x27\xC6\xDE\x68\x27" + + "\x05\x6E\x72\xA4\xA7\x4A\x78\xED\x99\x17\xBD\xE0\xAA\x1E\x69\x34\x35\x24\xA6\x25\xBE\xCF\x7C\x1E\xC5\xB9\xE7\x37\xE4\xBC\xDF\xAF" + + "\x1D\x37\xAB\x87\xEA\x2F\x2A\xCB\x47\x8C\x7C\x67\x03\xCB\xC8\x98\x0A\x18\x91\x4A\x9D\x4A\xB7\xB2\x2F\x9A\x1C\x9B\x02\xD9\x70\x29" + + "\xD3\x96\x38\x31\x32\x8A\xC5\xA4\xB8\x3F\xF7\x6E\xB1\x34\x72\x43\xFF\x00\xD3\x6B\xDA\x6F\x00\xF7\x57\x88\xEB\x5D\x4E\xA5\x65\xF1" + + "\x78\xDE\xA9\x71\xFB\x3C\x7B\x2D\x81\x8D\xB0\xBC\x7F\x94\x43\xC6\xA3\xE4\xDC\xFB\x93\xE5\x79\xBE\x56\xAF\x15\xCE\xC5\x77\x07\x90" + + "\x9A\xF1\xC2\x43\xC4\xD2\x7B\x70\x5E\x5E\x2D\xF2\x49\x34\x25\xEE\xD8\x85\xE4\xD5\x34\x68\x6A\x35\x64\xA0\xA2\xD2\xAA\x69\x20\x9E" + + "\xAA\x58\xE9\x66\x9D\xD2\x19\x2A\xD2\x38\x28\xF5\x2A\xB9\x21\x34\xF5\x31\xC9\x4F\xE4\x99\x63\x8B\xC8\x6D\x9B\xA7\x26\x62\xF2\xA9" + + "\x17\x1A\x56\x8D\xAD\x68\x3A\x36\x9F\xA9\x57\xEB\xD4\x7A\xC6\xB5\x07\x87\xF4\x7A\xBD\x5A\x2D\x0E\x19\x6B\x74\x3D\x14\xEA\xB5\xFA" + + "\xF7\x83\x74\x5A\x4A\xEF\xF5\x3D\x02\xBF\x4E\xD5\x6A\x2B\x3E\x02\xA7\x50\x5A\xD6\xA9\x99\x62\x82\x48\x74\xE5\x8A\x39\xC3\xC9\x19" + + "\xAE\x7A\x1D\x42\xC0\x63\xB3\x19\x4E\x45\x1E\x4A\xED\x7C\xD6\x42\x8D\x8A\x53\x49\xC6\x64\xE6\x9C\x5F\x09\x29\xB4\xA0\x24\xD6\xE9" + + "\x62\xA5\x5B\xD6\xA2\x84\xAF\xC8\x95\x71\xF9\x8A\x18\xD9\x64\x58\x0C\xF0\x49\x18\x91\x2C\xE7\x1D\x2F\xEB\xF7\x38\xE8\xF6\x4A\xC6" + + "\x67\xA6\x5C\xC7\x11\x8A\xBB\x1D\x25\xC8\xDD\xC7\xE1\x13\x92\x43\x57\x25\x5F\x13\x56\x68\xEB\x26\x4E\x85\xBE\x45\x77\x19\x62\xCD" + + "\x68\x64\x08\x23\xC9\x53\x9A\x7D\x16\x69\x22\xD3\xFC\x8B\x23\x3D\xD2\x74\x7F\xDB\xE7\x1C\xFD\x44\x71\x9D\x3D\xE2\x53\x63\x78\xEF" + + "\x43\x1F\xA8\x9D\x35\xC3\x73\xC1\x8A\xB4\x8B\xC7\x78\xAD\xFC\xB5\x8C\x32\xF3\x6C\x4D\x6B\xCC\x65\xA7\x8A\xA1\x52\x6B\x32\x47\x69" + + "\x18\xAD\x3C\x14\xD3\x5C\xAC\xA9\x0C\x14\x3E\x28\xA7\x27\xEA\x33\xEC\xF3\xDB\xFF\x00\x42\x7A\x09\x9F\xE7\x5C\x61\x31\x98\xFE\x7F" + + "\xCC\x7A\xA4\x0F\x05\x5A\x18\xDC\x2E\x1E\x58\x78\x9E\x5F\x00\xB5\xEF\xF0\x9A\x75\xB0\x75\x6B\xB6\x7F\x0D\x88\xAD\x8B\x8B\x34\xB9" + + "\xDC\xC0\xBD\x99\x39\x5B\x4D\x25\xBC\xA3\xC9\x97\xB1\xFB\xB7\x09\xE1\xCD\x79\xE3\xD7\x66\x6D\x5A\x8D\x93\x44\x9E\x64\x99\x65\xA5" + + "\xD3\x1E\x3A\xA2\xA0\x3C\xBB\x6F\xA7\xA3\x45\x1C\xA1\x55\x06\xD2\x03\x4C\x4A\xFC\x8C\xAD\x2F\x56\x8A\xEF\x18\x7F\x0E\xEA\xA5\xF0" + + "\xA6\x95\x5D\xE0\x4A\xD6\x8B\xC6\x74\x34\x73\xC5\x24\x3A\xEF\x8D\xD2\x6D\x34\x3B\x49\x4F\x45\x2C\x89\x37\x8B\x6A\xA2\xD4\xE7\xA3" + + "\x99\xCC\x8B\x2D\x44\x72\x08\x69\xED\x36\xC9\x95\x84\x03\x3A\x4F\x70\x7E\xE3\xFA\x91\xED\x33\x97\xF2\xCE\x63\xC7\xB3\x7D\x0B\xE5" + + "\xF4\xDB\x15\x5F\x03\xC9\x7F\xA7\x64\x31\x33\xF2\x3C\x5C\xB5\x60\xB5\x63\x2F\x8C\xA9\x9A\x4A\x36\x31\xA6\xE1\x71\x52\xBD\xA4\x92" + + "\xDD\x66\x33\xB4\x90\x94\x71\x18\x4A\x4B\xA7\x97\xC6\xF1\xBC\x95\xCE\x72\xBC\xA3\x9D\x64\xF9\xC6\x40\x72\x7A\xD9\xF9\xF0\xDC\xFF" + + "\x00\x25\x82\xAB\x1C\xA7\x22\xD4\x6D\x36\x4E\xC7\x1C\xB3\x07\x20\xCC\xCB\x7B\xE2\x87\x25\x19\x39\xDA\x18\xD8\xD6\xFD\x64\x96\xB5" + + "\xC4\xF8\xFE\x5B\xE3\xC1\x74\x7B\xAF\x7E\xE8\xBD\xAC\x7F\xE9\xC7\x5F\xF2\x98\x8E\x9B\x72\xBF\xEB\x58\xB9\x70\x99\x3C\x45\x1C\x36" + + "\x76\x5B\x9C\x77\x15\x8F\xAA\xF5\x4E\x5F\x19\x8E\xE4\x99\x5A\x35\x2E\x4D\x65\x9C\xF6\x53\xCB\xD1\xB5\x03\xD5\x8E\x43\x5A\x12\xC5" + + "\x0D\x4C\xFB\x95\xF6\x85\xC8\x3D\xAD\xE1\xA3\x66\xE3\xD1\x72\x5C\x5D\xCC\x7D\x9C\x24\xBD\x57\x7B\xD3\xAC\x79\x0B\xB7\xAC\xB6\x4A" + + "\x4C\x7E\x2F\x8E\x2E\x5E\xDF\xF4\x76\x5A\xB8\xEA\x11\x4F\x63\x21\x5E\xE4\xB3\x8A\xF6\xBE\x0B\xB1\x43\x32\xC2\x1C\x78\x77\x51\xD3" + + "\xE0\x92\xAA\x85\x25\xA4\x82\xA5\xEA\x1A\x48\xE1\x80\xA3\xC0\xCA\xAA\x80\x0A\x7A\x80\x37\xD4\x31\x3B\x9F\xCB\xB9\x09\xF3\x04\x55" + + "\x00\xF5\xE5\xCF\x16\xE9\x35\x55\x5F\x07\xA8\x4B\x49\xF1\x74\x74\x10\xBC\xB2\x3D\x4C\x92\xA4\xA8\xE2\x39\x41\x96\x48\x54\xAA\x46" + + "\x14\x31\x51\x90\xB2\x8C\x48\xCC\x4A\x83\x07\x25\xE4\x9C\x39\xF1\x77\xB1\x97\x38\x65\x29\xE9\xDA\xCD\x2E\x66\xDD\x99\xF9\x2F\x2D" + + "\x39\x11\x94\x50\x4A\x59\x7C\xCD\x8E\x4D\x26\x41\x1C\x89\x0D\x86\xAB\x25\x83\x4E\x5B\x2C\x2E\xB5\x67\xB2\xA9\x32\xED\xDE\x19\xD7" + + "\x1A\x78\x19\x31\x56\x29\xC3\xCB\x79\xC7\x25\xC6\xCB\x24\xD0\x66\xB9\x9F\x3E\xC9\xF2\xEB\xF8\xF8\x62\x4F\x86\x95\x4E\x3F\x42\x85" + + "\xDC\x50\xC5\x52\xA1\x13\x31\x57\x9B\xF7\xD7\x26\xB1\x20\xB0\x6D\xC6\x91\x43\x5A\x2B\xC2\x7F\xD3\xE3\xDA\xA6\x03\xDA\x75\xDE\xA3" + + "\xF2\x43\xC7\xEF\x71\xFB\x3E\xDB\xEA\xE7\xE3\xE4\x76\xE8\x53\x5C\xD2\xF5\x36\xF6\x28\x67\x63\xE6\x78\xEE\x6A\x6C\xBE\x4A\x3F\xEA" + + "\x16\xA6\xA3\xC7\x31\x9C\x46\xAC\x51\xE2\x9A\xB8\x58\x9A\xBD\xAB\xB2\xFC\x8B\x07\xBF\x49\xEF\x67\x7D\x2B\xEB\xE7\x1E\xEB\x7E\x6B" + + "\xA8\x50\x52\x97\xA8\x7C\x6F\x2B\xC5\xF1\x3C\x4A\xBE\x5F\x1D\x47\x3D\x1F\x1B\xC2\xDB\xDE\x42\xFF\x00\x24\x83\x8E\xDF\x94\xE3\x72" + + "\x17\x72\x82\x0B\x18\x3A\xD7\x6D\xA5\x88\x70\xF2\x43\x34\xD0\x46\xB7\x40\x1E\xAF\x6F\xA5\xD6\x89\xA9\x61\x2D\x01\x6A\xD4\x77\x55" + + "\x3B\x6F\xB5\x51\x64\xCE\x2C\x37\x06\x21\x78\xDC\xEA\xC3\x1D\x64\x4B\x1D\x6A\xD4\x53\xBA\x54\xC4\x84\x29\x92\x59\x56\x9A\x9E\x34" + + "\xA7\x9D\x3C\x9D\xE4\xD3\x8A\x7D\xB5\x21\x24\x2A\xD1\xB7\x99\xB8\x5C\x6D\x2A\x43\x16\xDE\xFE\xDC\xFD\xF7\xF5\x8B\x92\x06\xC0\x45" + + "\xC7\xA4\xE5\x2F\x83\x58\x03\xE2\x32\x18\xFB\x97\x73\x59\x08\xF2\x1F\xBB\x96\x2F\xDB\xE5\x60\xC8\x65\x72\x73\x49\x5C\x40\xCD\xFE" + + "\xAC\x13\x84\x8C\x2C\x40\x36\xBF\x0B\x97\xC2\xE4\xB2\x19\x4C\x36\x33\x21\x94\xAB\x4A\x84\xD9\x1C\x75\x4B\x96\x28\x4A\xCD\xF3\x52" + + "\x9E\xCD\x78\xE5\x96\x94\xEB\x24\x68\x04\xB5\xA4\x66\x86\x42\x75\xF9\xC6\x41\x55\x3E\x05\x57\x50\xE9\xC5\x5E\x88\xFB\xC6\xEA\xDE" + + "\x3B\xDB\x26\x06\x8E\x5E\x8E\x3B\x1D\x80\xA7\x90\xE3\x12\x76\xDB\xC4\x60\xE5\xB9\x8D\xAF\x6B\x3D\x8F\x13\xCD\x72\xA9\xA8\x29\xDF" + + "\xB1\x08\x52\xF6\xDA\x48\x9D\xE4\xAF\x20\x94\xF7\x05\xB5\xA4\xB2\x7E\x08\x8B\xC3\x5A\xC3\x32\x23\x4D\x19\x8D\x63\x92\x07\xEC\x06" + + "\x44\x41\xAD\x94\x57\xEE\x00\xB0\xF2\x3E\xCB\x01\xB3\x94\x78\xBE\x9A\x2A\x3A\xE1\x4A\x91\xD3\x45\x22\x33\x89\x5E\x09\x36\xC9\x23" + + "\xEE\x50\xDE\x64\x20\x05\x55\xBD\xF6\x39\x52\xCF\x66\x07\xF0\xDB\xAD\xF3\xC0\x73\x57\x55\xE9\x66\x5A\xEA\x89\xEB\x24\x12\x4A\x8A" + + "\xD2\x44\x89\x17\x94\x95\x12\xAC\x2C\x8E\xB8\x12\x08\x55\x16\x58\xD2\xCA\x8C\x2F\x62\x58\xF4\xB2\xC7\x6E\x30\xC6\xB4\x95\xDE\x1E" + + "\xDF\xCA\x12\x24\x98\x01\xA5\xD7\xC6\x23\x90\x76\x9D\xFF\x00\x70\xD1\x07\xFF\x00\xC7\xA6\xC0\x97\x6D\xFE\xDE\x12\xEC\xC5\x74\xAE" + + "\xF0\xCC\x18\x0D\x12\x03\x30\x0B\xAD\x12\x74\x4E\xC7\xD6\xBD\x2C\x96\x21\x8D\x59\xD5\x63\x81\x86\x99\xC5\x66\x4E\xEF\x24\x79\x68" + + "\x8A\xB1\x20\x03\xE7\xC8\xD9\x1F\xDD\xA1\xB1\xF9\x9E\x16\x26\x41\x0A\xBC\x8E\x07\x74\xC8\x22\x56\x95\x3E\xC8\x65\xDF\x61\x63\xE7" + + "\x7E\x7F\xE1\x7C\x0D\x7A\xAB\x2D\xAD\x60\x78\xF5\xB9\x3C\x62\xD7\x18\xBF\x6C\x01\x6B\x8E\x3A\xBD\x2E\xE0\xC4\xF9\x77\x36\x16\x22" + + "\xC0\x9C\x28\xB1\xCE\x78\xEC\x6F\x7F\xCF\xA6\xAF\x2D\xB8\x19\x95\xC4\x31\x2A\xA7\x78\x36\x16\x61\x19\x1B\x27\x4D\x30\x90\x28\xF0" + + "\x7E\xF5\xB1\xF7\xE4\x7E\x3E\xBC\x0B\x45\xFB\x59\xAB\xA4\xAC\x76\x51\xEB\x58\xEE\x1D\xA0\xF7\x6D\x5D\x8A\xEC\x68\x7F\x9D\xF9\x3F" + + "\xC6\xCF\xA7\x5F\xBB\xAC\x8B\xA5\x41\x13\xFD\x7C\x56\x22\x74\x13\x78\x24\x04\xD9\xEC\x3B\xFB\x0A\xBE\x3F\x8F\x03\xC7\xA6\x12\x5D" + + "\xC7\xF7\x1E\xF5\x78\x1D\x1B\xB5\xD1\x95\xE3\x88\x6C\xB1\x00\xE8\x88\x59\x5B\xCE\x8B\x79\x3E\x46\xFC\xF9\x3A\x95\x0C\x6E\xEB\xE9" + + "\x63\xB6\xDD\x86\x2F\xDC\xE7\xDF\xEF\xC1\x5C\x12\x3F\xE4\xB0\x24\xDC\x91\x7C\x8C\x1F\xF6\xFE\xA7\xD4\xE7\x3D\x4D\xFA\xEB\x14\x60" + + "\x8D\xA9\x56\x3B\x33\xBC\x92\x4A\xE0\xF9\xFE\xF3\x25\x89\x19\x98\x0F\x25\x7B\x82\x8F\xF0\x0F\xDB\x91\x05\x57\x5D\xBC\x32\x4C\x76" + + "\x35\x2A\x34\x6A\x63\x3B\xD9\x24\x3C\xAA\xA4\x02\x3C\x76\xA4\x9F\xE3\xCE\xCF\xAF\x94\xAB\x57\x9A\x2E\xFF\x00\x80\x46\xC5\x8A\x90" + + "\xF3\x24\xAC\xA7\x7A\x64\x6E\xD7\x65\xEE\x20\x13\xE0\x93\xA3\xAF\xBD\xFA\xDB\xBC\x43\xA3\x1C\x83\x98\x47\x14\x89\x44\x62\xF1\x0E" + + "\xCA\xEB\x94\xC8\x43\x10\x4D\x0F\x3D\xF5\x20\x92\x26\x9A\xD9\x61\xFD\xA5\x63\x10\x82\x3B\x5A\x75\xDF\x87\xB4\x3A\x65\x76\xA7\x50" + + "\x94\xDA\x7D\x2C\xB5\x73\xB8\x1B\x63\x85\x0B\x90\x2E\xA3\x73\x7C\xBB\x51\x2E\x41\x69\x1C\xAA\x27\x2C\xC3\x9E\xA2\x6A\x6B\xA8\xE8" + + "\x20\x69\xEB\x67\x8E\x9E\x15\x3F\x33\xC8\xE1\x41\x3F\xF4\xA6\x77\x33\x91\xC2\x28\x2C\x4E\x00\x3C\x75\xAC\x21\x86\x00\xCB\xA4\x9E" + + "\x57\x00\x04\x6F\xC6\x3E\xE6\x62\x07\xF7\x02\x91\x13\xE7\xF1\x53\xE0\x93\xE0\x9D\xE8\xE4\x1C\xB8\xF0\x4E\x94\xF0\x9B\x3D\x4D\xEB" + + "\x97\x3C\xE3\x3D\x1A\xE9\xF5\x00\x1A\x6E\x4B\xCE\xAF\xD5\xC7\xCD\x69\xFE\x37\x95\x28\xE1\x31\xD2\x30\xBF\x97\xCA\xD9\x54\x22\x8E" + + "\x3A\x8C\x33\x5C\xBC\xE4\x25\x2A\xF6\x9F\x48\x6B\x6B\xF5\x12\xFD\x4F\x1F\xD8\xF7\x54\xDB\xDA\xEF\xB7\x4E\x92\x0E\xA1\xFB\x88\x97" + + "\x19\xC7\x66\xB7\xD4\x1E\x7F\x46\xC5\xAE\x3D\x82\xBF\xCC\x2B\xC7\x2E\x06\x8F\x0C\xE1\xF8\xF5\xAF\x63\x96\x66\x27\x86\xCC\x2F\x1D" + + "\xA6\xBF\x4F\x17\x47\x20\xE3\x1E\xE3\x3D\x3C\x17\xE8\xD4\xAF\x48\x3D\xA5\x73\x0E\xBB\x75\xB3\x85\x66\x7F\x53\xFF\x00\x72\xBC\xAB" + + "\xA9\x1D\x73\xE7\x32\x47\x67\x87\xFB\x4A\xE9\x8E\x5A\xA7\x29\xEA\xA4\x58\x79\xCA\x5E\xB7\xFD\x56\x86\x2E\x4A\xBC\x3F\xA3\xFC\x3A" + + "\x95\x55\x92\xEE\x55\x71\xB5\x71\x38\xD4\xAF\x04\xE4\x66\xAB\xE5\x47\xC6\xFA\x86\x8B\xFC\x3D\x08\xC1\xB5\x76\x13\x4A\xAE\xAA\xD4" + + "\x54\xEC\x52\x9E\x39\x0B\x62\x3A\x8A\xC1\xF3\x49\x21\xB5\x9A\x2A\x5E\x73\xB6\xA1\xB8\xEA\x91\xA9\x78\xBC\xBA\x91\xA6\x83\x14\x4C" + + "\xA4\x8A\xB9\x94\x34\xD2\x20\x03\xE7\x82\x9F\x2A\x8B\xDC\x49\x39\x3C\x82\x61\x1C\xF5\xD0\xAF\xB4\x3F\xD4\x27\xA5\x9E\xE9\x78\xD7" + + "\x5C\x38\xF7\xB4\x6E\x39\xC9\x39\x86\x53\xA3\x17\xB8\xE4\x58\xA5\xE7\xD2\xD3\xE2\x7F\xF5\xFD\x7E\x4D\x6A\x78\xAD\x72\x6C\x4C\x16" + + "\x67\x49\xB1\xF8\x8A\x02\xA5\xC9\xEB\xD1\xCC\x9C\x25\xFB\xB2\x45\x0D\x6B\x30\x61\xDA\xDA\x4C\xB5\x79\xFA\xBA\xF1\x7E\xAD\x75\xCF" + + "\xA0\x9C\xD3\x19\xCE\xB9\x0E\x37\x3B\xCA\x3A\x7F\x66\x3E\xA0\xE2\x78\x8F\x1A\xCC\xC3\x7B\x1B\xC7\x2E\x71\xC5\x98\x65\x6A\x0A\x18" + + "\x6F\xDD\xE0\x53\x26\xF8\x0B\x79\x8A\x49\x15\xEC\xDE\x43\x91\xC6\x96\x48\x95\xDA\x16\x52\xD6\x19\xED\x4B\x99\x74\x33\xA1\xFD\x65" + + "\xCF\x7B\x15\xA3\xD2\xBE\x27\xD1\x2C\xE5\x9C\x15\xCE\x47\xC4\x70\x98\x4A\xD9\x08\xB0\x7D\x56\xE9\x85\xD1\x63\x16\x72\xF4\x39\x8E" + + "\x4A\xA5\x1B\xFC\xB7\x9D\xE2\x9A\x24\x7E\x6F\x46\x75\xB1\x2E\x19\x6E\xC5\x1D\x5C\x96\x52\xBC\x12\x5F\x38\xDF\x58\x7A\x51\x1E\x37" + + "\x1F\xC8\xF0\x3C\x7F\xA1\xF9\x2E\x17\xC0\xB8\xED\x9C\x97\x1A\xBB\xCA\x79\xA7\x21\xBD\x90\x9F\x93\x50\xA5\x62\x7C\x4D\x7B\x95\x6F" + + "\x73\x6C\xE5\x5E\x34\x98\xFC\xED\x64\x8E\x6A\x15\xB1\x14\x6F\xE5\xEE\x0B\x35\xFE\x2B\xD1\xDB\x69\xA9\xAE\xD7\x4D\x4D\x02\xE9\x71" + + "\xD0\xC6\xB1\xAC\x51\x41\xF0\xEA\x91\x82\xB1\xC7\xE5\x9D\xAA\xA1\x0E\xE0\xBE\x5B\x05\x03\x71\x2C\x48\xDD\x93\xD6\x70\xD2\x96\xAF" + + "\x92\xA5\xEE\xD2\x4A\xDE\x69\x96\x56\x5F\x34\x96\x00\x96\xDE\x48\xBE\xE0\x6F\xB6\x34\xBF\x20\xD8\x5C\x75\x54\x09\x9E\xE5\x18\x9F" + + "\xD3\xA3\xDB\xBF\xB9\xAE\x8F\xF5\x17\x94\xE0\x7A\x23\xC0\x79\x3F\x4D\xB1\xDE\xE0\x7D\xBF\xF4\xDE\x0C\x4F\x02\xC4\xDE\xE1\x54\x32" + + "\x90\x70\xCE\xAA\xDA\xC8\xF3\x0E\x1F\x4B\x1B\xD4\xFB\xF9\xC7\xCC\x4A\xBC\xB6\xDD\xE9\x39\xA5\x6A\xCF\x88\xB3\x2D\x79\xB1\xF2\xC6" + + "\x8B\x37\xAB\x74\x6E\x8D\xF3\x19\x3D\xDB\x74\x03\x9B\x74\xCB\x09\x27\x2D\xF6\xBD\xD5\x1E\x94\x5D\xE0\xFD\x64\xE3\x87\x23\x53\xFA" + + "\x2E\x05\xB8\xBD\x6C\x6F\x2E\xE9\x1F\x52\x25\x87\x25\x72\x3C\x86\x6A\xE4\xB1\xD5\x6E\x2B\x2D\xB0\xD9\x3C\xA2\x54\x7C\x7E\xC2\xC0" + + "\x93\x48\xB5\xAF\xFA\x3A\xF2\x6A\xBD\x2E\xEA\xDF\xBA\x5F\x62\xBC\xBA\x28\x6D\x61\xF1\x9C\x86\x7E\xA4\x74\xE7\x17\x99\xAE\x26\xAF" + + "\x7B\x8E\xDA\x6A\xB5\xB2\x15\x52\xA5\xF8\x7B\x6C\x89\x31\x16\x78\xB5\xF9\x23\x68\x7B\x0C\xB0\x5F\x97\xB4\xF6\xBB\x0B\xBF\xE9\xAF" + + "\x53\xBA\x85\x9E\xEB\x27\x58\x38\x36\x2F\x8E\x53\xC6\xFF\x00\xE9\xA7\x17\xB9\x67\x88\xE0\x32\x98\x4B\x15\x13\x96\xC9\x6F\x11\x8A" + + "\x93\x8D\x72\x15\xE5\x76\x73\x55\x31\xED\x81\xC9\xE5\xAD\x64\xB0\x62\x86\x27\x0B\x3A\x63\x24\xC3\x5D\xFE\xAB\x9B\xA9\x69\xE1\xA2" + + "\xAA\xD1\xC2\x24\x8D\x65\x56\x01\x98\x24\x92\x20\x61\xB8\x4B\x4E\x1A\x39\xE3\x42\xEC\x4B\x21\xB1\x02\x04\x04\xA8\xF3\x1D\x30\x4B" + + "\x2A\x55\x72\xF9\x57\x0E\x05\x89\xDA\xA6\xC5\x89\x59\x36\xB4\x6C\x76\x8B\x2D\xB9\xF3\x1F\x03\x01\x8F\x63\x10\xBD\xC6\xF2\xEE\x21" + + "\x9F\xBD\xCB\x39\x16\x1F\xAB\x3C\xD3\x9C\xE3\xDE\xEE\x6F\x29\x16\x23\x31\xC5\xAD\xB7\x14\xC1\x55\x8D\xE7\x97\xF6\x58\xCB\x39\xBE" + + "\x67\x88\x58\x31\xF4\x60\x88\x43\x56\xCE\x37\x8B\xD8\x86\xDC\x51\x2C\xED\x3B\xFC\x8D\x3B\x43\x6F\xD1\xF3\x17\xC3\x2A\x7B\x2B\xF7" + + "\x15\xD6\x6E\xAA\xD1\xC6\x5A\xE1\xBD\x53\xEA\x8F\x53\xB9\x37\x33\xAD\x95\xC6\x26\x4B\x1B\x91\xE1\xB8\xEC\x64\x51\xE4\x69\xDB\xC5" + + "\xCB\x15\x84\xC8\x51\x9F\xF7\x79\x9A\xED\x8E\x68\xA6\x8E\xC2\x3B\x57\x11\xBF\x79\x0D\x99\x7E\xA1\x3C\xCF\x96\xF1\x3E\x89\xF5\x83" + + "\x23\xCF\xF8\xD7\x4C\x38\xC7\x20\x83\x83\xE7\x69\x57\xAD\xC3\xF1\x9D\x1F\x4B\x43\x29\x96\xA4\xD8\x6A\x64\x4D\x87\xC9\x72\x0E\x6B" + + "\x5D\x05\xEB\xD0\x91\x16\x43\x22\xB2\x6B\x6E\xB1\xB3\x46\xC5\x36\xC7\xE9\xFF\x00\xD3\x8B\x2D\xEC\x7B\xDB\x4F\xB6\xFC\x66\x3B\x1C" + + "\x32\x5D\x67\xE9\xB7\x2A\xE6\x1C\xE2\xEE\x5A\x92\x5E\xA1\x80\xE9\xE7\x22\xCA\x4B\x6B\x3D\x94\x97\x19\x31\x58\xB2\x79\x6C\x9D\x7E" + + "\x53\x84\xC0\x60\x69\x59\x63\x57\xF7\x37\x64\xCA\xDB\x8E\xDD\x0C\x35\xAA\x36\x8A\x00\x6A\xBB\x60\x95\xA7\x70\x01\xCD\xDA\x57\x45" + + "\x00\xF2\x16\xE2\x36\x53\x7B\x90\x2E\xCD\x8B\xF4\x76\x61\x15\x28\x3B\x85\x81\x5C\xEE\x0D\x70\xAA\x33\xF2\xA8\xBE\x48\x38\x04\xDF" + + "\x17\xCF\x5B\xEB\x8F\x7B\x93\xF6\xDD\x95\xC8\x61\xBA\x67\x2F\x4F\x2C\x63\xB2\x1D\x3C\x86\xA6\x53\xA7\xBC\x3A\xA7\x0F\xE2\xBC\xE8" + + "\xE1\xE6\xE3\xB5\xA9\xE3\xAA\xAF\x17\xC7\x74\xD7\x25\xCD\xEB\xF0\x9C\xD7\x1D\xA7\x98\xA1\x59\x6A\xE6\x07\x16\xBD\x8B\xC7\x64\x7E" + + "\x48\x0A\xD0\x87\x21\x25\x5C\xEE\x3E\x67\xC9\xA6\xAE\x2B\x70\xEF\x6F\xFC\x7B\x8F\x63\x53\x27\x63\x33\x00\xE7\x1C\xA7\x8F\x71\x6B" + + "\x09\x99\xB7\x24\x93\x58\xCE\xD6\xC5\xF0\x5E\x3F\xD4\x78\xA3\xC8\x59\x96\x69\x27\x96\xF5\x9B\x94\x72\x6F\x3C\x92\x3D\x85\x59\x1E" + + "\x46\x3A\xD5\xBD\x88\x72\xEE\x01\xEE\x5B\xA5\xD8\x5E\x94\xF4\x43\xA1\x99\xDF\x6D\x36\x31\xB8\xDC\x87\x5D\xFA\xAD\xD6\x7C\xC6\x43" + + "\xAA\x1D\x64\xE6\xB7\x71\x58\x6C\xD6\x19\xB0\x3F\xD3\xF9\x5D\x5C\x85\x8A\xD9\x40\x21\xE2\xB6\x38\xFE\x73\x0D\x92\xA3\x87\xA5\x02" + + "\x66\xE0\xC8\x63\x25\x49\x69\xD6\x8B\x77\x75\x6F\xA5\xD8\x7E\x82\x73\xBE\x96\xE4\x7A\x79\x36\x43\x1D\xC0\xFA\xA3\xCA\xF2\x7D\x3F" + + "\xE4\x5D\x3C\xB5\x93\xBF\x94\xC0\x60\xB3\x91\xF0\xBE\x55\xCE\x70\x5C\xAF\x85\xC1\x93\xB3\x6E\x5E\x31\x5D\x21\xE1\xB9\x1C\x0E\x6B" + + "\x8B\xE2\x25\xAF\xC6\xED\x45\x94\xA1\x96\xA7\x8C\xC7\x5E\xC6\xDF\x97\x2D\x3D\xA6\xA6\x9F\x3D\x4F\x95\x53\x0D\x52\x23\xD4\x08\x22" + + "\x60\xF1\xDA\xEE\x50\x47\xBB\xF9\x08\xCE\xA5\x8A\xAF\x99\x1B\x00\x0E\x0A\xB0\x5F\x33\xA8\x1A\xCA\xAA\xB4\x84\x3C\x12\x53\x96\x11" + + "\x99\x1D\x76\x31\xE2\xE5\xAD\x79\x9D\x54\xD8\x16\xD8\xC0\x93\xEA\x09\xD8\x34\x47\x4A\xBA\x7B\xCE\xFA\x3D\x93\xE6\x3C\x93\x8D\xF1" + + "\xCE\x11\x9A\xE5\xFD\x41\xBB\x8F\xBB\xCD\x39\x6F\x39\xEA\x5F\x51\xF9\x87\x2F\xE4\x0B\x87\x82\x5A\xB8\x5C\x6D\x8E\x51\x96\xE3\xB2" + + "\x35\x6C\x3E\x12\xBC\xF6\x21\xC4\x61\xB1\x98\x7A\x18\x8C\x7F\xEE\x2C\xCF\x5F\x1E\xB3\xDA\xB1\x2C\xB9\x27\x3C\xF7\x6D\x95\xE9\x0D" + + "\x2C\x85\xAE\xA4\x74\xE3\x03\x66\xED\x7C\x4D\xBC\x95\x1C\x57\x4E\x3A\xA7\xC5\xF3\xB9\xAB\xDF\xB5\x82\x59\x11\x5B\x8F\xF3\xAA\x9D" + + "\x33\xCE\xBC\x76\x25\x4F\x82\x3F\xE8\x14\xF9\x35\xBF\x91\xB4\xB5\x25\x23\x47\x29\xEA\x25\xFC\xAB\xDE\xE9\xE7\x4F\xB8\xE6\x58\xE1" + + "\x79\x27\x56\xF9\xED\x2E\x05\x8F\xCF\x45\x1C\x12\xCF\xC7\xE8\x26\x0B\x3F\xCC\x39\x4E\x62\x8C\x76\x92\x7A\xB2\x66\x2A\x70\xFE\x29" + + "\xC8\x3F\xA0\xFE\xE6\xBD\x9A\x69\x9E\x93\x17\x2D\xEA\xD6\x69\xC7\x3C\x12\x6C\x9E\xB6\x7B\x25\xCE\xF3\x1E\x1B\xC1\xF8\x1F\xB7\xDE" + + "\xBF\xF3\x1F\x6A\x58\x4C\x67\x25\x87\x35\xD4\xEC\xCF\x4D\xF0\x95\x32\x5D\x41\xEA\xB5\x48\x6E\x61\xEF\x85\xCA\x75\x1B\x21\x95\xA7" + + "\xCB\x31\xFC\x85\xE7\xC5\x4C\xB6\x79\x35\xAC\x86\x79\xF2\x95\x72\xB7\xEA\xE6\xF1\xB9\x5A\xCD\x1C\x2A\xF3\x5A\xA4\xD3\x68\x01\xA6" + + "\xA2\xA6\x98\xD4\x04\x57\x25\x67\xB2\xA6\xF3\x75\x00\x4C\x19\x19\x8E\x5D\xC6\xE4\xB0\x20\xDD\x99\x82\xF4\xD2\x86\xB6\xBE\xA4\xF9" + + "\xB3\xCF\x18\x88\xB6\xCF\x9A\x2B\x96\xDB\xB6\xFF\x00\xF2\xEC\xCA\x00\xB0\x53\x66\xBB\x5C\x11\x61\x71\x1C\xFD\xAB\xFB\xBD\xC8\x7B" + + "\x8F\xE5\xD9\x1C\x7E\x3A\x2E\x2F\x96\xE3\x55\xF8\xC6\x63\x35\x93\xB1\xC7\xB1\x3C\xA7\x15\x77\x83\xE5\x28\x67\xF1\x78\x7C\x3E\x0B" + + "\x37\x63\x92\x4A\xAF\x9E\x8B\x96\xC5\x63\x92\x59\xC2\x64\x5F\x07\xC3\x2F\xAC\x7C\x37\x27\x3D\x9E\x3A\xB1\x5D\x8C\x52\xA7\x4F\x65" + + "\x57\xA7\x8B\xDD\x37\xBF\x3B\xB4\x39\x25\xEE\x1F\x78\xFB\xA1\xE6\x46\x0E\x47\x5E\xEF\x34\xA3\x5E\xAA\x8E\x65\xCF\x81\xFD\xC5\xAE" + + "\x11\x8D\xCC\x64\xD4\x76\xF7\x85\x0D\x46\x44\x73\x20\x56\x28\x8E\xF2\x2F\x48\xFE\xEB\xF8\x86\x1B\x03\x86\xE2\x5D\x69\xC0\x55\xAF" + + "\x89\xEA\x5F\x13\xEA\x1F\x49\x78\xB4\x79\xFA\x91\xC7\x5A\xFF\x00\x2A\xE2\x3C\xFB\xA9\x7C\x57\x80\x72\x4E\x11\xC9\x24\x80\x44\xD9" + + "\xEC\x45\xDC\x5F\x28\xB5\x93\xC3\xD2\xC8\x19\xE1\xC3\xF2\xBA\x18\x7C\xED\x14\x86\x7A\x92\x89\xB9\xAC\xF6\x3E\x1A\x7F\x70\x1E\xF6" + + "\x66\x15\x2A\xE7\x64\xC8\x7B\x99\xE6\x25\x38\xB3\xA6\x68\xCF\x99\xD7\x2A\xE6\x72\x76\x54\x8F\x8C\xE5\xB1\x1C\x89\xDD\x9A\xC2\x2A" + + "\x2E\x36\xC2\xCC\x58\x05\x0A\xE5\x8A\xFA\xA9\x56\x0B\xD5\xD2\x29\x01\x40\x67\x60\x10\x39\x16\xF2\x42\xDC\x6E\x66\x71\xBA\x44\x66" + + "\x20\xB3\x95\xBD\x94\xDA\xC0\x58\xE8\x58\x3C\x13\x12\x4B\x59\x40\x60\xFE\x5D\xCD\x9C\x30\xB8\x21\x63\x20\x02\x14\x35\x97\x8B\x91" + + "\x7B\x93\x31\xBF\x52\x1B\x26\xFF\x00\x42\x3D\xB0\x59\x97\xAB\xF3\xF5\x86\xDC\x3E\xF9\x30\x55\x26\xCA\x59\xA3\x9B\xAC\xFC\x5A\x7B" + + "\x5D\x15\xCB\xCE\xBC\x4D\x4F\x24\x99\xB2\xB7\x62\x82\x20\xB9\xF5\xBD\x66\x2A\x5F\x33\x72\x12\x8B\x4E\x13\x19\x2F\x96\xFB\xA0\xE5" + + "\x90\x74\xD3\xDB\x2F\x28\xE5\x17\x79\x16\x4F\x89\x34\x18\x8C\x15\x6A\xF9\xFC\x5E\x26\x6B\xD7\xE8\x5B\xB9\x91\xC7\x88\x5E\x9C\x0D" + + "\x7E\xB5\x73\xFB\x85\x59\x2A\xCA\xED\x3A\xFE\xDA\x19\xA4\x97\x6C\x23\xF8\x9F\x18\xFD\x49\xE0\xCB\xE3\xFD\xB7\xFB\x66\x9B\x35\xD2" + + "\x4C\x67\x48\x35\xEF\xCB\x84\x2D\x0A\x58\xCC\x75\xDC\x7D\x8E\x4D\x52\x7E\x8A\xF2\xB5\xFF\x00\xAA\x73\x14\x72\x73\x58\xCE\x9C\xBC" + + "\xD6\xE0\xB5\x80\x69\x73\x96\x1F\x22\xF4\xF8\xFD\x4E\xE2\xD5\xCD\x66\x05\xBD\xE7\xE6\x38\xFE\x2B\xD9\xF7\x3E\xB7\xCA\x2A\x65\xE6" + + "\xC5\x4D\xC5\x31\x14\xE3\x93\x11\x88\x19\x7C\x85\x2B\xF6\xED\x63\xD3\x15\x92\x5C\x75\x9C\xA6\x26\x1B\x70\xD0\xBE\x2B\x58\xB3\x5E" + + "\x6B\xF4\xE2\x92\x04\x92\x37\x99\x3B\xBB\x4E\x1D\xE3\xD5\x43\xE3\x0A\x42\x57\xCC\x02\x3D\x38\x94\x22\xFB\xFE\x75\x20\x11\x29\xDA" + + "\x78\x38\x61\xB4\xE0\x1B\x29\xEB\x4C\xF0\xB3\xB7\xFC\x33\x2A\x29\x0A\x1A\x5D\x41\x4B\x5C\x7C\xA0\x85\xFC\x26\x1B\xA8\x39\x39\x55" + + "\x36\xC1\xB5\xF0\x79\x06\xEB\x0F\x59\xB1\x71\x75\x73\x23\xD4\x3A\x1D\x66\xEA\x4F\x08\xEA\x1D\x8B\x38\xEC\x84\x3C\xAB\x02\x92\xE3" + + "\x73\x92\xC3\x59\x73\xD1\x47\x62\x49\x31\xD6\x6C\x3C\x52\x5F\x39\x99\x5E\x64\x6B\x92\x30\x11\xA7\xF7\x7C\x85\xBD\x46\xDE\x41\x99" + + "\xC0\xF3\x8C\x97\x26\xCF\xE7\x7D\xC6\x64\xB3\x99\xCE\x52\xCF\x3F\x24\xCF\x75\x1F\x89\x72\x9E\x45\xC8\xD8\x82\x8D\x3D\xAE\x39\x98" + + "\xA3\xFD\x51\x86\x66\xEC\x68\xB4\xA4\xAF\x7D\xB0\x54\x1E\xA7\x64\x6F\x96\x84\xAC\x7F\x1C\xD0\xF6\xDF\xED\x5A\xEF\xBB\x5E\xBB\x75" + + "\xA1\x38\xDD\xB6\x9F\x17\xC1\x7A\x62\x39\x25\x3C\x05\x91\x4B\x07\x7F\x9B\x64\xC4\xA7\x19\x83\xC0\x4B\x25\xC9\xB2\x98\x9C\x14\x19" + + "\x4B\x93\xBD\xDB\xCF\x72\x7C\xB6\x3A\x9B\xC1\x1D\x49\x26\x97\x69\x75\x34\xDF\xEA\x1F\xEC\xFF\x00\x90\x7B\x3D\xE7\x5D\x23\xC0\xE2" + + "\xB9\xA6\x6A\xDD\x0E\xAC\x70\xCC\x7E\x6D\x78\xF5\xDC\xDB\x4F\x3F\x09\xE4\xD0\xCD\x4E\x87\x24\xE3\xA2\xFE\x39\x31\xF4\x32\xD8\x8A" + + "\x19\x4B\x9A\xC6\x65\x6A\xD0\xC7\xFE\xEE\xB0\x93\xE5\xAB\x13\xA8\x92\x6D\xD7\x4B\x96\x38\xE9\x68\x5E\x47\xAC\x98\x9A\x0A\x52\xCC" + + "\x25\xA2\x86\x89\x7C\xCA\x45\xBC\x31\x22\xE9\x72\x4E\xA2\x04\xB2\x28\x35\x32\x5F\x6F\xCC\xC4\x16\x53\x9F\xD6\x45\x07\xC5\x4D\x0C" + + "\x62\x38\x64\xF3\xA5\xB0\x02\x79\x2A\x6C\x92\x6E\xDC\xE5\xEA\x76\x13\x26\x5C\x93\x0A\x81\x90\xA0\x10\x0F\x58\x4D\xAE\xBC\x5F\xCC" + + "\x70\xEC\x37\x49\xF9\x5F\xBA\xAE\xAE\xF3\x6E\x95\xE1\x2E\x63\x27\xC5\x70\xEC\xBE\x2E\x55\xC0\xE3\xE4\xC7\xC8\x89\x4E\x78\xE9\xD9" + + "\xE4\x17\x66\x81\x29\xA1\x90\x41\x04\x73\xD9\x58\x84\xF2\xCA\x8B\xF2\x85\x59\x2E\xA3\xD9\x0F\x5F\xBA\x9D\x96\xE5\x9C\x27\xA6\xD8" + + "\xBE\xA2\x4D\xCA\x30\x11\xD4\x4A\x7C\x77\x1A\xF8\x78\x71\xF9\x08\x38\xED\x0C\x79\x14\xEB\xB6\x42\x85\x79\x06\x4E\x85\x58\xA1\xED" + + "\xAD\x62\xF5\xD9\x2F\xAD\x68\x11\x66\x8A\x05\x02\x3F\x51\x7F\x95\x7E\x8F\x7C\xC7\x0B\xD1\xEE\x4B\xCB\x60\xE4\xC9\x6E\xE7\x1E\xF6" + + "\xFA\xBD\x4F\x9B\x95\xE4\x2F\xE3\xE7\xAB\xC9\xB9\xA4\x34\xEC\x67\x73\x7C\x09\x71\x71\xA4\x79\x9A\xB0\xE3\xB8\xF1\x9C\x63\xB9\x2D" + + "\xDB\xF3\x63\xE7\xC9\xD1\xC7\x14\xA1\x10\xBF\x76\x5A\x1B\xCB\xF4\x52\xCB\x74\xFB\x23\xD4\xF1\xC6\xF3\x35\xF3\x16\x39\xF5\x6E\x09" + + "\x6B\x23\xC7\x67\x8F\x11\x59\x69\x50\xAB\x41\xE9\xC5\x95\x95\xF3\xA7\x3A\xD6\x18\xDA\xAD\x6A\xBC\x09\x49\xB0\xB0\x7C\x72\x46\xCF" + + "\x0D\xD6\x33\xB0\x7A\x3F\xF1\x2A\x3A\x39\x7C\x3B\x29\xF2\xAA\xAA\x1D\x1A\x61\x1C\x75\x7F\x04\x5A\x03\xB2\x9C\x8A\xA8\x24\x4A\x3A" + + "\x57\x8D\x43\x46\x55\xF9\x69\x22\x8C\x6D\x0A\x1F\x33\xBE\x12\x72\x75\x48\xDE\x9E\x58\x95\x15\xE3\xF3\x8C\x1E\x78\x49\x03\xEF\x0D" + + "\x14\xB1\xF9\xB2\x86\x2C\x1A\xEA\x4D\x82\xC8\xC0\x92\x4A\x63\x6C\xFB\xE5\xE7\x18\x1E\x94\x75\x65\xB3\x5D\x46\xEA\xFE\x4B\x96\xD6" + + "\xC9\x0E\x58\xB8\x8E\x01\x8F\x87\x27\xC8\x2D\x71\x8C\xCD\xFC\x08\xC1\x49\x8E\xA3\x04\xD9\x4B\x9C\x67\x0A\xD8\xF7\xCF\xD4\x5B\x92" + + "\xCB\xFD\x03\x21\xFB\x2B\x23\xBA\x9D\xC5\x9E\x48\xE4\x89\x32\xF0\xCE\xA1\x67\xB1\xB8\x4F\x97\xA4\x9D\x55\xBD\x86\xC6\x7E\xDA\xD6" + + "\x32\xA4\x1C\x8F\xA6\x98\x73\x2A\x5E\x8A\x5B\x8D\x76\x95\x7B\xFC\xA2\xDA\x63\xE4\x8E\x56\x11\xDA\x59\xAA\x56\xB1\x2C\xB6\x52\x64" + + "\x46\x55\x9D\xA1\xDB\xDF\xAB\x4F\x1C\xE0\x5D\x10\xE7\x3C\xA2\xC7\x2D\xE4\x19\x8E\x47\x92\xEA\xFE\x17\x99\x72\xCE\x23\xC6\x6B\x70" + + "\x7A\x6D\x4F\x8F\x65\x72\x55\xAD\xE2\xEA\xDB\xB9\xC8\xB2\xDC\xA5\x63\x59\x6B\x66\xD6\x1C\x99\xCA\xD1\xC2\x7F\x52\xA6\xB5\x21\x7A" + + "\xA6\x69\xA3\x8D\x62\xDA\x1C\x57\xD9\x67\x56\x7A\xF5\xC9\x38\xAF\x52\xF8\xEE\x4B\x33\x53\xA7\x7C\xDF\x94\x72\x6E\x9A\x72\x0B\x18" + + "\xDC\xE5\x2C\x7D\x6E\x15\xC7\xFA\x71\x82\x5C\x0C\xBC\xA7\x95\xE2\x66\xCB\xE3\x32\x1C\xE3\x09\x9B\xE7\xFC\x73\x23\x86\xC6\x70\x1C" + + "\x4A\xC2\xB5\x63\x8F\x21\xC8\x2F\x66\xE1\x97\x90\x43\x5F\x15\xE4\x7F\x11\x78\x77\x57\xD6\x35\x4D\x12\x0F\x0B\xF8\x7F\x4F\xAE\xD5" + + "\xF5\x2D\x1B\x59\x9E\xBB\x53\xD7\xAA\xFC\x41\x34\x26\x83\x42\xAA\xD2\xA9\xE8\xA8\xE9\xA9\x34\x2F\x11\x78\x7E\x38\x44\x95\x3E\x24" + + "\xAA\xB3\x54\x35\x4A\x2B\x40\x84\xAC\x48\x3C\xD8\xB5\x28\xEA\xF4\xCA\x2A\x5A\xE9\xB5\x9A\xEA\x94\xA4\xA2\xD4\x29\x05\x2D\x1E\x9A" + + "\x94\x31\x48\x2A\xB5\x38\x2A\x65\xA8\x9A\x59\xB5\x1D\x33\x50\x79\x4A\x45\xA4\xC0\x19\x57\xCB\x50\x18\x84\x2C\x4A\xC6\xF1\xDA\xCF" + + "\x01\xEA\x37\x1E\xED\xE7\x1C\x37\x8D\x75\x6E\xB7\x2A\xBD\x13\x55\xBB\xC6\x6A\xE6\xFA\x75\x8D\xE4\x14\x4C\x8C\x91\xC8\x4F\x28\xA1" + + "\xCD\xF0\xD8\x69\x71\x32\x57\x85\x48\x8E\xA8\x16\xDD\x8D\x68\x9F\x1C\x11\xA6\x92\xB6\xBA\xE5\x1D\x42\xEB\x77\x46\xF1\x6B\xD4\x65" + + "\xE9\x5F\x53\xFA\x63\x47\x8C\x61\xB0\x78\xCE\x4F\xCA\xF1\xBC\x87\xA6\xB9\xB6\xB5\x82\xA9\xC9\xEE\x65\x6D\x47\x93\xC4\xE3\xF9\x3D" + + "\xC6\xB1\x5E\xF5\xAC\xED\xA8\x8C\xA6\xAD\x89\x31\xB2\x5B\x9E\xFC\x53\x46\xCF\x2B\xAE\x6F\xD3\xCE\x89\x3F\x38\xEB\xE6\x3B\xA0\x10" + + "\xE0\xF8\x4E\x13\x96\x8E\x7F\xCB\x38\x2E\x57\x90\xD6\xC4\x47\x36\x3B\x0F\x73\xA7\xE3\x92\x4D\xCA\x73\x98\xE7\x80\x63\x72\xB7\x22" + + "\x8E\xB7\x13\xCA\x4F\x84\x86\x3B\x98\xBB\xB7\x2D\x4D\x8F\x86\x6B\x78\xD3\x24\xD6\x2B\x38\xF7\x2F\xED\xDF\xAA\x1E\xDB\x7D\xBC\x73" + + "\x0E\xA2\xF5\xB1\xB2\xB6\xEA\x75\x36\xE5\xEE\x1F\x6F\x85\xE6\x39\x55\x6E\x59\x9B\xC1\xC5\xC7\x79\xCE\x32\xEF\x1E\x5B\xFC\x8A\x96" + + "\x4B\x25\x4B\x90\xD3\xE6\x3C\x1F\x17\x7A\xED\x25\x32\xC5\x6F\x87\xDB\x8E\x6C\x4C\x92\xE4\x97\x3D\xDB\x87\xA6\xF8\x4B\x49\xFE\x24" + + "\xAF\x95\xAC\x3F\x87\xF4\x3A\x9D\x2F\xC3\xFE\x28\x8F\x4E\xAE\xF8\xB8\x7C\x47\x1D\x6C\x4D\x36\xAD\x47\xA6\xEB\x11\xD1\x85\xF1\xED" + + "\x75\x01\x14\x54\x3A\x94\xC4\xCD\x59\x47\x51\xE7\xA4\x1B\x65\x5D\x42\x40\xF2\x74\xF2\xA3\x53\xF0\xB3\xC9\x35\x24\x55\x5A\xB5\x15" + + "\x6E\xA3\x40\xF3\xC0\xD1\x55\x69\x72\x53\xBB\xC1\x49\x35\x65\x23\x4C\x4E\x81\x05\x48\x6A\x8A\xAA\x58\xFE\x4A\x79\xA2\x5B\xCA\x6C" + + "\xD0\x21\x58\xCC\xC9\xE5\xFD\x7E\xAF\xEE\x63\xD9\xA4\xBC\xCF\xA2\xDD\x69\xE5\x1C\x1E\x6C\x27\x2E\xAF\x83\xCE\xDD\xCA\x49\x3F\x18" + + "\xC8\xD8\xC8\x57\xC2\xA5\xCB\x1C\x79\xF2\xF7\xB2\x34\x62\xAD\x14\xB1\xE4\xA9\xDC\x7B\xB5\x2F\xD8\xAC\x02\x76\x93\xF8\x39\x5A\x29" + + "\xCE\x5F\xE2\xFD\x38\xE4\x51\x63\x29\xF5\x63\x91\x4D\xCE\xE2\x8B\x23\x82\xC8\x63\x7A\x55\x85\xCA\x67\x79\x0D\x79\x56\xDD\xBC\x9E" + + "\x6A\x0C\xE6\x5E\xD6\x73\x88\x63\x96\x33\x3D\x80\xD3\x45\x8C\xCB\x67\x22\x9E\x48\xAC\xC9\x71\xEB\x7C\x30\x0B\x3D\x01\xE1\xBA\x5D" + + "\xED\xFB\xF5\x1A\xF6\x87\x83\x9F\xDA\xDE\x11\x3D\xBD\x70\xCE\x19\xD4\x8B\xD1\xE4\xB8\xB5\xFE\x9E\x60\xE8\xD6\xB7\xC9\xB1\x7C\x6F" + + "\x16\x6E\xCB\x62\x9F\x1A\xC9\x56\xA9\x6A\xC1\xA3\x98\xC7\xA7\xF5\xA1\x7A\xE4\xB3\xAA\x4B\x0C\xB0\x3B\x43\x13\x0E\x7A\x32\x1C\x6B" + + "\x86\x72\x3E\xB5\xF1\xBE\x9E\x74\xC7\x2F\x0F\x32\xEA\x55\xEC\xFF\x00\x28\xE2\xD9\x2C\xDD\x4E\x3F\x7F\x8C\x41\x92\xCF\x72\x3C\xEF" + + "\x1B\xE1\xDC\x56\x19\xB2\x39\x2A\x78\xFB\x77\xAD\xCB\x9B\xBD\x7C\xDB\xCB\x59\xC5\x6E\xBA\x48\x96\x9F\x21\x91\xEF\x93\xF6\xFB\xEC" + + "\x10\xD3\x88\x35\x08\xE3\xA1\xAB\x33\x50\xC8\xF3\x53\x51\xB4\xCF\x19\x8E\xA2\x54\x78\x60\x47\xA8\xA5\x31\x49\x23\x4A\xEC\xCA\x8A" + + "\x24\x0E\xB7\x0A\x09\x50\x4B\x5B\x7C\x15\xAB\xC8\x95\x7A\x55\x11\xD6\xF4\xCA\x18\x7C\x49\x55\x4D\x41\xAE\xD7\xC9\xA4\x53\x56\xCD" + + "\x16\x87\x0D\x5D\x25\x7D\x75\x55\x27\xFA\x84\x53\x51\xC7\xE4\x47\x46\x65\x91\x2A\x62\x78\x47\x96\xAD\xB0\x31\xF9\x1A\xAD\x8E\x2F" + + "\x94\xA3\x6F\x08\x2C\xF5\x6E\xB4\xB9\x1B\x83\x27\x2E\x57\x3F\xD3\xDC\x22\x55\x93\x27\xBF\x8F\xBA\xE5\xEA\x1C\xAF\x33\x9E\x8A\xAB" + + "\x19\x8C\xF6\xD2\xBA\xDA\x57\xED\x36\x1A\x0B\x16\x23\x89\x49\x1C\x85\x9F\x86\x1C\x76\x3F\x91\x73\x6E\xA1\x73\x09\xEB\xE1\x26\xAB" + + "\x8E\x4C\x17\x17\xCB\xE7\x30\x7C\x65\x2C\x48\x89\x15\x3A\xF6\xF9\x8E\x77\x8A\x4F\xFB\x85\x86\xAC\x33\x4F\x5B\x17\x87\x93\x1E\x8A" + + "\x61\x8D\x2F\xD8\x96\x29\x63\x86\x54\xF5\x6F\xF4\xDD\xEA\xFF\x00\x48\x3A\x45\xD5\x8E\xA2\xF2\x9E\x49\x99\x9F\x1D\xD1\xEE\x4F\x88" + + "\xC5\xC9\x5B\x35\x18\xC7\xE2\x39\xD6\x03\x32\xB8\x88\xAC\xF2\xBE\x11\x35\x6E\x4F\x97\xB5\x63\x15\x8B\xCE\xE6\xA1\xC6\x57\xAB\xC8" + + "\xE9\x55\xBF\x7E\xAA\x59\xB8\x1B\x19\x72\xB4\xBC\x7E\x2D\x79\xED\xA3\xD9\x87\x55\x3D\xC1\xF4\xEF\x94\x75\x27\x82\x4B\x97\x8B\x1B" + + "\x85\xE6\x38\x3E\x0D\x4B\x19\x85\x4A\x57\x72\x19\x4C\x8E\x49\xF1\xD3\x67\x72\x73\xD4\xCD\xE7\x78\xF6\x2A\xAE\x13\x8B\x61\xF2\xB4" + + "\xF2\x77\xAF\x25\xBB\x99\x09\xA5\x93\xF6\x74\xA8\xAF\x65\x9B\xD4\xD6\x3A\x16\xBD\x06\xA1\x1D\x00\xD3\xA2\x6A\x89\xE0\x69\xD2\x13" + + "\x55\xA8\x3D\x3B\xC1\x0C\x8C\xC6\x57\x66\xAE\x69\x40\x8D\xD5\x81\x8C\xAB\x29\x6D\xA5\x11\xF7\x2B\xB6\x98\xBE\x39\xF0\x16\xA1\xA0" + + "\xFF\x00\xAD\xBE\xBF\xAC\xC1\x43\x47\x50\xBA\x74\xD5\xB1\xE9\x3E\x17\x87\x58\x86\xA6\xA6\x95\x23\x6A\x5A\x7A\x48\xB4\x28\xE8\x65" + + "\x32\xC4\xE1\xE2\xAB\x13\x43\x33\x22\x97\x9A\xA2\x0F\x29\xA1\x8A\x7C\x7B\x2C\xF7\xED\xC0\x3A\x69\x50\xF0\x8E\xB7\xF3\x5E\xAC\x5C" + + "\x4B\xD7\x6C\x4F\x8F\xE6\x7C\x93\x8E\xAA\xD3\xA1\x57\xF6\xD5\x20\x83\x17\x34\x18\xEC\xFF\x00\x20\xCC\xBC\x11\xCD\x0C\xD3\x2C\xF1" + + "\xD7\xB6\x15\xEC\x6A\x54\x85\x00\x6F\x58\x57\xBF\x7C\xEF\x51\xBA\x85\xD4\xAA\x58\xFC\x6F\x51\xB2\xF9\x3E\x9E\xF2\xE9\x30\x43\x82" + + "\x60\x5A\xC5\x6C\x77\x1A\xEC\xCE\x44\xCF\x47\x23\x67\xBD\x9E\xDD\x86\x9E\x97\xCD\x72\xE4\xF2\x44\xBF\xB7\x8C\xC6\x3F\x6F\x0E\xD6" + + "\x13\xAA\x3A\x79\xD3\xCE\x8D\xFB\x61\xF7\x65\x77\xA5\xBE\xF1\x31\xFF\x00\xFA\x85\xC6\xB8\xCE\x0B\x27\x53\x1F\x6A\x94\x19\x6B\xB8" + + "\xAB\xF9\xCC\xDC\xF8\x1C\xB7\x17\xCF\xDF\xA3\x52\xFC\x39\x16\xA6\xB8\x1B\x36\x44\x94\x24\x39\x27\xA9\x7A\x68\xA0\x30\xDC\x35\xD6" + + "\x73\x32\xBD\xD2\xFE\x9E\x19\xDF\xFA\xA3\x95\x7B\x85\xE2\xDD\x44\xE0\x98\xEE\x1D\x51\x2A\x67\xEA\x63\x66\xAB\xC9\x71\x13\xF1\x5E" + + "\x39\x8D\xA5\x56\x0C\x65\x3A\xD6\x71\x58\xEC\xFA\x5B\xFD\x8D\x18\x6A\xD1\xAD\x5A\xBE\x2F\x17\x29\x84\x27\xCC\xB3\x31\x75\xF4\xEA" + + "\x85\xA9\xF4\xFD\x4D\x65\xD4\xA9\x1F\x4F\xD4\x27\x96\xAE\x9A\x78\xE3\x83\xCC\xA5\x9A\xA2\x1A\xBF\x87\x51\x01\x7F\x32\x68\x18\x84" + + "\x8E\x46\x31\xB2\xAB\x2C\x8B\x62\x55\x8B\x1F\x38\x7F\x11\xF4\x5A\x49\x92\xB7\x4A\xF0\xCD\x7C\xBA\xCE\x84\xFA\x7E\x93\x5D\x49\x55" + + "\x5B\x53\x1C\x15\xC9\x4F\xAA\xE8\x94\x7A\x94\xA9\x50\x69\x96\x3A\x79\x64\xA6\x9A\xAA\x7A\x52\x0C\x60\x2B\x41\x76\x45\x65\x29\xD5" + + "\x3B\xF2\x9C\x56\x59\x78\xAE\x27\x82\xF2\x9F\x73\x5C\xD7\x27\x83\xA1\x76\xE5\xF8\xB8\xAF\x1D\xA5\x99\xCA\xF0\x8C\x35\xDF\xDE\xD8" + + "\x96\x38\xB1\xAF\x9F\xE4\xDC\x63\xE5\xB0\xA4\x0B\x32\xC9\x07\x1E\x82\xA4\x76\x1D\xC5\x79\x2D\x28\x16\x24\x11\x8E\xB5\x9D\xC0\x72" + + "\xB7\xE5\xDD\x39\xF7\x05\x95\xE1\x5C\x9E\xE4\x35\x31\xB3\x64\xA9\x63\x2C\x74\xEE\x87\xF4\xC5\x8A\x2A\xF2\x47\x23\x70\x0C\x86\x5C" + + "\xC5\x18\x54\x16\x67\xAF\x06\x11\x8D\xA9\xDE\xCD\x89\x9C\xDA\x91\x84\xB2\x07\xA5\x7E\xDE\xBF\xFD\x67\xFA\xE7\xC2\x7A\x3F\xD3\x3C" + + "\xB4\x75\x57\x21\x89\xCB\x64\xB9\x37\x26\xBD\x8F\x58\xA0\xC7\xC5\x86\x82\xC5\xEC\xC6\x56\x95\x34\x5C\x5C\x97\x96\x38\xDE\xAE\x3B" + + "\x13\x15\x98\xB1\x33\x5A\xBB\x25\x61\x68\xE3\xE0\x32\xDA\x88\xCF\xBD\x2F\x64\x5C\xD3\xDA\x9F\x4C\x3A\x61\xD5\x99\xB3\xD9\x8C\x75" + + "\x6E\x77\x92\xCB\x60\xB3\x3C\x1F\x35\x1E\x22\xAF\x21\xE2\x19\x7C\x7C\xD6\xA4\xA3\x23\xE4\x38\xED\xCB\x14\x32\x94\xF3\x18\xCA\xF1" + + "\xE4\xBF\x19\xDA\x7C\x6C\x93\x8A\x53\x34\xE1\x16\x77\xBD\xAC\x55\x33\x47\x25\x4C\x51\x5E\x9A\x21\x66\x75\x66\xDA\xBB\x76\x70\x77" + + "\xDC\x14\xDE\x2E\x14\x8B\x5C\x90\x2C\xAD\x6F\x3D\xEA\x54\x42\x92\x4A\xC8\xE0\x85\xA3\x14\x8D\x14\x60\xCF\x55\x59\x2E\xA0\xE6\x4A" + + "\x4A\x79\xDE\x64\x55\xA9\x86\x11\x14\x72\x4A\xF1\x85\x41\x61\xE5\x91\x66\x0D\xB7\xAD\x8D\xD1\x3E\xB4\xF1\x7E\x94\xDA\x9A\xFC\x5D" + + "\x68\xC8\xE5\xB9\x1D\xA9\xEA\x3E\x63\x93\x24\x4F\x4E\x4C\xF4\xB1\x51\xC6\x57\xBB\x2B\x9C\xA6\x4A\x5B\x97\x21\xBB\x66\x8C\x96\x52" + + "\x4C\xA5\x68\x27\x7F\x99\x0C\xB5\xA3\x91\x59\x7D\x5C\x8F\x4A\x3D\xDE\x74\xD7\xA9\x2F\x87\xC6\x4F\x73\x2D\x8E\xB9\x9B\xB3\x56\x86" + + "\x12\xD5\x8C\x7C\x59\x1C\x7E\x5E\xD5\x89\x5A\xB4\x42\xBE\x47\x0A\xF2\x0A\x72\x9B\x48\x61\x71\x72\x08\x63\x59\x0E\xBE\x40\x56\x4E" + + "\xCA\xE8\xF6\xEF\xFA\x58\x73\xEE\x7B\xD2\x8E\x9C\x75\x03\x92\x72\x39\x65\xC8\xF5\x33\x80\xDF\xE7\x38\xF9\x9F\x19\xC5\xEC\xE1\xF8" + + "\x84\x33\x55\x83\x23\xC4\xF0\xF9\x5B\x77\xF7\xC8\xB2\x59\x1E\x55\x52\x58\x96\x79\xA2\xA7\x6B\x1D\x85\x86\x79\x18\x2C\xD3\x97\x09" + + "\xBD\x3F\x4F\xAF\xFD\x2D\xE3\x98\xCE\x3B\xC2\x79\xDF\x1D\x4B\xFD\x4F\xB5\xC8\x6F\x27\x12\xCC\xCD\x59\xAE\xE3\xB1\xB2\x63\xA6\xC8" + + "\x4D\xF1\x41\x27\xCA\xF1\xD0\xB1\x15\x8A\xB6\x2C\x57\xB8\x68\x39\xFC\xA1\xDD\x84\xF8\xD0\x2D\x67\xC4\xDA\x44\x46\x88\xD7\x55\xD0" + + "\x4C\x5F\x63\x34\x12\x44\xC5\x5F\x6B\x22\x39\x72\x0B\x91\x22\x2A\xED\x76\xDC\xAE\xCA\xA5\xC2\x58\xE7\xAB\xDF\x81\x35\xBD\x6A\x9E" + + "\xBE\x9F\x4C\xF3\x68\x61\xA1\x9A\x17\x95\x83\xAC\x8D\x22\xCC\xB3\xC0\x02\x4F\xBD\xE5\xF2\xA6\xA8\x35\x13\x15\x11\xB8\xBB\xC6\x0B" + + "\x31\x5B\xA8\xB6\xBA\xF0\x0B\x71\x2C\xB1\x5E\x86\x46\x8D\x96\x31\x2C\x35\x8B\x4B\x18\x24\x7E\x12\xAB\xBB\xBB\xE8\x6B\x7D\xA1\x0F" + + "\x8D\x90\x3E\xCB\x86\xA3\x23\x3B\x3C\xBF\xB2\x2E\x80\x2C\x73\x4D\x4D\x54\xB0\x27\xFB\x4C\x89\x65\xC7\x63\x03\xA0\x3B\x50\xA9\x3E" + + "\x57\x7A\x20\xF3\x50\x75\x47\x5B\x14\x49\x57\x00\x1B\x15\x24\xF9\x67\x66\x3E\x01\xEC\x11\x23\x13\xAD\x1D\x88\xCF\x81\xFF\x00\x6D" + + "\x20\xD4\x28\x32\x1F\xCA\xE2\x32\x81\xA7\x9E\x07\x46\x04\x78\xEE\x51\x3C\x0A\x15\x87\x9D\xB7\x68\x0D\xA2\x74\x47\x8F\x59\x7A\x25" + + "\xC0\x1B\x4F\x00\x90\x4B\x0B\xDA\xDF\xED\x6C\x63\x19\xCF\xDC\x71\xB8\xBC\xD9\xB9\x24\x7C\xD7\xB2\x84\x6D\xA3\x03\xF1\x29\x06\xF9" + + "\x3D\x85\xC5\x8F\x36\xE8\x03\x63\x9A\x50\x03\x2C\x51\x2A\x91\xB1\x07\xCC\xA9\x19\xD1\xD9\x0A\x08\x04\x0F\xF0\x54\x81\xAF\x00\x03" + + "\xE5\xB2\x63\xCD\x69\x4B\x4A\x66\xBC\xAA\xBA\xF9\x9A\x24\x32\x44\x1D\x4F\x83\xF1\xC3\x14\xCC\xBF\x7A\x00\x39\xF0\x37\xE7\xD1\xD9" + + "\x31\x31\xED\x15\x0D\x90\xED\xE4\xF6\x58\x85\x55\xC2\x6F\xC9\x8D\xA3\x78\xD4\xB0\x1F\x6B\x1A\x6F\xF8\x3A\xF4\xB9\xA7\x0C\x60\x76" + + "\xC9\x38\x70\x3F\x18\x9E\xC4\x2B\xFC\x79\xD0\x55\x50\xFD\xBF\xC1\x60\xFE\x41\x3A\xD8\xDF\xA7\x09\x00\x6C\xEC\x00\xE2\xE5\x9B\x26" + + "\xD6\x36\xBF\x04\x8B\xF3\x93\xEF\x90\x7A\x07\xA8\x21\x6C\x24\x26\xFD\x82\xED\x36\xC1\x04\x1B\x9F\x4C\x71\x6C\xF7\xC7\x56\x43\xD1" + + "\xDE\x20\xD9\xDE\x4D\x06\x59\xB1\x31\x1C\x56\x2A\x4F\xDD\x5A\x96\x64\x95\x20\xB1\x6C\xA3\x7C\x15\x15\x7E\x34\xAD\x2C\xC5\xCA\xD8" + + "\x64\x67\x7E\xD5\x84\xB4\xA9\xDA\xCA\xB2\x6F\x8E\xBA\x64\xFA\xCC\xFC\x77\x15\x4B\xA4\x29\xC6\xF1\x75\x32\x03\x25\x17\x2F\xE6\x39" + + "\xBC\xCD\x5C\x55\x8E\x1B\x8D\xAD\x5A\x39\xAB\x5F\xA8\xB7\xE2\x7A\x71\xD4\x97\xE3\xB9\x06\x43\x24\xA9\x90\xC8\x62\x88\xAB\xFB\x4C" + + "\x3C\xDF\xB8\xB1\x94\xC2\xEA\xFE\x92\xF3\xEA\xDC\x7E\x66\xC0\x65\xD9\xEA\xE2\x6F\x34\x72\x55\xB2\x0C\x5F\xB1\xC6\xDE\x7D\xAB\x89" + + "\x09\x48\xE7\x8A\x1B\x44\x46\x1E\x66\x4F\x8A\x19\x22\x8D\xD8\x20\x92\x59\x16\x4E\xE5\x31\x58\x6C\xFE\x1F\x2D\x81\xCF\x63\xAA\x66" + + "\x78\xCF\x23\xC6\xDC\xC3\xE7\xB1\x76\xE2\x13\x53\xBF\x8E\xC8\xD7\x7A\x96\xE2\xB3\x11\x1A\x7A\xB6\xEB\x4D\x24\x36\x14\x10\x02\xB2" + + "\xB8\x64\x52\xEC\x37\xAF\xE1\xCC\xB4\x54\xBA\x4D\xE9\x64\xDD\x2C\xF3\x33\x6A\x00\xED\x49\x22\x98\x59\x63\x53\xB4\x33\x08\x82\x28" + + "\x64\x26\xFB\xD5\xDD\xAC\x1A\xEA\xB8\x9F\x8C\xCD\x5C\xDA\xB0\xF8\xA8\x42\xC3\x0A\x2A\xD1\x5E\xEC\x8F\x19\x01\x99\xEF\x85\x2F\xBC" + + "\x90\xC0\x1F\x94\xAA\xAE\x54\x06\x3C\x9F\x7B\xFB\xF6\xC7\x63\xA9\xAB\x47\xA8\xDD\x2E\xE5\xB5\xF2\xBD\x7B\xE9\x66\x45\x79\x2F\x15" + + "\xE6\xB8\x36\xBD\xF2\xF2\xEC\x8E\x36\xC8\xCA\x59\xC0\xE3\xB2\xF9\x55\x8F\x31\xC9\xE7\x92\xEC\x09\x90\xC0\xF2\x0B\x94\xF1\xE1\x72" + + "\xF0\x6E\xA0\xC8\x63\x32\xF3\xE4\x4E\x71\xD0\x9C\x37\x4C\x7F\x52\xFF\x00\x6B\x98\xEC\xF7\x48\x29\xF0\xFF\x00\x6F\x1E\xFD\xFD\xBE" + + "\x73\x16\xE7\x30\xF2\xDE\x3F\x88\xAF\xC7\x72\x35\xFA\xB3\x24\xED\x2D\xCE\x4B\xC8\xC5\x1A\xBF\xD5\xB2\x9C\x3B\xAA\x0F\x56\x5A\x3C" + + "\xAE\xAD\xC8\xAF\xC9\x8C\xBE\x93\x55\x6A\xD6\x3F\xA5\x51\x86\xCD\xBC\x75\xAF\xA3\x39\xFC\x2D\x8C\xFE\x3A\xA6\x1B\xA6\x1D\x23\xE8" + + "\x66\x09\x71\xA9\x8F\xCF\xB6\x45\xE4\xCB\xF3\xC4\x92\x84\x12\xFC\x19\xE7\xAD\x4F\x2D\xCE\x39\x5F\x21\xAB\x91\x4B\x55\xA9\x71\x7B" + + "\x83\xFA\x75\xCF\x86\x9D\xE8\x6E\x65\x72\x5F\x1B\x63\xB9\xE8\xEB\xA6\x1F\x9C\xFB\x23\xF7\x01\x88\xF7\xC9\xED\xF6\x29\xE6\xC3\xB6" + + "\x46\x3A\x7D\x6D\xE0\x69\x02\xD1\xAD\x9F\xE3\xD9\x3B\xB5\xEA\x5C\xCD\xE5\x31\x34\x27\xC8\x43\x8C\xA3\x9D\x67\xA7\x5F\x2A\xC2\xEE" + + "\x59\x30\xBC\xA1\x71\xBC\x82\x2C\x85\x83\x62\xD9\x87\x40\x96\x38\xE1\x94\xCC\x50\x18\x64\x00\x4C\x00\x04\xA5\xAC\x52\xAA\x16\x1F" + + "\x32\x94\xB0\xDC\xC3\x2C\xA3\x70\xB1\x51\xD4\x1A\x37\x9D\x10\x50\x48\x91\x72\x99\x16\x3E\xB1\xBF\x0A\x37\x76\x17\xF9\x49\xB6\x01" + + "\xEB\xA2\x6E\x69\xC4\xFA\x63\x26\x1F\xA0\x5C\xFB\xDD\x56\x2F\x88\xE4\xBA\xD9\xD2\xBB\x54\xB9\x27\x1A\xCB\x70\xDA\xBC\xB3\x23\x72" + + "\x97\x50\xAB\xE0\xC4\x3C\x9A\xCF\x03\xC6\xE0\xAA\x8E\x5F\x99\xC1\xCA\x8D\x3D\xAB\x98\x79\xF1\x77\x28\x7E\xD6\x2A\xD6\xB2\xF4\x40" + + "\xA5\x0C\xD1\x23\xEE\x57\x25\xD2\x2E\x45\x1F\x0B\xEA\xCE\x6F\x9D\xF5\x2B\x29\x57\xA8\x5C\x6B\xBB\xA7\xFC\x27\x14\xB5\xB0\x58\x78" + + "\xAE\x60\x4C\x75\xF3\x97\xA4\xB7\xCD\x70\x77\x8F\x14\x96\xD9\xCB\xE3\x2B\x66\x31\x6B\x87\x5C\xF4\xCF\x4E\x59\x60\xC6\xDB\x6A\xF7" + + "\x96\xB6\x97\xEA\x57\x25\xE9\x2F\xBB\x1F\x6B\xD4\x3D\xD2\xF4\xFB\x99\x72\x5C\x60\xC2\xF4\xE3\x97\x5B\xC3\xDE\xE3\xD7\x70\xE9\x2A" + + "\x43\x97\xA9\x48\xF2\x8E\x9E\x73\xBC\x36\x6F\x13\xC8\x70\xB3\xD2\x5C\xC6\x1B\x19\x0E\x76\xBC\xD4\x16\xF5\x57\xC6\x2D\x9C\x6E\x42" + + "\x1A\xF3\x33\xD9\x9D\xBC\x63\xA1\x19\x8E\x87\x7B\x61\xE2\x9D\x27\xE8\x16\x5B\x8F\x61\xB3\x3C\x3E\x9D\x49\x29\xF2\x2E\x5A\x22\x8F" + + "\x1F\x08\xCB\xE6\x7F\xAB\xF3\xFC\xBD\x69\x1B\x1D\x95\xA5\xC7\x0D\xD1\x90\xCE\x64\x71\xD4\xE9\x61\xA7\xC2\xE2\x43\x41\x8C\xA7\x8E" + + "\xAD\x8F\x8A\x13\x5A\x60\x2C\x45\x1B\x68\x25\xCD\x9D\xD8\x2A\x6D\x70\x40\x54\x65\x65\x60\x5D\xCA\xA9\x04\xB0\x40\xA0\x00\xBB\x81" + + "\xB8\x8B\x77\x92\x39\x54\xB1\x5D\xB7\xB2\x0D\xCC\xAE\x2E\x46\xE0\xC4\xA1\x0A\xA0\x9B\x9D\x9B\x89\x17\x37\x56\xC1\xE5\xE7\xDC\x76" + + "\x76\xCF\xB5\x8F\x7A\x5E\xD8\x3D\xDE\x50\xAF\x6F\x1D\x84\xBF\x9B\x8B\x81\xF5\x05\x7E\x2B\xCB\x5A\xE7\x1B\xB0\xD6\x2B\x3C\x9F\xBA" + + "\xB2\x9F\x0D\xE9\xA4\xE3\x39\x4C\xE0\x9A\x7A\xC6\x1A\xAF\x67\x0F\x8E\x78\xE9\x54\x3D\xB1\x9E\x8B\x79\xA5\xDE\x2D\x4B\x8F\xF5\x63" + + "\x92\xF5\x5B\x31\xC9\xEA\xF4\xFF\x00\xA8\xA7\xA6\x9C\x07\x81\x49\xC3\x2D\x62\xE4\xC9\x64\x6B\xD7\xA5\x93\xE6\x59\x2F\xE9\x11\xE6" + + "\x04\x98\x88\xDF\x31\x64\xD8\x8F\x2F\x2E\x41\x5A\x0B\xB8\x7C\x5D\x7A\xEA\x76\x23\xF5\x50\x1F\xA8\x27\x47\x25\xEA\x8F\x45\xFA\x9D" + + "\xC6\x2A\x72\xCC\x2F\x52\x39\xCC\x54\x64\xE5\x75\xF3\x58\x67\xCA\xE6\xE9\x59\xE5\x1C\x68\x8C\x95\x48\x6A\xF3\x4C\xC8\xA3\x6F\x35" + + "\x72\xDC\x35\xDF\x14\x25\xA1\x87\xB9\x8B\x34\xED\xC9\x49\x73\x15\xDE\x16\xAD\x1D\x83\xFB\x5C\xE4\x7E\xE6\x73\x7F\xA7\x8F\xB3\xEB" + + "\xD8\x9E\x09\x81\xE6\xB9\x0E\x43\xD2\x35\xC9\x73\xBC\x86\x76\xA7\x1D\xCA\x5D\xC7\x61\xEA\xC7\x52\x9F\x04\xB3\x57\x19\xCB\x39\x0E" + + "\x1A\x95\xAC\x86\x57\x8B\x38\xB9\x90\xB3\x26\x3F\x3C\xB1\x9A\xAD\x0B\x51\xEE\xB7\x1B\x3B\x1A\x66\x21\xEA\x90\x23\x04\x62\xB3\x26" + + "\xCB\xB2\xEE\x90\x08\xA5\x17\x16\xC1\x2A\x1E\xF8\x0A\x18\xB6\x48\xB9\x79\x51\x67\x58\x1C\x95\x52\x6C\x97\x2C\x52\xFB\x2C\xC0\x82" + + "\xE2\xE0\xDB\x01\x88\xB9\xB0\xC5\xCF\x54\xE1\xFA\xA7\xE7\xB0\xD8\x8F\x6F\x73\x71\x4E\x10\xB9\xD5\xC4\x73\xEE\x7B\xC3\xB8\xB6\x35" + + "\x79\x4C\xD8\x35\xE4\x72\x22\x5F\x7C\xFB\xD7\x96\xA7\x19\xA5\x16\x1F\xBA\x41\x85\x0A\x16\xAC\xE4\x2C\x6C\xE0\x99\x0B\x00\xB7\x31" + + "\xC5\x39\x6C\x5E\xD7\xFA\xA1\xED\xC3\x0B\x1F\x1A\xE4\x7C\x83\x8B\xE3\x3D\xB3\x58\xE1\x3C\xF4\x71\x6C\x44\xD9\xEB\xFC\x27\x13\xC6" + + "\x72\x3D\x3E\xA3\xC6\x79\x4C\x98\x3C\x52\xD9\xCE\xE5\x28\xD9\xCA\x4B\x99\xC6\xE4\x69\x60\xF1\xD9\x3C\x82\x56\x0F\x98\x15\x1A\x9E" + + "\x1E\xE9\xF5\x4A\x5E\xF1\x30\x6B\xD5\xCF\x75\x7E\xCA\x7A\x47\x25\x3C\x2C\x77\xB3\xDD\x70\xA3\x9C\xE5\x34\xB1\x3C\x5F\x8B\xF1\xAE" + + "\xDA\x78\xDC\xD6\x02\x8B\xA4\xF4\x78\xAE\x17\x0D\x41\xE3\x14\xA6\xCD\xF7\x4C\x62\x73\x22\xC3\x2C\xCD\x2C\xCE\x0B\xB5\xF7\x60\x64" + + "\x19\xCF\x71\x5D\x6E\xCC\x34\x40\x57\xE2\x98\x0E\x98\x74\xCA\x9B\x30\xEE\x54\xB3\x53\x17\x9A\xE7\xB9\x83\x1F\x8D\x2F\xCE\xBC\xF7" + + "\x09\x1C\xC0\x79\x3F\xB2\x80\xB0\xD2\xAF\xA7\x7A\x1D\x21\xAF\xD4\x25\x4D\xE5\x50\xB2\x27\x98\x85\x5A\xCB\x0C\x0F\x25\xB8\x2B\x63" + + "\x24\x88\x8F\x9B\xD9\x98\x2B\x86\xB3\x06\x9A\xD5\x40\xA5\xA0\x56\x20\x3B\x15\xC2\xB1\x26\xE5\xE4\x45\xE4\x77\x0A\xAC\xC0\xDA\xDB" + + "\x96\xE5\x48\xE6\x5B\x7F\xFA\xDC\x74\x1A\x6A\xDF\x2E\x27\x98\x5C\xE4\xF6\xBB\x77\xFD\x27\x88\x71\x2E\x63\xCA\xF2\xE9\x21\x00\x2C" + + "\x36\xF1\xF8\x0C\x0D\xF9\xF1\xAE\x5C\x84\x66\xCA\x0A\x50\xC0\xDE\x6D\x4D\x02\x2B\xB2\xD4\x4F\xEA\x3F\xD5\x3E\xB8\xF3\x4C\x4F\x10" + + "\xCC\xE3\xA8\xF3\xDE\x8F\xF4\xFB\xF7\x99\x4E\x3F\x87\xE4\x3C\x2F\x1D\x47\x96\x75\x27\x82\xE6\xB9\x29\xC7\x71\xBC\x7F\x2A\xCB\xC5" + + "\x8D\xCF\x54\xC1\xF1\xEE\x4B\xCA\xFF\x00\xAC\x4F\xC4\x78\xF5\xBA\xFC\x85\xF0\xDC\x47\x8D\xDD\xE5\x07\x2F\xCA\xE9\x67\xB9\x8E\x2E" + + "\x7E\x19\x64\x62\x22\xEF\xF1\xA2\x12\xEE\xDD\xA8\x8A\x0B\x31\x24\xE8\x00\x07\xF3\xB3\xAD\x0F\xE7\xC7\xFC\x7A\x21\x93\xE9\x92\xF2" + + "\xBC\x3D\xCC\x37\x23\xC6\xE2\x6F\xE1\x72\xD5\xE4\xA7\x92\xC3\xE6\x69\xC1\x94\xA5\x7E\x94\xE8\x63\x9A\xA5\xFC\x75\x88\xA6\xAB\x66" + + "\xBC\xC8\x4A\xCD\x05\x95\x31\xBA\x92\xB2\x21\x04\xEA\xE0\xFA\x0C\x4B\x4F\x32\x3D\x74\xB1\x4D\x22\x32\xD3\xD4\x46\xA2\x2F\x22\x43" + + "\x6F\xE6\x2A\xDE\x46\x66\x16\xB1\x21\x86\xD0\x6E\xBB\x5C\x2B\xAD\x39\x35\x66\x59\xA2\x7F\x86\x8D\xE2\x47\x56\x92\x19\x18\xBF\x98" + + "\xA0\xE5\x49\x01\x05\x8D\xF8\x2A\x41\x22\xCD\xB9\x0B\x29\xA1\x6F\x6C\x1D\x26\xEB\xD0\xBD\x86\x8F\x85\xF5\x6F\xAF\x1C\x9F\x35\xC0" + + "\x39\x5D\x0E\xA5\xE4\xB9\x87\xB8\xEB\x3C\x47\x90\xF1\x8E\x2F\xCE\xE6\xE0\xF8\x0C\xFF\x00\x08\xC2\x70\xCC\x7F\x1F\xEA\xB7\x51\xB9" + + "\x7D\x5A\x9C\xAF\x85\xF3\x6B\xD8\x6E\xA6\x71\xCB\x7C\xA2\x5A\x47\x03\xCA\xF2\x56\x2B\xDF\xE3\x1C\xA6\x8E\x3A\xBC\xF7\x97\xC7\x3D" + + "\xE1\xF3\x3A\xD8\xF8\x29\xF5\x07\xDB\x2F\x55\xAB\x72\x58\x51\x22\xB9\x63\xA7\x99\xAE\x99\x73\x2E\x19\x7E\xCA\x8D\x3C\xB8\x2C\xD6" + + "\x6B\x9C\xF0\xAC\xFB\x53\x90\x82\x55\xB9\x0F\x12\xE3\xD3\xC4\x49\x47\x89\x95\x44\xAE\xBE\x1B\xA2\xF8\xBE\x0B\x85\x83\x05\xC2\x70" + + "\x5C\x77\x8F\xE0\x28\x89\x1E\xB6\x07\x8C\x61\xA9\xE0\x31\xD5\xFE\x47\x69\x65\x35\x71\xB8\xFA\xF5\xA8\xC6\x64\x76\x67\x71\x1C\x68" + + "\xF2\x3E\xDB\xF3\x63\xE7\xF4\x35\xCE\xC4\x42\x36\x05\x06\x8E\xF6\x06\xF7\xA7\xDE\xFC\x9D\x9D\xF9\x3F\xC8\xF2\x7C\xFA\x1A\x4F\x0F" + + "\x51\x2D\x1C\x31\x3E\xA1\x5B\x55\x51\x10\x2A\xF5\x06\x55\x66\x60\xCC\x5D\x63\x22\x68\x9A\xD1\xC7\xB8\x88\xCE\xDD\xE4\x12\x09\x2A" + + "\x15\x10\xD5\x1A\xDC\x93\x4E\xF2\x25\x2D\x34\x71\x31\x1B\x62\x54\x65\x0A\x40\x50\x58\x98\xDD\x6E\xEE\x00\xDD\xFE\xD1\x8B\x00\x6E" + + "\x5B\x49\x72\xEE\xAB\x75\x1F\xAC\x1E\xE1\xFA\x13\x82\xE5\x7C\x2E\x0E\x05\xD2\x74\xA3\xD4\x8E\x69\x84\xE0\xD9\x9C\x9E\x3B\x31\xCE" + + "\x72\xDC\xF3\x87\x50\xC0\xD6\xE3\xFC\x9B\x9A\x4F\xC7\x32\x59\x1E\x27\x8E\xA1\x82\xA3\xC9\x73\x92\x60\xF8\xA6\x2B\x2D\xCA\xEB\xB6" + + "\x5E\x4C\x7F\x2C\xBF\x9A\xAF\x96\xC4\x61\xF1\xF8\xAA\x44\xF6\x02\x7E\x4E\xA7\xFB\xBD\x32\xE5\xCF\x1E\xFE\xA3\xEE\x23\x91\xDB\xFE" + + "\xB3\x72\xAF\x32\x96\xB4\x0A\xF9\x7E\x47\x29\xD5\x9E\x1D\xC7\x79\x25\xD4\xB1\x08\x98\xAC\x20\xD7\xAE\x0B\x48\x0B\xD9\x86\x23\x2C" + + "\xAB\x79\x79\xBA\x80\x7B\x97\xE8\x2E\xC1\xDC\x3C\x2F\xAE\x13\xF6\xFE\x3A\xFF\x00\xE0\xE9\xE4\x04\x82\x0E\xCA\x8F\xDC\x68\x8F\x04" + + "\x96\x1B\x1F\xC8\xA4\x8F\x60\x8B\x05\x2C\xE7\xB9\x5C\xF6\x46\xBD\x8C\x8E\x29\xBA\xDD\x9D\xB1\x6F\x1B\x0F\x22\xAD\xC6\x6B\xDD\x44" + + "\x7B\x93\xCB\x1D\xBC\x9B\xF1\x7E\x45\x76\x94\x41\x27\xEE\x5B\x74\xA4\xAD\x2A\x28\x27\x5B\xEC\x95\x6A\x3A\xC5\x2C\x74\xDA\xAA\x41" + + "\x0E\xF6\x54\x66\x37\x76\xDC\xCD\xBA\x92\x06\xC9\x50\xA0\x00\x49\x36\x55\x02\xF9\x0B\x7E\x6C\xFA\x34\xCD\x35\x09\x91\xD5\x41\x7D" + + "\xC0\x84\x51\x61\x69\x98\x0B\x09\x09\x0D\x60\x00\xBB\x31\xB0\xFA\x75\x28\xFF\x00\x52\x0A\x38\xFA\xBE\xD8\x3A\x08\xD8\xFE\xAE\xE5" + + "\xBA\xC1\x22\x7E\xA0\x3D\x2F\x9A\xFD\xDC\xBC\x7C\xA9\x07\x11\x9E\xCF\x45\x79\xC4\x29\xC6\x28\xD7\xE6\x19\x1C\x9E\x5D\x28\x0A\xF0" + + "\x47\x97\x50\x3F\x6D\x52\x5B\x19\x69\xA6\x8F\x1F\x4E\x49\x26\x56\xDC\xFD\x66\xE6\x3D\x43\xE0\x3D\x06\xBB\xC9\xBA\x53\xC3\xEA\x75" + + "\x13\x9A\xE3\xF1\xF8\x36\xA1\xC5\x23\x16\x2B\xBD\xDA\xD6\x8D\x48\x32\x33\xB2\xD4\xB5\xFB\xA9\xE4\xA9\x4D\xE5\xB2\x2B\xC2\x0B\x4E" + + "\x63\x0A\x21\x75\xEE\x5F\x5A\x87\xF5\x17\xCA\x60\x32\xBE\xD1\xFA\x3D\x63\x8E\x74\x9A\x6E\x9A\x52\x87\xDF\x9F\x47\x04\x52\x1C\xFE" + + "\x7B\x93\x27\x2D\x9A\x4E\x95\xF3\x65\x3C\x8E\x9F\x23\xCE\xE2\x71\x97\xF2\xD1\xC1\x0C\x8B\x80\x33\x27\xEF\xA1\x49\x31\xAD\x1A\x58" + + "\x12\x86\x86\x1C\xD3\xDD\x47\x13\xEA\xBF\x2B\xF6\xAB\x97\xA3\xD2\x7C\x87\x28\xAD\xCB\xE2\xC4\x60\xAF\xD5\xAB\xC6\xD6\x68\x33\xF9" + + "\x8A\xB5\x5A\x03\x77\x15\x8C\x9D\x6D\xD4\xB6\xB6\xE7\x82\x53\x3C\x65\xAC\x46\xB2\xB5\x41\x0A\x76\x97\x52\x30\x4F\xE2\x02\xC7\xFF" + + "\x00\x14\xD3\x79\xBE\x50\x8C\xD3\x51\x79\xA6\x45\x76\x8F\x6F\x98\xEA\xDB\xC1\x2A\xE5\x36\x8B\x30\x04\x16\x5C\x02\x30\x7A\xD5\x3C" + + "\x2E\x5F\xFE\x1F\x70\x9B\xB7\xFC\x55\x68\x50\xA6\x31\x26\xE2\xB0\x91\x62\xAA\xF1\xA9\xB9\x24\x15\x06\xDC\xE4\x8C\xF1\xEB\x99\xF7" + + "\x49\xEE\x83\xA0\x3E\xE9\x7A\x95\xD7\xDE\x09\xC4\x1B\x8D\xF3\x1E\x53\x9A\xBB\x8F\xE4\xFC\x2A\x1E\x1F\x7E\x6E\x2B\x2E\x33\x35\x6F" + + "\x31\x97\xCA\x60\xEF\xE1\xEA\xD4\xAF\x29\x8B\x1D\x97\x82\xA1\x59\x85\x8A\xF7\x2B\x5A\xAF\x0B\x09\x91\x82\x30\x8C\x9E\xE0\xBD\xD3" + + "\xFB\x81\xF7\x07\xCE\x33\x1D\x47\xEB\xB5\x0B\xF6\xEF\xDC\xC2\x3E\x03\x88\x63\x60\xC2\x3E\x07\x8E\x71\xFA\xF5\xA6\xFD\xF4\x38\x9A" + + "\x34\x2E\xD6\x99\x64\xC6\x45\x66\x45\xBF\x6D\x44\xCD\x91\xB7\x71\x61\xB7\x6A\xEC\x93\xB0\x99\x76\xE7\x53\x62\xEB\x65\xBE\xB5\xF2" + + "\x0E\x98\xE3\xEE\xF2\x3A\x3C\xBF\x1F\x04\x8D\x96\xC1\x4F\x83\x87\x29\xC8\x9B\x90\xC5\x7E\xCD\x7C\xAC\x19\x55\x96\x1B\x79\x06\xB9" + + "\x4E\x54\x30\xE4\x63\x8E\x6B\x6F\x0C\xF1\x4A\x44\x2E\x44\xF2\xFA\xD0\xFC\xB7\x98\x75\xAB\xA3\x79\xC1\x81\xE5\x79\x3E\xA1\x71\x0C" + + "\xF4\x90\x55\xC9\x0A\xB7\x78\xF6\x3F\x04\x96\x6A\xCE\xA6\x6A\x19\x4C\x78\xB9\x1B\xBE\x4A\x9C\xA9\x20\xB1\x8E\xC8\xFC\x10\x06\x49" + + "\x7E\x68\x3B\x3E\x4E\xF7\xDE\xB4\x48\x90\xD1\xE9\xBF\x15\x26\x98\xD1\xC9\xA7\x50\xC8\x94\xD1\x4D\xA8\x24\xCB\x09\xA5\x44\x86\x41" + + "\x1A\xE9\x15\x54\xD7\x78\xE2\x0F\xB1\x67\x22\x3D\xDB\x5A\x42\x7F\x16\x7F\x5B\x0E\xCA\x8A\x86\x89\x26\x32\xAC\xD3\xA9\x9A\x55\xA7" + + "\x60\xEE\x24\xF9\xD4\xC8\xD5\xD1\xCD\xB4\x33\xED\x0F\xE4\x02\xD6\x16\x50\x0D\xFA\x93\xD5\xFF\x00\x52\xFF\x00\x7B\x59\xFE\x82\x59" + + "\xF6\xDF\x94\xA3\x24\xDC\x77\x23\xC5\x65\xE1\x76\x39\xD2\x70\xDC\xA2\x73\x7F\xFA\x52\x1C\x74\xD5\x86\x05\x72\x95\x7B\x71\xAD\x05" + + "\xAC\x7A\x45\x89\x9E\xEC\x98\xE9\x32\x52\x50\x67\x8C\x5E\x0D\x2F\x77\xAB\x15\xFD\x38\xBD\xE7\xE7\x7A\x4D\xC7\x38\xB7\x44\x2D\x74" + + "\xA7\x15\x42\x16\xB1\x72\x2A\x5D\x46\xB1\x44\xE1\xB3\xBC\x86\x3C\x9E\x63\xF7\x0B\x43\x33\x5E\x4C\x04\x16\xF3\x37\x29\xA5\xD7\xAD" + + "\x5F\x20\x99\x6D\xD6\xC7\xE3\xA8\xD3\xFD\x8F\x6C\x2B\x2A\xD1\xAC\x38\x7E\xB1\xF2\x3E\x3C\xDC\xF6\xA4\x5C\xEA\xF7\x19\xB0\xF9\x09" + + "\x5F\x90\xCF\xC7\x64\x92\xBC\x92\x63\x85\x79\xF2\xD6\x65\xBB\x54\x58\xAD\x25\x5A\x31\x5E\xAD\x3D\xBB\xB6\xA7\x88\xA8\xB3\xF2\x08" + + "\x4C\x6B\x24\xAB\x63\xBF\xA5\xCF\x46\x3A\xD7\xD7\xAE\xAD\x70\xAC\xB7\x1A\xBF\x94\xC7\x70\xAE\x23\xCB\x31\x79\x3E\x71\xC8\x9F\x17" + + "\x6A\xF6\x12\x18\xA9\xCC\x32\x96\x31\x76\x64\x8F\xE1\xA7\x56\xFE\x73\x1F\x4C\xE3\xE8\x2C\xB2\x44\xD2\x4D\x3C\xAA\x17\xE0\x47\x64" + + "\xA6\x7F\x11\x68\xE2\x6F\x0F\x4D\x2C\xF5\x3A\x64\xB4\xF0\x54\xC5\x17\xF2\x65\xD4\x24\x9A\x9A\x6A\x98\x2A\x1A\x94\xB8\xA8\xD3\xE8" + + "\x54\x92\xB4\xF3\x29\xF2\xDA\x4D\xAC\xC2\xF1\x59\xC1\x33\x7E\x18\x1E\x46\xA7\x17\xC3\xC7\x50\x92\xC8\xAF\x21\x8C\x47\x04\x51\xCE" + + "\xB1\xBC\x42\x61\xBA\x2A\xAA\x93\x86\x95\x18\xEE\x48\xC1\x50\x76\xBA\x91\x8B\xC8\xFD\x44\x7A\xA3\xCB\x33\x3D\x26\x1D\x31\xC8\xF4" + + "\x6E\xB6\x67\x86\x75\x1B\x8A\x24\x37\xF9\xF6\x66\xA5\xEB\xD1\x61\xAC\xDA\xBD\x22\x3D\x6C\x65\x98\x6A\xDB\x8A\x85\xE8\xA0\xAF\x05" + + "\xB4\xB3\x35\xFA\xB6\x12\x3B\x2A\x50\x20\xD1\x68\xB7\xC2\x3D\xCD\x75\xC3\xA4\xD0\x75\x13\xA6\x5D\x29\xB3\x8A\x97\x1D\x93\xE5\x19" + + "\xAC\xA6\x16\x3C\x9E\x1D\xF3\x76\xF0\x39\x2C\xD0\x12\xE4\xEE\x71\x6B\x0F\x72\x0C\x75\x6F\xDE\x5F\x32\xE5\xA7\xAD\x97\xA3\x98\xC7" + + "\x26\x52\x5B\x76\xCD\x75\x16\xAD\x89\x83\x7E\xA4\xBD\x15\xEB\xDA\x7B\x8A\xE2\x2F\xCC\xB9\xAF\x25\xCB\x7B\x72\xE7\xFC\xDF\x8A\x63" + + "\xF8\xDE\x0B\x15\x91\xCE\xE3\xB0\x9C\x6D\x67\x56\xA9\x3F\x1C\x91\xA2\xAD\x1E\x3A\x1C\xDC\x89\x8E\xC8\xE4\x52\x01\x7E\xD4\xB1\xD2" + + "\xB0\x96\xEA\x39\x68\xE5\x4A\x90\x9E\x5E\x11\xED\xF4\xDF\xE4\xB8\xEA\xDD\x37\xEA\x2F\xEE\xF8\xDE\x7A\xE6\x09\xAE\xBF\x51\xF9\x4E" + + "\x3B\x04\xD6\x29\xE4\x66\xC6\x11\x90\xC9\xB6\x72\x39\x71\xF7\x5E\xD4\x31\x2A\x52\xAF\x8F\xC9\xB8\x5B\xD8\xF5\x8E\x46\x7B\x2F\x1C" + + "\x3E\x2A\xF1\xBE\xA7\x3E\x87\xAA\x68\xB5\x7A\x1E\xB7\xE2\xBA\x1D\x66\x93\xC3\xDA\x85\x54\xF2\x78\x53\x45\xD3\x35\x5A\x6A\x5D\x37" + + "\x53\xAF\xD3\xE9\xE6\xFF\x00\x56\x1A\xBF\x88\x74\x15\x4D\xB5\x1A\x52\xA4\x82\x08\xE5\x11\xD8\x4C\x2A\x62\x11\xC4\xC7\x60\xA3\xA3" + + "\x5D\x4E\x8E\xBA\x2D\x4E\x9B\x49\x5A\x27\xD5\x29\x63\x5F\xF5\x8A\xEA\xAA\x69\x66\xA8\xA4\xA5\xAA\x74\x5A\x4F\x84\xD3\x75\x0B\x96" + + "\x86\xB4\xB4\x65\xD8\x02\x7E\x51\x14\xAC\xEC\x06\xE6\xAB\xC5\x3A\xCB\xD3\xAE\x41\xC7\x3A\xAF\x85\xC2\x1C\x57\x3B\xE3\xD9\xDB\xBC" + + "\xA6\xC7\x31\xAD\x95\x39\xAC\xF5\xAC\x9D\xD1\x79\x72\x16\xB3\x35\xEC\x65\xF2\x10\x64\x63\xCA\xD7\xCA\x65\x6B\xE7\x37\x46\x41\x7E" + + "\xA6\x46\xFA\x5B\x90\x8B\x96\x9A\x46\x7E\xF1\x7D\xCA\xF5\x7F\xAE\xDD\x3A\xCC\x5C\xE7\x38\xAC\x26\x41\x78\x1E\x3B\x8D\x4F\x80\xE0" + + "\xDC\x77\x03\x7E\x96\x17\x33\x99\xB5\xD5\x0E\x9E\x4F\x92\xBD\x7A\xBE\x46\xFE\x77\x21\x90\xC9\x5A\xC6\xD0\x97\x11\xF1\x2D\x86\xAD" + + "\x5F\x1B\x72\xF4\x18\xFA\x10\x9B\xF9\x03\x73\x0E\xE4\x96\x78\x97\x23\xC4\xE3\x70\x9C\xC7\x07\xCC\xB2\x3C\x77\x04\xD1\xA5\x4A\xB5" + + "\xBA\xEF\xCC\x6E\x5D\x8F\xE4\x31\xD5\x85\xA2\x8E\xF2\x60\xA1\xBD\x71\x76\x95\xE9\x1C\x96\x66\x37\x4F\x95\xA0\x82\xC4\x3F\xB8\x91" + + "\x64\xD0\xDC\xDF\x84\x74\x7F\x29\xC0\x3A\xA5\x90\xE9\xC6\x1F\xA9\x1C\x77\x94\x70\x73\xC5\x3F\x61\x7B\x33\xCD\xB3\x96\x0C\xB6\x79" + + "\x1F\x25\xA7\x83\x82\x1B\x75\x65\xCE\x65\x3F\x6E\xB3\x95\xB1\x25\x41\xDE\xC6\x78\x3B\x2E\xD7\x91\x18\x4B\x17\xAA\x17\x81\xBC\x55" + + "\xAB\xCE\xB4\x34\x1A\x97\x89\x3C\x5E\xFA\x65\x67\x8B\x34\x39\x75\x34\xD3\xBC\x3B\xA3\xC9\xE1\xF9\x6A\xAA\x7C\x43\xA5\x47\x43\x1E" + + "\xA9\x5E\x7C\x7F\xAC\xD7\x40\x6B\x6A\x5E\x96\x3A\xA3\x4D\x0A\xB2\xC5\x21\x22\x9A\xAA\x1A\x7D\xCF\x25\xA9\xE8\xDA\x60\x9E\x4A\xCD" + + "\x32\x2D\x1D\xE7\xA5\xD2\x2B\xE3\xA6\x8A\xAF\x51\xA9\x1A\x91\x58\x74\xAA\xB6\x9D\xE9\x61\x5F\x0D\xE9\xD0\xB0\xA7\x85\x26\x92\x35" + + "\x94\xB2\xB3\xC6\x2F\x34\x4F\x2D\x96\xFC\xFF\x00\x4F\xFF\x00\x74\x5C\xD3\xAC\xFD\x3A\xC8\xE4\xB2\x3D\x34\x6E\x06\xD8\x19\x2F\xD7" + + "\x1C\x22\x95\x84\x94\x08\x29\x53\x59\xE3\x9E\xBD\x78\xB1\x18\xC5\xA8\xF7\xB6\xB1\x45\x4D\xF1\xC9\x66\x07\x45\x42\x64\x05\x24\x6A" + + "\x46\xF7\x61\xEE\x82\xAF\x35\xEB\x8D\x2E\x7B\xC1\x7A\x41\x37\x40\xB9\x47\x4E\x69\x63\x2E\x18\x20\xC7\xC7\x8A\xB7\x94\xE5\x14\xB9" + + "\x4C\x79\x8C\x76\x7B\x31\x8C\x18\x0C\x14\x72\xE5\xA8\xDC\x68\xE0\x92\xC5\x98\x6E\xBD\x98\xA3\x9A\x39\xAC\x4D\x00\x8E\x35\xB8\x1F" + + "\xD3\x5F\xA6\x7D\x67\xE9\xC7\xB7\x4E\xAE\x72\x7E\xA5\xC3\x7F\x25\xCB\x3B\x72\xF2\x70\x3C\x6D\xAC\x2E\x6B\x17\x93\x27\x1D\xC6\xCC" + + "\xD1\xC2\xEB\x7F\x11\xC7\xF2\xD9\x34\xBD\x90\xF8\xA2\x89\xCD\x5B\x0F\x61\xD5\xE3\x86\x66\x21\x7D\x52\x17\x57\x39\x6F\xB8\x1E\x5F" + + "\xCD\xF2\x32\x66\x71\xB8\x7E\x1D\xD4\x7C\xC1\xC5\xC3\x8A\xCE\x1E\x14\x98\x9B\x11\x52\xA9\x6B\x3B\x2B\x51\xC5\x49\xC9\x28\xD9\xE4" + + "\x18\xDC\xE5\xFC\xDD\xEC\x6B\xD3\xCC\x42\xCB\x71\xEA\x52\x5A\xD0\x64\xA1\x15\xE0\xAD\xEB\xD2\x50\x41\x4E\xF5\xB5\x70\xC3\x55\x49" + + "\x02\xC9\x55\x4E\x61\xA8\x8E\x5A\x89\x15\x23\x8E\x58\xA5\x63\x10\x65\x46\x20\xED\xDB\xB9\x8D\xD5\xED\x63\xB4\x96\x12\x7E\x10\xD4" + + "\x63\xD2\x1C\xEB\x95\xFA\x7D\x46\xA2\xBA\x76\x95\x5D\x19\xD3\xA4\x7A\x5A\x79\xEA\x27\xAD\xA1\xA9\xA1\x50\xE8\xE1\xA2\x91\x10\xCC" + + "\x26\x95\x2C\x18\x42\x84\xAA\x3C\xE1\x23\x3B\x43\xDC\x0F\xEA\x1B\xEE\x2F\xDC\xF7\x05\xA1\xD3\x6C\xB7\x06\xC1\xF1\xBE\x19\x72\x6C" + + "\x6C\xFC\xC4\x71\x2C\x7E\x6E\x39\xB9\x41\xC7\xC9\x1D\x94\x86\xCD\xBC\xBE\x52\x68\xEB\x63\x16\xEC\x10\xE4\x13\x19\x52\x78\x1A\x5B" + + "\x10\xC3\xFB\x9B\xB2\xA4\x48\x57\x05\xF6\xD1\xEF\xCF\xAA\x9E\xCF\x4F\x2B\xE2\x5C\x7B\x87\xE1\x79\x07\x09\xE4\x99\x57\xCD\xD4\xE3" + + "\x9C\xA6\x3C\x95\x37\xC6\xE5\x05\x68\x68\x36\x4B\x15\x6B\x1F\x90\x91\xAB\x8B\xF5\xAA\xD3\x4C\x9D\x07\x96\xFD\x67\x7A\xD1\x0A\xD2" + + "\x43\x32\xCF\x3C\xD0\x7B\x1F\x94\xC8\x49\x8F\xE3\x12\x67\x73\x1D\x4A\xCE\xE5\xF9\x2C\x56\xAC\x4C\x98\xAE\x5B\xC8\x1D\xE4\x95\x2C" + + "\x3A\x2F\xED\xA8\x57\xC8\x47\xFB\x96\x48\xD5\x25\xB4\xED\x23\x49\x12\x96\x9E\x67\x92\x49\x8E\xCB\xE0\x3A\x83\x90\xE3\x17\x27\xB9" + + "\x88\x4C\xC9\xB8\x9D\xD1\xD5\xC8\xE7\xB3\xD1\xE5\x33\xB8\x79\x74\x62\x96\xC6\x1A\xFE\x57\x17\x9D\xBD\xC6\x72\x49\xF1\xAA\x1B\xD8" + + "\x0C\x95\x3B\xC8\xE9\xBF\xDC\xAC\x91\x46\x43\xB9\xB5\xFD\x51\x35\x25\xD4\x17\x53\xD4\xE6\x96\x09\x27\xA2\x4A\xC6\xD3\x69\x62\x56" + + "\x48\x25\x7A\x79\x92\x06\x93\x56\x4A\x79\x14\x48\xB2\x1D\x8F\x48\x8E\xC0\x82\xC5\x41\x0E\x75\xFA\x3F\x04\xF8\x6E\x6F\x0D\xAE\x87" + + "\x36\x87\xE0\xDD\x30\x57\x53\xE9\xBA\xEC\xDA\x57\xFC\x53\xAC\xD7\x55\xC0\x75\x4A\x0A\x3D\x52\x80\xD6\xD3\xD1\x78\x06\x5D\x4E\x99" + + "\xDA\x8E\xAE\x98\x3C\xD0\xEB\xB3\x52\xC6\x4B\x47\x1C\x73\x32\x14\x5B\x13\xE8\x7F\xB9\x58\xB9\x17\xB8\xFC\xAF\x57\x3A\xD3\xD1\xEE" + + "\x37\xD5\xDC\xEF\x52\x6A\x63\xE2\x10\x65\x30\x75\xAF\x63\xF8\x84\xD2\xE4\xE1\x15\x6C\x60\xE8\xE6\xA9\xE4\xAA\x57\x4C\x6E\x32\xB5" + + "\x4C\x75\x59\xA7\x9E\x3B\x51\x54\xAB\xA7\xBD\x23\x3C\xCD\x27\x45\x7D\x59\xEB\x04\x1C\x53\xA1\xDC\x83\xA8\x95\xF8\xEC\xD9\xCA\xB4" + + "\x70\xB2\x49\xFF\x00\x4D\xC7\x15\x5B\x90\xE5\x22\x35\xDF\xFF\x00\x6A\xB1\x35\x1B\x70\xC9\x0C\x80\x08\xCC\x6C\x24\x88\x0D\xAB\x42" + + "\xDF\xDA\xDC\x6D\x51\xCC\xF7\x2E\x39\x96\xC7\x3C\x46\xC8\x58\x8A\xAF\xCD\x6B\x90\x66\x6C\x40\xB2\x34\x86\x26\x61\x6D\xEF\xF6\xD9" + + "\x20\xF6\xBB\xAA\x81\x2A\xC2\xA6\x46\x44\x20\x22\xD9\x37\x40\x78\xCF\xBC\x6E\x39\xED\xF3\x94\x75\x63\x8B\xF2\x79\xF3\xBD\x08\x7B" + + "\xDC\x9B\x15\x17\x4E\xF3\x59\x7C\xFF\x00\x23\x9F\x3B\x91\x06\xC6\x09\x72\x31\xF1\xDC\x65\x1B\x99\x3A\x78\xFA\xD9\x75\x85\xAF\xE4" + + "\x69\xE5\xF1\x36\x64\x8E\xB3\xC8\xD1\x58\xAA\xD2\x7C\xA8\x79\xB4\x7A\x8C\xF1\xBC\xF2\x54\xD3\xD4\x44\xCF\x53\x34\xDA\xB2\x88\x63" + + "\xAE\xF8\x8A\xAD\xE4\xA4\x91\xD4\xD4\x05\xBB\x89\x00\x31\x81\xBD\x6E\xF7\xB2\x82\x33\x0F\xE2\x27\x85\x75\x1D\x0E\x9E\x5D\x76\x9E" + + "\xAF\xC3\x15\x3A\x75\x63\xD3\x68\xB4\xD4\x1E\x13\xAC\xAA\xD4\x24\xD2\x27\xD3\xF4\x68\x16\x38\x25\x86\xB7\x46\xD2\x4E\xE3\x4F\x0A" + + "\x39\x8D\xD3\x7A\x4A\x4C\x73\x22\x3B\x7C\xD1\xCE\xCF\xBC\x9E\x53\xD0\xEF\x73\x4B\xEE\x2B\xA6\x7C\x0B\x8C\x71\x9B\xEF\x35\xD8\x66" + + "\xE1\x32\x23\x8E\x37\x63\x1D\x9D\xAF\x1D\x5C\xB6\x3A\xFC\x58\x9A\x78\x14\xAB\x0D\xC4\x89\xA6\x82\x3A\x35\xAA\x35\x1B\x2B\x0C\xCA" + + "\xCF\x34\x3B\x72\x1E\xE7\x3D\xE1\xFB\x8E\xF7\x8B\x9E\xC3\xCF\xD5\x9E\x90\xE7\x38\xDF\x4F\xF8\xD6\x2B\x25\x63\x8B\x71\x4E\x21\xC5" + + "\x72\xB6\x28\x47\x9E\xBD\x50\x35\x7C\xAD\xC9\x39\x3F\x9B\xA9\x92\x55\xAF\x56\xCD\xD1\x2C\xAF\x5A\x91\x2F\x8E\x89\xC3\xBC\x33\x69" + + "\x6C\x4F\x25\xE5\xF4\xF9\xDF\x2D\xCA\x5E\xC2\xE3\x71\x5C\xBB\x31\xFB\x4C\x25\x48\xF1\x8B\x43\x10\xDC\x78\x44\xF4\x0C\x73\x62\x6B" + + "\xE5\xE6\x8E\xE4\x16\x05\x4A\x30\x52\x91\xE2\xB1\x16\x54\xCB\x3D\x81\x34\x8D\x39\x9D\x4B\x3C\xA3\xF5\x27\x3D\xCC\xAC\xF1\xEC\x53" + + "\x72\x5C\xEF\x21\x0D\x28\xB5\x57\x1F\x56\xE6\x7B\x27\x62\xC4\x02\xCC\x97\x2E\xCD\x12\xA4\xD7\x24\x8E\x25\xAF\xFF\x00\xB9\x96\x38" + + "\xE7\x99\x5F\xB0\x08\xDC\xB6\xFD\x68\xB0\x56\x98\xE9\xDE\x9A\x9E\x62\xD4\xC4\xA6\xE8\x60\x90\x34\x4C\x40\x4B\x7C\xE0\x96\x60\x6C" + + "\x00\x56\xDB\xB8\x28\x27\x9E\xBC\x77\x59\x43\x58\x1A\xB2\xB2\xB2\x6A\xE8\xE6\xAB\xD4\xDE\x0A\x5A\x4F\x82\xDF\x5B\x3E\xE5\x25\x64" + + "\x43\x3D\x5E\x9F\x1A\xC4\x22\xA7\x72\xC1\x2A\x40\x42\x36\xDB\xE6\x01\xA6\x77\x49\xBF\x56\x4F\x74\x9D\x2C\xE9\x1F\x1D\xF6\xF5\x98" + + "\xE9\xD6\x04\x4D\x0E\x3A\x0E\x0D\xC3\xF9\x96\x42\x8F\x20\xC4\xF2\xAC\x27\x1D\x99\x93\x17\x46\xBD\x5A\xD3\xC8\xF4\x32\x37\x30\x54" + + "\xA6\x8E\xB6\x32\xF4\xB5\x9A\x4E\xD8\xAB\x34\xEB\x34\xAA\x92\x7A\x9F\x7E\xC1\xF9\xEC\x1C\x75\x78\x5F\x17\xCA\xF0\xCC\x75\xAC\xE6" + + "\x62\x90\xC8\xD8\xE6\x59\x1A\x35\x46\x53\x0B\x35\x9C\x38\xB1\x62\x09\xED\x59\xA8\xB6\x6A\xA4\x93\x2D\x88\xD8\x47\x7A\x0D\xCB\x71" + + "\xE3\x68\x89\x91\xBB\xA8\x86\x6E\xA0\x73\xBE\x01\x9F\x4C\x77\x22\xB5\xCA\x78\xDF\x24\xC2\x58\x12\x8A\x99\x8E\x13\x8C\x83\x23\x89" + + "\xB6\x8A\x3B\x2C\x57\xAF\xC8\xA4\xA3\x91\xA7\x69\x51\xB7\x0D\x83\x56\x9D\x95\x53\xF8\x38\x53\xEB\x74\xE0\xF9\x7F\x5D\x73\x78\x09" + + "\x39\x8E\x2E\xFE\x66\x5E\x2E\xE1\x89\xCE\x65\xBA\x70\x2B\xC0\xEE\x24\xED\x96\xC3\xE4\x97\x1B\x67\x0B\x3D\x28\x25\x0C\xF7\xAE\x53" + + "\xCE\x5D\x96\xA2\x86\x96\x7A\xC1\x87\x68\x6D\xA8\x86\xD5\x69\x3E\x0E\xA2\x69\x5D\x63\x46\x48\x95\xB0\x29\xFE\x50\xAA\x7E\x42\xA5" + + "\x88\xF9\x7E\x56\x36\x21\x42\xB5\xC7\x43\xA0\x6B\x8D\xA4\xEA\x8F\x52\x20\xD4\x6B\x5E\x20\x43\x42\xB4\xFA\x62\xCC\x8B\xBA\x27\x97" + + "\xCF\x48\xF5\x39\xDA\x2B\x18\xC8\xF3\x1C\xB3\x26\xF2\x41\x53\xCF\x61\x31\xCF\x4E\xCA\x97\x86\x63\x32\xEC\x93\x35\x3E\xEF\x81\x9C" + + "\x0D\x90\xAF\x1E\xFE\x42\xC7\xFB\x84\x6F\x29\xDF\xE2\xDE\x77\xEB\xC4\xD0\xCC\xC5\x9D\x65\xB9\x1A\xF9\xD2\x11\x55\x94\x8D\x0D\xF6" + + "\x86\x5E\xED\x1F\xAD\x16\x57\xDF\xF6\xEB\xEF\xD5\x44\x7E\x9E\xFC\x6B\xAD\xDC\xC7\x8A\xF1\x5E\xA4\x50\xE4\xF5\xB0\x9C\x42\x5C\xBD" + + "\x77\xE5\xD8\xF6\xC9\x4D\x4E\x1E\x44\xD5\x6B\xD7\x9E\xC2\x55\xE3\xF1\x52\xB7\x41\x9E\x6A\xB3\xD7\x8F\xF7\xB3\xBD\x27\x42\xEC\xB5" + + "\xA5\xEC\x5E\xD1\x6F\xF2\xB4\x23\xF1\x6B\x91\xD6\x91\x88\x69\x22\xF9\x20\x8D\xC0\x61\xE5\x80\xF8\x9D\x64\x04\x82\x77\xA0\x4E\x8F" + + "\xE4\x3D\x66\x55\xB4\x29\x47\x39\x81\x6A\x23\x9C\x28\xF9\x99\x47\x96\x51\x94\x80\x51\xD4\xB1\x1B\x80\xB6\x03\xE4\x7A\x5B\x6F\x5E" + + "\x83\xD2\x35\x26\xD5\x68\x60\xAF\x14\xF2\xD3\xAD\x44\x71\xCD\x1A\xCB\x66\x2C\x92\xA2\xBA\xB0\xC7\xA3\x05\x38\x20\x30\x20\x33\x01" + + "\x7E\x83\xE8\x44\xC6\x42\x5A\x20\x03\x7F\x7C\x41\x9D\x9C\xA9\xD2\x95\x95\x9C\x85\xD0\xD0\x5D\x82\x36\x42\x9F\x24\x1F\x12\xBC\x0A" + + "\xA1\x96\x3A\x65\xDD\x81\x95\x25\x8F\xE0\xF9\x01\x24\x10\xA8\xF1\x3B\x16\x1F\x7A\xED\xD9\x3B\xFE\x40\x1E\x8B\x07\x74\x5E\xC5\xB3" + + "\x5E\xC4\x5D\xA0\x00\xC4\x47\x20\xD0\xF2\xC1\x97\xBA\x36\x1F\xFE\xCF\x60\x1E\x0E\x99\x7E\x83\x03\x66\x20\xF2\xC5\x12\xC0\x64\x3D" + + "\x81\x99\x87\x77\xF6\x9D\x12\xEA\x3E\x25\x62\x36\x06\x92\x4F\x90\x7D\x95\x1E\x9B\xA5\x96\xCB\xB8\x5F\xDC\x5F\x38\x22\xC4\x31\x53" + + "\x7E\x3B\x5B\x3F\x43\x27\xE9\xED\xFF\x00\xDD\xBE\xA3\x39\xFC\xBA\x9A\x90\xAD\xF3\x0B\x45\x33\xCA\xB1\xBE\xE2\x6F\x9A\xB4\x73\xC9" + + "\xF7\xE6\x43\x2D\x6B\xE5\x95\x08\xDF\x6F\x70\x0C\xBB\xFC\x9B\x60\xA8\x92\x3D\x21\xE6\xAF\xF0\xA7\x18\xCE\x5E\x8A\x71\x18\x58\x70" + + "\xD6\x65\xDF\x73\xA0\x1D\x8D\x8D\xB2\x59\xE5\x6E\xF5\xD1\x6A\x6C\xEF\xB6\x1B\xAF\xDC\x59\x61\x56\x8F\x50\x8F\xDB\x8D\xA4\xB0\x92" + + "\x19\x7B\xEB\xED\xDA\x64\x56\x3B\x25\xB5\x67\xFD\x30\x75\xB0\x08\x94\x29\xD0\x50\x4E\xFD\x10\x5A\x29\x63\xFD\x62\xE2\x29\x57\xB4" + + "\x94\xAF\x62\x45\x99\x1D\x58\xB2\x48\x2C\xA2\x41\x3A\xC8\xBA\x0F\xA3\xDA\x03\x79\x52\xDE\x1B\xD4\x96\x8F\xAB\xD4\x68\x95\xE9\x55" + + "\x01\x2E\x86\xCB\x3C\x3B\x8E\xC9\xE2\x36\xDC\x97\xC8\x0C\x39\x8D\xB2\x55\x85\xF3\xF3\x03\x17\xAB\x69\x50\x6A\xD4\x6D\x4D\x35\x95" + + "\xC5\xDA\x19\x80\x1B\xE2\x94\x0C\x30\x17\xB9\x53\xC3\xAD\xC0\x61\x71\x83\x62\x26\x17\x3C\xE9\xA7\x07\xEA\x6E\x37\x17\x86\xE7\x1C" + + "\x7E\x1E\x49\x0E\x07\x24\x33\xFC\x61\x67\xC9\xE4\xF1\x33\xC5\x96\x82\x9D\x9A\x62\x26\xC9\x62\xA7\xAB\x76\x38\xA7\xAD\x72\xC5\x3B" + + "\xB5\xD9\xA6\xAF\x72\x8C\xCC\x2D\xD5\xB5\xF1\xB8\x5A\x9D\xEA\xEF\x4B\xF9\x96\x67\x8C\x5E\xC9\x75\x4B\xA7\x9C\x1B\xA4\xFC\x3F\x26" + + "\x99\x1C\x2E\x33\xA6\x2D\xFD\x1A\xC4\x77\x8C\xF0\xCD\x8F\xBD\x8F\xC0\xF1\xAE\x3A\x2E\xC9\xCB\xB2\x76\x20\x92\x65\xCB\x72\xBE\x55" + + "\x6F\x8E\xC3\x7A\x94\xAF\x7E\x4C\x96\x23\x07\x62\xBD\x5A\xF6\x85\xD3\x8E\x6B\x2F\x20\x85\x30\xD9\x27\x0B\x98\xA3\x08\x75\x9F\xE4" + + "\x66\x97\x25\x0C\x4A\x07\xEF\x15\x99\x42\x0B\x90\xB0\x43\x6A\x2E\xE6\x32\x86\x79\x95\x7E\x26\x91\x23\xD7\x7E\xE1\x3A\x5B\xD3\xEC" + + "\xAD\x7C\xB7\x5B\xB9\x2F\x15\xE6\x9C\xE7\x3B\xC2\x78\x97\xF4\xBB\x5C\x2F\x8A\x67\x2E\x50\xAF\x9E\xC7\xD5\xC8\xB5\xFA\x96\xAD\xC3" + + "\x40\xAE\x62\x34\xC1\x9B\xB9\x0C\x8D\xA9\x38\xED\x85\xC8\x5E\xC5\x1B\x95\xE5\xC3\xF2\x7B\xB5\x31\x18\xB8\xFD\x1F\xA2\xEA\x94\xDA" + + "\xAD\x14\x32\x42\xEA\xF1\xBA\xDE\x3B\xD8\x11\x8F\xE6\x43\x28\x0A\xCC\x64\x8B\x80\x97\xFF\x00\xE3\x70\x17\x76\x2B\x57\x4D\x51\xA6" + + "\x55\xC9\x4D\x50\x85\x64\x89\xAC\x42\xE4\x10\x48\xDA\xF1\x16\x60\xBB\x65\x16\xB3\xF6\x1C\xD8\x82\x07\x2C\x5D\x05\xE7\xD6\xFF\x00" + + "\x4E\x0F\x70\x39\xFE\x89\x75\x4E\x47\xCE\x7B\x2D\xF7\x2D\xFB\xCA\x33\x45\x72\x7B\x37\x69\x70\xD7\xCC\x2C\x98\xB7\xB7\x3F\x7E\xA4" + + "\x8A\x4C\x55\x69\xD7\x19\xC8\x3B\x17\xE5\xCB\x71\xA3\x4F\x29\x1C\xB6\xF2\x18\x59\x51\x7A\x42\xE1\xFD\x41\xE7\x3D\x34\xC9\x74\xC3" + + "\xA3\x7D\x41\x9F\x05\xD5\xBE\x81\xF5\x5E\x4B\x9D\x3E\xE3\x7D\x59\xB9\x91\x9E\x9F\x26\xC1\x45\x95\xC0\x58\x7E\x1D\xC5\x79\xCD\x5A" + + "\xB4\x72\x58\x6E\x6A\xBC\xBA\x14\xFF\x00\xA7\x71\x1C\xDA\xA6\x4B\x8C\x1B\xF7\x25\xC7\xD4\xC9\xE3\x2F\x66\x72\x31\x5D\xC9\xD6\xD7" + + "\xBA\x2F\x6D\x53\x75\xB3\xA5\xD9\x5C\x57\x52\x38\x24\x1C\x17\x15\xC9\xA5\x92\x6E\x0C\x1F\x17\x5B\x8D\x5B\xC1\xE7\xAA\xC4\x86\xBE" + + "\x47\x86\xF0\xEB\x93\x47\xC9\xAC\xDA\xC7\xC6\xF5\xCE\x5F\x39\x9E\xAB\x4A\xB7\x20\xAF\x30\xAB\xC8\xF9\x5B\xAD\xD8\x94\x69\xFF\x00" + + "\xD3\x1B\xDC\xFE\x5F\x8D\xE6\xEF\xFE\x9D\xFE\xEB\x59\x53\x92\xF1\x7B\xB0\x0E\x8D\xF2\x0C\x9C\xEE\xD5\xF2\x55\xF1\xB6\x22\xCC\x61" + + "\xF8\xF6\x3F\x27\x30\x47\x94\xD5\x6A\xB0\x67\xBA\x7B\x92\xEE\x8E\xCC\x69\x0C\x98\x75\xFD\xBD\xFC\x6D\x0A\x82\x56\x94\x98\x58\x53" + + "\x3B\x15\x4D\xE3\xC9\x37\x36\x2B\x70\xC6\x99\xC9\x19\xB8\x24\xC5\x90\xC0\x5D\x54\xE6\xC4\x93\xC6\x26\x43\x2A\xE5\xEC\x77\x5A\xC4" + + "\x83\x8B\x3A\x91\xDC\x11\x66\xCF\x36\x36\xF4\x9F\x3C\xF3\x80\xD2\xBD\x9A\xCD\xF0\x4E\x9D\xF4\x03\x97\xF1\xFE\x39\xC5\x33\x99\x1E" + + "\x33\x7F\x92\xE7\xB1\xBC\xF3\x9E\x5D\xCD\xFF\x00\x46\xBB\x26\x3D\x32\x6B\xC9\xB9\x29\xCC\x71\x8E\x3D\x8C\xC9\x55\x48\x72\x95\x25" + + "\xA1\x6C\xE6\x3F\x65\x66\x95\xD3\x97\xC5\x97\xB1\x8F\x1B\x6B\xAF\xDC\x3F\xA4\xB8\xA7\xC0\x70\x6A\x7D\x49\xB9\x87\xB3\xD3\x3E\x01" + + "\xC3\xB8\x05\x3E\x97\x50\xE9\xF6\x63\x97\x61\x71\xA9\x84\xC7\xBE\x4A\x9C\xC9\x65\xB3\x7C\x73\x8E\x63\x72\x77\xF1\x39\x6C\x58\x9D" + + "\xB2\x19\x7F\x9C\xD3\xA9\x8D\x21\x64\x7D\x44\x64\x3F\x5B\xF1\x86\x0E\x4D\x80\xEA\xCF\x51\x7A\xBB\xC7\xF8\x97\x42\xB8\x3F\x1E\xAD" + + "\xCD\xF3\x5C\x63\x3B\x34\xF1\x46\x2F\x74\xFD\x73\xBC\xC7\x95\xE6\x62\xC7\x52\x8A\x1F\xEB\xAB\x5F\x8F\x50\xA7\x79\xDA\xD3\xE5\x6C" + + "\xE0\x23\xC0\xDD\xBB\x8C\xC6\xAF\xEE\x67\x76\x84\x1C\xDF\xF5\x07\xFD\x1E\xB9\xD6\x6F\x2F\x96\xBD\xD6\x09\xF9\x1F\x2A\xC9\xC9\x15" + + "\xFC\xA5\x9E\x9D\xF0\x6F\x72\xB9\x2C\xB5\xD9\xEB\xD6\xA5\x88\x82\xF5\xAA\xDC\x07\x86\x4D\x1D\xA3\x0D\x7A\xD8\xEC\x7C\x52\xDB\xAF" + + "\x3D\x76\x2B\x4E\xA3\x06\x32\x45\x1C\x8E\x1C\xC3\x12\xBA\xCB\x35\x34\x6C\xC5\x4F\xF3\x5D\x61\x66\x55\x06\xCF\xB4\x35\xAD\x76\x24" + + "\x60\xAD\xAE\x5B\x3C\x35\x57\x66\x78\xB6\xC7\x50\xFB\x37\x0B\xC2\x8D\x31\x0C\x4A\x8B\x3B\xC8\x0D\xCD\x96\xFF\x00\x2F\x00\x81\x7B" + + "\x02\x7A\xAD\x2E\x97\x52\x8F\xA9\xBF\xAB\xCF\x48\x71\xD3\x56\xB0\xB4\x7A\x3F\xD3\x2C\xC6\x76\x48\x2D\xC3\x46\xAC\xA9\x7E\x4C\x07" + + "\x23\xB1\x15\x83\x5E\x86\x5B\x33\x5D\x15\xA6\xE4\x78\x27\x8C\x0B\xAD\x22\x18\xC7\x74\x69\xA0\xEF\x71\xBD\x11\x56\xC9\xDB\xEB\x4F" + + "\x2C\xFE\xE3\xCA\x3A\xEF\xD4\x5E\xD9\x3B\x94\xF7\x41\xC2\xAC\xD2\xE9\x7D\x70\xA4\x01\xF8\x24\x3C\x11\x54\x03\xB2\x0E\xC1\x2D\xB0" + + "\x4F\x1F\xBE\xE7\xBA\xE1\xC7\x6D\xFB\xE3\xE6\xFD\x76\xF6\x35\xEE\x72\xE7\xF4\x6C\x85\x3C\x47\x22\xE0\xF9\x99\xB8\xAF\x5E\x78\x47" + + "\x27\xE2\x58\x6F\xFA\x67\x0D\xC6\x2E\xE2\xF3\xCD\xCC\x3A\x5D\x15\x0C\x95\x0C\xAE\x4A\xB4\xD5\xB1\xB2\x1B\x79\x2A\x1C\x81\x32\x14" + + "\xF1\xC6\x98\xBA\xF1\xD0\x24\xFA\x7D\xEE\xFB\xDE\xED\x1E\x36\x68\x63\x7A\xF7\xD4\xC8\xF1\x8F\x7F\x29\x9A\x75\xC0\x70\x3E\xA3\x23" + + "\xBD\xEE\x4F\x91\xBB\xCA\x32\xB9\x12\xD3\x74\xA7\x0A\xFB\xCA\xDF\xCA\x5D\xCB\xB4\xB2\xD9\x44\x97\xF7\x85\xE0\x2B\x07\x66\x91\xD1" + + "\x3C\x47\x49\xA6\xD4\xCC\xF2\xC3\x3D\x41\x3F\x10\xA1\xA1\x31\xB2\xB6\xF9\x21\xB3\xEE\xDE\xA0\xAE\xC8\x58\x02\x03\x0B\xB0\xB5\x87" + + "\x43\xAC\x69\x33\xEA\x34\xD1\x88\xE5\x8A\x23\xBA\x26\x61\x30\x75\x70\x02\xB0\x29\xB4\x29\x21\x81\x70\x4A\x9B\x64\x1F\xBF\x75\x9C" + + "\x47\x0D\x02\xD7\x19\x49\x91\x1A\x79\x76\xB0\x96\x1B\x31\x46\xA7\xB5\x9D\x7C\x6C\x3B\xB0\x65\x27\xEC\x28\x00\x10\x18\xFA\xCC\x82" + + "\x28\x07\x7E\x3C\xFF\x00\x1A\xD7\x8F\xE0\x7D\x9F\x1F\xF3\xE7\xC0\x03\xD7\x09\x91\xFB\xB3\xF7\xBB\x94\x47\x89\x3D\xC0\xFB\xBC\x74" + + "\x81\x6C\xC9\x62\x9E\x06\xAF\x2C\xA9\x62\xAD\x6A\xFA\x79\x2D\x49\x8F\xFF\x00\xAB\x38\xF5\xFA\x95\x59\x1D\x65\x8A\x77\xAB\x1C\x52" + + "\x44\xEB\x22\x90\x8D\xB2\xD6\x3E\xBE\xFB\x9C\xE4\xF8\x5A\xD9\xD7\xF7\x2B\xEE\xD6\xF5\x3B\xD9\x8B\xB8\x6A\xAB\x6F\x98\xE7\xE1\x5B" + + "\x17\xB1\xF2\x0A\xF7\x22\x2F\x2F\x5A\xA2\xC7\x42\x52\xDC\x8B\x46\x14\xB7\x66\xBB\xDD\xBA\xF1\xD5\xA5\x1D\x8B\x12\x45\x1B\x4D\xCB" + + "\xE2\xFA\x79\x9D\xA4\x14\xB3\x90\x70\x01\x65\x52\x00\x02\xC2\xD6\x38\xB1\xE7\xB9\xF7\x3D\x40\x2F\x85\x26\x5B\x5E\xAE\x00\x6D\x92" + + "\x15\xCF\xD7\x04\xAF\x71\xED\xD7\x77\x81\x54\x93\xAF\x1B\xFF\x00\x91\xE7\xCF\xF1\xE4\x93\xBD\xFF\x00\x8F\xF9\xDF\xF1\xEB\x59\x72" + + "\x0A\x90\x56\xCA\x59\x75\x28\x89\x20\x49\xC0\x0C\xA1\x54\xBA\xFF\x00\xA9\xDD\xB1\xDA\x01\x7E\xF3\xE4\x8D\x6F\xC7\x9F\xAE\x1D\xB1" + + "\xBC\xFB\xAB\xDC\xAF\xFA\xF4\x13\xF5\xCF\xAF\x19\x0C\xA6\x06\xF5\x3C\x7D\xCC\x16\x57\x39\x7A\xC6\x4A\xC5\xCB\x5E\x65\x41\xAE\xAC" + + "\x65\x2A\x55\x87\x1A\xA4\x26\x66\xDE\x56\x5A\x14\x71\xD6\x1D\x29\x5C\xB1\x1D\xF6\xFD\xA7\xA0\x9C\x9A\xD7\x30\xAB\x8D\xFD\xF6\x4B" + + "\x0D\xCC\xF9\x6B\xCF\x68\xD2\x82\xD6\x5B\xA9\x9C\x7E\x3C\x73\x59\x8E\x69\xE0\x97\xE4\x9E\x8C\x3C\xF5\xCA\xC3\x62\x16\x82\x65\xAA" + + "\x2D\xBC\x36\xA5\xAA\x93\xFC\x51\xCE\x93\xA9\x53\xC6\x11\xC3\xBA\x41\x44\xEC\xBB\x73\x79\xC0\x04\x5C\x1B\x8D\xB1\x3D\xED\x8B\x1F" + + "\x43\xF6\xE8\xC7\xC2\xAC\xC5\x57\xE3\x54\xB3\x1C\x01\x4E\xC7\xED\x99\x47\x3F\x6F\x5F\x6E\xBA\xD2\xEA\x97\x59\x3A\x49\xD3\x4E\xBF" + + "\x74\xE3\x94\x73\xBE\xA0\x71\x5E\x3B\x84\xE2\x7D\x1A\xEB\xCE\x53\x27\x3D\xCC\xCD\x16\xB2\x2D\x4D\x9E\xE8\xC5\x2A\x18\xCA\xB8\xF8" + + "\xA6\x96\xED\xEC\xBE\x4D\x24\xBE\x71\x98\x8A\x70\x4F\x91\xC8\xB5\x3B\x09\x4E\xAC\xC6\x17\xEC\xAB\x7F\xD2\xFF\x00\x8A\xF3\x0E\x53" + + "\x8D\xEA\xCF\x31\xE0\xFC\x53\x93\xE4\x33\x56\xFA\xB7\x6A\xF6\x2F\x39\x8A\xE3\xC9\x61\x71\xD6\xAC\x61\xF1\xD9\x18\x20\x97\x90\xE4" + + "\x29\x4F\xC7\x71\xD6\x63\x17\x96\x46\x8B\x27\x91\x82\xBC\x4C\xEB\x34\xA5\x63\x74\x95\xAA\x03\x81\x62\xB0\xBC\xB7\x05\xC2\xEE\xE3" + + "\xCE\x2F\x1D\xCA\xB9\x4E\x12\x1C\xF5\x9E\x3F\xC8\x39\xCE\x3A\xE6\x27\x15\x52\xC4\x85\x57\xF7\xD3\xF1\xFE\x2D\x5B\x33\x07\x64\x2A" + + "\x6C\xCD\x1D\xFA\xF8\x59\x9A\x36\x8D\xE9\x47\x7A\xA0\xB3\x72\xA5\x88\xFB\x72\xF7\xF7\xD7\x5E\x83\xF4\xE2\x2E\x9C\xF4\xCB\x33\xED" + + "\xB7\xA3\x3C\x71\xB3\x53\x65\x72\x0F\x5F\x8C\x67\xB9\x2F\x29\xCD\x65\x6F\x63\xEB\x1B\xFC\x9B\x3F\x90\xE5\xDC\xE3\x25\x5E\x6B\x12" + + "\xD5\xA9\x8E\xA5\x45\xBE\x3A\x58\xB6\xAB\x41\xEA\x51\x4A\x35\xA9\x50\x82\xF4\x25\x4E\xAE\x95\xF5\xDF\x19\x2C\x46\x24\x23\x72\xC7" + + "\x19\xDE\xF7\x30\xC7\x18\x1B\xC9\x41\x7F\x90\x37\x0A\x41\x3B\x72\x46\x66\x29\xA8\x4D\x05\x18\xA6\x8D\x96\x76\x17\x05\xA5\x5D\x91" + + "\x9D\xD2\x33\xDC\xA8\x2D\x7C\xB6\xD0\x14\x91\x8C\x91\xD5\x9A\x7E\xA8\x5C\x2F\xAF\xB6\xFD\xA3\xF4\xFE\xF7\x56\x2D\x5A\xE4\x56\x70" + + "\x5E\xF0\xFA\x27\xC9\x69\x34\x15\xF8\xF3\xE4\x38\xCF\x12\xFE\x85\xC8\x38\xE5\x99\xB9\x14\xDC\x43\x07\x86\xC3\x40\x87\x93\x66\xA3" + + "\x8D\x2C\xA4\xD9\x30\xAD\x91\xA7\x0C\x99\x10\xD3\x45\x5A\x15\xBA\xF9\xC0\xF9\x37\x53\xFD\xBB\x7F\xD2\x1C\x57\xA8\xD2\xF4\x8F\x39" + + "\x3D\x3E\x3F\x62\x3E\x75\x2F\xFE\xDE\x1A\x55\xEA\x47\x19\x9A\xA4\xF9\x2A\xF9\xAC\x75\xBA\x50\x5F\x42\xB1\x1B\x11\xD8\xF9\x90\xAA" + + "\xAF\xC5\x27\x70\x26\x99\x79\x9F\xBF\x6F\x75\xFE\xED\x3A\x43\xC9\x6B\xF5\xA7\x9C\x9E\x47\x82\xE2\x9D\x77\xF6\xE9\x7B\x8E\xE0\x70" + + "\xBC\x5F\x87\xF1\x88\xAB\x4D\x92\xE4\x7C\xBA\xA5\x92\xB3\xE0\xF0\x78\xCC\x86\x4C\x59\x86\x18\x3B\xAB\x66\x32\x37\x6A\x46\xF0\x24" + + "\xB1\x57\x49\x42\x48\x6D\xC3\xDD\x97\x0C\xE0\x7C\xCF\xDA\x6D\xCA\x1D\x57\xEA\x46\x5F\xA6\x7C\x6D\x71\xBC\x73\x24\x79\x25\x68\x69" + + "\xC0\x22\xC9\x41\x5F\xB3\x1F\x8F\x91\xAC\xD4\x30\x4F\x1E\x46\x69\x8D\x59\x2B\x0B\x55\xBE\x52\x55\xC4\xB0\xAC\x6E\xDE\xB1\x8F\x1C" + + "\xCC\xB3\xF8\x9E\x8E\x58\xBC\xE4\xBD\x35\x25\x8B\x22\xCB\x28\x2B\x3C\xA0\x15\x8D\x4B\x6F\x38\xF9\x54\x93\x7C\x0E\x31\xD6\x91\xE1" + + "\x88\xDE\x2D\x02\x55\x94\x42\x47\xC4\xD4\x9D\x8A\x4A\x20\x06\x3A\x72\x43\x31\xB5\x86\x73\x8B\x63\x37\x04\xDF\x9F\x1F\x61\x59\x9E" + + "\x8C\x74\xDF\xDF\x67\xB8\x5E\x98\x7B\x90\xE4\x5C\x4B\x31\x0F\x32\xE9\xD7\x27\xE9\x0D\x6E\xA0\x66\xB3\x2E\xBC\x6F\x3F\x95\xBB\x9B" + + "\xB9\x06\x63\xE1\xE4\xF7\xAC\x54\x9F\x1F\x17\x2F\xE3\xD4\xB3\xCB\x4F\x90\xBD\xCA\x36\xDE\x29\xD6\xA7\xEE\x60\x97\x20\x4F\xAC\x43" + + "\xF5\xA8\xE4\x7E\xDB\xF9\xEE\x47\xA0\x3D\x0D\xE8\x26\x4F\x01\x92\xCB\x74\x13\x87\xF2\x2C\x66\x66\xF7\x10\x86\xE7\x30\x87\x11\x81" + + "\xB5\x5F\x11\x0F\x12\xE1\x73\x66\xA8\x49\x91\xBD\x90\x14\xE5\xC6\x64\xB2\x59\x1C\x84\xF6\xAF\xC3\x8D\x93\x20\x65\xB3\x66\xC6\x52" + + "\xF5\x8A\xE6\xA3\x3D\xC1\xF1\xFA\x32\xF3\xFC\xE7\x1E\xC4\x66\x6B\xDA\xC7\x1E\x55\xC6\x70\xF8\xAC\xD3\xC4\xC2\x1B\xF5\xDA\x3E\x65" + + "\x06\x36\xF3\xC3\x49\xEF\x2C\x46\xDE\xA2\x32\x8A\xF2\xCF\x1C\x72\x4B\xDC\x25\x78\x93\xE4\xF5\xA5\x68\x70\xDE\x55\x87\xEE\xC8\xE1" + + "\x2E\x3A\x2D\x9A\x1F\xB7\x6C\xA6\x33\x28\x71\xED\x35\x0C\xBE\x33\xE5\xB5\x03\xC6\x66\xAB\x70\x53\x96\x8C\xB3\x25\xB4\xB1\x0A\xA3" + + "\x45\x14\xFF\x00\x32\x2A\xC6\xCA\xBB\xDE\x85\x4A\x95\x34\x74\x28\x6A\xE9\x29\x19\x34\xFD\x2D\xCC\xD5\x84\x53\x39\x06\x86\x94\x84" + + "\x13\x48\xB2\x00\x5D\xC1\x22\x23\x19\x60\x15\x85\xAC\x2F\xD5\x17\x50\x8D\x96\xB6\x5A\x85\x8E\xA6\x61\xE7\x54\x2F\x93\x4C\xBE\x62" + + "\x6E\x13\x4C\x81\xDA\x21\xB6\xC0\x46\x7D\x6D\x7B\x59\x89\x25\x7A\xEC\x43\xD9\x37\x5A\xBD\x81\x67\x3D\xAF\x74\x2B\xA9\x39\xFC\xEF" + + "\x4A\x30\x3C\xCF\xDB\xD7\x49\x33\xDC\x37\x33\x8C\xE4\x79\x7C\x75\x1E\x45\xC7\x4D\xEA\x19\x0C\x7F\x50\x16\xB7\x13\x92\xE2\xA7\x25" + + "\x8B\x9B\x45\x3E\x56\xDC\x3F\xB1\xC6\x66\x25\xB5\x1F\x20\xB7\x8C\x85\xE3\xBB\x66\xF5\x3F\x54\xD5\xEC\x0C\x35\x5E\xB6\xB7\x58\xF8" + + "\x67\x56\xA7\xE8\xCF\x4E\xF8\xBF\x56\x21\xCE\x5B\xE0\xF4\x2F\x67\xE3\xBD\xCB\xB8\x5A\xF2\x8B\xF9\x88\xB8\xB5\xAA\x58\xB2\x98\xC9" + + "\xB1\xEF\x85\x55\xC1\xB4\xD9\x69\xE7\x81\x05\x9B\x51\xA5\x4B\x51\xFC\xEA\xD4\xC7\x7F\x87\x65\x30\x53\xD7\xB3\x30\x82\x6A\x69\x92" + + "\xAD\x4C\xCF\x13\x49\xDA\x6C\x09\x82\xCB\x1A\xAC\xB1\xC5\x24\x89\x13\xA8\x46\x91\x46\x89\x75\xF3\xE4\xB7\xA9\xF3\xED\xAB\x17\x5A" + + "\x7C\xAF\x1F\xB2\xD9\x36\xC6\xDC\xC5\xDE\xC8\x3A\x08\x32\x14\x6A\xDA\x61\x15\xCB\xEE\xF2\x43\x8D\xB7\x7A\x95\x8C\xCC\x50\x29\x66" + + "\x30\x50\x0D\x30\xD3\xC2\xD1\xB9\x91\x3B\xAB\x1E\x3A\x81\x53\xC3\x95\x11\xA5\x44\x2E\x63\xAA\xA6\x41\x35\x2C\x22\x60\xDF\xFB\x4A" + + "\xDB\x99\x10\x96\xDE\xE5\x12\x30\x19\x91\x5A\x24\x2C\x6C\xBC\x2C\x9F\x86\xE0\x58\xF5\x33\x24\x82\x66\xF3\x63\x66\x10\xD4\x4B\xB3" + + "\x60\x33\xC2\xD6\x46\x00\x85\x1E\x64\x8E\xC4\xA9\x20\x9D\xA0\x12\x6F\xBA\xE6\x3D\xEB\xF0\x6E\xB9\xF2\x8E\xBC\x74\xF7\xAC\xB4\x3A" + + "\xCF\x3F\x34\xE8\xFF\x00\x2E\xEA\xB5\x3B\xBC\x4F\xA5\x92\xC9\x9E\x49\x78\x08\x7E\x3F\x76\xDD\x2B\xD6\xE8\x59\xA9\x26\x1A\x5C\x6D" + + "\x57\xA3\x34\x6B\x91\x8E\xD4\x32\x45\x2D\xF5\x86\x3A\xC8\x6D\xB0\x69\x81\xD3\x9C\xE7\xB2\x7E\x3B\xD1\x0E\x0F\xD7\x3E\x4B\x77\x8E" + + "\x3F\x30\xC6\x7B\x6F\xFF\x00\xD1\xCE\x4B\xC3\xEE\x72\x46\xB7\x9C\xC9\xC3\x79\x53\x27\xCE\xB8\xC5\xBE\x9C\x9C\x9B\x57\xC8\xF2\x6E" + + "\x49\xCC\x1E\xFC\xD9\x2E\x45\x36\x2B\xE5\xCC\x25\xD1\x97\xB7\x96\x38\x99\xC5\xE1\x0D\xBA\x9D\xC1\x6B\xF0\xAE\x7F\xC2\xF2\x98\x9E" + + "\xA0\x5B\xE6\x75\xB3\x1C\x86\x6B\x59\xFC\x13\xE5\x31\x73\x7F\xD3\x19\x16\xE3\x96\x2C\x3A\x8A\x55\xF2\xB3\x59\xAC\x90\xD8\xA7\x5A" + + "\xB4\x75\x27\xC6\x40\x61\x33\xAB\x0B\x12\xB4\x53\x11\x14\xB8\x8F\x1E\xC0\xE7\xE5\x5A\x1C\xCE\xCD\xCC\x7E\x16\x26\xAE\x8B\x63\x1D" + + "\x13\x4B\x34\xB6\xF2\x11\x5F\xB3\x4A\x8F\x7C\x70\xD8\x74\x33\x47\x8B\xBC\xC1\x6B\xD7\xB1\x2B\x7C\x68\x8A\xA8\x8C\x26\x4F\x16\x6B" + + "\xDF\xC5\x3A\x8F\x00\xF8\xA6\xBE\x76\xD0\x29\xF5\xA6\x93\xC2\x9E\x1D\xA6\x89\x04\x43\xE3\x63\x8E\x2D\x4B\xC4\x4D\x1D\x4C\x14\xF0" + + "\x41\x24\xB5\x3F\xCD\x96\x38\xFE\x15\x4A\x4B\x50\xDE\x5C\x9B\xFF\x00\x09\xEB\x5B\x4F\x09\x9F\x10\x69\x74\x50\xC1\x56\xD4\x85\xF5" + + "\xDD\x55\xCD\xEA\x07\xC3\xE6\x97\x49\x0E\x2A\x26\x95\x92\x38\x88\x40\x5F\xCD\xCA\xC4\xA5\xD0\xA9\x21\x97\xAC\xFF\x00\xD9\x25\xDE" + + "\x21\xC2\x3A\xFB\xC4\x32\x3D\x73\x8B\x1F\x47\x8B\x66\xF8\xCF\x25\xC5\x61\x73\x79\xAC\x9E\x3E\x6C\x7E\x27\x94\x64\xF1\xB4\xE9\xE3" + + "\xB3\x37\x6E\x51\xC9\xCF\x63\x05\xF2\x63\x2D\xE5\xB1\x90\x65\xEE\x0C\x7C\xB8\xEB\x59\x98\xAD\xB4\xB4\xDA\xBD\x8B\x74\xB7\x5F\xEA" + + "\x2D\xC1\xBA\x41\x8D\xE8\xCF\x01\xE8\xAF\xB6\x39\x70\x96\x72\x3C\x63\x0D\x66\xB5\xBB\xF8\x5E\x57\x3F\x27\x97\x13\xC7\xB9\x1F\x54" + + "\xB8\x76\x7A\x95\x6C\xFF\x00\x2D\x9B\x2B\x96\xCB\x5E\xBD\x37\x29\x9F\x37\xCA\xB1\xE2\xE5\xEB\xF7\xB1\x55\xE2\xCD\x4B\x59\x29\xC5" + + "\x9A\x8A\x1C\x86\xA8\xEA\xAF\x45\xB8\x27\x1A\xC4\x50\xB1\x56\xDE\x4A\xBE\x56\x1C\x19\xCA\x62\x52\xCE\x66\x1B\x54\x1F\x15\x12\x2D" + + "\x88\x1A\xC1\xBF\x3C\x66\x38\x72\x02\x43\xFD\x34\xE3\xE5\x91\xA5\x92\x55\x95\x6B\xBD\x76\x69\x0C\x7A\xA9\x72\x78\xB8\x97\x34\x77" + + "\x88\x05\xB2\xFC\x5E\x8C\x51\x87\x8E\x36\x5F\x93\x3B\x5C\x86\x0C\xEC\x88\xBA\x28\xCC\x59\xE4\x8D\x74\x8F\xDC\xEB\xE4\xAC\x17\x86" + + "\xBF\x8A\x35\x2D\xE1\xFA\x4F\x0E\xA7\x83\x5A\x8B\xE2\xBC\x51\xA3\xB1\xAC\xD6\x34\xB9\x74\x9A\x98\x1A\xA7\xC4\x5A\x55\x53\xC5\xF0" + + "\x12\xB5\x59\x69\x98\xC0\x1E\x99\xDA\xAD\x5E\x13\x0C\x73\x08\x56\x35\x8A\x25\x75\x57\xE0\xE5\xA6\xD6\xFE\x2E\x4D\x5D\x5D\x17\x4A" + + "\xD4\x0A\x8D\x3E\xB6\x3A\xD8\x24\xF2\x34\x8A\xC4\x2D\xF1\x31\xC7\x4F\xF2\xA9\x24\x4A\x9E\x4F\xCC\xB2\x18\xF7\xB1\xDE\xC7\xA0\x3F" + + "\xD3\xAE\x9F\x56\xFA\x77\xD3\x0C\xB7\x0C\xEB\xAF\x5C\x2B\xF5\xAF\x97\xD8\xE4\x8F\x91\xC4\xE5\xCE\x6B\x91\xE6\x9F\x05\x81\x38\x7C" + + "\x5D\x58\x70\x29\x90\xE4\x58\xBC\x7D\xDB\xCD\x1D\xEA\xF7\xAE\xF7\xB6\x93\xFF\x00\x74\x15\x19\xFB\x4E\xB0\x8F\xD4\xE3\xA6\x5E\xE1" + + "\xF9\x97\x4D\x93\x37\xED\xEB\xAD\x35\x3A\x67\x5F\x8F\x71\xDE\x63\x7F\x9E\x61\x2D\xB6\x56\x86\x57\x97\xE3\x45\x18\x6D\xC1\x53\x09" + + "\x93\xC7\xE0\xB2\xAD\x4E\xDD\x78\x2B\xE4\x23\xED\x36\x71\x11\xC9\xFB\xA5\xF9\xAE\x15\x07\xB3\x4D\xFE\x98\xF8\x3E\x4F\x75\x39\x33" + + "\xE4\xDA\xFD\xBA\xF0\x64\xA0\xB4\xF5\x1F\x29\x06\x48\xE3\x94\xD0\x82\x14\x15\xED\x7E\xE6\x3A\xC6\xA3\x34\x45\xDA\x0A\xCD\x3C\x42" + + "\x69\x27\x6D\x02\xC4\x29\x1F\xD5\x6F\x8C\x4F\x73\x01\x84\xCA\xB7\x54\x23\xE1\x51\x62\x38\xFE\x5D\xAC\xF1\x9B\x19\x9A\xB8\x6C\x76" + + "\x6E\xA2\x1B\x36\xBB\xDE\xBD\xCC\xF5\x01\x90\xBC\xFF\x00\x1C\x94\xAA\xD7\xAB\x4A\xFD\x9B\x2F\x32\xD7\xAB\x07\xC9\x20\x49\x35\xFA" + + "\x56\x91\xB5\x94\x95\xA5\xCF\x98\xCC\x64\x5A\x20\x40\x3E\x58\xBA\x88\x01\x01\x40\xFC\x25\xF2\x23\x3F\xCC\x36\x17\x1D\x04\x34\x49" + + "\x3D\x24\x34\x64\x05\x8E\x6F\x2E\x22\x0D\x53\x3B\x2A\x97\x53\x73\x2A\x6E\x77\xE0\x10\x14\x02\xC3\xE5\x00\xE3\xA8\x19\xFA\x61\x74" + + "\xA7\xDB\x9F\x53\x7A\x41\xD6\x1E\x96\x75\x9B\x2D\x8D\xA3\xCC\xF2\x2D\xD3\xDB\x72\x58\x83\x96\x3F\x10\xCF\xD9\xE9\xEE\x0D\x68\xE6" + + "\xE3\xA9\x84\xCD\x25\xAC\x75\xD1\x8A\x93\x98\x54\xC8\xC9\xCB\x69\x53\x2B\x0D\x8A\xD6\x30\x2D\x94\x8C\x49\x1E\x2E\x5A\xB1\x7B\xF5" + + "\x32\xCD\x74\xB7\xA8\xFE\xEB\x79\x0F\x21\xE9\x23\x61\x72\x5C\x73\x17\x85\xE3\xD8\x9E\x73\x9F\xE3\x93\xD5\x4A\x1C\x87\x96\xD0\x92" + + "\xCC\x79\xBC\x85\x4B\xB1\x48\x60\xCA\xD9\x83\x1D\x2E\x37\x1B\x63\x29\x0A\xCB\x1D\xBB\x74\x26\x94\x49\x62\x35\x6B\x12\xC5\x4A\x1C" + + "\x2F\x3B\xD4\x8E\x4F\xF0\xE3\x6E\x61\xB1\x05\x70\xD4\x72\x36\xAD\xE4\xEF\xFF\x00\x4E\xAE\xB0\xCF\x2D\x5A\xAD\x1C\x65\x05\x89\x25" + + "\xB2\x6D\xDD\x58\xE2\xA8\x81\xA5\x15\xC4\x96\xA4\x29\x46\xBD\x9B\x30\xA9\x6B\x83\x26\x03\x19\x91\xA3\x3D\xAC\xEC\x55\xEE\xBD\x78" + + "\x32\x1F\xB6\xB0\x44\x36\xE4\xFD\xC2\xBD\x14\xB1\x00\x84\x55\x68\xD6\xC0\x47\x85\xAD\x90\x91\xC8\x01\x69\x91\xCA\xB7\xA7\xF5\x3E" + + "\x26\x73\xA0\x52\x69\x7F\xE8\xEE\xC8\x1B\xE2\x1E\xBE\x9E\x96\x4A\x8F\x31\x63\x92\x4A\x85\x67\x8D\x4A\x08\x06\xEA\x86\x12\x4A\x66" + + "\x90\xB2\x97\x21\x1C\x16\x53\xE9\x7D\x2B\xF8\x3F\x0D\x67\x8F\xFC\x43\xAE\x52\xF8\xB6\x99\x24\x82\x0F\xF4\xC8\xF4\xAD\x4B\x59\xA2" + + "\xD2\xEA\x22\x93\xE0\x69\xE8\x3C\xAA\x5A\x8A\x95\xA8\x6A\xF5\x8A\x0A\x21\xF0\xF4\xD0\x51\xC2\x21\x55\xA7\x8F\xCF\x84\xAC\x52\x0E" + + "\x95\x79\xFE\x27\xD9\x36\x3B\xA0\x1C\xD3\xAC\x38\x1B\xBC\x3E\xEF\x1E\xCF\xF4\x16\xB7\x4C\xF8\xC6\x1A\xA7\x23\x5B\x18\xC8\xEA\xD3" + + "\xAB\x2D\x9E\x23\xC7\xF0\x1C\x31\xEF\xB5\x5C\x27\x30\x87\x91\x49\x42\x6B\x53\x57\xC7\x56\xCE\x50\xC9\xD3\x92\xF5\xE7\x82\xC4\x17" + + "\xEC\x3C\x67\xFD\x2C\xF8\xFF\x00\x5A\xB1\xBF\xD1\xF9\x26\x63\xAB\x18\x48\xBA\x31\x90\xAD\xCA\xA5\xA9\xD2\xA9\x72\x19\x2B\x99\x81" + + "\x90\xB3\x76\xD5\x2A\xD7\xDF\x17\x67\x13\x0E\x17\x15\x17\xF5\x08\x64\xBA\xE6\x9E\x68\x59\xB2\x0F\x75\x88\xC3\xCB\x22\x8E\x7F\x70" + + "\xB5\xAC\x55\xE4\x74\xA0\x52\x25\x86\x1B\x65\x50\x92\x92\x24\xA9\x10\x24\xC8\x3B\x1E\x44\x1D\xB1\xB0\x3A\x42\x7B\x49\xDC\x6E\x74" + + "\x0F\xAB\xAE\xFD\x2D\xB8\x56\x76\x5E\x6F\x1E\x51\xF9\x96\x4A\xE6\x22\x6C\x0C\x92\x7F\xD2\x89\x72\x4B\x58\xA8\xAC\xDE\xB1\x56\x79" + + "\x2C\x4B\x5E\xBD\xCB\x95\xEA\x5D\xA4\x20\x74\x0B\x66\xBD\x6B\x65\xAC\x4A\xED\x14\x7D\xEF\xF2\x3C\xD5\xBC\x40\x75\xFA\x79\x65\x5A" + + "\x1A\x6A\x01\x4B\x43\x14\x47\x6C\x26\x73\x50\x2A\xDC\xDE\xEC\x52\x33\x4E\x9F\xCA\x43\x11\x60\xFE\x5F\xCF\x66\x2C\xD7\x18\xB7\x88" + + "\xFC\x0A\x3C\x07\xA7\x51\x50\xB6\xAD\x55\xAB\xC9\xAA\xF8\x8A\xBE\x52\x92\xC8\x29\xA1\xA3\x1A\x45\x25\x24\x68\x52\x31\x2C\xEB\x53" + + "\x39\x3A\x94\xC9\x53\x2C\x6D\x1F\x9E\xB1\x42\x36\x2A\xC7\x66\xB1\x9F\x7E\x5C\x23\x23\xCC\xB8\x02\xC5\xC4\x39\xFB\x70\x0E\x43\x87" + + "\x7B\x99\x9B\x33\xE2\x30\x97\x01\xE4\x35\x56\x9B\x76\x63\x6C\xE4\x6A\x64\xAB\xD9\xA2\x19\xE2\x01\x6C\x87\xB7\x10\x2E\xC1\xE1\x50" + + "\xBD\xE2\xBD\x3F\x4B\xE9\x3A\x01\x93\x9B\xDC\xE7\x4F\x3A\xE3\x96\xE2\xD8\xFE\x43\xCC\x71\xBC\x7F\x12\xB7\x79\x27\x22\x8B\x8C\xCB" + + "\x99\xE2\x34\x5E\xD4\xFC\x92\x8E\x23\x92\x4B\x91\xC6\x5B\xAF\x2F\xF5\x46\xC3\x64\x6F\xC5\x57\x21\x05\x9B\xD5\xC5\x79\xCA\xCF\x05" + + "\x4B\x1F\x1C\x84\xFD\x56\xF8\xE6\x37\x37\x8B\xE1\xF5\x32\xDC\xB6\x2E\x33\x2D\x18\xA7\x9E\x08\xAC\xF2\x5C\x46\x0A\xBE\x42\x08\xC4" + + "\x8D\x33\x41\x4E\xD5\xCA\x99\x0C\xC5\xAA\xCA\xDB\x82\xAD\x0A\xB7\x9D\xA4\x2A\xB2\xC0\x15\x95\xD7\x9A\xBE\x69\x84\xCC\xC1\x95\xA5" + + "\x8F\xBD\x57\x25\x8F\x69\x60\xBB\x62\x27\xCB\xC7\x76\x26\xB5\x19\xB8\x98\xCB\x13\x41\xA8\xDC\xB9\x5B\x14\x25\xAF\x69\xFF\x00\x18" + + "\xCC\x95\xA4\x85\xA4\xF9\x22\x54\x13\x1E\x12\x2D\x45\x47\x05\x51\x0D\x32\xC6\xF2\x5A\x0A\x88\x8A\xC3\x67\x2C\xAC\x11\x88\x3E\x6E" + + "\xED\xDB\x83\x92\xC1\x5B\x6A\x80\x00\x23\xAF\x36\xFF\x00\x11\xB5\x69\x29\xEB\xA2\x8A\x3A\x68\x65\x11\xC8\x27\xDD\x05\x40\xF8\xA6" + + "\x96\x2A\x76\x88\x6F\xB2\x37\xC3\x14\x59\xFE\x55\x24\x6E\x50\x4F\xCA\x58\xB0\xB4\xFF\x00\xD5\x67\x9F\xF4\x5B\xAD\x5D\x79\xE1\x91" + + "\xF4\x97\x2F\xC7\x72\xF8\x2E\x95\x71\x1C\x5F\x13\xE7\x3C\x9F\x04\xC2\xD6\x3F\x22\xF5\x32\x4F\x61\x31\xB5\x72\xB5\x16\x68\xAF\xA6" + + "\x1F\x04\x61\xA3\x5F\x27\x3C\xA6\xBC\xD2\xB4\x75\xAA\x59\x9E\x08\x8C\xD1\xDE\xCE\x53\x97\xFB\x40\xAB\xD0\x1C\xA7\x54\xB0\x59\x6E" + + "\x09\x90\xE2\xD6\x3A\x14\xFC\x13\x0F\x8E\xC6\xE6\x6B\x5A\x13\x71\xA5\xC6\xBD\xBA\x1C\x6A\xA7\x14\x8E\xE4\x91\x55\xC8\xC7\x90\xF8" + + "\x26\xB5\x24\x58\xB8\x6F\xC2\xF5\x45\xB9\xE6\x10\xD6\x12\x2F\x17\x78\xFC\x54\x98\xEA\xD9\x6C\x1D\x3C\x8E\x63\x19\x57\x3F\x1D\x5A" + + "\xB9\xDA\x69\x7E\xDD\x3A\x99\x48\x69\xD8\x4B\x94\x97\x25\x4D\x3E\x3A\xF6\xAB\xD6\xB4\x16\xD5\x41\x62\x19\x7E\x29\x8A\xC9\x17\xFA" + + "\x9E\x7D\x67\x9C\x4B\x89\xE7\x38\xB7\x23\xC5\xD2\xBA\x64\x18\xBB\x58\xDE\x5D\x73\x1F\x2C\x36\x04\x94\xAF\xA5\x5E\x35\x95\x11\x5A" + + "\x58\x04\x86\x5A\xC5\xE5\x7A\xF2\x46\x2D\x56\xAF\x3B\xC5\x2C\x32\xFC\x5F\x14\x91\xB3\x5A\xD7\x54\x2B\x3D\x54\xCD\x4D\x03\x35\x48" + + "\x03\x61\x4D\xA2\x1D\x80\x08\xD9\x05\xC9\x38\x22\xE7\x1B\x8A\xDE\xE0\xF5\x9E\x51\xEB\x2B\x34\xB3\xF9\x74\x75\x08\xC5\x50\xCB\x24" + + "\xA8\xF0\x90\x15\x44\x6B\xE6\x16\x67\x32\x29\x25\x45\xC2\xC5\xB4\xB5\x98\x5D\xAF\xD7\x49\xBE\xC1\x78\xB7\x20\x4A\x7C\x3B\x39\x8D" + + "\xE6\x90\xE3\xB8\x44\x18\xEE\xCC\x97\x08\xFE\xA5\x7D\x9E\xF4\xCF\x85\x15\x6B\x4D\x26\x39\xE9\x4B\x8E\xAD\x34\x73\xB5\x49\xFE\x73" + + "\x32\xDA\x96\x2A\x48\x87\x51\xB4\x63\xD5\xB3\xD8\x89\x17\x5D\x8F\x62\x78\x08\xD8\x08\x91\x90\xBB\x00\x79\x72\x15\x50\x6C\xEC\x6D" + + "\xFC\x7D\x0D\xF8\x1E\xAA\x1B\xD8\xA6\x32\x5B\xDC\xDA\x57\x69\xA7\xAF\x57\x8C\xE2\xBF\x62\xB8\x90\x19\xD7\x25\x12\xD7\x82\xB9\xC9" + + "\x34\x31\x4A\xC2\x54\x8A\x48\x95\x11\x56\xBB\x48\x0C\x9D\xFD\xCB\xDC\x3B\xAD\xFC\x99\x64\x87\xCC\x50\x46\x8D\xE0\x23\xD7\x92\x65" + + "\x00\xEC\x00\xD1\xBA\x57\x91\x01\xFE\x50\xA2\x95\xD1\xD1\x3E\x08\xC8\x35\xCC\xEA\x32\x82\xDB\x88\x03\x88\xBC\xA2\x2E\x49\x00\x8C" + + "\x09\x00\x0E\x2D\x2B\x1F\x9D\x48\xB1\x21\x47\x5E\x95\xF0\xD2\xF9\x5A\x4D\x2A\x05\xD8\xA1\x54\x10\x25\x12\x83\xB6\x38\xD4\x95\xDB" + + "\x7F\x28\x1D\xB6\xF2\x41\xF9\x08\x26\xFF\x00\x31\x3D\x07\x10\xC3\x21\x65\x69\x98\x85\x43\xAD\x5B\xF9\x1C\x6C\xFE\x40\xC0\x62\x2A" + + "\x35\xBD\x77\x02\x58\x9F\xE3\xC8\xF4\xCE\x6A\xA9\x1A\x23\x2B\x45\x66\x0E\xE3\xF1\xC7\x3C\x4F\xF2\xA8\xD1\x05\x96\x49\x1C\x68\x93" + + "\xE0\x16\x4F\x1A\xFA\x3F\x5E\x9E\x5A\x82\x8A\x94\x0F\x4C\x47\x22\x85\x11\xCB\x05\x19\x1E\x14\x20\xEF\x4A\x5E\x39\x20\x45\x3E\x4B" + + "\x77\xE9\x47\x92\x4F\xF9\x62\xF6\x11\xDF\xB5\x23\xAD\x2A\xA7\x69\x1F\x1B\x54\xEF\x62\xA0\x82\x0C\x62\x33\xF9\x2F\xDE\xD1\x94\x0D" + + "\xF9\x00\x1D\x7A\x8D\x55\x5B\x80\x4A\x92\x48\x03\x6D\xC9\xCD\xB9\xB6\x01\xB0\x17\x06\xE3\xBD\xCE\x6D\x38\xC5\xB1\xC9\xB8\xE4\xE2" + + "\xD6\xE2\xDC\xDF\xEB\xEF\xF7\xEA\x74\xD5\x96\xA1\xF8\x75\x2C\x7B\x57\x29\x14\xB0\xB3\xDE\x6E\xC3\xB5\x31\xBC\xE6\xB8\x31\x30\x23" + + "\x4C\x8D\x23\x79\x03\x6D\xE9\xEB\x40\x25\x95\x66\xA5\x67\xB1\xCE\xA3\x95\xE2\x91\x53\xB0\xAE\xC0\x32\xD7\x92\xBC\x91\xCA\xE4\x78" + + "\x21\xCA\x92\xBA\x2A\xC7\x5E\x10\x8E\x71\xDB\x0C\x12\x48\x6A\x3B\x06\x51\x1B\x44\x3B\xE7\x3F\x4B\x22\x58\x80\xA7\x63\x7D\x6D\x7B" + + "\xD4\x91\xB0\x53\x47\xCF\xA8\x2D\x4D\x13\x84\x96\x8C\xAC\x18\xB7\xFA\xD1\xA4\x2C\x58\x0D\xF6\x3B\xAC\x76\x4C\xAD\xB0\x77\xDD\xDD" + + "\x23\xEF\xED\x50\xEC\x13\xB2\x0B\xA8\x18\x17\xE4\x0B\xFC\xD8\xC3\x58\x8B\x60\xFB\x1F\xCA\xFD\x27\x19\x62\xA0\xB7\x3D\xAF\x9B\x8C" + + "\x67\x3C\xDF\x9E\xF7\x1E\xBD\x19\xAB\x66\xCE\x3E\xE5\x7B\x29\x91\x4A\xB7\xAB\x4C\xB2\x55\xBD\x5A\x0A\xB0\x49\xF2\x29\x2A\x90\xB2" + + "\xC9\x24\x92\x49\xDD\xB6\x56\x08\xA8\xB2\x82\xCA\x54\x2B\x32\x19\x65\xC1\xF9\xBD\x3E\x4B\x55\x67\x47\xAF\x1E\x5E\x97\xC5\x0E\x66" + + "\x9C\x6D\xD9\xDA\xEF\xB0\xB3\x24\x64\xB3\x1A\x96\x88\x77\xAD\xF2\x92\x60\x99\x5A\x16\x6F\x05\xA4\x88\xB4\xEC\xD3\x65\x68\xA1\x0B" + + "\x2A\x2B\x6C\xFC\xED\x74\x48\x8E\x4F\xF6\x2B\x59\x62\x74\xAC\x48\x00\x4A\x34\xDE\x3B\x7C\x78\x37\x85\xCB\x66\xF8\xED\xE8\x32\xF0" + + "\xCF\x55\x4D\x77\xEC\x8A\xAC\x15\x2E\x4F\x2D\x8A\xB2\xB2\x89\x2A\x5E\x95\x27\x98\x4B\x5E\x6D\x00\x09\xAF\xFE\x8B\xA8\x99\x19\x5E" + + "\x35\x71\x68\xF0\xBF\x88\x26\xD0\x6A\x94\x3B\xB4\x94\x53\xC8\x9E\x7A\xA9\xB9\x89\x86\x16\x78\xC9\x3F\x8D\x31\xB8\x5B\xF9\x88\x2C" + + "\x46\xE0\xA5\x60\x3C\x45\xA2\x26\xAD\x4F\xBA\x30\xAB\x57\x12\xB7\x94\xF6\x1F\xCC\x52\x55\x8C\x2F\x65\x24\xAB\x5B\xE4\x26\xC1\x1B" + + "\x3C\x12\x0E\x2F\xEE\x2F\xA5\x7C\x53\x8D\x67\x79\x07\x58\xBA\x99\xD4\xCE\x65\x9A\xC3\xF2\x8C\xAD\x1C\x4F\x08\xE1\x58\x9C\x7D\x3A" + + "\xD9\x18\x32\x9F\xD2\x6C\x5A\x5E\x22\xFC\xC7\x27\x16\x5F\x17\x86\xE2\x61\xF1\xD9\x7C\xBA\xA8\xC2\x61\xAE\x52\x69\x2F\x2C\x19\x1C" + + "\xB6\x66\x7A\xD4\xAF\xD2\x27\xBC\xCF\x6C\x17\x7A\xA3\xC5\xF1\x1D\x61\xE9\xC6\x2F\x23\xC7\xBA\xA3\xC3\xAF\x2E\x47\x80\x67\xF0\xE9" + + "\x94\xAD\x53\x3F\x5F\x1D\x33\xE5\x63\xE2\xD8\x7E\x4F\x91\x99\xEF\x72\x7C\xA6\x2E\x60\x96\xB1\x79\x6F\xEA\x79\xCC\xE6\x26\xE2\xC6" + + "\xF9\x5B\x58\xCE\x3A\x6C\x3E\x37\xA8\xFC\x2E\x43\x8D\x73\xCC\x1C\x51\xE4\xB1\x58\xEC\xC6\x26\x6B\x55\xAC\x4D\x8A\xCD\x53\xA9\x93" + + "\x8A\x8E\x57\x1B\x6A\x1B\xB5\x3F\x77\x52\xD4\x52\xC2\x2E\x50\xBB\x05\x5B\xD4\xA7\x11\xFC\x89\x24\x75\x32\x35\xDA\x39\x01\x94\x43" + + "\xCC\x8F\xB6\x3E\xBA\xF5\x4F\x9C\xE7\xB9\x2F\x54\x39\x6F\x15\xC4\x55\x83\x27\x91\xC7\xE1\xB2\x94\xE3\xBB\x99\x0D\xC6\x20\xB8\xF2" + + "\x63\x60\xE3\xBC\x52\x3B\x14\x2B\x71\xCC\x7D\xDA\x66\xAC\x96\xD7\x21\xC8\xAF\x65\x63\xCB\xC7\x73\xFA\x8C\x59\xB8\xE0\xA7\x93\xBB" + + "\xE8\x6A\x67\x8B\x52\x82\x29\xA1\x60\xEB\x20\x0C\x1A\x30\xCE\x2E\xC1\x58\x4C\xAF\xB8\xA8\xDE\x32\xA4\x80\xA3\xE6\x56\x20\xFE\x2C" + + "\x85\x99\xA8\xE4\x78\xAA\x7F\x97\xE5\x7C\xAF\xE6\x1B\x11\x62\x13\xCB\x11\x85\xB9\x20\x82\x1A\xF7\x22\xD7\xB1\x07\x14\xC1\xD5\xEF" + + "\xD4\x4E\x97\x5E\xFF\x00\x47\xCE\xBB\xCB\xCE\x29\x2D\x1F\x71\x3C\x02\xEF\x13\xE8\xA6\x72\xBC\xD5\x5E\x94\xB6\x72\x1D\x48\xC9\xB7" + + "\x1E\xC8\xF2\x2A\x10\xB0\x88\xD3\x97\x3D\xC0\xE9\xF5\x06\xAE\x67\x17\xA4\x34\x72\x94\xAF\xC0\xD0\x45\x55\xE8\x91\xC9\xB7\x12\xE7" + + "\xFC\x9F\x88\x64\x2F\x59\xC2\x0A\xB4\xE4\xFD\xC6\x2E\xDD\x5B\x59\x0C\x4D\x1C\xC2\xD5\xC9\xE2\xA5\x9E\x7C\x6D\xFA\xD5\xEE\xC3\x6A" + + "\x21\x62\xAC\x96\x2C\xC4\xCB\x24\x33\x52\xB5\x05\x99\xEB\xDE\xAB\x62\x02\x57\xD7\x5A\x9F\xA9\x07\xB4\x2E\x9D\xF5\x17\xA6\xD5\x3A" + + "\x65\xEC\x7B\x98\xF4\xC3\x99\x72\x1E\xA0\x75\xC6\x8F\x26\xEB\xEE\x4F\x3D\xD7\x6E\x91\xF1\x58\xF2\x1C\xCF\xA6\x7C\x63\x3D\xC4\x78" + + "\xF4\x35\x2B\xF2\x0E\x45\xC5\xEA\x5D\xBF\x7B\x21\xD4\x3C\xE5\x2C\x9D\x3E\x25\x4E\xE5\x14\xCF\x61\xA4\x86\xFC\x75\xB9\x12\x64\x0D" + + "\xBA\x24\x9F\xF4\xD8\xEA\x4D\x2B\x8F\x57\x91\x7B\x8F\xF6\x27\xC3\x2C\xA3\x98\xEC\x53\xCF\xFB\xC4\xE8\xA0\xBB\x0C\xA9\xF8\xB4\x72" + + "\x56\xC2\x72\x5C\xD5\x91\x2C\x6C\x3B\x19\x1A\x3F\x04\x79\x23\x5B\xF5\x11\xA8\x3C\x8F\x52\x43\x8D\xEF\x1C\x71\xC6\x59\x01\x21\xAC" + + "\xA1\x8B\x02\xA1\x96\xFF\x00\x31\xBE\xDC\x5E\xF6\xB0\xC7\x4A\x40\x57\x60\x31\x86\x55\x76\x67\x05\x8E\xD6\x5F\x99\x45\xAD\x83\x6B" + + "\x2D\xC5\xC6\x45\xBB\xDF\xA8\x57\x57\xA9\x1C\xE2\x5C\x8D\xCC\xBD\xBC\xC5\x1C\x9D\xAC\x86\x3E\x96\x32\x54\xB9\xC5\xB8\xAD\x8A\x91" + + "\xD7\xA5\x94\xBD\x9B\xAF\x2D\x4A\x16\x30\xF3\xD3\xA3\x94\x87\x2F\x95\xC9\x5F\x83\x2D\x52\x28\x32\x90\x4F\x7A\x78\xEB\xDB\x86\x06" + + "\x10\xAC\xA5\xE9\x96\x2F\xAB\xBD\x4A\xC6\xE4\x7A\x97\x47\x9D\xD5\xAA\x78\x17\x24\x49\xC6\x26\x0A\x78\xC8\x32\x16\x6F\xFF\x00\xD1" + + "\x9D\x46\xEA\x3E\x5B\x25\x47\x03\x0C\x58\xAC\x0D\xBA\x75\xF1\x9C\x1F\x3D\x7B\x90\x25\xDB\x75\x5F\x25\x6F\x20\x93\xA4\x19\x6C\x84" + + "\xEF\x14\xBB\x13\x1B\xFA\x73\xB4\x32\x47\xFB\xAF\x7B\x9F\xA7\xE5\x46\x60\xCC\xE2\x3F\x71\xF5\x72\x4B\xB2\x00\x3B\x6C\x47\x1B\xC8" + + "\x45\xDC\x3F\x90\x24\xF9\x36\x3F\x15\x61\xF9\x19\xF7\xD0\xAF\xD2\x63\xDC\xAF\x2A\xE0\xF9\x5C\x97\x48\xFD\xD1\x7B\x65\xC9\xF4\xF6" + + "\xED\xC6\x97\x31\xC9\xB8\xD7\x24\xEA\x26\x63\x05\x25\xF6\xC2\x66\xB8\xDD\xB8\x69\xF2\xFA\x9D\x1C\xB1\x5B\xFD\x5C\x16\x7F\x35\x8C" + + "\xC9\x63\xE8\x66\x8C\x36\xAA\x5F\x68\xF2\x15\xE5\x22\xBC\x91\x92\x13\x1A\x0F\x9C\xC8\x00\x04\x9C\x11\x63\x82\x6D\x71\x6B\x28\xB9" + + "\xBF\xDC\xF4\x73\x72\x6E\x58\x1B\xB2\xE4\xD8\x03\x7B\x5A\xDE\xE4\xDA\xD7\xCF\xDF\x26\xBF\x64\xE8\xAF\xB9\xB6\x9B\x25\x8A\xC5\x73" + + "\x5C\x65\xE9\xF1\xD9\xBC\xD7\x12\xE4\x38\x8E\x3F\xCB\x5A\xA5\x1E\x25\x91\xE2\x3C\xAB\x87\x70\xEE\x41\x56\xC0\x8E\x9E\x3F\x03\x8A" + + "\xC4\x71\x8B\xDC\xCF\x8C\x0B\x79\x8C\x0C\xF3\x71\xDC\x66\x06\xED\xAF\x8B\x22\x95\x31\xD9\x9A\xB4\xB1\xD8\x3D\xBD\x75\x4F\x8E\x60" + + "\x32\xDC\xBA\x87\x54\x38\x5E\x00\xF0\x5C\x76\x3A\x2E\x52\xF1\xE6\xFA\x8B\x5E\xDF\x00\xC3\xF2\x9E\x2D\x9E\xEA\x0E\x2A\x4C\x98\xC6" + + "\xF0\xE9\xA4\xBB\x8F\xCA\xD0\xC7\x49\x35\x8C\x7F\x0C\x6E\x47\x7E\xA6\x6B\x31\x46\x96\x57\x19\x8E\xC8\xCB\x91\xFD\x84\xFA\xC8\x7B" + + "\x6D\xC1\xF4\xB7\x1B\xD4\x18\xF9\x97\xEA\x39\xED\x8B\x13\x3F\x2E\xA3\xC9\x30\x9C\xAF\x39\x23\xF5\xFF\x00\x3F\x94\xC6\xD5\xE5\xB7" + + "\xEA\xE4\x39\xF5\x6A\x07\x1B\xD3\xFA\xB4\x24\xB3\xCD\xA5\xC4\xD1\xA7\xCA\xEC\x5C\xC7\x5B\xBB\x7F\x17\x55\xAB\x45\x62\xB4\x32\xDA" + + "\x5B\x3A\xD3\x9C\x64\x3A\x05\xCA\xF8\xEF\x10\xE3\xE9\xFA\xB9\xF4\xEB\x83\xC7\xC2\x0D\x49\x71\x79\x4E\x98\xF4\x57\xDE\x35\x8C\xBC" + + "\xB3\xD2\xE3\x23\x87\xA4\xBF\xBC\xB5\xC7\x22\xFD\xB0\x6E\x2E\x24\xC2\x2D\x0C\x25\x9C\x47\x1F\x35\x2D\x5B\x8D\x30\xD1\x8B\x12\xF7" + + "\x21\x36\xA9\xA6\xA2\xDC\xD6\xC0\xAF\xB4\x0D\xAF\x51\x0A\xDD\xAE\x2E\x01\x66\x55\x36\xC1\xB1\xF5\x39\x1C\x87\x31\xD1\xD6\xC8\x7E" + + "\x4A\x4A\x87\xBD\x8F\xC9\x4D\x3B\x9F\xA9\x0A\x8C\x73\x6B\x0B\x8C\xF3\xDA\xDD\x54\xBC\x5D\x23\xEB\xFC\xFC\xE7\x9E\x71\x5B\xFD\x6B" + + "\x8F\x8C\xE0\x71\x79\x3E\x9C\x1C\xC7\x26\xC5\xE4\x3A\x93\x91\xE3\xBC\xBF\x29\xD5\x93\x4F\x27\xD3\x35\xC7\xF1\xAE\x3B\xC6\xA5\xE5" + + "\x13\xDA\xCB\x52\xC8\x1C\xC5\xB6\xCF\xF1\xBC\x65\xFE\x3F\x05\x1B\xD4\xF2\xD1\x57\xE5\x87\x1D\x80\xC9\xCA\x5E\x8C\x7B\x40\xE7\x19" + + "\xAE\x61\xFF\x00\xA7\xBC\xFF\x00\xAB\x76\x32\x96\x32\x1C\x83\xA4\xDC\x3F\x2D\x4B\x8C\x62\x79\x47\x38\xC6\xF1\xAE\x61\xD6\xFC\x76" + + "\x43\x3D\xC4\x21\xC9\x4C\xF6\xB1\x34\x2E\xE1\x62\xC1\x61\xF2\x79\x7E\x57\xC9\x31\x8F\x95\x8B\x19\x5B\xFA\x28\xA1\x06\x7A\xED\xAB" + + "\xD0\x61\xB6\xCD\x6E\x0D\xEC\xDF\x09\x90\xCA\x65\xE1\xFD\x5C\xF9\xEA\xE6\x32\xB5\xF2\xB5\xB2\x99\x8E\x35\xED\xBB\xDC\x94\x59\x1C" + + "\x9C\x39\xCC\x8C\x59\x5C\xE4\x59\x0B\x37\x39\x16\x0A\x6B\xF1\xE6\xF2\x31\x8C\x86\x4A\x29\x99\x45\xDC\x92\x2D\xFB\x66\x5B\x01\x19" + + "\xF2\xFE\x91\x66\xFF\x00\x4F\xEE\x81\xFF\x00\x5B\xB1\xC7\xFD\xFD\x75\x8F\x3F\x6B\x3D\x4F\x11\x47\x23\x3F\x1D\xF6\x54\x5B\x2C\x6A" + + "\xE0\x16\x44\xC1\xC5\x8A\xCB\x73\xDE\xAA\x7E\xFB\x05\x2E\x21\x1A\x36\xC6\xD9\xC4\x4D\x8B\x96\xA4\xF4\xF1\x96\x63\x29\x6B\x13\x8C" + + "\x96\xA4\x4C\x7A\x96\x91\x1C\xA1\xA4\xD4\xA9\x48\xBB\x13\xBE\xBE\x17\xE7\xD4\x2C\xA0\x13\x95\xB9\x23\xB1\x36\x24\x8B\x3D\x7D\x3B" + + "\x53\x74\xDB\x1E\x9D\x59\xC2\xF1\x45\x2A\xDC\xE3\xB9\x88\x58\x5C\x13\xF8\xAD\xFA\xEE\x84\xD4\x38\xB5\x7B\x77\xA9\x41\x42\xD8\x23" + + "\x19\x34\x9F\x27\xED\x26\x8A\x5A\x3F\xEC\x89\x24\x32\xA9\x74\x99\xA2\x3F\xFF\x00\x4A\x22\x55\x19\x8C\x0F\x10\x66\x57\x32\x23\x1D" + + "\xC1\xEC\xE4\x68\xD7\x48\x65\x68\xDD\xA2\x0B\x38\xFD\xAB\x2B\x2F\x83\x1B\x08\xD4\xC5\xD9\x1A\xCC\xA7\x5D\xFD\x92\x3A\xB9\x77\x1D" + + "\xE7\xB4\x0D\xC1\x47\xAF\xFF\x00\xA5\x8F\x16\x2A\xB1\xE6\xFD\xEB\x73\xA9\xA3\x3B\x32\xD7\xE9\x17\x48\x38\x95\x39\x0A\xAB\x46\x3E" + + "\x39\x72\x7D\x64\xCC\xDE\x8C\x10\x7B\x43\x35\x50\xEB\x19\x24\xB3\xF7\x1D\x13\xB1\xEF\xC7\xF4\xFB\xE3\xD3\x19\xB8\x9F\xB6\xBF\x73" + + "\xDC\xC1\x97\xB4\xD7\xAD\xCA\xBA\xCB\xD3\x0E\x09\x8D\x52\xAA\x43\x6A\x1C\x1F\x4B\xB9\xBD\xF4\x43\xE1\x99\x24\xCA\x5A\x76\x3B\x5F" + + "\x9B\xC2\x90\xE0\x78\x8B\xC3\xF1\x5C\xBE\xA5\x4E\x46\x01\xF2\x7C\xC9\x72\x2D\xFF\x00\xEB\x46\xE0\x77\xFC\xCF\x48\xFF\x00\xC3\xFA" + + "\xFC\xA4\x79\x7A\x6D\x40\xFF\x00\xE7\xB1\x07\x6B\xDF\xCC\x64\xBF\xAD\xAC\x07\x71\xEE\x7F\x82\xF4\xF6\x7E\x35\xD1\x5E\x6B\x34\xB1" + + "\x93\xBE\xB3\x7B\x64\x3D\xBF\x23\xC9\x5F\xB3\xFE\xB5\xE4\x91\x00\xDD\xE3\xE5\x67\x53\x60\x77\xCB\x28\x8C\x3B\xBB\x2A\x06\x45\xD7" + + "\xAE\x83\x7A\xDB\xED\xFB\x17\xEE\x37\xDB\xE5\x9E\x92\x5B\xC9\xFF\x00\xD3\x8B\x9B\xC4\xF1\xFB\x15\x73\x9F\xD1\x8D\xD5\xC3\xDF\xC7" + + "\x49\x4A\xE4\x73\xC5\x47\xF7\x18\x88\x6E\x2C\x91\xC5\x35\x59\x52\x4B\x43\x51\xD9\x91\xD5\x8C\xAB\x19\x1C\xEC\x64\xFF\x00\x50\xFE" + + "\x9F\xF5\x87\x17\xC6\xFA\x13\xD3\xBF\x6B\xE9\xD2\x9A\x3C\xB3\xAA\x9D\x2D\xCC\xE4\xB9\x66\x43\xAB\x36\xF9\xEE\x74\x27\x13\xE4\xF5" + + "\xB2\x15\x69\x46\x89\xC0\xF8\x65\x6E\xCB\x32\xB9\x59\x25\x99\xA4\x58\x11\x88\x86\x08\xD9\xDC\xFA\xEA\x8F\x8F\xD4\xA8\x98\x1C\x1B" + + "\xB3\x5A\x8A\x46\xC2\xE3\xD7\xE4\x79\x43\x14\x32\x55\x88\x68\x4B\x28\x95\x80\x0D\xDD\xDA\xA4\x98\xB6\x48\x00\xF9\x0B\x9A\x78\xAF" + + "\x52\xA3\xD4\x35\x78\xAA\xB4\xD9\xDD\xE3\x8E\x9A\x18\xD6\x4D\xB2\x42\xCB\x2A\x49\x2B\x12\xBB\xD5\x18\x10\x19\x48\x6B\x0B\xF6\xB9" + + "\x19\xBC\xE8\x5A\x75\x5D\x06\x98\x29\xF5\x28\xBC\xB9\x5E\xAA\x79\x7C\xB2\xF1\xCA\x0A\x32\x53\x85\xB9\x47\x64\xE5\x4E\x09\xBE\x32" + + "\x38\xEB\x9A\x4E\x7B\xFA\x06\xF3\xFC\xFE\x56\xD9\xAF\xD4\x6E\x9D\xE4\xB1\xC6\xCD\x19\xE9\x5C\xC8\x0E\x5F\xC7\xAE\xCC\x68\x47\x70" + + "\x54\x9A\x5A\xB8\x83\x91\x35\xA5\x80\xE4\x2F\xF6\xC3\x1E\x46\xD8\x3F\x2A\x33\x4A\xE2\x38\x44\x5A\xD2\xD7\xFF\x00\xA3\xFB\xD5\x3A" + + "\x6C\xE9\x57\xA9\xDD\x3C\x89\x24\x82\x6A\xF2\x86\xBD\xD4\x19\x20\x4A\xD2\xC6\x22\x78\x84\x87\x1C\xEA\x91\x98\x9A\x48\x9E\x4E\xE5" + + "\x26\x17\xF8\xB4\xAA\xD2\x07\xEA\xE9\xA9\x56\xB5\x1B\x93\x15\xDB\x85\x17\x52\x89\x9E\x54\x8D\x8A\xFF\x00\xB5\xA1\x92\x48\x60\x60" + + "\xC0\x11\xF8\xC1\xDA\x57\xCB\x36\xC1\x3E\x85\xBC\x71\x22\xEA\x06\x96\x90\x84\x85\x7A\x52\x45\x0D\xA0\x3C\x12\x54\xC5\x56\x79\x0A" + + "\xF7\x13\xF8\x76\xB3\x01\xA6\x3F\x18\x04\x6D\x3A\x6F\x1A\x78\xAE\x8A\x33\x0D\x36\xBB\xA8\x43\x11\x58\xD0\xC7\x1C\xC5\x57\x6C\x4A" + + "\xAB\x18\x60\x00\x0C\x11\x00\x55\xB9\x3B\x54\x6D\x03\x1D\x2F\x2E\x89\xA5\x4E\xDE\x64\xD4\x34\xEF\x20\x24\x96\x78\xEE\x41\x72\x0B" + + "\xE7\x71\x61\xBC\xE5\x88\x00\xB5\xCE\x7A\xE5\x0C\x7E\x80\x3D\x41\x95\x52\x5B\x9D\x4F\xE9\x9C\xE6\x09\x23\x31\xC8\x73\x3C\xE6\x48" + + "\x22\x96\x12\x3E\x29\x3B\x1A\xA3\xA8\x7D\xED\x51\x65\x77\x48\xC1\x91\x55\x58\x3F\x62\xC8\xDF\x6F\xFF\x00\xA2\xBD\xDE\x03\xCC\x30" + + "\x5C\xD7\x97\x75\x6F\x8B\x3C\xFC\x5B\x3D\x8F\xC9\x50\x3C\x77\x15\x91\xCA\xB8\x4A\x76\xCD\x8B\x35\xDA\x7B\xB9\x3C\x16\x3E\x94\xB3" + + "\xB3\x38\x47\x9B\x0F\x93\x74\x99\x8D\x80\xC8\x53\xB1\xBA\x20\xBC\xB3\x44\x82\x52\x21\xFD\xBB\x95\xFC\xE7\x91\x61\x78\x50\xA9\x61" + + "\xFE\x94\x70\x2F\x72\x93\xB2\x16\x5B\x08\xCA\xC4\xE8\xEF\xED\x88\x80\x48\x7E\x61\x7D\x16\x34\xF2\x1E\x11\xF1\x04\x1E\x07\xFA\x8C" + + "\xD6\x64\x86\x46\x53\xE5\x43\xC1\xA8\xFC\x36\xCE\xBC\xB4\xD4\x3C\x57\xE2\x3D\x51\x5A\x2A\xFD\x62\xB6\xA9\x5C\x00\xE2\x69\x37\x13" + + "\xB5\x4A\x2B\x16\x36\x6B\x04\x66\x41\xB4\xE1\x59\x94\x5A\xE6\xCE\xA8\xF4\x5D\x26\x9C\x87\x82\x92\x18\x9B\x21\x44\x6A\x6C\x09\x2A" + + "\xD6\x20\x5C\x64\x81\x70\x57\x95\x0C\x6F\x65\x22\x99\x3D\xDD\x7B\x23\xE7\x18\x1B\xFD\x41\xEB\xC7\x43\xB1\x90\x75\x3F\x97\x3E\x52" + + "\xD7\x24\xE3\x3D\x1F\x7C\x45\xCA\x66\xF6\x5F\x35\x34\x55\xED\xB4\xF9\x9C\x67\x27\xA1\xFD\x47\x1B\x5E\x1B\x57\xAE\x49\x4C\x36\x1E" + + "\xE4\xD0\x24\x70\x55\xB9\xDD\x08\x82\xC5\x1A\xF0\x9C\x5F\x56\xF3\x50\xF5\x73\x2F\xD6\xDE\xA7\x72\x3F\x6E\xB3\x74\xE3\x9F\xE0\xF8" + + "\x5E\x43\xA7\xDC\x4B\xA7\x75\xFE\x6C\x2E\x52\x4C\x25\x6B\x15\x6B\xC9\x8E\x92\x1C\xB6\x75\xA6\x4A\xD9\x54\x93\xF7\x77\x4E\x46\xFF" + + "\x00\xC6\xD6\xF2\x77\x32\x3F\x1C\xF3\xBB\xF5\xD5\xEE\x83\xA8\x1D\x51\xE9\x8F\x42\x39\xDF\x50\xBA\x29\xC2\x2E\xF5\x47\xA9\x9C\x7A" + + "\x95\x19\x78\xD7\x0F\x8E\xB4\xF6\xC6\x65\xA5\xCA\x53\xAB\x71\x96\xB6\x2D\xFB\x6C\x8A\x74\xA6\xB1\x78\xA5\x78\x63\x91\x85\x66\x51" + + "\x22\x6D\x9D\x79\xBC\xF6\x84\x33\xFE\xF1\xBD\xC4\xF3\xAE\x31\xEE\x9F\x8B\x56\xE2\x19\x5E\xAF\x7B\x85\xB5\x9A\xEA\x6F\x09\x5C\x3E" + + "\x57\x8A\x9B\xB9\x4E\x9F\x74\x5E\xAF\x27\xE3\xFC\x46\xAD\x3C\xC5\x96\xCD\x62\x9F\x23\x63\x8E\x61\xF3\xF7\x9A\x1B\x5F\xB9\xCA\xE0" + + "\xF0\xB9\x7A\x95\xCC\x58\xDC\xB3\xB4\x54\x4D\x73\x47\xD4\x6B\xF4\xCA\x6A\x7D\x09\xB4\xCD\x3B\x59\xD6\xBC\x4D\xE1\x9D\x14\xEB\xAD" + + "\x47\xA5\x54\x6B\x34\xFA\x64\xFA\xB5\x28\xAC\x48\xA5\xD5\x28\x75\x2A\x7F\x26\x3A\x27\xAC\x6A\x41\x25\x34\x8A\x95\x12\xB2\xC4\x14" + + "\xC9\x75\x92\x4A\xBA\x3A\x4A\xE7\x96\xB9\x6A\xEA\x68\xF4\xED\x23\x56\xAD\x4D\x3F\xCC\xAB\x8E\x81\xEA\x63\xA1\x90\x53\xB9\x5A\x4A" + + "\x9A\x59\x4B\x34\xF1\xC0\xB3\x79\x72\xA6\xE8\x92\xEE\xF6\x5B\x1D\x63\xC5\xA3\xC0\x60\xEF\xD1\xC9\xE2\x7D\xCA\x75\x37\xAA\xB4\xE4" + + "\x8C\x5D\x7C\x5D\x8E\x9F\x71\xAC\xA7\x14\xC8\xC5\x6F\x1E\x2A\x86\xB3\x91\xC9\xE1\xB0\xB8\xE3\x63\xF6\x4C\x94\x27\x5C\x6E\x7A\x0C" + + "\xBD\x23\x00\xC7\x5C\x6A\xEB\x0C\x95\x48\x9C\xEF\x17\xE9\xC6\x62\xCE\x4E\xFE\x67\xAF\x9D\x5D\xE9\x56\x29\x69\x47\x33\xE0\x71\x7C" + + "\x6B\x01\x88\xE2\xF5\x29\x62\xEB\x77\x07\xFD\xEE\x13\x11\xC9\xAB\x1B\x08\xCA\xF2\xC4\xD9\xBC\xF5\x9C\xBD\xDB\x73\x84\x82\x4B\x53" + + "\x34\x48\xB3\xAB\xDD\xDF\xB3\x9E\x17\xED\x1B\xDA\xEF\x4F\xF2\xB6\x79\x66\x13\x2F\xD5\x3A\x9D\x57\xCA\x60\xAF\x72\xBE\x3F\xC5\x31" + + "\x1D\x31\xC7\x73\x3E\x1D\xC9\xE1\xE5\xD9\xFA\xD8\x1B\xDC\x2B\x0B\x76\xC6\x26\xCD\xCE\x0D\x8F\xC5\xE2\xE6\xA7\xC9\x66\x7B\x79\xD8" + + "\x69\x63\xAF\xD1\x92\xFA\xE2\xF2\x42\x9C\x21\xBD\x97\x7B\x51\xE9\xC7\xBB\xEE\x86\xF5\x89\x32\xFC\xAE\x2C\x17\x3F\xC6\x75\x2F\x8A" + + "\x71\xFC\x7E\x6A\x5C\x06\x0F\x9B\x3F\x17\xE1\x94\xB0\x3C\x73\x94\xD8\x9F\x19\xC6\xB9\x20\x93\x15\x4F\x21\xCD\x32\x39\x2E\x47\x82" + + "\x7E\x51\xF1\x1C\x9D\x48\xB8\xD8\xA5\x52\x67\xA3\x0E\x73\x15\x93\xAC\x1F\xE1\x4F\xF1\x36\x3F\x1C\xC7\xE1\xC5\xF1\xD5\x52\x4B\x51" + + "\xA3\x47\xAA\x0D\x6D\x28\xBC\x33\x0E\xAD\xF0\xD4\xEF\x2C\x91\x50\x33\x47\xE1\xB4\xA2\x13\xC5\x56\xF2\xB4\x70\xF9\x6C\xA2\x29\x24" + + "\xAA\x59\x83\x6F\x50\xD8\xF8\xDF\x43\x7D\x33\xE3\x8F\x87\x28\x5A\x9A\x2A\xA9\x20\x14\x6D\x36\xB5\x24\x1B\xE6\x11\xC7\x24\xCA\xCD" + + "\xAB\x99\x42\xC9\x12\xA0\x76\xB2\xEE\xDA\xB1\xB4\x64\x05\xBC\x0C\x19\x6F\x71\x3D\x1F\xCE\x74\x5B\x90\x7B\x22\xEB\xAF\x5B\xFA\x87" + + "\xCB\xFA\x89\xCB\x79\x2F\x15\xA5\xC1\xF9\x01\xA4\xF8\xEC\xC5\xEC\x3E\x15\xEF\xDD\x8F\x21\xC6\x73\x58\xEC\x46\x1E\xD4\x62\x88\xB1" + + "\x3C\xED\x9E\xA1\x35\x78\x6A\xA4\x39\x4A\x57\x2A\xBD\x6A\xD3\xC7\x6D\x3D\x4B\xF6\x51\xEE\x0F\xDE\x37\x4A\xBA\x39\xCE\xBD\xC0\x5D" + + "\xC1\xF0\x9E\xB7\xE1\xB8\xA6\x47\x17\xCE\xF8\x3C\x98\xE8\x1B\x08\xD6\xEB\xF2\xCC\xB5\xDC\x53\xD6\xBB\xC6\xB2\xD6\xB0\xB4\xE5\xC8" + + "\x61\x0E\x29\xB2\x1F\xB7\xAF\x98\x86\x0B\x0D\x22\xC5\x0C\x7B\xB1\x57\xD4\x1C\xF7\xF1\x0E\x77\xDA\x2F\xBA\x3E\x97\x60\x3D\x9D\x61" + + "\x28\x57\xC9\x70\x9E\x4E\x39\xA7\x0F\xE2\x10\x63\xEB\xE4\xF0\xDC\x53\x93\xF3\xEE\x17\xC9\xBF\xEB\x6E\x2B\x0D\x39\xE6\x82\x1A\x98" + + "\x69\xB1\x50\xC3\xCD\x0D\x29\x6D\x57\x38\x38\xB9\xB4\xAB\x8B\x93\x1F\x86\x83\x09\x46\x95\xE3\x74\x03\xA8\xDD\x62\xEA\xE7\xB5\xCC" + + "\x56\x77\x9E\xC3\xC6\xB8\xAF\x5C\xF2\xFC\x2F\x3C\xB9\x9A\x38\xCB\x36\x62\xC2\xE0\x79\x0B\xCB\x95\xAF\x85\xB6\x26\xFE\xA7\xC9\xDD" + + "\x63\x8E\x9A\xE3\x6E\xDC\xF8\xAF\x5F\x0B\x69\xEC\xAC\x2A\x23\x55\x85\x6F\x54\x34\xBE\x22\xD1\xF4\xF9\x34\xAD\x7B\x5A\xA7\xD6\x75" + + "\x4D\x2B\x5E\xD6\xE8\xBF\xD5\xDF\xE1\x1B\x57\xAB\xA3\x5D\x46\xA5\xF4\xE7\xA9\xF8\x4A\x6A\x3A\x73\x12\x69\xCF\x4F\x15\x42\xAD\x22" + + "\x6C\xA9\x47\x88\xB3\x98\xF7\x33\xAD\x3F\x50\xA4\x97\x50\x4D\x4B\x48\xA7\x9F\x4D\x8A\xA7\x4C\xA2\x9D\x69\x23\xF3\xD7\x4F\x8A\x69" + + "\x69\x60\x8E\xB4\x44\x67\x9A\xA2\x64\x67\x9C\x4C\x62\xBC\xCE\x5A\x9D\xF7\x06\x01\x8A\xF5\xCB\xF7\xBB\x7E\x8F\x7B\x84\xE8\x3F\x57" + + "\x78\xBF\x4F\x3A\x91\xC8\x71\x78\x9E\x2F\xC9\x97\x31\xC9\xB8\xC6\x2F\xA7\x96\x63\xC3\xE2\xD3\x05\x50\x64\x29\xD3\x50\x98\x9A\x18" + + "\x66\x86\xD5\x73\x5D\x29\xD8\x16\x6B\x09\x04\x3F\x1C\xB0\xCD\x27\xC8\x25\xF5\x18\x2B\xF2\x08\xE5\x8D\xEC\x2F\x3B\xEA\x55\x14\x47" + + "\x44\x58\xDF\x96\x64\x00\x68\xD8\x09\x3E\x60\xB1\x4F\x2A\x49\x19\x0E\xA1\xC4\xAC\xF3\xAE\x94\x14\xED\xF8\x9C\xCE\xDE\xB8\xF1\x2E" + + "\xAF\xE6\x7D\xC2\x70\xDA\x3E\xE8\x7A\x9F\x37\x2B\x8A\x9E\x4B\x0F\x83\x6C\xEC\x12\x62\x92\x8F\x1F\xE2\x1C\x87\x3B\x1C\x59\xBB\x58" + + "\x5B\xB8\xBA\xB4\xE1\x10\x55\xAB\x15\xF9\xB7\x6F\x19\x5A\xD5\x69\xAB\xB7\xCE\x92\x00\xA1\x6E\xCB\xAF\x3E\xCF\x7D\xB2\xF4\xC7\xA4" + + "\x7E\xE4\x79\xD7\x24\x5A\xB4\xF8\x06\x5B\xA4\xD4\xF1\xDC\x5B\x86\x64\x3F\xA5\xD3\xE2\x7D\x3E\xCE\x71\x8C\x0D\x88\x78\xE6\x4F\x81" + + "\x7C\x35\x63\xBD\x07\x2D\xE4\xBC\x89\xA9\x58\xB1\x94\xFD\xD5\x9C\xAE\x6F\x25\x72\xD4\x57\xEC\x64\x20\xBF\x3C\x5E\xB4\x9A\x4D\x0B" + + "\x54\xD6\xDA\x73\x4D\xAE\x2D\x3D\x3E\x9F\xA7\x50\x22\x36\x9E\xC2\x0A\x59\x26\x7F\x8C\xA8\x92\x69\x60\x02\xC6\x16\x84\x53\x44\x59" + + "\x48\x7D\xC1\x99\x76\x05\x20\xDC\xB4\xBF\x18\xF8\x6F\xC1\xDA\x06\x87\x26\xA9\xE0\x6A\x1F\x12\x6B\x5E\x25\xF1\x07\x88\x2B\x6B\xAA" + + "\xFC\x45\x4A\x6B\xAB\xE1\xD2\xD2\x3D\x0F\x4F\xA2\xA7\xD3\x6B\x1A\x45\x75\xAA\x87\x50\x8F\x58\xAC\x58\xDD\x5A\x06\x59\xE2\x59\xFC" + + "\xD3\x22\x14\xE6\x08\xF3\xBA\x8B\x45\x31\x78\xEC\xA0\xC2\xB9\xB3\x5A\xC5\x9C\xEE\x3B\x8E\xF1\x7A\xD9\x8B\xAF\x4E\x0B\x15\xE0\x16" + + "\xB2\xAD\x83\x6B\xC2\x1E\xC9\xDD\xE5\x8A\xBA\xD7\x5B\x12\xF6\xC9\x2A\x49\x20\xDF\xA3\x5C\x7F\xAA\x3D\x45\xE1\xE7\x25\x7F\x81\x75" + + "\x67\x95\xE1\x73\x74\x31\xF6\x6E\x7E\xF7\x14\x2A\x53\xB9\x3C\x30\xAA\xCD\xF1\x35\x9A\x14\xE8\x4D\x32\x19\x3E\x05\x08\xB2\xB1\x47" + + "\x90\x04\x50\xC3\xB1\x65\xDF\xE9\x67\xED\xD3\x80\x75\xBB\xAF\xBC\x86\x97\x54\x2B\x47\x6E\x9F\x18\xE9\xFE\x63\x91\x71\x6C\x0D\xDF" + + "\x89\xEA\xE4\xF3\xB2\xE4\x31\xD8\x7A\xB9\x0B\x74\x26\x66\x83\x37\x57\x09\x5A\xFD\xBB\xCF\x85\xB7\x14\xF4\x6E\xCF\x14\x0F\x92\xAB" + + "\x3D\x18\x67\xAD\x34\x91\xF7\xFF\x00\xEC\xF7\xA4\xFE\xDA\x3A\x3B\xD2\x17\xE3\xD7\x6B\xE4\xBA\xA3\x93\xCC\xF2\xDC\x27\x21\xCC\xD4" + + "\xC1\x62\x38\xD3\x73\x8C\x25\xAB\x36\xF3\xC9\x72\x6E\x29\x80\x8A\x1C\x45\x0F\xFA\x6A\xF6\x4B\x1F\x80\xC7\xB6\x3A\x05\x69\x31\xD7" + + "\xA2\xAB\x7E\x6B\x8D\x56\x88\xAF\x1D\xA6\xF8\x77\xC4\x13\xE8\xEF\xAA\xC7\xA9\xBD\x3C\x69\x27\x96\x94\x7B\x69\x5A\x19\x12\x2A\x88" + + "\x23\x7F\x39\x6A\x69\xA5\x7F\x9C\x19\x3C\xA8\x95\x94\x35\x94\xEE\x8C\x95\xBD\xDB\x5D\xF1\xCF\xF0\xED\xBC\x57\xFF\x00\x0A\xEA\xDE" + + "\x03\xD3\x35\x6F\x3A\x9E\x59\x2A\x35\xCF\x33\x5A\x5A\xEA\x49\xAA\x34\xA9\xEA\xA3\x6A\x23\xA7\xEB\x74\x94\xCC\x90\xB2\xD2\xF9\xF5" + + "\x32\xC3\x2F\x90\x04\xC4\xC5\x2A\xC1\x6E\xB1\x0E\x9C\x74\x4F\xDD\x47\xEA\x01\x8A\xC4\x4F\xEE\x1F\xFA\xBF\x19\x97\x81\xF1\x0A\x39" + + "\x0E\x07\xCB\xF9\x7F\x13\xB7\x8D\x83\x98\x7E\xF2\x4A\xC2\x94\x52\x3B\xD8\xC3\xC9\x90\xB5\x6E\xAE\xEE\xCB\xC8\x29\x2D\x92\xF5\xFB" + + "\x64\x9A\x0B\x92\xCE\x25\x6C\x63\xAF\x1F\xA7\xF7\x3B\xE9\x35\x3A\xFD\x4E\xEA\x76\x1F\x39\xD5\x55\xAE\x26\xC5\xD0\xC5\x74\xCA\x4E" + + "\x44\xB5\xF1\xED\x3D\xAB\x99\x3B\x77\x79\x43\x52\xC0\x66\x2C\x53\xC4\x4E\xF6\xEC\x4A\x9F\xB1\x5A\x31\xBD\xD2\x4C\xB7\x6A\x00\x0B" + + "\xDB\xEF\xB0\x3E\xB5\x75\x97\xAA\x3D\x3A\xCE\x63\xFA\xDD\xC5\x28\xF1\x1F\xFA\x42\x2E\x37\x84\xE2\x33\xCB\x86\xC8\x60\x6C\x72\x0C" + + "\x62\x63\xA6\x82\xC4\xD6\x28\x65\x6D\x90\x45\x11\x52\x80\xFD\xC5\x4A\xF0\xD7\x77\xB5\x24\x66\x25\xF8\x86\x89\x7B\xE0\xF7\x13\xCB" + + "\xBA\x09\xC0\xA9\xDA\xE2\x9D\x3C\xB1\xCD\x22\xE4\x91\x64\xE8\x64\x72\x54\x7F\xA9\xD9\xA5\x80\x85\x29\x39\x92\xCD\xE7\xC4\xD0\xB4" + + "\x29\x46\xD5\xFE\x56\x8A\x5B\x0C\xB1\xC8\xDE\x51\xC1\x47\xD4\x74\x7A\x8E\xA7\x16\xB6\x68\xE2\x7A\x15\x85\x65\x2B\xF0\x71\xBA\xB6" + + "\x9E\x14\x46\x1D\x8A\xCA\x44\xAC\xA7\x25\xCF\x96\xAB\x79\x41\x4F\x2C\x5C\xA9\xF3\xAE\xA1\xA1\x68\xD5\xFA\x49\x9A\xBA\x8E\x59\xE4" + + "\x28\xA4\xD4\x4B\x17\xFE\xED\x98\xC8\xA0\x82\x97\x88\x15\x70\xA1\x19\x9D\x99\xBC\xAC\x99\x09\x00\x8E\x64\x73\x3D\x4E\xE2\xB8\x9C" + + "\xC4\x35\x71\xDD\x25\xE0\x19\x28\xA6\xA3\x5B\x22\xF4\xDF\x11\x8C\x71\x4E\x1B\x36\x24\xAF\x5B\x16\xB7\x33\xF5\x72\xB7\x6D\x5C\x0D" + + "\x1C\x51\x85\x9A\x49\x6E\x59\xB2\xE1\x23\x8E\x47\x60\xA3\xCC\x9D\x63\xE2\x82\xED\x1C\x96\x43\xA2\xFC\x03\x1D\x66\x84\x56\x61\x86" + + "\xBC\xDC\x82\x9F\x1D\x91\x22\xB3\x17\xC5\x62\x1B\x58\xCE\x39\x47\x11\x94\x78\xE5\x42\x3E\x25\xB7\x11\x83\x45\x8A\xA1\xEF\x27\xD4" + + "\xD3\xF6\x0B\xED\x6F\x8E\x7B\xA3\xE5\x1E\xE0\xF9\xCE\x6A\xD6\x35\x32\x9C\x3B\x0B\x81\xA3\xC2\x30\xD9\x1A\xF3\x5E\xE3\xD5\x79\x4F" + + "\x2E\x87\x27\x92\xA3\x9C\xCE\x62\xE1\x9E\xAD\xCB\xD8\xEC\x31\xC6\xB4\x55\xA8\x99\x92\x29\xE6\xB5\x23\x5C\x8A\xDC\x50\x49\x4A\xC6" + + "\x37\xFA\xAE\xFB\x6A\xE9\x8F\x43\xA7\xE8\xA4\x9D\x33\xC4\xD1\xC7\xF3\x9C\xF7\x15\xBC\x9D\x41\xC5\x71\xBA\xD1\xD0\xC7\xE5\xE7\xC2" + + "\x41\x8E\xAA\x9C\xC2\x2C\x04\x52\x3A\x62\x1B\x37\x90\x6B\xB0\xAD\x6A\x8B\x1D\x37\x78\x16\x1A\xD0\x19\x52\x42\xDA\x1F\xC3\x56\x35" + + "\x23\x57\xFC\xA6\x15\x6F\x5C\x1B\x48\x23\xC2\xED\x20\x8D\xC7\x0A\xC3\x81\xC0\xC5\xF1\x4A\xBA\x59\xC7\xC5\x35\x31\xA7\x84\xC5\x3D" + + "\x5C\x31\x52\xC7\x49\x42\xBB\x69\x61\x9D\xA2\x8B\x6C\xC6\x92\x69\x4B\x15\x4D\xCC\x1A\x4B\xB1\x37\x05\x4D\x87\x5A\x26\x0F\x79\x1D" + + "\x43\x4C\x85\xAB\x9C\x53\x17\xC7\x30\x73\x4D\x1C\xAD\x3B\x60\x39\x24\x34\xBF\x6D\x44\x2B\x4B\x20\x91\x29\x2D\x3B\x55\xEA\xA0\x44" + + "\x1B\xB0\x9A\x91\x82\xAA\x7C\x93\xBA\xF7\x4C\xBF\x68\xFD\x53\xF7\x65\xD5\xBC\x96\x43\x25\xD3\xEC\xBE\x7A\x5C\xC6\x2A\xFE\x47\x19" + + "\x9D\xA4\xB9\x58\xF2\x18\xC8\xE8\xD6\x7C\x63\xA5\xBB\x92\x67\xA7\x7C\x6A\x91\x6A\xD3\xC0\x8D\x1B\x34\xF2\x24\x6C\x69\xF7\x07\x99" + + "\x45\x84\xFB\x50\xF6\x3F\xD0\x38\x7A\x0F\xED\xFF\x00\x90\xAE\x13\x8E\x66\xAA\x64\xF8\x34\x5C\xAF\x9F\x4D\x91\xC1\xE0\xB3\x4D\xCE" + + "\xB3\x1C\xAB\x8E\xC6\x96\x06\x47\x3F\x7A\x09\xB2\x58\xAA\x9C\x62\x7B\x57\x2B\xD5\xA7\x8A\xB1\x52\x2A\xF6\x60\x59\x9C\x57\xB9\x58" + + "\x4C\x22\x27\xB5\x3E\x33\xCC\x38\xB7\x51\xFA\x9D\x53\xDB\x2D\xC4\x9B\x8D\x47\xD4\xEE\x4D\x49\xEC\xDA\xB7\x87\x6C\x6C\x9C\x59\x39" + + "\x25\x8A\xD4\x4C\xC7\x31\x2A\x4B\x6D\xD6\x3C\x65\x81\x19\xA3\xDD\x6F\x51\x30\x2C\x88\xE0\x16\x5A\xC5\x35\x45\x2D\x07\xC4\xCB\x25" + + "\x31\x13\xA2\x95\xF8\xA3\xBE\x0C\xAA\xB8\xF3\x17\xF1\x14\x17\xDA\x2D\xC3\x81\x6C\x11\xD5\x87\xC3\x91\xD6\x2E\xA7\x43\x1C\xB5\xD5" + + "\x95\x29\xB6\x7F\x3E\x9A\x04\xA6\x47\x46\x0A\x81\x7C\x83\x15\x34\x4E\xC5\x5B\x71\x77\x62\x00\x42\x2E\x3D\x2F\x37\x0A\x6F\xAE\x17" + + "\x1C\xB9\x4B\x13\x3E\x54\x50\xA7\xFD\x61\xA6\x59\x84\x5F\xBF\x15\x63\xFD\xF3\x40\xB6\xE3\x47\x58\x1A\xC2\xC8\x62\x23\xF0\xED\x20" + + "\x02\x40\x1E\xBD\x3D\x9A\xCE\x7E\x3A\x6F\x41\xAC\x92\x0F\x67\x6A\x87\x2A\x4F\x76\xDD\x62\xEC\x66\x00\x79\xD8\x60\xAA\x77\xE3\xC6" + + "\xBD\x7A\xB4\x69\xD8\x55\x4B\x15\xE5\x9A\x45\xED\x90\x45\x23\xD7\x79\x01\x3D\xDA\x71\x12\xCC\xD2\x36\xB5\xB0\x50\x37\x68\x1F\xC7" + + "\x9F\x43\x67\x97\xE2\x0D\xF0\xC3\x72\xCA\xF6\x80\x2B\x87\x8D\x3E\x13\xF8\xE8\x97\x70\x93\xAB\x10\x4E\xCC\x92\x13\xE0\x80\x54\xFA" + + "\xC6\xCC\x99\xDD\x8E\x41\xF9\x54\xF7\xC8\xB0\x1C\x0F\x40\x2F\xF4\xC7\x5B\xD8\x4B\x28\xC3\x5F\x00\x16\x65\xED\x61\x72\xC3\x93\xEA" + + "\x6C\xA0\x9E\xF7\xE6\x7D\xC5\x52\x50\xA8\x2B\x4B\x2C\x12\xE8\xBA\xA0\x20\x40\xCC\x14\xB1\x2E\x85\x7F\xD4\xDF\xD9\xD3\x2B\xEF\xBB" + + "\xF2\x55\x1E\xBE\xB1\xCA\x52\x54\x9A\xC5\xDC\x7F\xC4\x19\x7B\xC1\xA9\x62\x27\x3B\xD6\xD4\x4A\xD7\x1D\x03\x30\x1A\x04\xC5\xA1\xFC" + + "\x8D\x1F\x02\x28\xC7\x3A\xAA\xA4\x32\x2D\x57\x9D\x09\xF8\xE3\x66\x92\x47\x90\xF7\x12\xF2\xDD\x9E\x19\x59\x86\xF7\xA6\x35\xC3\x9D" + + "\xED\x9C\x6C\x8F\x44\x6B\xDF\x8A\x94\xDF\xB3\xC9\x5B\x42\xE4\x7F\xA4\xD3\x4C\xA2\x4D\x68\x06\x01\xE2\xAF\x02\x00\x34\xC1\x4F\x68" + + "\x73\xDD\xAF\x3A\xFC\x5F\x5B\x20\xFC\xCA\x2C\x3F\xDD\x65\xBE\x2D\x71\x70\x49\x3C\x1B\x81\x9C\x1E\xC7\xA2\x0B\xDB\x8D\xC6\xD9\x16" + + "\xCE\x32\x48\x19\xB1\xC5\xF1\xF4\xBD\xBA\x31\x1D\xD8\xD9\x80\x9D\xBF\x6C\x5C\x95\x55\xB6\x90\xA9\x6D\x82\x0B\xC4\xC2\x6D\x7F\x9D" + + "\x7E\x44\xFD\x10\xBB\x3B\xF4\x56\xA4\x32\xC6\xC4\x2D\xBB\x13\x46\x7B\x9D\x51\xFB\x01\xFA\xF0\x12\x45\x54\x71\xAF\xE0\xF7\x9F\xFF" + + "\x00\x98\xF8\xF5\x8F\x2C\xFF\x00\xB5\x66\x61\x22\x49\x49\xDB\x6F\x25\xCC\x89\x8C\xC2\x34\xC3\xBE\x3F\xFD\xB9\x06\x10\x0F\xD4\x93" + + "\xC7\xDA\x74\x36\x35\xF8\xB8\x92\x5A\x4E\x16\x78\xAF\xF7\xD7\x5F\xC9\x9A\xA5\xE5\x78\xE2\x6D\x12\xD2\x07\x89\x64\x77\x2A\x07\xE4" + + "\x8F\x2F\xC2\xBF\x91\x09\xB1\xE8\xC4\xFE\x1E\x0D\xFD\xF3\x7C\x64\x5B\x90\x2E\x6E\x47\xB6\x2C\x4F\x44\xB9\xDC\x2F\xB8\x02\x7B\x28" + + "\x22\xC2\xDC\xE2\xE0\x9C\xFB\x75\xB1\xB8\xCE\x7E\xEF\x16\xBE\xB7\x6B\x53\xB9\x2D\x29\x98\x43\x95\xA5\x14\xD5\xD9\xE7\x85\x09\xED" + + "\xB2\xA6\x6B\x4A\x3F\x77\x53\x6D\x25\x67\xEE\x24\x6E\x4A\xEF\xA8\xE7\x61\xEA\xBD\xFF\x00\x5B\x8A\x5E\xEB\xF9\x1F\xB5\x38\x79\xA7" + + "\xB7\x4E\xA4\xE7\xF1\x9D\x33\xE3\x31\x5D\xB1\xD7\x8E\x11\xC3\x91\x28\xE7\xF9\x3F\x05\xBC\x91\x47\x07\x29\x39\xFA\x28\xBC\x85\xB8" + + "\xE7\x1B\x68\xED\xD7\xE6\x7C\x5E\x0B\x30\xD3\xB5\x8A\xBF\x36\x4F\x35\x05\x8A\x9C\x7F\x22\x91\xCC\xDA\x97\x71\xB6\x63\x55\xFD\xF8" + + "\xCA\x44\x8E\x56\x49\x1B\xE0\xB0\x61\x2C\xBF\xEF\x60\x23\x44\x63\xE4\x0E\xE5\x0E\x74\x7B\x41\xF2\x46\xD1\xE2\x79\xAC\x7E\x39\x26" + + "\xC2\xE4\xD2\x95\xBE\x2F\x97\x8A\xC5\x5B\x75\xAE\xC5\x15\x8A\x51\x0B\xB1\x98\x6D\x45\x6A\xB4\xAA\xF1\xCB\x89\xC9\x57\x91\xA0\xC9" + + "\xD7\x96\x36\x84\x2B\xFC\xEC\xA5\x4D\x98\xEC\xDE\xBC\x23\xE2\x27\xA1\x7F\xF4\xCA\xA9\xDA\x3A\x4A\x83\x68\x5C\xB1\x0B\x04\xAC\xC0" + + "\xF9\x6F\x62\x01\x82\x56\xB0\x60\x7E\x54\x63\xBB\x01\x9C\xF5\x4E\xF1\x3E\x84\xB5\x28\x35\x0A\x68\xAF\x53\x16\x65\x4D\x84\xF9\xA8" + + "\x00\xB3\x00\x7F\xFE\x64\x51\x8E\xEC\xA0\xDB\xE6\x54\x07\xF9\xEC\xF4\xC7\xAD\x5D\x42\xE9\xDE\x63\x84\xE6\x38\xE5\xB8\x68\x5D\xE0" + + "\x99\x9C\x3E\x5F\x03\x94\x87\x1F\x8C\x87\x37\x5E\x2C\x27\x22\xFF\x00\xAA\xAB\x63\x4E\x79\x69\x8C\xB7\xF4\xAF\xEB\x4F\x6A\xEC\x94" + + "\x3F\x72\x63\x90\xDA\xB7\x5D\xC3\xD5\x9D\xE1\x36\x13\xEE\x47\xDA\x67\x41\x39\x37\x5A\x79\x7F\x5F\x73\x5E\xE7\x7A\x4D\xD2\x1E\x83" + + "\x75\xA2\x5C\x4F\x58\xF8\x6F\x0E\xE3\x8F\x27\x54\xFA\xE7\xD9\xD4\xCC\x36\x37\x98\x66\xB8\xAE\x3B\xA4\x3C\x42\xC4\x5F\xF4\xDC\x3C" + + "\x6F\x94\xE6\x33\xBC\x66\xAD\xEE\xA0\xF2\x6E\x11\x86\xF8\x31\x49\x2C\x16\x6C\x42\xA7\x5B\x6F\xDF\xEF\xE9\x29\xD5\x9E\x9C\x7B\x95" + + "\xA3\x8E\xF6\xCD\xD3\xBE\x41\xCE\x3A\x51\xD6\x6C\x8E\x4B\x29\xC1\xB1\xF8\x28\xDA\xD5\x6E\x9E\xDF\x87\xE3\xB9\xC8\xF8\x87\x2A\xCB" + + "\xDA\x78\x71\xBC\x77\x8F\xF1\xE1\x3F\xEF\xB0\xBC\x97\x91\xDF\xA7\x8B\x7E\x30\xD0\xAD\xBC\xAC\x97\xF1\x39\x59\x42\x1C\x37\xA2\xBE" + + "\xDB\x7D\x9D\xC5\x06\x4B\x97\xA7\x16\xF7\x59\xEE\x2E\xB2\xAC\x95\xB0\x91\xB4\xB9\x2F\x6D\xFD\x30\xCA\xA9\x05\x62\x31\x1F\x82\xC7" + + "\x5C\x79\x25\x17\x65\x32\x7C\x8B\x47\xA7\x15\x26\x99\x4F\xC1\xC9\x96\xAA\xDB\x3A\x75\x45\x4D\x3C\x30\xEE\x99\xC2\x00\xD7\x53\x7B" + + "\xB1\x36\x01\x91\x42\x82\x5E\xF6\x46\xB2\x90\x01\x55\x63\x65\x24\xF5\x41\x86\x9E\x6A\x89\x42\x42\x8D\x21\x2B\x9B\x01\xB5\x40\x37" + + "\x0C\xEE\x6C\xAA\x16\xEC\x3E\x6E\x6E\x54\x5C\xD8\x75\xB4\xFD\xB8\x74\x23\xA1\x1C\x33\x8A\xD0\xEB\x27\x15\xE8\xBE\x1B\xA4\xBD\x1D" + + "\xAC\x1A\x4A\x1E\xE9\xFD\xEA\x51\xA7\xD5\xAE\xA9\x75\x0A\x58\x41\x77\x5F\x6F\xDE\xD8\xA8\x8C\x77\x4B\xA4\xCA\x2D\x93\x0A\xD3\xCF" + + "\xE7\xE9\xF5\x0B\x8E\xE0\x3B\x9E\x7B\x5C\xD2\xDD\xCA\x52\xD5\x60\x3E\xEC\x3F\x52\x7E\x65\xCD\x70\xC9\xD1\xDE\x96\xDB\xE6\x34\xB8" + + "\xB4\xB5\xE3\xC6\xC8\xB9\x1C\xC7\xF5\x6E\xAD\x75\x06\x9D\x85\xFD\xA0\x7E\x59\x94\xC2\xD3\xA7\x89\xE1\xBC\x63\x29\x20\x73\x4F\xA7" + + "\x3C\x03\x05\xC7\xB8\x8A\x99\xA6\xA7\x86\xE3\xF9\x4E\xC6\xB1\x1E\x95\x5B\x9E\xE6\xFF\x00\x50\x0E\x7D\x36\x5B\x07\x97\xCB\xF2\x6C" + + "\x5F\xF5\x09\x70\x17\x3A\xB5\x92\xA4\x97\x78\x86\x3A\xD6\x3D\xC2\xCD\xC2\xBA\x3D\x80\x8E\x3A\x78\x3E\x49\x97\xC2\x24\x9A\xB7\x26" + + "\x34\x51\xE9\xD7\x02\x56\xAD\x26\x6E\xFC\x4D\xFB\xBC\x60\xBA\xDF\x69\xDF\xA6\xE7\x49\xFD\xBB\x2D\x5E\x51\x9B\xA8\xBC\xCF\xA9\xF3" + + "\x03\x6E\x5C\x9E\x62\x79\x72\x90\x52\xBB\x22\x20\xB1\x3C\x97\xED\xD5\x51\x95\xCA\x38\x42\x93\xE4\x64\x82\x22\x55\x5A\x3A\x74\xEA" + + "\xD5\x54\xAD\x1D\x1F\x5D\xD7\xA4\x11\xF9\x51\x1F\x29\x64\x16\x58\xB7\x7F\x3A\x50\x6C\x37\x4A\x54\xDD\x23\xC6\x11\x0E\xE7\x3F\x29" + + "\x76\x53\xF2\xDB\x34\x9D\x1E\x10\xEB\x23\xDA\x79\x23\x22\xF2\x67\xC9\x8D\x80\x1F\x2C\x7B\x8F\xF3\x24\x1D\xDD\xC6\xD5\xEC\x8A\xD7" + + "\xBD\x29\x70\x0F\xD2\x07\xDC\x57\xB9\x7C\x05\x3E\x71\xD4\xAE\x59\x43\xA6\x38\x7C\x87\x64\xF8\x7E\x23\x6A\x84\xD7\x6E\x9A\x92\x7F" + + "\xAB\x1D\x9B\xD1\x25\xA4\x8E\xB9\x90\x76\xCA\x2B\x77\x5A\x21\x82\x4B\x6A\xDD\x9B\x21\x0C\x1B\xCF\x11\xFF\x00\xE8\xFB\x62\x97\xE2" + + "\x39\x5E\xB6\x4E\xAA\x40\x56\x4A\xB8\xE5\x80\xF7\x2F\x6B\x15\x8A\x39\xEA\xCC\xA5\x7B\x48\x3E\x1C\xEB\xFE\x7C\x91\xD2\xC2\xCB\x6E" + + "\xB3\x43\x04\xB7\x71\x71\xA3\x2F\xE3\x5A\x49\x19\x67\x66\x45\x60\x82\xBC\x80\xC1\x1F\xC7\xE1\x42\x81\x58\x95\x20\x86\x3E\x46\xBC" + + "\x4C\x05\x90\xD1\xD8\xA9\x02\xB2\x96\x11\xFE\xE6\x18\x6C\x42\xEC\xCB\xDC\x0F\xE3\xBE\xFF\x00\xEF\x07\x4E\xB1\x9F\x03\xFD\x9B\xDE" + + "\x79\x22\xC9\x33\x6F\x91\x99\x89\xB6\x03\x15\x1C\x0B\x00\xBC\x0C\x5E\xDD\xF9\xB5\xEF\x9B\xA4\x52\xB5\x3A\x85\x88\x22\x2F\x37\x08" + + "\x8C\xD9\xE4\xEE\x75\x24\xB6\x39\xBE\x0E\x05\xB8\xEB\x9F\x2C\x57\xE8\x07\xD1\x9A\x8C\xAD\x9F\xEA\xDF\x2F\xB9\x0E\xC6\xDA\xAA\x63" + + "\x6A\xBB\x92\x47\xE2\x91\xAE\x3F\x45\x0F\xF0\xEC\xC5\x89\x50\x02\xE8\x96\x1B\x6F\x03\xFA\x17\xFB\x4F\xA6\xE0\xDC\xB5\xCD\xF3\x50" + + "\x2A\x16\x12\xCD\x9D\x8E\x11\x26\xC6\xC6\xD2\x01\x17\x67\xFB\x4F\x76\xF4\x37\xE1\x7C\x1F\x57\x4C\x65\xB1\x4D\x75\x34\x95\xA5\x8D" + + "\x3B\x44\x71\x54\xA1\x67\xE6\x8C\x1D\x81\xA4\x8A\x6B\x3F\x20\x1F\x96\xB5\x14\x7F\x44\x05\xFA\x03\xCD\x9A\xD0\x5A\x3D\xF0\xD9\xB1" + + "\x0B\x76\xAB\x08\xEB\xDC\xB5\x58\x8F\xCB\x7B\x96\x92\xCB\x14\x7B\xDE\xBB\x96\x48\x7C\x96\x0A\x41\x6F\x21\x21\x00\xBD\xB6\x92\x40" + + "\xBD\xCB\x1E\x05\x8F\x37\xF5\xE0\x66\xE4\x8F\x5E\x8F\xF1\x73\x9C\x19\x48\x07\x9D\xAA\xAA\x3B\x76\x50\xBE\x99\xE6\xFF\x00\xAF\x55" + + "\x47\x8D\xFD\x1A\xFD\x94\x62\xDA\x23\x67\x88\xE6\x6E\x9D\x28\xD5\x8C\xD5\xC6\x89\xC7\xDF\x6C\xAD\xF3\xC8\x3F\x21\xE7\x4A\xFD\xA4" + + "\xB0\x01\x40\x3B\x39\xBE\x3F\xF4\xAD\xF6\x39\x89\x91\x04\x7D\x28\xC3\x58\x93\x7F\x9C\x77\x6C\x1B\x72\x30\x52\x54\x83\x0C\x8E\x5D" + + "\xBB\x87\xF0\x22\x2C\xC5\x46\x80\xFF\x00\x74\xD2\xEB\x07\x54\x78\x1F\x44\xBA\x7F\x9E\xEA\x5F\x56\x79\x05\x1E\x35\xC1\xB8\xD8\xAE" + + "\xD9\x9C\xA5\xFC\x5E\x5B\x26\x23\x5B\xB7\x20\xC6\xD0\x8A\xBD\x1C\x5C\xD9\x5B\xF3\xD9\xB7\x7E\xDD\x6A\xF5\x6B\xD7\xA9\x3C\x92\x4D" + + "\x20\x66\x8D\x17\xBA\x54\xAF\xFC\x57\xEA\x49\x92\xEA\x1E\x03\x23\xCC\xBA\x0F\xED\x6F\xA9\x3D\x52\xE9\xA5\x4C\xB6\x4F\x01\x83\xE6" + + "\x96\xF2\x58\xCE\x2E\x9C\x9B\x3B\x88\x83\x8E\x4B\x7B\x17\x84\xE3\x0D\x5F\x39\xC8\xD2\x79\x8F\x2C\xC1\x26\x30\x5E\xA5\x58\x5E\x4B" + + "\x9E\x7F\x6C\x60\xB3\x14\x16\x8F\x0E\xF8\x1B\xC4\xDE\x27\x59\xDF\x43\xD2\x27\xAC\x82\x9B\x77\xC4\x55\xBC\x90\x51\xD0\xC4\xE3\x65" + + "\xE2\x7A\xEA\xE9\xA9\xA9\x16\x6D\xAE\xAE\x20\xF3\x8C\xCC\x84\x3A\xA6\xDC\x88\x0D\x5F\xC5\x7A\x4E\x84\x62\x5D\x57\x56\x14\xB2\xCF" + + "\xFF\x00\x2A\x00\x67\x9A\xA6\x45\xBD\x83\xA5\x35\x2A\x4D\x50\xD1\x86\x52\x0C\x9E\x56\xC5\x23\x69\x70\x4D\xBA\xDE\xF8\x1F\x60\xBE" + + "\xD0\x30\x56\x2B\x64\x78\xDF\x45\x78\xA6\x3E\xFE\x2E\xC4\x16\xA9\x5F\x5C\x32\x56\xB5\x52\xED\x76\x13\x43\x62\x19\x67\xAF\x0B\x09" + + "\x22\x91\x15\xD3\xB5\x5D\x36\xA1\xB6\xC3\xB4\x89\x4F\x16\x34\xC1\x0F\xEC\xC4\xAB\x35\x7A\x90\x24\x51\x19\x04\x3F\xB8\xF8\xE3\x45" + + "\x48\xE2\x55\x8E\x18\xE0\x65\x0B\xA5\x2A\xEA\x92\x1D\x8D\x97\x1E\x16\xB8\xF8\x1F\xBE\x6F\x70\xDC\xBF\x9B\x50\xE3\xDC\x9B\xF4\xF0" + + "\xEA\xEF\x1C\xC2\xD9\xB3\x85\xAD\x6F\x34\x3A\x83\xC3\x25\xC9\xD4\x9B\x95\x36\x5A\x1E\x25\x0D\x6C\x47\x2D\xA9\xC0\x71\x36\x2C\x72" + + "\x2B\xB8\x99\x6A\xE3\x69\xCB\xCB\x29\x4F\x7A\x6B\x38\xFA\xD4\x96\xDD\xCC\xCE\x0E\x9E\x57\x50\xF3\xBF\x7E\xBE\xEE\xAE\x75\x97\x8C" + + "\x74\xC7\xA4\x9E\xD0\x2B\x8C\x47\x34\xE3\x31\x72\xDE\x2B\x6B\xA8\x5D\x58\xE9\xE6\x2F\x37\x91\xE3\xD2\x5A\x87\x0D\x26\x43\x2F\x52" + + "\xB7\x25\x5E\x37\xC5\x73\x31\x67\xAE\xD3\xC2\x27\x0C\xCC\xF3\x38\xF3\xA3\x23\x6B\x1B\x43\x22\xB8\xEB\x79\x7A\xD0\xC7\x65\xA7\xFE" + + "\x0F\x7F\x10\x65\x91\x95\x74\x02\x00\x88\xCE\xF2\x9A\xED\x34\xC4\x90\xE7\xE7\x69\x23\xAB\x71\xB5\x40\x69\x0A\xAE\xE6\xF2\xD5\xA4" + + "\x0B\xB0\x5F\xA8\x0A\x8F\xE2\x57\x83\xE3\x5B\xCB\xAD\xAB\x30\x7F\x2D\x63\x30\x55\xB4\xA5\xC8\x07\x60\x46\x80\x32\x92\x6C\xB7\x60" + + "\x8B\xBC\x85\x2D\xB8\xDB\xAB\x80\x48\x6D\xAC\x21\x0D\xB8\xAB\xD6\x45\xDA\xC7\x56\xB4\x69\x22\x78\xD1\x13\x34\xED\x6E\x16\x41\xA2" + + "\x35\x14\x31\xB6\xF6\x4B\x6B\x43\xD3\x6B\x5F\x3C\x28\xF2\x6E\xBB\x42\xC8\xDB\x90\x26\xA5\x4D\x2B\x12\xED\x2C\xB3\xBC\x0D\xBE\xD2" + + "\x47\x6C\x08\x3E\x94\xAF\xF8\xA5\x3E\x7B\xEF\x93\xDF\xDF\x47\x38\x25\xFE\xB4\x73\x8E\x82\xF4\x33\x94\x74\xA7\x8E\xD8\xC0\x8E\x43" + + "\x8E\xC2\x73\x99\x63\xEA\x0E\xB9\x36\x1F\x85\xE6\xB1\xB8\xED\x62\x73\xFC\x9E\x8E\x27\x90\x50\xC6\xF5\x17\x83\xE4\xF3\x18\xBB\xF8" + + "\x2C\xA4\xAB\x5B\x36\x89\x52\x7B\x3D\xB2\x58\x8A\xC1\x7D\xAA\x7B\x87\xE3\xFE\xE7\xBA\x2D\xC6\x7A\xD2\xB8\x8C\xAF\x0E\xB7\x9B\x97" + + "\x2D\x8E\xCC\x70\xFC\xD5\xF7\xBB\x37\x1F\xC9\xE2\x32\x13\xD3\x6A\x73\xCD\x5A\x9E\x2E\x9D\xA8\xAD\xD6\x4A\x99\x4A\x57\x0E\x22\xAC" + + "\x8F\x4B\x23\x01\x78\xD2\x51\x22\xA4\x5F\x8A\x7F\x87\x3E\x27\xF0\x75\x2D\x36\xA1\xAC\x52\xD2\x7C\x0D\x5C\x8B\x0C\x15\xB4\x5A\x95" + + "\x15\x7C\x0D\x50\x63\x69\x1A\x9C\xB5\x3C\xEE\xE2\x68\xE3\x04\xCA\xBB\x36\xC4\x4A\x2C\x8C\xAC\xCA\x0B\xDD\x03\xC6\x9A\x07\x89\x6A" + + "\xAA\x28\x74\xDA\x99\xCD\x6D\x32\x34\x92\xD2\x54\x50\x54\xD2\xCD\xE4\xAC\x89\x18\x99\x44\xF0\xA2\x98\xDD\xD8\x2A\x30\x62\xCF\x66" + + "\x2A\xAC\xA1\x8F\x52\x3C\xD3\x8E\x32\xB3\x5B\x2F\x93\x9D\x7F\xF8\xAC\x4E\x95\x04\xB0\x82\x77\xA8\x4C\x2B\x5D\x55\x46\xF5\xF8\x6E" + + "\x42\x00\x05\x98\x9F\x0C\x23\xB5\xFB\x99\x58\x54\x48\x3B\x62\x6D\xCB\x1C\xB0\x5A\x8E\x5E\xDF\xA6\x31\xBB\xFC\x40\xA7\x9D\x6C\x2C" + + "\x81\x8F\x8F\x1A\x1B\x46\xD9\xE3\xDD\xEF\x34\x74\xE9\xCE\x57\xFB\x9E\x95\x54\xB2\x5D\xDC\x92\x9A\xF8\x55\xD9\x48\xD7\x99\x25\x09" + + "\xE4\x8D\x3E\x82\x80\xC9\x65\x4C\x86\xD6\x5A\xED\x5E\x30\x15\x91\x64\x26\xB4\xEC\x76\x08\xEC\x9E\xB5\xD6\x3D\xBE\x40\x2A\x44\x7F" + + "\x5D\xA7\x7A\x6F\x54\x06\x1D\x81\x03\xB8\xB1\x24\xDB\x17\xCD\xBE\x9C\x93\x8E\xDD\x5C\x42\x81\x66\x25\xF1\x61\xF3\x28\x50\x32\xA7" + + "\xE5\x50\xC6\xF6\xCE\x01\x5F\x5C\x1E\xB4\x37\xBB\xBE\x57\xD5\x9E\x23\xD0\x3E\x75\x9E\xE8\xA7\x0B\xAD\xCB\x7A\x89\x8C\xAD\x42\x4C" + + "\x4E\x0F\x2A\xD5\x5A\x9D\xBA\xB2\x65\x29\xC5\x98\x97\xB5\xB9\x17\x1E\x49\x64\xA9\x88\x92\xE5\xC8\x60\x97\x33\x8E\x69\x25\x81\x11" + + "\x5C\xBB\x88\xDB\x92\xDA\x1C\xD3\xAA\x19\xFC\xAF\x33\xE7\x9C\xE5\x2F\x70\xDE\xA8\x2F\xBA\x7E\x23\xC9\xAE\x49\xC6\x64\xB3\xC6\xF2" + + "\x7C\x77\x2F\x8B\xE8\x4E\x7A\x0C\x1D\xEC\x5C\xF8\xCC\x95\xBB\x54\xA6\x5A\x50\x63\x6E\xC2\xE9\x93\xBD\x1D\x95\x90\xA5\x89\xAE\xC1" + + "\x62\x51\x37\x57\x1E\xEF\x6E\x72\x1C\x2F\xB7\x4E\xA7\x5C\xE2\x2B\x75\xF3\x63\x13\x04\x74\x43\xD1\xB7\xC9\x63\x57\x9E\xFD\x78\x49" + + "\x93\x15\x1D\x1C\xD4\xD6\xAA\x92\xE1\x6E\x2C\x78\xFB\x8D\x1D\x3F\x9E\xC3\x43\xA8\x9E\x44\xE4\xD6\xE6\x6B\x35\x82\xAF\x97\x8B\xA8" + + "\xB5\x2F\x5D\xE6\x39\xAE\xAA\x71\xFE\x55\x91\xB5\x8E\xC0\x63\xB1\xF8\x29\x30\x30\x74\xBF\x95\x70\xBA\xB1\xC7\x43\x09\x52\x85\x2C" + + "\x64\xD8\x98\xE6\xC1\xE3\x67\xC4\x7F\x4A\xA1\x24\x68\xE9\x66\x48\x96\x7A\xF9\x48\xEB\xC3\x78\xB6\x8F\x50\xAE\xF0\x7D\x72\xE9\x11" + + "\x47\x3E\xAB\x4B\x5F\x45\x5B\x4F\x15\x1B\x94\xD6\xD7\xE1\xA6\x8E\x41\x25\x2B\x29\x47\x31\x46\xE1\x5E\x33\x19\xF3\x16\x70\x1E\xC2" + + "\xD7\xE9\x38\xA4\x48\x75\x45\x33\xB5\x47\xC3\x4D\xA7\xD5\xD3\xB3\xC8\x0B\xD0\x17\x9A\x17\x4F\x2E\xC7\x78\x33\xB0\xBA\xB2\x91\x98" + + "\xF0\x0B\x5F\xA9\x33\x96\xC0\xF5\xD3\xDC\x1F\x20\xC6\x73\xDE\x59\xD4\x5C\xD7\x2F\x9B\x06\x93\x54\xC3\xE5\x79\xEE\x6A\xD5\x98\xB1" + + "\x69\x29\x89\xAE\x41\x85\xC0\x50\xAB\x1E\x3B\x1C\x2D\x4B\x0C\x2D\x90\x9A\x8E\x2E\x81\xC8\x3D\x74\x5B\x56\x2C\x1A\xB0\xAC\x58\x8D" + + "\xAC\x27\x57\x3A\x15\xCB\xAD\x73\x8C\x27\x3E\xCB\x71\x6C\xD6\x69\x4D\x4B\xBC\x93\xA7\xFC\x97\x2D\x85\xB3\x72\xBC\xA6\x49\xE1\xC5" + + "\xE6\xAB\xC1\x25\x47\xBB\x48\x98\xA7\x92\x85\x4C\xCD\x6C\x85\x38\xE6\x8A\xCD\xAA\xAF\xFB\xD5\x9A\xC7\xAD\x6B\x53\x3B\xD2\xEE\x3F" + + "\xC6\x69\xD5\xC0\xF5\x37\xA9\x7C\x56\xCD\x1E\x29\x6B\x16\xB8\x0C\x18\xCB\x71\xFC\x40\xCF\xDE\xC7\xE2\xAA\xCD\x96\x92\x5A\x36\x56" + + "\xBC\xB3\x23\x50\xBB\x25\x79\x86\x2A\xEC\x35\xAC\x65\x6E\xDF\x8E\xAB\x5D\x62\xD3\x00\xE4\x79\x6E\x99\x64\xB0\x96\xDE\xAF\x3B\xEA" + + "\x4E\x5F\x91\x64\x2A\xE3\x2C\x5E\x9C\x50\xC5\x56\x93\x3D\x9E\xA3\x88\xC1\x62\xED\xD9\xC9\x65\x2D\x66\x9E\xFA\xD4\x76\xC4\xD8\xBD" + + "\x89\xAF\xF2\x47\xFD\x2E\xF5\xEE\xD3\x3D\xDA\x18\xEC\x55\x3A\x38\x0D\x24\x5F\xC5\x37\xD7\xA3\xD4\x2A\x35\x7F\x13\x98\x3C\xF6\xA4" + + "\x4A\xD9\xFC\x13\xE2\x18\xF5\xF4\x8C\x4B\x1C\x48\xD3\xEB\x37\x79\x92\x11\x13\x79\xFB\xE3\x99\xE8\x1A\x44\xD9\xE5\x8C\xCC\x96\xD9" + + "\x34\xEF\x0A\xA6\x84\xD4\xD1\x45\x4D\xF1\x62\x14\xAB\x78\x53\x5F\xA0\x7D\x3D\xA7\xF2\xCB\x32\xAE\x9D\x64\x52\xE4\x83\x08\x56\x51" + + "\x52\xA1\xB2\xED\xF8\x1B\x08\xEB\x0E\x7B\xA9\x59\x5A\x7C\x53\x92\x71\x9C\xA4\xDC\x8B\xA8\x59\x6E\xBA\x75\x07\x27\x6F\x31\xCD\x72" + + "\xD0\x65\xE5\xCB\x3D\xAE\x92\x70\x48\xF2\xD3\x67\x32\xDC\xBE\xF3\x45\x32\xCD\x8B\x69\xAB\x87\xB3\x75\x24\xAF\x0A\xC5\x06\x33\xE2" + + "\x92\x2A\x71\xA5\xEF\x7B\x55\xC5\xF5\x2F\x3D\xED\x13\x23\x26\x4A\xD0\xE2\xFC\xF2\x6E\x35\x6E\x2A\xB9\x8E\x17\x6A\x5B\xD8\x6A\x37" + + "\xCD\xC7\x78\x05\x01\x47\x29\x6E\xED\x89\x66\x85\x23\x88\xA4\x46\xEB\x43\x3C\x92\xC9\x0C\x66\x25\x89\x3D\x50\xD5\xFA\xBC\xFF\x00" + + "\xA8\x52\x71\x3E\x3B\xD3\xAC\x3E\x5F\x1D\xC8\xB1\x3D\x45\xCF\x72\xA4\xC8\x49\x8F\xC6\xF2\x28\x26\xC5\xE5\x78\x57\x0E\xE3\x82\x8D" + + "\x7E\x3B\x8B\x5E\x4D\x73\x33\x6A\xC4\xB8\x7C\xAC\x76\xA9\x36\x31\xA2\x4A\x8F\x13\xB0\x9D\x6D\x4A\xB5\xBA\x0E\xE8\xF7\x45\x7A\xA1" + + "\x96\xF6\x25\x07\x0A\xAB\x52\xEE\x3B\xAB\x59\xAE\xCB\x99\x2A\x59\x6A\x07\xA7\xB8\xAB\x16\xA8\x72\x04\x96\x54\x83\x0F\x06\x32\x9B" + + "\xF1\xAA\xB9\x3C\x75\x70\xF0\x47\x5B\x09\x12\x3C\x8E\x25\x92\xBC\x3F\x3C\x85\x37\xFF\x00\x0C\xC5\x59\x43\xE1\xCD\x32\x3D\x62\x54" + + "\x4D\x45\xF5\x5A\xDA\xDA\xAF\x89\x1F\x11\xAB\x81\x3D\x6D\x44\xDF\x11\x53\x21\x79\x1D\xD1\x8B\x89\x0C\x52\x81\x23\xCA\x4C\x87\x9B" + + "\x0A\xD4\x64\x4B\x59\x2F\x91\x1D\x47\xC3\x0D\x3A\x92\x9D\x14\xEE\x8B\x4F\x67\x8E\x08\x51\xA2\xDA\x55\x14\x4E\xA0\x14\xDE\xB7\x45" + + "\x8C\xB2\x9B\x1C\x9A\x56\xF7\x18\x39\x9D\x18\xF2\x72\xF3\x9C\xAF\x28\xCA\xF2\xAA\xB0\x5E\x81\xAF\xF2\xA9\x32\x03\x2C\xB5\xE0\xC4" + + "\x93\x8D\x64\x5C\xAC\x70\x64\x6B\xD7\x29\x93\x82\x6A\x91\x59\x82\xB7\x62\x3A\xCB\x0C\x09\x14\xAA\xCF\x15\xB2\x19\xFE\xB5\x73\x8C" + + "\x36\x17\x05\xCA\x79\xCF\x31\x97\x8C\xF1\xC9\x2A\x3E\x03\x0D\x9E\xCB\xE6\x6F\x62\x31\xF2\x54\x86\x23\x59\xB0\xD8\x8B\x12\x9C\x75" + + "\x58\xAB\xC1\x2C\x41\x04\x09\x12\x22\x48\x11\x49\x56\x61\xEA\xC8\x3A\xD3\xED\x43\xDC\x86\x57\x1F\x63\x05\x7B\xA4\x1C\xBA\x0C\x95" + + "\x5A\xF6\x2B\x4B\x6F\x8F\x35\x0E\x65\x82\x9F\xE7\xB7\x4E\x73\x66\xA5\xDC\x75\xF8\xEF\xCB\xF2\x54\xA8\xB1\x94\x9A\x84\x12\xC7\x34" + + "\xD2\xC4\xD1\x78\x57\x3A\x3F\x1D\xED\xF7\xAF\xB8\x0C\x6C\x38\xD9\x3A\x4F\xD5\x09\x05\x75\x54\x9B\xE3\xE9\x6F\x2A\x0F\x21\x35\x2B" + + "\xD4\x93\xE3\x15\x71\xF6\xC4\x7F\xE8\xD7\x85\x50\xBA\xC8\x81\xE3\x59\x8C\x6C\x00\x51\x71\xD6\xA6\x96\xA6\xA2\x69\x28\x75\x42\xB1" + + "\xD5\x0A\x70\x2A\x69\x6A\x68\xA0\x06\x35\xA3\xA6\x8E\x43\x53\x41\x51\x55\x48\x4D\xA5\x89\x80\x86\xE0\xA6\xE6\x60\x1B\x03\xAD\xC7" + + "\xF8\x67\xAD\xF8\x2A\x83\x49\xF0\xFD\x2F\x89\xE9\xF4\xA9\x24\xD1\xA9\x75\x23\x53\xA6\xEA\xF0\xEB\x65\x85\x64\xBA\xFE\xA7\x53\x4C" + + "\x9A\x7E\xBD\xA5\xE8\xFA\xC2\xC2\x1E\x86\xB2\x09\xA4\xA8\x4B\xA4\xA2\x08\xA9\x8C\xB1\xB0\x2E\x91\x0E\xEF\x25\xEA\x4F\x02\xE4\x78" + + "\xFE\xA2\xF0\xEE\x49\x73\x89\xE5\xF0\x86\x14\xC7\xE4\xF8\x84\x99\x0C\x05\xAC\x54\xFD\x9F\x0B\xDA\xAA\xF0\x5A\x92\x58\xA5\xB2\x5C" + + "\xA5\x89\x23\xB2\x5A\x51\x37\xC6\x63\xF8\x98\xA8\xC9\x72\xFD\x66\xEA\xDF\x59\xAC\xB7\x2A\xEA\x57\x3A\xE4\x1C\xE3\x92\xE3\xE4\xA3" + + "\x43\x11\x90\xE4\x59\x26\xB8\xF4\x6A\x53\x99\x6F\x45\x56\xB0\xB3\x22\x56\xA9\x54\x59\x69\x27\x99\x57\xE2\x47\x76\x92\x69\x4B\x3B" + + "\x33\x1D\xB7\xCA\x3A\x4B\xD6\x79\x6A\xDB\x8A\x4E\x92\xF5\x22\x09\x25\xF9\x4D\x65\xB5\xD3\x2E\x7D\x14\x30\x85\x77\x92\x08\x9E\x46" + + "\xC0\x2A\x98\x63\x79\x34\x74\x4B\x15\xED\x59\x4B\xC6\x14\x0D\x6D\xC1\xBA\x3F\xD5\xBA\xF6\xEA\xE3\x30\xFC\x03\x9A\x59\xCE\x26\x4C" + + "\x5A\x8E\x3A\xBC\x3B\x90\xCE\xC2\x6A\xEC\xC4\x29\xA5\x36\x16\x43\x28\x3A\x21\xA2\x96\xB3\x46\x3B\x7F\xD6\x43\x18\x3E\x90\xD2\xA4" + + "\xAC\x82\x48\xA0\x97\x56\x32\x52\xAD\x6D\x34\xD2\xAC\xF3\xD2\xD2\xD1\xC8\xB0\x54\xD2\xCC\x26\x34\xD4\xF5\x6F\x0B\xA9\x54\x63\xB0" + + "\x26\xFB\x28\xC9\x72\x00\x94\xF1\xAF\x88\x7C\x09\x50\x35\x1D\x4B\x46\xD3\x74\x98\x6B\x2A\x7C\x35\xAB\xD0\x51\x8A\x39\xB5\x0D\x6F" + + "\x54\xA4\x9B\x52\xD0\xF5\x4D\x31\x68\x53\x55\xD4\xB4\xBA\x6A\xFB\xAB\xD5\x41\x79\xDD\xC4\x5B\xA5\x7B\x6D\x89\x0B\xB7\x40\x7F\xA7" + + "\x76\x63\xA9\x7C\xAF\x84\x58\xCB\xF2\xB5\xC7\xD3\xF8\xB2\x93\x9C\x7B\xC3\x25\xAB\xAB\x77\x16\x2B\x55\x0D\x2B\x48\xD9\x8C\x8C\x4B" + + "\x2B\x5B\x36\x91\x16\x36\x48\x92\x34\x40\x2B\xA0\xED\x66\xD6\x9F\xA9\x0F\x58\x79\x97\x4D\xDF\x1D\x8D\xC2\x61\xE9\x66\xE2\xE4\x42" + + "\xC5\x3B\x43\x29\x0D\xB7\xAF\x02\x3D\x64\x58\xE1\x4A\xB4\x72\x75\x96\xEF\xEF\xC4\xF2\xC7\xF0\xCB\x14\x29\xDB\x5D\xCB\x19\x8C\x82" + + "\x0F\x52\xB7\xD8\xA7\x0B\xE4\x3C\x3B\xA1\x98\x84\xEA\x06\x02\xE6\x0B\x92\xE5\x2E\x64\xE7\xC8\x63\xAC\xE1\x6A\xF1\x86\xC7\x47\xFD" + + "\x46\xD2\xD4\x07\x13\x4A\xB6\x39\x68\x87\xA6\x20\x62\x62\xA9\x11\x96\x42\xF2\xC9\x1A\xC9\x23\x33\x40\xDF\xD4\xD3\x1F\xD5\x4C\x17" + + "\x2D\xC4\xDD\xE0\x1C\x3F\x21\x7F\x07\x6B\x19\x36\x4A\xFF\x00\x2C\x8B\x89\x27\x33\x5A\x25\xA2\x14\x4D\x0A\x19\x6B\x18\xCC\x8B\xF1" + + "\xD9\xEA\x88\xAC\xDA\x99\xBF\xF6\xAE\x52\xD4\x53\xC5\x65\x94\x49\xF0\xA3\x41\x51\x4A\x75\xF9\x64\x91\xB4\xD4\xA7\xF3\xE6\x21\x8A" + + "\x11\x47\x83\xB2\x36\xA7\x85\xEC\x17\x71\x00\xC2\x59\x88\x05\x89\x19\xE3\xCD\xFA\x9C\x35\x47\x49\x48\xE2\x5A\xD9\x27\x65\x84\x11" + + "\xBE\xF5\x3B\x48\x05\xC4\xF2\xC6\x0B\xB8\x17\x22\x40\x80\x33\x5A\xC7\xE4\xBF\x54\x6B\xC1\x7D\xCF\xF5\xA7\xDB\x8F\x27\xC9\x72\x9E" + + "\x8C\x73\x4B\x7C\x4B\x35\xC9\x4E\x4F\x1D\x9B\x5A\xF8\xDA\x39\x4A\x79\x2A\x75\x21\xC6\xB5\x48\x2E\x62\xB2\x75\x2D\xD3\x99\xAA\x4D" + + "\x34\x93\x55\x95\xA1\x32\xD6\x77\x67\x8D\xBB\xD8\xEB\x09\xCD\x75\xCB\xAB\xDD\x40\xE6\x1C\x9B\x9C\xF5\x4F\x3A\xBD\x43\xE4\xFC\x8F" + + "\x0F\x3E\x28\x59\xE5\xC2\xE5\x99\xF0\xD6\x88\x0B\x8F\xC9\xE2\xA1\xA5\x35\x48\x2B\x59\xC4\x07\x64\xA7\x8F\x95\x27\xC5\x05\x91\x22" + + "\xB3\x8E\x9D\x21\xAF\x1C\x6F\x2C\xF4\x83\xAB\x79\xFC\x8C\x36\x70\x5C\x23\x95\xE4\xAB\xA4\xF9\x02\x67\xA3\xC5\xB9\x24\xD3\x38\xC8" + + "\xF6\xA3\x9E\xDA\x58\xC9\x83\x04\x8D\x23\xD7\xE4\x02\xB8\xD2\x87\x50\xAD\xEB\x64\x60\x3D\xBF\xF5\xFE\x4B\x69\x0D\x7E\x94\x75\x02" + + "\x2B\x46\x61\x34\x0A\xDD\x39\xE6\x84\xC6\x4B\x2B\xBB\xAC\x6D\x83\x89\x99\x24\x54\x35\xCE\x9D\x0F\x6C\x8F\xB3\xDA\xCC\xCB\x7D\x93" + + "\x54\xA7\x55\xD8\xDA\x84\x02\x20\xC0\xED\x35\x09\xE5\xEE\x16\x01\x82\x17\xD9\xBA\xC3\xB8\x0D\x8B\xDE\xFD\x60\xD5\x1A\x27\x89\x64" + + "\x9A\x58\xE9\xE8\xF5\x05\x56\x92\x69\x59\x7F\xD3\x5E\xAA\x22\xAE\xEC\xE7\x6E\xE6\x44\x05\x9D\xD8\xFC\xE1\x94\x36\xD3\x75\xB9\x6E" + + "\xB0\x7E\x27\xEE\x1F\xDC\x9F\x4F\x38\xF4\xDD\x20\xC2\xF5\x6B\xA8\xDC\x7F\x89\xE5\xAD\x25\x2B\x9C\x2A\x2C\xC6\x46\xAE\x2D\xE3\xCB" + + "\x3A\x2D\x88\x5A\x84\xE0\x34\x30\x5D\x8A\x60\xAD\x04\x61\x23\x78\x5A\x30\x10\x2A\xA0\x16\xC1\xEC\x72\x3E\x69\x76\xFF\x00\x08\xC6" + + "\x70\xCC\xE3\xE0\xE4\xB5\x77\xFA\xD7\x21\x76\x49\x3E\x3B\xF8\xBB\x1C\x9F\x21\x90\x7A\x51\xB7\xED\xEC\xD6\x92\xDC\xB5\xAC\x4E\xB0" + + "\x46\xFD\xAF\xD9\x20\x72\xEA\x85\x5C\xC3\x38\x7D\xA3\xFB\x89\xCA\xD8\xC0\x4D\x73\xA6\xBC\xEA\x8E\x3B\x13\x9B\xC5\xE6\x5A\x9D\x6E" + + "\x9B\xE7\x2A\x99\x9F\x18\xF1\x94\x8C\xCD\x95\xBD\x5D\x51\xA4\x89\x65\x59\x6C\x48\x4C\xF2\xBC\xCA\x6C\xCB\x32\xD7\xAE\x90\xDA\x1F" + + "\xB4\x2F\x6E\x7D\x5C\xE3\x5C\xA7\x80\x65\xB3\xB8\x4B\x7C\x57\x84\xF1\x68\xA2\xFE\xAD\x35\xFE\x47\x53\x15\x9C\xC9\x36\x3A\x94\xF0" + + "\x56\x16\xB0\xB8\xAB\x76\x5A\x28\xA5\xB8\x63\x9A\x45\xB3\x69\x1E\x38\xC9\x31\x07\x1F\x93\x44\x6A\x7A\xBD\x08\xA4\x99\x06\xA1\x4C" + + "\xF2\x98\xDD\x62\x4F\x31\x27\x3B\x8A\x1B\x20\x88\x31\x00\x13\x61\x70\x0A\xA8\x37\x20\xD8\x03\x6C\xF0\xAF\x87\x75\xE4\xD4\x61\xA9" + + "\xAC\xA2\xAF\x68\x55\x0A\x99\x27\xFE\x4E\xCD\xF2\x53\x16\xB3\x06\x90\x28\x02\x32\x6C\x0A\xB3\x6D\xDA\x02\x8B\x1E\xAE\xAD\x2C\x08" + + "\x60\x8A\xAE\x49\x24\x0E\xE8\x00\xEC\x32\x4F\x24\x8C\xAB\xBF\x94\xFE\xD1\x3E\x44\xD9\x1E\x49\x54\x40\xDD\xDE\x74\x35\xEB\xC4\x90" + + "\x57\x8D\x9A\x66\xFD\xAA\x02\xBA\xEF\x92\x38\xBB\x82\x7D\xEE\x47\x28\xB2\x00\x34\x36\x1E\x46\x1F\xCE\xFF\x00\x1D\xFA\x60\xB9\x3B" + + "\x8B\x1A\x1A\xF2\x54\x78\x23\x00\x00\x56\x5B\xB3\x48\x08\x60\x09\xB4\x6D\x45\xDF\xAF\xB0\x1A\x16\x3E\x3F\xBC\x93\xE8\x54\x92\x2B" + + "\x48\x65\xC8\xD4\xA5\xDE\x76\x63\x96\xAF\xEE\xE3\x9C\x12\x0E\x89\x68\xCB\x32\x96\xD7\x82\xB2\xE8\x6B\xCF\x83\xEB\x37\x12\x01\x6B" + + "\xE7\xF0\xD8\xBE\x07\x73\x72\xC2\xF8\x17\xFF\x00\xA5\x48\xC9\xCD\xEF\xD6\xDE\x69\xDE\xC7\x16\x00\x92\xC1\x1A\xE4\xF0\x2C\x11\x8A" + + "\xDB\x17\x27\x2D\x7C\x0E\xDD\x4F\xE8\x1E\x19\x51\x1E\xAC\x53\x4E\x2A\xB9\x6E\xCB\x54\xE4\x36\x01\x62\xC0\xA0\x37\x64\xAE\xF1\xB9" + + "\x01\xBB\x3B\xB5\xE7\xF2\x27\x40\xE8\xE7\xF5\x1A\xEB\x0A\xC9\x2D\x2B\x10\x77\x16\x4E\xC3\x52\x5B\x0E\xA5\x4F\xF7\x48\x2A\x3D\xB0" + + "\xA0\x8D\xED\xC9\xED\x1F\x65\x87\x8E\xE1\xF5\xAC\x5C\x60\xC9\x24\x50\x20\x67\x3D\xAD\x5D\x8A\xB7\xC6\xA4\xF6\xB6\xDA\x12\xC2\x4F" + + "\x0D\xFE\x9E\x99\x40\x00\x87\x1B\x04\x93\x8E\xCC\xD5\x13\x71\x8B\x59\x05\x76\xDC\x9F\x2B\x53\x13\x22\x92\x3C\xAF\xCA\x6A\xA9\x1D" + + "\xC7\x5A\x32\x06\x00\x79\x2C\xDA\xEE\x95\x03\x38\xBD\xC8\x03\xDA\xE3\xD0\x5C\x91\xC9\xB0\x07\x23\x9C\xDB\xA8\x91\x21\x27\xE6\x17" + + "\xB1\xC5\x9E\xC4\x5E\xC3\xF1\x01\x63\xDB\x24\x0B\x1E\x0D\xFA\x5A\xBD\xBC\x5C\xEE\xD0\xAC\x94\xD2\x6D\x06\x6A\xEF\x33\x2C\xC4\x92" + + "\x3B\x5D\x60\x7D\xBC\x6A\x74\xA4\x12\xA0\x1F\x2A\xE0\x10\x48\x79\x5C\x47\x5C\x33\xB3\x51\x4A\xA8\x36\xE0\xC5\x28\x91\x59\x7F\x22" + + "\xCF\x71\xE5\x11\x95\xD1\x24\xA1\x81\x58\x1D\x0E\xF3\xBF\x5E\x52\x48\x9A\x36\x79\x2A\xD5\x9A\x52\x09\x89\x64\x81\x22\x60\xBA\xD6" + + "\x89\x8D\xAC\x69\xB7\xFC\xC6\x34\xCE\x7C\x0F\x3E\x5F\x40\xF4\xE4\x68\xE4\x74\xF8\x9F\x5B\x09\xFF\x00\xB9\x8E\x2F\xC0\x15\x21\xE2" + + "\x6F\x8A\x29\x3E\xB6\xAE\x62\x3B\x00\x30\x23\xC7\xA5\x55\x31\xE8\x6E\x0F\x19\x1D\xCF\x3E\xFC\xDB\xBF\x37\xC8\x09\xB3\x9F\xFB\xCA" + + "\xF7\x05\x83\x7E\x57\xFE\xBB\x41\x07\x8B\xF5\xF6\xB9\x86\x5F\x99\xCD\x4C\x74\xB0\xC8\x47\x6C\x95\xDD\xEC\xFC\x9A\x1A\x05\x91\xEA" + + "\x47\x19\xFB\xF0\x43\xB8\xFB\xF2\xBA\x3B\x71\x56\xDD\x18\x67\x31\xBD\x48\xAA\xA3\x21\x08\xDF\x1B\xAA\x32\xE8\xAF\x63\xAF\xC0\x91" + + "\xA1\x1B\x6D\x05\x95\xCE\x8F\xD8\x23\xB4\xA9\x14\xAF\x2B\x20\xAD\x05\x2B\x30\x91\xFE\xAB\x8B\x2D\x1B\xC6\x57\xB8\x95\x11\xC7\x0B" + + "\xAB\x38\x20\x2E\x8C\xD1\xB0\x3B\x07\xB3\xB4\xFA\x74\xC7\xE3\x91\x40\x95\x12\xC7\x82\x95\xD6\x48\x41\x9D\x41\xFC\xA3\x66\x95\x25" + + "\x24\x6B\x4A\x7E\x3D\x30\x3F\x44\xF9\xD9\xBC\xBB\x58\x8E\x6F\x83\x6E\x78\xB8\x1C\x7B\x63\xA2\x89\x70\x41\x0D\x63\xFF\x00\x7F\x19" + + "\x19\x23\xDF\xB9\x23\xE8\x3A\x8D\xFE\xF8\x73\xB5\x6C\xFB\x59\xEA\x1D\x6C\xAF\x26\xE4\x9C\x72\x2E\x31\x8E\xAD\x9B\xAB\x6B\x13\xFF" + + "\x00\x51\xC9\x8E\xCF\xD1\xA1\x62\x38\x67\xE2\xFC\x9A\x86\x1A\x26\x93\x29\x50\xC1\x61\xA6\xC5\xC3\x32\xC9\xDB\x6A\xBD\x24\xDA\x35" + + "\x78\x22\xB1\x42\x7E\xD2\xBD\x90\x73\x2F\x77\xB9\xFB\x1C\xBF\xAC\xBC\x53\x98\x70\xEF\x6F\x15\x11\xED\xE2\x78\xCD\xBC\xDC\x7C\x37" + + "\x90\x75\xCB\x22\x26\x55\xAB\x89\xE6\xD7\xEB\xC7\x27\x20\xE2\xBD\x2F\x92\x37\x92\xDE\x4B\x11\xC4\x1A\x3C\xC6\x7E\xB8\x38\xCB\x39" + + "\x09\xA8\xE4\x4D\x9A\x5D\x3E\xD9\x9A\xC5\xBE\xE8\x67\xA3\x5E\x4A\x6E\xA5\x25\xA4\xF1\x23\x4B\xE7\xC1\x32\xCB\x25\xCF\x81\xD1\xCE" + + "\xB4\xAB\x03\x1F\x25\xB4\x4E\xD3\xD7\x88\xA8\xC5\x04\x41\x22\xC2\x69\x53\x62\x3A\xCA\xF5\x19\x15\x54\x90\xA6\x31\x2C\x89\x1A\x82" + + "\x74\x42\xAF\x61\xDE\xF6\xA3\x43\x73\x6B\xAC\x6A\x2D\xE4\x06\x75\x93\xC8\x88\x46\x1A\x48\xCB\xB4\x8A\xB7\x11\x89\x09\xB8\x60\x8A" + + "\x6C\x00\x50\x58\x2A\xEF\x2D\x62\x1A\x33\xFD\x32\x89\x52\x75\xD8\xEB\xF1\x12\xF9\x8C\x23\x97\x6A\xC7\xB8\x29\x70\x8A\xA1\x48\x2E" + + "\x45\xCD\xD8\xAA\x82\x42\xAA\x92\x08\xC0\xF8\x0F\x49\xF8\x9F\x4E\x31\x74\x31\x7C\x7B\x19\x8D\xC6\xC7\x8B\xC6\x51\xC3\xE3\xE8\x60" + + "\x29\x55\xC0\x60\x70\xD8\x4C\x7A\x3A\xE3\xB8\xE7\x18\xC0\x51\xD6\x3F\x8E\x71\x9C\x70\x66\x4A\x38\x9A\x9D\xEC\xCC\xD2\x64\x32\xB6" + + "\xF2\x79\xCB\x99\x2C\xBD\xED\x85\xFB\xFA\xD1\x05\x8E\x6A\xCB\x5A\x47\xFC\x5B\xE5\x51\x24\x8C\x49\x0B\xB8\xDA\x32\xAB\x2B\x77\x0D" + + "\x80\xBA\x20\x0F\xEC\x24\xEF\xD3\xB8\x98\xB8\x5F\x9B\x1D\x30\x51\xDA\x19\x8B\xD3\x92\x28\xD4\x95\x04\x7F\xF3\x89\x08\x00\x79\x41" + + "\x08\x5D\xFD\xEC\xF9\xF4\xE5\x6B\x42\xB1\xB2\xC3\x08\x8A\x0E\xE2\xC9\xF9\x27\x67\x68\x3B\x52\xBE\x0A\xA6\x8A\x9E\xF0\xA1\x76\xE1" + + "\xB7\xBD\x12\x5B\x48\x5A\x69\x1A\x57\x62\xF2\x33\x16\x66\x7F\x98\x93\x81\x8B\xE4\x5A\xC2\xC1\x6C\x00\xE0\x58\x0B\x39\x8D\x12\x24" + + "\x58\xE3\x50\x88\x82\xCA\xAB\x80\xA3\xF6\x3E\xBD\xEF\xCD\xD0\x58\x69\x5C\x8C\x3F\xED\x04\x8A\x58\x85\x69\x6B\xCB\x17\x92\xA0\x86" + + "\xF8\xE5\x55\x63\xA0\x4F\x84\xFE\xE2\x41\x24\x01\xE4\x52\x62\x54\xC8\xC6\xA4\xC2\x18\x41\x25\xA0\x68\x87\xC2\x08\x20\x6C\x77\x46" + + "\x64\x21\x8B\x6D\x4F\x73\x2F\x68\xF0\xA7\xE9\x4D\x3D\x0A\x57\x04\x52\xBC\x0B\x31\x8C\x81\x1B\x77\xC6\xE5\x77\xB0\xCB\x1C\x91\x82" + + "\xEB\xA3\xF6\x7E\x51\xA0\xC0\x83\xB3\xE5\xB3\x56\x9E\x02\x00\x77\x48\x22\x70\x04\x11\x44\x26\x94\x76\xE8\x85\x9A\x59\x0B\x33\x76" + + "\xEC\x01\xDA\xAA\xC7\x5B\x2C\x7C\xEB\xB6\x70\x6D\xCF\x04\x0C\xDB\x1E\xD8\x1E\xDC\x1B\x7A\x75\xDB\xF1\xC8\x19\x02\xCC\x6D\x7C\x8B" + + "\xDB\x39\xB8\xE3\xD4\x81\xDB\xA1\x92\x63\xBB\x4A\xCF\x34\xED\xB1\xFD\xB2\x2D\x50\xD3\x26\xC8\xD3\x06\x8A\x27\xDE\xC0\x24\x03\x0B" + + "\x6C\x8F\xC8\x13\xDD\xEB\xE2\x56\xAD\x23\x0D\x58\x46\x70\x59\xBB\x64\x94\x09\x18\x1D\x80\xDD\x82\x40\x23\x1B\xD9\x65\x11\x82\x4F" + + "\x6A\x7D\x6D\x49\x28\x22\x92\x46\x75\x9D\x88\x89\xB4\xAA\xC7\xB0\x0E\xC6\xF0\x7B\x83\xCA\x64\x0C\x4E\xC1\x60\x02\xEF\xB4\x6C\x0D" + + "\xE9\x2B\x94\x2A\x48\x5F\xF7\x54\x4D\x90\xA4\x85\x75\xA9\x1D\x86\x46\xDF\xD8\x07\xB1\x88\x5E\xD0\x7C\x6B\xE8\x00\x09\xDF\x6F\x6C" + + "\xE2\xE0\xF3\xFD\x2D\xEB\xC7\x61\x7F\xFC\xF4\x9B\x48\x3B\x31\x27\x1F\x85\x41\x19\xE3\xFC\x73\xEB\xDF\x88\x7B\xEF\x4E\xBF\x47\x65" + + "\xF6\xF5\xCC\x31\xDE\xE2\xF3\xEF\xC7\x7A\x61\x91\xB3\x84\xAF\x77\x2B\x5B\x15\x2E\x6F\x23\x16\x52\x96\x52\xB6\x6F\x0F\x1D\x2C\x44" + + "\xF8\x8E\x4D\x5A\xFD\x86\xB7\x8A\x8D\x9D\x2D\xE3\x64\xA8\x2A\xA5\x96\xB4\x2B\x41\x1B\xCF\x1F\x20\xD9\x6F\x76\x7C\xDB\xA6\xDC\xBF" + + "\x9C\xDE\xF6\xFF\x00\xD4\x2C\xAE\x27\xA3\x1C\x73\xA8\x59\x0E\x4D\xD3\x51\x7B\x81\xF4\xFF\x00\x0F\xC8\x6D\xE5\xB2\x38\xEE\x2B\x89" + + "\xC8\xE7\x15\x20\xE3\x2F\x63\x08\x33\xC9\xC5\x38\xCC\xD7\x30\x14\x25\xAB\x85\xB3\x36\x3F\x1F\x76\xFE\x25\x2E\xE3\x8A\xA7\x5A\x9F" + + "\xA8\x1E\x47\xA1\x78\xDF\x6E\x99\x7A\x5D\x71\x5E\x67\x4B\x87\x67\xB2\xB5\x31\x98\xF9\x38\x87\x1B\xC1\x72\x1E\x44\xB9\x94\xC6\xE5" + + "\x6D\xC6\x98\xCC\x5F\x28\x49\xF0\x95\xA7\xFE\x95\x57\x2A\x86\xE5\xE5\xA8\x2A\xA9\xEE\xA1\x7A\xAD\xF6\xAB\x24\x7C\x53\x75\x0A\x9F" + + "\x1A\xC8\x52\xCD\xDF\xE9\xC5\x5C\xBA\x70\xAA\x7C\xBA\xF5\xCE\x3D\x17\x28\x86\x8B\x67\x25\xC0\x8B\x13\xC9\x8A\xFE\xBD\x0D\x09\x66" + + "\xC7\x2E\x42\x6A\x93\x53\x93\x25\x5E\x94\x92\xD2\x86\x57\x9A\x28\x5E\x4A\xF0\x07\xF5\xEB\xBF\xFD\x37\xE9\xEA\x94\x3A\xBD\x74\xD4" + + "\xBA\xF4\xF1\x8A\x6D\x5A\xAE\x18\x6B\x1E\x39\x3C\x25\xA8\x54\xD0\x25\x00\xA6\x14\xF4\x2D\xFF\x00\xE4\xEA\xB4\x4E\xF2\xCD\x59\x24" + + "\x8B\x24\x7F\x0E\x29\xE2\x05\x0F\x98\x1F\xCF\xDF\xC5\xDA\xBD\xF5\xDA\x7D\x37\x9D\xA5\xC7\xBE\xA3\x4C\xA4\x9A\x6A\x74\x64\xD7\xA8" + + "\xA9\xEB\x64\xAA\xF8\x83\x35\x4E\xE3\xE4\x51\xD5\x24\x71\xC3\x4C\x10\xAB\x79\x8D\x33\xB6\xED\xC9\xB6\xEF\xFA\x03\xD6\xEF\x75\xFD" + + "\x2F\xE8\xE7\x1E\xEB\x77\x56\x39\x3D\x0C\x68\xE9\x1F\x17\xCC\xF3\x9A\x5C\x53\x3F\x90\xCA\xF1\xB8\xAF\x61\xAE\x71\x2E\x1F\x8C\xE3" + + "\xD9\x0E\x65\x22\xE7\x5A\x7E\x43\xC9\xB8\xE7\x09\xE9\xE7\x10\xC1\x70\xAE\x2D\x4F\x13\x8C\xC0\x53\xB7\x4E\x1B\x1C\x97\x19\x92\xE4" + + "\xD7\xB3\xF9\xC8\x63\xFF\x00\x51\xF9\xCF\x5A\xE4\xE0\xF4\x3A\xD3\xD3\x3E\xB3\xF5\x4B\x23\x80\xC2\xF1\xEC\x44\x03\x0B\x1F\x54\x39" + + "\xED\xCA\x75\xB0\x38\x2C\x46\x63\x0F\x3C\x5C\x6B\x2F\x62\xEA\xE5\xB0\xF9\x1C\x25\x3E\x43\x95\x8E\x21\x06\x49\xE4\xAD\x1E\x4F\x35" + + "\x4E\xD5\x7C\xA6\x32\xFE\x56\x0B\xDD\x1C\xF0\x0E\x94\x7B\x53\xF7\x4B\xD3\x3B\xFC\xF7\x91\x60\x6C\x75\x5B\xDB\xE7\x5C\x30\x35\x03" + + "\xE1\xB0\xF5\xDB\x1D\xC8\xBA\x79\x92\xCF\x66\xE8\x67\xA0\x61\x90\xAA\xF9\x5A\xDC\x6B\x3F\xC4\x27\xC8\x1C\x4D\x6C\x6D\xCC\x60\xC3" + + "\x64\x78\xC4\xDD\x92\x57\xBF\x8D\x9D\xAC\x4B\x50\x5E\xEA\x38\x5F\x49\xFF\x00\x4F\xEE\x82\x72\x6E\x95\x41\x15\x0F\xFA\xE3\x91\xE2" + + "\xB9\x07\x1E\xE1\x9C\x7D\xB9\x05\x7C\xDE\x6F\x37\x3F\x33\x47\xA5\x77\x3D\x9C\xB4\xF0\x33\xE4\x38\xFE\x03\x1D\x59\xE7\x3C\x8D\xEB" + + "\x54\xC5\x65\x33\x18\xEB\x18\x8C\x6B\x08\xA5\xC7\x11\x95\xC7\xE3\x3F\x1F\xC9\xE3\x48\x65\x86\xAE\xBA\x1D\x4D\xF5\xD7\x49\x74\x88" + + "\xE3\x5F\x83\x8A\x93\xCE\xDB\xF0\xB2\x53\xAD\x87\x96\xB1\x2B\x05\xA8\x58\xF7\x6D\x69\x65\x69\x63\x0B\x1D\xED\x43\x40\xF0\xB2\xE8" + + "\x32\x45\x25\x25\x2B\x52\xFF\x00\xA7\x29\x5A\x96\x00\x4F\x23\x94\xB9\x90\x4A\x6E\x77\x09\x18\x1D\x9B\xB2\x4A\x80\xAE\x43\x5A\xA0" + + "\x78\xA7\xB8\x7E\x77\x87\xAB\x89\xE1\xF9\xAC\xF6\x53\x97\xF4\x43\x9F\x73\xAE\x17\xCA\xFA\x81\xC1\x2D\x58\xA3\x5B\x2B\xCC\xAF\xF0" + + "\xFA\xFC\x77\x1B\xC7\xB1\xF7\x79\xBC\x74\x2E\xF3\x3C\x4D\x1A\xB8\x0E\x35\x87\xC3\x57\xC6\xE3\x32\xEB\x86\xC5\xA6\x1E\x11\x4A\x80" + + "\x67\x95\xFD\x75\x51\xEC\x4F\xA9\x5D\x37\xEA\x27\x45\xE4\xB1\xD3\xEE\x97\x0E\x91\x50\xC1\xF2\x8C\xAE\x0B\x2B\xC3\xAA\xBD\x8C\xB2" + + "\xD2\xCE\x45\x53\x1B\x79\xEF\x4D\x97\x38\xAC\x5B\xE5\x25\xBD\x46\xFE\x3E\x79\x6E\x58\xA5\xFB\xA2\xE8\x6B\xCB\x24\x8D\x5D\x5D\xB9" + + "\x11\xC7\x51\x83\x0F\x95\xE0\x14\xED\x63\xE3\xCB\xB2\x65\x46\x6A\xE6\x26\x5B\x96\x22\x16\xF1\xE2\x6B\x7F\xB9\xA5\x62\xD6\x2E\x4A" + + "\x96\xA0\x13\x35\xE9\xE9\xC8\xD8\xFB\x30\x4F\x5C\xC7\x33\x2C\xD5\xA4\x85\x8A\x75\x79\xFA\x75\xF3\xFE\x11\xD4\xFE\x92\x66\xE1\xE2" + + "\x7D\x38\xC2\xF4\x95\xF8\xCF\x29\x92\xAE\x53\x0F\xC3\x4C\xA9\x89\xC9\x4D\x7F\x19\x8F\xB1\x57\x31\x25\x8B\x12\xD8\xBD\x3E\x42\xCA" + + "\xC7\x35\x1B\xA2\xFD\x9B\x93\x07\xC6\x44\x92\x4E\x51\x96\x14\xD6\x3F\xF5\x37\xA3\x41\xF0\x54\xDA\xE2\x68\x14\xA9\x55\xE6\x68\xCB" + + "\x5F\xAC\x2E\xAB\xF0\xCF\x43\x5B\x57\x41\x34\xF5\xBA\x4C\x3A\x07\x98\xB1\xD5\x2D\x54\xF2\x47\x5B\x3D\x72\x44\x64\xA3\x74\x10\xB1" + + "\x58\xEA\x6D\xD5\x13\xF8\x1F\xA8\xC8\xB5\xB3\xE9\x6F\xAB\x4C\xF0\x04\xD5\x85\x16\x9E\xDA\x78\x98\x56\x51\x52\xD7\x43\x4F\x43\xA9" + + "\x4B\xAB\x84\x2F\x07\xC3\xC1\x13\xD2\x43\x4A\xEF\xB2\xA5\x49\x75\x5D\xF0\x66\x74\xCD\x5E\x38\xE6\x49\x5E\x7A\x63\xE5\x56\xF2\xF4" + + "\xA7\x13\x96\x3B\x0B\xFE\xBF\x62\xC2\x8B\xA1\xB1\x1B\x23\x90\x7B\x49\x20\x95\x1E\xB1\xDC\xA4\x14\x24\x9A\x19\xDD\xAE\xA3\xC4\xC1" + + "\x3E\x4A\x9F\xBB\xED\x65\xED\x1F\x6B\x47\x6D\xA1\xE3\xB8\x4B\x18\x07\xF9\x42\xA7\xF1\xAF\x4F\x74\x9F\xA8\xAE\x27\xA4\x3C\xA3\x27" + + "\xD2\xBE\x9F\x4F\xC2\xAC\x73\xBC\xAC\xB9\x9E\x35\xC5\xB2\xBC\xB2\x79\x32\x98\xE8\x79\x56\x25\xAE\xD5\xC9\xDA\xBD\x80\xC6\x64\x69" + + "\x64\xA4\xC6\xE1\xB2\xB5\x45\x2C\x81\x8A\x1C\x85\xF9\xE0\x6B\x17\xF1\xB8\x6C\x92\xB5\x40\xDA\x2F\x83\x7B\xCD\xEB\xAF\x15\xEA\x6F" + + "\x0A\xE1\x5D\x4B\x93\x15\xCD\xD7\x33\x83\xA1\x3F\x2A\xFF\x00\xA6\xB0\xF3\x9B\x15\x79\x45\xEE\x3D\x77\x9A\x64\x46\x17\xFA\x4C\x76" + + "\xF1\x12\x71\x8C\x5F\x18\xA3\x91\xC8\xD4\xB5\x8A\x9A\xD4\x76\xB8\xFE\x37\xFA\xD0\x6C\x8D\xA8\x2F\xD1\x7F\x21\x0D\x1E\xA2\x4A\x75" + + "\x98\x3C\x04\xC8\xFB\x52\x0D\xCC\xF3\x86\xFE\x59\x50\xC8\x15\xB6\x07\x32\x28\x47\x62\xB1\xB3\x86\x89\x58\xCB\x1C\x8A\x9E\x8A\x6D" + + "\x5A\x08\x67\xF2\xC8\x9A\xCA\x08\x69\x97\x68\x8D\x46\x6F\x66\xBE\x40\xDA\x43\x00\x0B\x11\x66\xDB\xB5\x94\x9B\x76\x9D\x61\x8A\x30" + + "\xB1\xCB\x7A\xFA\xCC\x07\xFA\x52\xC8\x93\x30\x01\x4B\x02\xED\x75\xE0\x75\x20\x9E\xE2\x8C\xCD\xBD\xE8\x80\xDE\x06\xBD\xBF\xC1\xB8" + + "\x9E\x4A\xF4\xB9\x4B\x9C\x7B\x05\x26\x42\x75\x51\x6A\xC5\xEC\x15\x0B\x17\x1F\x4A\x91\x68\xD8\x00\xF7\xB2\xA7\x6A\x44\xDF\x24\x88" + + "\x00\x1A\xD2\x78\x19\x37\x1F\xE5\xBC\x7F\x96\xE1\x69\xE7\x31\x73\x5A\xFD\xA6\x46\x04\x9A\x28\xDE\xAC\x82\x68\x49\xEE\x59\x60\x91" + + "\x6B\x09\xA3\x36\x6B\xCA\x92\x57\xB2\x95\xE5\x95\x56\x78\x9D\x01\x62\xA7\x4B\x7E\xD2\x24\xEF\x99\x6E\xD8\x4A\xD2\x06\x63\x04\xF0" + + "\x47\x0A\x06\xFE\xDE\xF0\x65\xAC\x93\x23\x1F\xA6\xDC\xAA\x0A\xEB\x40\x9D\x28\x86\x78\xCA\x31\x56\x19\x43\xB4\xAE\x2E\x8C\xA6\xC6" + + "\xE0\xFC\xC0\x83\x82\x39\xF6\x07\xA9\x74\x73\xB6\xE0\xB5\x9A\xC4\x12\x09\x0C\x08\x16\xC8\xC6\x45\xAC\x6C\x0E\x2F\x71\x6E\xB5\xFB" + + "\x70\xCE\x2F\x8F\x0D\xFB\x7C\x3E\x10\x27\x71\xEF\x8E\xD4\x30\xE9\x00\x51\xB6\x88\x3D\x6B\x01\x59\xFF\x00\x21\xF1\x82\xAA\xA4\x6B" + + "\x7E\x77\xE9\x85\xAC\x0E\x0D\xE3\x97\x58\xBA\x90\xC3\x1A\xC8\xC6\xC6\x3C\xD6\x81\x41\xD7\xF6\x9F\x85\x62\x61\xDB\x20\x05\x94\xB3" + + "\x79\x0D\xDD\xFE\xE2\x33\x19\x86\x15\xE7\xF8\x97\xF7\x36\x1D\x88\x67\x51\x15\xEB\x34\xCE\xDB\xB4\x9E\xE4\x8E\x6A\x6A\x41\x2B\xDC" + + "\x0E\x8B\xA7\xD9\x1E\x74\xCB\x25\x8E\x9A\xD2\x34\x50\x5C\x6A\x4A\x55\x48\x68\x50\x82\x3B\x18\x7E\x20\x48\xB2\x23\x03\xE7\xC1\x88" + + "\x80\x47\x9D\xED\x47\xA6\xB2\x2B\x14\x60\xAA\x18\x0B\xFC\x8A\x41\xBE\x2F\x60\x1B\x6A\x8E\xC4\x8B\xE6\xE7\x39\xE9\xEC\x6C\xB8\x26" + + "\xEB\xB8\x82\x4B\xA9\x5F\x4F\x9B\x1E\x9C\x7D\xB8\x3D\x6B\xAA\xDC\x67\x10\xF2\xC7\x6E\xAB\xCE\xCD\x0C\xA0\x89\xA0\xBB\x69\x54\x15" + + "\x2B\xDC\xAC\x90\xC8\xB5\xD8\xAA\x90\x08\x92\x26\x70\x4E\xDF\x7B\xD8\xC9\x69\xA5\x83\xDE\x8D\x2C\xD5\xC4\x7B\x31\x49\x05\x87\xB0" + + "\xCE\xAD\xF6\x25\x85\xAB\xC4\x8D\xB2\x3C\xAB\x06\x3A\x24\x02\xBF\x61\xFF\x00\xED\xED\xD5\x88\x44\x99\x08\xC3\x28\xEE\x9E\xDD\xA8" + + "\xD5\x80\xDE\xBF\x29\x62\x8B\xF6\xAB\xE4\x9D\x92\x1A\x10\x00\x23\x5F\x5B\x1F\x34\x9F\x31\x45\xEC\x37\xE3\x6F\xC8\x5C\xAB\xFB\x7F" + + "\xDB\x2E\xCF\xE4\x0C\x72\x59\x79\x14\x1D\x78\xF8\xCC\xCC\xA3\xB4\x6B\x5A\xF4\xCD\x60\x0A\x2E\x54\x06\x6C\xB6\x2C\x59\xEC\x00\x1F" + + "\x2B\x39\x04\x0C\x5C\x12\x3F\xEF\xC5\xBA\x71\xE6\x31\xEF\xB8\x02\x02\xEE\x3B\xB6\xA8\x37\xC5\xC2\xAD\x8F\xA1\x03\xBE\x05\xFA\x5F" + + "\xFA\x6C\xD3\x24\xCC\x97\x64\x33\x12\xCC\x90\xDA\x11\xAC\x3D\x8C\x01\x93\x46\x2A\xB3\x3C\x7F\xDB\xF8\xA3\x3B\x05\x24\x82\x07\x8F" + + "\x41\xED\x43\x5A\x0D\x26\x42\x7C\x7D\x64\x61\xDA\xBF\x2C\xAA\xE2\x49\x07\x6A\xF6\xA8\x9A\xAC\x68\x00\x27\xCF\x96\xD1\x0C\x7B\x77" + + "\xB2\x49\x86\x95\xA7\x4A\xC9\x65\x22\x5E\xD6\x66\x0B\x34\x2D\x67\xB0\x80\x40\x6A\xB3\xD5\x9B\x6B\xA3\xB0\xDD\xF1\x91\xE3\x43\x5A" + + "\xF4\xB5\xCA\x52\xC7\x06\xE1\x45\x94\x95\xD0\xF9\x14\x14\x6D\x80\x3C\x85\x4D\x2F\xD7\xF1\xFE\x4E\x86\x88\xF4\x0D\x11\x25\xB6\xEE" + + "\x00\x0C\xDD\x98\xAE\x08\x1C\x5E\xF9\xBD\x8E\x7B\x01\xC5\xFA\xE5\x65\x3B\x43\x5B\x9B\xE0\x28\x23\xEE\x06\x3D\x40\xB5\xF9\xBF\x23" + + "\xAC\x5B\xFA\x7C\xA0\x23\xD7\x38\xD5\xAE\x08\x28\x43\xCD\x38\x60\x76\x7C\x14\xAF\x18\x88\x82\x0E\x80\xF9\x01\x3E\x09\x5D\x82\x7E" + + "\xCB\x8F\xF9\x37\xDA\x95\x27\x52\xA4\x48\x27\x6F\x8F\xF0\x24\x78\x40\x2A\xC8\x1F\x7B\x2A\x55\xFB\x17\x5E\x4B\x79\xD9\x78\xF5\xEF" + + "\x7C\x7F\x0B\xD2\x45\x0E\x7B\x9E\x5A\x57\x67\x80\xA1\xF1\xE7\x62\x1A\xEC\x49\xD3\x86\x0B\x29\x03\x4A\x40\x3B\xF4\xC6\x48\x0D\x69" + + "\x15\xAB\xC9\x7E\x39\x10\x16\x75\xAF\x5A\x39\x12\xC3\x1F\x04\x4D\x3D\x88\xCF\xC8\xC4\x1F\xBF\xDC\xAB\xED\xB7\xE4\x90\x42\x61\x5D" + + "\x41\xC1\xB0\x00\x93\xE9\x60\x05\x80\x20\x0F\x6B\xE6\xE0\x01\x93\xD2\xE3\xCB\x38\xF9\x6F\xC8\xB0\x0D\x8B\x0F\xC6\xCA\xE5\x80\xBF" + + "\x6F\xF6\xF2\x6D\xC7\x4C\x19\xF1\xB0\x38\xA6\xD0\x5A\x8D\x4E\xB4\x20\xAF\x62\x3A\xBF\x5B\x2B\xF3\xC4\xA9\x58\x2E\x98\xED\x4B\xF6" + + "\xB6\xF4\x55\x9B\x63\xD7\xE9\xB1\x58\xB3\xB9\xA1\x86\xAC\x0F\xB0\x5A\x48\x61\x44\x91\xC7\x90\x04\xA1\x22\xDB\x77\xEC\xEC\xB9\x62" + + "\x76\x4E\xFC\xEF\xD3\xDB\x97\xE9\xCB\x5C\x89\xA1\xB4\x22\x3F\x8B\xAC\xD8\xDB\x2B\xDA\x4E\xFF\x00\x12\xA9\x5C\xB3\x21\x3B\xFC\xC0" + + "\x78\xC1\x62\x3B\xF7\xE7\xD0\x5F\xE9\x98\xD9\x60\xF9\x21\x8C\x21\x70\x4A\x4A\x81\x9A\x44\x1A\x24\x34\x66\x50\x5E\x33\xA0\x34\xA0" + + "\x28\x1B\xD7\x8F\xAF\x49\x95\x0C\x6D\xB6\x36\x3C\xE7\x0C\x00\xB5\xB2\x01\xE0\xF2\x41\x00\xF0\x07\x3D\x18\x1B\x0C\xB4\xC8\x0D\x81" + + "\x39\x65\x3D\xCE\x3E\x5C\x77\xB7\xCD\xCD\xF3\xDD\x48\x70\x38\xB8\xBF\xD7\xAF\x4A\x92\x0D\x03\x2C\x90\x2F\xC7\x31\xD3\x6C\x92\x8B" + + "\x55\xBB\xFF\x00\xE4\x77\x16\x1F\x7A\xFB\x3E\x95\x68\x29\xBC\x4F\xFB\x48\xEA\xD9\x90\x1F\xCA\x1B\x32\x35\x7D\x2F\xF6\x9E\xE2\xB4" + + "\x2C\x48\x84\x7D\xA7\xFE\xDF\x6C\x00\x21\x80\xF3\xEB\xC5\x0A\x73\x57\x76\xDD\xB7\x92\x20\x1B\xB5\xDF\xE6\x59\x81\x20\x02\xD2\x32" + + "\x4B\x1C\x36\x14\xFD\x85\x96\x02\x74\x3F\x26\x3B\x04\x39\x6B\x10\x40\x0C\x8C\xDF\xBA\x99\x9B\xF3\x96\x9D\x26\x93\xB0\x9D\xF9\x90" + + "\x55\xF9\x7F\xB4\x8F\x20\x9F\x1A\xFE\xD1\xAD\x7A\x47\xCB\x61\xF8\xC0\x4B\xF7\x24\x1B\x60\x1B\xF3\xEF\x61\xC8\x3D\xED\xD0\xB7\x92" + + "\x59\x4A\x86\x62\x36\xF0\x48\xDD\xC7\x38\x24\x5F\x83\x66\x5B\x62\xDE\xBD\x34\x4A\x55\x54\x99\x0C\x7D\xAF\x2A\x83\x20\x8E\x79\x64" + + "\x85\x48\x1A\x0A\x03\xC5\x1A\xF6\xE8\xE9\x48\x84\x31\xD0\x07\xEB\xF1\xF5\x26\x2F\x17\x6D\xE3\x16\x2B\x2B\xC8\xA0\x98\xDD\xE0\xDB" + + "\x86\xED\xFB\x8C\xFC\x1D\xCB\xF9\x00\x49\x01\x3C\x82\x7C\x8D\x9F\x5F\x64\xFD\xFD\x81\xDC\x32\x52\xC5\x14\x8C\x34\xAB\x57\xE3\x92" + + "\x30\x37\xA5\x57\x92\x46\x75\x93\xCE\xCB\x38\x65\xD6\xBF\xD3\x3E\x47\xA6\x72\x54\x8A\x32\x43\x64\x32\xC4\x82\x58\xB3\xDB\x66\x3D" + + "\xC7\xF1\x20\xC6\xBD\x91\xB2\x91\xA1\xF1\xB4\x6D\x17\xD8\x31\xFD\xFA\x3A\xC2\x79\x0A\x48\xBF\x2C\x55\x41\xE0\xDE\xC1\x89\x37\x17" + + "\xE6\xDD\x81\x1D\x28\xB2\xA2\x90\x41\x0A\x70\x06\xDD\xC4\x8E\x06\x49\x55\xFB\x8B\x9F\x42\x7A\x67\x71\xE8\xD2\x99\xA1\x58\x25\x55" + + "\x8F\xCC\x8F\x2C\x56\xE0\x89\x01\x51\xA7\xFD\xC7\xED\x8C\x0F\xAF\x07\xB5\x5F\x7E\x09\xDE\xFC\x00\xD2\x4F\x8F\x9D\xE4\x4A\xB6\x6A" + + "\x4C\x0A\xEE\x58\x55\xCB\x4A\x0E\xD4\x92\x4A\xFE\x3D\xA0\x6B\x41\xE3\x00\xF8\x25\xB7\xEB\x29\xFD\xB4\x72\x45\x1C\x4B\x3C\xCB\x1A" + + "\xFE\x45\x52\x18\xA1\x2C\x76\x09\x66\x35\xBE\x16\x05\xBC\x13\xA2\x10\x8D\x86\x56\x07\x41\x8D\xF8\xBF\x6E\xBD\xDF\xB5\x9E\xC2\x3B" + + "\x76\x28\x81\x61\x8D\xD3\x6A\x48\x77\x32\xD8\x88\xBA\x80\x0E\xCA\xB3\x30\x21\x46\x8F\xA3\x5A\x40\x32\x50\x0E\x76\xD8\xF0\x08\x36" + + "\x01\x49\x1D\xED\x7B\x12\x71\x8E\x8A\xEE\x8D\xB4\x02\xE0\xF0\x40\x6B\x0C\xDB\x27\x70\x03\x39\xB2\xF6\xEE\x49\xB9\x36\x0D\x0D\x59" + + "\x63\x45\x10\xFC\x6D\x22\xAE\xD5\xAC\x57\x12\xC8\xCA\x01\xFC\x48\x8A\x5A\x6A\xA5\xB5\xA0\x7B\x80\x3F\xFD\x40\xF4\x46\x2A\xB4\xAC" + + "\x27\xFE\xE6\x9A\x29\x70\x56\x48\xF4\x9D\xA0\xB7\x8D\xFE\x12\xC8\x34\x54\xB1\xD2\xBB\x78\x3F\xDD\xBE\xED\xB5\x8D\xAC\x88\x3F\xFE" + + "\x2D\xD6\xC3\xB0\x21\xFE\x38\xA4\x2A\x3B\xFF\x00\x22\x3F\xD3\x54\xED\x3B\x6D\x6F\xF3\x45\xD3\x12\x4E\x8F\xA2\x55\x83\xFC\x4C\xB2" + + "\xD9\x69\x0A\xBE\xC3\xBC\x55\xD5\x83\x78\x23\xE3\xF8\x13\xB5\x80\x3B\xFC\x5C\x02\xC0\x2A\x92\x36\x3B\xAC\xEA\xA3\x00\xDA\xE2\xC3" + + "\xB7\x26\xC2\xE3\xBD\xC5\xBF\x2F\xA0\xEA\xB1\xB8\xDB\xF1\x64\x12\x71\x7B\xE6\xDD\xF0\x2D\xCF\xD0\xF1\xCE\x7F\x41\x8B\xA7\x06\xE2" + + "\xAC\xD2\x04\x76\x63\x14\x4D\x12\xCB\x1A\x78\xD3\x69\xCA\x77\xAE\xC2\x85\xD4\x92\xFD\x6F\xB4\x6C\x00\x5E\x26\x36\x12\x14\x77\x76" + + "\xC8\xAD\xFF\x00\xC9\x13\x28\x63\xB6\x3D\xDD\xD1\x4A\xB2\xAA\x21\x00\xFF\x00\x68\x62\x37\xDD\xB5\x3E\xBE\x45\x5A\x49\x23\x1F\x35" + + "\xD6\x98\x92\xEC\x11\x55\x60\x56\x43\xB2\x12\x64\x54\x51\x20\x21\xB4\x15\x81\xF0\x07\x72\xB1\x5E\xE2\xA3\x52\x4F\x9E\x29\xA0\x15" + + "\xA3\x92\x3F\xB6\x68\x90\xC8\xD1\x78\x1F\x12\xCB\xF8\xBC\x4A\xAC\xC4\x96\x60\xC5\x15\x58\x0F\x3E\x7D\x3B\x48\xD4\x28\xB2\xDC\x90" + + "\x06\x4F\x23\x07\xB1\x20\x7B\x5A\xFC\x73\x9E\x80\xB3\x13\x96\x27\xBD\xF3\x9C\x7B\x8B\xFE\x7D\xF9\xF5\xE9\xCC\xB8\x9C\x6D\x80\x52" + + "\xC5\x34\x9E\x32\x09\x75\x97\x52\xA4\x8E\xA4\x83\xB8\xE4\x3D\x9E\x14\x1E\xD2\x23\x3F\xC6\x97\x7E\xBC\xD6\xC7\xE2\x68\x81\x14\x35" + + "\xA4\xA7\x0B\x33\x2F\xFA\x52\x2C\x10\x45\xBE\xE4\x01\x4F\xC8\x02\xB3\x00\x08\xED\x8B\x4C\xC4\xA8\xD1\x00\x07\x50\x2A\x1B\x0B\x31" + + "\xAB\x18\x90\xFC\x81\xE6\x86\x60\xEA\x01\xDA\xEA\x50\x44\x65\xCE\x86\xC8\x54\x76\x53\xB0\xAD\xAD\xE8\xCC\x93\xC1\x07\x60\x9A\x48" + + "\x8E\xF4\x08\x8C\x33\x9F\xC8\x0F\x1B\x00\x15\xF0\xDB\xED\x25\x41\x51\xFD\xC4\x1D\x85\x04\x6A\x38\x50\x2C\x7D\x86\x6D\x63\xE9\x9F" + + "\x5F\xCF\x9E\x8A\x5C\xE1\x49\x6B\x13\xC5\xC9\x17\x1D\xCF\xE7\x60\x7D\xFA\x46\xA6\x2E\x10\x7B\xD6\xCD\x82\x74\xC0\x49\x2B\x87\x0A" + + "\x9D\xDD\xE3\xB9\xDC\xEB\xC1\x41\xBF\x1B\xD8\x04\xFE\x3B\x1E\x9D\x4F\x14\x01\x43\x4B\x79\xE1\xED\x60\xA2\x49\x1E\x20\x14\x69\x88" + + "\x1B\x11\xF6\x8E\xE0\x37\xF9\x10\x40\x3D\xA4\x00\x74\x3F\x35\x5A\xEF\x17\x79\x69\xD4\x82\x0E\xA1\xB5\xFB\x65\x40\xA4\x05\xF1\xF2" + + "\xA4\x44\xEC\xEC\x81\xE5\x83\x02\x01\xF3\xE9\xF2\xCD\x11\x29\x11\x4B\x0C\xC0\xB6\xC9\x8E\x46\x0C\xAA\x34\xFB\x9D\x47\xC4\xA4\x78" + + "\x0C\x0B\x9D\x95\x2A\x0E\xB4\x3D\x2A\xB1\xAA\x81\x8C\x7B\x70\x7F\xCF\x3E\xDD\xB1\xD3\x57\x95\xB7\x61\x8D\xBD\x08\x00\x81\x61\xEA" + + "\x0D\xFD\xAF\xC7\x49\x41\x5E\xAD\x85\x60\x2C\xF7\x68\x8E\xE8\x59\x54\x06\x47\x2D\xE4\x1E\xD5\x2C\x8F\xA0\xC5\xC1\x3B\xD6\xB6\x00" + + "\x20\xFC\x8F\x06\xFD\xDD\xA9\x3C\x15\xA3\x04\x31\x11\x57\xFC\xD8\x0E\xE2\xBE\x14\xA0\x07\xB7\xF1\xD8\x0D\xE0\xEC\x7D\x6C\x90\x96" + + "\xB3\x48\xA8\x12\x76\x84\x80\xE0\x08\x95\x19\x8A\xB0\x5D\x92\x25\x8D\xF6\x57\x4E\x57\x60\x79\xF1\xDA\xCC\x37\xE9\xDA\xE3\xA1\x90" + + "\xAB\x4E\xF3\x3C\xC8\x0E\xA4\x49\x64\xAE\xCE\xE7\xEC\xF6\xD6\x30\xA1\x3A\x2C\x06\xC3\x02\x09\x50\x3D\x39\x48\x06\x09\x00\x8B\x02" + + "\xB9\xC6\x6C\x6F\x70\x6F\x71\xC1\x16\xFA\x1E\xC5\x13\x33\x0E\x1C\xF3\x9C\x5F\xEE\x6F\xE9\x6F\x7E\x84\x1C\x7C\x71\x92\x9F\xBA\xB2" + + "\x1E\x42\x48\x61\x4A\x4E\xC6\x24\x7E\x5F\xEA\xA2\x0D\x15\x3A\x6D\xB9\x1B\x53\xBF\xC7\xCB\x04\x8E\x02\x54\x2E\xDF\xD4\x67\x95\x3B" + + "\x43\x24\x6D\x0D\x6E\xE0\xC0\xB2\xBF\x6C\xCC\x8B\x65\xC1\xD8\x25\x24\x99\x97\x67\xF8\xEE\xED\x19\x32\x46\xAB\x1A\x47\xFD\xAB\xF9" + + "\x69\x89\xEE\x20\x02\x18\x9E\xF6\xDF\xE4\x01\x6D\xE9\xBB\x59\x49\x1F\xDA\x3C\x21\x28\x30\xB4\x92\xCB\x72\x38\xA0\xEE\x20\x44\xC8" + + "\xAA\x41\x00\xFD\x4B\xF8\x05\x5F\x24\xAE\xD5\x83\x6B\x40\x6C\xF8\x5B\xCA\x41\x7B\x8B\xE7\xD4\x8B\x0F\xFF\x00\xB7\x6E\x6F\xE9\xDA" + + "\xFD\x26\x65\x90\x90\x77\x12\x7D\xEC\x73\xEC\x2D\x8F\xDE\x7A\xC7\x22\xC7\xD7\x24\x2D\xD3\x4E\xCA\xA8\x6E\xE2\xB5\xE4\x69\x89\x24" + + "\x9D\xC8\x9F\x3D\x86\x07\x47\x4C\x15\x3F\x9D\xA1\x5D\x68\xFE\x93\x15\x1C\x3F\x9D\x58\xE4\x61\x21\x62\xAA\x26\x96\x08\xD4\x00\xC1" + + "\x35\x14\xAE\x7E\x04\x45\x1B\xD2\x42\x19\xC9\xF2\xA1\xB4\xAC\x5D\x2B\x41\x21\x69\x22\x54\x3D\xE4\x1E\xF4\x0B\xA0\xBD\xCC\x41\x67" + + "\x03\xF2\x56\x52\x76\x7F\x25\xD3\x05\x1D\xAC\x76\x1E\x8A\x50\xC6\xAD\x2B\x07\x0C\xC7\xF2\x45\x91\x91\x0B\x18\xC0\x67\x21\x74\xA7" + + "\x4F\xE0\x68\x03\xF6\x77\xA1\xE8\x82\x1E\xD8\xB5\xF0\x45\xEE\x07\xE7\x6C\x5A\xD6\xB7\x7B\xDF\x1D\x06\xF6\xF5\x3E\xA4\x60\x03\xC7" + + "\xA5\xBB\xDF\xED\x61\xD5\x73\x7E\xA0\x5C\x83\xA5\xDC\x53\xA5\x5C\x6B\x1D\xD5\x8B\x7C\xB2\x8E\x2B\x95\xF3\x8C\x76\x27\x03\x3F\x0B" + + "\xB5\x5F\x1F\x93\xA7\xC8\x4E\x3B\x2D\x61\x26\xCA\xE7\xB2\x1F\x2D\x3A\x18\x49\xA9\x2D\xAA\xD9\x03\x3E\x17\x36\xB2\x19\xE3\xEC\xC6" + + "\xD8\x91\x43\xC7\x49\xFC\x43\xDA\x8C\x1E\xDB\x62\xE7\x7D\x6D\xEA\xE7\x4E\x78\x27\x50\x7A\x01\xCB\xB8\x5E\x55\xED\x60\xA7\xE4\xDC" + + "\x67\x29\xCB\x3A\x75\x9B\xE4\x9C\x8B\x14\xDC\x37\xFA\x3C\x19\xAE\x27\x73\x0B\xCD\xF3\x56\x38\x8E\x46\xB6\x22\x3C\xBE\x07\x0D\x8D" + + "\xC2\x4D\x17\x3B\xC2\x67\xE8\xE5\x71\xF3\xE0\x6A\xE5\x2A\xF4\xDB\xD6\x3E\x86\xF0\x2E\xBF\xF0\xD9\x38\x27\x51\x31\xB9\x3C\x8E\x0A" + + "\x5C\x85\x2C\x94\x71\xD4\xCB\xE5\x30\xB6\xE1\xBF\x41\x98\xD4\x9D\x2E\x63\x6D\xD5\x79\xC4\x52\x37\xCB\xFB\x6B\x4B\x66\x9C\xF2\x2A" + + "\x49\x35\x77\x68\xA3\x29\x5F\xF9\x0F\xD3\x2F\x13\x57\xBF\x0D\x8B\xEB\x9F\x2B\xAB\xC1\xA9\x59\x9F\xFE\x99\xE2\xBC\x8F\xA6\x7D\x0E" + + "\xEA\x0D\xAE\x27\x8F\xB3\x2F\xEE\xA7\xC0\xE0\x79\x1F\x3A\xE9\xFE\x7B\x31\x4B\x08\xD7\x5E\x7B\xAB\x88\x87\xB6\x9C\x76\xED\x5A\xB8" + + "\x2B\xFE\xEE\xED\xDB\x36\xF6\x1F\xE1\xEF\x8F\xF4\x5F\x07\x50\xD4\x53\x56\x41\xAF\x2D\x44\xF2\x87\x6A\xAA\x0A\x8F\x3D\x04\x61\x9A" + + "\xE9\x4B\x47\x35\x7D\x1D\x3D\x1B\xC8\xA4\x2D\x44\xBB\x25\x7A\x85\x00\x33\x04\x41\x1C\x99\xBF\x8C\x7C\x2B\xAA\xF8\x82\xAA\x29\xA9" + + "\x64\xD2\x9A\x9D\x23\x11\xB5\x35\x5C\x3E\x51\x94\x7C\x87\x74\xF5\x31\x53\x4F\x34\xA6\x27\x52\xF4\xE3\x02\x26\x24\x85\xDD\x76\x31" + + "\xD3\xA5\xDE\xDF\x70\xDD\x09\xE4\x3D\x40\xFF\x00\xA2\xAA\x7B\x73\xE1\xFC\x23\x21\xCA\x79\x64\x55\xF1\xFF\x00\xFE\xBA\x5C\xE3\x09" + + "\x37\x4F\xF8\xD5\x3E\x39\xC5\xF1\x99\x28\x71\xB8\x6C\xA7\x1B\xC4\x5A\x9F\x27\xFD\x5F\x8A\x72\xBE\x41\x52\x7A\xD9\x5C\x6C\x96\xF3" + + "\x1D\x41\x5C\x45\x8C\x96\x37\x13\x8B\x82\xDC\x2D\xE9\x66\x3A\x03\x8D\xC4\x73\x7B\x14\x97\xDA\x5F\x17\xC9\x72\xBE\x79\x98\xE9\x75" + + "\x9C\xBF\x2D\xE5\x18\x2B\x11\x72\xCB\x3C\x87\x8C\xF4\x7F\x21\xCC\xEF\xD4\xB1\x06\x5A\x08\x2E\xE0\x71\xBC\x3B\x93\xC2\x39\x5D\xF8" + + "\x79\x26\x53\x23\x7B\x39\x42\x9D\x64\xAB\x56\xF5\xDB\xD0\xDE\xDA\x59\x0F\xD1\x93\xA0\x3C\x8E\xF3\xE5\xF9\x27\x3C\xEA\x65\xB9\x5F" + + "\xB5\x27\x4C\x1E\x17\xA3\x7C\x2F\x1B\x20\x8C\xBB\xF7\x9C\x4F\x19\xE9\x86\x2F\x1D\x1B\x10\xE5\x64\x98\x55\x59\xA4\x0A\x12\x4D\xAA" + + "\x46\xCA\x5B\x17\xFA\x44\x7B\x67\xE3\x0E\xEF\x5B\x29\xD6\x09\xE9\xCA\xC5\xAC\x2D\x2E\x76\x30\x92\x3B\xB7\x7A\x87\x96\xAF\x16\xC1" + + "\x61\x44\x80\x23\x3A\x14\x46\xFE\xC2\x40\x42\xBE\x05\xB1\xBF\x8C\xDE\x1A\x5A\xB4\xA9\x5D\x17\x50\xF3\x00\x8C\x1A\x88\xE9\xA9\xE1" + + "\xA9\x64\x42\xA4\x16\xF3\x35\x6A\xA8\xDA\x43\xB4\x06\x2C\x0A\x5F\xF9\x9B\x59\xF3\xD5\x68\x7F\x0E\xB5\xE7\xA7\x68\x1F\x52\x85\xEE" + + "\x08\x58\x65\xA9\x95\xE9\xC1\x60\x45\xB7\xAD\x0C\x12\x94\x17\xDC\x40\x55\x66\xB0\x8C\x32\xA9\x27\xAA\x91\xF7\x45\xD3\xFE\x95\x67" + + "\xF1\xFC\x9F\xAA\x31\x75\x6B\xDA\xF6\x13\x3B\x82\xC0\x65\xE2\xE2\xBD\x1F\xE8\x8F\x18\xC5\xE2\x68\x72\xA2\xB9\x0C\x3F\x23\x87\x8C" + + "\xD7\xB1\x8A\xBB\x05\xCB\xF3\xE5\x25\xE5\x99\x1C\x29\xCA\xC7\x04\x57\x0E\x1F\x8C\x43\x5E\xF6\x37\x1D\x2B\xCF\x47\x03\x66\xFF\x00" + + "\xA5\xAF\x55\x4F\x55\xFA\x3F\xCC\x71\xB6\x7A\x73\xD3\x9E\x9F\x64\x38\x8F\x21\xA5\x04\xD8\xDE\x98\x71\xFA\xDC\x67\x8D\x5C\xC7\xE5" + + "\x71\x8A\xF5\xBF\x7B\x41\x2C\x64\x3F\xFD\xE0\xAF\x66\x8E\x40\x64\x59\xED\xC4\x45\x49\xA8\x09\x2B\x43\x32\xBB\x4B\xB7\x31\xDF\xA5" + + "\xF7\xB3\xAA\xF9\x18\xB2\xB7\x78\x6F\x2C\xE5\xD6\xA9\xFC\x2D\xF0\xF2\xFE\xA3\x75\x0B\x29\x52\x48\xEB\xC8\xAE\x2A\xDA\xC6\xDD\xCD" + + "\x57\xA5\x62\xBF\x73\x11\x35\x49\xEB\xC9\x56\x45\x79\x22\x9A\x07\x8A\x47\x47\x9A\xFC\x7B\x8B\xE2\x38\xB6\x26\x2C\x3F\x14\xC0\x71" + + "\xDE\x2F\x88\xA8\xED\x0D\x7C\x2E\x1B\x14\x31\x74\xD1\xA3\x6E\xC2\x2A\xD7\xA1\x0D\x14\x3E\x13\xF0\x68\xEA\x14\x91\x59\x59\x0B\x22" + + "\x16\x34\x1F\xE2\x47\xF1\x2B\x4D\xF1\xB5\x25\x2D\x0D\x36\x82\x61\x14\x5B\xFE\x1B\x53\xD4\x65\xA7\x9B\x55\x8B\xCE\x95\x25\xA8\x41" + + "\x35\x24\x10\x79\xA9\x3B\x20\x0D\xF1\x0F\x31\x45\xF9\x52\xD8\x61\x68\xF0\x5F\x82\x75\x1F\x0C\x55\x4F\x59\x36\xAF\xBC\xD4\x2A\xA4" + + "\xF4\x14\x71\xCB\x16\x9E\xE2\x24\x68\xE0\xDB\x0C\xF2\x48\x62\x30\x06\x2C\x0C\x42\x3F\x32\x42\x59\xC8\xB9\x53\xCB\xB7\xBC\x9F\x69" + + "\x78\x6C\x6F\x53\xBA\x85\xD4\x6C\xD7\x4D\x7A\x8D\xD5\x6C\x87\x16\xE7\xB1\x53\xB9\xC3\x38\x3C\xF0\xE4\xAD\xF1\xCE\x0D\x94\xC7\xE6" + + "\x6F\xCB\xC9\x72\xF8\x69\xE9\xBD\xEC\x8E\x37\x9F\x5D\x9B\x8B\x4F\x86\xCA\xE2\xAD\xF1\xFA\xD8\xFB\x38\xEE\x55\x84\x7C\xF4\x79\x6C" + + "\x7D\x36\xB3\xA0\x78\x5F\x49\xF9\xB7\x1E\xE5\xBC\x2B\xAA\x7D\x48\xCE\xC1\x4A\xC6\x53\x89\xDC\xEA\x1F\x1A\xE1\x0D\x88\xBD\xC4\xA3" + + "\xE2\x38\x1C\x9E\x53\x39\x63\x0F\x17\x28\xC4\x5C\xBB\x93\xCA\xD6\xAD\xC4\x71\xD1\xDC\xB9\x8D\xB5\x93\x36\x72\x38\x7C\x24\xF4\x12" + + "\x2B\x93\xE2\xE1\xC2\x56\x1D\x50\x75\x87\xDB\xEF\x0A\xEA\xBC\xF4\xB3\x59\x8B\x5C\xA7\x8A\xF3\x0C\x44\x2B\x16\x23\x9C\xF0\x8C\xAD" + + "\xCC\x3F\x29\xC6\x41\xF3\xC5\x6F\xF6\x90\x4F\x14\x76\xA0\xBB\x49\xAC\xC7\x14\xC9\x43\x25\x4A\xE5\x48\x9D\x9E\x68\xAA\x43\x65\xCC" + + "\xA6\x31\xD2\xFD\x3F\x3A\x35\x96\xE6\x51\x73\x5E\xA7\x73\x4E\xA3\x75\x7E\x6A\x79\x2F\xEA\xF5\xF0\x5C\xEF\x21\x42\xB7\x18\x93\x32" + + "\x25\x69\x57\x25\x7F\x03\x87\xC0\xE0\x93\x2B\x74\x99\x5E\x39\x05\xE1\x2D\x39\xE1\x92\x6A\x8F\x49\xEA\x97\x88\xE5\xED\xA9\xAB\x53" + + "\x94\x6F\x3A\x0A\x85\x8F\xCB\x06\x10\x8B\xE6\x2F\xE1\x66\x33\x17\x12\xC7\xBD\x17\x6B\xA8\x8E\x41\xF3\x6E\x5B\x85\x54\x17\xB8\xE8" + + "\x24\x8E\xA0\x4A\x8C\x92\x44\x5B\x71\x12\xAB\xB9\x46\xB0\x20\x08\xC5\xE3\x96\xCD\x66\x5D\xCE\x9C\x6D\x70\x41\xCE\x6B\xED\x06\x4E" + + "\x4D\x96\xE8\x2F\x0F\xCD\x64\x70\x72\xE2\xE2\xE4\x33\xE7\xB3\xF8\x9A\xB2\x2A\xD2\x6A\x7C\x7B\x31\x9D\xC8\xDF\xC1\x33\xD2\xB7\x6E" + + "\xC5\xD8\x7F\xA8\x62\xA7\xAF\x92\xF8\xD1\xAD\xA2\x0B\x62\x34\xB0\xCA\xAA\xE2\x40\x5D\xA1\x92\xB4\xE6\x38\xAE\x46\xC7\xBB\xBA\x58" + + "\xC2\x57\x9A\x2E\xD6\x20\x11\xDE\x26\x57\x00\xB0\x3F\xDE\xCE\xDD\xC1\x57\x5B\x6D\x36\x75\x21\x10\xD7\x86\xA6\x37\xF6\x70\xD1\xAF" + + "\x0C\x51\x08\x0C\x6D\x10\x8A\x38\xC2\xA2\x46\x89\xD8\x63\xEE\x0A\x13\xB6\x32\x81\x47\xFF\x00\x10\x00\xE8\x7A\xC7\xAD\x57\xB1\x04" + + "\xAC\xCD\x25\x52\x1C\x6F\xE3\xFC\xE3\x77\x7E\xD3\xB0\x64\xDF\x60\x05\x98\x8E\xE5\x8D\x0A\xAF\xE4\x55\xF6\x58\xC1\x4E\xEF\x53\x2C" + + "\xD3\x4B\xF8\xA6\x91\xA5\x60\x9F\x20\x05\xDB\x79\xB0\x4B\x05\x04\x9C\x01\x85\x18\x07\xA9\xF8\x88\x89\x23\x55\x0A\x36\x22\xA8\xDC" + + "\x0B\x1F\x94\x00\x2F\x71\xF8\x80\x1C\x80\xBE\xF9\xE3\x14\x9E\x9D\x9A\x71\x29\xAD\x49\x9E\x59\x00\x05\xA9\xAD\x54\x3B\x1A\x1B\x78" + + "\xE6\x96\xB8\x65\xD8\x3D\xC3\xB8\x92\x4A\xEF\x6C\x3B\x7D\x32\x8E\x96\x51\x06\xEC\xC9\x0C\xC8\x7F\x21\xB8\x44\x2D\x1A\xF7\x0F\xC7" + + "\xFD\x3B\x12\xAB\x32\xE8\x2E\xD3\xB4\x10\x3C\xAE\x9F\x7E\xB2\x78\x56\xDC\x8F\x21\x9F\x1E\x91\xAF\x66\xA3\x9A\x3B\x06\x45\x61\xDC" + + "\x74\x41\x68\xD1\xF6\x3C\x93\xB0\xA8\x47\x8D\x91\xAE\xE1\x56\xE9\xB4\xA4\xA3\xCD\x6C\xC6\x08\x0A\x2B\xCD\xF0\x85\x03\x40\xB7\x7C" + + "\x2B\x1C\x8E\x00\xFB\x57\x66\x07\xC9\x1D\xA7\x5A\x43\x62\xF3\x76\xC5\x80\x17\xDA\x07\x1D\xB1\x7F\xBD\xFD\x87\x4B\x09\x4F\x07\x68" + + "\xEE\x5A\xDB\x98\xFA\x58\xDC\xD8\x8F\x6B\x7B\xE4\x74\x19\xE9\xC2\xED\x23\xA7\xED\x9E\x6F\x01\x8F\x72\x77\x8F\x24\xFE\x44\xFE\x7D" + + "\xC4\x1E\xD0\x76\x34\x0E\xF4\x40\xF4\xCA\xCE\x3A\x67\x53\xBD\xC4\x18\x6F\x51\xC9\xD9\xA0\xCA\x43\x2B\x76\x90\x48\xDF\xD0\x20\x82" + + "\xBF\xE3\xE8\x1A\x78\xE2\x73\xFB\x18\xEE\x5B\x86\x75\x1D\xFB\x31\x87\x32\x80\x0E\xCB\x49\x25\x59\x63\x61\xA0\xC1\x74\x4B\x6C\xF9" + + "\x62\x7C\xFA\x19\x3D\x26\x85\xDD\x8D\xBB\xB2\xA9\xEE\xD4\x0E\x5A\x74\x63\xA0\x0A\xC5\x1B\xAF\xFA\x60\x10\x7F\xB5\x95\x46\xC1\x1A" + + "\x5D\xEC\x8C\xB6\xC1\x00\xFB\xDC\x60\xF7\xF5\x37\xFC\xBD\x6F\xD1\xD6\x43\x7B\xEF\x20\xE6\xDC\x92\x6D\x6B\x73\x8B\x5B\xEB\xC7\x42" + + "\x7F\x64\x68\xC7\xDC\x63\xB1\x28\x5F\x3F\xDE\xF3\xC9\xA3\xE4\x32\xA1\x76\xD8\xD9\xED\x6E\xDD\xA8\xD8\x3A\x00\xFE\x29\x47\x4F\x1C" + + "\xD3\x99\x3F\x6D\x1D\x5B\x4E\xBF\x94\x93\x22\x57\x63\xB0\x4B\x28\x3D\xCA\xF2\x68\x68\x90\xCB\xDC\x46\xFF\x00\xCF\x97\xE2\x1B\x13" + + "\x86\x11\xBC\xF1\x22\x6F\x71\x58\x8B\xCE\xB6\x37\xD8\xC8\xEA\x76\x09\x0A\xA7\xBD\x82\xF8\xF0\x08\x0A\x7C\x8A\xF5\xC0\x31\x7C\xC9" + + "\x34\x9B\x05\xE2\x9A\x5F\x96\x54\x03\xF1\xD0\x47\x67\x91\x17\x63\xC1\x1A\x00\x10\x07\x8F\x2A\x42\x8A\x40\xC2\x95\xC1\x00\xA8\x39" + + "\xB8\x37\xCE\x6F\x80\x07\xBD\xB9\xB5\xBA\x72\xB3\x11\xF8\x9A\xE4\xE0\xED\xBD\xFB\x5C\x37\x00\xFB\xDA\xE0\xF6\xE8\x53\x55\x8B\xE6" + + "\xFC\x65\x51\x65\x97\xF1\x52\x58\x92\x9B\x24\xE9\xB6\x11\x97\x43\x7B\x0E\xC3\x40\x7F\x81\xE9\x93\xD0\xB4\x3B\xFE\x39\x67\x40\xC4" + + "\xEC\xFE\xE1\x66\x03\x44\x8F\xC2\x39\x9A\x45\x41\xA2\x7C\x28\xF2\x09\x27\x7E\x49\x3F\x62\xA3\xB4\x2A\x60\x90\xA7\x6F\x69\x63\xE0" + + "\x80\x49\x1A\x0D\xDE\xAD\xB5\x3E\x7F\xB4\x03\xB5\x3A\x3F\x47\xD0\xA7\xA3\x6A\x54\xD5\xA9\x08\x3B\x63\x1B\xD2\x7B\x30\x78\x1F\xC9" + + "\x3F\x37\x93\xA2\x36\xAC\x19\x3B\xBE\x89\x1E\x3D\x03\x22\x9C\x6D\x1D\xC8\xB0\xDA\x07\x1C\x91\x73\x73\x6E\x6D\x9F\x4E\x3A\x15\x96" + + "\xE4\x7C\xEB\x62\x2C\x77\x0C\x8E\x3B\x71\x6C\x12\x00\x37\xF4\xB9\xE8\x21\x92\xE9\x90\xD7\x92\x94\xEC\xA0\x90\x2D\x39\xAA\x23\x6F" + + "\x3B\x24\x98\xA7\x59\x41\x3F\x60\xB4\x0A\x3E\xF6\x3C\xEC\x8B\xBB\x47\x21\x13\x89\xA3\x73\xB6\xF2\x63\x33\xB1\x8D\xD4\x8D\xE8\x21" + + "\x0F\xDA\xC7\xF8\x20\xA9\x3E\x4B\x6C\x6B\xD6\x4B\x20\x8A\xB9\x09\x2C\xC8\xAC\xEC\xAB\x1F\xEE\x65\xDB\xC8\x4E\xC6\x97\xBC\xAF\x7B" + + "\x79\xD1\x2B\xDC\x49\xFA\x07\xD3\x59\x9E\x1A\x71\x96\x9C\x18\xE2\xDF\xD2\x09\x5D\x7B\x9F\x7F\x91\x58\xC3\xF6\x9F\x1F\xDF\xB0\x4F" + + "\x9D\x9D\xFA\x48\xC0\xA7\x25\x8E\x33\x92\x3E\x5E\x2C\x38\x1D\xAE\x2E\x4F\xD3\x93\xD2\xE1\xEC\x46\xD0\xBE\x9E\xBB\xBD\x7B\xFE\x82" + + "\xC0\x7D\x7A\xC3\xDA\xC5\xB9\x35\xA8\x6F\x56\x90\xFE\x3D\xA6\xBB\x4B\x17\xD0\x1B\x63\x1B\xC9\x18\xDF\xD7\xE6\x54\x76\xEC\xF9\xF0" + + "\x7D\x3C\x31\xE4\x05\x71\x1C\x25\x3F\x72\x54\x11\x66\x5A\xEA\x61\x2C\x48\x01\x64\x8E\x3B\x11\x4B\xDD\xE0\x8F\xC4\x22\x91\xBD\x1D" + + "\x8D\x7A\x2A\xFD\x92\xB1\xF8\xD7\xBC\x14\xEF\x5E\xD0\xC1\x98\x7F\x05\x43\x6F\xBB\xC7\xF0\x3C\x6F\x40\xEB\xEC\x0E\x16\x16\xCB\x49" + + "\x5D\x21\xC8\x43\x24\x6C\x41\x76\xAD\x6A\x01\xB1\xDB\xF9\xC5\x3B\xC7\xF0\x38\x27\xE8\x06\x7F\x3B\xD6\xC6\xF4\x83\x41\xB7\x6D\xDF" + + "\x71\x38\x02\xF6\xE4\x2F\xCA\x2D\xC9\xC0\x37\x16\x3C\x91\x61\xD2\x9E\x61\x3F\x85\x40\x03\x27\x17\x03\x8E\x4D\xAE\x45\xC7\x0D\x71" + + "\xD7\x88\xE1\xBE\x10\x8B\x6E\x92\x48\x55\x8B\x7E\xDD\x64\x48\x58\x8F\x27\xB7\xE4\xEF\x0B\xB0\x41\xEC\x32\x6F\x5E\x7F\x8D\x91\x93" + + "\xDE\xA9\x18\x2F\x2C\x86\xA2\x21\xEC\x79\x2E\x24\x90\x27\x91\xE0\x09\x59\x3E\x32\xA7\xF1\xF2\x09\x1F\x60\x90\x34\x09\xE8\xE5\x48" + + "\x8F\xC0\xE6\x69\x24\x55\x2D\xDD\x20\x2B\xB1\xAD\x92\x65\x28\x23\x24\xEB\x5A\x57\x5D\xEB\xCE\xBE\xBD\x0D\xB3\x34\xF1\xCC\x88\xB8" + + "\x7B\x36\x22\x72\x7B\xAC\xC7\x25\x37\x58\x89\xF1\xDE\xD1\xC9\x6D\x66\x64\xF2\x7C\x45\x14\xAD\xA0\x76\x9A\x03\x64\xF2\xF0\x2D\x71" + + "\xC8\xB9\x46\x90\xDC\xDA\xD7\x0B\x9B\x0E\xF9\x02\xDD\xC7\x7E\x57\xDC\xC4\x32\xA9\xBE\x6C\x08\x8F\x17\xCE\xDD\xD8\xC8\x38\x16\xFB" + + "\x74\x24\x59\xB4\xE8\x24\xAF\x5E\xA5\x98\x58\xEE\x19\x60\xC9\x21\x59\x37\xF4\x7C\xC0\x88\x06\xFF\x00\xFA\xC9\x20\x1B\xDF\x9F\xA6" + + "\xF1\x32\xE5\x6C\xA1\x49\x56\x95\x0E\xE0\xDB\x95\x2C\xFE\xEA\x46\x00\x7E\x21\x8A\x43\x55\xD0\x93\xE7\xBE\x39\x1F\xB4\xF8\x5D\x9D" + + "\x31\x2A\xEA\xCB\xDA\x52\xB9\x55\x27\xF2\x8C\x46\xBB\x27\xC9\x56\x2C\x58\x15\x3A\x1E\x36\x0F\xD9\x04\xEB\xC7\xA4\xE6\xB3\x5E\x28" + + "\x9D\xE6\x82\x45\x0B\xE3\x49\x13\xC8\xE0\x13\xE1\x95\x23\x0E\xE4\x0D\x1F\xED\x5D\x03\xF4\xA0\xEF\xD2\x6D\x0D\x80\x26\x46\x00\x73" + + "\xC2\x8B\x7C\xBD\xC2\x82\x01\xE7\x0C\x31\xE8\x3A\x1F\x3B\xB2\xC6\x99\xC0\x2C\x19\x9B\xDB\xFD\xDB\x6F\xF4\x5C\xE7\x16\xC0\x9F\x71" + + "\xD2\xF8\x60\xFC\x23\xFD\xC4\xEA\xC0\xEA\x4B\x0F\x00\x2A\xE0\xA8\x1B\x85\x65\x51\xE4\x91\xF8\x46\x54\xEB\xF2\xD6\xC1\x0E\x53\x13" + + "\x8F\x9E\x58\xAD\x4D\x0C\x66\xE2\x02\x56\x45\x3F\x2C\x91\x3E\x8E\xD0\x33\xC6\xAC\x13\xEC\x81\xA5\x27\x40\x10\x08\x5D\x27\x15\xC9" + + "\x24\x42\x67\xAA\xD4\xD1\x7C\x11\x33\x42\xC5\x8E\x89\xEF\x0D\x1C\xB2\x26\x86\x98\xFF\x00\x72\xB6\xBC\x90\x3C\x82\xF9\x31\xF5\xAC" + + "\x18\xDE\x58\x20\x98\x06\x57\x42\xF1\xAC\xBD\xA0\x0F\xC4\xC7\xDC\x0A\x87\xD3\x12\xAE\x88\x0E\x89\xFC\xF6\x74\x2D\x21\x14\x8B\xEC" + + "\x52\x3E\x5C\x1C\x5B\xD4\x9E\x4D\xC5\xF8\xE0\xDA\xF8\xC1\xEA\x04\x1B\x77\x23\x9C\x8F\x7F\xB8\x16\xE9\xEC\x74\xED\x95\x78\xE4\xD1" + + "\x84\xEB\x4F\xF2\xBE\xC8\x0B\xB3\xDD\x18\x8F\x5E\x5B\xB8\xAF\x6C\x84\x00\xBD\xA7\xEF\x5E\x97\x3C\x7D\x6D\x15\x06\xCD\xD4\x3E\x74" + + "\x56\x47\x82\x40\xDE\x3C\x19\xA3\x09\x21\x45\x04\x02\xA1\x8A\xB1\x25\x58\x78\xF5\xFB\xF6\xF2\x48\x89\xA9\x1A\x38\x80\x52\xCA\x9F" + + "\x10\x62\x36\x7B\x90\xFC\xD1\x4C\x0A\x01\xDA\x9B\x55\x56\x1B\x52\x0A\xEB\xC9\x4A\xC9\x14\x71\xFC\x50\xC4\xC9\xD8\xA5\x89\x0C\xC0" + + "\x06\x6D\x12\x1B\xC9\xEC\x6E\xE3\xA1\xA6\xD7\xD1\xED\x3A\xF2\xBA\x28\xBD\xBB\x01\x81\xF4\xB6\x3F\xCD\xEF\xDF\xEC\x04\x90\x0D\x88" + + "\x06\xC4\x0C\x77\xED\xDF\xF3\xF5\x3E\x9D\x23\x1E\x1E\x55\x65\x89\xAC\xC8\xF1\xA0\xFC\x9B\xF6\xF2\x19\xBB\x80\x3D\xBB\xB1\x1C\x8A" + + "\xBA\x5F\x2C\x0B\xA1\x24\x8D\x06\xD9\x0C\xA4\xA9\xE2\x66\x85\x42\xA4\xD6\xEC\xB3\x1D\xF6\xDC\x75\x28\xBD\xCC\x41\x2B\x2A\xC2\xD2" + + "\xF6\x85\x3E\x7C\xC9\xAE\xD0\x37\xEB\xDC\x53\x39\xEF\x8A\xB4\x84\xD8\x50\x59\xD6\x70\xEC\x3B\x23\x03\xCB\xC6\x8E\x84\xFD\xB0\x21" + + "\x89\xD1\x04\x90\x7E\xFD\x28\x96\x15\x0C\x73\x4E\x24\xF9\x51\x94\x39\x89\x5E\x54\x41\xF9\x15\x26\x38\x5E\x67\x8D\x4F\x6B\x6C\x36" + + "\x9B\x63\x5D\xE1\x7D\x38\x50\x01\x00\x82\x47\xA0\x3F\x6F\x7F\xE9\x9F\xA9\xBF\x4D\xDD\xA5\x17\xB1\x51\x6B\x60\x58\x9E\x05\xCD\xB0" + + "\xD6\xCF\xB1\x17\xFB\xF4\xF9\x28\x59\x93\x42\x58\xA2\x4F\x88\x10\x51\x59\xA5\x88\x92\x00\xD8\x04\x44\x07\x90\x7B\xB6\x87\x64\xFE" + + "\x1D\xA7\xB5\x91\x09\x71\x99\x33\x2C\x12\xD3\x9A\x94\x29\x18\x25\x9A\x6A\xF2\x93\x32\x16\x62\xF1\x2B\x43\x60\x46\x01\xDE\xC3\x34" + + "\x67\xE2\x61\xBD\x91\xB8\xDC\xC5\x5B\x51\xCE\x15\xD2\x49\x51\x58\x10\x4C\xB1\xB2\x91\xBF\x21\x99\x59\x3E\x45\xF0\x01\x05\x8E\xD7" + + "\x60\x76\x83\xE7\xD3\xE6\x91\x4B\xB7\x6C\xDD\xAC\x01\x40\x5F\x7F\x20\x1D\xDF\x43\x41\x47\x79\x56\x53\xFE\xDE\xF2\x03\x68\x8F\x4E" + + "\x84\x4B\x6E\x5B\x24\x1B\xDE\xC7\x19\x19\x00\x1B\x5F\xF7\x92\x3A\x6A\xD2\xC8\x4D\xDB\x69\xEC\x3E\x5C\x7B\xDA\xFF\x00\xBF\x4E\x85" + + "\xD4\xA5\x91\x0C\x65\xB9\x62\x39\x50\x9F\x11\xC7\x09\x8C\xA1\x55\x3E\x62\x93\xB8\x82\x18\x6D\x8E\xFC\x80\xC4\xB1\x3A\xF4\x42\x3A" + + "\xF6\x4A\xB7\x62\x21\x20\x76\xC2\x8B\x3B\x85\x91\x50\xB7\x6F\x78\x11\xB0\x4D\x68\x9F\xED\x70\x49\x1A\x71\xE0\x7A\x73\x5B\x1D\x14" + + "\xAC\xF6\x22\x96\x5F\x93\x5A\x68\x9A\xC4\xCE\x19\x0B\x6D\x42\x57\x77\xF8\x86\xC0\xF0\xC8\xA0\xFD\x06\x23\xE8\x3B\x15\xE7\x8B\x62" + + "\x6B\x08\xFA\x3B\x40\x23\x11\x95\x05\x86\x87\x72\x1D\x30\x1B\x0A\xA1\x94\x16\xD1\x1B\x3E\x47\xA5\x82\x35\xB8\x3F\x73\xFE\x7F\xB6" + + "\x3A\x4D\x9B\x71\xB9\x03\xEC\x2D\xE9\x8C\x1F\x6F\xDF\x60\xB1\xC9\x91\xEE\x2B\x3E\x2F\xC8\x60\x41\x82\xDC\x73\xC6\x75\xAE\xDF\x90" + + "\xCA\x2B\x38\xFE\xEF\x20\x44\xFE\x41\xF0\x7F\xB8\xBE\x15\x6E\x4C\x0C\x92\xD6\x10\xA9\x46\x50\x82\x65\x75\x52\x74\x57\x7D\xC0\xB8" + + "\xD0\x07\x64\x23\x7E\x47\x5F\x96\xBD\x17\x89\x64\x89\x5D\xDF\xB5\x00\x27\x44\x2B\x10\x75\xAD\x6F\x47\x47\x64\x0D\xFE\x41\x4E\xC7" + + "\x9F\xF1\xE4\x57\xB9\x65\xBE\x48\x27\x66\x04\x80\x95\xFE\x38\xDE\x35\xFB\x24\xB8\x50\xB2\xAB\x15\x4D\x82\x65\x60\x48\x27\x41\x34" + + "\x50\xEB\x1D\xED\xC9\x26\xD8\xB7\xE8\x47\x7F\x4E\x88\x5D\x41\x20\xD9\x6D\x6C\x9B\x81\xF6\x37\x22\xFC\x7D\x2F\x7E\x33\xD0\x3B\x18" + + "\xF0\x55\x5A\x02\x2B\x4A\x88\x44\xAC\x3B\x24\x91\x5C\xFF\x00\x6A\x2F\x74\x43\xB9\x14\x68\xFE\x31\x0D\x00\x75\xE7\x4C\x51\x5C\x6E" + + "\x4A\x4A\xF1\xAC\xB9\x29\x95\xC6\xC2\x4A\xAB\x04\x32\x30\xDF\x70\xF9\x11\xE1\x64\x62\x58\x15\x27\xB4\x03\x1F\x70\xFC\x4F\x93\x93" + + "\xB5\x67\x25\x9E\x41\xDA\xEA\xAA\x02\x8F\xC9\x4E\xB6\x36\x55\x47\x72\x1D\x03\xDA\x19\xBC\x1E\xD3\xF6\x00\xF4\x94\x90\x48\xEA\x8E" + + "\x81\x14\x76\xB9\x0E\x4B\x95\xD1\x6E\xC2\xA0\xB7\x8D\xAA\xA9\x2D\xBD\x1D\x13\xB0\x57\xCA\x9B\xCB\x00\xF0\x40\xB0\xC0\xC0\x03\x1C" + + "\xFE\x5F\x6F\xAF\x45\xF3\x57\x80\xC3\x9E\x70\x7B\x03\xF5\xB6\x6D\xE9\x7B\xDF\x8E\x85\x24\x12\x28\x2A\xE1\xA6\xF2\x42\x4A\x7E\x29" + + "\x3B\xFB\x77\xA2\xBD\xA2\x35\x52\x48\x6D\xE9\x22\xFF\x00\x71\x0A\x76\x01\x08\x22\xBD\x15\x9F\xF5\x0C\x42\x12\x24\x66\xEE\x8D\x9E" + + "\x5F\x2D\xA7\x0A\x5E\x66\x50\x74\xDD\xDA\x89\x54\x84\x04\x2A\x02\xCA\xC9\x92\x34\x0A\xCB\xD8\x86\x42\xE9\xB2\xB2\x47\x62\x48\xC3" + + "\x14\x3B\xEE\x90\x46\xCA\x0A\x7F\x6F\x72\x90\xDD\xCA\x06\xD8\xFE\x5B\x15\x91\x11\xCE\xF0\x54\x79\x6C\xC3\x64\x42\xF3\x06\x5E\xE0" + + "\xF2\x08\x0C\x2B\xDD\xF2\x22\x85\x66\x26\x51\xB5\xD1\xEE\xEE\x27\xB0\xEC\xEC\xAC\x82\xD7\xBE\x47\xD3\x39\xE3\x8F\xFC\xE0\x58\xF1" + + "\xD1\x16\x46\x63\x6B\x5C\x7F\xF1\x20\xDB\xD7\x93\x8E\x47\xD6\xDD\x02\x96\x78\xEE\xC1\x2D\x58\xD4\xFC\x60\x32\xB4\x76\x6A\xBC\x69" + + "\x27\xE2\x0F\xE0\xB6\x63\x55\x91\x46\x83\x29\x0A\x53\x43\xB8\x12\x34\x7D\x33\xB7\x5D\xAB\x44\xA8\x21\x55\x05\x7C\x21\x02\x20\xBF" + + "\x8B\x2E\xA3\x44\x24\x22\x93\xA1\xDA\xA4\xA9\xDE\x8B\xA3\x07\xF4\x68\xCE\xD5\x16\x4F\x95\x90\x12\xA4\x23\xC9\x22\xA7\xC8\x1B\x6C" + + "\x3B\xA4\x92\x2E\xD3\xAD\x93\xA0\xBB\x24\x16\x00\xAF\xA1\xB3\x5E\x80\xCA\x1B\xBE\x29\x1D\x89\xF8\x5D\xE5\x8B\xC9\x27\x60\x46\x16" + + "\x45\x3F\xDA\xC3\xE9\x47\x86\xD2\xFE\x44\x05\x45\x95\x58\x64\x0F\xAD\x85\xC0\xBD\xCE\x4F\x17\xE9\x6E\xB0\xEB\x07\x2B\x20\x2F\x06" + + "\x3D\x8A\xA6\xCF\x63\x2A\xFC\x8E\x83\xBD\x18\xC4\xD3\xC9\x02\x24\x83\x60\xAF\x7A\x90\x48\x25\x76\x87\xB8\x36\x54\xB3\xF0\xF7\x98" + + "\x19\x65\x90\x3F\xC8\x93\x3A\xAC\x80\x12\x49\x0E\xD0\x34\xC0\x9E\xEF\x1A\x53\xF8\x0D\x15\xEE\xD6\x8E\x61\x3C\xD2\x33\x31\xF8\x11" + + "\x98\x0E\xE6\x93\xE4\x8C\xAA\x86\x01\x57\xE3\x1F\x26\xC9\x1F\xDE\x3B\x00\x7F\xC8\x83\xF2\x1E\xC0\x81\x2F\x58\xB0\x81\x63\x87\xBA" + + "\x39\x1D\x97\x6C\xAB\x13\xBA\x19\x0E\xDB\xB8\x48\x01\x44\x6D\x10\x53\x5B\xEC\x52\xCA\x4B\xFF\x00\x73\x39\x23\x02\xD9\x62\x0F\xA8" + + "\x20\x0E\x38\xED\xEB\xC1\xBD\x89\xF6\x24\xFB\xF8\x16\x16\xC7\xAF\x6F\xB9\xFA\xF0\x48\xEB\x10\x9A\x0B\xEF\xF2\x3C\xA1\x23\x01\x58" + + "\x18\xFB\x1A\xC0\x66\x0C\x8C\xA4\xCB\xF8\x90\x3B\x54\x9F\x0A\x5B\x44\xB0\x5D\x8D\xB0\xC9\x60\x7F\x8D\xCC\x88\xB2\x46\xDB\xFB\x8E" + + "\x52\xE4\xB6\xD8\x9F\xC4\xEB\x7E\x1F\x7F\x99\x20\x79\x0A\x18\x7A\xC8\x5D\x65\x95\x1B\xF7\x4E\x27\x50\xCC\xA0\xC7\x1B\x43\xF8\xE8" + + "\x76\x93\xB9\x7B\x83\x82\xA0\xAE\x84\x7B\x62\x7B\x54\x8F\x41\x6C\xC6\x63\x40\x60\x96\xC4\x6E\x19\x80\x7B\x6F\x3D\xD5\xEE\x2C\x09" + + "\xFF\x00\x4C\xDD\x47\x62\x03\x91\xAE\xE5\x3D\xBA\xD1\x45\x0C\x0B\x57\x41\x8E\x72\x32\x30\x6F\x62\x09\x07\xB5\x8F\x1C\xFA\xF4\xE1" + + "\x24\x60\x31\x61\xC1\xE0\x10\x0D\xAC\x73\xCF\x1F\x5B\xF5\x8A\xFC\xA5\xE7\x65\x82\xB3\x23\x83\xDF\x60\x4D\x52\xC4\x41\x8A\x82\x23" + + "\x64\x79\x12\x34\x93\xB4\xBC\x6E\xAD\x1C\x85\x94\x8D\x91\xB5\x5F\x43\x6E\x35\xA9\x24\x78\xD2\x14\x62\xA4\x30\x79\x6B\x4B\x1C\x27" + + "\x7E\x08\x47\x1B\x01\xBB\xB6\x3E\xF6\x1C\x00\x01\x5F\x0B\x92\x4B\x44\x5A\x8D\xFF\x00\x70\x86\x61\xDB\xE5\x55\x27\x48\x4A\xC7\xBD" + + "\x0F\x8D\xE4\x71\xF8\x96\x6F\xC8\xF7\xB0\xF2\x8C\xCA\x01\x62\xD5\x16\x3A\xCA\xD0\xC3\x0C\x91\x44\xBD\xC4\x29\x8F\x65\x98\x92\x76" + + "\x03\x10\x00\x1A\x3A\xD6\x94\x1F\x04\x83\xE9\xBB\x44\x72\x14\xD8\x58\xFA\x91\x7C\x62\xC0\x7F\x4C\x9C\x9E\xF6\xE9\xCC\x72\x29\x03" + + "\xB1\x16\x16\x3D\xFD\x33\xDE\xFC\x7A\x9F\x4E\xB0\x99\xA2\x69\x9F\xE3\x39\x4A\xE6\x35\x0C\x26\xA8\x64\x8A\xC4\x43\xF1\x62\xCB\x27" + + "\x7A\xCB\x3A\x0D\x76\xF6\xA7\x7A\x6C\x86\x2D\xDA\x54\x80\xD5\xA0\x8D\x62\x1F\xB3\x96\x93\x68\x95\xD4\x2A\x7E\x34\x67\xFE\x4A\xC5" + + "\x22\x80\x46\x94\x32\xAB\x2B\x31\x09\xBD\x7A\x37\x76\x79\x92\x54\x8E\x38\x24\x2C\x58\x16\x92\x45\x2D\x02\x27\x72\xF9\x3A\x92\x39" + + "\x59\x98\x7F\x6B\x45\x14\xA9\xBD\x16\x1B\x1E\x98\x5B\x81\x7B\xE1\x91\xBE\x48\xD9\x88\x1B\xAD\xF3\x44\x47\x68\x62\x40\xED\x29\xB0" + + "\xAC\x41\xD3\x82\x08\xD7\x81\xE5\x43\x56\x03\x3B\x81\xC6\x08\xCD\xFB\x7B\xD8\x7B\xFE\xBD\xC7\x4B\x5F\x02\xFF\x00\x60\x2D\xEA\x3F" + + "\x10\xC5\xFD\xAF\x9F\xB5\xBA\xC6\xDA\xB6\x56\x51\x22\x3D\xCA\xD1\x31\x6F\x12\x57\x81\xE3\x60\xA0\xF8\xEE\x4B\x0F\x60\x21\x24\xA9" + + "\x27\xE4\xD1\x25\x8A\xF8\xD9\xF4\xDE\x18\xAD\xD7\x67\x32\xDA\x5B\x44\xF7\x15\xF9\xCC\x4A\xE4\x79\xFC\x50\x44\xB0\xED\x7C\x9F\xC8" + + "\xAC\x8D\xE0\x8E\xF6\xD6\xCE\x45\x62\xEB\x31\xFF\x00\x5D\x8E\xC0\x05\x59\xA3\x23\x43\x43\x5B\x3A\x55\x5F\x1B\x20\x11\xB2\x7E\xF5" + + "\xBD\x7A\x07\x34\x95\xED\x80\xF2\x45\x15\x88\xC6\x95\x18\x44\xAC\x40\x0D\xAD\x9E\xE4\x04\x30\x20\x6F\xB0\x2F\xE4\x48\xF2\x47\x94" + + "\x48\x17\xFF\x00\x75\xC0\xB6\x4F\xD0\x64\x5F\xD3\xB6\x48\xF5\xE7\xA3\x06\x38\xC0\xB5\xF9\x0A\x2F\x9B\x60\x1C\x1E\xDC\x5F\xA6\x36" + + "\x51\xD8\x19\x99\x51\x74\xC4\xA1\x08\xC6\x45\x03\x60\x84\x91\x86\x80\xEE\x20\x9F\xE0\x92\x3E\xB4\x3D\x0D\x45\x32\x3E\xE4\xA9\x17" + + "\x70\xDF\xFA\xD3\x22\x31\x7D\xE8\x77\x69\x57\x7B\x3E\x3C\x1D\x00\x3C\xF6\x8F\xA0\x4A\xC4\xB0\x44\x9F\x33\x24\xEC\xB1\x90\x3B\x23" + + "\x80\x91\xDC\x36\x00\x55\x6D\x2F\x8F\x20\x00\xA0\x8D\x7D\x9D\x13\xE8\x64\xD9\x74\x08\x64\x8A\x26\x91\x8F\xF7\x57\x43\x02\xCE\x08" + + "\x1B\xDB\x24\xAC\x81\x4A\x9D\x82\x1D\x97\x7F\x90\x04\xFF\x00\x71\x03\xEA\x7B\x66\xD6\xBF\xE9\x62\x7E\x96\xFD\x7A\x5A\x32\x49\x16" + + "\x42\x41\x23\xD8\x5F\xB0\xBF\x6E\x48\xBF\x1F\x6C\x84\x44\x12\xC2\xCD\x63\x72\x09\x48\x70\xA8\x96\x6C\x18\x58\x01\xDB\xE2\x09\x1C" + + "\x40\xCD\xFF\x00\x74\xFC\x0F\x85\x23\x64\x10\xEC\xF9\x29\xFB\x99\x92\xC2\x20\x3E\x62\x92\x58\x20\x70\x0E\xD8\xB4\x73\xD5\x79\x9F" + + "\xF8\x20\x21\x97\x67\xF9\x0B\xE0\x12\xEB\x95\x49\xDC\x40\xF5\xAE\x42\x49\xD0\x33\x52\x64\x8F\x5A\xEE\x20\x4C\x9D\xF0\xFD\x1D\x9D" + + "\x48\x41\x23\x4B\xF5\xA1\xED\xE4\x58\xC1\xD6\xC2\x12\x00\x26\x32\xAC\x09\x1A\x01\x77\xB1\xAD\xAE\xC8\x1F\xCF\xFF\x00\x6D\xF8\x26" + + "\xD5\x93\x2A\xC4\x0C\xDF\x69\xB0\x27\x1F\x88\x7B\x5A\xC4\x11\x9B\xE7\xA7\x28\x4F\x0C\x8A\xA4\x1F\x97\xB0\x00\x0F\xF6\x9E\xF9\x36" + + "\xB8\x1D\xCD\x80\xE8\x0A\xC4\xA3\x5D\xF0\xAB\x39\xFF\x00\x74\x8E\xF2\xC8\xCD\xBD\x69\xDD\xF6\xEC\x02\xE8\x6D\x89\x3E\x37\xBD\x68" + + "\x7A\x69\x3D\x79\xD1\xD5\xA0\x73\x1C\x63\x4E\xD1\x08\xD2\x48\x5B\x5B\xF2\xC1\x55\x64\x04\xF8\xD9\x49\x10\x91\xBD\xF7\x76\x80\x08" + + "\xCD\xFB\x63\x23\x33\x2A\x33\xB1\x0A\x5D\x53\xB1\xC8\x1E\x75\xDF\xDA\xAE\xDE\x49\x21\xB6\x34\x47\x8E\xEF\xB0\x35\x6F\xB4\x13\x18" + + "\x16\x8D\xE9\x21\x27\xC5\x89\x1E\x19\x62\x8C\x01\xB1\xDE\x24\xB2\xF6\xFF\x00\x90\xAC\x44\x2C\x07\x70\x04\x81\xB2\x09\x22\xA8\xB6" + + "\x42\x02\x6D\xBA\xC4\xDC\x90\x00\xDD\x61\xC1\xC0\x24\x9D\xBD\x8F\xA7\x4A\xAD\xC8\xB8\x23\x82\xDF\x88\x5B\x8E\xC4\xDB\x24\x5A\xD6" + + "\x17\xF4\x04\xF5\xE1\x6C\x4C\x52\x40\xF5\xA1\x47\x0B\xB5\xEC\x77\x1D\xDA\xF0\x18\x86\x8C\x34\x7A\xF2\x74\xC1\xC8\xDE\xFB\xB7\xE0" + + "\x85\x7B\x79\x36\x7E\xC8\xAB\x2D\x72\x87\x6C\x6C\x46\x66\x8A\x45\xD9\xD8\x8A\x48\xE6\x8E\x4D\xFD\x10\xEF\x07\x68\x01\xBC\x1F\xB0" + + "\x76\xC3\xDB\x58\xFE\x4A\x82\x26\x76\x71\xBF\x9F\xE4\x45\x0A\x49\xFB\x75\x47\x64\xF0\x0A\x9D\x23\x8D\x81\xBD\xEF\xC0\xF7\xC8\x44" + + "\xBD\xB0\x5B\xB1\x05\x6B\x23\x40\x47\xDC\xEC\xA4\x9D\x30\xF8\x9D\xE3\x4E\xF1\xF6\x14\x15\x5D\x7F\x2B\xA2\x0F\xA0\x63\x6B\x2B\x4C" + + "\xCA\x40\x05\x8B\x6D\x00\xF0\x08\xDD\x61\x9E\xF6\xB9\x27\xF5\xE8\xC2\xE7\x80\x0E\x78\xC9\x38\xF6\xB9\xC1\xFB\xFD\xBA\x4A\x59\xDE" + + "\x58\x84\x73\x46\xBA\x62\x55\x82\x92\x3B\x8F\x6E\xC7\xD9\x04\x8D\x6F\xC6\xC2\xFE\x25\x88\x0A\x47\xA1\x2F\x66\x58\xA5\x8A\x95\x38" + + "\x69\x1E\xED\xB3\x42\xF3\xB5\x79\x17\xCF\x71\x31\x2A\x45\x20\x90\x91\xDD\xBE\xE2\xBD\xCC\xDB\x24\xF9\x05\xCC\xA2\x5B\x33\xAB\x85" + + "\xB0\x20\x40\x49\x9A\x2B\x92\x47\x13\x0D\x9D\x77\xC0\x85\x3B\x87\xF8\x62\xAE\x0E\xCF\xF6\x91\xB3\xF8\x58\xAA\x85\xDE\xA1\x59\x5C" + + "\x6C\xC8\x91\xB2\x19\x43\x81\xFD\xA7\x6C\x0A\x39\xF3\xE1\xBB\x54\xF9\x04\xE8\xFA\x46\xC4\x92\x56\x40\x05\xD4\x6E\xCE\xE2\xB8\x27" + + "\x6A\x91\x72\x71\x6C\x5F\x8B\xFD\x38\x58\x5E\xE2\xF8\xE2\xF6\xB1\xBF\x7B\x1B\xE3\xD3\x06\xF8\xE9\xAD\xC4\xB9\x2C\x6E\xB1\x2C\xB5" + + "\x8B\x6B\xFD\x6A\xFF\x00\x13\x4A\x87\xEB\x5F\xEA\xC7\x22\xF7\x0D\x7D\xB2\x36\x81\x00\x8F\x3A\xF4\x01\xA9\x65\x44\xD1\xC8\x72\x79" + + "\x29\x63\x1E\x5A\x19\x21\xC7\xF6\x3F\xF7\x13\xB7\x4A\x8A\xE8\xDB\x00\x82\xA6\x32\x34\x0E\xBE\xC0\x36\xD2\x8B\xBB\x16\xE0\xBF\x4B" + + "\xB7\x7A\x66\xB9\x0C\x29\x21\xFF\x00\xEA\x7F\x6B\x6D\xC3\x83\xE3\xFF\x00\x91\x47\xF8\xF2\x7C\x7A\x4A\xDB\xBD\x78\x89\xAA\xB1\x8F" + + "\x00\x84\x56\x8D\x23\x62\x7F\xDD\x2B\x95\x90\x83\xFC\xF7\x28\x27\xCE\xBC\x8F\x3E\x83\x62\x31\x24\xB1\xB0\x02\xC4\x16\x04\x9B\x83" + + "\x95\xC0\x00\x63\x92\x6E\x7B\x10\x3A\x10\xCC\x98\x1B\x4F\xAD\xC2\xB0\xCF\xA3\x67\xB7\xA1\x19\x1E\xBD\x58\xDD\x49\x6D\xF7\xC6\xD2" + + "\xC3\x5E\x38\x42\x76\xF6\x2A\xCA\xF3\x21\xD6\x87\x6E\xD7\xCA\x33\x68\x7F\x60\x62\x84\x78\x1A\x1E\x9F\xC5\x22\x89\x5A\x69\x2E\x31" + + "\x88\x8D\x98\x1D\x23\x44\x01\x7E\x9E\x3D\x22\x4A\x01\x03\x60\x33\x30\x23\x5A\xFF\x00\x3E\x87\xD5\x94\x14\x8E\x53\x20\x28\xCA\x36" + + "\x3B\x9B\x61\x74\x49\x1B\x04\x12\x06\xBC\x10\x35\xE4\x6F\x5A\xD9\x76\x95\x6B\x33\xAB\x88\xEB\x49\x2B\x92\x19\xA4\x8B\xB8\xB2\x90" + + "\xC0\x29\x1D\xAC\x49\x0C\xE4\x81\xDD\xAD\xEF\xFC\x91\xEA\xC2\x8E\x1A\xC1\x6F\x73\x9F\x98\xE7\x00\x73\x6F\xEE\x3B\x71\xE9\x09\xF5" + + "\xFB\xF4\x71\x04\x53\xC2\x14\xB1\x8D\x08\x62\x19\x65\x9E\x36\x3E\x36\x4F\x7A\x48\x84\x78\x03\x7A\x24\x28\xFB\x1A\x24\xFA\x52\x39" + + "\x65\x5F\x8E\x3A\xB5\xA4\xB0\x14\xFF\x00\xAB\x25\xAB\x5F\x1B\x32\xAF\x70\xD8\x2A\x27\xEF\xDE\x81\xD3\x85\xFF\x00\x69\xFE\x09\x01" + + "\x2B\xC7\x93\x4B\x60\x47\x62\x91\xA4\xE4\x8F\xDB\x1A\xB2\xAB\x00\x35\xDC\x52\x75\x98\x2A\x03\xE5\x4A\xFC\x44\x0D\x0F\x3E\x48\xF5" + + "\x93\x0B\x86\x19\x54\x48\x84\x83\xB0\xFF\x00\x18\x92\x66\x41\xDA\x4F\xF1\xB6\x65\x0C\x34\x49\x1A\x00\xF6\x9F\x07\xD3\x98\xEF\x9E" + + "\xD8\xE7\x1E\xDF\x6C\xFB\x8F\xB0\xE9\x19\x24\x51\x6B\x7C\xDD\xC8\xBB\x01\xDA\xC0\xD8\x02\x7D\x79\xB6\x3B\xF4\x5A\x11\x38\x73\x1A" + + "\x80\xCA\x15\x4B\x21\x52\x1C\x76\x82\x76\xE7\xB5\xD5\xC0\x62\xC7\xC8\x1A\x60\x54\xC9\xBD\x06\x22\x15\x22\x24\xE9\x5C\xEC\x36\xDD" + + "\x63\xF1\x27\x69\x04\x92\x3B\x49\x0E\x18\x12\x4F\x8D\x96\x53\xB5\x25\x7D\x0A\xF9\x2C\xCF\x09\x92\x15\x8C\x39\x20\xAB\x48\xBD\xEA" + + "\x53\x4A\xC0\xAC\x42\x4A\xFB\x0C\xAD\x27\x92\x55\xB4\x43\x10\xCB\xAD\xBE\xA7\x34\xCC\x14\xD8\x35\xE4\x5E\xE2\xAD\x24\x68\x16\x3E" + + "\xE1\xBD\x84\x8D\x9A\x52\x8B\xFD\xA0\x06\x95\x88\xD8\x25\x89\x00\x87\x08\x40\x2A\x08\xB9\xBE\x0D\xC8\x20\x62\xFC\x76\xFF\x00\x37" + + "\xE9\xA1\x3D\xEF\xC7\xE9\xC5\xAF\x7B\x76\xF7\x18\xFB\x74\xA4\x33\x44\xDD\xF5\x98\xAA\xC8\x4A\x99\x22\x07\xBB\xBD\x8E\xC3\x2A\x33" + + "\x01\xB5\x01\x9B\x65\x90\x68\x1D\xF6\x90\xCC\x19\xD8\xC5\xD7\x4E\xC9\x55\x8A\x48\x1B\x4B\xFE\xB3\x00\xDB\x65\x65\x2C\x8D\x38\xDA" + + "\xFD\x6C\x14\x2A\x59\x74\x0A\x8F\x05\x35\xB2\x61\x7E\xF4\xC7\x4B\x32\x11\xF2\x7C\xEB\xFB\x60\x15\xC8\x21\x76\x24\x96\x17\x66\x3D" + + "\xC0\xED\x51\x9B\xF0\x27\xB4\x15\xD1\x2F\x04\xD0\x49\xA9\x59\x7B\x58\x27\x85\x03\x6C\xA0\x23\x77\x07\x50\x49\xFE\x4F\xE2\xAC\xCC" + + "\xDE\x40\x1B\x53\xE9\xE2\xE6\xDB\xAD\xD8\xFE\xB7\x07\xF4\xBF\xA7\x49\xB3\x12\x31\x80\x70\x7E\xBD\xFE\xDC\x7A\x75\xF2\x4A\x71\x57" + + "\xDC\xF3\x16\x89\x7C\x11\x25\x71\x1C\x65\x00\x27\x60\x4A\x37\xB0\xA4\x7E\x41\xF7\xE1\xBB\x34\x55\xB4\xCF\x60\xB9\x55\xD8\x81\x22" + + "\x93\xDC\x00\x52\x57\xE4\x24\x1D\x29\x50\x01\x2C\x02\xE8\xF8\x3A\x27\xC9\x3A\xEE\x1E\x96\x32\xA4\xB1\xF6\x6B\x6D\x1E\x9D\x41\xF9" + + "\x55\x49\x72\x3F\x27\x2D\xA2\x1B\xB4\xEB\xFB\x87\xE5\xF6\xBB\x25\xBD\x32\x78\x28\x18\x84\xB3\x34\xAD\x1C\x4D\xDC\xBF\x11\x99\x66" + + "\x91\x81\x24\x08\xC0\x29\xDE\xC4\x2F\xD8\x66\x5D\x92\x00\x03\x60\xAC\x01\x1C\x5B\x6D\xAE\x4F\xEC\xFE\xC7\x49\x16\x0B\xCD\xF9\xB6" + + "\x05\xCE\x78\xC7\xD3\xF5\xC7\x45\xBB\xD6\x45\xD3\x6D\xA3\x3A\x0D\xE0\xF6\x8D\x13\xDC\x0F\x71\xD7\xE4\xA3\x6D\xBF\xC7\xC0\x24\x1F" + + "\xAF\x44\x2B\xDC\xA9\x5A\x8D\x93\x1A\x85\x75\x23\x6C\x63\x71\xDA\x5D\xB6\x4A\x85\x41\xAF\x25\x7B\xB4\x48\x2A\x7F\xCE\xBD\x63\x62" + + "\xFC\x48\x7B\xA5\xAB\x62\xB8\x53\xF7\x22\x99\x5D\x81\x51\xA2\x5A\x16\x6E\xE9\x07\xE4\xAF\x1A\xF7\x6D\xCA\x85\x66\x03\x7E\x89\x7E" + + "\xEE\x8B\x42\xAE\xB2\x48\xCC\xE9\xFE\xD0\xC8\xAB\xDA\xA4\x80\xCA\xEA\x00\x55\xD6\x99\x4F\x6F\x69\x67\xD8\x52\xE5\x4A\xF1\x36\xD2" + + "\xC4\x15\xFC\x36\xCF\x02\xE4\x76\xE4\xE3\x3F\xDF\xA6\xF2\x7C\xDF\x89\x1C\x2D\xC1\xE4\x80\x6D\x9B\xB0\xC8\xBD\xBB\xDC\x67\x9B\xD8" + + "\x8E\xBF\x19\xFE\x75\x72\xA6\x39\x3E\x30\x0B\xB6\x91\x82\xB8\x24\xF6\x91\xF2\x07\x6E\xF5\x63\xDE\x00\xD8\x55\x3B\xFA\x3B\x4A\x09" + + "\xA4\x84\x02\xD5\x9A\x68\xE5\xEF\x32\x4B\x0B\x2A\x40\xAE\x5D\x4F\x94\x95\xD4\x92\x42\xF7\x0E\xC4\xED\x04\x90\x18\xB7\x77\xAF\x51" + + "\x57\x6B\x24\x48\x92\xA7\x69\x43\xDE\x14\xA1\x20\x0F\xF6\x02\x19\x90\xF9\x6F\xC9\x57\x60\x68\x01\xDC\x01\xDA\x95\xE6\x64\x12\xD4" + + "\x8D\xC1\x48\xBE\x47\x78\x82\x23\xB6\xE4\x3D\x87\x44\x02\xA5\x7F\xE7\x7B\xDA\x0F\xEE\xD1\x1E\x8E\x37\x96\x05\xB9\xCE\xC2\x08\x22" + + "\xE6\xC7\x83\xC8\x23\xF2\xED\x62\x3A\x2B\x32\xE0\x28\x1E\xAC\x0D\xEE\x09\xB6\x09\xC1\xC6\x6D\xEC\x4F\x43\xDA\xE5\x77\x9A\xBC\x6A" + + "\x8B\x19\x66\x32\x2C\x4E\x50\x31\x20\xAA\x10\x04\x6F\xA2\x08\xD6\x94\x39\x50\xC7\xB3\xEC\xEC\xA1\x6E\x08\x8C\xC2\x60\xAA\x64\xED" + + "\xB3\x14\x68\x48\xD2\xFC\xDF\x1E\xB6\x43\x33\x9E\xD1\x17\x9F\x0C\x57\xBF\xBC\x68\xEC\x07\x07\xE0\x9A\xC8\x81\xCC\x46\xCC\x60\x32" + + "\x34\x7F\x12\xD8\x10\xA3\xA9\x3D\x88\xFD\xCA\x74\x0E\xCE\xA3\xFB\x65\xED\x5E\xEE\xDF\x43\xAD\xDA\x11\x69\x61\x90\xDA\x94\x36\xA6" + + "\x50\xD1\x09\xA3\x20\x85\x2D\x24\x61\xD4\x6D\x54\xE8\x00\x51\x58\x01\xA3\xAF\x1E\x92\x60\x40\x24\xD8\xAE\xEB\x03\x60\x32\x00\xBE" + + "\x39\x16\xB8\xF6\xC6\xEE\x33\xD0\x29\x21\x86\xCD\xC0\x9B\x1B\x7A\xDC\xE3\xD2\xEA\x4F\xAF\x1D\xEF\xDC\x7C\xA9\x3A\xFC\xEF\x2C\x48" + + "\xB1\x00\xCE\xA0\x32\xB0\x2C\x7F\x16\x66\x0C\x02\x28\x0C\x0A\x90\x8C\xC4\xB0\x1A\x1E\x0E\x85\xBC\x50\xC7\x1B\xB4\xB1\x28\x24\x16" + + "\x7E\xD5\x04\x80\xC8\x4B\x12\x55\x59\x5C\x05\x08\x3B\x93\x65\x75\xE4\x80\x09\x63\x7D\xC6\xE2\x02\x66\x47\xD2\x1E\xE5\x65\x62\xA7" + + "\xB4\x30\x2C\xC0\x34\x61\x80\x2D\xBD\x01\xBD\x3A\x82\x1B\xCB\x7A\x6F\x66\x8C\x29\x1A\x00\xF0\x46\xA7\xB8\x15\x58\x90\x45\x10\x2E" + + "\xDA\xF1\xE3\xE3\x6F\xC9\x90\xA9\xD2\x7E\x6F\xE4\x02\x57\xD2\x05\x49\xC8\xCD\xFB\x92\x3D\xBD\x85\xBF\x7D\xBA\x73\xE6\x28\xF9\x58" + + "\xFC\xC3\x9B\x03\x6B\xFB\x62\xFF\x00\xA7\x58\x6C\xD9\x0A\xE5\xC9\xA7\x13\x4C\x88\x0F\xC9\xE0\x56\x08\x43\x6F\x6B\x1C\xA2\x20\xC5" + + "\x48\xEF\x05\x42\xF6\x95\x5F\x1B\xDA\x10\x5F\xB7\xA7\x66\xCC\xF6\xE3\xAD\x34\x56\x02\x94\x91\xE5\x8D\xE1\xF9\x55\xDF\xB9\x98\xB9" + + "\x01\x25\x46\x6D\xA9\xD0\x71\xDA\x3B\xDF\x5F\x88\xF5\x97\x5B\x8A\x04\x50\xB0\x49\x1F\x72\x9F\xC1\x58\x15\x04\x7C\x67\x7E\x04\x8A" + + "\x00\x60\x83\x4C\x3E\x88\x50\x51\x98\x80\xF8\xED\xEA\xB3\xCF\x1C\x88\xB6\x12\xB8\xED\x3A\x68\xF4\x65\x0C\x76\x5B\xB6\x39\x81\x8D" + + "\xD4\x05\x5D\x77\x29\x3E\x08\x0A\xC0\xAB\x2A\x12\x29\x61\x6E\x4E\x4D\xAD\xDE\xDD\x98\xDA\xDF\x7B\xDE\xFE\x83\xA5\x95\x86\x08\x36" + + "\xB8\x16\x6B\x9E\x0D\x8D\xC8\xB6\x47\xA0\xB0\xF7\xBD\xBA\xC6\x6F\x7C\xD0\xC8\xC5\x67\x79\x20\x58\xD4\x18\xA1\x85\x19\xD8\x82\xC5" + + "\x42\xC8\x6C\x46\x07\xE6\x58\x06\x61\xE4\x10\x4F\x8D\x15\x17\x61\x2C\x4C\xE5\xE0\x68\x2B\xAB\x21\x12\x0B\x10\xCA\xD2\x87\x07\xCF" + + "\xE4\xB3\xC4\x88\x40\x3A\x24\xB3\xA9\x1D\xA4\x36\xBF\x00\x60\x62\xE2\x90\x97\x99\xE3\xB4\xF1\x2E\xD2\x49\xBE\x33\x20\x3B\x27\x67" + + "\xE3\x8E\x28\xD2\x43\xAD\x2B\x2A\x2E\xD5\x80\xD0\x2C\x5C\xB4\xB0\x6B\xA2\x1E\xD6\x8C\x88\xC6\xFC\xB1\x56\x20\xA8\x00\x85\x2A\x77" + + "\xB2\x0F\x68\xD9\x07\x40\x37\x70\xD8\x2D\x19\x18\x5C\x30\x23\x8E\xFF\x00\x71\xC7\x6F\x7F\x5C\x5E\xFD\x2A\x19\x71\x63\x73\xC7\x06" + + "\xDF\x6B\xFF\x00\x7E\x3A\xC7\xCD\xBC\x80\x61\x14\xB5\xE5\x78\x58\xB1\x37\x20\x0A\x11\x4A\x80\x76\xD1\xB5\x86\x95\x7C\x6D\x49\x0A" + + "\xC0\xA9\xD7\x85\xDA\x90\x37\xFF\x00\x7C\x58\x24\x30\x47\x3A\xC8\x3B\xA5\x79\xE7\x92\x1E\xF5\x3B\x07\xE3\xD4\x13\xAB\xFF\x00\x80" + + "\x25\x91\x36\x0E\xCB\x0E\xD3\xE8\xCB\x5E\xDB\x4E\xC1\x59\x51\x1D\xBB\x84\x91\x98\x9C\xB1\xEE\x0B\xF1\x96\x48\xD1\xC7\x8D\xEC\x16" + + "\x20\xB2\x8E\xE0\x48\x04\x54\xB7\x21\x7D\x86\x4F\xDA\x92\x02\xEE\xCA\x7C\x69\xDA\x00\xD9\x79\x14\x32\x28\xED\x1B\xF0\xC7\xC2\x9D" + + "\x11\xDA\x00\x6C\x47\x6B\xFD\xC7\x4A\x2B\x10\x6E\x15\x49\xE7\x23\x3C\xE0\x8F\x43\xF4\xC6\x78\xC6\x03\xBB\xC5\x8D\xAE\x08\xAD\x30" + + "\x53\xF2\x13\x15\x78\x24\x76\x05\x86\xFC\xC6\xA3\xFC\xEB\xF3\x3D\xA0\x76\xEB\x61\x76\x3D\x0D\x96\xDC\xB6\x20\xF9\x2B\x54\x94\x33" + + "\x38\x45\x4B\x9D\xF5\x88\x3B\xD9\x7D\x2C\x53\x10\x37\xBD\x10\x08\xD0\x00\x8D\x06\xF4\x70\x3C\xAF\x3C\xDB\x9E\x84\xC8\x01\xF8\x0D" + + "\x72\xC7\xBD\x0A\xEC\x96\x62\xCE\x8F\xDC\x0B\x31\x65\x0A\x74\xA0\x01\xB2\x0F\xA1\x79\x05\xB7\xF2\x2C\x91\xD9\xAA\xB5\xD0\x90\xF0" + + "\xCB\x04\xA6\x40\x77\xF9\x84\x91\x25\x84\x0E\xCD\x31\x3B\x85\xC6\x80\xFA\x07\xB7\xD3\x67\x88\xE4\xA8\xE3\x81\x61\x9E\x3B\x8C\xFA" + + "\x9E\x0D\xBB\x5B\xB3\x85\x99\x4D\x81\x16\x38\xF7\x5F\x5F\xAF\xB1\x1E\xBD\x04\x78\x2F\xC6\xC6\x79\xED\x2C\x70\x80\x4B\xC3\x24\x71" + + "\x88\x95\x74\x41\xED\x94\x22\x48\x23\x1E\x36\x7B\x89\x5D\x8F\x07\x40\x01\x33\x55\x4B\x2C\x6D\x55\xB2\xCE\xC0\x8F\x8C\xC7\x65\xE4" + + "\xAC\x8C\x0E\x9B\x6B\x13\xC6\x24\xD6\xBF\x24\x2F\xDA\xC0\x00\xDF\x40\xFA\xCA\x63\x78\xDD\x0B\x2C\xF0\xC8\x8E\x4A\x96\x0E\x0A\x91" + + "\xAF\xC8\xA9\x29\xB3\xE4\x68\xF7\x6C\x0F\x00\x7D\x79\x1B\x2C\x24\xB1\x29\xD9\x1A\xA8\x1D\xDA\x3A\xFF\x00\x3D\xA5\x4A\xAA\xF7\x6C" + + "\x82\x09\x62\x07\x69\xFE\xED\x91\xB6\x86\x36\x5C\x15\x3C\xDA\xE0\xDF\x37\xC8\xC9\x36\xB6\x6E\x05\x85\xF3\x6B\x74\xB0\x6B\xE4\x1E" + + "\xC0\x62\xC3\xD0\xE4\x5B\x9B\x5B\x9B\x1F\x5B\xDF\xAC\x7F\xF6\xF6\xD4\x77\x5B\x9A\x29\x4B\x3B\x2F\xC9\x14\x06\x14\x5F\xE5\x40\x49" + + "\x26\x90\x97\x23\x4A\xC0\x30\x04\xED\x81\x20\x68\x34\x6A\xE2\x37\x79\x12\x35\x6F\x04\xE8\x15\xEE\x62\x00\x3A\xDF\x6A\x37\x92\x00" + + "\xF0\x1F\x5D\xDB\xF2\x0F\x82\x53\x52\x9A\x59\x44\x82\xD7\xC2\x10\x31\x30\x06\x8D\xA1\x90\x7D\xAF\xCB\xDD\x0B\x3A\x95\xED\x6D\x7C" + + "\x72\x06\xD3\x12\x49\xD2\x9F\x42\xE5\x37\x8D\x8E\xD9\xE2\xAB\x14\x7E\x3E\x39\x52\xCB\x48\xCE\x08\x03\xF2\x49\x2B\xC6\x10\xA9\xD7" + + "\x95\x76\xD8\xFE\xED\x76\x9D\x90\xDB\x80\x08\xB5\xB9\xEF\x80\x6F\xEA\x33\x71\x9F\x4B\x8C\x1E\x94\x0E\xE0\x96\x56\x00\xDA\xE4\x0B" + + "\x01\x60\x40\xB0\x16\x02\xE7\x9B\x2F\x6B\xF1\xD3\x43\x24\xD2\x23\x89\x60\x9A\x16\xDB\x98\xD0\x98\xDB\xBC\x0F\x2A\xCA\xEA\xCC\xA0" + + "\x12\x3B\x40\x25\x74\x48\x1E\x34\x36\x39\x09\x9A\x46\x92\x4A\xF3\x57\x64\x2C\xA0\x59\x8D\x15\xDC\xEB\xC9\x56\x49\x26\x46\x52\x74" + + "\x7B\x43\x79\x3B\xD8\x1E\x41\x2D\x69\x6D\x2A\x47\x2D\x65\xAA\xCD\xDF\xF8\x89\xE7\x92\x34\x60\xDE\x09\x06\x38\x25\x2B\xBF\xE3\x60" + + "\x0F\x27\x43\x7E\x3D\x30\x92\x1B\x0E\x8F\xFB\x9A\xD1\x44\xE5\x0F\x7A\xD7\xB2\xEC\x00\x1F\xFD\x19\xE2\x8D\x8E\x80\xD9\x66\x5D\xEC" + + "\x80\x06\x86\xC9\x33\x70\x2E\xD8\x17\x26\xD8\x39\x1C\x9B\x01\x7B\x5F\x03\xD6\xFD\xBA\x5D\x6A\x00\x17\x2A\x00\x26\xD6\x04\x12\x08" + + "\x03\x36\xC1\xB6\x01\xB9\xBD\xCE\x07\x1D\x37\x96\x09\x09\x3B\xFC\x14\x9F\xED\x3D\xA1\xBF\x2D\xB0\x00\x6B\x63\x63\x47\x6A\x3F\xCF" + + "\x90\x01\x3E\x87\xCC\x85\x23\x0E\xDD\xA8\xAA\x09\x2C\x1C\x79\x53\xB6\x04\xEF\xF1\xD6\xF7\xFC\x90\x3F\xC1\x23\xC7\xCF\xDA\xDA\x47" + + "\x57\xED\xA6\xF1\xA0\x3F\x14\x92\x4B\x3C\x92\xC6\xFB\x1B\x3E\x41\xFA\x04\x06\xED\x65\xFC\x76\x3F\x92\x7D\x37\x68\x32\x6F\xA1\x3D" + + "\xBA\x4F\xD8\xFE\x3E\x14\x78\x41\x1D\xDF\xD8\xFD\xF2\xCE\xC3\x5E\x4B\x30\x6F\xE0\x8E\xD1\xA2\x3D\x11\x89\x20\xFC\x8D\x7B\xF1\xDA" + + "\xE0\x82\x09\x37\x1F\x6B\x76\xC6\x3A\x59\x64\x8D\x45\x8C\xAA\x7D\x3F\x3E\x2F\x9B\xF3\xC9\xEC\x2F\xD3\x49\x33\x58\xE2\xA5\x06\x4E" + + "\xBC\x44\x2F\xF6\xBC\xB1\xC6\x41\x51\xAE\xD2\x1D\xBF\xB4\x78\xD9\x55\xFF\x00\xCF\xD9\xF4\xD3\xFF\x00\x99\x84\x88\x56\x40\x4E\xFE" + + "\x54\x60\xEA\x47\xDA\xB6\xFB\x8A\xF6\xEC\x1F\x20\x83\xA0\x41\xDF\xE3\xE8\xA9\x84\x94\x22\x48\x90\x9F\xF7\x0E\xF0\x49\x63\xE0\xB7" + + "\x77\x6A\x9D\xE8\x68\x95\x04\x82\x54\x02\x7C\x7A\x68\x24\x8A\x32\xF1\x45\xD8\x8C\xA4\x16\x4F\x93\xB4\xFD\x78\xF1\xAF\x00\x9D\xFF" + + "\x00\xDF\xC9\xD9\xF4\x8F\x95\x23\x5B\x79\x5B\xD8\x5A\xC0\x83\x8B\x60\xE4\xFB\xF1\xEF\x7F\x94\x5F\xA5\x3C\xC8\xDB\xF0\x9E\x2C\x4D" + + "\xCD\xF9\xB0\x07\x81\xDC\xE0\xDF\xDB\xB7\x43\xE5\x76\x4F\xC4\x15\xEE\x93\xCB\x06\xF0\x03\x29\x1B\xDF\x6F\x82\x34\x7C\x6F\x64\xF8" + + "\xD7\x80\x48\x1D\x24\x83\xBB\xB4\xA9\xF0\x48\x04\x03\xDC\xA7\xCE\xC0\x23\x63\x5B\x51\xAF\xCB\x5B\x5F\x3A\xF4\xF6\x6B\x78\xC4\x79" + + "\xFB\xE4\x8A\x49\x91\x4F\x78\x42\xCF\x20\x23\x5D\xC3\x4A\x8C\xC1\x75\xA0\xDD\xA0\xA9\xF0\x76\xA5\x86\xC6\x9C\x85\x57\x0F\xFB\x79" + + "\x2B\x4D\x2F\x6B\x11\x09\xB2\xA9\x26\xB4\x40\x1F\x1B\xF6\x90\x48\xD3\x6D\xD4\x79\xDF\xA4\xC6\xCB\x91\xE6\x46\x58\x1F\xC3\xBA\xF7" + + "\x00\xFA\x5A\xFF\x00\x6E\x47\x1D\xC7\x47\xB1\xB5\xEC\x6D\x8C\xD8\x8E\x7E\xBE\xD9\xE9\xAC\xAA\xEF\xE4\x82\xEB\xA2\x54\x32\x9E\xD6" + + "\x20\xA8\x23\x7F\x9E\x86\xFC\x86\xF1\xBF\x1E\x3F\x82\x06\xD3\xDB\x92\xC0\x8C\xD2\x61\x1A\x87\x2B\x2A\xCA\x09\x50\x3E\xBF\xD2\xED" + + "\x52\xFF\x00\xEE\xF0\x09\x3E\x35\xAD\xFD\x64\x03\x4C\x8F\x2F\xC3\x1C\x52\x10\x42\x46\xD3\x05\x00\x68\xE8\x33\x44\xAE\xA4\x10\x3C" + + "\xE9\x49\x5F\xAD\x12\x08\xF4\x1C\xC9\x32\x82\x6C\x45\x02\x92\xC5\x40\x86\xC3\xCE\xA5\x09\xFB\x0C\xF0\xC4\xC1\x8E\xBC\xFE\x20\x0F" + + "\x1A\x07\xCF\xA1\xDA\xCD\x61\x62\x55\xB2\xA4\x63\x22\xD7\xE4\x0B\x64\x10\x41\xB1\xC5\xC1\xEF\xD0\x2B\x00\x48\xC1\x23\xB1\x39\x1E" + + "\x84\x00\x41\x3F\xA8\xCE\x7A\xFF\xD9" diff --git a/examples/ili9341/slideshow/main.go b/examples/ili9341/slideshow/main.go new file mode 100644 index 0000000..038d247 --- /dev/null +++ b/examples/ili9341/slideshow/main.go @@ -0,0 +1,94 @@ +package main + +import ( + "fmt" + "image/color" + "machine" + "strings" + "time" + + "tinygo.org/x/drivers/ili9341" + "tinygo.org/x/drivers/image/jpeg" + "tinygo.org/x/drivers/image/png" +) + +var ( + black = color.RGBA{0, 0, 0, 255} + white = color.RGBA{255, 255, 255, 255} + red = color.RGBA{255, 0, 0, 255} + blue = color.RGBA{0, 0, 255, 255} + green = color.RGBA{0, 255, 0, 255} +) + +func main() { + err := run() + for err != nil { + errorMessage(err) + } +} + +func run() error { + backlight.Configure(machine.PinConfig{machine.PinOutput}) + + display.Configure(ili9341.Config{}) + + width, height := display.Size() + if width < 320 || height < 240 { + display.SetRotation(ili9341.Rotation270) + } + + display.FillScreen(black) + backlight.High() + + for { + err := drawJpeg(display) + if err != nil { + return err + } + time.Sleep(time.Second) + + err = drawPng(display) + if err != nil { + return err + } + time.Sleep(time.Second) + } + + return nil +} + +// Define the buffer required for the callback. In most cases, this setting +// should be sufficient. For jpeg, the callback will always be called every +// 3*8*8*4 pix. png will be called every line, i.e. every width pix. +var buffer [3 * 8 * 8 * 4]uint16 + +func drawPng(display *ili9341.Device) error { + p := strings.NewReader(pngImage) + png.SetCallback(buffer[:], func(data []uint16, x, y, w, h, width, height int16) { + err := display.DrawRGBBitmap(x, y, data[:w*h], w, h) + if err != nil { + errorMessage(fmt.Errorf("error drawPng: %s", err)) + } + }) + + return png.Decode(p) +} + +func drawJpeg(display *ili9341.Device) error { + p := strings.NewReader(jpegImage) + jpeg.SetCallback(buffer[:], func(data []uint16, x, y, w, h, width, height int16) { + err := display.DrawRGBBitmap(x, y, data[:w*h], w, h) + if err != nil { + errorMessage(fmt.Errorf("error drawJpeg: %s", err)) + } + }) + + return jpeg.Decode(p) +} + +func errorMessage(err error) { + for { + fmt.Printf("%s\r\n", err.Error()) + time.Sleep(5 * time.Second) + } +} diff --git a/examples/ili9341/slideshow/pyportal.go b/examples/ili9341/slideshow/pyportal.go new file mode 100644 index 0000000..d6973cf --- /dev/null +++ b/examples/ili9341/slideshow/pyportal.go @@ -0,0 +1,22 @@ +// +build pyportal + +package main + +import ( + "machine" + + "tinygo.org/x/drivers/ili9341" +) + +var ( + display = ili9341.NewParallel( + machine.LCD_DATA0, + machine.TFT_WR, + machine.TFT_DC, + machine.TFT_CS, + machine.TFT_RESET, + machine.TFT_RD, + ) + + backlight = machine.TFT_BACKLIGHT +) diff --git a/examples/ili9341/slideshow/slideshow.jpg b/examples/ili9341/slideshow/slideshow.jpg new file mode 100644 index 0000000..ce4bfee Binary files /dev/null and b/examples/ili9341/slideshow/slideshow.jpg differ diff --git a/examples/ili9341/slideshow/wioterminal.go b/examples/ili9341/slideshow/wioterminal.go new file mode 100644 index 0000000..1b2bfa3 --- /dev/null +++ b/examples/ili9341/slideshow/wioterminal.go @@ -0,0 +1,29 @@ +// +build wioterminal + +package main + +import ( + "machine" + + "tinygo.org/x/drivers/ili9341" +) + +var ( + display = ili9341.NewSPI( + machine.SPI3, + machine.LCD_DC, + machine.LCD_SS_PIN, + machine.LCD_RESET, + ) + + backlight = machine.LCD_BACKLIGHT +) + +func init() { + machine.SPI3.Configure(machine.SPIConfig{ + SCK: machine.LCD_SCK_PIN, + SDO: machine.LCD_SDO_PIN, + SDI: machine.LCD_SDI_PIN, + Frequency: 40000000, + }) +} diff --git a/image/README.md b/image/README.md new file mode 100644 index 0000000..94481d1 --- /dev/null +++ b/image/README.md @@ -0,0 +1,60 @@ +# tinygo.org/x/drivers/image + +This is an image package that uses less RAM to run on a microcontroller. +Unlike Go's original image package, `image.Decode()` does not return `image.Image`. + +Instead, a callback can be set to process the data corresponding to the image. + +## How to use + +First, use `SetCallback()` to set the callback. +Then call `png.Decode()` or `jpeg.Decode()`. +The callback will be called as many times as necessary to load the image. + +`SetCallback()` needs to be given a Buffer to handle the callback and the actual function to be called. +The `data []uint16` in the callback is in RGB565 format. + +The `io.Reader` to pass to `Decode()` specifies the binary data of the image. + +```go +func drawPng(display *ili9341.Device) error { + p := strings.NewReader(pngImage) + png.SetCallback(buffer[:], func(data []uint16, x, y, w, h, width, height int16) { + err := display.DrawRGBBitmap(x, y, data[:w*h], w, h) + if err != nil { + errorMessage(fmt.Errorf("error drawPng: %s", err)) + } + }) + + return png.Decode(p) +} +``` + +```go +func drawJpeg(display *ili9341.Device) error { + p := strings.NewReader(jpegImage) + jpeg.SetCallback(buffer[:], func(data []uint16, x, y, w, h, width, height int16) { + err := display.DrawRGBBitmap(x, y, data[:w*h], w, h) + if err != nil { + errorMessage(fmt.Errorf("error drawJpeg: %s", err)) + } + }) + + return jpeg.Decode(p) +} +``` + +## How to create an image + +The following program will output an image binary like the one in [images.go](./examples/ili9341/slideshow/images.go). + +``` +go run ./cmd/convert2bin ./path/to/png_or_jpg.png +``` + +## Examples + +An example can be found below. +Processing jpegs requires a minimum of 32KB of RAM. + +* [./examples/ili9341/slideshow](./examples/ili9341/slideshow) diff --git a/image/internal/compress/flate/deflate.go b/image/internal/compress/flate/deflate.go new file mode 100644 index 0000000..5500321 --- /dev/null +++ b/image/internal/compress/flate/deflate.go @@ -0,0 +1,748 @@ +// 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 LICENSE file. + +package flate + +import ( + "fmt" + "io" + "math" +) + +const ( + NoCompression = 0 + BestSpeed = 1 + BestCompression = 9 + DefaultCompression = -1 + + // HuffmanOnly disables Lempel-Ziv match searching and only performs Huffman + // entropy encoding. This mode is useful in compressing data that has + // already been compressed with an LZ style algorithm (e.g. Snappy or LZ4) + // that lacks an entropy encoder. Compression gains are achieved when + // certain bytes in the input stream occur more frequently than others. + // + // Note that HuffmanOnly produces a compressed output that is + // RFC 1951 compliant. That is, any valid DEFLATE decompressor will + // continue to be able to decompress this output. + HuffmanOnly = -2 +) + +const ( + logWindowSize = 15 + windowSize = 1 << logWindowSize + windowMask = windowSize - 1 + + // The LZ77 step produces a sequence of literal tokens and + // pair tokens. The offset is also known as distance. The underlying wire + // format limits the range of lengths and offsets. For example, there are + // 256 legitimate lengths: those in the range [3, 258]. This package's + // compressor uses a higher minimum match length, enabling optimizations + // such as finding matches via 32-bit loads and compares. + baseMatchLength = 3 // The smallest match length per the RFC section 3.2.5 + minMatchLength = 4 // The smallest match length that the compressor actually emits + maxMatchLength = 258 // The largest match length + baseMatchOffset = 1 // The smallest match offset + maxMatchOffset = 1 << 15 // The largest match offset + + // The maximum number of tokens we put into a single flate block, just to + // stop things from getting too large. + maxFlateBlockTokens = 1 << 14 + maxStoreBlockSize = 65535 + hashBits = 17 // After 17 performance degrades + hashSize = 1 << hashBits + hashMask = (1 << hashBits) - 1 + maxHashOffset = 1 << 24 + + skipNever = math.MaxInt32 +) + +type compressionLevel struct { + level, good, lazy, nice, chain, fastSkipHashing int +} + +var levels = []compressionLevel{ + {0, 0, 0, 0, 0, 0}, // NoCompression. + {1, 0, 0, 0, 0, 0}, // BestSpeed uses a custom algorithm; see deflatefast.go. + // For levels 2-3 we don't bother trying with lazy matches. + {2, 4, 0, 16, 8, 5}, + {3, 4, 0, 32, 32, 6}, + // Levels 4-9 use increasingly more lazy matching + // and increasingly stringent conditions for "good enough". + {4, 4, 4, 16, 16, skipNever}, + {5, 8, 16, 32, 32, skipNever}, + {6, 8, 16, 128, 128, skipNever}, + {7, 8, 32, 128, 256, skipNever}, + {8, 32, 128, 258, 1024, skipNever}, + {9, 32, 258, 258, 4096, skipNever}, +} + +type compressor struct { + compressionLevel + + w *huffmanBitWriter + bulkHasher func([]byte, []uint32) + + // compression algorithm + fill func(*compressor, []byte) int // copy data to window + step func(*compressor) // process window + sync bool // requesting flush + bestSpeed *deflateFast // Encoder for BestSpeed + + // Input hash chains + // hashHead[hashValue] contains the largest inputIndex with the specified hash value + // If hashHead[hashValue] is within the current window, then + // hashPrev[hashHead[hashValue] & windowMask] contains the previous index + // with the same hash value. + chainHead int + hashHead [hashSize]uint32 + hashPrev [windowSize]uint32 + hashOffset int + + // input window: unprocessed data is window[index:windowEnd] + index int + window []byte + windowEnd int + blockStart int // window index where current tokens start + byteAvailable bool // if true, still need to process window[index-1]. + + // queued output tokens + tokens []token + + // deflate state + length int + offset int + hash uint32 + maxInsertIndex int + err error + + // hashMatch must be able to contain hashes for the maximum match length. + hashMatch [maxMatchLength - 1]uint32 +} + +func (d *compressor) fillDeflate(b []byte) int { + if d.index >= 2*windowSize-(minMatchLength+maxMatchLength) { + // shift the window by windowSize + copy(d.window, d.window[windowSize:2*windowSize]) + d.index -= windowSize + d.windowEnd -= windowSize + if d.blockStart >= windowSize { + d.blockStart -= windowSize + } else { + d.blockStart = math.MaxInt32 + } + d.hashOffset += windowSize + if d.hashOffset > maxHashOffset { + delta := d.hashOffset - 1 + d.hashOffset -= delta + d.chainHead -= delta + + // Iterate over slices instead of arrays to avoid copying + // the entire table onto the stack (Issue #18625). + for i, v := range d.hashPrev[:] { + if int(v) > delta { + d.hashPrev[i] = uint32(int(v) - delta) + } else { + d.hashPrev[i] = 0 + } + } + for i, v := range d.hashHead[:] { + if int(v) > delta { + d.hashHead[i] = uint32(int(v) - delta) + } else { + d.hashHead[i] = 0 + } + } + } + } + n := copy(d.window[d.windowEnd:], b) + d.windowEnd += n + return n +} + +func (d *compressor) writeBlock(tokens []token, index int) error { + if index > 0 { + var window []byte + if d.blockStart <= index { + window = d.window[d.blockStart:index] + } + d.blockStart = index + d.w.writeBlock(tokens, false, window) + return d.w.err + } + return nil +} + +// fillWindow will fill the current window with the supplied +// dictionary and calculate all hashes. +// This is much faster than doing a full encode. +// Should only be used after a reset. +func (d *compressor) fillWindow(b []byte) { + // Do not fill window if we are in store-only mode. + if d.compressionLevel.level < 2 { + return + } + if d.index != 0 || d.windowEnd != 0 { + panic("internal error: fillWindow called with stale data") + } + + // If we are given too much, cut it. + if len(b) > windowSize { + b = b[len(b)-windowSize:] + } + // Add all to window. + n := copy(d.window, b) + + // Calculate 256 hashes at the time (more L1 cache hits) + loops := (n + 256 - minMatchLength) / 256 + for j := 0; j < loops; j++ { + index := j * 256 + end := index + 256 + minMatchLength - 1 + if end > n { + end = n + } + toCheck := d.window[index:end] + dstSize := len(toCheck) - minMatchLength + 1 + + if dstSize <= 0 { + continue + } + + dst := d.hashMatch[:dstSize] + d.bulkHasher(toCheck, dst) + var newH uint32 + for i, val := range dst { + di := i + index + newH = val + hh := &d.hashHead[newH&hashMask] + // Get previous value with the same hash. + // Our chain should point to the previous value. + d.hashPrev[di&windowMask] = *hh + // Set the head of the hash chain to us. + *hh = uint32(di + d.hashOffset) + } + d.hash = newH + } + // Update window information. + d.windowEnd = n + d.index = n +} + +// Try to find a match starting at index whose length is greater than prevSize. +// We only look at chainCount possibilities before giving up. +func (d *compressor) findMatch(pos int, prevHead int, prevLength int, lookahead int) (length, offset int, ok bool) { + minMatchLook := maxMatchLength + if lookahead < minMatchLook { + minMatchLook = lookahead + } + + win := d.window[0 : pos+minMatchLook] + + // We quit when we get a match that's at least nice long + nice := len(win) - pos + if d.nice < nice { + nice = d.nice + } + + // If we've got a match that's good enough, only look in 1/4 the chain. + tries := d.chain + length = prevLength + if length >= d.good { + tries >>= 2 + } + + wEnd := win[pos+length] + wPos := win[pos:] + minIndex := pos - windowSize + + for i := prevHead; tries > 0; tries-- { + if wEnd == win[i+length] { + n := matchLen(win[i:], wPos, minMatchLook) + + if n > length && (n > minMatchLength || pos-i <= 4096) { + length = n + offset = pos - i + ok = true + if n >= nice { + // The match is good enough that we don't try to find a better one. + break + } + wEnd = win[pos+n] + } + } + if i == minIndex { + // hashPrev[i & windowMask] has already been overwritten, so stop now. + break + } + i = int(d.hashPrev[i&windowMask]) - d.hashOffset + if i < minIndex || i < 0 { + break + } + } + return +} + +func (d *compressor) writeStoredBlock(buf []byte) error { + if d.w.writeStoredHeader(len(buf), false); d.w.err != nil { + return d.w.err + } + d.w.writeBytes(buf) + return d.w.err +} + +const hashmul = 0x1e35a7bd + +// hash4 returns a hash representation of the first 4 bytes +// of the supplied slice. +// The caller must ensure that len(b) >= 4. +func hash4(b []byte) uint32 { + return ((uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24) * hashmul) >> (32 - hashBits) +} + +// bulkHash4 will compute hashes using the same +// algorithm as hash4 +func bulkHash4(b []byte, dst []uint32) { + if len(b) < minMatchLength { + return + } + hb := uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24 + dst[0] = (hb * hashmul) >> (32 - hashBits) + end := len(b) - minMatchLength + 1 + for i := 1; i < end; i++ { + hb = (hb << 8) | uint32(b[i+3]) + dst[i] = (hb * hashmul) >> (32 - hashBits) + } +} + +// matchLen returns the number of matching bytes in a and b +// up to length 'max'. Both slices must be at least 'max' +// bytes in size. +func matchLen(a, b []byte, max int) int { + a = a[:max] + b = b[:len(a)] + for i, av := range a { + if b[i] != av { + return i + } + } + return max +} + +// encSpeed will compress and store the currently added data, +// if enough has been accumulated or we at the end of the stream. +// Any error that occurred will be in d.err +func (d *compressor) encSpeed() { + // We only compress if we have maxStoreBlockSize. + if d.windowEnd < maxStoreBlockSize { + if !d.sync { + return + } + + // Handle small sizes. + if d.windowEnd < 128 { + switch { + case d.windowEnd == 0: + return + case d.windowEnd <= 16: + d.err = d.writeStoredBlock(d.window[:d.windowEnd]) + default: + d.w.writeBlockHuff(false, d.window[:d.windowEnd]) + d.err = d.w.err + } + d.windowEnd = 0 + d.bestSpeed.reset() + return + } + + } + // Encode the block. + d.tokens = d.bestSpeed.encode(d.tokens[:0], d.window[:d.windowEnd]) + + // If we removed less than 1/16th, Huffman compress the block. + if len(d.tokens) > d.windowEnd-(d.windowEnd>>4) { + d.w.writeBlockHuff(false, d.window[:d.windowEnd]) + } else { + d.w.writeBlockDynamic(d.tokens, false, d.window[:d.windowEnd]) + } + d.err = d.w.err + d.windowEnd = 0 +} + +func (d *compressor) initDeflate() { + d.window = make([]byte, 2*windowSize) + d.hashOffset = 1 + d.tokens = make([]token, 0, maxFlateBlockTokens+1) + d.length = minMatchLength - 1 + d.offset = 0 + d.byteAvailable = false + d.index = 0 + d.hash = 0 + d.chainHead = -1 + d.bulkHasher = bulkHash4 +} + +func (d *compressor) deflate() { + if d.windowEnd-d.index < minMatchLength+maxMatchLength && !d.sync { + return + } + + d.maxInsertIndex = d.windowEnd - (minMatchLength - 1) + if d.index < d.maxInsertIndex { + d.hash = hash4(d.window[d.index : d.index+minMatchLength]) + } + +Loop: + for { + if d.index > d.windowEnd { + panic("index > windowEnd") + } + lookahead := d.windowEnd - d.index + if lookahead < minMatchLength+maxMatchLength { + if !d.sync { + break Loop + } + if d.index > d.windowEnd { + panic("index > windowEnd") + } + if lookahead == 0 { + // Flush current output block if any. + if d.byteAvailable { + // There is still one pending token that needs to be flushed + d.tokens = append(d.tokens, literalToken(uint32(d.window[d.index-1]))) + d.byteAvailable = false + } + if len(d.tokens) > 0 { + if d.err = d.writeBlock(d.tokens, d.index); d.err != nil { + return + } + d.tokens = d.tokens[:0] + } + break Loop + } + } + if d.index < d.maxInsertIndex { + // Update the hash + d.hash = hash4(d.window[d.index : d.index+minMatchLength]) + hh := &d.hashHead[d.hash&hashMask] + d.chainHead = int(*hh) + d.hashPrev[d.index&windowMask] = uint32(d.chainHead) + *hh = uint32(d.index + d.hashOffset) + } + prevLength := d.length + prevOffset := d.offset + d.length = minMatchLength - 1 + d.offset = 0 + minIndex := d.index - windowSize + if minIndex < 0 { + minIndex = 0 + } + + if d.chainHead-d.hashOffset >= minIndex && + (d.fastSkipHashing != skipNever && lookahead > minMatchLength-1 || + d.fastSkipHashing == skipNever && lookahead > prevLength && prevLength < d.lazy) { + if newLength, newOffset, ok := d.findMatch(d.index, d.chainHead-d.hashOffset, minMatchLength-1, lookahead); ok { + d.length = newLength + d.offset = newOffset + } + } + if d.fastSkipHashing != skipNever && d.length >= minMatchLength || + d.fastSkipHashing == skipNever && prevLength >= minMatchLength && d.length <= prevLength { + // There was a match at the previous step, and the current match is + // not better. Output the previous match. + if d.fastSkipHashing != skipNever { + d.tokens = append(d.tokens, matchToken(uint32(d.length-baseMatchLength), uint32(d.offset-baseMatchOffset))) + } else { + d.tokens = append(d.tokens, matchToken(uint32(prevLength-baseMatchLength), uint32(prevOffset-baseMatchOffset))) + } + // Insert in the hash table all strings up to the end of the match. + // index and index-1 are already inserted. If there is not enough + // lookahead, the last two strings are not inserted into the hash + // table. + if d.length <= d.fastSkipHashing { + var newIndex int + if d.fastSkipHashing != skipNever { + newIndex = d.index + d.length + } else { + newIndex = d.index + prevLength - 1 + } + index := d.index + for index++; index < newIndex; index++ { + if index < d.maxInsertIndex { + d.hash = hash4(d.window[index : index+minMatchLength]) + // Get previous value with the same hash. + // Our chain should point to the previous value. + hh := &d.hashHead[d.hash&hashMask] + d.hashPrev[index&windowMask] = *hh + // Set the head of the hash chain to us. + *hh = uint32(index + d.hashOffset) + } + } + d.index = index + + if d.fastSkipHashing == skipNever { + d.byteAvailable = false + d.length = minMatchLength - 1 + } + } else { + // For matches this long, we don't bother inserting each individual + // item into the table. + d.index += d.length + if d.index < d.maxInsertIndex { + d.hash = hash4(d.window[d.index : d.index+minMatchLength]) + } + } + if len(d.tokens) == maxFlateBlockTokens { + // The block includes the current character + if d.err = d.writeBlock(d.tokens, d.index); d.err != nil { + return + } + d.tokens = d.tokens[:0] + } + } else { + if d.fastSkipHashing != skipNever || d.byteAvailable { + i := d.index - 1 + if d.fastSkipHashing != skipNever { + i = d.index + } + d.tokens = append(d.tokens, literalToken(uint32(d.window[i]))) + if len(d.tokens) == maxFlateBlockTokens { + if d.err = d.writeBlock(d.tokens, i+1); d.err != nil { + return + } + d.tokens = d.tokens[:0] + } + } + d.index++ + if d.fastSkipHashing == skipNever { + d.byteAvailable = true + } + } + } +} + +func (d *compressor) fillStore(b []byte) int { + n := copy(d.window[d.windowEnd:], b) + d.windowEnd += n + return n +} + +func (d *compressor) store() { + if d.windowEnd > 0 && (d.windowEnd == maxStoreBlockSize || d.sync) { + d.err = d.writeStoredBlock(d.window[:d.windowEnd]) + d.windowEnd = 0 + } +} + +// storeHuff compresses and stores the currently added data +// when the d.window is full or we are at the end of the stream. +// Any error that occurred will be in d.err +func (d *compressor) storeHuff() { + if d.windowEnd < len(d.window) && !d.sync || d.windowEnd == 0 { + return + } + d.w.writeBlockHuff(false, d.window[:d.windowEnd]) + d.err = d.w.err + d.windowEnd = 0 +} + +func (d *compressor) write(b []byte) (n int, err error) { + if d.err != nil { + return 0, d.err + } + n = len(b) + for len(b) > 0 { + d.step(d) + b = b[d.fill(d, b):] + if d.err != nil { + return 0, d.err + } + } + return n, nil +} + +func (d *compressor) syncFlush() error { + if d.err != nil { + return d.err + } + d.sync = true + d.step(d) + if d.err == nil { + d.w.writeStoredHeader(0, false) + d.w.flush() + d.err = d.w.err + } + d.sync = false + return d.err +} + +func (d *compressor) init(w io.Writer, level int) (err error) { + d.w = newHuffmanBitWriter(w) + + switch { + case level == NoCompression: + d.window = make([]byte, maxStoreBlockSize) + d.fill = (*compressor).fillStore + d.step = (*compressor).store + case level == HuffmanOnly: + d.window = make([]byte, maxStoreBlockSize) + d.fill = (*compressor).fillStore + d.step = (*compressor).storeHuff + case level == BestSpeed: + d.compressionLevel = levels[level] + d.window = make([]byte, maxStoreBlockSize) + d.fill = (*compressor).fillStore + d.step = (*compressor).encSpeed + d.bestSpeed = newDeflateFast() + d.tokens = make([]token, maxStoreBlockSize) + case level == DefaultCompression: + level = 6 + fallthrough + case 2 <= level && level <= 9: + d.compressionLevel = levels[level] + d.initDeflate() + d.fill = (*compressor).fillDeflate + d.step = (*compressor).deflate + default: + return fmt.Errorf("flate: invalid compression level %d: want value in range [-2, 9]", level) + } + return nil +} + +func (d *compressor) reset(w io.Writer) { + d.w.reset(w) + d.sync = false + d.err = nil + switch d.compressionLevel.level { + case NoCompression: + d.windowEnd = 0 + case BestSpeed: + d.windowEnd = 0 + d.tokens = d.tokens[:0] + d.bestSpeed.reset() + default: + d.chainHead = -1 + for i := range d.hashHead { + d.hashHead[i] = 0 + } + for i := range d.hashPrev { + d.hashPrev[i] = 0 + } + d.hashOffset = 1 + d.index, d.windowEnd = 0, 0 + d.blockStart, d.byteAvailable = 0, false + d.tokens = d.tokens[:0] + d.length = minMatchLength - 1 + d.offset = 0 + d.hash = 0 + d.maxInsertIndex = 0 + } +} + +func (d *compressor) close() error { + if d.err != nil { + return d.err + } + d.sync = true + d.step(d) + if d.err != nil { + return d.err + } + if d.w.writeStoredHeader(0, true); d.w.err != nil { + return d.w.err + } + d.w.flush() + return d.w.err +} + +// NewWriter returns a new Writer compressing data at the given level. +// Following zlib, levels range from 1 (BestSpeed) to 9 (BestCompression); +// higher levels typically run slower but compress more. Level 0 +// (NoCompression) does not attempt any compression; it only adds the +// necessary DEFLATE framing. +// Level -1 (DefaultCompression) uses the default compression level. +// Level -2 (HuffmanOnly) will use Huffman compression only, giving +// a very fast compression for all types of input, but sacrificing considerable +// compression efficiency. +// +// If level is in the range [-2, 9] then the error returned will be nil. +// Otherwise the error returned will be non-nil. +func NewWriter(w io.Writer, level int) (*Writer, error) { + var dw Writer + if err := dw.d.init(w, level); err != nil { + return nil, err + } + return &dw, nil +} + +// NewWriterDict is like NewWriter but initializes the new +// Writer with a preset dictionary. The returned Writer behaves +// as if the dictionary had been written to it without producing +// any compressed output. The compressed data written to w +// can only be decompressed by a Reader initialized with the +// same dictionary. +func NewWriterDict(w io.Writer, level int, dict []byte) (*Writer, error) { + dw := &dictWriter{w} + zw, err := NewWriter(dw, level) + if err != nil { + return nil, err + } + zw.d.fillWindow(dict) + zw.dict = append(zw.dict, dict...) // duplicate dictionary for Reset method. + return zw, err +} + +type dictWriter struct { + w io.Writer +} + +func (w *dictWriter) Write(b []byte) (n int, err error) { + return w.w.Write(b) +} + +// A Writer takes data written to it and writes the compressed +// form of that data to an underlying writer (see NewWriter). +type Writer struct { + d compressor + dict []byte +} + +// Write writes data to w, which will eventually write the +// compressed form of data to its underlying writer. +func (w *Writer) Write(data []byte) (n int, err error) { + return w.d.write(data) +} + +// Flush flushes any pending data to the underlying writer. +// It is useful mainly in compressed network protocols, to ensure that +// a remote reader has enough data to reconstruct a packet. +// Flush does not return until the data has been written. +// Calling Flush when there is no pending data still causes the Writer +// to emit a sync marker of at least 4 bytes. +// If the underlying writer returns an error, Flush returns that error. +// +// In the terminology of the zlib library, Flush is equivalent to Z_SYNC_FLUSH. +func (w *Writer) Flush() error { + // For more about flushing: + // https://www.bolet.org/~pornin/deflate-flush.html + return w.d.syncFlush() +} + +// Close flushes and closes the writer. +func (w *Writer) Close() error { + return w.d.close() +} + +// Reset discards the writer's state and makes it equivalent to +// the result of NewWriter or NewWriterDict called with dst +// and w's level and dictionary. +func (w *Writer) Reset(dst io.Writer) { + if dw, ok := w.d.w.writer.(*dictWriter); ok { + // w was created with NewWriterDict + dw.w = dst + w.d.reset(dw) + w.d.fillWindow(w.dict) + } else { + // w was created with NewWriter + w.d.reset(dst) + } +} diff --git a/image/internal/compress/flate/deflate_test.go b/image/internal/compress/flate/deflate_test.go new file mode 100644 index 0000000..ff56712 --- /dev/null +++ b/image/internal/compress/flate/deflate_test.go @@ -0,0 +1,984 @@ +// 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 LICENSE file. + +package flate + +import ( + "bytes" + "errors" + "fmt" + "internal/testenv" + "io" + "math/rand" + "os" + "reflect" + "runtime/debug" + "sync" + "testing" +) + +type deflateTest struct { + in []byte + level int + out []byte +} + +type deflateInflateTest struct { + in []byte +} + +type reverseBitsTest struct { + in uint16 + bitCount uint8 + out uint16 +} + +var deflateTests = []*deflateTest{ + {[]byte{}, 0, []byte{1, 0, 0, 255, 255}}, + {[]byte{0x11}, -1, []byte{18, 4, 4, 0, 0, 255, 255}}, + {[]byte{0x11}, DefaultCompression, []byte{18, 4, 4, 0, 0, 255, 255}}, + {[]byte{0x11}, 4, []byte{18, 4, 4, 0, 0, 255, 255}}, + + {[]byte{0x11}, 0, []byte{0, 1, 0, 254, 255, 17, 1, 0, 0, 255, 255}}, + {[]byte{0x11, 0x12}, 0, []byte{0, 2, 0, 253, 255, 17, 18, 1, 0, 0, 255, 255}}, + {[]byte{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 0, + []byte{0, 8, 0, 247, 255, 17, 17, 17, 17, 17, 17, 17, 17, 1, 0, 0, 255, 255}, + }, + {[]byte{}, 2, []byte{1, 0, 0, 255, 255}}, + {[]byte{0x11}, 2, []byte{18, 4, 4, 0, 0, 255, 255}}, + {[]byte{0x11, 0x12}, 2, []byte{18, 20, 2, 4, 0, 0, 255, 255}}, + {[]byte{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 2, []byte{18, 132, 2, 64, 0, 0, 0, 255, 255}}, + {[]byte{}, 9, []byte{1, 0, 0, 255, 255}}, + {[]byte{0x11}, 9, []byte{18, 4, 4, 0, 0, 255, 255}}, + {[]byte{0x11, 0x12}, 9, []byte{18, 20, 2, 4, 0, 0, 255, 255}}, + {[]byte{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 9, []byte{18, 132, 2, 64, 0, 0, 0, 255, 255}}, +} + +var deflateInflateTests = []*deflateInflateTest{ + {[]byte{}}, + {[]byte{0x11}}, + {[]byte{0x11, 0x12}}, + {[]byte{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}}, + {[]byte{0x11, 0x10, 0x13, 0x41, 0x21, 0x21, 0x41, 0x13, 0x87, 0x78, 0x13}}, + {largeDataChunk()}, +} + +var reverseBitsTests = []*reverseBitsTest{ + {1, 1, 1}, + {1, 2, 2}, + {1, 3, 4}, + {1, 4, 8}, + {1, 5, 16}, + {17, 5, 17}, + {257, 9, 257}, + {29, 5, 23}, +} + +func largeDataChunk() []byte { + result := make([]byte, 100000) + for i := range result { + result[i] = byte(i * i & 0xFF) + } + return result +} + +func TestBulkHash4(t *testing.T) { + for _, x := range deflateTests { + y := x.out + if len(y) < minMatchLength { + continue + } + y = append(y, y...) + for j := 4; j < len(y); j++ { + y := y[:j] + dst := make([]uint32, len(y)-minMatchLength+1) + for i := range dst { + dst[i] = uint32(i + 100) + } + bulkHash4(y, dst) + for i, got := range dst { + want := hash4(y[i:]) + if got != want && got == uint32(i)+100 { + t.Errorf("Len:%d Index:%d, want 0x%08x but not modified", len(y), i, want) + } else if got != want { + t.Errorf("Len:%d Index:%d, got 0x%08x want:0x%08x", len(y), i, got, want) + } + } + } + } +} + +func TestDeflate(t *testing.T) { + for _, h := range deflateTests { + var buf bytes.Buffer + w, err := NewWriter(&buf, h.level) + if err != nil { + t.Errorf("NewWriter: %v", err) + continue + } + w.Write(h.in) + w.Close() + if !bytes.Equal(buf.Bytes(), h.out) { + t.Errorf("Deflate(%d, %x) = \n%#v, want \n%#v", h.level, h.in, buf.Bytes(), h.out) + } + } +} + +// A sparseReader returns a stream consisting of 0s followed by 1<<16 1s. +// This tests missing hash references in a very large input. +type sparseReader struct { + l int64 + cur int64 +} + +func (r *sparseReader) Read(b []byte) (n int, err error) { + if r.cur >= r.l { + return 0, io.EOF + } + n = len(b) + cur := r.cur + int64(n) + if cur > r.l { + n -= int(cur - r.l) + cur = r.l + } + for i := range b[0:n] { + if r.cur+int64(i) >= r.l-1<<16 { + b[i] = 1 + } else { + b[i] = 0 + } + } + r.cur = cur + return +} + +func TestVeryLongSparseChunk(t *testing.T) { + if testing.Short() { + t.Skip("skipping sparse chunk during short test") + } + w, err := NewWriter(io.Discard, 1) + if err != nil { + t.Errorf("NewWriter: %v", err) + return + } + if _, err = io.Copy(w, &sparseReader{l: 23e8}); err != nil { + t.Errorf("Compress failed: %v", err) + return + } +} + +type syncBuffer struct { + buf bytes.Buffer + mu sync.RWMutex + closed bool + ready chan bool +} + +func newSyncBuffer() *syncBuffer { + return &syncBuffer{ready: make(chan bool, 1)} +} + +func (b *syncBuffer) Read(p []byte) (n int, err error) { + for { + b.mu.RLock() + n, err = b.buf.Read(p) + b.mu.RUnlock() + if n > 0 || b.closed { + return + } + <-b.ready + } +} + +func (b *syncBuffer) signal() { + select { + case b.ready <- true: + default: + } +} + +func (b *syncBuffer) Write(p []byte) (n int, err error) { + n, err = b.buf.Write(p) + b.signal() + return +} + +func (b *syncBuffer) WriteMode() { + b.mu.Lock() +} + +func (b *syncBuffer) ReadMode() { + b.mu.Unlock() + b.signal() +} + +func (b *syncBuffer) Close() error { + b.closed = true + b.signal() + return nil +} + +func testSync(t *testing.T, level int, input []byte, name string) { + if len(input) == 0 { + return + } + + t.Logf("--testSync %d, %d, %s", level, len(input), name) + buf := newSyncBuffer() + buf1 := new(bytes.Buffer) + buf.WriteMode() + w, err := NewWriter(io.MultiWriter(buf, buf1), level) + if err != nil { + t.Errorf("NewWriter: %v", err) + return + } + r := NewReader(buf) + + // Write half the input and read back. + for i := 0; i < 2; i++ { + var lo, hi int + if i == 0 { + lo, hi = 0, (len(input)+1)/2 + } else { + lo, hi = (len(input)+1)/2, len(input) + } + t.Logf("#%d: write %d-%d", i, lo, hi) + if _, err := w.Write(input[lo:hi]); err != nil { + t.Errorf("testSync: write: %v", err) + return + } + if i == 0 { + if err := w.Flush(); err != nil { + t.Errorf("testSync: flush: %v", err) + return + } + } else { + if err := w.Close(); err != nil { + t.Errorf("testSync: close: %v", err) + } + } + buf.ReadMode() + out := make([]byte, hi-lo+1) + m, err := io.ReadAtLeast(r, out, hi-lo) + t.Logf("#%d: read %d", i, m) + if m != hi-lo || err != nil { + t.Errorf("testSync/%d (%d, %d, %s): read %d: %d, %v (%d left)", i, level, len(input), name, hi-lo, m, err, buf.buf.Len()) + return + } + if !bytes.Equal(input[lo:hi], out[:hi-lo]) { + t.Errorf("testSync/%d: read wrong bytes: %x vs %x", i, input[lo:hi], out[:hi-lo]) + return + } + // This test originally checked that after reading + // the first half of the input, there was nothing left + // in the read buffer (buf.buf.Len() != 0) but that is + // not necessarily the case: the write Flush may emit + // some extra framing bits that are not necessary + // to process to obtain the first half of the uncompressed + // data. The test ran correctly most of the time, because + // the background goroutine had usually read even + // those extra bits by now, but it's not a useful thing to + // check. + buf.WriteMode() + } + buf.ReadMode() + out := make([]byte, 10) + if n, err := r.Read(out); n > 0 || err != io.EOF { + t.Errorf("testSync (%d, %d, %s): final Read: %d, %v (hex: %x)", level, len(input), name, n, err, out[0:n]) + } + if buf.buf.Len() != 0 { + t.Errorf("testSync (%d, %d, %s): extra data at end", level, len(input), name) + } + r.Close() + + // stream should work for ordinary reader too + r = NewReader(buf1) + out, err = io.ReadAll(r) + if err != nil { + t.Errorf("testSync: read: %s", err) + return + } + r.Close() + if !bytes.Equal(input, out) { + t.Errorf("testSync: decompress(compress(data)) != data: level=%d input=%s", level, name) + } +} + +func testToFromWithLevelAndLimit(t *testing.T, level int, input []byte, name string, limit int) { + var buffer bytes.Buffer + w, err := NewWriter(&buffer, level) + if err != nil { + t.Errorf("NewWriter: %v", err) + return + } + w.Write(input) + w.Close() + if limit > 0 && buffer.Len() > limit { + t.Errorf("level: %d, len(compress(data)) = %d > limit = %d", level, buffer.Len(), limit) + return + } + if limit > 0 { + t.Logf("level: %d, size:%.2f%%, %d b\n", level, float64(buffer.Len()*100)/float64(limit), buffer.Len()) + } + r := NewReader(&buffer) + out, err := io.ReadAll(r) + if err != nil { + t.Errorf("read: %s", err) + return + } + r.Close() + if !bytes.Equal(input, out) { + t.Errorf("decompress(compress(data)) != data: level=%d input=%s", level, name) + return + } + testSync(t, level, input, name) +} + +func testToFromWithLimit(t *testing.T, input []byte, name string, limit [11]int) { + for i := 0; i < 10; i++ { + testToFromWithLevelAndLimit(t, i, input, name, limit[i]) + } + // Test HuffmanCompression + testToFromWithLevelAndLimit(t, -2, input, name, limit[10]) +} + +func TestDeflateInflate(t *testing.T) { + t.Parallel() + for i, h := range deflateInflateTests { + if testing.Short() && len(h.in) > 10000 { + continue + } + testToFromWithLimit(t, h.in, fmt.Sprintf("#%d", i), [11]int{}) + } +} + +func TestReverseBits(t *testing.T) { + for _, h := range reverseBitsTests { + if v := reverseBits(h.in, h.bitCount); v != h.out { + t.Errorf("reverseBits(%v,%v) = %v, want %v", + h.in, h.bitCount, v, h.out) + } + } +} + +type deflateInflateStringTest struct { + filename string + label string + limit [11]int +} + +var deflateInflateStringTests = []deflateInflateStringTest{ + { + "../testdata/e.txt", + "2.718281828...", + [...]int{100018, 50650, 50960, 51150, 50930, 50790, 50790, 50790, 50790, 50790, 43683}, + }, + { + "../../testdata/Isaac.Newton-Opticks.txt", + "Isaac.Newton-Opticks", + [...]int{567248, 218338, 198211, 193152, 181100, 175427, 175427, 173597, 173422, 173422, 325240}, + }, +} + +func TestDeflateInflateString(t *testing.T) { + t.Parallel() + if testing.Short() && testenv.Builder() == "" { + t.Skip("skipping in short mode") + } + for _, test := range deflateInflateStringTests { + gold, err := os.ReadFile(test.filename) + if err != nil { + t.Error(err) + } + testToFromWithLimit(t, gold, test.label, test.limit) + if testing.Short() { + break + } + } +} + +func TestReaderDict(t *testing.T) { + const ( + dict = "hello world" + text = "hello again world" + ) + var b bytes.Buffer + w, err := NewWriter(&b, 5) + if err != nil { + t.Fatalf("NewWriter: %v", err) + } + w.Write([]byte(dict)) + w.Flush() + b.Reset() + w.Write([]byte(text)) + w.Close() + + r := NewReaderDict(&b, []byte(dict)) + data, err := io.ReadAll(r) + if err != nil { + t.Fatal(err) + } + if string(data) != "hello again world" { + t.Fatalf("read returned %q want %q", string(data), text) + } +} + +func TestWriterDict(t *testing.T) { + const ( + dict = "hello world" + text = "hello again world" + ) + var b bytes.Buffer + w, err := NewWriter(&b, 5) + if err != nil { + t.Fatalf("NewWriter: %v", err) + } + w.Write([]byte(dict)) + w.Flush() + b.Reset() + w.Write([]byte(text)) + w.Close() + + var b1 bytes.Buffer + w, _ = NewWriterDict(&b1, 5, []byte(dict)) + w.Write([]byte(text)) + w.Close() + + if !bytes.Equal(b1.Bytes(), b.Bytes()) { + t.Fatalf("writer wrote %q want %q", b1.Bytes(), b.Bytes()) + } +} + +// See https://golang.org/issue/2508 +func TestRegression2508(t *testing.T) { + if testing.Short() { + t.Logf("test disabled with -short") + return + } + w, err := NewWriter(io.Discard, 1) + if err != nil { + t.Fatalf("NewWriter: %v", err) + } + buf := make([]byte, 1024) + for i := 0; i < 131072; i++ { + if _, err := w.Write(buf); err != nil { + t.Fatalf("writer failed: %v", err) + } + } + w.Close() +} + +func TestWriterReset(t *testing.T) { + t.Parallel() + for level := 0; level <= 9; level++ { + if testing.Short() && level > 1 { + break + } + w, err := NewWriter(io.Discard, level) + if err != nil { + t.Fatalf("NewWriter: %v", err) + } + buf := []byte("hello world") + n := 1024 + if testing.Short() { + n = 10 + } + for i := 0; i < n; i++ { + w.Write(buf) + } + w.Reset(io.Discard) + + wref, err := NewWriter(io.Discard, level) + if err != nil { + t.Fatalf("NewWriter: %v", err) + } + + // DeepEqual doesn't compare functions. + w.d.fill, wref.d.fill = nil, nil + w.d.step, wref.d.step = nil, nil + w.d.bulkHasher, wref.d.bulkHasher = nil, nil + w.d.bestSpeed, wref.d.bestSpeed = nil, nil + // hashMatch is always overwritten when used. + copy(w.d.hashMatch[:], wref.d.hashMatch[:]) + if len(w.d.tokens) != 0 { + t.Errorf("level %d Writer not reset after Reset. %d tokens were present", level, len(w.d.tokens)) + } + // As long as the length is 0, we don't care about the content. + w.d.tokens = wref.d.tokens + + // We don't care if there are values in the window, as long as it is at d.index is 0 + w.d.window = wref.d.window + if !reflect.DeepEqual(w, wref) { + t.Errorf("level %d Writer not reset after Reset", level) + } + } + + levels := []int{0, 1, 2, 5, 9} + for _, level := range levels { + t.Run(fmt.Sprint(level), func(t *testing.T) { + testResetOutput(t, level, nil) + }) + } + + t.Run("dict", func(t *testing.T) { + for _, level := range levels { + t.Run(fmt.Sprint(level), func(t *testing.T) { + testResetOutput(t, level, nil) + }) + } + }) +} + +func testResetOutput(t *testing.T, level int, dict []byte) { + writeData := func(w *Writer) { + msg := []byte("now is the time for all good gophers") + w.Write(msg) + w.Flush() + + hello := []byte("hello world") + for i := 0; i < 1024; i++ { + w.Write(hello) + } + + fill := bytes.Repeat([]byte("x"), 65000) + w.Write(fill) + } + + buf := new(bytes.Buffer) + var w *Writer + var err error + if dict == nil { + w, err = NewWriter(buf, level) + } else { + w, err = NewWriterDict(buf, level, dict) + } + if err != nil { + t.Fatalf("NewWriter: %v", err) + } + + writeData(w) + w.Close() + out1 := buf.Bytes() + + buf2 := new(bytes.Buffer) + w.Reset(buf2) + writeData(w) + w.Close() + out2 := buf2.Bytes() + + if len(out1) != len(out2) { + t.Errorf("got %d, expected %d bytes", len(out2), len(out1)) + return + } + if !bytes.Equal(out1, out2) { + mm := 0 + for i, b := range out1[:len(out2)] { + if b != out2[i] { + t.Errorf("mismatch index %d: %#02x, expected %#02x", i, out2[i], b) + } + mm++ + if mm == 10 { + t.Fatal("Stopping") + } + } + } + t.Logf("got %d bytes", len(out1)) +} + +// TestBestSpeed tests that round-tripping through deflate and then inflate +// recovers the original input. The Write sizes are near the thresholds in the +// compressor.encSpeed method (0, 16, 128), as well as near maxStoreBlockSize +// (65535). +func TestBestSpeed(t *testing.T) { + t.Parallel() + abc := make([]byte, 128) + for i := range abc { + abc[i] = byte(i) + } + abcabc := bytes.Repeat(abc, 131072/len(abc)) + var want []byte + + testCases := [][]int{ + {65536, 0}, + {65536, 1}, + {65536, 1, 256}, + {65536, 1, 65536}, + {65536, 14}, + {65536, 15}, + {65536, 16}, + {65536, 16, 256}, + {65536, 16, 65536}, + {65536, 127}, + {65536, 128}, + {65536, 128, 256}, + {65536, 128, 65536}, + {65536, 129}, + {65536, 65536, 256}, + {65536, 65536, 65536}, + } + + for i, tc := range testCases { + if i >= 3 && testing.Short() { + break + } + for _, firstN := range []int{1, 65534, 65535, 65536, 65537, 131072} { + tc[0] = firstN + outer: + for _, flush := range []bool{false, true} { + buf := new(bytes.Buffer) + want = want[:0] + + w, err := NewWriter(buf, BestSpeed) + if err != nil { + t.Errorf("i=%d, firstN=%d, flush=%t: NewWriter: %v", i, firstN, flush, err) + continue + } + for _, n := range tc { + want = append(want, abcabc[:n]...) + if _, err := w.Write(abcabc[:n]); err != nil { + t.Errorf("i=%d, firstN=%d, flush=%t: Write: %v", i, firstN, flush, err) + continue outer + } + if !flush { + continue + } + if err := w.Flush(); err != nil { + t.Errorf("i=%d, firstN=%d, flush=%t: Flush: %v", i, firstN, flush, err) + continue outer + } + } + if err := w.Close(); err != nil { + t.Errorf("i=%d, firstN=%d, flush=%t: Close: %v", i, firstN, flush, err) + continue + } + + r := NewReader(buf) + got, err := io.ReadAll(r) + if err != nil { + t.Errorf("i=%d, firstN=%d, flush=%t: ReadAll: %v", i, firstN, flush, err) + continue + } + r.Close() + + if !bytes.Equal(got, want) { + t.Errorf("i=%d, firstN=%d, flush=%t: corruption during deflate-then-inflate", i, firstN, flush) + continue + } + } + } + } +} + +var errIO = errors.New("IO error") + +// failWriter fails with errIO exactly at the nth call to Write. +type failWriter struct{ n int } + +func (w *failWriter) Write(b []byte) (int, error) { + w.n-- + if w.n == -1 { + return 0, errIO + } + return len(b), nil +} + +func TestWriterPersistentError(t *testing.T) { + t.Parallel() + d, err := os.ReadFile("../../testdata/Isaac.Newton-Opticks.txt") + if err != nil { + t.Fatalf("ReadFile: %v", err) + } + d = d[:10000] // Keep this test short + + zw, err := NewWriter(nil, DefaultCompression) + if err != nil { + t.Fatalf("NewWriter: %v", err) + } + + // Sweep over the threshold at which an error is returned. + // The variable i makes it such that the ith call to failWriter.Write will + // return errIO. Since failWriter errors are not persistent, we must ensure + // that flate.Writer errors are persistent. + for i := 0; i < 1000; i++ { + fw := &failWriter{i} + zw.Reset(fw) + + _, werr := zw.Write(d) + cerr := zw.Close() + if werr != errIO && werr != nil { + t.Errorf("test %d, mismatching Write error: got %v, want %v", i, werr, errIO) + } + if cerr != errIO && fw.n < 0 { + t.Errorf("test %d, mismatching Close error: got %v, want %v", i, cerr, errIO) + } + if fw.n >= 0 { + // At this point, the failure threshold was sufficiently high enough + // that we wrote the whole stream without any errors. + return + } + } +} + +func TestBestSpeedMatch(t *testing.T) { + t.Parallel() + cases := []struct { + previous, current []byte + t, s, want int32 + }{{ + previous: []byte{0, 0, 0, 1, 2}, + current: []byte{3, 4, 5, 0, 1, 2, 3, 4, 5}, + t: -3, + s: 3, + want: 6, + }, { + previous: []byte{0, 0, 0, 1, 2}, + current: []byte{2, 4, 5, 0, 1, 2, 3, 4, 5}, + t: -3, + s: 3, + want: 3, + }, { + previous: []byte{0, 0, 0, 1, 1}, + current: []byte{3, 4, 5, 0, 1, 2, 3, 4, 5}, + t: -3, + s: 3, + want: 2, + }, { + previous: []byte{0, 0, 0, 1, 2}, + current: []byte{2, 2, 2, 2, 1, 2, 3, 4, 5}, + t: -1, + s: 0, + want: 4, + }, { + previous: []byte{0, 0, 0, 1, 2, 3, 4, 5, 2, 2}, + current: []byte{2, 2, 2, 2, 1, 2, 3, 4, 5}, + t: -7, + s: 4, + want: 5, + }, { + previous: []byte{9, 9, 9, 9, 9}, + current: []byte{2, 2, 2, 2, 1, 2, 3, 4, 5}, + t: -1, + s: 0, + want: 0, + }, { + previous: []byte{9, 9, 9, 9, 9}, + current: []byte{9, 2, 2, 2, 1, 2, 3, 4, 5}, + t: 0, + s: 1, + want: 0, + }, { + previous: []byte{}, + current: []byte{9, 2, 2, 2, 1, 2, 3, 4, 5}, + t: -5, + s: 1, + want: 0, + }, { + previous: []byte{}, + current: []byte{9, 2, 2, 2, 1, 2, 3, 4, 5}, + t: -1, + s: 1, + want: 0, + }, { + previous: []byte{}, + current: []byte{2, 2, 2, 2, 1, 2, 3, 4, 5}, + t: 0, + s: 1, + want: 3, + }, { + previous: []byte{3, 4, 5}, + current: []byte{3, 4, 5}, + t: -3, + s: 0, + want: 3, + }, { + previous: make([]byte, 1000), + current: make([]byte, 1000), + t: -1000, + s: 0, + want: maxMatchLength - 4, + }, { + previous: make([]byte, 200), + current: make([]byte, 500), + t: -200, + s: 0, + want: maxMatchLength - 4, + }, { + previous: make([]byte, 200), + current: make([]byte, 500), + t: 0, + s: 1, + want: maxMatchLength - 4, + }, { + previous: make([]byte, maxMatchLength-4), + current: make([]byte, 500), + t: -(maxMatchLength - 4), + s: 0, + want: maxMatchLength - 4, + }, { + previous: make([]byte, 200), + current: make([]byte, 500), + t: -200, + s: 400, + want: 100, + }, { + previous: make([]byte, 10), + current: make([]byte, 500), + t: 200, + s: 400, + want: 100, + }} + for i, c := range cases { + e := deflateFast{prev: c.previous} + got := e.matchLen(c.s, c.t, c.current) + if got != c.want { + t.Errorf("Test %d: match length, want %d, got %d", i, c.want, got) + } + } +} + +func TestBestSpeedMaxMatchOffset(t *testing.T) { + t.Parallel() + const abc, xyz = "abcdefgh", "stuvwxyz" + for _, matchBefore := range []bool{false, true} { + for _, extra := range []int{0, inputMargin - 1, inputMargin, inputMargin + 1, 2 * inputMargin} { + for offsetAdj := -5; offsetAdj <= +5; offsetAdj++ { + report := func(desc string, err error) { + t.Errorf("matchBefore=%t, extra=%d, offsetAdj=%d: %s%v", + matchBefore, extra, offsetAdj, desc, err) + } + + offset := maxMatchOffset + offsetAdj + + // Make src to be a []byte of the form + // "%s%s%s%s%s" % (abc, zeros0, xyzMaybe, abc, zeros1) + // where: + // zeros0 is approximately maxMatchOffset zeros. + // xyzMaybe is either xyz or the empty string. + // zeros1 is between 0 and 30 zeros. + // The difference between the two abc's will be offset, which + // is maxMatchOffset plus or minus a small adjustment. + src := make([]byte, offset+len(abc)+extra) + copy(src, abc) + if !matchBefore { + copy(src[offset-len(xyz):], xyz) + } + copy(src[offset:], abc) + + buf := new(bytes.Buffer) + w, err := NewWriter(buf, BestSpeed) + if err != nil { + report("NewWriter: ", err) + continue + } + if _, err := w.Write(src); err != nil { + report("Write: ", err) + continue + } + if err := w.Close(); err != nil { + report("Writer.Close: ", err) + continue + } + + r := NewReader(buf) + dst, err := io.ReadAll(r) + r.Close() + if err != nil { + report("ReadAll: ", err) + continue + } + + if !bytes.Equal(dst, src) { + report("", fmt.Errorf("bytes differ after round-tripping")) + continue + } + } + } + } +} + +func TestBestSpeedShiftOffsets(t *testing.T) { + // Test if shiftoffsets properly preserves matches and resets out-of-range matches + // seen in https://github.com/golang/go/issues/4142 + enc := newDeflateFast() + + // testData may not generate internal matches. + testData := make([]byte, 32) + rng := rand.New(rand.NewSource(0)) + for i := range testData { + testData[i] = byte(rng.Uint32()) + } + + // Encode the testdata with clean state. + // Second part should pick up matches from the first block. + wantFirstTokens := len(enc.encode(nil, testData)) + wantSecondTokens := len(enc.encode(nil, testData)) + + if wantFirstTokens <= wantSecondTokens { + t.Fatalf("test needs matches between inputs to be generated") + } + // Forward the current indicator to before wraparound. + enc.cur = bufferReset - int32(len(testData)) + + // Part 1 before wrap, should match clean state. + got := len(enc.encode(nil, testData)) + if wantFirstTokens != got { + t.Errorf("got %d, want %d tokens", got, wantFirstTokens) + } + + // Verify we are about to wrap. + if enc.cur != bufferReset { + t.Errorf("got %d, want e.cur to be at bufferReset (%d)", enc.cur, bufferReset) + } + + // Part 2 should match clean state as well even if wrapped. + got = len(enc.encode(nil, testData)) + if wantSecondTokens != got { + t.Errorf("got %d, want %d token", got, wantSecondTokens) + } + + // Verify that we wrapped. + if enc.cur >= bufferReset { + t.Errorf("want e.cur to be < bufferReset (%d), got %d", bufferReset, enc.cur) + } + + // Forward the current buffer, leaving the matches at the bottom. + enc.cur = bufferReset + enc.shiftOffsets() + + // Ensure that no matches were picked up. + got = len(enc.encode(nil, testData)) + if wantFirstTokens != got { + t.Errorf("got %d, want %d tokens", got, wantFirstTokens) + } +} + +func TestMaxStackSize(t *testing.T) { + // This test must not run in parallel with other tests as debug.SetMaxStack + // affects all goroutines. + n := debug.SetMaxStack(1 << 16) + defer debug.SetMaxStack(n) + + var wg sync.WaitGroup + defer wg.Wait() + + b := make([]byte, 1<<20) + for level := HuffmanOnly; level <= BestCompression; level++ { + // Run in separate goroutine to increase probability of stack regrowth. + wg.Add(1) + go func(level int) { + defer wg.Done() + zw, err := NewWriter(io.Discard, level) + if err != nil { + t.Errorf("level %d, NewWriter() = %v, want nil", level, err) + } + if n, err := zw.Write(b); n != len(b) || err != nil { + t.Errorf("level %d, Write() = (%d, %v), want (%d, nil)", level, n, err, len(b)) + } + if err := zw.Close(); err != nil { + t.Errorf("level %d, Close() = %v, want nil", level, err) + } + zw.Reset(io.Discard) + }(level) + } +} diff --git a/image/internal/compress/flate/deflatefast.go b/image/internal/compress/flate/deflatefast.go new file mode 100644 index 0000000..6aa439f --- /dev/null +++ b/image/internal/compress/flate/deflatefast.go @@ -0,0 +1,309 @@ +// Copyright 2016 The Go 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 flate + +import "math" + +// This encoding algorithm, which prioritizes speed over output size, is +// based on Snappy's LZ77-style encoder: github.com/golang/snappy + +const ( + tableBits = 14 // Bits used in the table. + tableSize = 1 << tableBits // Size of the table. + tableMask = tableSize - 1 // Mask for table indices. Redundant, but can eliminate bounds checks. + tableShift = 32 - tableBits // Right-shift to get the tableBits most significant bits of a uint32. + + // Reset the buffer offset when reaching this. + // Offsets are stored between blocks as int32 values. + // Since the offset we are checking against is at the beginning + // of the buffer, we need to subtract the current and input + // buffer to not risk overflowing the int32. + bufferReset = math.MaxInt32 - maxStoreBlockSize*2 +) + +func load32(b []byte, i int32) uint32 { + b = b[i : i+4 : len(b)] // Help the compiler eliminate bounds checks on the next line. + return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 +} + +func load64(b []byte, i int32) uint64 { + b = b[i : i+8 : len(b)] // Help the compiler eliminate bounds checks on the next line. + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | + uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 +} + +func hash(u uint32) uint32 { + return (u * 0x1e35a7bd) >> tableShift +} + +// These constants are defined by the Snappy implementation so that its +// assembly implementation can fast-path some 16-bytes-at-a-time copies. They +// aren't necessary in the pure Go implementation, as we don't use those same +// optimizations, but using the same thresholds doesn't really hurt. +const ( + inputMargin = 16 - 1 + minNonLiteralBlockSize = 1 + 1 + inputMargin +) + +type tableEntry struct { + val uint32 // Value at destination + offset int32 +} + +// deflateFast maintains the table for matches, +// and the previous byte block for cross block matching. +type deflateFast struct { + table [tableSize]tableEntry + prev []byte // Previous block, zero length if unknown. + cur int32 // Current match offset. +} + +func newDeflateFast() *deflateFast { + return &deflateFast{cur: maxStoreBlockSize, prev: make([]byte, 0, maxStoreBlockSize)} +} + +// encode encodes a block given in src and appends tokens +// to dst and returns the result. +func (e *deflateFast) encode(dst []token, src []byte) []token { + // Ensure that e.cur doesn't wrap. + if e.cur >= bufferReset { + e.shiftOffsets() + } + + // This check isn't in the Snappy implementation, but there, the caller + // instead of the callee handles this case. + if len(src) < minNonLiteralBlockSize { + e.cur += maxStoreBlockSize + e.prev = e.prev[:0] + return emitLiteral(dst, src) + } + + // sLimit is when to stop looking for offset/length copies. The inputMargin + // lets us use a fast path for emitLiteral in the main loop, while we are + // looking for copies. + sLimit := int32(len(src) - inputMargin) + + // nextEmit is where in src the next emitLiteral should start from. + nextEmit := int32(0) + s := int32(0) + cv := load32(src, s) + nextHash := hash(cv) + + for { + // Copied from the C++ snappy implementation: + // + // Heuristic match skipping: If 32 bytes are scanned with no matches + // found, start looking only at every other byte. If 32 more bytes are + // scanned (or skipped), look at every third byte, etc.. When a match + // is found, immediately go back to looking at every byte. This is a + // small loss (~5% performance, ~0.1% density) for compressible data + // due to more bookkeeping, but for non-compressible data (such as + // JPEG) it's a huge win since the compressor quickly "realizes" the + // data is incompressible and doesn't bother looking for matches + // everywhere. + // + // The "skip" variable keeps track of how many bytes there are since + // the last match; dividing it by 32 (ie. right-shifting by five) gives + // the number of bytes to move ahead for each iteration. + skip := int32(32) + + nextS := s + var candidate tableEntry + for { + s = nextS + bytesBetweenHashLookups := skip >> 5 + nextS = s + bytesBetweenHashLookups + skip += bytesBetweenHashLookups + if nextS > sLimit { + goto emitRemainder + } + candidate = e.table[nextHash&tableMask] + now := load32(src, nextS) + e.table[nextHash&tableMask] = tableEntry{offset: s + e.cur, val: cv} + nextHash = hash(now) + + offset := s - (candidate.offset - e.cur) + if offset > maxMatchOffset || cv != candidate.val { + // Out of range or not matched. + cv = now + continue + } + break + } + + // A 4-byte match has been found. We'll later see if more than 4 bytes + // match. But, prior to the match, src[nextEmit:s] are unmatched. Emit + // them as literal bytes. + dst = emitLiteral(dst, src[nextEmit:s]) + + // Call emitCopy, and then see if another emitCopy could be our next + // move. Repeat until we find no match for the input immediately after + // what was consumed by the last emitCopy call. + // + // If we exit this loop normally then we need to call emitLiteral next, + // though we don't yet know how big the literal will be. We handle that + // by proceeding to the next iteration of the main loop. We also can + // exit this loop via goto if we get close to exhausting the input. + for { + // Invariant: we have a 4-byte match at s, and no need to emit any + // literal bytes prior to s. + + // Extend the 4-byte match as long as possible. + // + s += 4 + t := candidate.offset - e.cur + 4 + l := e.matchLen(s, t, src) + + // matchToken is flate's equivalent of Snappy's emitCopy. (length,offset) + dst = append(dst, matchToken(uint32(l+4-baseMatchLength), uint32(s-t-baseMatchOffset))) + s += l + nextEmit = s + if s >= sLimit { + goto emitRemainder + } + + // We could immediately start working at s now, but to improve + // compression we first update the hash table at s-1 and at s. If + // another emitCopy is not our next move, also calculate nextHash + // at s+1. At least on GOARCH=amd64, these three hash calculations + // are faster as one load64 call (with some shifts) instead of + // three load32 calls. + x := load64(src, s-1) + prevHash := hash(uint32(x)) + e.table[prevHash&tableMask] = tableEntry{offset: e.cur + s - 1, val: uint32(x)} + x >>= 8 + currHash := hash(uint32(x)) + candidate = e.table[currHash&tableMask] + e.table[currHash&tableMask] = tableEntry{offset: e.cur + s, val: uint32(x)} + + offset := s - (candidate.offset - e.cur) + if offset > maxMatchOffset || uint32(x) != candidate.val { + cv = uint32(x >> 8) + nextHash = hash(cv) + s++ + break + } + } + } + +emitRemainder: + if int(nextEmit) < len(src) { + dst = emitLiteral(dst, src[nextEmit:]) + } + e.cur += int32(len(src)) + e.prev = e.prev[:len(src)] + copy(e.prev, src) + return dst +} + +func emitLiteral(dst []token, lit []byte) []token { + for _, v := range lit { + dst = append(dst, literalToken(uint32(v))) + } + return dst +} + +// matchLen returns the match length between src[s:] and src[t:]. +// t can be negative to indicate the match is starting in e.prev. +// We assume that src[s-4:s] and src[t-4:t] already match. +func (e *deflateFast) matchLen(s, t int32, src []byte) int32 { + s1 := int(s) + maxMatchLength - 4 + if s1 > len(src) { + s1 = len(src) + } + + // If we are inside the current block + if t >= 0 { + b := src[t:] + a := src[s:s1] + b = b[:len(a)] + // Extend the match to be as long as possible. + for i := range a { + if a[i] != b[i] { + return int32(i) + } + } + return int32(len(a)) + } + + // We found a match in the previous block. + tp := int32(len(e.prev)) + t + if tp < 0 { + return 0 + } + + // Extend the match to be as long as possible. + a := src[s:s1] + b := e.prev[tp:] + if len(b) > len(a) { + b = b[:len(a)] + } + a = a[:len(b)] + for i := range b { + if a[i] != b[i] { + return int32(i) + } + } + + // If we reached our limit, we matched everything we are + // allowed to in the previous block and we return. + n := int32(len(b)) + if int(s+n) == s1 { + return n + } + + // Continue looking for more matches in the current block. + a = src[s+n : s1] + b = src[:len(a)] + for i := range a { + if a[i] != b[i] { + return int32(i) + n + } + } + return int32(len(a)) + n +} + +// Reset resets the encoding history. +// This ensures that no matches are made to the previous block. +func (e *deflateFast) reset() { + e.prev = e.prev[:0] + // Bump the offset, so all matches will fail distance check. + // Nothing should be >= e.cur in the table. + e.cur += maxMatchOffset + + // Protect against e.cur wraparound. + if e.cur >= bufferReset { + e.shiftOffsets() + } +} + +// shiftOffsets will shift down all match offset. +// This is only called in rare situations to prevent integer overflow. +// +// See https://golang.org/issue/18636 and https://github.com/golang/go/issues/34121. +func (e *deflateFast) shiftOffsets() { + if len(e.prev) == 0 { + // We have no history; just clear the table. + for i := range e.table[:] { + e.table[i] = tableEntry{} + } + e.cur = maxMatchOffset + 1 + return + } + + // Shift down everything in the table that isn't already too far away. + for i := range e.table[:] { + v := e.table[i].offset - e.cur + maxMatchOffset + 1 + if v < 0 { + // We want to reset e.cur to maxMatchOffset + 1, so we need to shift + // all table entries down by (e.cur - (maxMatchOffset + 1)). + // Because we ignore matches > maxMatchOffset, we can cap + // any negative offsets at 0. + v = 0 + } + e.table[i].offset = v + } + e.cur = maxMatchOffset + 1 +} diff --git a/image/internal/compress/flate/dict_decoder.go b/image/internal/compress/flate/dict_decoder.go new file mode 100644 index 0000000..c10ff2c --- /dev/null +++ b/image/internal/compress/flate/dict_decoder.go @@ -0,0 +1,186 @@ +// Copyright 2016 The Go 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 flate + +// dictDecoder implements the LZ77 sliding dictionary as used in decompression. +// LZ77 decompresses data through sequences of two forms of commands: +// +// * Literal insertions: Runs of one or more symbols are inserted into the data +// stream as is. This is accomplished through the writeByte method for a +// single symbol, or combinations of writeSlice/writeMark for multiple symbols. +// Any valid stream must start with a literal insertion if no preset dictionary +// is used. +// +// * Backward copies: Runs of one or more symbols are copied from previously +// emitted data. Backward copies come as the tuple (dist, length) where dist +// determines how far back in the stream to copy from and length determines how +// many bytes to copy. Note that it is valid for the length to be greater than +// the distance. Since LZ77 uses forward copies, that situation is used to +// perform a form of run-length encoding on repeated runs of symbols. +// The writeCopy and tryWriteCopy are used to implement this command. +// +// For performance reasons, this implementation performs little to no sanity +// checks about the arguments. As such, the invariants documented for each +// method call must be respected. +type dictDecoder struct { + hist []byte // Sliding window history + + // Invariant: 0 <= rdPos <= wrPos <= len(hist) + wrPos int // Current output position in buffer + rdPos int // Have emitted hist[:rdPos] already + full bool // Has a full window length been written yet? +} + +// To minimize the memory usage in TinyGo, it is defined as a fixed array +// instead of a make(). +var ddHistBuf [1 << 15]byte + +// init initializes dictDecoder to have a sliding window dictionary of the given +// size. If a preset dict is provided, it will initialize the dictionary with +// the contents of dict. +func (dd *dictDecoder) init(size int, dict []byte) { + *dd = dictDecoder{hist: dd.hist} + + if cap(dd.hist) < size { + dd.hist = ddHistBuf[:size] + } + dd.hist = dd.hist[:size] + + if len(dict) > len(dd.hist) { + dict = dict[len(dict)-len(dd.hist):] + } + dd.wrPos = copy(dd.hist, dict) + if dd.wrPos == len(dd.hist) { + dd.wrPos = 0 + dd.full = true + } + dd.rdPos = dd.wrPos +} + +// histSize reports the total amount of historical data in the dictionary. +func (dd *dictDecoder) histSize() int { + if dd.full { + return len(dd.hist) + } + return dd.wrPos +} + +// availRead reports the number of bytes that can be flushed by readFlush. +func (dd *dictDecoder) availRead() int { + return dd.wrPos - dd.rdPos +} + +// availWrite reports the available amount of output buffer space. +func (dd *dictDecoder) availWrite() int { + return len(dd.hist) - dd.wrPos +} + +// writeSlice returns a slice of the available buffer to write data to. +// +// This invariant will be kept: len(s) <= availWrite() +func (dd *dictDecoder) writeSlice() []byte { + return dd.hist[dd.wrPos:] +} + +// writeMark advances the writer pointer by cnt. +// +// This invariant must be kept: 0 <= cnt <= availWrite() +func (dd *dictDecoder) writeMark(cnt int) { + dd.wrPos += cnt +} + +// writeByte writes a single byte to the dictionary. +// +// This invariant must be kept: 0 < availWrite() +func (dd *dictDecoder) writeByte(c byte) { + dd.hist[dd.wrPos] = c + dd.wrPos++ +} + +// writeCopy copies a string at a given (dist, length) to the output. +// This returns the number of bytes copied and may be less than the requested +// length if the available space in the output buffer is too small. +// +// This invariant must be kept: 0 < dist <= histSize() +func (dd *dictDecoder) writeCopy(dist, length int) int { + dstBase := dd.wrPos + dstPos := dstBase + srcPos := dstPos - dist + endPos := dstPos + length + if endPos > len(dd.hist) { + endPos = len(dd.hist) + } + + // Copy non-overlapping section after destination position. + // + // This section is non-overlapping in that the copy length for this section + // is always less than or equal to the backwards distance. This can occur + // if a distance refers to data that wraps-around in the buffer. + // Thus, a backwards copy is performed here; that is, the exact bytes in + // the source prior to the copy is placed in the destination. + if srcPos < 0 { + srcPos += len(dd.hist) + dstPos += copy(dd.hist[dstPos:endPos], dd.hist[srcPos:]) + srcPos = 0 + } + + // Copy possibly overlapping section before destination position. + // + // This section can overlap if the copy length for this section is larger + // than the backwards distance. This is allowed by LZ77 so that repeated + // strings can be succinctly represented using (dist, length) pairs. + // Thus, a forwards copy is performed here; that is, the bytes copied is + // possibly dependent on the resulting bytes in the destination as the copy + // progresses along. This is functionally equivalent to the following: + // + // for i := 0; i < endPos-dstPos; i++ { + // dd.hist[dstPos+i] = dd.hist[srcPos+i] + // } + // dstPos = endPos + // + for dstPos < endPos { + dstPos += copy(dd.hist[dstPos:endPos], dd.hist[srcPos:dstPos]) + } + + dd.wrPos = dstPos + return dstPos - dstBase +} + +// tryWriteCopy tries to copy a string at a given (distance, length) to the +// output. This specialized version is optimized for short distances. +// +// This method is designed to be inlined for performance reasons. +// +// This invariant must be kept: 0 < dist <= histSize() +func (dd *dictDecoder) tryWriteCopy(dist, length int) int { + dstPos := dd.wrPos + endPos := dstPos + length + if dstPos < dist || endPos > len(dd.hist) { + return 0 + } + dstBase := dstPos + srcPos := dstPos - dist + + // Copy possibly overlapping section before destination position. + for dstPos < endPos { + dstPos += copy(dd.hist[dstPos:endPos], dd.hist[srcPos:dstPos]) + } + + dd.wrPos = dstPos + return dstPos - dstBase +} + +// readFlush returns a slice of the historical buffer that is ready to be +// emitted to the user. The data returned by readFlush must be fully consumed +// before calling any other dictDecoder methods. +func (dd *dictDecoder) readFlush() []byte { + toRead := dd.hist[dd.rdPos:dd.wrPos] + dd.rdPos = dd.wrPos + if dd.wrPos == len(dd.hist) { + dd.wrPos, dd.rdPos = 0, 0 + dd.full = true + } + return toRead +} diff --git a/image/internal/compress/flate/dict_decoder_test.go b/image/internal/compress/flate/dict_decoder_test.go new file mode 100644 index 0000000..9275cff --- /dev/null +++ b/image/internal/compress/flate/dict_decoder_test.go @@ -0,0 +1,139 @@ +// Copyright 2016 The Go 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 flate + +import ( + "bytes" + "strings" + "testing" +) + +func TestDictDecoder(t *testing.T) { + const ( + abc = "ABC\n" + fox = "The quick brown fox jumped over the lazy dog!\n" + poem = "The Road Not Taken\nRobert Frost\n" + + "\n" + + "Two roads diverged in a yellow wood,\n" + + "And sorry I could not travel both\n" + + "And be one traveler, long I stood\n" + + "And looked down one as far as I could\n" + + "To where it bent in the undergrowth;\n" + + "\n" + + "Then took the other, as just as fair,\n" + + "And having perhaps the better claim,\n" + + "Because it was grassy and wanted wear;\n" + + "Though as for that the passing there\n" + + "Had worn them really about the same,\n" + + "\n" + + "And both that morning equally lay\n" + + "In leaves no step had trodden black.\n" + + "Oh, I kept the first for another day!\n" + + "Yet knowing how way leads on to way,\n" + + "I doubted if I should ever come back.\n" + + "\n" + + "I shall be telling this with a sigh\n" + + "Somewhere ages and ages hence:\n" + + "Two roads diverged in a wood, and I-\n" + + "I took the one less traveled by,\n" + + "And that has made all the difference.\n" + ) + + var poemRefs = []struct { + dist int // Backward distance (0 if this is an insertion) + length int // Length of copy or insertion + }{ + {0, 38}, {33, 3}, {0, 48}, {79, 3}, {0, 11}, {34, 5}, {0, 6}, {23, 7}, + {0, 8}, {50, 3}, {0, 2}, {69, 3}, {34, 5}, {0, 4}, {97, 3}, {0, 4}, + {43, 5}, {0, 6}, {7, 4}, {88, 7}, {0, 12}, {80, 3}, {0, 2}, {141, 4}, + {0, 1}, {196, 3}, {0, 3}, {157, 3}, {0, 6}, {181, 3}, {0, 2}, {23, 3}, + {77, 3}, {28, 5}, {128, 3}, {110, 4}, {70, 3}, {0, 4}, {85, 6}, {0, 2}, + {182, 6}, {0, 4}, {133, 3}, {0, 7}, {47, 5}, {0, 20}, {112, 5}, {0, 1}, + {58, 3}, {0, 8}, {59, 3}, {0, 4}, {173, 3}, {0, 5}, {114, 3}, {0, 4}, + {92, 5}, {0, 2}, {71, 3}, {0, 2}, {76, 5}, {0, 1}, {46, 3}, {96, 4}, + {130, 4}, {0, 3}, {360, 3}, {0, 3}, {178, 5}, {0, 7}, {75, 3}, {0, 3}, + {45, 6}, {0, 6}, {299, 6}, {180, 3}, {70, 6}, {0, 1}, {48, 3}, {66, 4}, + {0, 3}, {47, 5}, {0, 9}, {325, 3}, {0, 1}, {359, 3}, {318, 3}, {0, 2}, + {199, 3}, {0, 1}, {344, 3}, {0, 3}, {248, 3}, {0, 10}, {310, 3}, {0, 3}, + {93, 6}, {0, 3}, {252, 3}, {157, 4}, {0, 2}, {273, 5}, {0, 14}, {99, 4}, + {0, 1}, {464, 4}, {0, 2}, {92, 4}, {495, 3}, {0, 1}, {322, 4}, {16, 4}, + {0, 3}, {402, 3}, {0, 2}, {237, 4}, {0, 2}, {432, 4}, {0, 1}, {483, 5}, + {0, 2}, {294, 4}, {0, 2}, {306, 3}, {113, 5}, {0, 1}, {26, 4}, {164, 3}, + {488, 4}, {0, 1}, {542, 3}, {248, 6}, {0, 5}, {205, 3}, {0, 8}, {48, 3}, + {449, 6}, {0, 2}, {192, 3}, {328, 4}, {9, 5}, {433, 3}, {0, 3}, {622, 25}, + {615, 5}, {46, 5}, {0, 2}, {104, 3}, {475, 10}, {549, 3}, {0, 4}, {597, 8}, + {314, 3}, {0, 1}, {473, 6}, {317, 5}, {0, 1}, {400, 3}, {0, 3}, {109, 3}, + {151, 3}, {48, 4}, {0, 4}, {125, 3}, {108, 3}, {0, 2}, + } + + var got, want bytes.Buffer + var dd dictDecoder + dd.init(1<<11, nil) + + var writeCopy = func(dist, length int) { + for length > 0 { + cnt := dd.tryWriteCopy(dist, length) + if cnt == 0 { + cnt = dd.writeCopy(dist, length) + } + + length -= cnt + if dd.availWrite() == 0 { + got.Write(dd.readFlush()) + } + } + } + var writeString = func(str string) { + for len(str) > 0 { + cnt := copy(dd.writeSlice(), str) + str = str[cnt:] + dd.writeMark(cnt) + if dd.availWrite() == 0 { + got.Write(dd.readFlush()) + } + } + } + + writeString(".") + want.WriteByte('.') + + str := poem + for _, ref := range poemRefs { + if ref.dist == 0 { + writeString(str[:ref.length]) + } else { + writeCopy(ref.dist, ref.length) + } + str = str[ref.length:] + } + want.WriteString(poem) + + writeCopy(dd.histSize(), 33) + want.Write(want.Bytes()[:33]) + + writeString(abc) + writeCopy(len(abc), 59*len(abc)) + want.WriteString(strings.Repeat(abc, 60)) + + writeString(fox) + writeCopy(len(fox), 9*len(fox)) + want.WriteString(strings.Repeat(fox, 10)) + + writeString(".") + writeCopy(1, 9) + want.WriteString(strings.Repeat(".", 10)) + + writeString(strings.ToUpper(poem)) + writeCopy(len(poem), 7*len(poem)) + want.WriteString(strings.Repeat(strings.ToUpper(poem), 8)) + + writeCopy(dd.histSize(), 10) + want.Write(want.Bytes()[want.Len()-dd.histSize():][:10]) + + got.Write(dd.readFlush()) + if got.String() != want.String() { + t.Errorf("final string mismatch:\ngot %q\nwant %q", got.String(), want.String()) + } +} diff --git a/image/internal/compress/flate/example_test.go b/image/internal/compress/flate/example_test.go new file mode 100644 index 0000000..5780092 --- /dev/null +++ b/image/internal/compress/flate/example_test.go @@ -0,0 +1,243 @@ +// Copyright 2016 The Go 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 flate_test + +import ( + "bytes" + "compress/flate" + "fmt" + "io" + "log" + "os" + "strings" + "sync" +) + +// In performance critical applications, Reset can be used to discard the +// current compressor or decompressor state and reinitialize them quickly +// by taking advantage of previously allocated memory. +func Example_reset() { + proverbs := []string{ + "Don't communicate by sharing memory, share memory by communicating.\n", + "Concurrency is not parallelism.\n", + "The bigger the interface, the weaker the abstraction.\n", + "Documentation is for users.\n", + } + + var r strings.Reader + var b bytes.Buffer + buf := make([]byte, 32<<10) + + zw, err := flate.NewWriter(nil, flate.DefaultCompression) + if err != nil { + log.Fatal(err) + } + zr := flate.NewReader(nil) + + for _, s := range proverbs { + r.Reset(s) + b.Reset() + + // Reset the compressor and encode from some input stream. + zw.Reset(&b) + if _, err := io.CopyBuffer(zw, &r, buf); err != nil { + log.Fatal(err) + } + if err := zw.Close(); err != nil { + log.Fatal(err) + } + + // Reset the decompressor and decode to some output stream. + if err := zr.(flate.Resetter).Reset(&b, nil); err != nil { + log.Fatal(err) + } + if _, err := io.CopyBuffer(os.Stdout, zr, buf); err != nil { + log.Fatal(err) + } + if err := zr.Close(); err != nil { + log.Fatal(err) + } + } + + // Output: + // Don't communicate by sharing memory, share memory by communicating. + // Concurrency is not parallelism. + // The bigger the interface, the weaker the abstraction. + // Documentation is for users. +} + +// A preset dictionary can be used to improve the compression ratio. +// The downside to using a dictionary is that the compressor and decompressor +// must agree in advance what dictionary to use. +func Example_dictionary() { + // The dictionary is a string of bytes. When compressing some input data, + // the compressor will attempt to substitute substrings with matches found + // in the dictionary. As such, the dictionary should only contain substrings + // that are expected to be found in the actual data stream. + const dict = `` + `` + `` + ` + + + + + + ... + +` + + var b bytes.Buffer + + // Compress the data using the specially crafted dictionary. + zw, err := flate.NewWriterDict(&b, flate.DefaultCompression, []byte(dict)) + if err != nil { + log.Fatal(err) + } + if _, err := io.Copy(zw, strings.NewReader(data)); err != nil { + log.Fatal(err) + } + if err := zw.Close(); err != nil { + log.Fatal(err) + } + + // The decompressor must use the same dictionary as the compressor. + // Otherwise, the input may appear as corrupted. + fmt.Println("Decompressed output using the dictionary:") + zr := flate.NewReaderDict(bytes.NewReader(b.Bytes()), []byte(dict)) + if _, err := io.Copy(os.Stdout, zr); err != nil { + log.Fatal(err) + } + if err := zr.Close(); err != nil { + log.Fatal(err) + } + + fmt.Println() + + // Substitute all of the bytes in the dictionary with a '#' to visually + // demonstrate the approximate effectiveness of using a preset dictionary. + fmt.Println("Substrings matched by the dictionary are marked with #:") + hashDict := []byte(dict) + for i := range hashDict { + hashDict[i] = '#' + } + zr = flate.NewReaderDict(&b, hashDict) + if _, err := io.Copy(os.Stdout, zr); err != nil { + log.Fatal(err) + } + if err := zr.Close(); err != nil { + log.Fatal(err) + } + + // Output: + // Decompressed output using the dictionary: + // + // + // + // + // + // + // ... + // + // + // Substrings matched by the dictionary are marked with #: + // ##################### + // ###### + // ############title###########The Go Programming Language"/# + // ############authors###########Alan Donovan and Brian Kernighan"/# + // ############published###########2015-10-26"/# + // ############isbn###########978-0134190440"/# + // ######...>> hex_string = "010100feff11" + // >>> import zlib + // >>> zlib.decompress(hex_string.decode("hex"), -15) # Negative means raw DEFLATE + // '\x11' + + testCases := []struct { + desc string // Description of the stream + stream string // Hexstring of the input DEFLATE stream + want string // Expected result. Use "fail" to expect failure + }{{ + "degenerate HCLenTree", + "05e0010000000000100000000000000000000000000000000000000000000000" + + "00000000000000000004", + "fail", + }, { + "complete HCLenTree, empty HLitTree, empty HDistTree", + "05e0010400000000000000000000000000000000000000000000000000000000" + + "00000000000000000010", + "fail", + }, { + "empty HCLenTree", + "05e0010000000000000000000000000000000000000000000000000000000000" + + "00000000000000000010", + "fail", + }, { + "complete HCLenTree, complete HLitTree, empty HDistTree, use missing HDist symbol", + "000100feff000de0010400000000100000000000000000000000000000000000" + + "0000000000000000000000000000002c", + "fail", + }, { + "complete HCLenTree, complete HLitTree, degenerate HDistTree, use missing HDist symbol", + "000100feff000de0010000000000000000000000000000000000000000000000" + + "00000000000000000610000000004070", + "fail", + }, { + "complete HCLenTree, empty HLitTree, empty HDistTree", + "05e0010400000000100400000000000000000000000000000000000000000000" + + "0000000000000000000000000008", + "fail", + }, { + "complete HCLenTree, empty HLitTree, degenerate HDistTree", + "05e0010400000000100400000000000000000000000000000000000000000000" + + "0000000000000000000800000008", + "fail", + }, { + "complete HCLenTree, degenerate HLitTree, degenerate HDistTree, use missing HLit symbol", + "05e0010400000000100000000000000000000000000000000000000000000000" + + "0000000000000000001c", + "fail", + }, { + "complete HCLenTree, complete HLitTree, too large HDistTree", + "edff870500000000200400000000000000000000000000000000000000000000" + + "000000000000000000080000000000000004", + "fail", + }, { + "complete HCLenTree, complete HLitTree, empty HDistTree, excessive repeater code", + "edfd870500000000200400000000000000000000000000000000000000000000" + + "000000000000000000e8b100", + "fail", + }, { + "complete HCLenTree, complete HLitTree, empty HDistTree of normal length 30", + "05fd01240000000000f8ffffffffffffffffffffffffffffffffffffffffffff" + + "ffffffffffffffffff07000000fe01", + "", + }, { + "complete HCLenTree, complete HLitTree, empty HDistTree of excessive length 31", + "05fe01240000000000f8ffffffffffffffffffffffffffffffffffffffffffff" + + "ffffffffffffffffff07000000fc03", + "fail", + }, { + "complete HCLenTree, over-subscribed HLitTree, empty HDistTree", + "05e001240000000000fcffffffffffffffffffffffffffffffffffffffffffff" + + "ffffffffffffffffff07f00f", + "fail", + }, { + "complete HCLenTree, under-subscribed HLitTree, empty HDistTree", + "05e001240000000000fcffffffffffffffffffffffffffffffffffffffffffff" + + "fffffffffcffffffff07f00f", + "fail", + }, { + "complete HCLenTree, complete HLitTree with single code, empty HDistTree", + "05e001240000000000f8ffffffffffffffffffffffffffffffffffffffffffff" + + "ffffffffffffffffff07f00f", + "01", + }, { + "complete HCLenTree, complete HLitTree with multiple codes, empty HDistTree", + "05e301240000000000f8ffffffffffffffffffffffffffffffffffffffffffff" + + "ffffffffffffffffff07807f", + "01", + }, { + "complete HCLenTree, complete HLitTree, degenerate HDistTree, use valid HDist symbol", + "000100feff000de0010400000000100000000000000000000000000000000000" + + "0000000000000000000000000000003c", + "00000000", + }, { + "complete HCLenTree, degenerate HLitTree, degenerate HDistTree", + "05e0010400000000100000000000000000000000000000000000000000000000" + + "0000000000000000000c", + "", + }, { + "complete HCLenTree, degenerate HLitTree, empty HDistTree", + "05e0010400000000100000000000000000000000000000000000000000000000" + + "00000000000000000004", + "", + }, { + "complete HCLenTree, complete HLitTree, empty HDistTree, spanning repeater code", + "edfd870500000000200400000000000000000000000000000000000000000000" + + "000000000000000000e8b000", + "", + }, { + "complete HCLenTree with length codes, complete HLitTree, empty HDistTree", + "ede0010400000000100000000000000000000000000000000000000000000000" + + "0000000000000000000400004000", + "", + }, { + "complete HCLenTree, complete HLitTree, degenerate HDistTree, use valid HLit symbol 284 with count 31", + "000100feff00ede0010400000000100000000000000000000000000000000000" + + "000000000000000000000000000000040000407f00", + "0000000000000000000000000000000000000000000000000000000000000000" + + "0000000000000000000000000000000000000000000000000000000000000000" + + "0000000000000000000000000000000000000000000000000000000000000000" + + "0000000000000000000000000000000000000000000000000000000000000000" + + "0000000000000000000000000000000000000000000000000000000000000000" + + "0000000000000000000000000000000000000000000000000000000000000000" + + "0000000000000000000000000000000000000000000000000000000000000000" + + "0000000000000000000000000000000000000000000000000000000000000000" + + "000000", + }, { + "complete HCLenTree, complete HLitTree, degenerate HDistTree, use valid HLit and HDist symbols", + "0cc2010d00000082b0ac4aff0eb07d27060000ffff", + "616263616263", + }, { + "fixed block, use reserved symbol 287", + "33180700", + "fail", + }, { + "raw block", + "010100feff11", + "11", + }, { + "issue 10426 - over-subscribed HCLenTree causes a hang", + "344c4a4e494d4b070000ff2e2eff2e2e2e2e2eff", + "fail", + }, { + "issue 11030 - empty HDistTree unexpectedly leads to error", + "05c0070600000080400fff37a0ca", + "", + }, { + "issue 11033 - empty HDistTree unexpectedly leads to error", + "050fb109c020cca5d017dcbca044881ee1034ec149c8980bbc413c2ab35be9dc" + + "b1473449922449922411202306ee97b0383a521b4ffdcf3217f9f7d3adb701", + "3130303634342068652e706870005d05355f7ed957ff084a90925d19e3ebc6d0" + + "c6d7", + }} + + for i, tc := range testCases { + data, err := hex.DecodeString(tc.stream) + if err != nil { + t.Fatal(err) + } + data, err = io.ReadAll(NewReader(bytes.NewReader(data))) + if tc.want == "fail" { + if err == nil { + t.Errorf("#%d (%s): got nil error, want non-nil", i, tc.desc) + } + } else { + if err != nil { + t.Errorf("#%d (%s): %v", i, tc.desc, err) + continue + } + if got := hex.EncodeToString(data); got != tc.want { + t.Errorf("#%d (%s):\ngot %q\nwant %q", i, tc.desc, got, tc.want) + } + + } + } +} + +func TestTruncatedStreams(t *testing.T) { + const data = "\x00\f\x00\xf3\xffhello, world\x01\x00\x00\xff\xff" + + for i := 0; i < len(data)-1; i++ { + r := NewReader(strings.NewReader(data[:i])) + _, err := io.Copy(io.Discard, r) + if err != io.ErrUnexpectedEOF { + t.Errorf("io.Copy(%d) on truncated stream: got %v, want %v", i, err, io.ErrUnexpectedEOF) + } + } +} + +// Verify that flate.Reader.Read returns (n, io.EOF) instead +// of (n, nil) + (0, io.EOF) when possible. +// +// This helps net/http.Transport reuse HTTP/1 connections more +// aggressively. +// +// See https://github.com/google/go-github/pull/317 for background. +func TestReaderEarlyEOF(t *testing.T) { + t.Parallel() + testSizes := []int{ + 1, 2, 3, 4, 5, 6, 7, 8, + 100, 1000, 10000, 100000, + 128, 1024, 16384, 131072, + + // Testing multiples of windowSize triggers the case + // where Read will fail to return an early io.EOF. + windowSize * 1, windowSize * 2, windowSize * 3, + } + + var maxSize int + for _, n := range testSizes { + if maxSize < n { + maxSize = n + } + } + + readBuf := make([]byte, 40) + data := make([]byte, maxSize) + for i := range data { + data[i] = byte(i) + } + + for _, sz := range testSizes { + if testing.Short() && sz > windowSize { + continue + } + for _, flush := range []bool{true, false} { + earlyEOF := true // Do we expect early io.EOF? + + var buf bytes.Buffer + w, _ := NewWriter(&buf, 5) + w.Write(data[:sz]) + if flush { + // If a Flush occurs after all the actual data, the flushing + // semantics dictate that we will observe a (0, io.EOF) since + // Read must return data before it knows that the stream ended. + w.Flush() + earlyEOF = false + } + w.Close() + + r := NewReader(&buf) + for { + n, err := r.Read(readBuf) + if err == io.EOF { + // If the availWrite == windowSize, then that means that the + // previous Read returned because the write buffer was full + // and it just so happened that the stream had no more data. + // This situation is rare, but unavoidable. + if r.(*decompressor).dict.availWrite() == windowSize { + earlyEOF = false + } + + if n == 0 && earlyEOF { + t.Errorf("On size:%d flush:%v, Read() = (0, io.EOF), want (n, io.EOF)", sz, flush) + } + if n != 0 && !earlyEOF { + t.Errorf("On size:%d flush:%v, Read() = (%d, io.EOF), want (0, io.EOF)", sz, flush, n) + } + break + } + if err != nil { + t.Fatal(err) + } + } + } + } +} diff --git a/image/internal/compress/flate/huffman_bit_writer.go b/image/internal/compress/flate/huffman_bit_writer.go new file mode 100644 index 0000000..b3ae76d --- /dev/null +++ b/image/internal/compress/flate/huffman_bit_writer.go @@ -0,0 +1,704 @@ +// 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 LICENSE file. + +package flate + +import ( + "io" +) + +const ( + // The largest offset code. + offsetCodeCount = 30 + + // The special code used to mark the end of a block. + endBlockMarker = 256 + + // The first length code. + lengthCodesStart = 257 + + // The number of codegen codes. + codegenCodeCount = 19 + badCode = 255 + + // bufferFlushSize indicates the buffer size + // after which bytes are flushed to the writer. + // Should preferably be a multiple of 6, since + // we accumulate 6 bytes between writes to the buffer. + bufferFlushSize = 240 + + // bufferSize is the actual output byte buffer size. + // It must have additional headroom for a flush + // which can contain up to 8 bytes. + bufferSize = bufferFlushSize + 8 +) + +// The number of extra bits needed by length code X - LENGTH_CODES_START. +var lengthExtraBits = []int8{ + /* 257 */ 0, 0, 0, + /* 260 */ 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, + /* 270 */ 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, + /* 280 */ 4, 5, 5, 5, 5, 0, +} + +// The length indicated by length code X - LENGTH_CODES_START. +var lengthBase = []uint32{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, + 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, + 64, 80, 96, 112, 128, 160, 192, 224, 255, +} + +// offset code word extra bits. +var offsetExtraBits = []int8{ + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, + 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, + 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, +} + +var offsetBase = []uint32{ + 0x000000, 0x000001, 0x000002, 0x000003, 0x000004, + 0x000006, 0x000008, 0x00000c, 0x000010, 0x000018, + 0x000020, 0x000030, 0x000040, 0x000060, 0x000080, + 0x0000c0, 0x000100, 0x000180, 0x000200, 0x000300, + 0x000400, 0x000600, 0x000800, 0x000c00, 0x001000, + 0x001800, 0x002000, 0x003000, 0x004000, 0x006000, +} + +// The odd order in which the codegen code sizes are written. +var codegenOrder = []uint32{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15} + +type huffmanBitWriter struct { + // writer is the underlying writer. + // Do not use it directly; use the write method, which ensures + // that Write errors are sticky. + writer io.Writer + + // Data waiting to be written is bytes[0:nbytes] + // and then the low nbits of bits. Data is always written + // sequentially into the bytes array. + bits uint64 + nbits uint + bytes [bufferSize]byte + codegenFreq [codegenCodeCount]int32 + nbytes int + literalFreq []int32 + offsetFreq []int32 + codegen []uint8 + literalEncoding *huffmanEncoder + offsetEncoding *huffmanEncoder + codegenEncoding *huffmanEncoder + err error +} + +func newHuffmanBitWriter(w io.Writer) *huffmanBitWriter { + return &huffmanBitWriter{ + writer: w, + literalFreq: make([]int32, maxNumLit), + offsetFreq: make([]int32, offsetCodeCount), + codegen: make([]uint8, maxNumLit+offsetCodeCount+1), + literalEncoding: newHuffmanEncoder(maxNumLit), + codegenEncoding: newHuffmanEncoder(codegenCodeCount), + offsetEncoding: newHuffmanEncoder(offsetCodeCount), + } +} + +func (w *huffmanBitWriter) reset(writer io.Writer) { + w.writer = writer + w.bits, w.nbits, w.nbytes, w.err = 0, 0, 0, nil +} + +func (w *huffmanBitWriter) flush() { + if w.err != nil { + w.nbits = 0 + return + } + n := w.nbytes + for w.nbits != 0 { + w.bytes[n] = byte(w.bits) + w.bits >>= 8 + if w.nbits > 8 { // Avoid underflow + w.nbits -= 8 + } else { + w.nbits = 0 + } + n++ + } + w.bits = 0 + w.write(w.bytes[:n]) + w.nbytes = 0 +} + +func (w *huffmanBitWriter) write(b []byte) { + if w.err != nil { + return + } + _, w.err = w.writer.Write(b) +} + +func (w *huffmanBitWriter) writeBits(b int32, nb uint) { + if w.err != nil { + return + } + w.bits |= uint64(b) << w.nbits + w.nbits += nb + if w.nbits >= 48 { + bits := w.bits + w.bits >>= 48 + w.nbits -= 48 + n := w.nbytes + bytes := w.bytes[n : n+6] + bytes[0] = byte(bits) + bytes[1] = byte(bits >> 8) + bytes[2] = byte(bits >> 16) + bytes[3] = byte(bits >> 24) + bytes[4] = byte(bits >> 32) + bytes[5] = byte(bits >> 40) + n += 6 + if n >= bufferFlushSize { + w.write(w.bytes[:n]) + n = 0 + } + w.nbytes = n + } +} + +func (w *huffmanBitWriter) writeBytes(bytes []byte) { + if w.err != nil { + return + } + n := w.nbytes + if w.nbits&7 != 0 { + w.err = InternalError("writeBytes with unfinished bits") + return + } + for w.nbits != 0 { + w.bytes[n] = byte(w.bits) + w.bits >>= 8 + w.nbits -= 8 + n++ + } + if n != 0 { + w.write(w.bytes[:n]) + } + w.nbytes = 0 + w.write(bytes) +} + +// RFC 1951 3.2.7 specifies a special run-length encoding for specifying +// the literal and offset lengths arrays (which are concatenated into a single +// array). This method generates that run-length encoding. +// +// The result is written into the codegen array, and the frequencies +// of each code is written into the codegenFreq array. +// Codes 0-15 are single byte codes. Codes 16-18 are followed by additional +// information. Code badCode is an end marker +// +// numLiterals The number of literals in literalEncoding +// numOffsets The number of offsets in offsetEncoding +// litenc, offenc The literal and offset encoder to use +func (w *huffmanBitWriter) generateCodegen(numLiterals int, numOffsets int, litEnc, offEnc *huffmanEncoder) { + for i := range w.codegenFreq { + w.codegenFreq[i] = 0 + } + // Note that we are using codegen both as a temporary variable for holding + // a copy of the frequencies, and as the place where we put the result. + // This is fine because the output is always shorter than the input used + // so far. + codegen := w.codegen // cache + // Copy the concatenated code sizes to codegen. Put a marker at the end. + cgnl := codegen[:numLiterals] + for i := range cgnl { + cgnl[i] = uint8(litEnc.codes[i].len) + } + + cgnl = codegen[numLiterals : numLiterals+numOffsets] + for i := range cgnl { + cgnl[i] = uint8(offEnc.codes[i].len) + } + codegen[numLiterals+numOffsets] = badCode + + size := codegen[0] + count := 1 + outIndex := 0 + for inIndex := 1; size != badCode; inIndex++ { + // INVARIANT: We have seen "count" copies of size that have not yet + // had output generated for them. + nextSize := codegen[inIndex] + if nextSize == size { + count++ + continue + } + // We need to generate codegen indicating "count" of size. + if size != 0 { + codegen[outIndex] = size + outIndex++ + w.codegenFreq[size]++ + count-- + for count >= 3 { + n := 6 + if n > count { + n = count + } + codegen[outIndex] = 16 + outIndex++ + codegen[outIndex] = uint8(n - 3) + outIndex++ + w.codegenFreq[16]++ + count -= n + } + } else { + for count >= 11 { + n := 138 + if n > count { + n = count + } + codegen[outIndex] = 18 + outIndex++ + codegen[outIndex] = uint8(n - 11) + outIndex++ + w.codegenFreq[18]++ + count -= n + } + if count >= 3 { + // count >= 3 && count <= 10 + codegen[outIndex] = 17 + outIndex++ + codegen[outIndex] = uint8(count - 3) + outIndex++ + w.codegenFreq[17]++ + count = 0 + } + } + count-- + for ; count >= 0; count-- { + codegen[outIndex] = size + outIndex++ + w.codegenFreq[size]++ + } + // Set up invariant for next time through the loop. + size = nextSize + count = 1 + } + // Marker indicating the end of the codegen. + codegen[outIndex] = badCode +} + +// dynamicSize returns the size of dynamically encoded data in bits. +func (w *huffmanBitWriter) dynamicSize(litEnc, offEnc *huffmanEncoder, extraBits int) (size, numCodegens int) { + numCodegens = len(w.codegenFreq) + for numCodegens > 4 && w.codegenFreq[codegenOrder[numCodegens-1]] == 0 { + numCodegens-- + } + header := 3 + 5 + 5 + 4 + (3 * numCodegens) + + w.codegenEncoding.bitLength(w.codegenFreq[:]) + + int(w.codegenFreq[16])*2 + + int(w.codegenFreq[17])*3 + + int(w.codegenFreq[18])*7 + size = header + + litEnc.bitLength(w.literalFreq) + + offEnc.bitLength(w.offsetFreq) + + extraBits + + return size, numCodegens +} + +// fixedSize returns the size of dynamically encoded data in bits. +func (w *huffmanBitWriter) fixedSize(extraBits int) int { + return 3 + + fixedLiteralEncoding.bitLength(w.literalFreq) + + fixedOffsetEncoding.bitLength(w.offsetFreq) + + extraBits +} + +// storedSize calculates the stored size, including header. +// The function returns the size in bits and whether the block +// fits inside a single block. +func (w *huffmanBitWriter) storedSize(in []byte) (int, bool) { + if in == nil { + return 0, false + } + if len(in) <= maxStoreBlockSize { + return (len(in) + 5) * 8, true + } + return 0, false +} + +func (w *huffmanBitWriter) writeCode(c hcode) { + if w.err != nil { + return + } + w.bits |= uint64(c.code) << w.nbits + w.nbits += uint(c.len) + if w.nbits >= 48 { + bits := w.bits + w.bits >>= 48 + w.nbits -= 48 + n := w.nbytes + bytes := w.bytes[n : n+6] + bytes[0] = byte(bits) + bytes[1] = byte(bits >> 8) + bytes[2] = byte(bits >> 16) + bytes[3] = byte(bits >> 24) + bytes[4] = byte(bits >> 32) + bytes[5] = byte(bits >> 40) + n += 6 + if n >= bufferFlushSize { + w.write(w.bytes[:n]) + n = 0 + } + w.nbytes = n + } +} + +// Write the header of a dynamic Huffman block to the output stream. +// +// numLiterals The number of literals specified in codegen +// numOffsets The number of offsets specified in codegen +// numCodegens The number of codegens used in codegen +func (w *huffmanBitWriter) writeDynamicHeader(numLiterals int, numOffsets int, numCodegens int, isEof bool) { + if w.err != nil { + return + } + var firstBits int32 = 4 + if isEof { + firstBits = 5 + } + w.writeBits(firstBits, 3) + w.writeBits(int32(numLiterals-257), 5) + w.writeBits(int32(numOffsets-1), 5) + w.writeBits(int32(numCodegens-4), 4) + + for i := 0; i < numCodegens; i++ { + value := uint(w.codegenEncoding.codes[codegenOrder[i]].len) + w.writeBits(int32(value), 3) + } + + i := 0 + for { + var codeWord int = int(w.codegen[i]) + i++ + if codeWord == badCode { + break + } + w.writeCode(w.codegenEncoding.codes[uint32(codeWord)]) + + switch codeWord { + case 16: + w.writeBits(int32(w.codegen[i]), 2) + i++ + break + case 17: + w.writeBits(int32(w.codegen[i]), 3) + i++ + break + case 18: + w.writeBits(int32(w.codegen[i]), 7) + i++ + break + } + } +} + +func (w *huffmanBitWriter) writeStoredHeader(length int, isEof bool) { + if w.err != nil { + return + } + var flag int32 + if isEof { + flag = 1 + } + w.writeBits(flag, 3) + w.flush() + w.writeBits(int32(length), 16) + w.writeBits(int32(^uint16(length)), 16) +} + +func (w *huffmanBitWriter) writeFixedHeader(isEof bool) { + if w.err != nil { + return + } + // Indicate that we are a fixed Huffman block + var value int32 = 2 + if isEof { + value = 3 + } + w.writeBits(value, 3) +} + +// writeBlock will write a block of tokens with the smallest encoding. +// The original input can be supplied, and if the huffman encoded data +// is larger than the original bytes, the data will be written as a +// stored block. +// If the input is nil, the tokens will always be Huffman encoded. +func (w *huffmanBitWriter) writeBlock(tokens []token, eof bool, input []byte) { + if w.err != nil { + return + } + + tokens = append(tokens, endBlockMarker) + numLiterals, numOffsets := w.indexTokens(tokens) + + var extraBits int + storedSize, storable := w.storedSize(input) + if storable { + // We only bother calculating the costs of the extra bits required by + // the length of offset fields (which will be the same for both fixed + // and dynamic encoding), if we need to compare those two encodings + // against stored encoding. + for lengthCode := lengthCodesStart + 8; lengthCode < numLiterals; lengthCode++ { + // First eight length codes have extra size = 0. + extraBits += int(w.literalFreq[lengthCode]) * int(lengthExtraBits[lengthCode-lengthCodesStart]) + } + for offsetCode := 4; offsetCode < numOffsets; offsetCode++ { + // First four offset codes have extra size = 0. + extraBits += int(w.offsetFreq[offsetCode]) * int(offsetExtraBits[offsetCode]) + } + } + + // Figure out smallest code. + // Fixed Huffman baseline. + var literalEncoding = fixedLiteralEncoding + var offsetEncoding = fixedOffsetEncoding + var size = w.fixedSize(extraBits) + + // Dynamic Huffman? + var numCodegens int + + // Generate codegen and codegenFrequencies, which indicates how to encode + // the literalEncoding and the offsetEncoding. + w.generateCodegen(numLiterals, numOffsets, w.literalEncoding, w.offsetEncoding) + w.codegenEncoding.generate(w.codegenFreq[:], 7) + dynamicSize, numCodegens := w.dynamicSize(w.literalEncoding, w.offsetEncoding, extraBits) + + if dynamicSize < size { + size = dynamicSize + literalEncoding = w.literalEncoding + offsetEncoding = w.offsetEncoding + } + + // Stored bytes? + if storable && storedSize < size { + w.writeStoredHeader(len(input), eof) + w.writeBytes(input) + return + } + + // Huffman. + if literalEncoding == fixedLiteralEncoding { + w.writeFixedHeader(eof) + } else { + w.writeDynamicHeader(numLiterals, numOffsets, numCodegens, eof) + } + + // Write the tokens. + w.writeTokens(tokens, literalEncoding.codes, offsetEncoding.codes) +} + +// writeBlockDynamic encodes a block using a dynamic Huffman table. +// This should be used if the symbols used have a disproportionate +// histogram distribution. +// If input is supplied and the compression savings are below 1/16th of the +// input size the block is stored. +func (w *huffmanBitWriter) writeBlockDynamic(tokens []token, eof bool, input []byte) { + if w.err != nil { + return + } + + tokens = append(tokens, endBlockMarker) + numLiterals, numOffsets := w.indexTokens(tokens) + + // Generate codegen and codegenFrequencies, which indicates how to encode + // the literalEncoding and the offsetEncoding. + w.generateCodegen(numLiterals, numOffsets, w.literalEncoding, w.offsetEncoding) + w.codegenEncoding.generate(w.codegenFreq[:], 7) + size, numCodegens := w.dynamicSize(w.literalEncoding, w.offsetEncoding, 0) + + // Store bytes, if we don't get a reasonable improvement. + if ssize, storable := w.storedSize(input); storable && ssize < (size+size>>4) { + w.writeStoredHeader(len(input), eof) + w.writeBytes(input) + return + } + + // Write Huffman table. + w.writeDynamicHeader(numLiterals, numOffsets, numCodegens, eof) + + // Write the tokens. + w.writeTokens(tokens, w.literalEncoding.codes, w.offsetEncoding.codes) +} + +// indexTokens indexes a slice of tokens, and updates +// literalFreq and offsetFreq, and generates literalEncoding +// and offsetEncoding. +// The number of literal and offset tokens is returned. +func (w *huffmanBitWriter) indexTokens(tokens []token) (numLiterals, numOffsets int) { + for i := range w.literalFreq { + w.literalFreq[i] = 0 + } + for i := range w.offsetFreq { + w.offsetFreq[i] = 0 + } + + for _, t := range tokens { + if t < matchType { + w.literalFreq[t.literal()]++ + continue + } + length := t.length() + offset := t.offset() + w.literalFreq[lengthCodesStart+lengthCode(length)]++ + w.offsetFreq[offsetCode(offset)]++ + } + + // get the number of literals + numLiterals = len(w.literalFreq) + for w.literalFreq[numLiterals-1] == 0 { + numLiterals-- + } + // get the number of offsets + numOffsets = len(w.offsetFreq) + for numOffsets > 0 && w.offsetFreq[numOffsets-1] == 0 { + numOffsets-- + } + if numOffsets == 0 { + // We haven't found a single match. If we want to go with the dynamic encoding, + // we should count at least one offset to be sure that the offset huffman tree could be encoded. + w.offsetFreq[0] = 1 + numOffsets = 1 + } + w.literalEncoding.generate(w.literalFreq, 15) + w.offsetEncoding.generate(w.offsetFreq, 15) + return +} + +// writeTokens writes a slice of tokens to the output. +// codes for literal and offset encoding must be supplied. +func (w *huffmanBitWriter) writeTokens(tokens []token, leCodes, oeCodes []hcode) { + if w.err != nil { + return + } + for _, t := range tokens { + if t < matchType { + w.writeCode(leCodes[t.literal()]) + continue + } + // Write the length + length := t.length() + lengthCode := lengthCode(length) + w.writeCode(leCodes[lengthCode+lengthCodesStart]) + extraLengthBits := uint(lengthExtraBits[lengthCode]) + if extraLengthBits > 0 { + extraLength := int32(length - lengthBase[lengthCode]) + w.writeBits(extraLength, extraLengthBits) + } + // Write the offset + offset := t.offset() + offsetCode := offsetCode(offset) + w.writeCode(oeCodes[offsetCode]) + extraOffsetBits := uint(offsetExtraBits[offsetCode]) + if extraOffsetBits > 0 { + extraOffset := int32(offset - offsetBase[offsetCode]) + w.writeBits(extraOffset, extraOffsetBits) + } + } +} + +// huffOffset is a static offset encoder used for huffman only encoding. +// It can be reused since we will not be encoding offset values. +var huffOffset *huffmanEncoder + +func init() { + offsetFreq := make([]int32, offsetCodeCount) + offsetFreq[0] = 1 + huffOffset = newHuffmanEncoder(offsetCodeCount) + huffOffset.generate(offsetFreq, 15) +} + +// writeBlockHuff encodes a block of bytes as either +// Huffman encoded literals or uncompressed bytes if the +// results only gains very little from compression. +func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte) { + if w.err != nil { + return + } + + // Clear histogram + for i := range w.literalFreq { + w.literalFreq[i] = 0 + } + + // Add everything as literals + histogram(input, w.literalFreq) + + w.literalFreq[endBlockMarker] = 1 + + const numLiterals = endBlockMarker + 1 + w.offsetFreq[0] = 1 + const numOffsets = 1 + + w.literalEncoding.generate(w.literalFreq, 15) + + // Figure out smallest code. + // Always use dynamic Huffman or Store + var numCodegens int + + // Generate codegen and codegenFrequencies, which indicates how to encode + // the literalEncoding and the offsetEncoding. + w.generateCodegen(numLiterals, numOffsets, w.literalEncoding, huffOffset) + w.codegenEncoding.generate(w.codegenFreq[:], 7) + size, numCodegens := w.dynamicSize(w.literalEncoding, huffOffset, 0) + + // Store bytes, if we don't get a reasonable improvement. + if ssize, storable := w.storedSize(input); storable && ssize < (size+size>>4) { + w.writeStoredHeader(len(input), eof) + w.writeBytes(input) + return + } + + // Huffman. + w.writeDynamicHeader(numLiterals, numOffsets, numCodegens, eof) + encoding := w.literalEncoding.codes[:257] + n := w.nbytes + for _, t := range input { + // Bitwriting inlined, ~30% speedup + c := encoding[t] + w.bits |= uint64(c.code) << w.nbits + w.nbits += uint(c.len) + if w.nbits < 48 { + continue + } + // Store 6 bytes + bits := w.bits + w.bits >>= 48 + w.nbits -= 48 + bytes := w.bytes[n : n+6] + bytes[0] = byte(bits) + bytes[1] = byte(bits >> 8) + bytes[2] = byte(bits >> 16) + bytes[3] = byte(bits >> 24) + bytes[4] = byte(bits >> 32) + bytes[5] = byte(bits >> 40) + n += 6 + if n < bufferFlushSize { + continue + } + w.write(w.bytes[:n]) + if w.err != nil { + return // Return early in the event of write failures + } + n = 0 + } + w.nbytes = n + w.writeCode(encoding[endBlockMarker]) +} + +// histogram accumulates a histogram of b in h. +// +// len(h) must be >= 256, and h's elements must be all zeroes. +func histogram(b []byte, h []int32) { + h = h[:256] + for _, t := range b { + h[t]++ + } +} diff --git a/image/internal/compress/flate/huffman_bit_writer_test.go b/image/internal/compress/flate/huffman_bit_writer_test.go new file mode 100644 index 0000000..a57799c --- /dev/null +++ b/image/internal/compress/flate/huffman_bit_writer_test.go @@ -0,0 +1,365 @@ +// Copyright 2016 The Go 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 flate + +import ( + "bytes" + "flag" + "fmt" + "os" + "path/filepath" + "strings" + "testing" +) + +var update = flag.Bool("update", false, "update reference files") + +// TestBlockHuff tests huffman encoding against reference files +// to detect possible regressions. +// If encoding/bit allocation changes you can regenerate these files +// by using the -update flag. +func TestBlockHuff(t *testing.T) { + // determine input files + match, err := filepath.Glob("testdata/huffman-*.in") + if err != nil { + t.Fatal(err) + } + + for _, in := range match { + out := in // for files where input and output are identical + if strings.HasSuffix(in, ".in") { + out = in[:len(in)-len(".in")] + ".golden" + } + testBlockHuff(t, in, out) + } +} + +func testBlockHuff(t *testing.T, in, out string) { + all, err := os.ReadFile(in) + if err != nil { + t.Error(err) + return + } + var buf bytes.Buffer + bw := newHuffmanBitWriter(&buf) + bw.writeBlockHuff(false, all) + bw.flush() + got := buf.Bytes() + + want, err := os.ReadFile(out) + if err != nil && !*update { + t.Error(err) + return + } + + t.Logf("Testing %q", in) + if !bytes.Equal(got, want) { + if *update { + if in != out { + t.Logf("Updating %q", out) + if err := os.WriteFile(out, got, 0666); err != nil { + t.Error(err) + } + return + } + // in == out: don't accidentally destroy input + t.Errorf("WARNING: -update did not rewrite input file %s", in) + } + + t.Errorf("%q != %q (see %q)", in, out, in+".got") + if err := os.WriteFile(in+".got", got, 0666); err != nil { + t.Error(err) + } + return + } + t.Log("Output ok") + + // Test if the writer produces the same output after reset. + buf.Reset() + bw.reset(&buf) + bw.writeBlockHuff(false, all) + bw.flush() + got = buf.Bytes() + if !bytes.Equal(got, want) { + t.Errorf("after reset %q != %q (see %q)", in, out, in+".reset.got") + if err := os.WriteFile(in+".reset.got", got, 0666); err != nil { + t.Error(err) + } + return + } + t.Log("Reset ok") + testWriterEOF(t, "huff", huffTest{input: in}, true) +} + +type huffTest struct { + tokens []token + input string // File name of input data matching the tokens. + want string // File name of data with the expected output with input available. + wantNoInput string // File name of the expected output when no input is available. +} + +const ml = 0x7fc00000 // Maximum length token. Used to reduce the size of writeBlockTests + +var writeBlockTests = []huffTest{ + { + input: "testdata/huffman-null-max.in", + want: "testdata/huffman-null-max.%s.expect", + wantNoInput: "testdata/huffman-null-max.%s.expect-noinput", + tokens: []token{0x0, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, 0x0, 0x0}, + }, + { + input: "testdata/huffman-pi.in", + want: "testdata/huffman-pi.%s.expect", + wantNoInput: "testdata/huffman-pi.%s.expect-noinput", + tokens: []token{0x33, 0x2e, 0x31, 0x34, 0x31, 0x35, 0x39, 0x32, 0x36, 0x35, 0x33, 0x35, 0x38, 0x39, 0x37, 0x39, 0x33, 0x32, 0x33, 0x38, 0x34, 0x36, 0x32, 0x36, 0x34, 0x33, 0x33, 0x38, 0x33, 0x32, 0x37, 0x39, 0x35, 0x30, 0x32, 0x38, 0x38, 0x34, 0x31, 0x39, 0x37, 0x31, 0x36, 0x39, 0x33, 0x39, 0x39, 0x33, 0x37, 0x35, 0x31, 0x30, 0x35, 0x38, 0x32, 0x30, 0x39, 0x37, 0x34, 0x39, 0x34, 0x34, 0x35, 0x39, 0x32, 0x33, 0x30, 0x37, 0x38, 0x31, 0x36, 0x34, 0x30, 0x36, 0x32, 0x38, 0x36, 0x32, 0x30, 0x38, 0x39, 0x39, 0x38, 0x36, 0x32, 0x38, 0x30, 0x33, 0x34, 0x38, 0x32, 0x35, 0x33, 0x34, 0x32, 0x31, 0x31, 0x37, 0x30, 0x36, 0x37, 0x39, 0x38, 0x32, 0x31, 0x34, 0x38, 0x30, 0x38, 0x36, 0x35, 0x31, 0x33, 0x32, 0x38, 0x32, 0x33, 0x30, 0x36, 0x36, 0x34, 0x37, 0x30, 0x39, 0x33, 0x38, 0x34, 0x34, 0x36, 0x30, 0x39, 0x35, 0x35, 0x30, 0x35, 0x38, 0x32, 0x32, 0x33, 0x31, 0x37, 0x32, 0x35, 0x33, 0x35, 0x39, 0x34, 0x30, 0x38, 0x31, 0x32, 0x38, 0x34, 0x38, 0x31, 0x31, 0x31, 0x37, 0x34, 0x4040007e, 0x34, 0x31, 0x30, 0x32, 0x37, 0x30, 0x31, 0x39, 0x33, 0x38, 0x35, 0x32, 0x31, 0x31, 0x30, 0x35, 0x35, 0x35, 0x39, 0x36, 0x34, 0x34, 0x36, 0x32, 0x32, 0x39, 0x34, 0x38, 0x39, 0x35, 0x34, 0x39, 0x33, 0x30, 0x33, 0x38, 0x31, 0x40400012, 0x32, 0x38, 0x38, 0x31, 0x30, 0x39, 0x37, 0x35, 0x36, 0x36, 0x35, 0x39, 0x33, 0x33, 0x34, 0x34, 0x36, 0x40400047, 0x37, 0x35, 0x36, 0x34, 0x38, 0x32, 0x33, 0x33, 0x37, 0x38, 0x36, 0x37, 0x38, 0x33, 0x31, 0x36, 0x35, 0x32, 0x37, 0x31, 0x32, 0x30, 0x31, 0x39, 0x30, 0x39, 0x31, 0x34, 0x4040001a, 0x35, 0x36, 0x36, 0x39, 0x32, 0x33, 0x34, 0x36, 0x404000b2, 0x36, 0x31, 0x30, 0x34, 0x35, 0x34, 0x33, 0x32, 0x36, 0x40400032, 0x31, 0x33, 0x33, 0x39, 0x33, 0x36, 0x30, 0x37, 0x32, 0x36, 0x30, 0x32, 0x34, 0x39, 0x31, 0x34, 0x31, 0x32, 0x37, 0x33, 0x37, 0x32, 0x34, 0x35, 0x38, 0x37, 0x30, 0x30, 0x36, 0x36, 0x30, 0x36, 0x33, 0x31, 0x35, 0x35, 0x38, 0x38, 0x31, 0x37, 0x34, 0x38, 0x38, 0x31, 0x35, 0x32, 0x30, 0x39, 0x32, 0x30, 0x39, 0x36, 0x32, 0x38, 0x32, 0x39, 0x32, 0x35, 0x34, 0x30, 0x39, 0x31, 0x37, 0x31, 0x35, 0x33, 0x36, 0x34, 0x33, 0x36, 0x37, 0x38, 0x39, 0x32, 0x35, 0x39, 0x30, 0x33, 0x36, 0x30, 0x30, 0x31, 0x31, 0x33, 0x33, 0x30, 0x35, 0x33, 0x30, 0x35, 0x34, 0x38, 0x38, 0x32, 0x30, 0x34, 0x36, 0x36, 0x35, 0x32, 0x31, 0x33, 0x38, 0x34, 0x31, 0x34, 0x36, 0x39, 0x35, 0x31, 0x39, 0x34, 0x31, 0x35, 0x31, 0x31, 0x36, 0x30, 0x39, 0x34, 0x33, 0x33, 0x30, 0x35, 0x37, 0x32, 0x37, 0x30, 0x33, 0x36, 0x35, 0x37, 0x35, 0x39, 0x35, 0x39, 0x31, 0x39, 0x35, 0x33, 0x30, 0x39, 0x32, 0x31, 0x38, 0x36, 0x31, 0x31, 0x37, 0x404000e9, 0x33, 0x32, 0x40400009, 0x39, 0x33, 0x31, 0x30, 0x35, 0x31, 0x31, 0x38, 0x35, 0x34, 0x38, 0x30, 0x37, 0x4040010e, 0x33, 0x37, 0x39, 0x39, 0x36, 0x32, 0x37, 0x34, 0x39, 0x35, 0x36, 0x37, 0x33, 0x35, 0x31, 0x38, 0x38, 0x35, 0x37, 0x35, 0x32, 0x37, 0x32, 0x34, 0x38, 0x39, 0x31, 0x32, 0x32, 0x37, 0x39, 0x33, 0x38, 0x31, 0x38, 0x33, 0x30, 0x31, 0x31, 0x39, 0x34, 0x39, 0x31, 0x32, 0x39, 0x38, 0x33, 0x33, 0x36, 0x37, 0x33, 0x33, 0x36, 0x32, 0x34, 0x34, 0x30, 0x36, 0x35, 0x36, 0x36, 0x34, 0x33, 0x30, 0x38, 0x36, 0x30, 0x32, 0x31, 0x33, 0x39, 0x34, 0x39, 0x34, 0x36, 0x33, 0x39, 0x35, 0x32, 0x32, 0x34, 0x37, 0x33, 0x37, 0x31, 0x39, 0x30, 0x37, 0x30, 0x32, 0x31, 0x37, 0x39, 0x38, 0x40800099, 0x37, 0x30, 0x32, 0x37, 0x37, 0x30, 0x35, 0x33, 0x39, 0x32, 0x31, 0x37, 0x31, 0x37, 0x36, 0x32, 0x39, 0x33, 0x31, 0x37, 0x36, 0x37, 0x35, 0x40800232, 0x37, 0x34, 0x38, 0x31, 0x40400006, 0x36, 0x36, 0x39, 0x34, 0x30, 0x404001e7, 0x30, 0x30, 0x30, 0x35, 0x36, 0x38, 0x31, 0x32, 0x37, 0x31, 0x34, 0x35, 0x32, 0x36, 0x33, 0x35, 0x36, 0x30, 0x38, 0x32, 0x37, 0x37, 0x38, 0x35, 0x37, 0x37, 0x31, 0x33, 0x34, 0x32, 0x37, 0x35, 0x37, 0x37, 0x38, 0x39, 0x36, 0x40400129, 0x33, 0x36, 0x33, 0x37, 0x31, 0x37, 0x38, 0x37, 0x32, 0x31, 0x34, 0x36, 0x38, 0x34, 0x34, 0x30, 0x39, 0x30, 0x31, 0x32, 0x32, 0x34, 0x39, 0x35, 0x33, 0x34, 0x33, 0x30, 0x31, 0x34, 0x36, 0x35, 0x34, 0x39, 0x35, 0x38, 0x35, 0x33, 0x37, 0x31, 0x30, 0x35, 0x30, 0x37, 0x39, 0x404000ca, 0x36, 0x40400153, 0x38, 0x39, 0x32, 0x33, 0x35, 0x34, 0x404001c9, 0x39, 0x35, 0x36, 0x31, 0x31, 0x32, 0x31, 0x32, 0x39, 0x30, 0x32, 0x31, 0x39, 0x36, 0x30, 0x38, 0x36, 0x34, 0x30, 0x33, 0x34, 0x34, 0x31, 0x38, 0x31, 0x35, 0x39, 0x38, 0x31, 0x33, 0x36, 0x32, 0x39, 0x37, 0x37, 0x34, 0x40400074, 0x30, 0x39, 0x39, 0x36, 0x30, 0x35, 0x31, 0x38, 0x37, 0x30, 0x37, 0x32, 0x31, 0x31, 0x33, 0x34, 0x39, 0x40800000, 0x38, 0x33, 0x37, 0x32, 0x39, 0x37, 0x38, 0x30, 0x34, 0x39, 0x39, 0x404002da, 0x39, 0x37, 0x33, 0x31, 0x37, 0x33, 0x32, 0x38, 0x4040018a, 0x36, 0x33, 0x31, 0x38, 0x35, 0x40400301, 0x404002e8, 0x34, 0x35, 0x35, 0x33, 0x34, 0x36, 0x39, 0x30, 0x38, 0x33, 0x30, 0x32, 0x36, 0x34, 0x32, 0x35, 0x32, 0x32, 0x33, 0x30, 0x404002e3, 0x40400267, 0x38, 0x35, 0x30, 0x33, 0x35, 0x32, 0x36, 0x31, 0x39, 0x33, 0x31, 0x31, 0x40400212, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x33, 0x31, 0x33, 0x37, 0x38, 0x33, 0x38, 0x37, 0x35, 0x32, 0x38, 0x38, 0x36, 0x35, 0x38, 0x37, 0x35, 0x33, 0x33, 0x32, 0x30, 0x38, 0x33, 0x38, 0x31, 0x34, 0x32, 0x30, 0x36, 0x40400140, 0x4040012b, 0x31, 0x34, 0x37, 0x33, 0x30, 0x33, 0x35, 0x39, 0x4080032e, 0x39, 0x30, 0x34, 0x32, 0x38, 0x37, 0x35, 0x35, 0x34, 0x36, 0x38, 0x37, 0x33, 0x31, 0x31, 0x35, 0x39, 0x35, 0x40400355, 0x33, 0x38, 0x38, 0x32, 0x33, 0x35, 0x33, 0x37, 0x38, 0x37, 0x35, 0x4080037f, 0x39, 0x4040013a, 0x31, 0x40400148, 0x38, 0x30, 0x35, 0x33, 0x4040018a, 0x32, 0x32, 0x36, 0x38, 0x30, 0x36, 0x36, 0x31, 0x33, 0x30, 0x30, 0x31, 0x39, 0x32, 0x37, 0x38, 0x37, 0x36, 0x36, 0x31, 0x31, 0x31, 0x39, 0x35, 0x39, 0x40400237, 0x36, 0x40800124, 0x38, 0x39, 0x33, 0x38, 0x30, 0x39, 0x35, 0x32, 0x35, 0x37, 0x32, 0x30, 0x31, 0x30, 0x36, 0x35, 0x34, 0x38, 0x35, 0x38, 0x36, 0x33, 0x32, 0x37, 0x4040009a, 0x39, 0x33, 0x36, 0x31, 0x35, 0x33, 0x40400220, 0x4080015c, 0x32, 0x33, 0x30, 0x33, 0x30, 0x31, 0x39, 0x35, 0x32, 0x30, 0x33, 0x35, 0x33, 0x30, 0x31, 0x38, 0x35, 0x32, 0x40400171, 0x40400075, 0x33, 0x36, 0x32, 0x32, 0x35, 0x39, 0x39, 0x34, 0x31, 0x33, 0x40400254, 0x34, 0x39, 0x37, 0x32, 0x31, 0x37, 0x404000de, 0x33, 0x34, 0x37, 0x39, 0x31, 0x33, 0x31, 0x35, 0x31, 0x35, 0x35, 0x37, 0x34, 0x38, 0x35, 0x37, 0x32, 0x34, 0x32, 0x34, 0x35, 0x34, 0x31, 0x35, 0x30, 0x36, 0x39, 0x4040013f, 0x38, 0x32, 0x39, 0x35, 0x33, 0x33, 0x31, 0x31, 0x36, 0x38, 0x36, 0x31, 0x37, 0x32, 0x37, 0x38, 0x40400337, 0x39, 0x30, 0x37, 0x35, 0x30, 0x39, 0x4040010d, 0x37, 0x35, 0x34, 0x36, 0x33, 0x37, 0x34, 0x36, 0x34, 0x39, 0x33, 0x39, 0x33, 0x31, 0x39, 0x32, 0x35, 0x35, 0x30, 0x36, 0x30, 0x34, 0x30, 0x30, 0x39, 0x4040026b, 0x31, 0x36, 0x37, 0x31, 0x31, 0x33, 0x39, 0x30, 0x30, 0x39, 0x38, 0x40400335, 0x34, 0x30, 0x31, 0x32, 0x38, 0x35, 0x38, 0x33, 0x36, 0x31, 0x36, 0x30, 0x33, 0x35, 0x36, 0x33, 0x37, 0x30, 0x37, 0x36, 0x36, 0x30, 0x31, 0x30, 0x34, 0x40400172, 0x38, 0x31, 0x39, 0x34, 0x32, 0x39, 0x4080041e, 0x404000ef, 0x4040028b, 0x37, 0x38, 0x33, 0x37, 0x34, 0x404004a8, 0x38, 0x32, 0x35, 0x35, 0x33, 0x37, 0x40800209, 0x32, 0x36, 0x38, 0x4040002e, 0x34, 0x30, 0x34, 0x37, 0x404001d1, 0x34, 0x404004b5, 0x4040038d, 0x38, 0x34, 0x404003a8, 0x36, 0x40c0031f, 0x33, 0x33, 0x31, 0x33, 0x36, 0x37, 0x37, 0x30, 0x32, 0x38, 0x39, 0x38, 0x39, 0x31, 0x35, 0x32, 0x40400062, 0x35, 0x32, 0x31, 0x36, 0x32, 0x30, 0x35, 0x36, 0x39, 0x36, 0x40400411, 0x30, 0x35, 0x38, 0x40400477, 0x35, 0x40400498, 0x35, 0x31, 0x31, 0x40400209, 0x38, 0x32, 0x34, 0x33, 0x30, 0x30, 0x33, 0x35, 0x35, 0x38, 0x37, 0x36, 0x34, 0x30, 0x32, 0x34, 0x37, 0x34, 0x39, 0x36, 0x34, 0x37, 0x33, 0x32, 0x36, 0x33, 0x4040043e, 0x39, 0x39, 0x32, 0x4040044b, 0x34, 0x32, 0x36, 0x39, 0x40c002c5, 0x37, 0x404001d6, 0x34, 0x4040053d, 0x4040041d, 0x39, 0x33, 0x34, 0x31, 0x37, 0x404001ad, 0x31, 0x32, 0x4040002a, 0x34, 0x4040019e, 0x31, 0x35, 0x30, 0x33, 0x30, 0x32, 0x38, 0x36, 0x31, 0x38, 0x32, 0x39, 0x37, 0x34, 0x35, 0x35, 0x35, 0x37, 0x30, 0x36, 0x37, 0x34, 0x40400135, 0x35, 0x30, 0x35, 0x34, 0x39, 0x34, 0x35, 0x38, 0x404001c5, 0x39, 0x40400051, 0x35, 0x36, 0x404001ec, 0x37, 0x32, 0x31, 0x30, 0x37, 0x39, 0x40400159, 0x33, 0x30, 0x4040010a, 0x33, 0x32, 0x31, 0x31, 0x36, 0x35, 0x33, 0x34, 0x34, 0x39, 0x38, 0x37, 0x32, 0x30, 0x32, 0x37, 0x4040011b, 0x30, 0x32, 0x33, 0x36, 0x34, 0x4040022e, 0x35, 0x34, 0x39, 0x39, 0x31, 0x31, 0x39, 0x38, 0x40400418, 0x34, 0x4040011b, 0x35, 0x33, 0x35, 0x36, 0x36, 0x33, 0x36, 0x39, 0x40400450, 0x32, 0x36, 0x35, 0x404002e4, 0x37, 0x38, 0x36, 0x32, 0x35, 0x35, 0x31, 0x404003da, 0x31, 0x37, 0x35, 0x37, 0x34, 0x36, 0x37, 0x32, 0x38, 0x39, 0x30, 0x39, 0x37, 0x37, 0x37, 0x37, 0x40800453, 0x30, 0x30, 0x30, 0x404005fd, 0x37, 0x30, 0x404004df, 0x36, 0x404003e9, 0x34, 0x39, 0x31, 0x4040041e, 0x40400297, 0x32, 0x31, 0x34, 0x37, 0x37, 0x32, 0x33, 0x35, 0x30, 0x31, 0x34, 0x31, 0x34, 0x40400643, 0x33, 0x35, 0x36, 0x404004af, 0x31, 0x36, 0x31, 0x33, 0x36, 0x31, 0x31, 0x35, 0x37, 0x33, 0x35, 0x32, 0x35, 0x40400504, 0x33, 0x34, 0x4040005b, 0x31, 0x38, 0x4040047b, 0x38, 0x34, 0x404005e7, 0x33, 0x33, 0x32, 0x33, 0x39, 0x30, 0x37, 0x33, 0x39, 0x34, 0x31, 0x34, 0x33, 0x33, 0x33, 0x34, 0x35, 0x34, 0x37, 0x37, 0x36, 0x32, 0x34, 0x40400242, 0x32, 0x35, 0x31, 0x38, 0x39, 0x38, 0x33, 0x35, 0x36, 0x39, 0x34, 0x38, 0x35, 0x35, 0x36, 0x32, 0x30, 0x39, 0x39, 0x32, 0x31, 0x39, 0x32, 0x32, 0x32, 0x31, 0x38, 0x34, 0x32, 0x37, 0x4040023e, 0x32, 0x404000ba, 0x36, 0x38, 0x38, 0x37, 0x36, 0x37, 0x31, 0x37, 0x39, 0x30, 0x40400055, 0x30, 0x40800106, 0x36, 0x36, 0x404003e7, 0x38, 0x38, 0x36, 0x32, 0x37, 0x32, 0x404006dc, 0x31, 0x37, 0x38, 0x36, 0x30, 0x38, 0x35, 0x37, 0x40400073, 0x33, 0x408002fc, 0x37, 0x39, 0x37, 0x36, 0x36, 0x38, 0x31, 0x404002bd, 0x30, 0x30, 0x39, 0x35, 0x33, 0x38, 0x38, 0x40400638, 0x33, 0x404006a5, 0x30, 0x36, 0x38, 0x30, 0x30, 0x36, 0x34, 0x32, 0x32, 0x35, 0x31, 0x32, 0x35, 0x32, 0x4040057b, 0x37, 0x33, 0x39, 0x32, 0x40400297, 0x40400474, 0x34, 0x408006b3, 0x38, 0x36, 0x32, 0x36, 0x39, 0x34, 0x35, 0x404001e5, 0x34, 0x31, 0x39, 0x36, 0x35, 0x32, 0x38, 0x35, 0x30, 0x40400099, 0x4040039c, 0x31, 0x38, 0x36, 0x33, 0x404001be, 0x34, 0x40800154, 0x32, 0x30, 0x33, 0x39, 0x4040058b, 0x34, 0x35, 0x404002bc, 0x32, 0x33, 0x37, 0x4040042c, 0x36, 0x40400510, 0x35, 0x36, 0x40400638, 0x37, 0x31, 0x39, 0x31, 0x37, 0x32, 0x38, 0x40400171, 0x37, 0x36, 0x34, 0x36, 0x35, 0x37, 0x35, 0x37, 0x33, 0x39, 0x40400101, 0x33, 0x38, 0x39, 0x40400748, 0x38, 0x33, 0x32, 0x36, 0x34, 0x35, 0x39, 0x39, 0x35, 0x38, 0x404006a7, 0x30, 0x34, 0x37, 0x38, 0x404001de, 0x40400328, 0x39, 0x4040002d, 0x36, 0x34, 0x30, 0x37, 0x38, 0x39, 0x35, 0x31, 0x4040008e, 0x36, 0x38, 0x33, 0x4040012f, 0x32, 0x35, 0x39, 0x35, 0x37, 0x30, 0x40400468, 0x38, 0x32, 0x32, 0x404002c8, 0x32, 0x4040061b, 0x34, 0x30, 0x37, 0x37, 0x32, 0x36, 0x37, 0x31, 0x39, 0x34, 0x37, 0x38, 0x40400319, 0x38, 0x32, 0x36, 0x30, 0x31, 0x34, 0x37, 0x36, 0x39, 0x39, 0x30, 0x39, 0x404004e8, 0x30, 0x31, 0x33, 0x36, 0x33, 0x39, 0x34, 0x34, 0x33, 0x4040027f, 0x33, 0x30, 0x40400105, 0x32, 0x30, 0x33, 0x34, 0x39, 0x36, 0x32, 0x35, 0x32, 0x34, 0x35, 0x31, 0x37, 0x404003b5, 0x39, 0x36, 0x35, 0x31, 0x34, 0x33, 0x31, 0x34, 0x32, 0x39, 0x38, 0x30, 0x39, 0x31, 0x39, 0x30, 0x36, 0x35, 0x39, 0x32, 0x40400282, 0x37, 0x32, 0x32, 0x31, 0x36, 0x39, 0x36, 0x34, 0x36, 0x40400419, 0x4040007a, 0x35, 0x4040050e, 0x34, 0x40800565, 0x38, 0x40400559, 0x39, 0x37, 0x4040057b, 0x35, 0x34, 0x4040049d, 0x4040023e, 0x37, 0x4040065a, 0x38, 0x34, 0x36, 0x38, 0x31, 0x33, 0x4040008c, 0x36, 0x38, 0x33, 0x38, 0x36, 0x38, 0x39, 0x34, 0x32, 0x37, 0x37, 0x34, 0x31, 0x35, 0x35, 0x39, 0x39, 0x31, 0x38, 0x35, 0x4040005a, 0x32, 0x34, 0x35, 0x39, 0x35, 0x33, 0x39, 0x35, 0x39, 0x34, 0x33, 0x31, 0x404005b7, 0x37, 0x40400012, 0x36, 0x38, 0x30, 0x38, 0x34, 0x35, 0x404002e7, 0x37, 0x33, 0x4040081e, 0x39, 0x35, 0x38, 0x34, 0x38, 0x36, 0x35, 0x33, 0x38, 0x404006e8, 0x36, 0x32, 0x404000f2, 0x36, 0x30, 0x39, 0x404004b6, 0x36, 0x30, 0x38, 0x30, 0x35, 0x31, 0x32, 0x34, 0x33, 0x38, 0x38, 0x34, 0x4040013a, 0x4040000b, 0x34, 0x31, 0x33, 0x4040030f, 0x37, 0x36, 0x32, 0x37, 0x38, 0x40400341, 0x37, 0x31, 0x35, 0x4040059b, 0x33, 0x35, 0x39, 0x39, 0x37, 0x37, 0x30, 0x30, 0x31, 0x32, 0x39, 0x40400472, 0x38, 0x39, 0x34, 0x34, 0x31, 0x40400277, 0x36, 0x38, 0x35, 0x35, 0x4040005f, 0x34, 0x30, 0x36, 0x33, 0x404008e6, 0x32, 0x30, 0x37, 0x32, 0x32, 0x40400158, 0x40800203, 0x34, 0x38, 0x31, 0x35, 0x38, 0x40400205, 0x404001fe, 0x4040027a, 0x40400298, 0x33, 0x39, 0x34, 0x35, 0x32, 0x32, 0x36, 0x37, 0x40c00496, 0x38, 0x4040058a, 0x32, 0x31, 0x404002ea, 0x32, 0x40400387, 0x35, 0x34, 0x36, 0x36, 0x36, 0x4040051b, 0x32, 0x33, 0x39, 0x38, 0x36, 0x34, 0x35, 0x36, 0x404004c4, 0x31, 0x36, 0x33, 0x35, 0x40800253, 0x40400811, 0x37, 0x404008ad, 0x39, 0x38, 0x4040045e, 0x39, 0x33, 0x36, 0x33, 0x34, 0x4040075b, 0x37, 0x34, 0x33, 0x32, 0x34, 0x4040047b, 0x31, 0x35, 0x30, 0x37, 0x36, 0x404004bb, 0x37, 0x39, 0x34, 0x35, 0x31, 0x30, 0x39, 0x4040003e, 0x30, 0x39, 0x34, 0x30, 0x404006a6, 0x38, 0x38, 0x37, 0x39, 0x37, 0x31, 0x30, 0x38, 0x39, 0x33, 0x404008f0, 0x36, 0x39, 0x31, 0x33, 0x36, 0x38, 0x36, 0x37, 0x32, 0x4040025b, 0x404001fe, 0x35, 0x4040053f, 0x40400468, 0x40400801, 0x31, 0x37, 0x39, 0x32, 0x38, 0x36, 0x38, 0x404008cc, 0x38, 0x37, 0x34, 0x37, 0x4080079e, 0x38, 0x32, 0x34, 0x4040097a, 0x38, 0x4040025b, 0x37, 0x31, 0x34, 0x39, 0x30, 0x39, 0x36, 0x37, 0x35, 0x39, 0x38, 0x404006ef, 0x33, 0x36, 0x35, 0x40400134, 0x38, 0x31, 0x4040005c, 0x40400745, 0x40400936, 0x36, 0x38, 0x32, 0x39, 0x4040057e, 0x38, 0x37, 0x32, 0x32, 0x36, 0x35, 0x38, 0x38, 0x30, 0x40400611, 0x35, 0x40400249, 0x34, 0x32, 0x37, 0x30, 0x34, 0x37, 0x37, 0x35, 0x35, 0x4040081e, 0x33, 0x37, 0x39, 0x36, 0x34, 0x31, 0x34, 0x35, 0x31, 0x35, 0x32, 0x404005fd, 0x32, 0x33, 0x34, 0x33, 0x36, 0x34, 0x35, 0x34, 0x404005de, 0x34, 0x34, 0x34, 0x37, 0x39, 0x35, 0x4040003c, 0x40400523, 0x408008e6, 0x34, 0x31, 0x4040052a, 0x33, 0x40400304, 0x35, 0x32, 0x33, 0x31, 0x40800841, 0x31, 0x36, 0x36, 0x31, 0x404008b2, 0x35, 0x39, 0x36, 0x39, 0x35, 0x33, 0x36, 0x32, 0x33, 0x31, 0x34, 0x404005ff, 0x32, 0x34, 0x38, 0x34, 0x39, 0x33, 0x37, 0x31, 0x38, 0x37, 0x31, 0x31, 0x30, 0x31, 0x34, 0x35, 0x37, 0x36, 0x35, 0x34, 0x40400761, 0x30, 0x32, 0x37, 0x39, 0x39, 0x33, 0x34, 0x34, 0x30, 0x33, 0x37, 0x34, 0x32, 0x30, 0x30, 0x37, 0x4040093f, 0x37, 0x38, 0x35, 0x33, 0x39, 0x30, 0x36, 0x32, 0x31, 0x39, 0x40800299, 0x40400345, 0x38, 0x34, 0x37, 0x408003d2, 0x38, 0x33, 0x33, 0x32, 0x31, 0x34, 0x34, 0x35, 0x37, 0x31, 0x40400284, 0x40400776, 0x34, 0x33, 0x35, 0x30, 0x40400928, 0x40400468, 0x35, 0x33, 0x31, 0x39, 0x31, 0x30, 0x34, 0x38, 0x34, 0x38, 0x31, 0x30, 0x30, 0x35, 0x33, 0x37, 0x30, 0x36, 0x404008bc, 0x4080059d, 0x40800781, 0x31, 0x40400559, 0x37, 0x4040031b, 0x35, 0x404007ec, 0x4040040c, 0x36, 0x33, 0x408007dc, 0x34, 0x40400971, 0x4080034e, 0x408003f5, 0x38, 0x4080052d, 0x40800887, 0x39, 0x40400187, 0x39, 0x31, 0x404008ce, 0x38, 0x31, 0x34, 0x36, 0x37, 0x35, 0x31, 0x4040062b, 0x31, 0x32, 0x33, 0x39, 0x40c001a9, 0x39, 0x30, 0x37, 0x31, 0x38, 0x36, 0x34, 0x39, 0x34, 0x32, 0x33, 0x31, 0x39, 0x36, 0x31, 0x35, 0x36, 0x404001ec, 0x404006bc, 0x39, 0x35, 0x40400926, 0x40400469, 0x4040011b, 0x36, 0x30, 0x33, 0x38, 0x40400a25, 0x4040016f, 0x40400384, 0x36, 0x32, 0x4040045a, 0x35, 0x4040084c, 0x36, 0x33, 0x38, 0x39, 0x33, 0x37, 0x37, 0x38, 0x37, 0x404008c5, 0x404000f8, 0x39, 0x37, 0x39, 0x32, 0x30, 0x37, 0x37, 0x33, 0x404005d7, 0x32, 0x31, 0x38, 0x32, 0x35, 0x36, 0x404007df, 0x36, 0x36, 0x404006d6, 0x34, 0x32, 0x4080067e, 0x36, 0x404006e6, 0x34, 0x34, 0x40400024, 0x35, 0x34, 0x39, 0x32, 0x30, 0x32, 0x36, 0x30, 0x35, 0x40400ab3, 0x408003e4, 0x32, 0x30, 0x31, 0x34, 0x39, 0x404004d2, 0x38, 0x35, 0x30, 0x37, 0x33, 0x40400599, 0x36, 0x36, 0x36, 0x30, 0x40400194, 0x32, 0x34, 0x33, 0x34, 0x30, 0x40400087, 0x30, 0x4040076b, 0x38, 0x36, 0x33, 0x40400956, 0x404007e4, 0x4040042b, 0x40400174, 0x35, 0x37, 0x39, 0x36, 0x32, 0x36, 0x38, 0x35, 0x36, 0x40400140, 0x35, 0x30, 0x38, 0x40400523, 0x35, 0x38, 0x37, 0x39, 0x36, 0x39, 0x39, 0x40400711, 0x35, 0x37, 0x34, 0x40400a18, 0x38, 0x34, 0x30, 0x404008b3, 0x31, 0x34, 0x35, 0x39, 0x31, 0x4040078c, 0x37, 0x30, 0x40400234, 0x30, 0x31, 0x40400be7, 0x31, 0x32, 0x40400c74, 0x30, 0x404003c3, 0x33, 0x39, 0x40400b2a, 0x40400112, 0x37, 0x31, 0x35, 0x404003b0, 0x34, 0x32, 0x30, 0x40800bf2, 0x39, 0x40400bc2, 0x30, 0x37, 0x40400341, 0x40400795, 0x40400aaf, 0x40400c62, 0x32, 0x31, 0x40400960, 0x32, 0x35, 0x31, 0x4040057b, 0x40400944, 0x39, 0x32, 0x404001b2, 0x38, 0x32, 0x36, 0x40400b66, 0x32, 0x40400278, 0x33, 0x32, 0x31, 0x35, 0x37, 0x39, 0x31, 0x39, 0x38, 0x34, 0x31, 0x34, 0x4080087b, 0x39, 0x31, 0x36, 0x34, 0x408006e8, 0x39, 0x40800b58, 0x404008db, 0x37, 0x32, 0x32, 0x40400321, 0x35, 0x404008a4, 0x40400141, 0x39, 0x31, 0x30, 0x404000bc, 0x40400c5b, 0x35, 0x32, 0x38, 0x30, 0x31, 0x37, 0x40400231, 0x37, 0x31, 0x32, 0x40400914, 0x38, 0x33, 0x32, 0x40400373, 0x31, 0x40400589, 0x30, 0x39, 0x33, 0x35, 0x33, 0x39, 0x36, 0x35, 0x37, 0x4040064b, 0x31, 0x30, 0x38, 0x33, 0x40400069, 0x35, 0x31, 0x4040077a, 0x40400d5a, 0x31, 0x34, 0x34, 0x34, 0x32, 0x31, 0x30, 0x30, 0x40400202, 0x30, 0x33, 0x4040019c, 0x31, 0x31, 0x30, 0x33, 0x40400c81, 0x40400009, 0x40400026, 0x40c00602, 0x35, 0x31, 0x36, 0x404005d9, 0x40800883, 0x4040092a, 0x35, 0x40800c42, 0x38, 0x35, 0x31, 0x37, 0x31, 0x34, 0x33, 0x37, 0x40400605, 0x4040006d, 0x31, 0x35, 0x35, 0x36, 0x35, 0x30, 0x38, 0x38, 0x404003b9, 0x39, 0x38, 0x39, 0x38, 0x35, 0x39, 0x39, 0x38, 0x32, 0x33, 0x38, 0x404001cf, 0x404009ba, 0x33, 0x4040016c, 0x4040043e, 0x404009c3, 0x38, 0x40800e05, 0x33, 0x32, 0x40400107, 0x35, 0x40400305, 0x33, 0x404001ca, 0x39, 0x4040041b, 0x39, 0x38, 0x4040087d, 0x34, 0x40400cb8, 0x37, 0x4040064b, 0x30, 0x37, 0x404000e5, 0x34, 0x38, 0x31, 0x34, 0x31, 0x40400539, 0x38, 0x35, 0x39, 0x34, 0x36, 0x31, 0x40400bc9, 0x38, 0x30}, + }, + { + input: "testdata/huffman-rand-1k.in", + want: "testdata/huffman-rand-1k.%s.expect", + wantNoInput: "testdata/huffman-rand-1k.%s.expect-noinput", + tokens: []token{0xf8, 0x8b, 0x96, 0x76, 0x48, 0xd, 0x85, 0x94, 0x25, 0x80, 0xaf, 0xc2, 0xfe, 0x8d, 0xe8, 0x20, 0xeb, 0x17, 0x86, 0xc9, 0xb7, 0xc5, 0xde, 0x6, 0xea, 0x7d, 0x18, 0x8b, 0xe7, 0x3e, 0x7, 0xda, 0xdf, 0xff, 0x6c, 0x73, 0xde, 0xcc, 0xe7, 0x6d, 0x8d, 0x4, 0x19, 0x49, 0x7f, 0x47, 0x1f, 0x48, 0x15, 0xb0, 0xe8, 0x9e, 0xf2, 0x31, 0x59, 0xde, 0x34, 0xb4, 0x5b, 0xe5, 0xe0, 0x9, 0x11, 0x30, 0xc2, 0x88, 0x5b, 0x7c, 0x5d, 0x14, 0x13, 0x6f, 0x23, 0xa9, 0xd, 0xbc, 0x2d, 0x23, 0xbe, 0xd9, 0xed, 0x75, 0x4, 0x6c, 0x99, 0xdf, 0xfd, 0x70, 0x66, 0xe6, 0xee, 0xd9, 0xb1, 0x9e, 0x6e, 0x83, 0x59, 0xd5, 0xd4, 0x80, 0x59, 0x98, 0x77, 0x89, 0x43, 0x38, 0xc9, 0xaf, 0x30, 0x32, 0x9a, 0x20, 0x1b, 0x46, 0x3d, 0x67, 0x6e, 0xd7, 0x72, 0x9e, 0x4e, 0x21, 0x4f, 0xc6, 0xe0, 0xd4, 0x7b, 0x4, 0x8d, 0xa5, 0x3, 0xf6, 0x5, 0x9b, 0x6b, 0xdc, 0x2a, 0x93, 0x77, 0x28, 0xfd, 0xb4, 0x62, 0xda, 0x20, 0xe7, 0x1f, 0xab, 0x6b, 0x51, 0x43, 0x39, 0x2f, 0xa0, 0x92, 0x1, 0x6c, 0x75, 0x3e, 0xf4, 0x35, 0xfd, 0x43, 0x2e, 0xf7, 0xa4, 0x75, 0xda, 0xea, 0x9b, 0xa, 0x64, 0xb, 0xe0, 0x23, 0x29, 0xbd, 0xf7, 0xe7, 0x83, 0x3c, 0xfb, 0xdf, 0xb3, 0xae, 0x4f, 0xa4, 0x47, 0x55, 0x99, 0xde, 0x2f, 0x96, 0x6e, 0x1c, 0x43, 0x4c, 0x87, 0xe2, 0x7c, 0xd9, 0x5f, 0x4c, 0x7c, 0xe8, 0x90, 0x3, 0xdb, 0x30, 0x95, 0xd6, 0x22, 0xc, 0x47, 0xb8, 0x4d, 0x6b, 0xbd, 0x24, 0x11, 0xab, 0x2c, 0xd7, 0xbe, 0x6e, 0x7a, 0xd6, 0x8, 0xa3, 0x98, 0xd8, 0xdd, 0x15, 0x6a, 0xfa, 0x93, 0x30, 0x1, 0x25, 0x1d, 0xa2, 0x74, 0x86, 0x4b, 0x6a, 0x95, 0xe8, 0xe1, 0x4e, 0xe, 0x76, 0xb9, 0x49, 0xa9, 0x5f, 0xa0, 0xa6, 0x63, 0x3c, 0x7e, 0x7e, 0x20, 0x13, 0x4f, 0xbb, 0x66, 0x92, 0xb8, 0x2e, 0xa4, 0xfa, 0x48, 0xcb, 0xae, 0xb9, 0x3c, 0xaf, 0xd3, 0x1f, 0xe1, 0xd5, 0x8d, 0x42, 0x6d, 0xf0, 0xfc, 0x8c, 0xc, 0x0, 0xde, 0x40, 0xab, 0x8b, 0x47, 0x97, 0x4e, 0xa8, 0xcf, 0x8e, 0xdb, 0xa6, 0x8b, 0x20, 0x9, 0x84, 0x7a, 0x66, 0xe5, 0x98, 0x29, 0x2, 0x95, 0xe6, 0x38, 0x32, 0x60, 0x3, 0xe3, 0x9a, 0x1e, 0x54, 0xe8, 0x63, 0x80, 0x48, 0x9c, 0xe7, 0x63, 0x33, 0x6e, 0xa0, 0x65, 0x83, 0xfa, 0xc6, 0xba, 0x7a, 0x43, 0x71, 0x5, 0xf5, 0x68, 0x69, 0x85, 0x9c, 0xba, 0x45, 0xcd, 0x6b, 0xb, 0x19, 0xd1, 0xbb, 0x7f, 0x70, 0x85, 0x92, 0xd1, 0xb4, 0x64, 0x82, 0xb1, 0xe4, 0x62, 0xc5, 0x3c, 0x46, 0x1f, 0x92, 0x31, 0x1c, 0x4e, 0x41, 0x77, 0xf7, 0xe7, 0x87, 0xa2, 0xf, 0x6e, 0xe8, 0x92, 0x3, 0x6b, 0xa, 0xe7, 0xa9, 0x3b, 0x11, 0xda, 0x66, 0x8a, 0x29, 0xda, 0x79, 0xe1, 0x64, 0x8d, 0xe3, 0x54, 0xd4, 0xf5, 0xef, 0x64, 0x87, 0x3b, 0xf4, 0xc2, 0xf4, 0x71, 0x13, 0xa9, 0xe9, 0xe0, 0xa2, 0x6, 0x14, 0xab, 0x5d, 0xa7, 0x96, 0x0, 0xd6, 0xc3, 0xcc, 0x57, 0xed, 0x39, 0x6a, 0x25, 0xcd, 0x76, 0xea, 0xba, 0x3a, 0xf2, 0xa1, 0x95, 0x5d, 0xe5, 0x71, 0xcf, 0x9c, 0x62, 0x9e, 0x6a, 0xfa, 0xd5, 0x31, 0xd1, 0xa8, 0x66, 0x30, 0x33, 0xaa, 0x51, 0x17, 0x13, 0x82, 0x99, 0xc8, 0x14, 0x60, 0x9f, 0x4d, 0x32, 0x6d, 0xda, 0x19, 0x26, 0x21, 0xdc, 0x7e, 0x2e, 0x25, 0x67, 0x72, 0xca, 0xf, 0x92, 0xcd, 0xf6, 0xd6, 0xcb, 0x97, 0x8a, 0x33, 0x58, 0x73, 0x70, 0x91, 0x1d, 0xbf, 0x28, 0x23, 0xa3, 0xc, 0xf1, 0x83, 0xc3, 0xc8, 0x56, 0x77, 0x68, 0xe3, 0x82, 0xba, 0xb9, 0x57, 0x56, 0x57, 0x9c, 0xc3, 0xd6, 0x14, 0x5, 0x3c, 0xb1, 0xaf, 0x93, 0xc8, 0x8a, 0x57, 0x7f, 0x53, 0xfa, 0x2f, 0xaa, 0x6e, 0x66, 0x83, 0xfa, 0x33, 0xd1, 0x21, 0xab, 0x1b, 0x71, 0xb4, 0x7c, 0xda, 0xfd, 0xfb, 0x7f, 0x20, 0xab, 0x5e, 0xd5, 0xca, 0xfd, 0xdd, 0xe0, 0xee, 0xda, 0xba, 0xa8, 0x27, 0x99, 0x97, 0x69, 0xc1, 0x3c, 0x82, 0x8c, 0xa, 0x5c, 0x2d, 0x5b, 0x88, 0x3e, 0x34, 0x35, 0x86, 0x37, 0x46, 0x79, 0xe1, 0xaa, 0x19, 0xfb, 0xaa, 0xde, 0x15, 0x9, 0xd, 0x1a, 0x57, 0xff, 0xb5, 0xf, 0xf3, 0x2b, 0x5a, 0x6a, 0x4d, 0x19, 0x77, 0x71, 0x45, 0xdf, 0x4f, 0xb3, 0xec, 0xf1, 0xeb, 0x18, 0x53, 0x3e, 0x3b, 0x47, 0x8, 0x9a, 0x73, 0xa0, 0x5c, 0x8c, 0x5f, 0xeb, 0xf, 0x3a, 0xc2, 0x43, 0x67, 0xb4, 0x66, 0x67, 0x80, 0x58, 0xe, 0xc1, 0xec, 0x40, 0xd4, 0x22, 0x94, 0xca, 0xf9, 0xe8, 0x92, 0xe4, 0x69, 0x38, 0xbe, 0x67, 0x64, 0xca, 0x50, 0xc7, 0x6, 0x67, 0x42, 0x6e, 0xa3, 0xf0, 0xb7, 0x6c, 0xf2, 0xe8, 0x5f, 0xb1, 0xaf, 0xe7, 0xdb, 0xbb, 0x77, 0xb5, 0xf8, 0xcb, 0x8, 0xc4, 0x75, 0x7e, 0xc0, 0xf9, 0x1c, 0x7f, 0x3c, 0x89, 0x2f, 0xd2, 0x58, 0x3a, 0xe2, 0xf8, 0x91, 0xb6, 0x7b, 0x24, 0x27, 0xe9, 0xae, 0x84, 0x8b, 0xde, 0x74, 0xac, 0xfd, 0xd9, 0xb7, 0x69, 0x2a, 0xec, 0x32, 0x6f, 0xf0, 0x92, 0x84, 0xf1, 0x40, 0xc, 0x8a, 0xbc, 0x39, 0x6e, 0x2e, 0x73, 0xd4, 0x6e, 0x8a, 0x74, 0x2a, 0xdc, 0x60, 0x1f, 0xa3, 0x7, 0xde, 0x75, 0x8b, 0x74, 0xc8, 0xfe, 0x63, 0x75, 0xf6, 0x3d, 0x63, 0xac, 0x33, 0x89, 0xc3, 0xf0, 0xf8, 0x2d, 0x6b, 0xb4, 0x9e, 0x74, 0x8b, 0x5c, 0x33, 0xb4, 0xca, 0xa8, 0xe4, 0x99, 0xb6, 0x90, 0xa1, 0xef, 0xf, 0xd3, 0x61, 0xb2, 0xc6, 0x1a, 0x94, 0x7c, 0x44, 0x55, 0xf4, 0x45, 0xff, 0x9e, 0xa5, 0x5a, 0xc6, 0xa0, 0xe8, 0x2a, 0xc1, 0x8d, 0x6f, 0x34, 0x11, 0xb9, 0xbe, 0x4e, 0xd9, 0x87, 0x97, 0x73, 0xcf, 0x3d, 0x23, 0xae, 0xd5, 0x1a, 0x5e, 0xae, 0x5d, 0x6a, 0x3, 0xf9, 0x22, 0xd, 0x10, 0xd9, 0x47, 0x69, 0x15, 0x3f, 0xee, 0x52, 0xa3, 0x8, 0xd2, 0x3c, 0x51, 0xf4, 0xf8, 0x9d, 0xe4, 0x98, 0x89, 0xc8, 0x67, 0x39, 0xd5, 0x5e, 0x35, 0x78, 0x27, 0xe8, 0x3c, 0x80, 0xae, 0x79, 0x71, 0xd2, 0x93, 0xf4, 0xaa, 0x51, 0x12, 0x1c, 0x4b, 0x1b, 0xe5, 0x6e, 0x15, 0x6f, 0xe4, 0xbb, 0x51, 0x9b, 0x45, 0x9f, 0xf9, 0xc4, 0x8c, 0x2a, 0xfb, 0x1a, 0xdf, 0x55, 0xd3, 0x48, 0x93, 0x27, 0x1, 0x26, 0xc2, 0x6b, 0x55, 0x6d, 0xa2, 0xfb, 0x84, 0x8b, 0xc9, 0x9e, 0x28, 0xc2, 0xef, 0x1a, 0x24, 0xec, 0x9b, 0xae, 0xbd, 0x60, 0xe9, 0x15, 0x35, 0xee, 0x42, 0xa4, 0x33, 0x5b, 0xfa, 0xf, 0xb6, 0xf7, 0x1, 0xa6, 0x2, 0x4c, 0xca, 0x90, 0x58, 0x3a, 0x96, 0x41, 0xe7, 0xcb, 0x9, 0x8c, 0xdb, 0x85, 0x4d, 0xa8, 0x89, 0xf3, 0xb5, 0x8e, 0xfd, 0x75, 0x5b, 0x4f, 0xed, 0xde, 0x3f, 0xeb, 0x38, 0xa3, 0xbe, 0xb0, 0x73, 0xfc, 0xb8, 0x54, 0xf7, 0x4c, 0x30, 0x67, 0x2e, 0x38, 0xa2, 0x54, 0x18, 0xba, 0x8, 0xbf, 0xf2, 0x39, 0xd5, 0xfe, 0xa5, 0x41, 0xc6, 0x66, 0x66, 0xba, 0x81, 0xef, 0x67, 0xe4, 0xe6, 0x3c, 0xc, 0xca, 0xa4, 0xa, 0x79, 0xb3, 0x57, 0x8b, 0x8a, 0x75, 0x98, 0x18, 0x42, 0x2f, 0x29, 0xa3, 0x82, 0xef, 0x9f, 0x86, 0x6, 0x23, 0xe1, 0x75, 0xfa, 0x8, 0xb1, 0xde, 0x17, 0x4a}, + }, + { + input: "testdata/huffman-rand-limit.in", + want: "testdata/huffman-rand-limit.%s.expect", + wantNoInput: "testdata/huffman-rand-limit.%s.expect-noinput", + tokens: []token{0x61, 0x51c00000, 0xa, 0xf8, 0x8b, 0x96, 0x76, 0x48, 0xa, 0x85, 0x94, 0x25, 0x80, 0xaf, 0xc2, 0xfe, 0x8d, 0xe8, 0x20, 0xeb, 0x17, 0x86, 0xc9, 0xb7, 0xc5, 0xde, 0x6, 0xea, 0x7d, 0x18, 0x8b, 0xe7, 0x3e, 0x7, 0xda, 0xdf, 0xff, 0x6c, 0x73, 0xde, 0xcc, 0xe7, 0x6d, 0x8d, 0x4, 0x19, 0x49, 0x7f, 0x47, 0x1f, 0x48, 0x15, 0xb0, 0xe8, 0x9e, 0xf2, 0x31, 0x59, 0xde, 0x34, 0xb4, 0x5b, 0xe5, 0xe0, 0x9, 0x11, 0x30, 0xc2, 0x88, 0x5b, 0x7c, 0x5d, 0x14, 0x13, 0x6f, 0x23, 0xa9, 0xa, 0xbc, 0x2d, 0x23, 0xbe, 0xd9, 0xed, 0x75, 0x4, 0x6c, 0x99, 0xdf, 0xfd, 0x70, 0x66, 0xe6, 0xee, 0xd9, 0xb1, 0x9e, 0x6e, 0x83, 0x59, 0xd5, 0xd4, 0x80, 0x59, 0x98, 0x77, 0x89, 0x43, 0x38, 0xc9, 0xaf, 0x30, 0x32, 0x9a, 0x20, 0x1b, 0x46, 0x3d, 0x67, 0x6e, 0xd7, 0x72, 0x9e, 0x4e, 0x21, 0x4f, 0xc6, 0xe0, 0xd4, 0x7b, 0x4, 0x8d, 0xa5, 0x3, 0xf6, 0x5, 0x9b, 0x6b, 0xdc, 0x2a, 0x93, 0x77, 0x28, 0xfd, 0xb4, 0x62, 0xda, 0x20, 0xe7, 0x1f, 0xab, 0x6b, 0x51, 0x43, 0x39, 0x2f, 0xa0, 0x92, 0x1, 0x6c, 0x75, 0x3e, 0xf4, 0x35, 0xfd, 0x43, 0x2e, 0xf7, 0xa4, 0x75, 0xda, 0xea, 0x9b, 0xa}, + }, + { + input: "testdata/huffman-shifts.in", + want: "testdata/huffman-shifts.%s.expect", + wantNoInput: "testdata/huffman-shifts.%s.expect-noinput", + tokens: []token{0x31, 0x30, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x52400001, 0xd, 0xa, 0x32, 0x33, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7fc00001, 0x7f400001}, + }, + { + input: "testdata/huffman-text-shift.in", + want: "testdata/huffman-text-shift.%s.expect", + wantNoInput: "testdata/huffman-text-shift.%s.expect-noinput", + tokens: []token{0x2f, 0x2f, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x32, 0x30, 0x30, 0x39, 0x54, 0x68, 0x47, 0x6f, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x2e, 0x41, 0x6c, 0x6c, 0x40800016, 0x72, 0x72, 0x76, 0x64, 0x2e, 0xd, 0xa, 0x2f, 0x2f, 0x55, 0x6f, 0x66, 0x74, 0x68, 0x69, 0x6f, 0x75, 0x72, 0x63, 0x63, 0x6f, 0x64, 0x69, 0x67, 0x6f, 0x76, 0x72, 0x6e, 0x64, 0x62, 0x79, 0x42, 0x53, 0x44, 0x2d, 0x74, 0x79, 0x6c, 0x40400020, 0x6c, 0x69, 0x63, 0x6e, 0x74, 0x68, 0x74, 0x63, 0x6e, 0x62, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x69, 0x6e, 0x74, 0x68, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x66, 0x69, 0x6c, 0x2e, 0xd, 0xa, 0xd, 0xa, 0x70, 0x63, 0x6b, 0x67, 0x6d, 0x69, 0x6e, 0x4040000a, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x6f, 0x22, 0x4040000c, 0x66, 0x75, 0x6e, 0x63, 0x6d, 0x69, 0x6e, 0x28, 0x29, 0x7b, 0xd, 0xa, 0x9, 0x76, 0x72, 0x62, 0x3d, 0x6d, 0x6b, 0x28, 0x5b, 0x5d, 0x62, 0x79, 0x74, 0x2c, 0x36, 0x35, 0x35, 0x33, 0x35, 0x29, 0xd, 0xa, 0x9, 0x66, 0x2c, 0x5f, 0x3a, 0x3d, 0x6f, 0x2e, 0x43, 0x72, 0x74, 0x28, 0x22, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x6e, 0x2d, 0x6e, 0x75, 0x6c, 0x6c, 0x2d, 0x6d, 0x78, 0x2e, 0x69, 0x6e, 0x22, 0x40800021, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x28, 0x62, 0x29, 0xd, 0xa, 0x7d, 0xd, 0xa, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x58, 0x78, 0x79, 0x7a, 0x21, 0x22, 0x23, 0xc2, 0xa4, 0x25, 0x26, 0x2f, 0x3f, 0x22}, + }, + { + input: "testdata/huffman-text.in", + want: "testdata/huffman-text.%s.expect", + wantNoInput: "testdata/huffman-text.%s.expect-noinput", + tokens: []token{0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, 0x30, 0x39, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x6f, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x4080001e, 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e, 0xd, 0xa, 0x2f, 0x2f, 0x20, 0x55, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x42, 0x53, 0x44, 0x2d, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x40800036, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0xd, 0xa, 0xd, 0xa, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x4040000f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x22, 0x6f, 0x73, 0x22, 0x4040000e, 0x66, 0x75, 0x6e, 0x63, 0x4080001b, 0x28, 0x29, 0x20, 0x7b, 0xd, 0xa, 0x9, 0x76, 0x61, 0x72, 0x20, 0x62, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x28, 0x5b, 0x5d, 0x62, 0x79, 0x74, 0x65, 0x2c, 0x20, 0x36, 0x35, 0x35, 0x33, 0x35, 0x29, 0xd, 0xa, 0x9, 0x66, 0x2c, 0x20, 0x5f, 0x20, 0x3a, 0x3d, 0x20, 0x6f, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x28, 0x22, 0x68, 0x75, 0x66, 0x66, 0x6d, 0x61, 0x6e, 0x2d, 0x6e, 0x75, 0x6c, 0x6c, 0x2d, 0x6d, 0x61, 0x78, 0x2e, 0x69, 0x6e, 0x22, 0x4080002a, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x28, 0x62, 0x29, 0xd, 0xa, 0x7d, 0xd, 0xa}, + }, + { + input: "testdata/huffman-zero.in", + want: "testdata/huffman-zero.%s.expect", + wantNoInput: "testdata/huffman-zero.%s.expect-noinput", + tokens: []token{0x30, ml, 0x4b800000}, + }, + { + input: "", + want: "", + wantNoInput: "testdata/null-long-match.%s.expect-noinput", + tokens: []token{0x0, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, ml, 0x41400000}, + }, +} + +// TestWriteBlock tests if the writeBlock encoding has changed. +// To update the reference files use the "-update" flag on the test. +func TestWriteBlock(t *testing.T) { + for _, test := range writeBlockTests { + testBlock(t, test, "wb") + } +} + +// TestWriteBlockDynamic tests if the writeBlockDynamic encoding has changed. +// To update the reference files use the "-update" flag on the test. +func TestWriteBlockDynamic(t *testing.T) { + for _, test := range writeBlockTests { + testBlock(t, test, "dyn") + } +} + +// testBlock tests a block against its references, +// or regenerate the references, if "-update" flag is set. +func testBlock(t *testing.T, test huffTest, ttype string) { + if test.want != "" { + test.want = fmt.Sprintf(test.want, ttype) + } + test.wantNoInput = fmt.Sprintf(test.wantNoInput, ttype) + if *update { + if test.input != "" { + t.Logf("Updating %q", test.want) + input, err := os.ReadFile(test.input) + if err != nil { + t.Error(err) + return + } + + f, err := os.Create(test.want) + if err != nil { + t.Error(err) + return + } + defer f.Close() + bw := newHuffmanBitWriter(f) + writeToType(t, ttype, bw, test.tokens, input) + } + + t.Logf("Updating %q", test.wantNoInput) + f, err := os.Create(test.wantNoInput) + if err != nil { + t.Error(err) + return + } + defer f.Close() + bw := newHuffmanBitWriter(f) + writeToType(t, ttype, bw, test.tokens, nil) + return + } + + if test.input != "" { + t.Logf("Testing %q", test.want) + input, err := os.ReadFile(test.input) + if err != nil { + t.Error(err) + return + } + want, err := os.ReadFile(test.want) + if err != nil { + t.Error(err) + return + } + var buf bytes.Buffer + bw := newHuffmanBitWriter(&buf) + writeToType(t, ttype, bw, test.tokens, input) + + got := buf.Bytes() + if !bytes.Equal(got, want) { + t.Errorf("writeBlock did not yield expected result for file %q with input. See %q", test.want, test.want+".got") + if err := os.WriteFile(test.want+".got", got, 0666); err != nil { + t.Error(err) + } + } + t.Log("Output ok") + + // Test if the writer produces the same output after reset. + buf.Reset() + bw.reset(&buf) + writeToType(t, ttype, bw, test.tokens, input) + bw.flush() + got = buf.Bytes() + if !bytes.Equal(got, want) { + t.Errorf("reset: writeBlock did not yield expected result for file %q with input. See %q", test.want, test.want+".reset.got") + if err := os.WriteFile(test.want+".reset.got", got, 0666); err != nil { + t.Error(err) + } + return + } + t.Log("Reset ok") + testWriterEOF(t, "wb", test, true) + } + t.Logf("Testing %q", test.wantNoInput) + wantNI, err := os.ReadFile(test.wantNoInput) + if err != nil { + t.Error(err) + return + } + var buf bytes.Buffer + bw := newHuffmanBitWriter(&buf) + writeToType(t, ttype, bw, test.tokens, nil) + + got := buf.Bytes() + if !bytes.Equal(got, wantNI) { + t.Errorf("writeBlock did not yield expected result for file %q with input. See %q", test.wantNoInput, test.wantNoInput+".got") + if err := os.WriteFile(test.want+".got", got, 0666); err != nil { + t.Error(err) + } + } else if got[0]&1 == 1 { + t.Error("got unexpected EOF") + return + } + + t.Log("Output ok") + + // Test if the writer produces the same output after reset. + buf.Reset() + bw.reset(&buf) + writeToType(t, ttype, bw, test.tokens, nil) + bw.flush() + got = buf.Bytes() + if !bytes.Equal(got, wantNI) { + t.Errorf("reset: writeBlock did not yield expected result for file %q without input. See %q", test.want, test.want+".reset.got") + if err := os.WriteFile(test.want+".reset.got", got, 0666); err != nil { + t.Error(err) + } + return + } + t.Log("Reset ok") + testWriterEOF(t, "wb", test, false) +} + +func writeToType(t *testing.T, ttype string, bw *huffmanBitWriter, tok []token, input []byte) { + switch ttype { + case "wb": + bw.writeBlock(tok, false, input) + case "dyn": + bw.writeBlockDynamic(tok, false, input) + default: + panic("unknown test type") + } + + if bw.err != nil { + t.Error(bw.err) + return + } + + bw.flush() + if bw.err != nil { + t.Error(bw.err) + return + } +} + +// testWriterEOF tests if the written block contains an EOF marker. +func testWriterEOF(t *testing.T, ttype string, test huffTest, useInput bool) { + if useInput && test.input == "" { + return + } + var input []byte + if useInput { + var err error + input, err = os.ReadFile(test.input) + if err != nil { + t.Error(err) + return + } + } + var buf bytes.Buffer + bw := newHuffmanBitWriter(&buf) + switch ttype { + case "wb": + bw.writeBlock(test.tokens, true, input) + case "dyn": + bw.writeBlockDynamic(test.tokens, true, input) + case "huff": + bw.writeBlockHuff(true, input) + default: + panic("unknown test type") + } + if bw.err != nil { + t.Error(bw.err) + return + } + + bw.flush() + if bw.err != nil { + t.Error(bw.err) + return + } + b := buf.Bytes() + if len(b) == 0 { + t.Error("no output received") + return + } + if b[0]&1 != 1 { + t.Errorf("block not marked with EOF for input %q", test.input) + return + } + t.Log("EOF ok") +} diff --git a/image/internal/compress/flate/huffman_code.go b/image/internal/compress/flate/huffman_code.go new file mode 100644 index 0000000..891537e --- /dev/null +++ b/image/internal/compress/flate/huffman_code.go @@ -0,0 +1,349 @@ +// 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 LICENSE file. + +package flate + +import ( + "math" + "math/bits" + "sort" +) + +// hcode is a huffman code with a bit code and bit length. +type hcode struct { + code, len uint16 +} + +type huffmanEncoder struct { + codes []hcode + freqcache []literalNode + bitCount [17]int32 + lns byLiteral // stored to avoid repeated allocation in generate + lfs byFreq // stored to avoid repeated allocation in generate +} + +type literalNode struct { + literal uint16 + freq int32 +} + +// A levelInfo describes the state of the constructed tree for a given depth. +type levelInfo struct { + // Our level. for better printing + level int32 + + // The frequency of the last node at this level + lastFreq int32 + + // The frequency of the next character to add to this level + nextCharFreq int32 + + // The frequency of the next pair (from level below) to add to this level. + // Only valid if the "needed" value of the next lower level is 0. + nextPairFreq int32 + + // The number of chains remaining to generate for this level before moving + // up to the next level + needed int32 +} + +// set sets the code and length of an hcode. +func (h *hcode) set(code uint16, length uint16) { + h.len = length + h.code = code +} + +func maxNode() literalNode { return literalNode{math.MaxUint16, math.MaxInt32} } + +func newHuffmanEncoder(size int) *huffmanEncoder { + return &huffmanEncoder{codes: make([]hcode, size)} +} + +// Generates a HuffmanCode corresponding to the fixed literal table +func generateFixedLiteralEncoding() *huffmanEncoder { + h := newHuffmanEncoder(maxNumLit) + codes := h.codes + var ch uint16 + for ch = 0; ch < maxNumLit; ch++ { + var bits uint16 + var size uint16 + switch { + case ch < 144: + // size 8, 000110000 .. 10111111 + bits = ch + 48 + size = 8 + break + case ch < 256: + // size 9, 110010000 .. 111111111 + bits = ch + 400 - 144 + size = 9 + break + case ch < 280: + // size 7, 0000000 .. 0010111 + bits = ch - 256 + size = 7 + break + default: + // size 8, 11000000 .. 11000111 + bits = ch + 192 - 280 + size = 8 + } + codes[ch] = hcode{code: reverseBits(bits, byte(size)), len: size} + } + return h +} + +func generateFixedOffsetEncoding() *huffmanEncoder { + h := newHuffmanEncoder(30) + codes := h.codes + for ch := range codes { + codes[ch] = hcode{code: reverseBits(uint16(ch), 5), len: 5} + } + return h +} + +var fixedLiteralEncoding *huffmanEncoder = generateFixedLiteralEncoding() +var fixedOffsetEncoding *huffmanEncoder = generateFixedOffsetEncoding() + +func (h *huffmanEncoder) bitLength(freq []int32) int { + var total int + for i, f := range freq { + if f != 0 { + total += int(f) * int(h.codes[i].len) + } + } + return total +} + +const maxBitsLimit = 16 + +// Return the number of literals assigned to each bit size in the Huffman encoding +// +// This method is only called when list.length >= 3 +// The cases of 0, 1, and 2 literals are handled by special case code. +// +// list An array of the literals with non-zero frequencies +// and their associated frequencies. The array is in order of increasing +// frequency, and has as its last element a special element with frequency +// MaxInt32 +// maxBits The maximum number of bits that should be used to encode any literal. +// Must be less than 16. +// return An integer array in which array[i] indicates the number of literals +// that should be encoded in i bits. +func (h *huffmanEncoder) bitCounts(list []literalNode, maxBits int32) []int32 { + if maxBits >= maxBitsLimit { + panic("flate: maxBits too large") + } + n := int32(len(list)) + list = list[0 : n+1] + list[n] = maxNode() + + // The tree can't have greater depth than n - 1, no matter what. This + // saves a little bit of work in some small cases + if maxBits > n-1 { + maxBits = n - 1 + } + + // Create information about each of the levels. + // A bogus "Level 0" whose sole purpose is so that + // level1.prev.needed==0. This makes level1.nextPairFreq + // be a legitimate value that never gets chosen. + var levels [maxBitsLimit]levelInfo + // leafCounts[i] counts the number of literals at the left + // of ancestors of the rightmost node at level i. + // leafCounts[i][j] is the number of literals at the left + // of the level j ancestor. + var leafCounts [maxBitsLimit][maxBitsLimit]int32 + + for level := int32(1); level <= maxBits; level++ { + // For every level, the first two items are the first two characters. + // We initialize the levels as if we had already figured this out. + levels[level] = levelInfo{ + level: level, + lastFreq: list[1].freq, + nextCharFreq: list[2].freq, + nextPairFreq: list[0].freq + list[1].freq, + } + leafCounts[level][level] = 2 + if level == 1 { + levels[level].nextPairFreq = math.MaxInt32 + } + } + + // We need a total of 2*n - 2 items at top level and have already generated 2. + levels[maxBits].needed = 2*n - 4 + + level := maxBits + for { + l := &levels[level] + if l.nextPairFreq == math.MaxInt32 && l.nextCharFreq == math.MaxInt32 { + // We've run out of both leafs and pairs. + // End all calculations for this level. + // To make sure we never come back to this level or any lower level, + // set nextPairFreq impossibly large. + l.needed = 0 + levels[level+1].nextPairFreq = math.MaxInt32 + level++ + continue + } + + prevFreq := l.lastFreq + if l.nextCharFreq < l.nextPairFreq { + // The next item on this row is a leaf node. + n := leafCounts[level][level] + 1 + l.lastFreq = l.nextCharFreq + // Lower leafCounts are the same of the previous node. + leafCounts[level][level] = n + l.nextCharFreq = list[n].freq + } else { + // The next item on this row is a pair from the previous row. + // nextPairFreq isn't valid until we generate two + // more values in the level below + l.lastFreq = l.nextPairFreq + // Take leaf counts from the lower level, except counts[level] remains the same. + copy(leafCounts[level][:level], leafCounts[level-1][:level]) + levels[l.level-1].needed = 2 + } + + if l.needed--; l.needed == 0 { + // We've done everything we need to do for this level. + // Continue calculating one level up. Fill in nextPairFreq + // of that level with the sum of the two nodes we've just calculated on + // this level. + if l.level == maxBits { + // All done! + break + } + levels[l.level+1].nextPairFreq = prevFreq + l.lastFreq + level++ + } else { + // If we stole from below, move down temporarily to replenish it. + for levels[level-1].needed > 0 { + level-- + } + } + } + + // Somethings is wrong if at the end, the top level is null or hasn't used + // all of the leaves. + if leafCounts[maxBits][maxBits] != n { + panic("leafCounts[maxBits][maxBits] != n") + } + + bitCount := h.bitCount[:maxBits+1] + bits := 1 + counts := &leafCounts[maxBits] + for level := maxBits; level > 0; level-- { + // chain.leafCount gives the number of literals requiring at least "bits" + // bits to encode. + bitCount[bits] = counts[level] - counts[level-1] + bits++ + } + return bitCount +} + +// Look at the leaves and assign them a bit count and an encoding as specified +// in RFC 1951 3.2.2 +func (h *huffmanEncoder) assignEncodingAndSize(bitCount []int32, list []literalNode) { + code := uint16(0) + for n, bits := range bitCount { + code <<= 1 + if n == 0 || bits == 0 { + continue + } + // The literals list[len(list)-bits] .. list[len(list)-bits] + // are encoded using "bits" bits, and get the values + // code, code + 1, .... The code values are + // assigned in literal order (not frequency order). + chunk := list[len(list)-int(bits):] + + h.lns.sort(chunk) + for _, node := range chunk { + h.codes[node.literal] = hcode{code: reverseBits(code, uint8(n)), len: uint16(n)} + code++ + } + list = list[0 : len(list)-int(bits)] + } +} + +// Update this Huffman Code object to be the minimum code for the specified frequency count. +// +// freq An array of frequencies, in which frequency[i] gives the frequency of literal i. +// maxBits The maximum number of bits to use for any literal. +func (h *huffmanEncoder) generate(freq []int32, maxBits int32) { + if h.freqcache == nil { + // Allocate a reusable buffer with the longest possible frequency table. + // Possible lengths are codegenCodeCount, offsetCodeCount and maxNumLit. + // The largest of these is maxNumLit, so we allocate for that case. + h.freqcache = make([]literalNode, maxNumLit+1) + } + list := h.freqcache[:len(freq)+1] + // Number of non-zero literals + count := 0 + // Set list to be the set of all non-zero literals and their frequencies + for i, f := range freq { + if f != 0 { + list[count] = literalNode{uint16(i), f} + count++ + } else { + list[count] = literalNode{} + h.codes[i].len = 0 + } + } + list[len(freq)] = literalNode{} + + list = list[:count] + if count <= 2 { + // Handle the small cases here, because they are awkward for the general case code. With + // two or fewer literals, everything has bit length 1. + for i, node := range list { + // "list" is in order of increasing literal value. + h.codes[node.literal].set(uint16(i), 1) + } + return + } + h.lfs.sort(list) + + // Get the number of literals for each bit count + bitCount := h.bitCounts(list, maxBits) + // And do the assignment + h.assignEncodingAndSize(bitCount, list) +} + +type byLiteral []literalNode + +func (s *byLiteral) sort(a []literalNode) { + *s = byLiteral(a) + sort.Sort(s) +} + +func (s byLiteral) Len() int { return len(s) } + +func (s byLiteral) Less(i, j int) bool { + return s[i].literal < s[j].literal +} + +func (s byLiteral) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +type byFreq []literalNode + +func (s *byFreq) sort(a []literalNode) { + *s = byFreq(a) + sort.Sort(s) +} + +func (s byFreq) Len() int { return len(s) } + +func (s byFreq) Less(i, j int) bool { + if s[i].freq == s[j].freq { + return s[i].literal < s[j].literal + } + return s[i].freq < s[j].freq +} + +func (s byFreq) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +func reverseBits(number uint16, bitLength byte) uint16 { + return bits.Reverse16(number << (16 - bitLength)) +} diff --git a/image/internal/compress/flate/inflate.go b/image/internal/compress/flate/inflate.go new file mode 100644 index 0000000..4992139 --- /dev/null +++ b/image/internal/compress/flate/inflate.go @@ -0,0 +1,825 @@ +// 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 LICENSE file. + +// Package flate implements the DEFLATE compressed data format, described in +// RFC 1951. The gzip and zlib packages implement access to DEFLATE-based file +// formats. +package flate + +import ( + "bufio" + "io" + "math/bits" + "strconv" + "sync" +) + +const ( + maxCodeLen = 16 // max length of Huffman code + // The next three numbers come from the RFC section 3.2.7, with the + // additional proviso in section 3.2.5 which implies that distance codes + // 30 and 31 should never occur in compressed data. + maxNumLit = 286 + maxNumDist = 30 + numCodes = 19 // number of codes in Huffman meta-code +) + +// Initialize the fixedHuffmanDecoder only once upon first use. +var fixedOnce sync.Once +var fixedHuffmanDecoder huffmanDecoder + +// A CorruptInputError reports the presence of corrupt input at a given offset. +type CorruptInputError int64 + +func (e CorruptInputError) Error() string { + return "flate: corrupt input before offset " + strconv.FormatInt(int64(e), 10) +} + +// An InternalError reports an error in the flate code itself. +type InternalError string + +func (e InternalError) Error() string { return "flate: internal error: " + string(e) } + +// A ReadError reports an error encountered while reading input. +// +// Deprecated: No longer returned. +type ReadError struct { + Offset int64 // byte offset where error occurred + Err error // error returned by underlying Read +} + +func (e *ReadError) Error() string { + return "flate: read error at offset " + strconv.FormatInt(e.Offset, 10) + ": " + e.Err.Error() +} + +// A WriteError reports an error encountered while writing output. +// +// Deprecated: No longer returned. +type WriteError struct { + Offset int64 // byte offset where error occurred + Err error // error returned by underlying Write +} + +func (e *WriteError) Error() string { + return "flate: write error at offset " + strconv.FormatInt(e.Offset, 10) + ": " + e.Err.Error() +} + +// Resetter resets a ReadCloser returned by NewReader or NewReaderDict +// to switch to a new underlying Reader. This permits reusing a ReadCloser +// instead of allocating a new one. +type Resetter interface { + // Reset discards any buffered data and resets the Resetter as if it was + // newly initialized with the given reader. + Reset(r io.Reader, dict []byte) error +} + +// The data structure for decoding Huffman tables is based on that of +// zlib. There is a lookup table of a fixed bit width (huffmanChunkBits), +// For codes smaller than the table width, there are multiple entries +// (each combination of trailing bits has the same value). For codes +// larger than the table width, the table contains a link to an overflow +// table. The width of each entry in the link table is the maximum code +// size minus the chunk width. +// +// Note that you can do a lookup in the table even without all bits +// filled. Since the extra bits are zero, and the DEFLATE Huffman codes +// have the property that shorter codes come before longer ones, the +// bit length estimate in the result is a lower bound on the actual +// number of bits. +// +// See the following: +// https://github.com/madler/zlib/raw/master/doc/algorithm.txt + +// chunk & 15 is number of bits +// chunk >> 4 is value, including table link + +const ( + huffmanChunkBits = 9 + huffmanNumChunks = 1 << huffmanChunkBits + huffmanCountMask = 15 + huffmanValueShift = 4 +) + +type huffmanDecoder struct { + min int // the minimum code length + chunks [huffmanNumChunks]uint32 // chunks as described above + links [][]uint32 // overflow links + linkMask uint32 // mask the width of the link table +} + +// Initialize Huffman decoding tables from array of code lengths. +// Following this function, h is guaranteed to be initialized into a complete +// tree (i.e., neither over-subscribed nor under-subscribed). The exception is a +// degenerate case where the tree has only a single symbol with length 1. Empty +// trees are permitted. +func (h *huffmanDecoder) init(lengths []int) bool { + // Sanity enables additional runtime tests during Huffman + // table construction. It's intended to be used during + // development to supplement the currently ad-hoc unit tests. + const sanity = false + + if h.min != 0 { + *h = huffmanDecoder{} + } + + // Count number of codes of each length, + // compute min and max length. + var count [maxCodeLen]int + var min, max int + for _, n := range lengths { + if n == 0 { + continue + } + if min == 0 || n < min { + min = n + } + if n > max { + max = n + } + count[n]++ + } + + // Empty tree. The decompressor.huffSym function will fail later if the tree + // is used. Technically, an empty tree is only valid for the HDIST tree and + // not the HCLEN and HLIT tree. However, a stream with an empty HCLEN tree + // is guaranteed to fail since it will attempt to use the tree to decode the + // codes for the HLIT and HDIST trees. Similarly, an empty HLIT tree is + // guaranteed to fail later since the compressed data section must be + // composed of at least one symbol (the end-of-block marker). + if max == 0 { + return true + } + + code := 0 + var nextcode [maxCodeLen]int + for i := min; i <= max; i++ { + code <<= 1 + nextcode[i] = code + code += count[i] + } + + // Check that the coding is complete (i.e., that we've + // assigned all 2-to-the-max possible bit sequences). + // Exception: To be compatible with zlib, we also need to + // accept degenerate single-code codings. See also + // TestDegenerateHuffmanCoding. + if code != 1< huffmanChunkBits { + numLinks := 1 << (uint(max) - huffmanChunkBits) + h.linkMask = uint32(numLinks - 1) + + // create link tables + link := nextcode[huffmanChunkBits+1] >> 1 + h.links = make([][]uint32, huffmanNumChunks-link) + for j := uint(link); j < huffmanNumChunks; j++ { + reverse := int(bits.Reverse16(uint16(j))) + reverse >>= uint(16 - huffmanChunkBits) + off := j - uint(link) + if sanity && h.chunks[reverse] != 0 { + panic("impossible: overwriting existing chunk") + } + h.chunks[reverse] = uint32(off<>= uint(16 - n) + if n <= huffmanChunkBits { + for off := reverse; off < len(h.chunks); off += 1 << uint(n) { + // We should never need to overwrite + // an existing chunk. Also, 0 is + // never a valid chunk, because the + // lower 4 "count" bits should be + // between 1 and 15. + if sanity && h.chunks[off] != 0 { + panic("impossible: overwriting existing chunk") + } + h.chunks[off] = chunk + } + } else { + j := reverse & (huffmanNumChunks - 1) + if sanity && h.chunks[j]&huffmanCountMask != huffmanChunkBits+1 { + // Longer codes should have been + // associated with a link table above. + panic("impossible: not an indirect chunk") + } + value := h.chunks[j] >> huffmanValueShift + linktab := h.links[value] + reverse >>= huffmanChunkBits + for off := reverse; off < len(linktab); off += 1 << uint(n-huffmanChunkBits) { + if sanity && linktab[off] != 0 { + panic("impossible: overwriting existing chunk") + } + linktab[off] = chunk + } + } + } + + if sanity { + // Above we've sanity checked that we never overwrote + // an existing entry. Here we additionally check that + // we filled the tables completely. + for i, chunk := range h.chunks { + if chunk == 0 { + // As an exception, in the degenerate + // single-code case, we allow odd + // chunks to be missing. + if code == 1 && i%2 == 1 { + continue + } + panic("impossible: missing chunk") + } + } + for _, linktab := range h.links { + for _, chunk := range linktab { + if chunk == 0 { + panic("impossible: missing chunk") + } + } + } + } + + return true +} + +// The actual read interface needed by NewReader. +// If the passed in io.Reader does not also have ReadByte, +// the NewReader will introduce its own buffering. +type Reader interface { + io.Reader + io.ByteReader +} + +// Decompress state. +type decompressor struct { + // Input source. + r Reader + roffset int64 + + // Input bits, in top of b. + b uint32 + nb uint + + // Huffman decoders for literal/length, distance. + h1, h2 huffmanDecoder + + // Length arrays used to define Huffman codes. + bits *[maxNumLit + maxNumDist]int + codebits *[numCodes]int + + // Output history, buffer. + dict dictDecoder + + // Temporary buffer (avoids repeated allocation). + buf [4]byte + + // Next step in the decompression, + // and decompression state. + step func(*decompressor) + stepState int + final bool + err error + toRead []byte + hl, hd *huffmanDecoder + copyLen int + copyDist int +} + +func (f *decompressor) nextBlock() { + for f.nb < 1+2 { + if f.err = f.moreBits(); f.err != nil { + return + } + } + f.final = f.b&1 == 1 + f.b >>= 1 + typ := f.b & 3 + f.b >>= 2 + f.nb -= 1 + 2 + switch typ { + case 0: + f.dataBlock() + case 1: + // compressed, fixed Huffman tables + f.hl = &fixedHuffmanDecoder + f.hd = nil + f.huffmanBlock() + case 2: + // compressed, dynamic Huffman tables + if f.err = f.readHuffman(); f.err != nil { + break + } + f.hl = &f.h1 + f.hd = &f.h2 + f.huffmanBlock() + default: + // 3 is reserved. + f.err = CorruptInputError(f.roffset) + } +} + +func (f *decompressor) Read(b []byte) (int, error) { + for { + if len(f.toRead) > 0 { + n := copy(b, f.toRead) + f.toRead = f.toRead[n:] + if len(f.toRead) == 0 { + return n, f.err + } + return n, nil + } + if f.err != nil { + return 0, f.err + } + f.step(f) + if f.err != nil && len(f.toRead) == 0 { + f.toRead = f.dict.readFlush() // Flush what's left in case of error + } + } +} + +func (f *decompressor) Close() error { + if f.err == io.EOF { + return nil + } + return f.err +} + +// RFC 1951 section 3.2.7. +// Compression with dynamic Huffman codes + +var codeOrder = [...]int{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15} + +func (f *decompressor) readHuffman() error { + // HLIT[5], HDIST[5], HCLEN[4]. + for f.nb < 5+5+4 { + if err := f.moreBits(); err != nil { + return err + } + } + nlit := int(f.b&0x1F) + 257 + if nlit > maxNumLit { + return CorruptInputError(f.roffset) + } + f.b >>= 5 + ndist := int(f.b&0x1F) + 1 + if ndist > maxNumDist { + return CorruptInputError(f.roffset) + } + f.b >>= 5 + nclen := int(f.b&0xF) + 4 + // numCodes is 19, so nclen is always valid. + f.b >>= 4 + f.nb -= 5 + 5 + 4 + + // (HCLEN+4)*3 bits: code lengths in the magic codeOrder order. + for i := 0; i < nclen; i++ { + for f.nb < 3 { + if err := f.moreBits(); err != nil { + return err + } + } + f.codebits[codeOrder[i]] = int(f.b & 0x7) + f.b >>= 3 + f.nb -= 3 + } + for i := nclen; i < len(codeOrder); i++ { + f.codebits[codeOrder[i]] = 0 + } + if !f.h1.init(f.codebits[0:]) { + return CorruptInputError(f.roffset) + } + + // HLIT + 257 code lengths, HDIST + 1 code lengths, + // using the code length Huffman code. + for i, n := 0, nlit+ndist; i < n; { + x, err := f.huffSym(&f.h1) + if err != nil { + return err + } + if x < 16 { + // Actual length. + f.bits[i] = x + i++ + continue + } + // Repeat previous length or zero. + var rep int + var nb uint + var b int + switch x { + default: + return InternalError("unexpected length code") + case 16: + rep = 3 + nb = 2 + if i == 0 { + return CorruptInputError(f.roffset) + } + b = f.bits[i-1] + case 17: + rep = 3 + nb = 3 + b = 0 + case 18: + rep = 11 + nb = 7 + b = 0 + } + for f.nb < nb { + if err := f.moreBits(); err != nil { + return err + } + } + rep += int(f.b & uint32(1<>= nb + f.nb -= nb + if i+rep > n { + return CorruptInputError(f.roffset) + } + for j := 0; j < rep; j++ { + f.bits[i] = b + i++ + } + } + + if !f.h1.init(f.bits[0:nlit]) || !f.h2.init(f.bits[nlit:nlit+ndist]) { + return CorruptInputError(f.roffset) + } + + // As an optimization, we can initialize the min bits to read at a time + // for the HLIT tree to the length of the EOB marker since we know that + // every block must terminate with one. This preserves the property that + // we never read any extra bytes after the end of the DEFLATE stream. + if f.h1.min < f.bits[endBlockMarker] { + f.h1.min = f.bits[endBlockMarker] + } + + return nil +} + +// Decode a single Huffman block from f. +// hl and hd are the Huffman states for the lit/length values +// and the distance values, respectively. If hd == nil, using the +// fixed distance encoding associated with fixed Huffman blocks. +func (f *decompressor) huffmanBlock() { + const ( + stateInit = iota // Zero value must be stateInit + stateDict + ) + + switch f.stepState { + case stateInit: + goto readLiteral + case stateDict: + goto copyHistory + } + +readLiteral: + // Read literal and/or (length, distance) according to RFC section 3.2.3. + { + v, err := f.huffSym(f.hl) + if err != nil { + f.err = err + return + } + var n uint // number of bits extra + var length int + switch { + case v < 256: + f.dict.writeByte(byte(v)) + if f.dict.availWrite() == 0 { + f.toRead = f.dict.readFlush() + f.step = (*decompressor).huffmanBlock + f.stepState = stateInit + return + } + goto readLiteral + case v == 256: + f.finishBlock() + return + // otherwise, reference to older data + case v < 265: + length = v - (257 - 3) + n = 0 + case v < 269: + length = v*2 - (265*2 - 11) + n = 1 + case v < 273: + length = v*4 - (269*4 - 19) + n = 2 + case v < 277: + length = v*8 - (273*8 - 35) + n = 3 + case v < 281: + length = v*16 - (277*16 - 67) + n = 4 + case v < 285: + length = v*32 - (281*32 - 131) + n = 5 + case v < maxNumLit: + length = 258 + n = 0 + default: + f.err = CorruptInputError(f.roffset) + return + } + if n > 0 { + for f.nb < n { + if err = f.moreBits(); err != nil { + f.err = err + return + } + } + length += int(f.b & uint32(1<>= n + f.nb -= n + } + + var dist int + if f.hd == nil { + for f.nb < 5 { + if err = f.moreBits(); err != nil { + f.err = err + return + } + } + dist = int(bits.Reverse8(uint8(f.b & 0x1F << 3))) + f.b >>= 5 + f.nb -= 5 + } else { + if dist, err = f.huffSym(f.hd); err != nil { + f.err = err + return + } + } + + switch { + case dist < 4: + dist++ + case dist < maxNumDist: + nb := uint(dist-2) >> 1 + // have 1 bit in bottom of dist, need nb more. + extra := (dist & 1) << nb + for f.nb < nb { + if err = f.moreBits(); err != nil { + f.err = err + return + } + } + extra |= int(f.b & uint32(1<>= nb + f.nb -= nb + dist = 1<<(nb+1) + 1 + extra + default: + f.err = CorruptInputError(f.roffset) + return + } + + // No check on length; encoding can be prescient. + if dist > f.dict.histSize() { + f.err = CorruptInputError(f.roffset) + return + } + + f.copyLen, f.copyDist = length, dist + goto copyHistory + } + +copyHistory: + // Perform a backwards copy according to RFC section 3.2.3. + { + cnt := f.dict.tryWriteCopy(f.copyDist, f.copyLen) + if cnt == 0 { + cnt = f.dict.writeCopy(f.copyDist, f.copyLen) + } + f.copyLen -= cnt + + if f.dict.availWrite() == 0 || f.copyLen > 0 { + f.toRead = f.dict.readFlush() + f.step = (*decompressor).huffmanBlock // We need to continue this work + f.stepState = stateDict + return + } + goto readLiteral + } +} + +// Copy a single uncompressed data block from input to output. +func (f *decompressor) dataBlock() { + // Uncompressed. + // Discard current half-byte. + f.nb = 0 + f.b = 0 + + // Length then ones-complement of length. + nr, err := io.ReadFull(f.r, f.buf[0:4]) + f.roffset += int64(nr) + if err != nil { + f.err = noEOF(err) + return + } + n := int(f.buf[0]) | int(f.buf[1])<<8 + nn := int(f.buf[2]) | int(f.buf[3])<<8 + if uint16(nn) != uint16(^n) { + f.err = CorruptInputError(f.roffset) + return + } + + if n == 0 { + f.toRead = f.dict.readFlush() + f.finishBlock() + return + } + + f.copyLen = n + f.copyData() +} + +// copyData copies f.copyLen bytes from the underlying reader into f.hist. +// It pauses for reads when f.hist is full. +func (f *decompressor) copyData() { + buf := f.dict.writeSlice() + if len(buf) > f.copyLen { + buf = buf[:f.copyLen] + } + + cnt, err := io.ReadFull(f.r, buf) + f.roffset += int64(cnt) + f.copyLen -= cnt + f.dict.writeMark(cnt) + if err != nil { + f.err = noEOF(err) + return + } + + if f.dict.availWrite() == 0 || f.copyLen > 0 { + f.toRead = f.dict.readFlush() + f.step = (*decompressor).copyData + return + } + f.finishBlock() +} + +func (f *decompressor) finishBlock() { + if f.final { + if f.dict.availRead() > 0 { + f.toRead = f.dict.readFlush() + } + f.err = io.EOF + } + f.step = (*decompressor).nextBlock +} + +// noEOF returns err, unless err == io.EOF, in which case it returns io.ErrUnexpectedEOF. +func noEOF(e error) error { + if e == io.EOF { + return io.ErrUnexpectedEOF + } + return e +} + +func (f *decompressor) moreBits() error { + c, err := f.r.ReadByte() + if err != nil { + return noEOF(err) + } + f.roffset++ + f.b |= uint32(c) << f.nb + f.nb += 8 + return nil +} + +// Read the next Huffman-encoded symbol from f according to h. +func (f *decompressor) huffSym(h *huffmanDecoder) (int, error) { + // Since a huffmanDecoder can be empty or be composed of a degenerate tree + // with single element, huffSym must error on these two edge cases. In both + // cases, the chunks slice will be 0 for the invalid sequence, leading it + // satisfy the n == 0 check below. + n := uint(h.min) + // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, + // but is smart enough to keep local variables in registers, so use nb and b, + // inline call to moreBits and reassign b,nb back to f on return. + nb, b := f.nb, f.b + for { + for nb < n { + c, err := f.r.ReadByte() + if err != nil { + f.b = b + f.nb = nb + return 0, noEOF(err) + } + f.roffset++ + b |= uint32(c) << (nb & 31) + nb += 8 + } + chunk := h.chunks[b&(huffmanNumChunks-1)] + n = uint(chunk & huffmanCountMask) + if n > huffmanChunkBits { + chunk = h.links[chunk>>huffmanValueShift][(b>>huffmanChunkBits)&h.linkMask] + n = uint(chunk & huffmanCountMask) + } + if n <= nb { + if n == 0 { + f.b = b + f.nb = nb + f.err = CorruptInputError(f.roffset) + return 0, f.err + } + f.b = b >> (n & 31) + f.nb = nb - n + return int(chunk >> huffmanValueShift), nil + } + } +} + +func makeReader(r io.Reader) Reader { + if rr, ok := r.(Reader); ok { + return rr + } + return bufio.NewReader(r) +} + +func fixedHuffmanDecoderInit() { + fixedOnce.Do(func() { + // These come from the RFC section 3.2.6. + var bits [288]int + for i := 0; i < 144; i++ { + bits[i] = 8 + } + for i := 144; i < 256; i++ { + bits[i] = 9 + } + for i := 256; i < 280; i++ { + bits[i] = 7 + } + for i := 280; i < 288; i++ { + bits[i] = 8 + } + fixedHuffmanDecoder.init(bits[:]) + }) +} + +func (f *decompressor) Reset(r io.Reader, dict []byte) error { + *f = decompressor{ + r: makeReader(r), + bits: f.bits, + codebits: f.codebits, + dict: f.dict, + step: (*decompressor).nextBlock, + } + f.dict.init(maxMatchOffset, dict) + return nil +} + +// NewReader returns a new ReadCloser that can be used +// to read the uncompressed version of r. +// If r does not also implement io.ByteReader, +// the decompressor may read more data than necessary from r. +// It is the caller's responsibility to call Close on the ReadCloser +// when finished reading. +// +// The ReadCloser returned by NewReader also implements Resetter. +func NewReader(r io.Reader) io.ReadCloser { + fixedHuffmanDecoderInit() + + var f decompressor + f.r = makeReader(r) + f.bits = new([maxNumLit + maxNumDist]int) + f.codebits = new([numCodes]int) + f.step = (*decompressor).nextBlock + f.dict.init(maxMatchOffset, nil) + return &f +} + +// NewReaderDict is like NewReader but initializes the reader +// with a preset dictionary. The returned Reader behaves as if +// the uncompressed data stream started with the given dictionary, +// which has already been read. NewReaderDict is typically used +// to read data compressed by NewWriterDict. +// +// The ReadCloser returned by NewReader also implements Resetter. +func NewReaderDict(r io.Reader, dict []byte) io.ReadCloser { + fixedHuffmanDecoderInit() + + var f decompressor + f.r = makeReader(r) + f.bits = new([maxNumLit + maxNumDist]int) + f.codebits = new([numCodes]int) + f.step = (*decompressor).nextBlock + f.dict.init(maxMatchOffset, dict) + return &f +} diff --git a/image/internal/compress/flate/inflate_test.go b/image/internal/compress/flate/inflate_test.go new file mode 100644 index 0000000..9575be1 --- /dev/null +++ b/image/internal/compress/flate/inflate_test.go @@ -0,0 +1,97 @@ +// Copyright 2014 The Go 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 flate + +import ( + "bytes" + "io" + "strings" + "testing" +) + +func TestReset(t *testing.T) { + ss := []string{ + "lorem ipsum izzle fo rizzle", + "the quick brown fox jumped over", + } + + deflated := make([]bytes.Buffer, 2) + for i, s := range ss { + w, _ := NewWriter(&deflated[i], 1) + w.Write([]byte(s)) + w.Close() + } + + inflated := make([]bytes.Buffer, 2) + + f := NewReader(&deflated[0]) + io.Copy(&inflated[0], f) + f.(Resetter).Reset(&deflated[1], nil) + io.Copy(&inflated[1], f) + f.Close() + + for i, s := range ss { + if s != inflated[i].String() { + t.Errorf("inflated[%d]:\ngot %q\nwant %q", i, inflated[i], s) + } + } +} + +func TestReaderTruncated(t *testing.T) { + vectors := []struct{ input, output string }{ + {"\x00", ""}, + {"\x00\f", ""}, + {"\x00\f\x00", ""}, + {"\x00\f\x00\xf3\xff", ""}, + {"\x00\f\x00\xf3\xffhello", "hello"}, + {"\x00\f\x00\xf3\xffhello, world", "hello, world"}, + {"\x02", ""}, + {"\xf2H\xcd", "He"}, + {"\xf2H͙0a\u0084\t", "Hel\x90\x90\x90\x90\x90"}, + {"\xf2H͙0a\u0084\t\x00", "Hel\x90\x90\x90\x90\x90"}, + } + + for i, v := range vectors { + r := strings.NewReader(v.input) + zr := NewReader(r) + b, err := io.ReadAll(zr) + if err != io.ErrUnexpectedEOF { + t.Errorf("test %d, error mismatch: got %v, want io.ErrUnexpectedEOF", i, err) + } + if string(b) != v.output { + t.Errorf("test %d, output mismatch: got %q, want %q", i, b, v.output) + } + } +} + +func TestResetDict(t *testing.T) { + dict := []byte("the lorem fox") + ss := []string{ + "lorem ipsum izzle fo rizzle", + "the quick brown fox jumped over", + } + + deflated := make([]bytes.Buffer, len(ss)) + for i, s := range ss { + w, _ := NewWriterDict(&deflated[i], DefaultCompression, dict) + w.Write([]byte(s)) + w.Close() + } + + inflated := make([]bytes.Buffer, len(ss)) + + f := NewReader(nil) + for i := range inflated { + f.(Resetter).Reset(&deflated[i], dict) + io.Copy(&inflated[i], f) + } + f.Close() + + for i, s := range ss { + if s != inflated[i].String() { + t.Errorf("inflated[%d]:\ngot %q\nwant %q", i, inflated[i], s) + } + } +} diff --git a/image/internal/compress/flate/reader_test.go b/image/internal/compress/flate/reader_test.go new file mode 100644 index 0000000..94610fb --- /dev/null +++ b/image/internal/compress/flate/reader_test.go @@ -0,0 +1,98 @@ +// Copyright 2012 The Go 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 flate + +import ( + "bytes" + "io" + "os" + "runtime" + "strings" + "testing" +) + +func TestNlitOutOfRange(t *testing.T) { + // Trying to decode this bogus flate data, which has a Huffman table + // with nlit=288, should not panic. + io.Copy(io.Discard, NewReader(strings.NewReader( + "\xfc\xfe\x36\xe7\x5e\x1c\xef\xb3\x55\x58\x77\xb6\x56\xb5\x43\xf4"+ + "\x6f\xf2\xd2\xe6\x3d\x99\xa0\x85\x8c\x48\xeb\xf8\xda\x83\x04\x2a"+ + "\x75\xc4\xf8\x0f\x12\x11\xb9\xb4\x4b\x09\xa0\xbe\x8b\x91\x4c"))) +} + +var suites = []struct{ name, file string }{ + // Digits is the digits of the irrational number e. Its decimal representation + // does not repeat, but there are only 10 possible digits, so it should be + // reasonably compressible. + {"Digits", "../testdata/e.txt"}, + // Newton is Isaac Newtons's educational text on Opticks. + {"Newton", "../../testdata/Isaac.Newton-Opticks.txt"}, +} + +func BenchmarkDecode(b *testing.B) { + doBench(b, func(b *testing.B, buf0 []byte, level, n int) { + b.ReportAllocs() + b.StopTimer() + b.SetBytes(int64(n)) + + compressed := new(bytes.Buffer) + w, err := NewWriter(compressed, level) + if err != nil { + b.Fatal(err) + } + for i := 0; i < n; i += len(buf0) { + if len(buf0) > n-i { + buf0 = buf0[:n-i] + } + io.Copy(w, bytes.NewReader(buf0)) + } + w.Close() + buf1 := compressed.Bytes() + buf0, compressed, w = nil, nil, nil + runtime.GC() + b.StartTimer() + for i := 0; i < b.N; i++ { + io.Copy(io.Discard, NewReader(bytes.NewReader(buf1))) + } + }) +} + +var levelTests = []struct { + name string + level int +}{ + {"Huffman", HuffmanOnly}, + {"Speed", BestSpeed}, + {"Default", DefaultCompression}, + {"Compression", BestCompression}, +} + +var sizes = []struct { + name string + n int +}{ + {"1e4", 1e4}, + {"1e5", 1e5}, + {"1e6", 1e6}, +} + +func doBench(b *testing.B, f func(b *testing.B, buf []byte, level, n int)) { + for _, suite := range suites { + buf, err := os.ReadFile(suite.file) + if err != nil { + b.Fatal(err) + } + if len(buf) == 0 { + b.Fatalf("test file %q has no data", suite.file) + } + for _, l := range levelTests { + for _, s := range sizes { + b.Run(suite.name+"/"+l.name+"/"+s.name, func(b *testing.B) { + f(b, buf, l.level, s.n) + }) + } + } + } +} diff --git a/image/internal/compress/flate/token.go b/image/internal/compress/flate/token.go new file mode 100644 index 0000000..ae01391 --- /dev/null +++ b/image/internal/compress/flate/token.go @@ -0,0 +1,97 @@ +// 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 LICENSE file. + +package flate + +const ( + // 2 bits: type 0 = literal 1=EOF 2=Match 3=Unused + // 8 bits: xlength = length - MIN_MATCH_LENGTH + // 22 bits xoffset = offset - MIN_OFFSET_SIZE, or literal + lengthShift = 22 + offsetMask = 1< pair into a match token. +func matchToken(xlength uint32, xoffset uint32) token { + return token(matchType + xlength<> lengthShift) } + +func lengthCode(len uint32) uint32 { return lengthCodes[len] } + +// Returns the offset code corresponding to a specific offset +func offsetCode(off uint32) uint32 { + if off < uint32(len(offsetCodes)) { + return offsetCodes[off] + } + if off>>7 < uint32(len(offsetCodes)) { + return offsetCodes[off>>7] + 14 + } + return offsetCodes[off>>14] + 28 +} diff --git a/image/internal/compress/flate/writer_test.go b/image/internal/compress/flate/writer_test.go new file mode 100644 index 0000000..c413735 --- /dev/null +++ b/image/internal/compress/flate/writer_test.go @@ -0,0 +1,237 @@ +// Copyright 2012 The Go 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 flate + +import ( + "bytes" + "fmt" + "io" + "math/rand" + "runtime" + "testing" +) + +func BenchmarkEncode(b *testing.B) { + doBench(b, func(b *testing.B, buf0 []byte, level, n int) { + b.StopTimer() + b.SetBytes(int64(n)) + + buf1 := make([]byte, n) + for i := 0; i < n; i += len(buf0) { + if len(buf0) > n-i { + buf0 = buf0[:n-i] + } + copy(buf1[i:], buf0) + } + buf0 = nil + w, err := NewWriter(io.Discard, level) + if err != nil { + b.Fatal(err) + } + runtime.GC() + b.StartTimer() + for i := 0; i < b.N; i++ { + w.Reset(io.Discard) + w.Write(buf1) + w.Close() + } + }) +} + +// errorWriter is a writer that fails after N writes. +type errorWriter struct { + N int +} + +func (e *errorWriter) Write(b []byte) (int, error) { + if e.N <= 0 { + return 0, io.ErrClosedPipe + } + e.N-- + return len(b), nil +} + +// Test if errors from the underlying writer is passed upwards. +func TestWriteError(t *testing.T) { + t.Parallel() + buf := new(bytes.Buffer) + n := 65536 + if !testing.Short() { + n *= 4 + } + for i := 0; i < n; i++ { + fmt.Fprintf(buf, "asdasfasf%d%dfghfgujyut%dyutyu\n", i, i, i) + } + in := buf.Bytes() + // We create our own buffer to control number of writes. + copyBuffer := make([]byte, 128) + for l := 0; l < 10; l++ { + for fail := 1; fail <= 256; fail *= 2 { + // Fail after 'fail' writes + ew := &errorWriter{N: fail} + w, err := NewWriter(ew, l) + if err != nil { + t.Fatalf("NewWriter: level %d: %v", l, err) + } + n, err := io.CopyBuffer(w, struct{ io.Reader }{bytes.NewBuffer(in)}, copyBuffer) + if err == nil { + t.Fatalf("Level %d: Expected an error, writer was %#v", l, ew) + } + n2, err := w.Write([]byte{1, 2, 2, 3, 4, 5}) + if n2 != 0 { + t.Fatal("Level", l, "Expected 0 length write, got", n) + } + if err == nil { + t.Fatal("Level", l, "Expected an error") + } + err = w.Flush() + if err == nil { + t.Fatal("Level", l, "Expected an error on flush") + } + err = w.Close() + if err == nil { + t.Fatal("Level", l, "Expected an error on close") + } + + w.Reset(io.Discard) + n2, err = w.Write([]byte{1, 2, 3, 4, 5, 6}) + if err != nil { + t.Fatal("Level", l, "Got unexpected error after reset:", err) + } + if n2 == 0 { + t.Fatal("Level", l, "Got 0 length write, expected > 0") + } + if testing.Short() { + return + } + } + } +} + +// Test if two runs produce identical results +// even when writing different sizes to the Writer. +func TestDeterministic(t *testing.T) { + t.Parallel() + for i := 0; i <= 9; i++ { + t.Run(fmt.Sprint("L", i), func(t *testing.T) { testDeterministic(i, t) }) + } + t.Run("LM2", func(t *testing.T) { testDeterministic(-2, t) }) +} + +func testDeterministic(i int, t *testing.T) { + t.Parallel() + // Test so much we cross a good number of block boundaries. + var length = maxStoreBlockSize*30 + 500 + if testing.Short() { + length /= 10 + } + + // Create a random, but compressible stream. + rng := rand.New(rand.NewSource(1)) + t1 := make([]byte, length) + for i := range t1 { + t1[i] = byte(rng.Int63() & 7) + } + + // Do our first encode. + var b1 bytes.Buffer + br := bytes.NewBuffer(t1) + w, err := NewWriter(&b1, i) + if err != nil { + t.Fatal(err) + } + // Use a very small prime sized buffer. + cbuf := make([]byte, 787) + _, err = io.CopyBuffer(w, struct{ io.Reader }{br}, cbuf) + if err != nil { + t.Fatal(err) + } + w.Close() + + // We choose a different buffer size, + // bigger than a maximum block, and also a prime. + var b2 bytes.Buffer + cbuf = make([]byte, 81761) + br2 := bytes.NewBuffer(t1) + w2, err := NewWriter(&b2, i) + if err != nil { + t.Fatal(err) + } + _, err = io.CopyBuffer(w2, struct{ io.Reader }{br2}, cbuf) + if err != nil { + t.Fatal(err) + } + w2.Close() + + b1b := b1.Bytes() + b2b := b2.Bytes() + + if !bytes.Equal(b1b, b2b) { + t.Errorf("level %d did not produce deterministic result, result mismatch, len(a) = %d, len(b) = %d", i, len(b1b), len(b2b)) + } +} + +// TestDeflateFast_Reset will test that encoding is consistent +// across a warparound of the table offset. +// See https://github.com/golang/go/issues/34121 +func TestDeflateFast_Reset(t *testing.T) { + buf := new(bytes.Buffer) + n := 65536 + + for i := 0; i < n; i++ { + fmt.Fprintf(buf, "asdfasdfasdfasdf%d%dfghfgujyut%dyutyu\n", i, i, i) + } + // This is specific to level 1. + const level = 1 + in := buf.Bytes() + offset := 1 + if testing.Short() { + offset = 256 + } + + // We do an encode with a clean buffer to compare. + var want bytes.Buffer + w, err := NewWriter(&want, level) + if err != nil { + t.Fatalf("NewWriter: level %d: %v", level, err) + } + + // Output written 3 times. + w.Write(in) + w.Write(in) + w.Write(in) + w.Close() + + for ; offset <= 256; offset *= 2 { + w, err := NewWriter(io.Discard, level) + if err != nil { + t.Fatalf("NewWriter: level %d: %v", level, err) + } + + // Reset until we are right before the wraparound. + // Each reset adds maxMatchOffset to the offset. + for i := 0; i < (bufferReset-len(in)-offset-maxMatchOffset)/maxMatchOffset; i++ { + // skip ahead to where we are close to wrap around... + w.d.reset(nil) + } + var got bytes.Buffer + w.Reset(&got) + + // Write 3 times, close. + for i := 0; i < 3; i++ { + _, err = w.Write(in) + if err != nil { + t.Fatal(err) + } + } + err = w.Close() + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(got.Bytes(), want.Bytes()) { + t.Fatalf("output did not match at wraparound, len(want) = %d, len(got) = %d", want.Len(), got.Len()) + } + } +} diff --git a/image/internal/compress/zlib/example_test.go b/image/internal/compress/zlib/example_test.go new file mode 100644 index 0000000..7040889 --- /dev/null +++ b/image/internal/compress/zlib/example_test.go @@ -0,0 +1,37 @@ +// Copyright 2012 The Go 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 zlib_test + +import ( + "bytes" + "compress/zlib" + "fmt" + "io" + "os" +) + +func ExampleNewWriter() { + var b bytes.Buffer + + w := zlib.NewWriter(&b) + w.Write([]byte("hello, world\n")) + w.Close() + fmt.Println(b.Bytes()) + // Output: [120 156 202 72 205 201 201 215 81 40 207 47 202 73 225 2 4 0 0 255 255 33 231 4 147] +} + +func ExampleNewReader() { + buff := []byte{120, 156, 202, 72, 205, 201, 201, 215, 81, 40, 207, + 47, 202, 73, 225, 2, 4, 0, 0, 255, 255, 33, 231, 4, 147} + b := bytes.NewReader(buff) + + r, err := zlib.NewReader(b) + if err != nil { + panic(err) + } + io.Copy(os.Stdout, r) + // Output: hello, world + r.Close() +} diff --git a/image/internal/compress/zlib/reader.go b/image/internal/compress/zlib/reader.go new file mode 100644 index 0000000..61c828c --- /dev/null +++ b/image/internal/compress/zlib/reader.go @@ -0,0 +1,178 @@ +// 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 LICENSE file. + +/* +Package zlib implements reading and writing of zlib format compressed data, +as specified in RFC 1950. + +The implementation provides filters that uncompress during reading +and compress during writing. For example, to write compressed data +to a buffer: + + var b bytes.Buffer + w := zlib.NewWriter(&b) + w.Write([]byte("hello, world\n")) + w.Close() + +and to read that data back: + + r, err := zlib.NewReader(&b) + io.Copy(os.Stdout, r) + r.Close() +*/ +package zlib + +import ( + "bufio" + "errors" + "hash" + "hash/adler32" + "io" + + "tinygo.org/x/drivers/image/internal/compress/flate" +) + +const zlibDeflate = 8 + +var ( + // ErrChecksum is returned when reading ZLIB data that has an invalid checksum. + ErrChecksum = errors.New("zlib: invalid checksum") + // ErrDictionary is returned when reading ZLIB data that has an invalid dictionary. + ErrDictionary = errors.New("zlib: invalid dictionary") + // ErrHeader is returned when reading ZLIB data that has an invalid header. + ErrHeader = errors.New("zlib: invalid header") +) + +type reader struct { + r flate.Reader + decompressor io.ReadCloser + digest hash.Hash32 + err error + scratch [4]byte +} + +// Resetter resets a ReadCloser returned by NewReader or NewReaderDict +// to switch to a new underlying Reader. This permits reusing a ReadCloser +// instead of allocating a new one. +type Resetter interface { + // Reset discards any buffered data and resets the Resetter as if it was + // newly initialized with the given reader. + Reset(r io.Reader, dict []byte) error +} + +// NewReader creates a new ReadCloser. +// Reads from the returned ReadCloser read and decompress data from r. +// If r does not implement io.ByteReader, the decompressor may read more +// data than necessary from r. +// It is the caller's responsibility to call Close on the ReadCloser when done. +// +// The ReadCloser returned by NewReader also implements Resetter. +func NewReader(r io.Reader) (io.ReadCloser, error) { + return NewReaderDict(r, nil) +} + +// NewReaderDict is like NewReader but uses a preset dictionary. +// NewReaderDict ignores the dictionary if the compressed data does not refer to it. +// If the compressed data refers to a different dictionary, NewReaderDict returns ErrDictionary. +// +// The ReadCloser returned by NewReaderDict also implements Resetter. +func NewReaderDict(r io.Reader, dict []byte) (io.ReadCloser, error) { + z := new(reader) + err := z.Reset(r, dict) + if err != nil { + return nil, err + } + return z, nil +} + +func (z *reader) Read(p []byte) (int, error) { + if z.err != nil { + return 0, z.err + } + + var n int + n, z.err = z.decompressor.Read(p) + z.digest.Write(p[0:n]) + if z.err != io.EOF { + // In the normal case we return here. + return n, z.err + } + + // Finished file; check checksum. + if _, err := io.ReadFull(z.r, z.scratch[0:4]); err != nil { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + z.err = err + return n, z.err + } + // ZLIB (RFC 1950) is big-endian, unlike GZIP (RFC 1952). + checksum := uint32(z.scratch[0])<<24 | uint32(z.scratch[1])<<16 | uint32(z.scratch[2])<<8 | uint32(z.scratch[3]) + if checksum != z.digest.Sum32() { + z.err = ErrChecksum + return n, z.err + } + return n, io.EOF +} + +// Calling Close does not close the wrapped io.Reader originally passed to NewReader. +// In order for the ZLIB checksum to be verified, the reader must be +// fully consumed until the io.EOF. +func (z *reader) Close() error { + if z.err != nil && z.err != io.EOF { + return z.err + } + z.err = z.decompressor.Close() + return z.err +} + +func (z *reader) Reset(r io.Reader, dict []byte) error { + *z = reader{decompressor: z.decompressor} + if fr, ok := r.(flate.Reader); ok { + z.r = fr + } else { + z.r = bufio.NewReader(r) + } + + // Read the header (RFC 1950 section 2.2.). + _, z.err = io.ReadFull(z.r, z.scratch[0:2]) + if z.err != nil { + if z.err == io.EOF { + z.err = io.ErrUnexpectedEOF + } + return z.err + } + h := uint(z.scratch[0])<<8 | uint(z.scratch[1]) + if (z.scratch[0]&0x0f != zlibDeflate) || (h%31 != 0) { + z.err = ErrHeader + return z.err + } + haveDict := z.scratch[1]&0x20 != 0 + if haveDict { + _, z.err = io.ReadFull(z.r, z.scratch[0:4]) + if z.err != nil { + if z.err == io.EOF { + z.err = io.ErrUnexpectedEOF + } + return z.err + } + checksum := uint32(z.scratch[0])<<24 | uint32(z.scratch[1])<<16 | uint32(z.scratch[2])<<8 | uint32(z.scratch[3]) + if checksum != adler32.Checksum(dict) { + z.err = ErrDictionary + return z.err + } + } + + if z.decompressor == nil { + if haveDict { + z.decompressor = flate.NewReaderDict(z.r, dict) + } else { + z.decompressor = flate.NewReader(z.r) + } + } else { + z.decompressor.(flate.Resetter).Reset(z.r, dict) + } + z.digest = adler32.New() + return nil +} diff --git a/image/internal/compress/zlib/reader_test.go b/image/internal/compress/zlib/reader_test.go new file mode 100644 index 0000000..70e33ba --- /dev/null +++ b/image/internal/compress/zlib/reader_test.go @@ -0,0 +1,179 @@ +// 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 LICENSE file. + +package zlib + +import ( + "bytes" + "io" + "testing" +) + +type zlibTest struct { + desc string + raw string + compressed []byte + dict []byte + err error +} + +// Compare-to-golden test data was generated by the ZLIB example program at +// https://www.zlib.net/zpipe.c + +var zlibTests = []zlibTest{ + { + "truncated empty", + "", + []byte{}, + nil, + io.ErrUnexpectedEOF, + }, + { + "truncated dict", + "", + []byte{0x78, 0xbb}, + []byte{0x00}, + io.ErrUnexpectedEOF, + }, + { + "truncated checksum", + "", + []byte{0x78, 0xbb, 0x00, 0x01, 0x00, 0x01, 0xca, 0x48, + 0xcd, 0xc9, 0xc9, 0xd7, 0x51, 0x28, 0xcf, 0x2f, + 0xca, 0x49, 0x01, 0x04, 0x00, 0x00, 0xff, 0xff, + }, + []byte{0x00}, + io.ErrUnexpectedEOF, + }, + { + "empty", + "", + []byte{0x78, 0x9c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01}, + nil, + nil, + }, + { + "goodbye", + "goodbye, world", + []byte{ + 0x78, 0x9c, 0x4b, 0xcf, 0xcf, 0x4f, 0x49, 0xaa, + 0x4c, 0xd5, 0x51, 0x28, 0xcf, 0x2f, 0xca, 0x49, + 0x01, 0x00, 0x28, 0xa5, 0x05, 0x5e, + }, + nil, + nil, + }, + { + "bad header", + "", + []byte{0x78, 0x9f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01}, + nil, + ErrHeader, + }, + { + "bad checksum", + "", + []byte{0x78, 0x9c, 0x03, 0x00, 0x00, 0x00, 0x00, 0xff}, + nil, + ErrChecksum, + }, + { + "not enough data", + "", + []byte{0x78, 0x9c, 0x03, 0x00, 0x00, 0x00}, + nil, + io.ErrUnexpectedEOF, + }, + { + "excess data is silently ignored", + "", + []byte{ + 0x78, 0x9c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x78, 0x9c, 0xff, + }, + nil, + nil, + }, + { + "dictionary", + "Hello, World!\n", + []byte{ + 0x78, 0xbb, 0x1c, 0x32, 0x04, 0x27, 0xf3, 0x00, + 0xb1, 0x75, 0x20, 0x1c, 0x45, 0x2e, 0x00, 0x24, + 0x12, 0x04, 0x74, + }, + []byte{ + 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x0a, + }, + nil, + }, + { + "wrong dictionary", + "", + []byte{ + 0x78, 0xbb, 0x1c, 0x32, 0x04, 0x27, 0xf3, 0x00, + 0xb1, 0x75, 0x20, 0x1c, 0x45, 0x2e, 0x00, 0x24, + 0x12, 0x04, 0x74, + }, + []byte{ + 0x48, 0x65, 0x6c, 0x6c, + }, + ErrDictionary, + }, + { + "truncated zlib stream amid raw-block", + "hello", + []byte{ + 0x78, 0x9c, 0x00, 0x0c, 0x00, 0xf3, 0xff, 0x68, 0x65, 0x6c, 0x6c, 0x6f, + }, + nil, + io.ErrUnexpectedEOF, + }, + { + "truncated zlib stream amid fixed-block", + "He", + []byte{ + 0x78, 0x9c, 0xf2, 0x48, 0xcd, + }, + nil, + io.ErrUnexpectedEOF, + }, +} + +func TestDecompressor(t *testing.T) { + b := new(bytes.Buffer) + for _, tt := range zlibTests { + in := bytes.NewReader(tt.compressed) + zr, err := NewReaderDict(in, tt.dict) + if err != nil { + if err != tt.err { + t.Errorf("%s: NewReader: %s", tt.desc, err) + } + continue + } + defer zr.Close() + + // Read and verify correctness of data. + b.Reset() + n, err := io.Copy(b, zr) + if err != nil { + if err != tt.err { + t.Errorf("%s: io.Copy: %v want %v", tt.desc, err, tt.err) + } + continue + } + s := b.String() + if s != tt.raw { + t.Errorf("%s: got %d-byte %q want %d-byte %q", tt.desc, n, s, len(tt.raw), tt.raw) + } + + // Check for sticky errors. + if n, err := zr.Read([]byte{0}); n != 0 || err != io.EOF { + t.Errorf("%s: Read() = (%d, %v), want (0, io.EOF)", tt.desc, n, err) + } + if err := zr.Close(); err != nil { + t.Errorf("%s: Close() = %v, want nil", tt.desc, err) + } + } +} diff --git a/image/internal/compress/zlib/writer.go b/image/internal/compress/zlib/writer.go new file mode 100644 index 0000000..9986e38 --- /dev/null +++ b/image/internal/compress/zlib/writer.go @@ -0,0 +1,193 @@ +// 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 LICENSE file. + +package zlib + +import ( + "compress/flate" + "encoding/binary" + "fmt" + "hash" + "hash/adler32" + "io" +) + +// These constants are copied from the flate package, so that code that imports +// "compress/zlib" does not also have to import "compress/flate". +const ( + NoCompression = flate.NoCompression + BestSpeed = flate.BestSpeed + BestCompression = flate.BestCompression + DefaultCompression = flate.DefaultCompression + HuffmanOnly = flate.HuffmanOnly +) + +// A Writer takes data written to it and writes the compressed +// form of that data to an underlying writer (see NewWriter). +type Writer struct { + w io.Writer + level int + dict []byte + compressor *flate.Writer + digest hash.Hash32 + err error + scratch [4]byte + wroteHeader bool +} + +// NewWriter creates a new Writer. +// Writes to the returned Writer are compressed and written to w. +// +// It is the caller's responsibility to call Close on the Writer when done. +// Writes may be buffered and not flushed until Close. +func NewWriter(w io.Writer) *Writer { + z, _ := NewWriterLevelDict(w, DefaultCompression, nil) + return z +} + +// NewWriterLevel is like NewWriter but specifies the compression level instead +// of assuming DefaultCompression. +// +// The compression level can be DefaultCompression, NoCompression, HuffmanOnly +// or any integer value between BestSpeed and BestCompression inclusive. +// The error returned will be nil if the level is valid. +func NewWriterLevel(w io.Writer, level int) (*Writer, error) { + return NewWriterLevelDict(w, level, nil) +} + +// NewWriterLevelDict is like NewWriterLevel but specifies a dictionary to +// compress with. +// +// The dictionary may be nil. If not, its contents should not be modified until +// the Writer is closed. +func NewWriterLevelDict(w io.Writer, level int, dict []byte) (*Writer, error) { + if level < HuffmanOnly || level > BestCompression { + return nil, fmt.Errorf("zlib: invalid compression level: %d", level) + } + return &Writer{ + w: w, + level: level, + dict: dict, + }, nil +} + +// Reset clears the state of the Writer z such that it is equivalent to its +// initial state from NewWriterLevel or NewWriterLevelDict, but instead writing +// to w. +func (z *Writer) Reset(w io.Writer) { + z.w = w + // z.level and z.dict left unchanged. + if z.compressor != nil { + z.compressor.Reset(w) + } + if z.digest != nil { + z.digest.Reset() + } + z.err = nil + z.scratch = [4]byte{} + z.wroteHeader = false +} + +// writeHeader writes the ZLIB header. +func (z *Writer) writeHeader() (err error) { + z.wroteHeader = true + // ZLIB has a two-byte header (as documented in RFC 1950). + // The first four bits is the CINFO (compression info), which is 7 for the default deflate window size. + // The next four bits is the CM (compression method), which is 8 for deflate. + z.scratch[0] = 0x78 + // The next two bits is the FLEVEL (compression level). The four values are: + // 0=fastest, 1=fast, 2=default, 3=best. + // The next bit, FDICT, is set if a dictionary is given. + // The final five FCHECK bits form a mod-31 checksum. + switch z.level { + case -2, 0, 1: + z.scratch[1] = 0 << 6 + case 2, 3, 4, 5: + z.scratch[1] = 1 << 6 + case 6, -1: + z.scratch[1] = 2 << 6 + case 7, 8, 9: + z.scratch[1] = 3 << 6 + default: + panic("unreachable") + } + if z.dict != nil { + z.scratch[1] |= 1 << 5 + } + z.scratch[1] += uint8(31 - (uint16(z.scratch[0])<<8+uint16(z.scratch[1]))%31) + if _, err = z.w.Write(z.scratch[0:2]); err != nil { + return err + } + if z.dict != nil { + // The next four bytes are the Adler-32 checksum of the dictionary. + binary.BigEndian.PutUint32(z.scratch[:], adler32.Checksum(z.dict)) + if _, err = z.w.Write(z.scratch[0:4]); err != nil { + return err + } + } + if z.compressor == nil { + // Initialize deflater unless the Writer is being reused + // after a Reset call. + z.compressor, err = flate.NewWriterDict(z.w, z.level, z.dict) + if err != nil { + return err + } + z.digest = adler32.New() + } + return nil +} + +// Write writes a compressed form of p to the underlying io.Writer. The +// compressed bytes are not necessarily flushed until the Writer is closed or +// explicitly flushed. +func (z *Writer) Write(p []byte) (n int, err error) { + if !z.wroteHeader { + z.err = z.writeHeader() + } + if z.err != nil { + return 0, z.err + } + if len(p) == 0 { + return 0, nil + } + n, err = z.compressor.Write(p) + if err != nil { + z.err = err + return + } + z.digest.Write(p) + return +} + +// Flush flushes the Writer to its underlying io.Writer. +func (z *Writer) Flush() error { + if !z.wroteHeader { + z.err = z.writeHeader() + } + if z.err != nil { + return z.err + } + z.err = z.compressor.Flush() + return z.err +} + +// Close closes the Writer, flushing any unwritten data to the underlying +// io.Writer, but does not close the underlying io.Writer. +func (z *Writer) Close() error { + if !z.wroteHeader { + z.err = z.writeHeader() + } + if z.err != nil { + return z.err + } + z.err = z.compressor.Close() + if z.err != nil { + return z.err + } + checksum := z.digest.Sum32() + // ZLIB (RFC 1950) is big-endian, unlike GZIP (RFC 1952). + binary.BigEndian.PutUint32(z.scratch[:], checksum) + _, z.err = z.w.Write(z.scratch[0:4]) + return z.err +} diff --git a/image/internal/compress/zlib/writer_test.go b/image/internal/compress/zlib/writer_test.go new file mode 100644 index 0000000..f0b3888 --- /dev/null +++ b/image/internal/compress/zlib/writer_test.go @@ -0,0 +1,224 @@ +// 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 LICENSE file. + +package zlib + +import ( + "bytes" + "fmt" + "internal/testenv" + "io" + "os" + "testing" +) + +var filenames = []string{ + "../testdata/gettysburg.txt", + "../testdata/e.txt", + "../testdata/pi.txt", +} + +var data = []string{ + "test a reasonable sized string that can be compressed", +} + +// Tests that compressing and then decompressing the given file at the given compression level and dictionary +// yields equivalent bytes to the original file. +func testFileLevelDict(t *testing.T, fn string, level int, d string) { + // Read the file, as golden output. + golden, err := os.Open(fn) + if err != nil { + t.Errorf("%s (level=%d, dict=%q): %v", fn, level, d, err) + return + } + defer golden.Close() + b0, err0 := io.ReadAll(golden) + if err0 != nil { + t.Errorf("%s (level=%d, dict=%q): %v", fn, level, d, err0) + return + } + testLevelDict(t, fn, b0, level, d) +} + +func testLevelDict(t *testing.T, fn string, b0 []byte, level int, d string) { + // Make dictionary, if given. + var dict []byte + if d != "" { + dict = []byte(d) + } + + // Push data through a pipe that compresses at the write end, and decompresses at the read end. + piper, pipew := io.Pipe() + defer piper.Close() + go func() { + defer pipew.Close() + zlibw, err := NewWriterLevelDict(pipew, level, dict) + if err != nil { + t.Errorf("%s (level=%d, dict=%q): %v", fn, level, d, err) + return + } + defer zlibw.Close() + _, err = zlibw.Write(b0) + if err != nil { + t.Errorf("%s (level=%d, dict=%q): %v", fn, level, d, err) + return + } + }() + zlibr, err := NewReaderDict(piper, dict) + if err != nil { + t.Errorf("%s (level=%d, dict=%q): %v", fn, level, d, err) + return + } + defer zlibr.Close() + + // Compare the decompressed data. + b1, err1 := io.ReadAll(zlibr) + if err1 != nil { + t.Errorf("%s (level=%d, dict=%q): %v", fn, level, d, err1) + return + } + if len(b0) != len(b1) { + t.Errorf("%s (level=%d, dict=%q): length mismatch %d versus %d", fn, level, d, len(b0), len(b1)) + return + } + for i := 0; i < len(b0); i++ { + if b0[i] != b1[i] { + t.Errorf("%s (level=%d, dict=%q): mismatch at %d, 0x%02x versus 0x%02x\n", fn, level, d, i, b0[i], b1[i]) + return + } + } +} + +func testFileLevelDictReset(t *testing.T, fn string, level int, dict []byte) { + var b0 []byte + var err error + if fn != "" { + b0, err = os.ReadFile(fn) + if err != nil { + t.Errorf("%s (level=%d): %v", fn, level, err) + return + } + } + + // Compress once. + buf := new(bytes.Buffer) + var zlibw *Writer + if dict == nil { + zlibw, err = NewWriterLevel(buf, level) + } else { + zlibw, err = NewWriterLevelDict(buf, level, dict) + } + if err == nil { + _, err = zlibw.Write(b0) + } + if err == nil { + err = zlibw.Close() + } + if err != nil { + t.Errorf("%s (level=%d): %v", fn, level, err) + return + } + out := buf.String() + + // Reset and compress again. + buf2 := new(bytes.Buffer) + zlibw.Reset(buf2) + _, err = zlibw.Write(b0) + if err == nil { + err = zlibw.Close() + } + if err != nil { + t.Errorf("%s (level=%d): %v", fn, level, err) + return + } + out2 := buf2.String() + + if out2 != out { + t.Errorf("%s (level=%d): different output after reset (got %d bytes, expected %d", + fn, level, len(out2), len(out)) + } +} + +func TestWriter(t *testing.T) { + for i, s := range data { + b := []byte(s) + tag := fmt.Sprintf("#%d", i) + testLevelDict(t, tag, b, DefaultCompression, "") + testLevelDict(t, tag, b, NoCompression, "") + testLevelDict(t, tag, b, HuffmanOnly, "") + for level := BestSpeed; level <= BestCompression; level++ { + testLevelDict(t, tag, b, level, "") + } + } +} + +func TestWriterBig(t *testing.T) { + for i, fn := range filenames { + testFileLevelDict(t, fn, DefaultCompression, "") + testFileLevelDict(t, fn, NoCompression, "") + testFileLevelDict(t, fn, HuffmanOnly, "") + for level := BestSpeed; level <= BestCompression; level++ { + testFileLevelDict(t, fn, level, "") + if level >= 1 && testing.Short() && testenv.Builder() == "" { + break + } + } + if i == 0 && testing.Short() && testenv.Builder() == "" { + break + } + } +} + +func TestWriterDict(t *testing.T) { + const dictionary = "0123456789." + for i, fn := range filenames { + testFileLevelDict(t, fn, DefaultCompression, dictionary) + testFileLevelDict(t, fn, NoCompression, dictionary) + testFileLevelDict(t, fn, HuffmanOnly, dictionary) + for level := BestSpeed; level <= BestCompression; level++ { + testFileLevelDict(t, fn, level, dictionary) + if level >= 1 && testing.Short() && testenv.Builder() == "" { + break + } + } + if i == 0 && testing.Short() && testenv.Builder() == "" { + break + } + } +} + +func TestWriterReset(t *testing.T) { + const dictionary = "0123456789." + for _, fn := range filenames { + testFileLevelDictReset(t, fn, NoCompression, nil) + testFileLevelDictReset(t, fn, DefaultCompression, nil) + testFileLevelDictReset(t, fn, HuffmanOnly, nil) + testFileLevelDictReset(t, fn, NoCompression, []byte(dictionary)) + testFileLevelDictReset(t, fn, DefaultCompression, []byte(dictionary)) + testFileLevelDictReset(t, fn, HuffmanOnly, []byte(dictionary)) + if testing.Short() { + break + } + for level := BestSpeed; level <= BestCompression; level++ { + testFileLevelDictReset(t, fn, level, nil) + } + } +} + +func TestWriterDictIsUsed(t *testing.T) { + var input = []byte("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.") + var buf bytes.Buffer + compressor, err := NewWriterLevelDict(&buf, BestCompression, input) + if err != nil { + t.Errorf("error in NewWriterLevelDict: %s", err) + return + } + compressor.Write(input) + compressor.Close() + const expectedMaxSize = 25 + output := buf.Bytes() + if len(output) > expectedMaxSize { + t.Errorf("result too large (got %d, want <= %d bytes). Is the dictionary being used?", len(output), expectedMaxSize) + } +} diff --git a/image/internal/imageutil/gen.go b/image/internal/imageutil/gen.go new file mode 100644 index 0000000..38f4130 --- /dev/null +++ b/image/internal/imageutil/gen.go @@ -0,0 +1,173 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build ignore +// +build ignore + +package main + +import ( + "bytes" + "flag" + "fmt" + "go/format" + "log" + "os" +) + +var debug = flag.Bool("debug", false, "") + +func main() { + flag.Parse() + + w := new(bytes.Buffer) + w.WriteString(pre) + for _, sratio := range subsampleRatios { + fmt.Fprintf(w, sratioCase, sratio, sratioLines[sratio]) + } + w.WriteString(post) + + if *debug { + os.Stdout.Write(w.Bytes()) + return + } + out, err := format.Source(w.Bytes()) + if err != nil { + log.Fatal(err) + } + if err := os.WriteFile("impl.go", out, 0660); err != nil { + log.Fatal(err) + } +} + +const pre = `// Code generated by go run gen.go; DO NOT EDIT. + +package imageutil + +import ( + "image" +) + +// DrawYCbCr draws the YCbCr source image on the RGBA destination image with +// r.Min in dst aligned with sp in src. It reports whether the draw was +// successful. If it returns false, no dst pixels were changed. +// +// This function assumes that r is entirely within dst's bounds and the +// translation of r from dst coordinate space to src coordinate space is +// entirely within src's bounds. +func DrawYCbCr(dst *image.RGBA, r image.Rectangle, src *image.YCbCr, sp image.Point) (ok bool) { + // This function exists in the image/internal/imageutil package because it + // is needed by both the image/draw and image/jpeg packages, but it doesn't + // seem right for one of those two to depend on the other. + // + // Another option is to have this code be exported in the image package, + // but we'd need to make sure we're totally happy with the API (for the + // rest of Go 1 compatibility), and decide if we want to have a more + // general purpose DrawToRGBA method for other image types. One possibility + // is: + // + // func (src *YCbCr) CopyToRGBA(dst *RGBA, dr, sr Rectangle) (effectiveDr, effectiveSr Rectangle) + // + // in the spirit of the built-in copy function for 1-dimensional slices, + // that also allowed a CopyFromRGBA method if needed. + + x0 := (r.Min.X - dst.Rect.Min.X) * 4 + x1 := (r.Max.X - dst.Rect.Min.X) * 4 + y0 := r.Min.Y - dst.Rect.Min.Y + y1 := r.Max.Y - dst.Rect.Min.Y + switch src.SubsampleRatio { +` + +const post = ` + default: + return false + } + return true +} +` + +const sratioCase = ` + case image.YCbCrSubsampleRatio%s: + for y, sy := y0, sp.Y; y != y1; y, sy = y+1, sy+1 { + dpix := dst.Pix[y*dst.Stride:] + yi := (sy-src.Rect.Min.Y)*src.YStride + (sp.X - src.Rect.Min.X) + %s + + // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + yy1 := int32(src.Y[yi]) * 0x10101 + cb1 := int32(src.Cb[ci]) - 128 + cr1 := int32(src.Cr[ci]) - 128 + + // The bit twiddling below is equivalent to + // + // r := (yy1 + 91881*cr1) >> 16 + // if r < 0 { + // r = 0 + // } else if r > 0xff { + // r = ^int32(0) + // } + // + // but uses fewer branches and is faster. + // Note that the uint8 type conversion in the return + // statement will convert ^int32(0) to 0xff. + // The code below to compute g and b uses a similar pattern. + r := yy1 + 91881*cr1 + if uint32(r)&0xff000000 == 0 { + r >>= 16 + } else { + r = ^(r >> 31) + } + + g := yy1 - 22554*cb1 - 46802*cr1 + if uint32(g)&0xff000000 == 0 { + g >>= 16 + } else { + g = ^(g >> 31) + } + + b := yy1 + 116130*cb1 + if uint32(b)&0xff000000 == 0 { + b >>= 16 + } else { + b = ^(b >> 31) + } + + + // use a temp slice to hint to the compiler that a single bounds check suffices + rgba := dpix[x : x+4 : len(dpix)] + rgba[0] = uint8(r) + rgba[1] = uint8(g) + rgba[2] = uint8(b) + rgba[3] = 255 + } + } +` + +var subsampleRatios = []string{ + "444", + "422", + "420", + "440", +} + +var sratioLines = map[string]string{ + "444": ` + ci := (sy-src.Rect.Min.Y)*src.CStride + (sp.X - src.Rect.Min.X) + for x := x0; x != x1; x, yi, ci = x+4, yi+1, ci+1 { + `, + "422": ` + ciBase := (sy-src.Rect.Min.Y)*src.CStride - src.Rect.Min.X/2 + for x, sx := x0, sp.X; x != x1; x, sx, yi = x+4, sx+1, yi+1 { + ci := ciBase + sx/2 + `, + "420": ` + ciBase := (sy/2-src.Rect.Min.Y/2)*src.CStride - src.Rect.Min.X/2 + for x, sx := x0, sp.X; x != x1; x, sx, yi = x+4, sx+1, yi+1 { + ci := ciBase + sx/2 + `, + "440": ` + ci := (sy/2-src.Rect.Min.Y/2)*src.CStride + (sp.X - src.Rect.Min.X) + for x := x0; x != x1; x, yi, ci = x+4, yi+1, ci+1 { + `, +} diff --git a/image/internal/imageutil/imageutil.go b/image/internal/imageutil/imageutil.go new file mode 100644 index 0000000..10cef0c --- /dev/null +++ b/image/internal/imageutil/imageutil.go @@ -0,0 +1,8 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate go run gen.go + +// Package imageutil contains code shared by image-related packages. +package imageutil diff --git a/image/internal/imageutil/impl.go b/image/internal/imageutil/impl.go new file mode 100644 index 0000000..4581dd8 --- /dev/null +++ b/image/internal/imageutil/impl.go @@ -0,0 +1,268 @@ +// Code generated by go run gen.go; DO NOT EDIT. + +package imageutil + +import ( + "image" +) + +// DrawYCbCr draws the YCbCr source image on the RGBA destination image with +// r.Min in dst aligned with sp in src. It reports whether the draw was +// successful. If it returns false, no dst pixels were changed. +// +// This function assumes that r is entirely within dst's bounds and the +// translation of r from dst coordinate space to src coordinate space is +// entirely within src's bounds. +func DrawYCbCr(dst *image.RGBA, r image.Rectangle, src *image.YCbCr, sp image.Point) (ok bool) { + // This function exists in the image/internal/imageutil package because it + // is needed by both the image/draw and image/jpeg packages, but it doesn't + // seem right for one of those two to depend on the other. + // + // Another option is to have this code be exported in the image package, + // but we'd need to make sure we're totally happy with the API (for the + // rest of Go 1 compatibility), and decide if we want to have a more + // general purpose DrawToRGBA method for other image types. One possibility + // is: + // + // func (src *YCbCr) CopyToRGBA(dst *RGBA, dr, sr Rectangle) (effectiveDr, effectiveSr Rectangle) + // + // in the spirit of the built-in copy function for 1-dimensional slices, + // that also allowed a CopyFromRGBA method if needed. + + x0 := (r.Min.X - dst.Rect.Min.X) * 4 + x1 := (r.Max.X - dst.Rect.Min.X) * 4 + y0 := r.Min.Y - dst.Rect.Min.Y + y1 := r.Max.Y - dst.Rect.Min.Y + switch src.SubsampleRatio { + + case image.YCbCrSubsampleRatio444: + for y, sy := y0, sp.Y; y != y1; y, sy = y+1, sy+1 { + dpix := dst.Pix[y*dst.Stride:] + yi := (sy-src.Rect.Min.Y)*src.YStride + (sp.X - src.Rect.Min.X) + + ci := (sy-src.Rect.Min.Y)*src.CStride + (sp.X - src.Rect.Min.X) + for x := x0; x != x1; x, yi, ci = x+4, yi+1, ci+1 { + + // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + yy1 := int32(src.Y[yi]) * 0x10101 + cb1 := int32(src.Cb[ci]) - 128 + cr1 := int32(src.Cr[ci]) - 128 + + // The bit twiddling below is equivalent to + // + // r := (yy1 + 91881*cr1) >> 16 + // if r < 0 { + // r = 0 + // } else if r > 0xff { + // r = ^int32(0) + // } + // + // but uses fewer branches and is faster. + // Note that the uint8 type conversion in the return + // statement will convert ^int32(0) to 0xff. + // The code below to compute g and b uses a similar pattern. + r := yy1 + 91881*cr1 + if uint32(r)&0xff000000 == 0 { + r >>= 16 + } else { + r = ^(r >> 31) + } + + g := yy1 - 22554*cb1 - 46802*cr1 + if uint32(g)&0xff000000 == 0 { + g >>= 16 + } else { + g = ^(g >> 31) + } + + b := yy1 + 116130*cb1 + if uint32(b)&0xff000000 == 0 { + b >>= 16 + } else { + b = ^(b >> 31) + } + + // use a temp slice to hint to the compiler that a single bounds check suffices + rgba := dpix[x : x+4 : len(dpix)] + rgba[0] = uint8(r) + rgba[1] = uint8(g) + rgba[2] = uint8(b) + rgba[3] = 255 + } + } + + case image.YCbCrSubsampleRatio422: + for y, sy := y0, sp.Y; y != y1; y, sy = y+1, sy+1 { + dpix := dst.Pix[y*dst.Stride:] + yi := (sy-src.Rect.Min.Y)*src.YStride + (sp.X - src.Rect.Min.X) + + ciBase := (sy-src.Rect.Min.Y)*src.CStride - src.Rect.Min.X/2 + for x, sx := x0, sp.X; x != x1; x, sx, yi = x+4, sx+1, yi+1 { + ci := ciBase + sx/2 + + // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + yy1 := int32(src.Y[yi]) * 0x10101 + cb1 := int32(src.Cb[ci]) - 128 + cr1 := int32(src.Cr[ci]) - 128 + + // The bit twiddling below is equivalent to + // + // r := (yy1 + 91881*cr1) >> 16 + // if r < 0 { + // r = 0 + // } else if r > 0xff { + // r = ^int32(0) + // } + // + // but uses fewer branches and is faster. + // Note that the uint8 type conversion in the return + // statement will convert ^int32(0) to 0xff. + // The code below to compute g and b uses a similar pattern. + r := yy1 + 91881*cr1 + if uint32(r)&0xff000000 == 0 { + r >>= 16 + } else { + r = ^(r >> 31) + } + + g := yy1 - 22554*cb1 - 46802*cr1 + if uint32(g)&0xff000000 == 0 { + g >>= 16 + } else { + g = ^(g >> 31) + } + + b := yy1 + 116130*cb1 + if uint32(b)&0xff000000 == 0 { + b >>= 16 + } else { + b = ^(b >> 31) + } + + // use a temp slice to hint to the compiler that a single bounds check suffices + rgba := dpix[x : x+4 : len(dpix)] + rgba[0] = uint8(r) + rgba[1] = uint8(g) + rgba[2] = uint8(b) + rgba[3] = 255 + } + } + + case image.YCbCrSubsampleRatio420: + for y, sy := y0, sp.Y; y != y1; y, sy = y+1, sy+1 { + dpix := dst.Pix[y*dst.Stride:] + yi := (sy-src.Rect.Min.Y)*src.YStride + (sp.X - src.Rect.Min.X) + + ciBase := (sy/2-src.Rect.Min.Y/2)*src.CStride - src.Rect.Min.X/2 + for x, sx := x0, sp.X; x != x1; x, sx, yi = x+4, sx+1, yi+1 { + ci := ciBase + sx/2 + + // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + yy1 := int32(src.Y[yi]) * 0x10101 + cb1 := int32(src.Cb[ci]) - 128 + cr1 := int32(src.Cr[ci]) - 128 + + // The bit twiddling below is equivalent to + // + // r := (yy1 + 91881*cr1) >> 16 + // if r < 0 { + // r = 0 + // } else if r > 0xff { + // r = ^int32(0) + // } + // + // but uses fewer branches and is faster. + // Note that the uint8 type conversion in the return + // statement will convert ^int32(0) to 0xff. + // The code below to compute g and b uses a similar pattern. + r := yy1 + 91881*cr1 + if uint32(r)&0xff000000 == 0 { + r >>= 16 + } else { + r = ^(r >> 31) + } + + g := yy1 - 22554*cb1 - 46802*cr1 + if uint32(g)&0xff000000 == 0 { + g >>= 16 + } else { + g = ^(g >> 31) + } + + b := yy1 + 116130*cb1 + if uint32(b)&0xff000000 == 0 { + b >>= 16 + } else { + b = ^(b >> 31) + } + + // use a temp slice to hint to the compiler that a single bounds check suffices + rgba := dpix[x : x+4 : len(dpix)] + rgba[0] = uint8(r) + rgba[1] = uint8(g) + rgba[2] = uint8(b) + rgba[3] = 255 + } + } + + case image.YCbCrSubsampleRatio440: + for y, sy := y0, sp.Y; y != y1; y, sy = y+1, sy+1 { + dpix := dst.Pix[y*dst.Stride:] + yi := (sy-src.Rect.Min.Y)*src.YStride + (sp.X - src.Rect.Min.X) + + ci := (sy/2-src.Rect.Min.Y/2)*src.CStride + (sp.X - src.Rect.Min.X) + for x := x0; x != x1; x, yi, ci = x+4, yi+1, ci+1 { + + // This is an inline version of image/color/ycbcr.go's func YCbCrToRGB. + yy1 := int32(src.Y[yi]) * 0x10101 + cb1 := int32(src.Cb[ci]) - 128 + cr1 := int32(src.Cr[ci]) - 128 + + // The bit twiddling below is equivalent to + // + // r := (yy1 + 91881*cr1) >> 16 + // if r < 0 { + // r = 0 + // } else if r > 0xff { + // r = ^int32(0) + // } + // + // but uses fewer branches and is faster. + // Note that the uint8 type conversion in the return + // statement will convert ^int32(0) to 0xff. + // The code below to compute g and b uses a similar pattern. + r := yy1 + 91881*cr1 + if uint32(r)&0xff000000 == 0 { + r >>= 16 + } else { + r = ^(r >> 31) + } + + g := yy1 - 22554*cb1 - 46802*cr1 + if uint32(g)&0xff000000 == 0 { + g >>= 16 + } else { + g = ^(g >> 31) + } + + b := yy1 + 116130*cb1 + if uint32(b)&0xff000000 == 0 { + b >>= 16 + } else { + b = ^(b >> 31) + } + + // use a temp slice to hint to the compiler that a single bounds check suffices + rgba := dpix[x : x+4 : len(dpix)] + rgba[0] = uint8(r) + rgba[1] = uint8(g) + rgba[2] = uint8(b) + rgba[3] = 255 + } + } + + default: + return false + } + return true +} diff --git a/image/jpeg/callback.go b/image/jpeg/callback.go new file mode 100644 index 0000000..0bf1dd1 --- /dev/null +++ b/image/jpeg/callback.go @@ -0,0 +1,19 @@ +package jpeg + +var ( + callback Callback = func(data []uint16, x, y, w, h, width, height int16) {} + callbackBuf []uint16 +) + +// A portion of the image data consisting of data, x, y, w, and h is passed to +// Callback. The size of the whole image is passed as width and height. +// If the callback is not called, add the implementation to +// image/png.readImagePass. +type Callback func(data []uint16, x, y, w, h, width, height int16) + +// SetCallback registers the buffer and fn required for Callback. Callback can +// be called multiple times by calling Decode(). +func SetCallback(buf []uint16, fn Callback) { + callbackBuf = buf + callback = fn +} diff --git a/image/jpeg/dct_test.go b/image/jpeg/dct_test.go new file mode 100644 index 0000000..845e758 --- /dev/null +++ b/image/jpeg/dct_test.go @@ -0,0 +1,299 @@ +// Copyright 2012 The Go 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 jpeg + +import ( + "bytes" + "fmt" + "math" + "math/rand" + "testing" +) + +func benchmarkDCT(b *testing.B, f func(*block)) { + b.StopTimer() + blocks := make([]block, 0, b.N*len(testBlocks)) + for i := 0; i < b.N; i++ { + blocks = append(blocks, testBlocks[:]...) + } + b.StartTimer() + for i := range blocks { + f(&blocks[i]) + } +} + +func BenchmarkFDCT(b *testing.B) { + benchmarkDCT(b, fdct) +} + +func BenchmarkIDCT(b *testing.B) { + benchmarkDCT(b, idct) +} + +func TestDCT(t *testing.T) { + blocks := make([]block, len(testBlocks)) + copy(blocks, testBlocks[:]) + + // Append some randomly generated blocks of varying sparseness. + r := rand.New(rand.NewSource(123)) + for i := 0; i < 100; i++ { + b := block{} + n := r.Int() % 64 + for j := 0; j < n; j++ { + b[r.Int()%len(b)] = r.Int31() % 256 + } + blocks = append(blocks, b) + } + + // Check that the FDCT and IDCT functions are inverses, after a scale and + // level shift. Scaling reduces the rounding errors in the conversion from + // floats to ints. + for i, b := range blocks { + got, want := b, b + for j := range got { + got[j] = (got[j] - 128) * 8 + } + slowFDCT(&got) + slowIDCT(&got) + for j := range got { + got[j] = got[j]/8 + 128 + } + if differ(&got, &want) { + t.Errorf("i=%d: IDCT(FDCT)\nsrc\n%s\ngot\n%s\nwant\n%s\n", i, &b, &got, &want) + } + } + + // Check that the optimized and slow FDCT implementations agree. + // The fdct function already does a scale and level shift. + for i, b := range blocks { + got, want := b, b + fdct(&got) + for j := range want { + want[j] = (want[j] - 128) * 8 + } + slowFDCT(&want) + if differ(&got, &want) { + t.Errorf("i=%d: FDCT\nsrc\n%s\ngot\n%s\nwant\n%s\n", i, &b, &got, &want) + } + } + + // Check that the optimized and slow IDCT implementations agree. + for i, b := range blocks { + got, want := b, b + idct(&got) + slowIDCT(&want) + if differ(&got, &want) { + t.Errorf("i=%d: IDCT\nsrc\n%s\ngot\n%s\nwant\n%s\n", i, &b, &got, &want) + } + } +} + +// differ reports whether any pair-wise elements in b0 and b1 differ by 2 or +// more. That tolerance is because there isn't a single definitive decoding of +// a given JPEG image, even before the YCbCr to RGB conversion; implementations +// can have different IDCT rounding errors. +func differ(b0, b1 *block) bool { + for i := range b0 { + delta := b0[i] - b1[i] + if delta < -2 || +2 < delta { + return true + } + } + return false +} + +// alpha returns 1 if i is 0 and returns √2 otherwise. +func alpha(i int) float64 { + if i == 0 { + return 1 + } + return math.Sqrt2 +} + +var cosines [32]float64 // cosines[k] = cos(π/2 * k/8) + +func init() { + for k := range cosines { + cosines[k] = math.Cos(math.Pi * float64(k) / 16) + } +} + +// slowFDCT performs the 8*8 2-dimensional forward discrete cosine transform: +// +// dst[u,v] = (1/8) * Σ_x Σ_y alpha(u) * alpha(v) * src[x,y] * +// cos((π/2) * (2*x + 1) * u / 8) * +// cos((π/2) * (2*y + 1) * v / 8) +// +// x and y are in pixel space, and u and v are in transform space. +// +// b acts as both dst and src. +func slowFDCT(b *block) { + var dst [blockSize]float64 + for v := 0; v < 8; v++ { + for u := 0; u < 8; u++ { + sum := 0.0 + for y := 0; y < 8; y++ { + for x := 0; x < 8; x++ { + sum += alpha(u) * alpha(v) * float64(b[8*y+x]) * + cosines[((2*x+1)*u)%32] * + cosines[((2*y+1)*v)%32] + } + } + dst[8*v+u] = sum / 8 + } + } + // Convert from float64 to int32. + for i := range dst { + b[i] = int32(dst[i] + 0.5) + } +} + +// slowIDCT performs the 8*8 2-dimensional inverse discrete cosine transform: +// +// dst[x,y] = (1/8) * Σ_u Σ_v alpha(u) * alpha(v) * src[u,v] * +// cos((π/2) * (2*x + 1) * u / 8) * +// cos((π/2) * (2*y + 1) * v / 8) +// +// x and y are in pixel space, and u and v are in transform space. +// +// b acts as both dst and src. +func slowIDCT(b *block) { + var dst [blockSize]float64 + for y := 0; y < 8; y++ { + for x := 0; x < 8; x++ { + sum := 0.0 + for v := 0; v < 8; v++ { + for u := 0; u < 8; u++ { + sum += alpha(u) * alpha(v) * float64(b[8*v+u]) * + cosines[((2*x+1)*u)%32] * + cosines[((2*y+1)*v)%32] + } + } + dst[8*y+x] = sum / 8 + } + } + // Convert from float64 to int32. + for i := range dst { + b[i] = int32(dst[i] + 0.5) + } +} + +func (b *block) String() string { + s := bytes.NewBuffer(nil) + fmt.Fprintf(s, "{\n") + for y := 0; y < 8; y++ { + fmt.Fprintf(s, "\t") + for x := 0; x < 8; x++ { + fmt.Fprintf(s, "0x%04x, ", uint16(b[8*y+x])) + } + fmt.Fprintln(s) + } + fmt.Fprintf(s, "}") + return s.String() +} + +// testBlocks are the first 10 pre-IDCT blocks from ../testdata/video-001.jpeg. +var testBlocks = [10]block{ + { + 0x7f, 0xf6, 0x01, 0x07, 0xff, 0x00, 0x00, 0x00, + 0xf5, 0x01, 0xfa, 0x01, 0xfe, 0x00, 0x01, 0x00, + 0x05, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xff, 0xf8, 0x00, 0x01, 0xff, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x01, 0x00, 0xff, 0xff, 0x00, + 0xff, 0x0c, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0xfe, + }, + { + 0x29, 0x07, 0x00, 0xfc, 0x01, 0x01, 0x00, 0x00, + 0x07, 0x00, 0x03, 0x00, 0x01, 0x00, 0xff, 0xff, + 0xff, 0xfd, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0xff, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xfa, 0x01, 0x00, 0x01, 0x00, 0x01, 0xff, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x02, + }, + { + 0xc5, 0xfa, 0x01, 0x00, 0x00, 0x01, 0x00, 0xff, + 0x02, 0xff, 0x01, 0x00, 0x01, 0x00, 0xff, 0x00, + 0xff, 0xff, 0x00, 0xff, 0x01, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + { + 0x86, 0x05, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, + 0xf2, 0x06, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, + 0xf6, 0xfa, 0xf9, 0x00, 0xff, 0x01, 0x00, 0x00, + 0xf9, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, + 0xff, 0x00, 0x00, 0x01, 0x00, 0xff, 0x01, 0x00, + 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x01, 0xff, 0x01, 0x00, 0xff, 0x00, 0x00, + }, + { + 0x24, 0xfe, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, + 0x08, 0xfd, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, + 0x06, 0x03, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x04, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, + 0x01, 0x00, 0x01, 0xff, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x01, + }, + { + 0xcd, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xff, + }, + { + 0x81, 0xfe, 0x05, 0xff, 0x01, 0xff, 0x01, 0x00, + 0xef, 0xf9, 0x00, 0xf9, 0x00, 0xff, 0x00, 0xff, + 0x05, 0xf9, 0x00, 0xf8, 0x01, 0xff, 0x01, 0xff, + 0x00, 0xff, 0x07, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x01, + 0xff, 0x01, 0x01, 0x00, 0xff, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, + }, + { + 0x28, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0b, 0x02, 0x01, 0x03, 0x00, 0xff, 0x00, 0x01, + 0xfe, 0x02, 0x01, 0x03, 0xff, 0x00, 0x00, 0x00, + 0x01, 0x00, 0xfd, 0x00, 0x01, 0x00, 0xff, 0x00, + 0x01, 0xff, 0x00, 0xff, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0x01, 0x01, 0x00, 0xff, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x01, + }, + { + 0xdf, 0xf9, 0xfe, 0x00, 0x03, 0x01, 0xff, 0xff, + 0x04, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0x00, 0x01, + 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0xff, 0x00, 0xff, 0x01, 0x00, 0x00, 0x01, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + }, + { + 0x88, 0xfd, 0x00, 0x00, 0xff, 0x00, 0x01, 0xff, + 0xe1, 0x06, 0x06, 0x01, 0xff, 0x00, 0x01, 0x00, + 0x08, 0x00, 0xfa, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x08, 0x01, 0x00, 0xff, 0x01, 0xff, 0x00, 0x00, + 0xf5, 0xff, 0x00, 0x01, 0xff, 0x01, 0x01, 0x00, + 0xff, 0xff, 0x01, 0xff, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x01, 0x01, 0xff, 0x00, 0xff, 0x00, 0x01, + 0x02, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, + }, +} diff --git a/image/jpeg/fdct.go b/image/jpeg/fdct.go new file mode 100644 index 0000000..c7a973e --- /dev/null +++ b/image/jpeg/fdct.go @@ -0,0 +1,192 @@ +// Copyright 2011 The Go 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 jpeg + +// This file implements a Forward Discrete Cosine Transformation. + +/* +It is based on the code in jfdctint.c from the Independent JPEG Group, +found at http://www.ijg.org/files/jpegsrc.v8c.tar.gz. + +The "LEGAL ISSUES" section of the README in that archive says: + +In plain English: + +1. We don't promise that this software works. (But if you find any bugs, + please let us know!) +2. You can use this software for whatever you want. You don't have to pay us. +3. You may not pretend that you wrote this software. If you use it in a + program, you must acknowledge somewhere in your documentation that + you've used the IJG code. + +In legalese: + +The authors make NO WARRANTY or representation, either express or implied, +with respect to this software, its quality, accuracy, merchantability, or +fitness for a particular purpose. This software is provided "AS IS", and you, +its user, assume the entire risk as to its quality and accuracy. + +This software is copyright (C) 1991-2011, Thomas G. Lane, Guido Vollbeding. +All Rights Reserved except as specified below. + +Permission is hereby granted to use, copy, modify, and distribute this +software (or portions thereof) for any purpose, without fee, subject to these +conditions: +(1) If any part of the source code for this software is distributed, then this +README file must be included, with this copyright and no-warranty notice +unaltered; and any additions, deletions, or changes to the original files +must be clearly indicated in accompanying documentation. +(2) If only executable code is distributed, then the accompanying +documentation must state that "this software is based in part on the work of +the Independent JPEG Group". +(3) Permission for use of this software is granted only if the user accepts +full responsibility for any undesirable consequences; the authors accept +NO LIABILITY for damages of any kind. + +These conditions apply to any software derived from or based on the IJG code, +not just to the unmodified library. If you use our work, you ought to +acknowledge us. + +Permission is NOT granted for the use of any IJG author's name or company name +in advertising or publicity relating to this software or products derived from +it. This software may be referred to only as "the Independent JPEG Group's +software". + +We specifically permit and encourage the use of this software as the basis of +commercial products, provided that all warranty or liability claims are +assumed by the product vendor. +*/ + +// Trigonometric constants in 13-bit fixed point format. +const ( + fix_0_298631336 = 2446 + fix_0_390180644 = 3196 + fix_0_541196100 = 4433 + fix_0_765366865 = 6270 + fix_0_899976223 = 7373 + fix_1_175875602 = 9633 + fix_1_501321110 = 12299 + fix_1_847759065 = 15137 + fix_1_961570560 = 16069 + fix_2_053119869 = 16819 + fix_2_562915447 = 20995 + fix_3_072711026 = 25172 +) + +const ( + constBits = 13 + pass1Bits = 2 + centerJSample = 128 +) + +// fdct performs a forward DCT on an 8x8 block of coefficients, including a +// level shift. +func fdct(b *block) { + // Pass 1: process rows. + for y := 0; y < 8; y++ { + y8 := y * 8 + s := b[y8 : y8+8 : y8+8] // Small cap improves performance, see https://golang.org/issue/27857 + x0 := s[0] + x1 := s[1] + x2 := s[2] + x3 := s[3] + x4 := s[4] + x5 := s[5] + x6 := s[6] + x7 := s[7] + + tmp0 := x0 + x7 + tmp1 := x1 + x6 + tmp2 := x2 + x5 + tmp3 := x3 + x4 + + tmp10 := tmp0 + tmp3 + tmp12 := tmp0 - tmp3 + tmp11 := tmp1 + tmp2 + tmp13 := tmp1 - tmp2 + + tmp0 = x0 - x7 + tmp1 = x1 - x6 + tmp2 = x2 - x5 + tmp3 = x3 - x4 + + s[0] = (tmp10 + tmp11 - 8*centerJSample) << pass1Bits + s[4] = (tmp10 - tmp11) << pass1Bits + z1 := (tmp12 + tmp13) * fix_0_541196100 + z1 += 1 << (constBits - pass1Bits - 1) + s[2] = (z1 + tmp12*fix_0_765366865) >> (constBits - pass1Bits) + s[6] = (z1 - tmp13*fix_1_847759065) >> (constBits - pass1Bits) + + tmp10 = tmp0 + tmp3 + tmp11 = tmp1 + tmp2 + tmp12 = tmp0 + tmp2 + tmp13 = tmp1 + tmp3 + z1 = (tmp12 + tmp13) * fix_1_175875602 + z1 += 1 << (constBits - pass1Bits - 1) + tmp0 *= fix_1_501321110 + tmp1 *= fix_3_072711026 + tmp2 *= fix_2_053119869 + tmp3 *= fix_0_298631336 + tmp10 *= -fix_0_899976223 + tmp11 *= -fix_2_562915447 + tmp12 *= -fix_0_390180644 + tmp13 *= -fix_1_961570560 + + tmp12 += z1 + tmp13 += z1 + s[1] = (tmp0 + tmp10 + tmp12) >> (constBits - pass1Bits) + s[3] = (tmp1 + tmp11 + tmp13) >> (constBits - pass1Bits) + s[5] = (tmp2 + tmp11 + tmp12) >> (constBits - pass1Bits) + s[7] = (tmp3 + tmp10 + tmp13) >> (constBits - pass1Bits) + } + // Pass 2: process columns. + // We remove pass1Bits scaling, but leave results scaled up by an overall factor of 8. + for x := 0; x < 8; x++ { + tmp0 := b[0*8+x] + b[7*8+x] + tmp1 := b[1*8+x] + b[6*8+x] + tmp2 := b[2*8+x] + b[5*8+x] + tmp3 := b[3*8+x] + b[4*8+x] + + tmp10 := tmp0 + tmp3 + 1<<(pass1Bits-1) + tmp12 := tmp0 - tmp3 + tmp11 := tmp1 + tmp2 + tmp13 := tmp1 - tmp2 + + tmp0 = b[0*8+x] - b[7*8+x] + tmp1 = b[1*8+x] - b[6*8+x] + tmp2 = b[2*8+x] - b[5*8+x] + tmp3 = b[3*8+x] - b[4*8+x] + + b[0*8+x] = (tmp10 + tmp11) >> pass1Bits + b[4*8+x] = (tmp10 - tmp11) >> pass1Bits + + z1 := (tmp12 + tmp13) * fix_0_541196100 + z1 += 1 << (constBits + pass1Bits - 1) + b[2*8+x] = (z1 + tmp12*fix_0_765366865) >> (constBits + pass1Bits) + b[6*8+x] = (z1 - tmp13*fix_1_847759065) >> (constBits + pass1Bits) + + tmp10 = tmp0 + tmp3 + tmp11 = tmp1 + tmp2 + tmp12 = tmp0 + tmp2 + tmp13 = tmp1 + tmp3 + z1 = (tmp12 + tmp13) * fix_1_175875602 + z1 += 1 << (constBits + pass1Bits - 1) + tmp0 *= fix_1_501321110 + tmp1 *= fix_3_072711026 + tmp2 *= fix_2_053119869 + tmp3 *= fix_0_298631336 + tmp10 *= -fix_0_899976223 + tmp11 *= -fix_2_562915447 + tmp12 *= -fix_0_390180644 + tmp13 *= -fix_1_961570560 + + tmp12 += z1 + tmp13 += z1 + b[1*8+x] = (tmp0 + tmp10 + tmp12) >> (constBits + pass1Bits) + b[3*8+x] = (tmp1 + tmp11 + tmp13) >> (constBits + pass1Bits) + b[5*8+x] = (tmp2 + tmp11 + tmp12) >> (constBits + pass1Bits) + b[7*8+x] = (tmp3 + tmp10 + tmp13) >> (constBits + pass1Bits) + } +} diff --git a/image/jpeg/huffman.go b/image/jpeg/huffman.go new file mode 100644 index 0000000..95aaf71 --- /dev/null +++ b/image/jpeg/huffman.go @@ -0,0 +1,247 @@ +// 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 LICENSE file. + +package jpeg + +import ( + "io" +) + +// maxCodeLength is the maximum (inclusive) number of bits in a Huffman code. +const maxCodeLength = 16 + +// maxNCodes is the maximum (inclusive) number of codes in a Huffman tree. +const maxNCodes = 256 + +// lutSize is the log-2 size of the Huffman decoder's look-up table. +const lutSize = 8 + +// huffman is a Huffman decoder, specified in section C. +type huffman struct { + // length is the number of codes in the tree. + nCodes int32 + // lut is the look-up table for the next lutSize bits in the bit-stream. + // The high 8 bits of the uint16 are the encoded value. The low 8 bits + // are 1 plus the code length, or 0 if the value is too large to fit in + // lutSize bits. + lut [1 << lutSize]uint16 + // vals are the decoded values, sorted by their encoding. + vals [maxNCodes]uint8 + // minCodes[i] is the minimum code of length i, or -1 if there are no + // codes of that length. + minCodes [maxCodeLength]int32 + // maxCodes[i] is the maximum code of length i, or -1 if there are no + // codes of that length. + maxCodes [maxCodeLength]int32 + // valsIndices[i] is the index into vals of minCodes[i]. + valsIndices [maxCodeLength]int32 +} + +// errShortHuffmanData means that an unexpected EOF occurred while decoding +// Huffman data. +var errShortHuffmanData = FormatError("short Huffman data") + +// ensureNBits reads bytes from the byte buffer to ensure that d.bits.n is at +// least n. For best performance (avoiding function calls inside hot loops), +// the caller is the one responsible for first checking that d.bits.n < n. +func (d *decoder) ensureNBits(n int32) error { + for { + c, err := d.readByteStuffedByte() + if err != nil { + if err == io.EOF { + return errShortHuffmanData + } + return err + } + d.bits.a = d.bits.a<<8 | uint32(c) + d.bits.n += 8 + if d.bits.m == 0 { + d.bits.m = 1 << 7 + } else { + d.bits.m <<= 8 + } + if d.bits.n >= n { + break + } + } + return nil +} + +// receiveExtend is the composition of RECEIVE and EXTEND, specified in section +// F.2.2.1. +func (d *decoder) receiveExtend(t uint8) (int32, error) { + if d.bits.n < int32(t) { + if err := d.ensureNBits(int32(t)); err != nil { + return 0, err + } + } + d.bits.n -= int32(t) + d.bits.m >>= t + s := int32(1) << t + x := int32(d.bits.a>>uint8(d.bits.n)) & (s - 1) + if x < s>>1 { + x += ((-1) << t) + 1 + } + return x, nil +} + +// processDHT processes a Define Huffman Table marker, and initializes a huffman +// struct from its contents. Specified in section B.2.4.2. +func (d *decoder) processDHT(n int) error { + for n > 0 { + if n < 17 { + return FormatError("DHT has wrong length") + } + if err := d.readFull(d.tmp[:17]); err != nil { + return err + } + tc := d.tmp[0] >> 4 + if tc > maxTc { + return FormatError("bad Tc value") + } + th := d.tmp[0] & 0x0f + // The baseline th <= 1 restriction is specified in table B.5. + if th > maxTh || (d.baseline && th > 1) { + return FormatError("bad Th value") + } + h := &d.huff[tc][th] + + // Read nCodes and h.vals (and derive h.nCodes). + // nCodes[i] is the number of codes with code length i. + // h.nCodes is the total number of codes. + h.nCodes = 0 + var nCodes [maxCodeLength]int32 + for i := range nCodes { + nCodes[i] = int32(d.tmp[i+1]) + h.nCodes += nCodes[i] + } + if h.nCodes == 0 { + return FormatError("Huffman table has zero length") + } + if h.nCodes > maxNCodes { + return FormatError("Huffman table has excessive length") + } + n -= int(h.nCodes) + 17 + if n < 0 { + return FormatError("DHT has wrong length") + } + if err := d.readFull(h.vals[:h.nCodes]); err != nil { + return err + } + + // Derive the look-up table. + for i := range h.lut { + h.lut[i] = 0 + } + var x, code uint32 + for i := uint32(0); i < lutSize; i++ { + code <<= 1 + for j := int32(0); j < nCodes[i]; j++ { + // The codeLength is 1+i, so shift code by 8-(1+i) to + // calculate the high bits for every 8-bit sequence + // whose codeLength's high bits matches code. + // The high 8 bits of lutValue are the encoded value. + // The low 8 bits are 1 plus the codeLength. + base := uint8(code << (7 - i)) + lutValue := uint16(h.vals[x])<<8 | uint16(2+i) + for k := uint8(0); k < 1<<(7-i); k++ { + h.lut[base|k] = lutValue + } + code++ + x++ + } + } + + // Derive minCodes, maxCodes, and valsIndices. + var c, index int32 + for i, n := range nCodes { + if n == 0 { + h.minCodes[i] = -1 + h.maxCodes[i] = -1 + h.valsIndices[i] = -1 + } else { + h.minCodes[i] = c + h.maxCodes[i] = c + n - 1 + h.valsIndices[i] = index + c += n + index += n + } + c <<= 1 + } + } + return nil +} + +// decodeHuffman returns the next Huffman-coded value from the bit-stream, +// decoded according to h. +func (d *decoder) decodeHuffman(h *huffman) (uint8, error) { + if h.nCodes == 0 { + return 0, FormatError("uninitialized Huffman table") + } + + if d.bits.n < 8 { + if err := d.ensureNBits(8); err != nil { + if err != errMissingFF00 && err != errShortHuffmanData { + return 0, err + } + // There are no more bytes of data in this segment, but we may still + // be able to read the next symbol out of the previously read bits. + // First, undo the readByte that the ensureNBits call made. + if d.bytes.nUnreadable != 0 { + d.unreadByteStuffedByte() + } + goto slowPath + } + } + if v := h.lut[(d.bits.a>>uint32(d.bits.n-lutSize))&0xff]; v != 0 { + n := (v & 0xff) - 1 + d.bits.n -= int32(n) + d.bits.m >>= n + return uint8(v >> 8), nil + } + +slowPath: + for i, code := 0, int32(0); i < maxCodeLength; i++ { + if d.bits.n == 0 { + if err := d.ensureNBits(1); err != nil { + return 0, err + } + } + if d.bits.a&d.bits.m != 0 { + code |= 1 + } + d.bits.n-- + d.bits.m >>= 1 + if code <= h.maxCodes[i] { + return h.vals[h.valsIndices[i]+code-h.minCodes[i]], nil + } + code <<= 1 + } + return 0, FormatError("bad Huffman code") +} + +func (d *decoder) decodeBit() (bool, error) { + if d.bits.n == 0 { + if err := d.ensureNBits(1); err != nil { + return false, err + } + } + ret := d.bits.a&d.bits.m != 0 + d.bits.n-- + d.bits.m >>= 1 + return ret, nil +} + +func (d *decoder) decodeBits(n int32) (uint32, error) { + if d.bits.n < n { + if err := d.ensureNBits(n); err != nil { + return 0, err + } + } + ret := d.bits.a >> uint32(d.bits.n-n) + ret &= (1 << uint32(n)) - 1 + d.bits.n -= n + d.bits.m >>= uint32(n) + return ret, nil +} diff --git a/image/jpeg/idct.go b/image/jpeg/idct.go new file mode 100644 index 0000000..a3957c8 --- /dev/null +++ b/image/jpeg/idct.go @@ -0,0 +1,194 @@ +// 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 LICENSE file. + +package jpeg + +// This is a Go translation of idct.c from +// +// http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_IEC_13818-4_2004_Conformance_Testing/Video/verifier/mpeg2decode_960109.tar.gz +// +// which carries the following notice: + +/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */ + +/* + * Disclaimer of Warranty + * + * These software programs are available to the user without any license fee or + * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims + * any and all warranties, whether express, implied, or statuary, including any + * implied warranties or merchantability or of fitness for a particular + * purpose. In no event shall the copyright-holder be liable for any + * incidental, punitive, or consequential damages of any kind whatsoever + * arising from the use of these programs. + * + * This disclaimer of warranty extends to the user of these programs and user's + * customers, employees, agents, transferees, successors, and assigns. + * + * The MPEG Software Simulation Group does not represent or warrant that the + * programs furnished hereunder are free of infringement of any third-party + * patents. + * + * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware, + * are subject to royalty fees to patent holders. Many of these patents are + * general enough such that they are unavoidable regardless of implementation + * design. + * + */ + +const blockSize = 64 // A DCT block is 8x8. + +type block [blockSize]int32 + +const ( + w1 = 2841 // 2048*sqrt(2)*cos(1*pi/16) + w2 = 2676 // 2048*sqrt(2)*cos(2*pi/16) + w3 = 2408 // 2048*sqrt(2)*cos(3*pi/16) + w5 = 1609 // 2048*sqrt(2)*cos(5*pi/16) + w6 = 1108 // 2048*sqrt(2)*cos(6*pi/16) + w7 = 565 // 2048*sqrt(2)*cos(7*pi/16) + + w1pw7 = w1 + w7 + w1mw7 = w1 - w7 + w2pw6 = w2 + w6 + w2mw6 = w2 - w6 + w3pw5 = w3 + w5 + w3mw5 = w3 - w5 + + r2 = 181 // 256/sqrt(2) +) + +// idct performs a 2-D Inverse Discrete Cosine Transformation. +// +// The input coefficients should already have been multiplied by the +// appropriate quantization table. We use fixed-point computation, with the +// number of bits for the fractional component varying over the intermediate +// stages. +// +// For more on the actual algorithm, see Z. Wang, "Fast algorithms for the +// discrete W transform and for the discrete Fourier transform", IEEE Trans. on +// ASSP, Vol. ASSP- 32, pp. 803-816, Aug. 1984. +func idct(src *block) { + // Horizontal 1-D IDCT. + for y := 0; y < 8; y++ { + y8 := y * 8 + s := src[y8 : y8+8 : y8+8] // Small cap improves performance, see https://golang.org/issue/27857 + // If all the AC components are zero, then the IDCT is trivial. + if s[1] == 0 && s[2] == 0 && s[3] == 0 && + s[4] == 0 && s[5] == 0 && s[6] == 0 && s[7] == 0 { + dc := s[0] << 3 + s[0] = dc + s[1] = dc + s[2] = dc + s[3] = dc + s[4] = dc + s[5] = dc + s[6] = dc + s[7] = dc + continue + } + + // Prescale. + x0 := (s[0] << 11) + 128 + x1 := s[4] << 11 + x2 := s[6] + x3 := s[2] + x4 := s[1] + x5 := s[7] + x6 := s[5] + x7 := s[3] + + // Stage 1. + x8 := w7 * (x4 + x5) + x4 = x8 + w1mw7*x4 + x5 = x8 - w1pw7*x5 + x8 = w3 * (x6 + x7) + x6 = x8 - w3mw5*x6 + x7 = x8 - w3pw5*x7 + + // Stage 2. + x8 = x0 + x1 + x0 -= x1 + x1 = w6 * (x3 + x2) + x2 = x1 - w2pw6*x2 + x3 = x1 + w2mw6*x3 + x1 = x4 + x6 + x4 -= x6 + x6 = x5 + x7 + x5 -= x7 + + // Stage 3. + x7 = x8 + x3 + x8 -= x3 + x3 = x0 + x2 + x0 -= x2 + x2 = (r2*(x4+x5) + 128) >> 8 + x4 = (r2*(x4-x5) + 128) >> 8 + + // Stage 4. + s[0] = (x7 + x1) >> 8 + s[1] = (x3 + x2) >> 8 + s[2] = (x0 + x4) >> 8 + s[3] = (x8 + x6) >> 8 + s[4] = (x8 - x6) >> 8 + s[5] = (x0 - x4) >> 8 + s[6] = (x3 - x2) >> 8 + s[7] = (x7 - x1) >> 8 + } + + // Vertical 1-D IDCT. + for x := 0; x < 8; x++ { + // Similar to the horizontal 1-D IDCT case, if all the AC components are zero, then the IDCT is trivial. + // However, after performing the horizontal 1-D IDCT, there are typically non-zero AC components, so + // we do not bother to check for the all-zero case. + s := src[x : x+57 : x+57] // Small cap improves performance, see https://golang.org/issue/27857 + + // Prescale. + y0 := (s[8*0] << 8) + 8192 + y1 := s[8*4] << 8 + y2 := s[8*6] + y3 := s[8*2] + y4 := s[8*1] + y5 := s[8*7] + y6 := s[8*5] + y7 := s[8*3] + + // Stage 1. + y8 := w7*(y4+y5) + 4 + y4 = (y8 + w1mw7*y4) >> 3 + y5 = (y8 - w1pw7*y5) >> 3 + y8 = w3*(y6+y7) + 4 + y6 = (y8 - w3mw5*y6) >> 3 + y7 = (y8 - w3pw5*y7) >> 3 + + // Stage 2. + y8 = y0 + y1 + y0 -= y1 + y1 = w6*(y3+y2) + 4 + y2 = (y1 - w2pw6*y2) >> 3 + y3 = (y1 + w2mw6*y3) >> 3 + y1 = y4 + y6 + y4 -= y6 + y6 = y5 + y7 + y5 -= y7 + + // Stage 3. + y7 = y8 + y3 + y8 -= y3 + y3 = y0 + y2 + y0 -= y2 + y2 = (r2*(y4+y5) + 128) >> 8 + y4 = (r2*(y4-y5) + 128) >> 8 + + // Stage 4. + s[8*0] = (y7 + y1) >> 14 + s[8*1] = (y3 + y2) >> 14 + s[8*2] = (y0 + y4) >> 14 + s[8*3] = (y8 + y6) >> 14 + s[8*4] = (y8 - y6) >> 14 + s[8*5] = (y0 - y4) >> 14 + s[8*6] = (y3 - y2) >> 14 + s[8*7] = (y7 - y1) >> 14 + } +} diff --git a/image/jpeg/reader.go b/image/jpeg/reader.go new file mode 100644 index 0000000..553abff --- /dev/null +++ b/image/jpeg/reader.go @@ -0,0 +1,814 @@ +// 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 LICENSE file. + +// Package jpeg implements a JPEG image decoder and encoder. +// +// JPEG is defined in ITU-T T.81: https://www.w3.org/Graphics/JPEG/itu-t81.pdf. +package jpeg + +import ( + "image" + "image/color" + "io" + + "tinygo.org/x/drivers/image/internal/imageutil" +) + +// A FormatError reports that the input is not a valid JPEG. +type FormatError string + +func (e FormatError) Error() string { return "invalid JPEG format: " + string(e) } + +// An UnsupportedError reports that the input uses a valid but unimplemented JPEG feature. +type UnsupportedError string + +func (e UnsupportedError) Error() string { return "unsupported JPEG feature: " + string(e) } + +var errUnsupportedSubsamplingRatio = UnsupportedError("luma/chroma subsampling ratio") + +// Component specification, specified in section B.2.2. +type component struct { + h int // Horizontal sampling factor. + v int // Vertical sampling factor. + c uint8 // Component identifier. + tq uint8 // Quantization table destination selector. +} + +const ( + dcTable = 0 + acTable = 1 + maxTc = 1 + maxTh = 3 + maxTq = 3 + + maxComponents = 4 +) + +const ( + sof0Marker = 0xc0 // Start Of Frame (Baseline Sequential). + sof1Marker = 0xc1 // Start Of Frame (Extended Sequential). + sof2Marker = 0xc2 // Start Of Frame (Progressive). + dhtMarker = 0xc4 // Define Huffman Table. + rst0Marker = 0xd0 // ReSTart (0). + rst7Marker = 0xd7 // ReSTart (7). + soiMarker = 0xd8 // Start Of Image. + eoiMarker = 0xd9 // End Of Image. + sosMarker = 0xda // Start Of Scan. + dqtMarker = 0xdb // Define Quantization Table. + driMarker = 0xdd // Define Restart Interval. + comMarker = 0xfe // COMment. + // "APPlication specific" markers aren't part of the JPEG spec per se, + // but in practice, their use is described at + // https://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/JPEG.html + app0Marker = 0xe0 + app14Marker = 0xee + app15Marker = 0xef +) + +// See https://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/JPEG.html#Adobe +const ( + adobeTransformUnknown = 0 + adobeTransformYCbCr = 1 + adobeTransformYCbCrK = 2 +) + +// unzig maps from the zig-zag ordering to the natural ordering. For example, +// unzig[3] is the column and row of the fourth element in zig-zag order. The +// value is 16, which means first column (16%8 == 0) and third row (16/8 == 2). +var unzig = [blockSize]int{ + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63, +} + +// Deprecated: Reader is not used by the image/jpeg package and should +// not be used by others. It is kept for compatibility. +type Reader interface { + io.ByteReader + io.Reader +} + +// bits holds the unprocessed bits that have been taken from the byte-stream. +// The n least significant bits of a form the unread bits, to be read in MSB to +// LSB order. +type bits struct { + a uint32 // accumulator. + m uint32 // mask. m==1<<(n-1) when n>0, with m==0 when n==0. + n int32 // the number of unread bits in a. +} + +type decoder struct { + r io.Reader + bits bits + // bytes is a byte buffer, similar to a bufio.Reader, except that it + // has to be able to unread more than 1 byte, due to byte stuffing. + // Byte stuffing is specified in section F.1.2.3. + bytes struct { + // buf[i:j] are the buffered bytes read from the underlying + // io.Reader that haven't yet been passed further on. + buf [4096]byte + i, j int + // nUnreadable is the number of bytes to back up i after + // overshooting. It can be 0, 1 or 2. + nUnreadable int + } + width, height int + + img1 *image.Gray + img3 *image.YCbCr + blackPix []byte + blackStride int + + ri int // Restart Interval. + nComp int + + // As per section 4.5, there are four modes of operation (selected by the + // SOF? markers): sequential DCT, progressive DCT, lossless and + // hierarchical, although this implementation does not support the latter + // two non-DCT modes. Sequential DCT is further split into baseline and + // extended, as per section 4.11. + baseline bool + progressive bool + + jfif bool + adobeTransformValid bool + adobeTransform uint8 + eobRun uint16 // End-of-Band run, specified in section G.1.2.2. + + comp [maxComponents]component + progCoeffs [maxComponents][]block // Saved state between progressive-mode scans. + huff [maxTc + 1][maxTh + 1]huffman + quant [maxTq + 1]block // Quantization tables, in zig-zag order. + tmp [2 * blockSize]byte +} + +// fill fills up the d.bytes.buf buffer from the underlying io.Reader. It +// should only be called when there are no unread bytes in d.bytes. +func (d *decoder) fill() error { + if d.bytes.i != d.bytes.j { + panic("jpeg: fill called when unread bytes exist") + } + // Move the last 2 bytes to the start of the buffer, in case we need + // to call unreadByteStuffedByte. + if d.bytes.j > 2 { + d.bytes.buf[0] = d.bytes.buf[d.bytes.j-2] + d.bytes.buf[1] = d.bytes.buf[d.bytes.j-1] + d.bytes.i, d.bytes.j = 2, 2 + } + // Fill in the rest of the buffer. + n, err := d.r.Read(d.bytes.buf[d.bytes.j:]) + d.bytes.j += n + if n > 0 { + err = nil + } + return err +} + +// unreadByteStuffedByte undoes the most recent readByteStuffedByte call, +// giving a byte of data back from d.bits to d.bytes. The Huffman look-up table +// requires at least 8 bits for look-up, which means that Huffman decoding can +// sometimes overshoot and read one or two too many bytes. Two-byte overshoot +// can happen when expecting to read a 0xff 0x00 byte-stuffed byte. +func (d *decoder) unreadByteStuffedByte() { + d.bytes.i -= d.bytes.nUnreadable + d.bytes.nUnreadable = 0 + if d.bits.n >= 8 { + d.bits.a >>= 8 + d.bits.n -= 8 + d.bits.m >>= 8 + } +} + +// readByte returns the next byte, whether buffered or not buffered. It does +// not care about byte stuffing. +func (d *decoder) readByte() (x byte, err error) { + for d.bytes.i == d.bytes.j { + if err = d.fill(); err != nil { + return 0, err + } + } + x = d.bytes.buf[d.bytes.i] + d.bytes.i++ + d.bytes.nUnreadable = 0 + return x, nil +} + +// errMissingFF00 means that readByteStuffedByte encountered an 0xff byte (a +// marker byte) that wasn't the expected byte-stuffed sequence 0xff, 0x00. +var errMissingFF00 = FormatError("missing 0xff00 sequence") + +// readByteStuffedByte is like readByte but is for byte-stuffed Huffman data. +func (d *decoder) readByteStuffedByte() (x byte, err error) { + // Take the fast path if d.bytes.buf contains at least two bytes. + if d.bytes.i+2 <= d.bytes.j { + x = d.bytes.buf[d.bytes.i] + d.bytes.i++ + d.bytes.nUnreadable = 1 + if x != 0xff { + return x, err + } + if d.bytes.buf[d.bytes.i] != 0x00 { + return 0, errMissingFF00 + } + d.bytes.i++ + d.bytes.nUnreadable = 2 + return 0xff, nil + } + + d.bytes.nUnreadable = 0 + + x, err = d.readByte() + if err != nil { + return 0, err + } + d.bytes.nUnreadable = 1 + if x != 0xff { + return x, nil + } + + x, err = d.readByte() + if err != nil { + return 0, err + } + d.bytes.nUnreadable = 2 + if x != 0x00 { + return 0, errMissingFF00 + } + return 0xff, nil +} + +// readFull reads exactly len(p) bytes into p. It does not care about byte +// stuffing. +func (d *decoder) readFull(p []byte) error { + // Unread the overshot bytes, if any. + if d.bytes.nUnreadable != 0 { + if d.bits.n >= 8 { + d.unreadByteStuffedByte() + } + d.bytes.nUnreadable = 0 + } + + for { + n := copy(p, d.bytes.buf[d.bytes.i:d.bytes.j]) + p = p[n:] + d.bytes.i += n + if len(p) == 0 { + break + } + if err := d.fill(); err != nil { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + return err + } + } + return nil +} + +// ignore ignores the next n bytes. +func (d *decoder) ignore(n int) error { + // Unread the overshot bytes, if any. + if d.bytes.nUnreadable != 0 { + if d.bits.n >= 8 { + d.unreadByteStuffedByte() + } + d.bytes.nUnreadable = 0 + } + + for { + m := d.bytes.j - d.bytes.i + if m > n { + m = n + } + d.bytes.i += m + n -= m + if n == 0 { + break + } + if err := d.fill(); err != nil { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + return err + } + } + return nil +} + +// Specified in section B.2.2. +func (d *decoder) processSOF(n int) error { + if d.nComp != 0 { + return FormatError("multiple SOF markers") + } + switch n { + case 6 + 3*1: // Grayscale image. + d.nComp = 1 + case 6 + 3*3: // YCbCr or RGB image. + d.nComp = 3 + case 6 + 3*4: // YCbCrK or CMYK image. + d.nComp = 4 + default: + return UnsupportedError("number of components") + } + if err := d.readFull(d.tmp[:n]); err != nil { + return err + } + // We only support 8-bit precision. + if d.tmp[0] != 8 { + return UnsupportedError("precision") + } + d.height = int(d.tmp[1])<<8 + int(d.tmp[2]) + d.width = int(d.tmp[3])<<8 + int(d.tmp[4]) + if int(d.tmp[5]) != d.nComp { + return FormatError("SOF has wrong length") + } + + for i := 0; i < d.nComp; i++ { + d.comp[i].c = d.tmp[6+3*i] + // Section B.2.2 states that "the value of C_i shall be different from + // the values of C_1 through C_(i-1)". + for j := 0; j < i; j++ { + if d.comp[i].c == d.comp[j].c { + return FormatError("repeated component identifier") + } + } + + d.comp[i].tq = d.tmp[8+3*i] + if d.comp[i].tq > maxTq { + return FormatError("bad Tq value") + } + + hv := d.tmp[7+3*i] + h, v := int(hv>>4), int(hv&0x0f) + if h < 1 || 4 < h || v < 1 || 4 < v { + return FormatError("luma/chroma subsampling ratio") + } + if h == 3 || v == 3 { + return errUnsupportedSubsamplingRatio + } + switch d.nComp { + case 1: + // If a JPEG image has only one component, section A.2 says "this data + // is non-interleaved by definition" and section A.2.2 says "[in this + // case...] the order of data units within a scan shall be left-to-right + // and top-to-bottom... regardless of the values of H_1 and V_1". Section + // 4.8.2 also says "[for non-interleaved data], the MCU is defined to be + // one data unit". Similarly, section A.1.1 explains that it is the ratio + // of H_i to max_j(H_j) that matters, and similarly for V. For grayscale + // images, H_1 is the maximum H_j for all components j, so that ratio is + // always 1. The component's (h, v) is effectively always (1, 1): even if + // the nominal (h, v) is (2, 1), a 20x5 image is encoded in three 8x8 + // MCUs, not two 16x8 MCUs. + h, v = 1, 1 + + case 3: + // For YCbCr images, we only support 4:4:4, 4:4:0, 4:2:2, 4:2:0, + // 4:1:1 or 4:1:0 chroma subsampling ratios. This implies that the + // (h, v) values for the Y component are either (1, 1), (1, 2), + // (2, 1), (2, 2), (4, 1) or (4, 2), and the Y component's values + // must be a multiple of the Cb and Cr component's values. We also + // assume that the two chroma components have the same subsampling + // ratio. + switch i { + case 0: // Y. + // We have already verified, above, that h and v are both + // either 1, 2 or 4, so invalid (h, v) combinations are those + // with v == 4. + if v == 4 { + return errUnsupportedSubsamplingRatio + } + case 1: // Cb. + if d.comp[0].h%h != 0 || d.comp[0].v%v != 0 { + return errUnsupportedSubsamplingRatio + } + case 2: // Cr. + if d.comp[1].h != h || d.comp[1].v != v { + return errUnsupportedSubsamplingRatio + } + } + + case 4: + // For 4-component images (either CMYK or YCbCrK), we only support two + // hv vectors: [0x11 0x11 0x11 0x11] and [0x22 0x11 0x11 0x22]. + // Theoretically, 4-component JPEG images could mix and match hv values + // but in practice, those two combinations are the only ones in use, + // and it simplifies the applyBlack code below if we can assume that: + // - for CMYK, the C and K channels have full samples, and if the M + // and Y channels subsample, they subsample both horizontally and + // vertically. + // - for YCbCrK, the Y and K channels have full samples. + switch i { + case 0: + if hv != 0x11 && hv != 0x22 { + return errUnsupportedSubsamplingRatio + } + case 1, 2: + if hv != 0x11 { + return errUnsupportedSubsamplingRatio + } + case 3: + if d.comp[0].h != h || d.comp[0].v != v { + return errUnsupportedSubsamplingRatio + } + } + } + + d.comp[i].h = h + d.comp[i].v = v + } + return nil +} + +// Specified in section B.2.4.1. +func (d *decoder) processDQT(n int) error { +loop: + for n > 0 { + n-- + x, err := d.readByte() + if err != nil { + return err + } + tq := x & 0x0f + if tq > maxTq { + return FormatError("bad Tq value") + } + switch x >> 4 { + default: + return FormatError("bad Pq value") + case 0: + if n < blockSize { + break loop + } + n -= blockSize + if err := d.readFull(d.tmp[:blockSize]); err != nil { + return err + } + for i := range d.quant[tq] { + d.quant[tq][i] = int32(d.tmp[i]) + } + case 1: + if n < 2*blockSize { + break loop + } + n -= 2 * blockSize + if err := d.readFull(d.tmp[:2*blockSize]); err != nil { + return err + } + for i := range d.quant[tq] { + d.quant[tq][i] = int32(d.tmp[2*i])<<8 | int32(d.tmp[2*i+1]) + } + } + } + if n != 0 { + return FormatError("DQT has wrong length") + } + return nil +} + +// Specified in section B.2.4.4. +func (d *decoder) processDRI(n int) error { + if n != 2 { + return FormatError("DRI has wrong length") + } + if err := d.readFull(d.tmp[:2]); err != nil { + return err + } + d.ri = int(d.tmp[0])<<8 + int(d.tmp[1]) + return nil +} + +func (d *decoder) processApp0Marker(n int) error { + if n < 5 { + return d.ignore(n) + } + if err := d.readFull(d.tmp[:5]); err != nil { + return err + } + n -= 5 + + d.jfif = d.tmp[0] == 'J' && d.tmp[1] == 'F' && d.tmp[2] == 'I' && d.tmp[3] == 'F' && d.tmp[4] == '\x00' + + if n > 0 { + return d.ignore(n) + } + return nil +} + +func (d *decoder) processApp14Marker(n int) error { + if n < 12 { + return d.ignore(n) + } + if err := d.readFull(d.tmp[:12]); err != nil { + return err + } + n -= 12 + + if d.tmp[0] == 'A' && d.tmp[1] == 'd' && d.tmp[2] == 'o' && d.tmp[3] == 'b' && d.tmp[4] == 'e' { + d.adobeTransformValid = true + d.adobeTransform = d.tmp[11] + } + + if n > 0 { + return d.ignore(n) + } + return nil +} + +// decode reads a JPEG image from r and returns it as an image.Image. +func (d *decoder) decode(r io.Reader, configOnly bool) (image.Image, error) { + d.r = r + + // Check for the Start Of Image marker. + if err := d.readFull(d.tmp[:2]); err != nil { + return nil, err + } + if d.tmp[0] != 0xff || d.tmp[1] != soiMarker { + return nil, FormatError("missing SOI marker") + } + + // Process the remaining segments until the End Of Image marker. + for { + err := d.readFull(d.tmp[:2]) + if err != nil { + return nil, err + } + for d.tmp[0] != 0xff { + // Strictly speaking, this is a format error. However, libjpeg is + // liberal in what it accepts. As of version 9, next_marker in + // jdmarker.c treats this as a warning (JWRN_EXTRANEOUS_DATA) and + // continues to decode the stream. Even before next_marker sees + // extraneous data, jpeg_fill_bit_buffer in jdhuff.c reads as many + // bytes as it can, possibly past the end of a scan's data. It + // effectively puts back any markers that it overscanned (e.g. an + // "\xff\xd9" EOI marker), but it does not put back non-marker data, + // and thus it can silently ignore a small number of extraneous + // non-marker bytes before next_marker has a chance to see them (and + // print a warning). + // + // We are therefore also liberal in what we accept. Extraneous data + // is silently ignored. + // + // This is similar to, but not exactly the same as, the restart + // mechanism within a scan (the RST[0-7] markers). + // + // Note that extraneous 0xff bytes in e.g. SOS data are escaped as + // "\xff\x00", and so are detected a little further down below. + d.tmp[0] = d.tmp[1] + d.tmp[1], err = d.readByte() + if err != nil { + return nil, err + } + } + marker := d.tmp[1] + if marker == 0 { + // Treat "\xff\x00" as extraneous data. + continue + } + for marker == 0xff { + // Section B.1.1.2 says, "Any marker may optionally be preceded by any + // number of fill bytes, which are bytes assigned code X'FF'". + marker, err = d.readByte() + if err != nil { + return nil, err + } + } + if marker == eoiMarker { // End Of Image. + break + } + if rst0Marker <= marker && marker <= rst7Marker { + // Figures B.2 and B.16 of the specification suggest that restart markers should + // only occur between Entropy Coded Segments and not after the final ECS. + // However, some encoders may generate incorrect JPEGs with a final restart + // marker. That restart marker will be seen here instead of inside the processSOS + // method, and is ignored as a harmless error. Restart markers have no extra data, + // so we check for this before we read the 16-bit length of the segment. + continue + } + + // Read the 16-bit length of the segment. The value includes the 2 bytes for the + // length itself, so we subtract 2 to get the number of remaining bytes. + if err = d.readFull(d.tmp[:2]); err != nil { + return nil, err + } + n := int(d.tmp[0])<<8 + int(d.tmp[1]) - 2 + if n < 0 { + return nil, FormatError("short segment length") + } + + switch marker { + case sof0Marker, sof1Marker, sof2Marker: + d.baseline = marker == sof0Marker + d.progressive = marker == sof2Marker + err = d.processSOF(n) + if configOnly && d.jfif { + return nil, err + } + case dhtMarker: + if configOnly { + err = d.ignore(n) + } else { + err = d.processDHT(n) + } + case dqtMarker: + if configOnly { + err = d.ignore(n) + } else { + err = d.processDQT(n) + } + case sosMarker: + if configOnly { + return nil, nil + } + err = d.processSOS(n) + case driMarker: + if configOnly { + err = d.ignore(n) + } else { + err = d.processDRI(n) + } + case app0Marker: + err = d.processApp0Marker(n) + case app14Marker: + err = d.processApp14Marker(n) + default: + if app0Marker <= marker && marker <= app15Marker || marker == comMarker { + err = d.ignore(n) + } else if marker < 0xc0 { // See Table B.1 "Marker code assignments". + err = FormatError("unknown marker") + } else { + err = UnsupportedError("unknown marker") + } + } + if err != nil { + return nil, err + } + } + + if d.progressive { + if err := d.reconstructProgressiveImage(); err != nil { + return nil, err + } + } + if d.img1 != nil { + return d.img1, nil + } + if d.img3 != nil { + if d.blackPix != nil { + return d.applyBlack() + } else if d.isRGB() { + return d.convertToRGB() + } + return d.img3, nil + } + return nil, FormatError("missing SOS marker") +} + +// applyBlack combines d.img3 and d.blackPix into a CMYK image. The formula +// used depends on whether the JPEG image is stored as CMYK or YCbCrK, +// indicated by the APP14 (Adobe) metadata. +// +// Adobe CMYK JPEG images are inverted, where 255 means no ink instead of full +// ink, so we apply "v = 255 - v" at various points. Note that a double +// inversion is a no-op, so inversions might be implicit in the code below. +func (d *decoder) applyBlack() (image.Image, error) { + if !d.adobeTransformValid { + return nil, UnsupportedError("unknown color model: 4-component JPEG doesn't have Adobe APP14 metadata") + } + + // If the 4-component JPEG image isn't explicitly marked as "Unknown (RGB + // or CMYK)" as per + // https://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/JPEG.html#Adobe + // we assume that it is YCbCrK. This matches libjpeg's jdapimin.c. + if d.adobeTransform != adobeTransformUnknown { + // Convert the YCbCr part of the YCbCrK to RGB, invert the RGB to get + // CMY, and patch in the original K. The RGB to CMY inversion cancels + // out the 'Adobe inversion' described in the applyBlack doc comment + // above, so in practice, only the fourth channel (black) is inverted. + bounds := d.img3.Bounds() + img := image.NewRGBA(bounds) + imageutil.DrawYCbCr(img, bounds, d.img3, bounds.Min) + for iBase, y := 0, bounds.Min.Y; y < bounds.Max.Y; iBase, y = iBase+img.Stride, y+1 { + for i, x := iBase+3, bounds.Min.X; x < bounds.Max.X; i, x = i+4, x+1 { + img.Pix[i] = 255 - d.blackPix[(y-bounds.Min.Y)*d.blackStride+(x-bounds.Min.X)] + } + } + return &image.CMYK{ + Pix: img.Pix, + Stride: img.Stride, + Rect: img.Rect, + }, nil + } + + // The first three channels (cyan, magenta, yellow) of the CMYK + // were decoded into d.img3, but each channel was decoded into a separate + // []byte slice, and some channels may be subsampled. We interleave the + // separate channels into an image.CMYK's single []byte slice containing 4 + // contiguous bytes per pixel. + bounds := d.img3.Bounds() + img := image.NewCMYK(bounds) + + translations := [4]struct { + src []byte + stride int + }{ + {d.img3.Y, d.img3.YStride}, + {d.img3.Cb, d.img3.CStride}, + {d.img3.Cr, d.img3.CStride}, + {d.blackPix, d.blackStride}, + } + for t, translation := range translations { + subsample := d.comp[t].h != d.comp[0].h || d.comp[t].v != d.comp[0].v + for iBase, y := 0, bounds.Min.Y; y < bounds.Max.Y; iBase, y = iBase+img.Stride, y+1 { + sy := y - bounds.Min.Y + if subsample { + sy /= 2 + } + for i, x := iBase+t, bounds.Min.X; x < bounds.Max.X; i, x = i+4, x+1 { + sx := x - bounds.Min.X + if subsample { + sx /= 2 + } + img.Pix[i] = 255 - translation.src[sy*translation.stride+sx] + } + } + } + return img, nil +} + +func (d *decoder) isRGB() bool { + if d.jfif { + return false + } + if d.adobeTransformValid && d.adobeTransform == adobeTransformUnknown { + // https://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/JPEG.html#Adobe + // says that 0 means Unknown (and in practice RGB) and 1 means YCbCr. + return true + } + return d.comp[0].c == 'R' && d.comp[1].c == 'G' && d.comp[2].c == 'B' +} + +func (d *decoder) convertToRGB() (image.Image, error) { + cScale := d.comp[0].h / d.comp[1].h + bounds := d.img3.Bounds() + img := image.NewRGBA(bounds) + for y := bounds.Min.Y; y < bounds.Max.Y; y++ { + po := img.PixOffset(bounds.Min.X, y) + yo := d.img3.YOffset(bounds.Min.X, y) + co := d.img3.COffset(bounds.Min.X, y) + for i, iMax := 0, bounds.Max.X-bounds.Min.X; i < iMax; i++ { + img.Pix[po+4*i+0] = d.img3.Y[yo+i] + img.Pix[po+4*i+1] = d.img3.Cb[co+i/cScale] + img.Pix[po+4*i+2] = d.img3.Cr[co+i/cScale] + img.Pix[po+4*i+3] = 255 + } + } + return img, nil +} + +// Decode reads a JPEG image from r. Different from the standard package, the +// decoded result will be received by the callback set by SetCallback(). +func Decode(r io.Reader) error { + var d decoder + _, err := d.decode(r, false) + return err +} + +// DecodeConfig returns the color model and dimensions of a JPEG image without +// decoding the entire image. +func DecodeConfig(r io.Reader) (image.Config, error) { + var d decoder + if _, err := d.decode(r, true); err != nil { + return image.Config{}, err + } + switch d.nComp { + case 1: + return image.Config{ + ColorModel: color.GrayModel, + Width: d.width, + Height: d.height, + }, nil + case 3: + cm := color.YCbCrModel + if d.isRGB() { + cm = color.RGBAModel + } + return image.Config{ + ColorModel: cm, + Width: d.width, + Height: d.height, + }, nil + case 4: + return image.Config{ + ColorModel: color.CMYKModel, + Width: d.width, + Height: d.height, + }, nil + } + return image.Config{}, FormatError("missing SOF marker") +} diff --git a/image/jpeg/reader_test.go b/image/jpeg/reader_test.go new file mode 100644 index 0000000..bf07fad --- /dev/null +++ b/image/jpeg/reader_test.go @@ -0,0 +1,517 @@ +// Copyright 2012 The Go 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 jpeg + +import ( + "bytes" + "encoding/base64" + "fmt" + "image" + "image/color" + "io" + "math/rand" + "os" + "strings" + "testing" + "time" +) + +// TestDecodeProgressive tests that decoding the baseline and progressive +// versions of the same image result in exactly the same pixel data, in YCbCr +// space for color images, and Y space for grayscale images. +func TestDecodeProgressive(t *testing.T) { + testCases := []string{ + "../testdata/video-001", + "../testdata/video-001.q50.410", + "../testdata/video-001.q50.411", + "../testdata/video-001.q50.420", + "../testdata/video-001.q50.422", + "../testdata/video-001.q50.440", + "../testdata/video-001.q50.444", + "../testdata/video-005.gray.q50", + "../testdata/video-005.gray.q50.2x2", + "../testdata/video-001.separate.dc.progression", + } + for _, tc := range testCases { + m0, err := decodeFile(tc + ".jpeg") + if err != nil { + t.Errorf("%s: %v", tc+".jpeg", err) + continue + } + m1, err := decodeFile(tc + ".progressive.jpeg") + if err != nil { + t.Errorf("%s: %v", tc+".progressive.jpeg", err) + continue + } + if m0.Bounds() != m1.Bounds() { + t.Errorf("%s: bounds differ: %v and %v", tc, m0.Bounds(), m1.Bounds()) + continue + } + // All of the video-*.jpeg files are 150x103. + if m0.Bounds() != image.Rect(0, 0, 150, 103) { + t.Errorf("%s: bad bounds: %v", tc, m0.Bounds()) + continue + } + + switch m0 := m0.(type) { + case *image.YCbCr: + m1 := m1.(*image.YCbCr) + if err := check(m0.Bounds(), m0.Y, m1.Y, m0.YStride, m1.YStride); err != nil { + t.Errorf("%s (Y): %v", tc, err) + continue + } + if err := check(m0.Bounds(), m0.Cb, m1.Cb, m0.CStride, m1.CStride); err != nil { + t.Errorf("%s (Cb): %v", tc, err) + continue + } + if err := check(m0.Bounds(), m0.Cr, m1.Cr, m0.CStride, m1.CStride); err != nil { + t.Errorf("%s (Cr): %v", tc, err) + continue + } + case *image.Gray: + m1 := m1.(*image.Gray) + if err := check(m0.Bounds(), m0.Pix, m1.Pix, m0.Stride, m1.Stride); err != nil { + t.Errorf("%s: %v", tc, err) + continue + } + default: + t.Errorf("%s: unexpected image type %T", tc, m0) + continue + } + } +} + +func decodeFile(filename string) (image.Image, error) { + f, err := os.Open(filename) + if err != nil { + return nil, err + } + defer f.Close() + return Decode(f) +} + +type eofReader struct { + data []byte // deliver from Read without EOF + dataEOF []byte // then deliver from Read with EOF on last chunk + lenAtEOF int +} + +func (r *eofReader) Read(b []byte) (n int, err error) { + if len(r.data) > 0 { + n = copy(b, r.data) + r.data = r.data[n:] + } else { + n = copy(b, r.dataEOF) + r.dataEOF = r.dataEOF[n:] + if len(r.dataEOF) == 0 { + err = io.EOF + if r.lenAtEOF == -1 { + r.lenAtEOF = n + } + } + } + return +} + +func TestDecodeEOF(t *testing.T) { + // Check that if reader returns final data and EOF at same time, jpeg handles it. + data, err := os.ReadFile("../testdata/video-001.jpeg") + if err != nil { + t.Fatal(err) + } + + n := len(data) + for i := 0; i < n; { + r := &eofReader{data[:n-i], data[n-i:], -1} + _, err := Decode(r) + if err != nil { + t.Errorf("Decode with Read() = %d, EOF: %v", r.lenAtEOF, err) + } + if i == 0 { + i = 1 + } else { + i *= 2 + } + } +} + +// check checks that the two pix data are equal, within the given bounds. +func check(bounds image.Rectangle, pix0, pix1 []byte, stride0, stride1 int) error { + if stride0 <= 0 || stride0%8 != 0 { + return fmt.Errorf("bad stride %d", stride0) + } + if stride1 <= 0 || stride1%8 != 0 { + return fmt.Errorf("bad stride %d", stride1) + } + // Compare the two pix data, one 8x8 block at a time. + for y := 0; y < len(pix0)/stride0 && y < len(pix1)/stride1; y += 8 { + for x := 0; x < stride0 && x < stride1; x += 8 { + if x >= bounds.Max.X || y >= bounds.Max.Y { + // We don't care if the two pix data differ if the 8x8 block is + // entirely outside of the image's bounds. For example, this can + // occur with a 4:2:0 chroma subsampling and a 1x1 image. Baseline + // decoding works on the one 16x16 MCU as a whole; progressive + // decoding's first pass works on that 16x16 MCU as a whole but + // refinement passes only process one 8x8 block within the MCU. + continue + } + + for j := 0; j < 8; j++ { + for i := 0; i < 8; i++ { + index0 := (y+j)*stride0 + (x + i) + index1 := (y+j)*stride1 + (x + i) + if pix0[index0] != pix1[index1] { + return fmt.Errorf("blocks at (%d, %d) differ:\n%sand\n%s", x, y, + pixString(pix0, stride0, x, y), + pixString(pix1, stride1, x, y), + ) + } + } + } + } + } + return nil +} + +func pixString(pix []byte, stride, x, y int) string { + s := bytes.NewBuffer(nil) + for j := 0; j < 8; j++ { + fmt.Fprintf(s, "\t") + for i := 0; i < 8; i++ { + fmt.Fprintf(s, "%02x ", pix[(y+j)*stride+(x+i)]) + } + fmt.Fprintf(s, "\n") + } + return s.String() +} + +func TestTruncatedSOSDataDoesntPanic(t *testing.T) { + b, err := os.ReadFile("../testdata/video-005.gray.q50.jpeg") + if err != nil { + t.Fatal(err) + } + sosMarker := []byte{0xff, 0xda} + i := bytes.Index(b, sosMarker) + if i < 0 { + t.Fatal("SOS marker not found") + } + i += len(sosMarker) + j := i + 10 + if j > len(b) { + j = len(b) + } + for ; i < j; i++ { + Decode(bytes.NewReader(b[:i])) + } +} + +func TestLargeImageWithShortData(t *testing.T) { + // This input is an invalid JPEG image, based on the fuzzer-generated image + // in issue 10413. It is only 504 bytes, and shouldn't take long for Decode + // to return an error. The Start Of Frame marker gives the image dimensions + // as 8192 wide and 8192 high, so even if an unreadByteStuffedByte bug + // doesn't technically lead to an infinite loop, such a bug can still cause + // an unreasonably long loop for such a short input. + const input = "" + + "\xff\xd8\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x01\x00\x00\x01" + + "\x00\x01\x00\x00\xff\xdb\x00\x43\x00\x10\x0b\x0c\x0e\x0c\x0a\x10" + + "\x0e\x89\x0e\x12\x11\x10\x13\x18\xff\xd8\xff\xe0\x00\x10\x4a\x46" + + "\x49\x46\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00\x43" + + "\x00\x10\x0b\x0c\x0e\x0c\x0a\x10\x0e\x0d\x0e\x12\x11\x10\x13\x18" + + "\x28\x1a\x18\x16\x16\x18\x31\x23\x25\x1d\x28\x3a\x33\x3d\x3c\x39" + + "\x33\x38\x37\x40\x48\x5c\x4e\x40\x44\x57\x45\x37\x38\x50\x6d\x51" + + "\x57\x5f\x62\x67\x68\x67\x3e\x4d\x71\x79\x70\x64\x78\x5c\x65\x67" + + "\x63\xff\xc0\x00\x0b\x08\x20\x00\x20\x00\x01\x01\x11\x00\xff\xc4" + + "\x00\x1f\x00\x00\x01\x05\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00" + + "\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\xff" + + "\xc4\x00\xb5\x10\x00\x02\x01\x03\x03\x02\x04\x03\x05\x05\x04\x04" + + "\x00\x00\x01\x7d\x01\x02\x03\x00\x04\x11\x05\x12\x21\x31\x01\x06" + + "\x13\x51\x61\x07\x22\x71\x14\x32\x81\x91\xa1\x08\x23\xd8\xff\xdd" + + "\x42\xb1\xc1\x15\x52\xd1\xf0\x24\x33\x62\x72\x82\x09\x0a\x16\x17" + + "\x18\x19\x1a\x25\x26\x27\x28\x29\x2a\x34\x35\x36\x37\x38\x39\x3a" + + "\x43\x44\x45\x46\x47\x48\x49\x4a\x53\x54\x55\x56\x57\x58\x59\x5a" + + "\x00\x63\x64\x65\x66\x67\x68\x69\x6a\x73\x74\x75\x76\x77\x78\x79" + + "\x7a\x83\x84\x85\x86\x87\x88\x89\x8a\x92\x93\x94\x95\x96\x97\x98" + + "\x99\x9a\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xb2\xb3\xb4\xb5\xb6" + + "\xb7\xb8\xb9\xba\xc2\xc3\xc4\xc5\xc6\xc7\xff\xd8\xff\xe0\x00\x10" + + "\x4a\x46\x49\x46\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb" + + "\x00\x43\x00\x10\x0b\x0c\x0e\x0c\x0a\x10\x0e\x0d\x0e\x12\x11\x10" + + "\x13\x18\x28\x1a\x18\x16\x16\x18\x31\x23\x25\x1d\xc8\xc9\xca\xd2" + + "\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8" + + "\xe9\xea\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xff\xda\x00\x08" + + "\x01\x01\x00\x00\x3f\x00\xb9\xeb\x50\xb0\xdb\xc8\xa8\xe4\x63\x80" + + "\xdd\x31\xd6\x9d\xbb\xf2\xc5\x42\x1f\x6c\x6f\xf4\x34\xdd\x3c\xfc" + + "\xac\xe7\x3d\x80\xa9\xcc\x87\x34\xb3\x37\xfa\x2b\x9f\x6a\xad\x63" + + "\x20\x36\x9f\x78\x64\x75\xe6\xab\x7d\xb2\xde\x29\x70\xd3\x20\x27" + + "\xde\xaf\xa4\xf0\xca\x9f\x24\xa8\xdf\x46\xa8\x24\x84\x96\xe3\x77" + + "\xf9\x2e\xe0\x0a\x62\x7f\xdf\xd9" + c := make(chan error, 1) + go func() { + _, err := Decode(strings.NewReader(input)) + c <- err + }() + select { + case err := <-c: + if err == nil { + t.Fatalf("got nil error, want non-nil") + } + case <-time.After(3 * time.Second): + t.Fatalf("timed out") + } +} + +func TestPaddedRSTMarker(t *testing.T) { + // This test image comes from golang.org/issue/28717 + const base64EncodedImage = ` +/9j/4AAhQVZJMQABAQEAeAB4AAAAAAAAAAAAAAAAAAAAAAAAAP/bAEMABAIDAwMCBAMDAwQEBAQGCgYG +BQUGDAgJBwoODA8PDgwODxASFxMQERURDQ4UGhQVFxgZGhkPExweHBkeFxkZGP/bAEMBBAQEBgUGCwYG +CxgQDhAYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGP/EAaIA +AAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKCxAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1Fh +ByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNk +ZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT +1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6AQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgsRAAIB +AgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBka +JicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZ +mqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/dAAQA +Cv/gAAQAAP/AABEIALABQAMBIQACEQEDEQH/2gAMAwEAAhEDEQA/APnCFTk5BPPGKliAB718W7H2j3Ip +VUuwJxzTfKXacde9VBhYRUBAyO3pTmUAbSMU5WGmybywzHGAMdelPVFC+n1qXZCuyaJADxjj2qzbBMAP +xz1rKaVib6ltLcFvlIx2pLy0dwuAMMBnH1rFON9RNsszAZPFEYHldPzrOy3KewmBk9qUABugxjtTVmiW +xWRcjp+VJtHXgVL3K6AgBDdM9eRTNzAZViOe1VyxaJavuf/Q8aW4mUcSGpo764AyHz+FfnnJBvVH1UsN +CS1Q/wDte4Trip49ecA7g3FSqMW9zlqZandxJ4/EKADcSPqKni8QQMT865qOSUNjiqZdNbFiHWYXz84N +WE1KNsfMKj2zirHHPDSj0JFvo2H36d9pUjg1sqykYOm0KbgY60omXPXmr9pFkco3zBnrQzjGcnrRzp9S +bEbuOvao3fisZSXUpIYWGKGcbetTCSswsxnmACkYrtNSpJ2YNM//0fnK1BD7sDg9KmUHeOe/Svid3qfb +SdmQ3AHmnr1pGBC5z19a0hohNiJkensM1J0yCKmY0yZR82e+BT1BxnpmpepN9SRCR0NSpweOoPWs6isr +ijuWIZGBA/lVwzMVFY8ibuhXEfr+tOz8hIqUymhRnJGTSc5wBVRRDFPXBHJpB3qdmV0EX7vXmoyfl685 +p2dxWR//0vFsHZ9TQv3T618Bqz7PSwwn1phPXpSWrQEUhIx0NVXc7j0rSNwViCS4dWYpJj3BpBqVzGy7 +ZmHSq9kpblSpxkveQ+PX7uMf6wEDtU0fi24TAkX8jTeCjJaaHDUwFN7aFq28aL/GCMGrtr4xtHGGkA+t +YTy+a+E82eAa2LsXiWzI5mXPHercOsW8hwJB+dcUqVSCOKVFxdmiwl7E2MOPzp4nQ9GH51jzNbmUoOIC +TI4okOaUXoybDCevNBPHX8qIO4mf/9P52i4dix5zjp/n1qZFBCmviL6an2kt9CGcYnJznJpOBwegq4vQ +L9xIUytSkfu/bv70p7j6EnQgjHSpFGVqXclkkaHb1+makUHgdazm7IFuSKOasrnjis2+oDm9qnIHlgd/ +es7gxqjkt1NLwH4xTTEhjkhutM3D15oGhkcnBGRTDKu3A7H1rS3cLn//1PEhJ8uM557UvmDaa/P7a3Ps +xpZcZ6mo5WG45pdUC2K8ko5JIzWfcTqu7HPHrW9OLbKWhSluVLNz3wKrS3I3KfcV1Rg9CrpXK8l0F7io +pLnLnJHGOldMYJGMpu5XNwuxjyRTBcAAjd1HWtfZmPORy3WAWWQDOM4PWtHRru6DFlmY88ZqKsVyXaKp +QjOoa7axe28G/cWqhoHjO/n1WeJwSkS9c981wUcFCopPayFj8JC8VFbs6e38VldvmHHFaMHimAoCzDB6 +V5U8FKz5TlrZU4/CXYtdtnXIarEepW7jAcfnXGqEoKx5tfBzh0P/1fnqEAsc/wB6pI9owAD1618Qn3Ps +35EE4UzHrx79aXaMcdaqAMWIADvj271IMeXg59KUmNLQkUDfjb1FSLxzg0pWJRLGAQAeMVIoA+uaxlaw +0SoF/u1KowwwDUcwuo9wMjrUrY2ZPOKy0KY1T1NMdwG/CtBEFzMqnIPNUZ75FBJP5mtIQvYfoU21JFVs +N271AurRE/e611xw73Yj/9b50GsQhOXHWnpq8JX7w4PWvjPq76H2fzHjVYCud9Q3GrRAZDUvq75kNbMz +7vV0zjdjNZ82pqzMcj7tdlPDtIiVWKKct+AxwRxUbXi7VPJAIrZUdEZOsrsga8DFgelQtd98g5P6V0Qp +GE6qIUut2cZ470kd2FjYc4Oce1bSpJ3Rzxq21GNcDZhSeg710ujKRbKzAg5rkxceWnqd+XtOo7bD9cl8 +qxLDPHasXwUvmyXU7Lgl8cegrnw2lGbZ14l3rU0bl3gMQCRgVU1y7WytUZQzMRwBXPRhzWRvVny3ZW8N +6xPdXBikiZc5IOa6GG6nDsd5xnAyfaliqEacrGOHarx5pI//1/nuL754HWngEkYx1r4VWsfaMjk4mP8A +OgnjPH1rRMLKwR4A2jH1FPA+TNRIa0ROvQcY4p4GF/pUskmi6+gqRACvPrWMnpca3JABjFSKCQOnFS2u +o7E3XBOKcR8ucdKzUkDGSHGemKpXchVuP0rSmDMfUrl1J5rn9TvnVCc9OtelhoJtDekW0Yb6pId3zdRw +RVT+0pAPvc57CvbhQVrHlTxD3P8A/9D4tbUpTH1I7cU/7ZdMnyqcdsV5vsErXPbWJbHLdXzYQDBY8c02 +6udQjyGVuD1FHsqfMridepZ6ED3s4IDqeD0I68VEt7J5hy3GO9aKkuhPt2BumeRjnv3pJLlgwBYE8ZqH +T2GqujYLcuWYbhj0zTHm5B/vcGtVBLYzdRtEcUueoGB3FOjmBjcBhx2NNx1IhO+uwtqd93EgA5YcV32n +IqwrnAz2rzMx+FI9nKldy+RmeMpfLs8DGTxTvBUKw6Csjry2WPbrXHB2wzfdnbUu8SvJF4xh1LDAJNU9 +UtVmDs3IiGB6CuenNx1R0yjfRGd4aRTqJdFG1ARXRgANg4/yK0xbvJehnhlaL9T/AP/R+e4x8xx609F+ +YZ718L6n2ju2RzqTKcYpQMjsc1pHTQWlgjUjGVH0qbkr0BqJSKRMi+uBx3p8a5HYVD8yb32JY15FSKpx +nisp6RuNbj1BzUyrnkmo6FEqrz7U/advHOazvcRHIuSazNXDpbSSJjeqErnpmrp6CueeXusahO5zKi8c +7VrPuGklUiSQtkd6+po0YQs0edVrTd1cqeSoJOB0xUCxpnouAecV33e558rbH//S+KdmFHTk1btywUqc +YNcEnfc9SGl7DyAJ1AHIParx+YZ4/Guea2OmC1dhGjQn5kXNQtbQFiWiTlfSoTa2G0nuU5bG2aQ7V2jP +JU+1RSaXC2GjuApyOorX2slYz9lF3sV/7MmViFljaoJLG6SQbkyDXQqiZzyg1Yg8i4jBJjIBpsaPyXXB +Psea1TTMJJqysaeh2u/UUfP3QCBXdQJtTpivFzKV3FH0WURtCT8zmPHcrhkRSOWro7O28rRYIgOwGB3r +mnph4+bOxNvEy8kWFi+ULxwKzNRkMemSPj/WMT+FckNWdLv0KPhCMmGSZl6k1ulC3zY5x2+la4r+IyKH +wH//0/nuIHB9c9KevUAHk18La60PtHuRy/64+lOGBniqXcOlhUIxwB+NSrynSpndFImQc4A7d6lQccdR +WcyUyWMccDnPSpVAwM1nLYaeo5BjrUyjFTugJIwd2Kfgkc59qyTs7Axkigqao3qBkYdiMVpTeugHmF7b +hbhl2/dJB/OofJBTHfp9K+ppTbimeZOK5issYG5W7VWdBnHXB65rrjJs5JLof//U+LYtu7leM+lSpxIR +7VwO90eskrNkqZLo3PXHoausxI4wa557o2p6JitnOCoqvI3zEkdF5qIrUuW2ogO1iWHeibazIQncHA+l +DT0aCyaaZGNm8kA9PSl2qy9SB78Veq1ZCs9BkOGUrj86zdQGbllVMAe1bQdpGE1eBo+FoCbgtxkY966+ +E4hOeo5rycxleR72VwcaRx+t/wCmeJ7WAdDIOPpzXbSpt/dkcRr+tZ4j3aVNLzNKOteo/QjuiY7Jm6Ej +ANYnitvL05YRxwOf8/WuXDK8l6nVUlaLZb8NQeXpijgZB/M1oIpyPzx74pV2nUbHTVoJH//V+fYhgnnv +Txy4GBXwse59m7kMyEzkj8qkQfKatdgewIo7nIqdQAnXms52RSehMoHHPapY1wMAgVnKzFtqSwjjg4qR +VJHXIzWc2rDiPVeeD+FSDqKh2sBKo54p+Pl61jbQG9RrDIPNU7teT6VpCztYDzfxGskWtXESdN5Pp15q +gN2GZpB0r6ig17OL8jz535miCSPdnaxHHpVV48D7xIB7iu2LOOS7H//W+MCoeIDcc5p4VhIMDkDvXnpq ++p6zu0SwZZlVm6HJFWyRg89MdawmkmrG1NtpiMcY5OevFQ7AWOT0FSkkU9UKUPmEh8jt+VMdGLDLYAIz +xUtrQfLo7Mj2SHjePrSspxgEk1rdGSTGJjymLEZArOjAd5GLHk9DW0NGznqa8qOj8IRHBbrnnmugu08u +1ZiSMn868LGz/eH1GAVqKOW8LR/bfG4c8rCCx46HpXZspk88jHzMf04pY7eEfIjDO7nLz/yKmqh/sjwR +EFwAemcVhamkmpTRxKpyCN2RWeFsveZ01FpbubsEaRWyqhAxnH5YpxIx8rf/AFuK5W3Jts2Wisf/1/n5 +SSxHOM+lP7jGa+EVz7R2IpATN1IIpwB55NaJ2FuhYzx3PvU69OQaio7sEiZOvfpU0YwmMVnJ26DRJH2G +DipUyR361jN6FIeq8/0qUdBxWbkCRIg/D6U8j5e9Rza3ExrA8nmqt0Dkmri9BnnfjlSmvuwGQyhulYkr +yL86DANfTYRp0o3PPr3UnYbBOWU4zz7VHIGIJVjkGu1x5Tl5ro//0Pi3fhgMHJPXFWCeQwLe9ec+jPXj +1JIM7gw44qy+WPUjkcVjPdGsNmgdsNkjJFQ7mMhAB5FRHuXJ6WRIw+VwCc9KbtPy5JyCKgdmxhBDNj8s +U1Cyr0J/rWultDOzTuMuSiWjlT97r7HFZ1nkk4bIPXiuiD3uc00rqzOy8Lw+XBuJPQcGrXiGYJYMwJHB +xXz1d89U+sw8eWmkuxi/DGP/AEm+vHycYUE/jXXu6w2vzdcfiaMw1qpLsjnwi/dt+bKCn5nlw2W5Gacw +GD2wB+dcq2O4AnyADoM80QLukUsp9f0qb6XHuf/R+fkOWNSfwjnivhUz7Nq2hFJ/retPA4PWrWuwul2L +FjAA6VMMFeTms5PUpbEw6/hxUyfd4as5PUETRds9KlA+Xk96ym9FcaHJgGpOv1rPUpIkXg8mnNnGaz5r +aCaEPeqtx1OT0rSL2sC1OG+ISquoQuT1UjP4/wD16wGEZUYGPevo8E26UThrpc7G7ICDzg+1ROmF+91O +K7VKVrHNyxWx/9L4uuVAcH371JvKqScFPU1597pHqtWbZNZnc+QxI9atv8p4z9ayqPVI1pr3WyPBLDGf +qKYnExyeQKlFPQXH7zgdetSk8rgEnis29i0lqxijLEjjt1poU7iVHHpVX3uRbsZl+2IvLX+I56U/TUUA +KxGSfSulu0XY5oq80drpcZSzHvjpWd47fy9O2g8kjpXz0ZJ1kvM+skrUnbsSfDm1C+HlfJ/euXIPRq3b +lleQRYBCg5HrSxk+au/IxwkbUokRw0u0cBFyR70wEEbm6sc/gK5YuyZ1PzFVgVG4ZIzmpbTaJMt07+3F +Q9i7n//T+foic55yTipRkYBBxXwaPtXuRyZEg4pWII4qk7C6BFwAf51MhG31+lZ1Frca2LKHn8qlDY6L +UNgl1Jo+2akQ9BWVR9xpDgffrUq+wrO7tdDsSIPUUpPHvUK1xMM8HA61WmwWOB+NXENjiPiMhE1sw9WH +8q5vqRnjivosD/BXzOKv8QkKgZBA6ZpV27MkDOa7ObsYI//U+MdVGxlK9zninqd1sCQM45rzYaxR68vj +YtgT5h6jvV6Q5X0+lZ1n7yLofCxhOenfFMTI3cdRzWV9DWw5ARI3qPSnMSqKCOSRUy6FRurjFLjPp9KA +xx06n1q1qjO70Me6YtcOOcKcH1q9oqF5l75Oea6KtowOagnKol5neWcSJaocdgRzXGfEm53ERKfvEV89 +gvfxCPqcXLlw8/Q6fwkph0aCEg4VB/KrsDbmcnA4PWoxFnVkxUVaml5IgR9sMj4+ZzSTuTjcOB0/CsUt +zo0VrhCQiF2GcAn/AD+dWLRlYZPQ8cVEk7aF+p//1fAIuvfOakxnr+NfBJ2SsfaN6jJRiUA9RSheCMfn +VXEtgjUk/wBTVgfdBwOfSs5stbE6g7unYVLGpwAazYvUmjHHanqDx061lLazKuh6DHBFSID27VEthkin +5cUHOPxqLvqJiEYziq8/FaQ8hHH/ABEVvIhYYyHNcsrSZG5RyOtfQYC3slfzOPEX5tAA+amHIjO31ruu +rHNa7P8A/9b411QMIwSDnNR2xYQNkjnnkV5sLctj15JqRLZjBzweeSKuycHkD8qyq6tF0rqLI2OTnK5p +sGWbBHQd6zWxo3qSdXLYxTpPvLnvjrWdr2LvuNYYUnj6Uxyu4/KMrVx6ky6GOGLSOwXIYmr9n58UQeFg +svbcCRXTVty2ZzYZOVRcpvDW721tv9LsBIpAHmQNn9K4zxPqSX2sK6hljDDO6uHBYWKre0i9PxPTzDFS +VDkmtX9x2mm65YG0REnTccAc1rx3EJgbbIpyvUGuDE0JxleSO+hXhUj7rGK/7uNcj1P6UmSU+fHPJrlS +5bnXe9mA/wBSQDxzkfh/+qp7YbIipbaOufwrN7WLR//X8DTO7I9e9SJnAIHNfBPY+ze4yQEPnGacoHof +amvIELCDnnqanXoBzUSaRSRMo5J744qRBxzUSelwRPEMingdsVk7pFLckA5p44OTUXuh2HqOKRskE4qV +sKQADkYqvcj8aqD0shWOV8fqDYqc4w4rj5D365Fe7lz/AHdjlxC11CNhyRnp0pqkYOc9a9G/c5bLof/Q ++OdUH7sDnOeKrREgEN6V5tN+6exUT5rlm1IC9ec9qssBg5xzjNYzdpJmkNtRhJzgflSRDqD6flU7FkqZ +55+holblfUVk90aLYYxJH3agvGCQPkjJ6DFaw7GMtrmdYpkcg1q6fsEwB6Ct8Q73M8DpKLZruu+3ZM43 +ADNctfeHt120cEjO3U7scmuDCVvZNux7GLw31iNmypLoN5byByrYzzxVfzdTtXcxzSAD3r0oYinW0Z41 +TB1cPrBlyy8S6nF9+QOMba1LbxepwsyFcYztrnrZdCabgb0MzlCyqGrZ+IbK4U7bgDg8E4rXtL+CQBfM +VgTn9BXi1sJOno0e5SxVOqrxZ//R8DiGScip0HOAOa+CfkfaDJV+fpRjBIxT6iHRjnIHFTAYXBIqZ7lK +1rEygZxUsYI68Gsm7gkSQ59PwqZRxx681lK/LYaHpjI7U8ge1ZK3Qdxw5XpijAOelGoNCDPOOaguOf8A +CnFCOa8cJu0uTI6EHH41xLou3gYBr3culaLXmc2JV7DIx8pXHFNAxknGc16b0OM//9L44v8A/V5wMiqy +/dbI6j1rzKb0PYq7li2C4HHHrVmT5Rx9ayqN8yLppKIwEj6+lPhAGfzNQ9rmqexKvcAYxTTjeM88isty +xhI3mqWrNwqADB5ranozCo9GQaeBjByR1q2GIzjj2rasryMaErRVieK/kjwHbIGOBVrSbtZNRmlfAB+U +ZP0/wrinQsnKPY9eljVJqM9zYgMTMAjoRnoRUV3ptrMrl4UY+o4rzIzcHc9Nx5kZc/hu1lUlBszWPqHh +Z1lYxHJHQZr0cPmElpI87E5dCptoZl1o9zADuVhwfaqqz39tIPLeVMDoPpXqUqsKyPHr0KuGfun/0/Bo +Rzlh+lToOBXwGltD7RjJQcjtSqODn9RVLyEEY96nVflzis6l3YpaEigdscCpl5XqeKiaVgJIhn/61Sgc +AdOaylqkyluPXv7U8gZx/Koih9R+ML1ppHynIoRLEAqKYZ6njFVHRXBnP+Lk3aXN0yFz+tcM6j15r2cv +ejOfEdLjMDb94ZHaoyvy9O/Y16mqOQ//1PjfUcBcnjJ9KqggRldo579682krxPWqO0i1AM7c59OlWJMA +/lWVTdGtJaNiLg89afCMkjOOO1ZtGu5IpCs+emf6Uxug6Y45rO3UruiFmKydvrVK8ZZLogAn+ldNOPU5 +pvox1pH+7JzhumKlVfkOckmnNq5MI2SGScE5HTBqWDcBkMvJ6CpuraFWd+w3ULqW3gMsb4fOOO1VNP8A +FGoxsyy7JFA6kYNKGDp1Y+8aSzCrh5e7qjesPE9s8eJh5eRnIrShvbG7AMUqZ+teVVwU6TbWqPaw+OpV +0lezJWgV4yAVYc8GqV5pFpMMyW+O+V+lc1KtKD906q1KMlaR/9XwqPg9e9SqOQQetfnyfc+0Y2UfOKFy +B25q1K+grCx564FTL93rilMaRKvXtz7U9OnfrWbtbQdyaLoOtSr/AFrOSstCl2HLnPNP5z1qNEA9s4FM +7daSVhMAcZzTJlOD1prYDC8VoTpdzjP+rbH5V5w/nDkj9a9rK2mnc5sVeysQxmYMd4wDUkLM3LZFeu0u +hxan/9b44v8AG35cnnNVArKM+tefS+HU9WoveuizCQCBuOT61ZcnGcgmsZrVG1N3TGrk4x3qWBQGPUHF +RJspa7kjAFmwOp6Y9qSXPyDtkVgnsa9yFxhWYrj2rJUtJcFgB75rqpSvc5K0bWSRetV2Rg98c8d6UZCs +M8AZPNTLWTuVFWiiIgjcBnDY5NToCsZAyDnqKUrtJDitWUfETbYI1Ixz7ZNYkXyzMAMevHSuvDfCceK3 +NKGIG0Ppj73pVdi0F2MMQDj7pog7uSYTXKotGxYajeQwA/aHOAeG5zV6HxJLCdk8KuvTK8dvSvNq4OFV +6aM9ajmM6SSlqj//1/DIOpHGaljG4cYH4V+e62PtWEi45pvzcjIwKuLsS9RYwM9s1Jj5Md88molqUnYl +Xlue1SryKlpodiWLGB6GpBWU9FcEPQd6eBgjNRYpCn7opDyM0Ru9RMQdxxzSODVR12F6mTryFrWVcfeU +j9K82ctvxxXrZY7XRjiF7qEjUHgkYFQuuCeB19K9dO5xSSsf/9D44uwSmM556VXkXMJHGenFeZTvoexN +Ilg4bBOTjrip5uQcY4x2qJ3ckVDSLQ6MdCPpT4uGIHGOaze1jRJbkjFgDgYpjEgqxI7dqyWhpuQ3rkQS +HjpWfaR9/wCf1rqp6RZy1Peki8MGMfNx7d6jc7Yyc4ye1JptjvorjBneDw2QMVPEHBIOFwR3qbXF5ox/ +EDl71U4ODiqDrjJABIrsoaRSRx19ZNmrbD/RgScAjsag1CF9pcBTxWMXaTNZRbirDrF3CbSQTg9f5U+Z +QJxwFBA/lRZc1yrvlsf/0fD4fvE1MnYk/nX5/wBD7R7iP1yMdaQLzRF9LCa7hGvOf0qXHy9qUtxkgXnt +UqDk0pK7sCfYkUcYA6VKnIFYzWha7jhT1Hes42TsC1FIyOlNYEU4oT8hB3pGzt68U1tYVzP1IZQ56Yrz +e6UC5lUrwGOB+Nepl3xNGddXiV0Y8jGPw6U1slSCec9a9m6OCx//0vji/wAiMY45qux3Rbh/KvNprRHr +1N2iW3z5gHY81ZnA3AnipqfErF01aDuPhwXAPHSpME7jyOK53pKxt9kT5vmB4IPHFMkwcEnkkVPkPpqU +75zt8sDBJ+tNtVCt8x59q6rWi7HKneSuTxAhCAQOcc0yQEA4br2FRfVqxfK7LUYw4weCu3n1qbdiNmOM +EgY9KV9CXo2YF+VMyNx8zE5qMgsrhccdq7obK5xT3aRdtTi2VmPGMdc+lWJgr5XAGMfrWElq7G8XsmUx +C8ZJjOQQcgdakVXZxv4PbjvijmTJlBr7z//T8RjIGPc1KhXqPXivzzdH2bWoSD5sg4INJwRzz9aEw2BM +dM5qTjb60SdykSA88enepEOOKU31EkTREdqkH54NZT1Ra0Hd/SnHip0Q/IVjwPWmsePehPqiWC9T1pHH +B5oTaFYoaiOOn415tqm4X842jiRh+tenlvxMzrfCV05JLDHTgD3ppYFCB6/Svb1aOHbc/wD/1PjnUv8A +Vct3qq53IMeleZDZM9ipu0SRYDAkkewqxI24+w6VM90EL2aJYCN5AbgY/lU0R+9z+FZS0N076DZSNzc5 +yc0xyoUfh25qG9mU7XZnXLZuTgnaKsW4zjqRnriuiStHQ5Y/GOxgEVFuwpBA9+MVKsytUOjILcZ7daNQ +ZEt3O7k8fjU3ldDbVmc/cPm4QYA/rS8gMD2zz6139EcF7tli2lVIAhVsYPap45lZiFG08DnrWLT1Ztde +6kidMGMZHGD3pkqjcOcZ447cVjF6o0nZxbP/1fElB7HOD1qVQOOtfnSVj7VsRwNx60Ywp4PFOCVwvoIg +HB9e1SAAjGcUpa7AiQDkf0qRRxgZGaUrWuwJYwOByalXGB6A1nOzRS3FAI70/GSOtTtuMVunemHGKUe1 +iRRgk0hwKqPkDZS1DkYFed+JEEWs3Q5GHz9M816GX6VPkZ1V7pQibOck8jrUbgDIA4r3epwJ6an/1vjf +U9vl43YyelUwR5RGTxx0rzaauj1qrSlckiA3D5j071aYjccnHSlJXaHDZsntzkY3Z96lQjnnt9K55I3T +GsRyDnI9ajfKKOemDxio7Iq+7M3JeVieSecYq7AMKF3Fj6V0zVlaxzQfvXGDpy2McdajjydwIO2h2Hd6 +ND41G8nAGMdD1qLV2zAFORl+R1qEtVcTdkzBl5vSCMgNwKlVG3MFJ4967r6I4bO7JY1BjJJ7Y6dDVqyQ +CYkqTjvWEn7rN1unYtYQLntg9+tV2+aQBlbPTHrxWNPzNqux/9fxWMDP41IoUYr87WzPs3uEgBJ9uKAB +tINCSbDoJGAMcdKkAG04/KiSXQpPQkXGcY7VINp56VLBbksYBxUgAx0rOadrDT7C45pxA4wKVkUhX7ZF +NODzRG1iGAA5NIwGeB1FNLuBTvEBI7V5/wCNFP8Awkl1tIABUdP9kV35cl7VehFbWBlxbNuD8x9aY20Y +xjOa96xwWstD/9D451XAhBOOTxVRlURdOa8ymrI9epu2SW23cMgDHb1qw4BcrgY9KJ25kOn8LLFsArYG +McVIu3GdvOOTWLV2axeliOYgM+FzmoL1isAwME4GKVloDvqVoI9zEEAMMGrbIAmFUdcZrSbS0MqcWQBg +0WMg4PalhCFCdpHWiXUFZtaDtqhywBwMY9Ko6sR5oXPTn2p09WianVIyEYebwMEnPNTL5eXBA4Hautp6 +WONSWt0TQMhUgjKj1q5bhQWKMDwBxWE20mbws3ElXy9pUEDqMd6hfaHUgE7B2HtWUO7NKiVrI//R8Vj4 +br37VMuT9TX55HY+ze+gMM5PSkzwR1AoWu4IRRg9akPC8HpSlfRFLXYeCN3TkipV60ulmBJGeR71IvTP +Ws5K6Ghwp3FQkMH6elNJ461didOoq9SaRjxSjqwuVbgZkH1rzrxWwk8QXj9hIR+XFejl1nVt5EV/gM2I +qCTjPTH50x+eRxya961tzzt9j//S+O9WJ+zjgDmqJYGDJYZNedSSaPXqu0tew+L7wPTvmrBO5x7Y5qZf +EnYUPhZdhUZyO3pTgcOxGOR0rnbu7M6fhK9yVEvPy59O9QX75VBjnIoS+ETa95DLbdu6nnp7VYGSMk59 +vxrWemxlTZCvMe4BTg/nSRKHVsjGfpSe90C1VmTsG2H2x3rF1J1eVxgcHr+FVQWtyK7srFGAgOrHqDnp +7VPGNzO/O3kkCut7pnGno0idCCNyt6Crca5ZiDjpgVzXsnc6X71rDyBgcbtucn8KhjBMpOfrz7VlTdtT +Sqm7JH//2Q== +` + + data, err := base64.StdEncoding.DecodeString(base64EncodedImage) + if err != nil { + t.Fatalf("base64 DecodeString: %v", err) + } + if _, err = Decode(bytes.NewReader(data)); err != nil { + t.Fatalf("Decode: %v", err) + } +} + +func TestExtraneousData(t *testing.T) { + // Encode a 1x1 red image. + src := image.NewRGBA(image.Rect(0, 0, 1, 1)) + src.Set(0, 0, color.RGBA{0xff, 0x00, 0x00, 0xff}) + buf := new(bytes.Buffer) + if err := Encode(buf, src, nil); err != nil { + t.Fatalf("encode: %v", err) + } + enc := buf.String() + // Sanity check that the encoded JPEG is long enough, that it ends in a + // "\xff\xd9" EOI marker, and that it contains a "\xff\xda" SOS marker + // somewhere in the final 64 bytes. + if len(enc) < 64 { + t.Fatalf("encoded JPEG is too short: %d bytes", len(enc)) + } + if got, want := enc[len(enc)-2:], "\xff\xd9"; got != want { + t.Fatalf("encoded JPEG ends with %q, want %q", got, want) + } + if s := enc[len(enc)-64:]; !strings.Contains(s, "\xff\xda") { + t.Fatalf("encoded JPEG does not contain a SOS marker (ff da) near the end: % x", s) + } + // Test that adding some random junk between the SOS marker and the + // EOI marker does not affect the decoding. + rnd := rand.New(rand.NewSource(1)) + for i, nerr := 0, 0; i < 1000 && nerr < 10; i++ { + buf.Reset() + // Write all but the trailing "\xff\xd9" EOI marker. + buf.WriteString(enc[:len(enc)-2]) + // Write some random extraneous data. + for n := rnd.Intn(10); n > 0; n-- { + if x := byte(rnd.Intn(256)); x != 0xff { + buf.WriteByte(x) + } else { + // The JPEG format escapes a SOS 0xff data byte as "\xff\x00". + buf.WriteString("\xff\x00") + } + } + // Write the "\xff\xd9" EOI marker. + buf.WriteString("\xff\xd9") + + // Check that we can still decode the resultant image. + got, err := Decode(buf) + if err != nil { + t.Errorf("could not decode image #%d: %v", i, err) + nerr++ + continue + } + if got.Bounds() != src.Bounds() { + t.Errorf("image #%d, bounds differ: %v and %v", i, got.Bounds(), src.Bounds()) + nerr++ + continue + } + if averageDelta(got, src) > 2<<8 { + t.Errorf("image #%d changed too much after a round trip", i) + nerr++ + continue + } + } +} + +func benchmarkDecode(b *testing.B, filename string) { + data, err := os.ReadFile(filename) + if err != nil { + b.Fatal(err) + } + cfg, err := DecodeConfig(bytes.NewReader(data)) + if err != nil { + b.Fatal(err) + } + b.SetBytes(int64(cfg.Width * cfg.Height * 4)) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + Decode(bytes.NewReader(data)) + } +} + +func BenchmarkDecodeBaseline(b *testing.B) { + benchmarkDecode(b, "../testdata/video-001.jpeg") +} + +func BenchmarkDecodeProgressive(b *testing.B) { + benchmarkDecode(b, "../testdata/video-001.progressive.jpeg") +} diff --git a/image/jpeg/scan.go b/image/jpeg/scan.go new file mode 100644 index 0000000..4e454c9 --- /dev/null +++ b/image/jpeg/scan.go @@ -0,0 +1,577 @@ +// Copyright 2012 The Go 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 jpeg + +import ( + "image" + "image/color" +) + +// makeImg allocates and initializes the destination image. +func (d *decoder) makeImg(mxx, myy int) { + if d.nComp == 1 { + m := image.NewGray(image.Rect(0, 0, 8*mxx, 8*myy)) + d.img1 = m.SubImage(image.Rect(0, 0, d.width, d.height)).(*image.Gray) + return + } + + h0 := d.comp[0].h + v0 := d.comp[0].v + hRatio := h0 / d.comp[1].h + vRatio := v0 / d.comp[1].v + var subsampleRatio image.YCbCrSubsampleRatio + switch hRatio<<4 | vRatio { + case 0x11: + subsampleRatio = image.YCbCrSubsampleRatio444 + case 0x12: + subsampleRatio = image.YCbCrSubsampleRatio440 + case 0x21: + subsampleRatio = image.YCbCrSubsampleRatio422 + case 0x22: + subsampleRatio = image.YCbCrSubsampleRatio420 + case 0x41: + subsampleRatio = image.YCbCrSubsampleRatio411 + case 0x42: + subsampleRatio = image.YCbCrSubsampleRatio410 + default: + panic("unreachable") + } + m := image.NewYCbCr(image.Rect(0, 0, 8*h0*mxx, 8*v0*myy), subsampleRatio) + d.img3 = m.SubImage(image.Rect(0, 0, d.width, d.height)).(*image.YCbCr) + + if d.nComp == 4 { + h3, v3 := d.comp[3].h, d.comp[3].v + d.blackPix = make([]byte, 8*h3*mxx*8*v3*myy) + d.blackStride = 8 * h3 * mxx + } +} + +// processSOSBuf is a Buffer for creating RGBBitmap in processSOS. It needs to +// hold four 8 x 8 pix 24bit color images. +var processSOSBuf [3 * 8 * 8 * 4]byte + +// Specified in section B.2.3. +func (d *decoder) processSOS(n int) error { + if d.nComp == 0 { + return FormatError("missing SOF marker") + } + if n < 6 || 4+2*d.nComp < n || n%2 != 0 { + return FormatError("SOS has wrong length") + } + if err := d.readFull(d.tmp[:n]); err != nil { + return err + } + nComp := int(d.tmp[0]) + if n != 4+2*nComp { + return FormatError("SOS length inconsistent with number of components") + } + var scan [maxComponents]struct { + compIndex uint8 + td uint8 // DC table selector. + ta uint8 // AC table selector. + } + totalHV := 0 + for i := 0; i < nComp; i++ { + cs := d.tmp[1+2*i] // Component selector. + compIndex := -1 + for j, comp := range d.comp[:d.nComp] { + if cs == comp.c { + compIndex = j + } + } + if compIndex < 0 { + return FormatError("unknown component selector") + } + scan[i].compIndex = uint8(compIndex) + // Section B.2.3 states that "the value of Cs_j shall be different from + // the values of Cs_1 through Cs_(j-1)". Since we have previously + // verified that a frame's component identifiers (C_i values in section + // B.2.2) are unique, it suffices to check that the implicit indexes + // into d.comp are unique. + for j := 0; j < i; j++ { + if scan[i].compIndex == scan[j].compIndex { + return FormatError("repeated component selector") + } + } + totalHV += d.comp[compIndex].h * d.comp[compIndex].v + + // The baseline t <= 1 restriction is specified in table B.3. + scan[i].td = d.tmp[2+2*i] >> 4 + if t := scan[i].td; t > maxTh || (d.baseline && t > 1) { + return FormatError("bad Td value") + } + scan[i].ta = d.tmp[2+2*i] & 0x0f + if t := scan[i].ta; t > maxTh || (d.baseline && t > 1) { + return FormatError("bad Ta value") + } + } + // Section B.2.3 states that if there is more than one component then the + // total H*V values in a scan must be <= 10. + if d.nComp > 1 && totalHV > 10 { + return FormatError("total sampling factors too large") + } + + // zigStart and zigEnd are the spectral selection bounds. + // ah and al are the successive approximation high and low values. + // The spec calls these values Ss, Se, Ah and Al. + // + // For progressive JPEGs, these are the two more-or-less independent + // aspects of progression. Spectral selection progression is when not + // all of a block's 64 DCT coefficients are transmitted in one pass. + // For example, three passes could transmit coefficient 0 (the DC + // component), coefficients 1-5, and coefficients 6-63, in zig-zag + // order. Successive approximation is when not all of the bits of a + // band of coefficients are transmitted in one pass. For example, + // three passes could transmit the 6 most significant bits, followed + // by the second-least significant bit, followed by the least + // significant bit. + // + // For sequential JPEGs, these parameters are hard-coded to 0/63/0/0, as + // per table B.3. + zigStart, zigEnd, ah, al := int32(0), int32(blockSize-1), uint32(0), uint32(0) + if d.progressive { + zigStart = int32(d.tmp[1+2*nComp]) + zigEnd = int32(d.tmp[2+2*nComp]) + ah = uint32(d.tmp[3+2*nComp] >> 4) + al = uint32(d.tmp[3+2*nComp] & 0x0f) + if (zigStart == 0 && zigEnd != 0) || zigStart > zigEnd || blockSize <= zigEnd { + return FormatError("bad spectral selection bounds") + } + if zigStart != 0 && nComp != 1 { + return FormatError("progressive AC coefficients for more than one component") + } + if ah != 0 && ah != al+1 { + return FormatError("bad successive approximation values") + } + } + + // mxx and myy are the number of MCUs (Minimum Coded Units) in the image. + h0, v0 := d.comp[0].h, d.comp[0].v // The h and v values from the Y components. + mxx := (d.width + 8*h0 - 1) / (8 * h0) + myy := (d.height + 8*v0 - 1) / (8 * v0) + if d.img1 == nil && d.img3 == nil { + // Minimizes memory usage in order to run on TinyGo. In order to keep + // the amount of code changes down, the image is created as a 1 x 1 + // image at this point. + d.makeImg(1, 1) + } + if d.progressive { + for i := 0; i < nComp; i++ { + compIndex := scan[i].compIndex + if d.progCoeffs[compIndex] == nil { + d.progCoeffs[compIndex] = make([]block, mxx*myy*d.comp[compIndex].h*d.comp[compIndex].v) + } + } + } + + d.bits = bits{} + mcu, expectedRST := 0, uint8(rst0Marker) + var ( + // b is the decoded coefficients, in natural (not zig-zag) order. + b block + dc [maxComponents]int32 + // bx and by are the location of the current block, in units of 8x8 + // blocks: the third block in the first row has (bx, by) = (2, 0). + bx, by int + blockCount int + ) + for my := 0; my < myy; my++ { + for mx := 0; mx < mxx; mx++ { + for i := 0; i < nComp; i++ { + compIndex := scan[i].compIndex + hi := d.comp[compIndex].h + vi := d.comp[compIndex].v + for j := 0; j < hi*vi; j++ { + // The blocks are traversed one MCU at a time. For 4:2:0 chroma + // subsampling, there are four Y 8x8 blocks in every 16x16 MCU. + // + // For a sequential 32x16 pixel image, the Y blocks visiting order is: + // 0 1 4 5 + // 2 3 6 7 + // + // For progressive images, the interleaved scans (those with nComp > 1) + // are traversed as above, but non-interleaved scans are traversed left + // to right, top to bottom: + // 0 1 2 3 + // 4 5 6 7 + // Only DC scans (zigStart == 0) can be interleaved. AC scans must have + // only one component. + // + // To further complicate matters, for non-interleaved scans, there is no + // data for any blocks that are inside the image at the MCU level but + // outside the image at the pixel level. For example, a 24x16 pixel 4:2:0 + // progressive image consists of two 16x16 MCUs. The interleaved scans + // will process 8 Y blocks: + // 0 1 4 5 + // 2 3 6 7 + // The non-interleaved scans will process only 6 Y blocks: + // 0 1 2 + // 3 4 5 + if nComp != 1 { + bx = hi*mx + j%hi + by = vi*my + j/hi + } else { + q := mxx * hi + bx = blockCount % q + by = blockCount / q + blockCount++ + if bx*8 >= d.width || by*8 >= d.height { + continue + } + } + + // Load the previous partially decoded coefficients, if applicable. + if d.progressive { + b = d.progCoeffs[compIndex][by*mxx*hi+bx] + } else { + b = block{} + } + + if ah != 0 { + if err := d.refine(&b, &d.huff[acTable][scan[i].ta], zigStart, zigEnd, 1< 16 { + return UnsupportedError("excessive DC component") + } + dcDelta, err := d.receiveExtend(value) + if err != nil { + return err + } + dc[compIndex] += dcDelta + b[0] = dc[compIndex] << al + } + + if zig <= zigEnd && d.eobRun > 0 { + d.eobRun-- + } else { + // Decode the AC coefficients, as specified in section F.2.2.2. + huff := &d.huff[acTable][scan[i].ta] + for ; zig <= zigEnd; zig++ { + value, err := d.decodeHuffman(huff) + if err != nil { + return err + } + val0 := value >> 4 + val1 := value & 0x0f + if val1 != 0 { + zig += int32(val0) + if zig > zigEnd { + break + } + ac, err := d.receiveExtend(val1) + if err != nil { + return err + } + b[unzig[zig]] = ac << al + } else { + if val0 != 0x0f { + d.eobRun = uint16(1 << val0) + if val0 != 0 { + bits, err := d.decodeBits(int32(val0)) + if err != nil { + return err + } + d.eobRun |= uint16(bits) + } + d.eobRun-- + break + } + zig += 0x0f + } + } + } + } + + if d.progressive { + // Save the coefficients. + d.progCoeffs[compIndex][by*mxx*hi+bx] = b + // At this point, we could call reconstructBlock to dequantize and perform the + // inverse DCT, to save early stages of a progressive image to the *image.YCbCr + // buffers (the whole point of progressive encoding), but in Go, the jpeg.Decode + // function does not return until the entire image is decoded, so we "continue" + // here to avoid wasted computation. Instead, reconstructBlock is called on each + // accumulated block by the reconstructProgressiveImage method after all of the + // SOS markers are processed. + continue + } + if dst, err := d.reconstructBlock(&b, bx, by, int(compIndex)); err != nil { + return err + } else { + // Currently, only the YCbCr422 format is supported. + switch compIndex { + case 0: // Y + bx8 := bx * 8 + by8 := by * 8 + bx16 := bx8 % 16 + by16 := by8 % 16 + for cy := 0; cy < 8; cy++ { + for cx := 0; cx < 8; cx++ { + processSOSBuf[((cy+by16)*16+(cx+bx16))*3+0] = dst[cy*8+cx] + } + } + case 1: // Cb + bx8 := bx * 8 * 2 + by8 := by * 8 * 2 + bx16 := bx8 % 16 + by16 := by8 % 16 + + for cy := 0; cy < 8; cy++ { + for cx := 0; cx < 8; cx++ { + processSOSBuf[((cy*2+0+by16)*16+(cx*2+0+bx16))*3+1] = dst[cy*8+cx] + processSOSBuf[((cy*2+0+by16)*16+(cx*2+1+bx16))*3+1] = dst[cy*8+cx] + processSOSBuf[((cy*2+1+by16)*16+(cx*2+0+bx16))*3+1] = dst[cy*8+cx] + processSOSBuf[((cy*2+1+by16)*16+(cx*2+1+bx16))*3+1] = dst[cy*8+cx] + } + } + case 2: // Cr + bx8 := bx * 8 * 2 + by8 := by * 8 * 2 + bx16 := bx8 % 16 + by16 := by8 % 16 + + for cy := 0; cy < 8; cy++ { + for cx := 0; cx < 8; cx++ { + processSOSBuf[((cy*2+0+by16)*16+(cx*2+0+bx16))*3+2] = dst[cy*8+cx] + processSOSBuf[((cy*2+0+by16)*16+(cx*2+1+bx16))*3+2] = dst[cy*8+cx] + processSOSBuf[((cy*2+1+by16)*16+(cx*2+0+bx16))*3+2] = dst[cy*8+cx] + processSOSBuf[((cy*2+1+by16)*16+(cx*2+1+bx16))*3+2] = dst[cy*8+cx] + } + } + + for cy := 0; cy < 16; cy++ { + for cx := 0; cx < 16; cx++ { + yy := processSOSBuf[(cy*16+cx)*3+0] + cb := processSOSBuf[(cy*16+cx)*3+1] + cr := processSOSBuf[(cy*16+cx)*3+2] + r, g, b := color.YCbCrToRGB(yy, cb, cr) + callbackBuf[cy*16+cx] = uint16(((uint16(r) << 8) & 0xF800) + + (((uint16(g) << 8) & 0xFC00) >> 5) + + (((uint16(b) << 8) & 0xF800) >> 11)) + } + } + callback(callbackBuf[:8*8*4], int16(bx8-bx16), int16(by8-by16), 16, 16, int16(d.width), int16(d.height)) + } + } + } // for j + } // for i + mcu++ + if d.ri > 0 && mcu%d.ri == 0 && mcu < mxx*myy { + // A more sophisticated decoder could use RST[0-7] markers to resynchronize from corrupt input, + // but this one assumes well-formed input, and hence the restart marker follows immediately. + if err := d.readFull(d.tmp[:2]); err != nil { + return err + } + + // Section F.1.2.3 says that "Byte alignment of markers is + // achieved by padding incomplete bytes with 1-bits. If padding + // with 1-bits creates a X’FF’ value, a zero byte is stuffed + // before adding the marker." + // + // Seeing "\xff\x00" here is not spec compliant, as we are not + // expecting an *incomplete* byte (that needed padding). Still, + // some real world encoders (see golang.org/issue/28717) insert + // it, so we accept it and re-try the 2 byte read. + // + // libjpeg issues a warning (but not an error) for this: + // https://github.com/LuaDist/libjpeg/blob/6c0fcb8ddee365e7abc4d332662b06900612e923/jdmarker.c#L1041-L1046 + if d.tmp[0] == 0xff && d.tmp[1] == 0x00 { + if err := d.readFull(d.tmp[:2]); err != nil { + return err + } + } + + if d.tmp[0] != 0xff || d.tmp[1] != expectedRST { + return FormatError("bad RST marker") + } + expectedRST++ + if expectedRST == rst7Marker+1 { + expectedRST = rst0Marker + } + // Reset the Huffman decoder. + d.bits = bits{} + // Reset the DC components, as per section F.2.1.3.1. + dc = [maxComponents]int32{} + // Reset the progressive decoder state, as per section G.1.2.2. + d.eobRun = 0 + } + } // for mx + } // for my + + return nil +} + +// refine decodes a successive approximation refinement block, as specified in +// section G.1.2. +func (d *decoder) refine(b *block, h *huffman, zigStart, zigEnd, delta int32) error { + // Refining a DC component is trivial. + if zigStart == 0 { + if zigEnd != 0 { + panic("unreachable") + } + bit, err := d.decodeBit() + if err != nil { + return err + } + if bit { + b[0] |= delta + } + return nil + } + + // Refining AC components is more complicated; see sections G.1.2.2 and G.1.2.3. + zig := zigStart + if d.eobRun == 0 { + loop: + for ; zig <= zigEnd; zig++ { + z := int32(0) + value, err := d.decodeHuffman(h) + if err != nil { + return err + } + val0 := value >> 4 + val1 := value & 0x0f + + switch val1 { + case 0: + if val0 != 0x0f { + d.eobRun = uint16(1 << val0) + if val0 != 0 { + bits, err := d.decodeBits(int32(val0)) + if err != nil { + return err + } + d.eobRun |= uint16(bits) + } + break loop + } + case 1: + z = delta + bit, err := d.decodeBit() + if err != nil { + return err + } + if !bit { + z = -z + } + default: + return FormatError("unexpected Huffman code") + } + + zig, err = d.refineNonZeroes(b, zig, zigEnd, int32(val0), delta) + if err != nil { + return err + } + if zig > zigEnd { + return FormatError("too many coefficients") + } + if z != 0 { + b[unzig[zig]] = z + } + } + } + if d.eobRun > 0 { + d.eobRun-- + if _, err := d.refineNonZeroes(b, zig, zigEnd, -1, delta); err != nil { + return err + } + } + return nil +} + +// refineNonZeroes refines non-zero entries of b in zig-zag order. If nz >= 0, +// the first nz zero entries are skipped over. +func (d *decoder) refineNonZeroes(b *block, zig, zigEnd, nz, delta int32) (int32, error) { + for ; zig <= zigEnd; zig++ { + u := unzig[zig] + if b[u] == 0 { + if nz == 0 { + break + } + nz-- + continue + } + bit, err := d.decodeBit() + if err != nil { + return 0, err + } + if !bit { + continue + } + if b[u] >= 0 { + b[u] += delta + } else { + b[u] -= delta + } + } + return zig, nil +} + +func (d *decoder) reconstructProgressiveImage() error { + // The h0, mxx, by and bx variables have the same meaning as in the + // processSOS method. + h0 := d.comp[0].h + mxx := (d.width + 8*h0 - 1) / (8 * h0) + for i := 0; i < d.nComp; i++ { + if d.progCoeffs[i] == nil { + continue + } + v := 8 * d.comp[0].v / d.comp[i].v + h := 8 * d.comp[0].h / d.comp[i].h + stride := mxx * d.comp[i].h + for by := 0; by*v < d.height; by++ { + for bx := 0; bx*h < d.width; bx++ { + if _, err := d.reconstructBlock(&d.progCoeffs[i][by*stride+bx], bx, by, i); err != nil { + return err + } + } + } + } + return nil +} + +// reconstructBlockBuf is a Buffer for the 8x8 pix data to be processed by +// reconstructBlock. It is defined and used as a package variable to reduce +// memory usage. +var reconstructBlockBuf [64]byte + +// reconstructBlock dequantizes, performs the inverse DCT and stores the block +// to the image. +// In the original Go source, it was expanded to a position that matched the +// coordinates of the original image. Note that TinyGo does not transform the +// coordinate system, so the movement is different. +func (d *decoder) reconstructBlock(b *block, bx, by, compIndex int) ([]byte, error) { + qt := &d.quant[d.comp[compIndex].tq] + for zig := 0; zig < blockSize; zig++ { + b[unzig[zig]] *= qt[zig] + } + idct(b) + // Level shift by +128, clip to [0, 255], and write to dst. + var buf = reconstructBlockBuf[:] + for y := 0; y < 8; y++ { + y8 := y * 8 + for x := 0; x < 8; x++ { + c := b[y8+x] + if c < -128 { + c = 0 + } else if c > 127 { + c = 255 + } else { + c += 128 + } + buf[y*8+x] = uint8(c) + } + } + return buf, nil +} diff --git a/image/jpeg/writer.go b/image/jpeg/writer.go new file mode 100644 index 0000000..a600499 --- /dev/null +++ b/image/jpeg/writer.go @@ -0,0 +1,641 @@ +// Copyright 2011 The Go 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 jpeg + +import ( + "bufio" + "errors" + "image" + "image/color" + "io" +) + +// min returns the minimum of two integers. +func min(x, y int) int { + if x < y { + return x + } + return y +} + +// div returns a/b rounded to the nearest integer, instead of rounded to zero. +func div(a, b int32) int32 { + if a >= 0 { + return (a + (b >> 1)) / b + } + return -((-a + (b >> 1)) / b) +} + +// bitCount counts the number of bits needed to hold an integer. +var bitCount = [256]byte{ + 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, +} + +type quantIndex int + +const ( + quantIndexLuminance quantIndex = iota + quantIndexChrominance + nQuantIndex +) + +// unscaledQuant are the unscaled quantization tables in zig-zag order. Each +// encoder copies and scales the tables according to its quality parameter. +// The values are derived from section K.1 after converting from natural to +// zig-zag order. +var unscaledQuant = [nQuantIndex][blockSize]byte{ + // Luminance. + { + 16, 11, 12, 14, 12, 10, 16, 14, + 13, 14, 18, 17, 16, 19, 24, 40, + 26, 24, 22, 22, 24, 49, 35, 37, + 29, 40, 58, 51, 61, 60, 57, 51, + 56, 55, 64, 72, 92, 78, 64, 68, + 87, 69, 55, 56, 80, 109, 81, 87, + 95, 98, 103, 104, 103, 62, 77, 113, + 121, 112, 100, 120, 92, 101, 103, 99, + }, + // Chrominance. + { + 17, 18, 18, 24, 21, 24, 47, 26, + 26, 47, 99, 66, 56, 66, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + }, +} + +type huffIndex int + +const ( + huffIndexLuminanceDC huffIndex = iota + huffIndexLuminanceAC + huffIndexChrominanceDC + huffIndexChrominanceAC + nHuffIndex +) + +// huffmanSpec specifies a Huffman encoding. +type huffmanSpec struct { + // count[i] is the number of codes of length i bits. + count [16]byte + // value[i] is the decoded value of the i'th codeword. + value []byte +} + +// theHuffmanSpec is the Huffman encoding specifications. +// This encoder uses the same Huffman encoding for all images. +var theHuffmanSpec = [nHuffIndex]huffmanSpec{ + // Luminance DC. + { + [16]byte{0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, + []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}, + }, + // Luminance AC. + { + [16]byte{0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125}, + []byte{ + 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, + 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, + 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, + 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, + 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, + 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, + 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, + 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, + 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, + 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, + 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, + 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, + 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, + 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, + 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, + 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, + 0xf9, 0xfa, + }, + }, + // Chrominance DC. + { + [16]byte{0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}, + []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}, + }, + // Chrominance AC. + { + [16]byte{0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119}, + []byte{ + 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, + 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, + 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, + 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, + 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, + 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, + 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, + 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, + 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, + 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, + 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, + 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, + 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, + 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, + 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, + 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, + 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, + 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, + 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, + 0xf9, 0xfa, + }, + }, +} + +// huffmanLUT is a compiled look-up table representation of a huffmanSpec. +// Each value maps to a uint32 of which the 8 most significant bits hold the +// codeword size in bits and the 24 least significant bits hold the codeword. +// The maximum codeword size is 16 bits. +type huffmanLUT []uint32 + +func (h *huffmanLUT) init(s huffmanSpec) { + maxValue := 0 + for _, v := range s.value { + if int(v) > maxValue { + maxValue = int(v) + } + } + *h = make([]uint32, maxValue+1) + code, k := uint32(0), 0 + for i := 0; i < len(s.count); i++ { + nBits := uint32(i+1) << 24 + for j := uint8(0); j < s.count[i]; j++ { + (*h)[s.value[k]] = nBits | code + code++ + k++ + } + code <<= 1 + } +} + +// theHuffmanLUT are compiled representations of theHuffmanSpec. +var theHuffmanLUT [4]huffmanLUT + +func init() { + for i, s := range theHuffmanSpec { + theHuffmanLUT[i].init(s) + } +} + +// writer is a buffered writer. +type writer interface { + Flush() error + io.Writer + io.ByteWriter +} + +// encoder encodes an image to the JPEG format. +type encoder struct { + // w is the writer to write to. err is the first error encountered during + // writing. All attempted writes after the first error become no-ops. + w writer + err error + // buf is a scratch buffer. + buf [16]byte + // bits and nBits are accumulated bits to write to w. + bits, nBits uint32 + // quant is the scaled quantization tables, in zig-zag order. + quant [nQuantIndex][blockSize]byte +} + +func (e *encoder) flush() { + if e.err != nil { + return + } + e.err = e.w.Flush() +} + +func (e *encoder) write(p []byte) { + if e.err != nil { + return + } + _, e.err = e.w.Write(p) +} + +func (e *encoder) writeByte(b byte) { + if e.err != nil { + return + } + e.err = e.w.WriteByte(b) +} + +// emit emits the least significant nBits bits of bits to the bit-stream. +// The precondition is bits < 1<= 8 { + b := uint8(bits >> 24) + e.writeByte(b) + if b == 0xff { + e.writeByte(0x00) + } + bits <<= 8 + nBits -= 8 + } + e.bits, e.nBits = bits, nBits +} + +// emitHuff emits the given value with the given Huffman encoder. +func (e *encoder) emitHuff(h huffIndex, value int32) { + x := theHuffmanLUT[h][value] + e.emit(x&(1<<24-1), x>>24) +} + +// emitHuffRLE emits a run of runLength copies of value encoded with the given +// Huffman encoder. +func (e *encoder) emitHuffRLE(h huffIndex, runLength, value int32) { + a, b := value, value + if a < 0 { + a, b = -value, value-1 + } + var nBits uint32 + if a < 0x100 { + nBits = uint32(bitCount[a]) + } else { + nBits = 8 + uint32(bitCount[a>>8]) + } + e.emitHuff(h, runLength<<4|int32(nBits)) + if nBits > 0 { + e.emit(uint32(b)&(1<> 8) + e.buf[3] = uint8(markerlen & 0xff) + e.write(e.buf[:4]) +} + +// writeDQT writes the Define Quantization Table marker. +func (e *encoder) writeDQT() { + const markerlen = 2 + int(nQuantIndex)*(1+blockSize) + e.writeMarkerHeader(dqtMarker, markerlen) + for i := range e.quant { + e.writeByte(uint8(i)) + e.write(e.quant[i][:]) + } +} + +// writeSOF0 writes the Start Of Frame (Baseline Sequential) marker. +func (e *encoder) writeSOF0(size image.Point, nComponent int) { + markerlen := 8 + 3*nComponent + e.writeMarkerHeader(sof0Marker, markerlen) + e.buf[0] = 8 // 8-bit color. + e.buf[1] = uint8(size.Y >> 8) + e.buf[2] = uint8(size.Y & 0xff) + e.buf[3] = uint8(size.X >> 8) + e.buf[4] = uint8(size.X & 0xff) + e.buf[5] = uint8(nComponent) + if nComponent == 1 { + e.buf[6] = 1 + // No subsampling for grayscale image. + e.buf[7] = 0x11 + e.buf[8] = 0x00 + } else { + for i := 0; i < nComponent; i++ { + e.buf[3*i+6] = uint8(i + 1) + // We use 4:2:0 chroma subsampling. + e.buf[3*i+7] = "\x22\x11\x11"[i] + e.buf[3*i+8] = "\x00\x01\x01"[i] + } + } + e.write(e.buf[:3*(nComponent-1)+9]) +} + +// writeDHT writes the Define Huffman Table marker. +func (e *encoder) writeDHT(nComponent int) { + markerlen := 2 + specs := theHuffmanSpec[:] + if nComponent == 1 { + // Drop the Chrominance tables. + specs = specs[:2] + } + for _, s := range specs { + markerlen += 1 + 16 + len(s.value) + } + e.writeMarkerHeader(dhtMarker, markerlen) + for i, s := range specs { + e.writeByte("\x00\x10\x01\x11"[i]) + e.write(s.count[:]) + e.write(s.value) + } +} + +// writeBlock writes a block of pixel data using the given quantization table, +// returning the post-quantized DC value of the DCT-transformed block. b is in +// natural (not zig-zag) order. +func (e *encoder) writeBlock(b *block, q quantIndex, prevDC int32) int32 { + fdct(b) + // Emit the DC delta. + dc := div(b[0], 8*int32(e.quant[q][0])) + e.emitHuffRLE(huffIndex(2*q+0), 0, dc-prevDC) + // Emit the AC components. + h, runLength := huffIndex(2*q+1), int32(0) + for zig := 1; zig < blockSize; zig++ { + ac := div(b[unzig[zig]], 8*int32(e.quant[q][zig])) + if ac == 0 { + runLength++ + } else { + for runLength > 15 { + e.emitHuff(h, 0xf0) + runLength -= 16 + } + e.emitHuffRLE(h, runLength, ac) + runLength = 0 + } + } + if runLength > 0 { + e.emitHuff(h, 0x00) + } + return dc +} + +// toYCbCr converts the 8x8 region of m whose top-left corner is p to its +// YCbCr values. +func toYCbCr(m image.Image, p image.Point, yBlock, cbBlock, crBlock *block) { + b := m.Bounds() + xmax := b.Max.X - 1 + ymax := b.Max.Y - 1 + for j := 0; j < 8; j++ { + for i := 0; i < 8; i++ { + r, g, b, _ := m.At(min(p.X+i, xmax), min(p.Y+j, ymax)).RGBA() + yy, cb, cr := color.RGBToYCbCr(uint8(r>>8), uint8(g>>8), uint8(b>>8)) + yBlock[8*j+i] = int32(yy) + cbBlock[8*j+i] = int32(cb) + crBlock[8*j+i] = int32(cr) + } + } +} + +// grayToY stores the 8x8 region of m whose top-left corner is p in yBlock. +func grayToY(m *image.Gray, p image.Point, yBlock *block) { + b := m.Bounds() + xmax := b.Max.X - 1 + ymax := b.Max.Y - 1 + pix := m.Pix + for j := 0; j < 8; j++ { + for i := 0; i < 8; i++ { + idx := m.PixOffset(min(p.X+i, xmax), min(p.Y+j, ymax)) + yBlock[8*j+i] = int32(pix[idx]) + } + } +} + +// rgbaToYCbCr is a specialized version of toYCbCr for image.RGBA images. +func rgbaToYCbCr(m *image.RGBA, p image.Point, yBlock, cbBlock, crBlock *block) { + b := m.Bounds() + xmax := b.Max.X - 1 + ymax := b.Max.Y - 1 + for j := 0; j < 8; j++ { + sj := p.Y + j + if sj > ymax { + sj = ymax + } + offset := (sj-b.Min.Y)*m.Stride - b.Min.X*4 + for i := 0; i < 8; i++ { + sx := p.X + i + if sx > xmax { + sx = xmax + } + pix := m.Pix[offset+sx*4:] + yy, cb, cr := color.RGBToYCbCr(pix[0], pix[1], pix[2]) + yBlock[8*j+i] = int32(yy) + cbBlock[8*j+i] = int32(cb) + crBlock[8*j+i] = int32(cr) + } + } +} + +// yCbCrToYCbCr is a specialized version of toYCbCr for image.YCbCr images. +func yCbCrToYCbCr(m *image.YCbCr, p image.Point, yBlock, cbBlock, crBlock *block) { + b := m.Bounds() + xmax := b.Max.X - 1 + ymax := b.Max.Y - 1 + for j := 0; j < 8; j++ { + sy := p.Y + j + if sy > ymax { + sy = ymax + } + for i := 0; i < 8; i++ { + sx := p.X + i + if sx > xmax { + sx = xmax + } + yi := m.YOffset(sx, sy) + ci := m.COffset(sx, sy) + yBlock[8*j+i] = int32(m.Y[yi]) + cbBlock[8*j+i] = int32(m.Cb[ci]) + crBlock[8*j+i] = int32(m.Cr[ci]) + } + } +} + +// scale scales the 16x16 region represented by the 4 src blocks to the 8x8 +// dst block. +func scale(dst *block, src *[4]block) { + for i := 0; i < 4; i++ { + dstOff := (i&2)<<4 | (i&1)<<2 + for y := 0; y < 4; y++ { + for x := 0; x < 4; x++ { + j := 16*y + 2*x + sum := src[i][j] + src[i][j+1] + src[i][j+8] + src[i][j+9] + dst[8*y+x+dstOff] = (sum + 2) >> 2 + } + } + } +} + +// sosHeaderY is the SOS marker "\xff\xda" followed by 8 bytes: +// - the marker length "\x00\x08", +// - the number of components "\x01", +// - component 1 uses DC table 0 and AC table 0 "\x01\x00", +// - the bytes "\x00\x3f\x00". Section B.2.3 of the spec says that for +// sequential DCTs, those bytes (8-bit Ss, 8-bit Se, 4-bit Ah, 4-bit Al) +// should be 0x00, 0x3f, 0x00<<4 | 0x00. +var sosHeaderY = []byte{ + 0xff, 0xda, 0x00, 0x08, 0x01, 0x01, 0x00, 0x00, 0x3f, 0x00, +} + +// sosHeaderYCbCr is the SOS marker "\xff\xda" followed by 12 bytes: +// - the marker length "\x00\x0c", +// - the number of components "\x03", +// - component 1 uses DC table 0 and AC table 0 "\x01\x00", +// - component 2 uses DC table 1 and AC table 1 "\x02\x11", +// - component 3 uses DC table 1 and AC table 1 "\x03\x11", +// - the bytes "\x00\x3f\x00". Section B.2.3 of the spec says that for +// sequential DCTs, those bytes (8-bit Ss, 8-bit Se, 4-bit Ah, 4-bit Al) +// should be 0x00, 0x3f, 0x00<<4 | 0x00. +var sosHeaderYCbCr = []byte{ + 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, + 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00, +} + +// writeSOS writes the StartOfScan marker. +func (e *encoder) writeSOS(m image.Image) { + switch m.(type) { + case *image.Gray: + e.write(sosHeaderY) + default: + e.write(sosHeaderYCbCr) + } + var ( + // Scratch buffers to hold the YCbCr values. + // The blocks are in natural (not zig-zag) order. + b block + cb, cr [4]block + // DC components are delta-encoded. + prevDCY, prevDCCb, prevDCCr int32 + ) + bounds := m.Bounds() + switch m := m.(type) { + // TODO(wathiede): switch on m.ColorModel() instead of type. + case *image.Gray: + for y := bounds.Min.Y; y < bounds.Max.Y; y += 8 { + for x := bounds.Min.X; x < bounds.Max.X; x += 8 { + p := image.Pt(x, y) + grayToY(m, p, &b) + prevDCY = e.writeBlock(&b, 0, prevDCY) + } + } + default: + rgba, _ := m.(*image.RGBA) + ycbcr, _ := m.(*image.YCbCr) + for y := bounds.Min.Y; y < bounds.Max.Y; y += 16 { + for x := bounds.Min.X; x < bounds.Max.X; x += 16 { + for i := 0; i < 4; i++ { + xOff := (i & 1) * 8 + yOff := (i & 2) * 4 + p := image.Pt(x+xOff, y+yOff) + if rgba != nil { + rgbaToYCbCr(rgba, p, &b, &cb[i], &cr[i]) + } else if ycbcr != nil { + yCbCrToYCbCr(ycbcr, p, &b, &cb[i], &cr[i]) + } else { + toYCbCr(m, p, &b, &cb[i], &cr[i]) + } + prevDCY = e.writeBlock(&b, 0, prevDCY) + } + scale(&b, &cb) + prevDCCb = e.writeBlock(&b, 1, prevDCCb) + scale(&b, &cr) + prevDCCr = e.writeBlock(&b, 1, prevDCCr) + } + } + } + // Pad the last byte with 1's. + e.emit(0x7f, 7) +} + +// DefaultQuality is the default quality encoding parameter. +const DefaultQuality = 75 + +// Options are the encoding parameters. +// Quality ranges from 1 to 100 inclusive, higher is better. +type Options struct { + Quality int +} + +// Encode writes the Image m to w in JPEG 4:2:0 baseline format with the given +// options. Default parameters are used if a nil *Options is passed. +func Encode(w io.Writer, m image.Image, o *Options) error { + b := m.Bounds() + if b.Dx() >= 1<<16 || b.Dy() >= 1<<16 { + return errors.New("jpeg: image is too large to encode") + } + var e encoder + if ww, ok := w.(writer); ok { + e.w = ww + } else { + e.w = bufio.NewWriter(w) + } + // Clip quality to [1, 100]. + quality := DefaultQuality + if o != nil { + quality = o.Quality + if quality < 1 { + quality = 1 + } else if quality > 100 { + quality = 100 + } + } + // Convert from a quality rating to a scaling factor. + var scale int + if quality < 50 { + scale = 5000 / quality + } else { + scale = 200 - quality*2 + } + // Initialize the quantization tables. + for i := range e.quant { + for j := range e.quant[i] { + x := int(unscaledQuant[i][j]) + x = (x*scale + 50) / 100 + if x < 1 { + x = 1 + } else if x > 255 { + x = 255 + } + e.quant[i][j] = uint8(x) + } + } + // Compute number of components based on input image type. + nComponent := 3 + switch m.(type) { + // TODO(wathiede): switch on m.ColorModel() instead of type. + case *image.Gray: + nComponent = 1 + } + // Write the Start Of Image marker. + e.buf[0] = 0xff + e.buf[1] = 0xd8 + e.write(e.buf[:2]) + // Write the quantization tables. + e.writeDQT() + // Write the image dimensions. + e.writeSOF0(b.Size(), nComponent) + // Write the Huffman tables. + e.writeDHT(nComponent) + // Write the image data. + e.writeSOS(m) + // Write the End Of Image marker. + e.buf[0] = 0xff + e.buf[1] = 0xd9 + e.write(e.buf[:2]) + e.flush() + return e.err +} diff --git a/image/jpeg/writer_test.go b/image/jpeg/writer_test.go new file mode 100644 index 0000000..abd5e32 --- /dev/null +++ b/image/jpeg/writer_test.go @@ -0,0 +1,288 @@ +// Copyright 2011 The Go 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 jpeg + +import ( + "bytes" + "fmt" + "image" + "image/color" + "image/png" + "io" + "math/rand" + "os" + "testing" +) + +// zigzag maps from the natural ordering to the zig-zag ordering. For example, +// zigzag[0*8 + 3] is the zig-zag sequence number of the element in the fourth +// column and first row. +var zigzag = [blockSize]int{ + 0, 1, 5, 6, 14, 15, 27, 28, + 2, 4, 7, 13, 16, 26, 29, 42, + 3, 8, 12, 17, 25, 30, 41, 43, + 9, 11, 18, 24, 31, 40, 44, 53, + 10, 19, 23, 32, 39, 45, 52, 54, + 20, 22, 33, 38, 46, 51, 55, 60, + 21, 34, 37, 47, 50, 56, 59, 61, + 35, 36, 48, 49, 57, 58, 62, 63, +} + +func TestZigUnzig(t *testing.T) { + for i := 0; i < blockSize; i++ { + if unzig[zigzag[i]] != i { + t.Errorf("unzig[zigzag[%d]] == %d", i, unzig[zigzag[i]]) + } + if zigzag[unzig[i]] != i { + t.Errorf("zigzag[unzig[%d]] == %d", i, zigzag[unzig[i]]) + } + } +} + +// unscaledQuantInNaturalOrder are the unscaled quantization tables in +// natural (not zig-zag) order, as specified in section K.1. +var unscaledQuantInNaturalOrder = [nQuantIndex][blockSize]byte{ + // Luminance. + { + 16, 11, 10, 16, 24, 40, 51, 61, + 12, 12, 14, 19, 26, 58, 60, 55, + 14, 13, 16, 24, 40, 57, 69, 56, + 14, 17, 22, 29, 51, 87, 80, 62, + 18, 22, 37, 56, 68, 109, 103, 77, + 24, 35, 55, 64, 81, 104, 113, 92, + 49, 64, 78, 87, 103, 121, 120, 101, + 72, 92, 95, 98, 112, 100, 103, 99, + }, + // Chrominance. + { + 17, 18, 24, 47, 99, 99, 99, 99, + 18, 21, 26, 66, 99, 99, 99, 99, + 24, 26, 56, 99, 99, 99, 99, 99, + 47, 66, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + }, +} + +func TestUnscaledQuant(t *testing.T) { + bad := false + for i := quantIndex(0); i < nQuantIndex; i++ { + for zig := 0; zig < blockSize; zig++ { + got := unscaledQuant[i][zig] + want := unscaledQuantInNaturalOrder[i][unzig[zig]] + if got != want { + t.Errorf("i=%d, zig=%d: got %d, want %d", i, zig, got, want) + bad = true + } + } + } + if bad { + names := [nQuantIndex]string{"Luminance", "Chrominance"} + buf := &bytes.Buffer{} + for i, name := range names { + fmt.Fprintf(buf, "// %s.\n{\n", name) + for zig := 0; zig < blockSize; zig++ { + fmt.Fprintf(buf, "%d, ", unscaledQuantInNaturalOrder[i][unzig[zig]]) + if zig%8 == 7 { + buf.WriteString("\n") + } + } + buf.WriteString("},\n") + } + t.Logf("expected unscaledQuant values:\n%s", buf.String()) + } +} + +var testCase = []struct { + filename string + quality int + tolerance int64 +}{ + {"../testdata/video-001.png", 1, 24 << 8}, + {"../testdata/video-001.png", 20, 12 << 8}, + {"../testdata/video-001.png", 60, 8 << 8}, + {"../testdata/video-001.png", 80, 6 << 8}, + {"../testdata/video-001.png", 90, 4 << 8}, + {"../testdata/video-001.png", 100, 2 << 8}, +} + +func delta(u0, u1 uint32) int64 { + d := int64(u0) - int64(u1) + if d < 0 { + return -d + } + return d +} + +func readPng(filename string) (image.Image, error) { + f, err := os.Open(filename) + if err != nil { + return nil, err + } + defer f.Close() + return png.Decode(f) +} + +func TestWriter(t *testing.T) { + for _, tc := range testCase { + // Read the image. + m0, err := readPng(tc.filename) + if err != nil { + t.Error(tc.filename, err) + continue + } + // Encode that image as JPEG. + var buf bytes.Buffer + err = Encode(&buf, m0, &Options{Quality: tc.quality}) + if err != nil { + t.Error(tc.filename, err) + continue + } + // Decode that JPEG. + m1, err := Decode(&buf) + if err != nil { + t.Error(tc.filename, err) + continue + } + if m0.Bounds() != m1.Bounds() { + t.Errorf("%s, bounds differ: %v and %v", tc.filename, m0.Bounds(), m1.Bounds()) + continue + } + // Compare the average delta to the tolerance level. + if averageDelta(m0, m1) > tc.tolerance { + t.Errorf("%s, quality=%d: average delta is too high", tc.filename, tc.quality) + continue + } + } +} + +// TestWriteGrayscale tests that a grayscale images survives a round-trip +// through encode/decode cycle. +func TestWriteGrayscale(t *testing.T) { + m0 := image.NewGray(image.Rect(0, 0, 32, 32)) + for i := range m0.Pix { + m0.Pix[i] = uint8(i) + } + var buf bytes.Buffer + if err := Encode(&buf, m0, nil); err != nil { + t.Fatal(err) + } + m1, err := Decode(&buf) + if err != nil { + t.Fatal(err) + } + if m0.Bounds() != m1.Bounds() { + t.Fatalf("bounds differ: %v and %v", m0.Bounds(), m1.Bounds()) + } + if _, ok := m1.(*image.Gray); !ok { + t.Errorf("got %T, want *image.Gray", m1) + } + // Compare the average delta to the tolerance level. + want := int64(2 << 8) + if got := averageDelta(m0, m1); got > want { + t.Errorf("average delta too high; got %d, want <= %d", got, want) + } +} + +// averageDelta returns the average delta in RGB space. The two images must +// have the same bounds. +func averageDelta(m0, m1 image.Image) int64 { + b := m0.Bounds() + var sum, n int64 + for y := b.Min.Y; y < b.Max.Y; y++ { + for x := b.Min.X; x < b.Max.X; x++ { + c0 := m0.At(x, y) + c1 := m1.At(x, y) + r0, g0, b0, _ := c0.RGBA() + r1, g1, b1, _ := c1.RGBA() + sum += delta(r0, r1) + sum += delta(g0, g1) + sum += delta(b0, b1) + n += 3 + } + } + return sum / n +} + +func TestEncodeYCbCr(t *testing.T) { + bo := image.Rect(0, 0, 640, 480) + imgRGBA := image.NewRGBA(bo) + // Must use 444 subsampling to avoid lossy RGBA to YCbCr conversion. + imgYCbCr := image.NewYCbCr(bo, image.YCbCrSubsampleRatio444) + rnd := rand.New(rand.NewSource(123)) + // Create identical rgba and ycbcr images. + for y := bo.Min.Y; y < bo.Max.Y; y++ { + for x := bo.Min.X; x < bo.Max.X; x++ { + col := color.RGBA{ + uint8(rnd.Intn(256)), + uint8(rnd.Intn(256)), + uint8(rnd.Intn(256)), + 255, + } + imgRGBA.SetRGBA(x, y, col) + yo := imgYCbCr.YOffset(x, y) + co := imgYCbCr.COffset(x, y) + cy, ccr, ccb := color.RGBToYCbCr(col.R, col.G, col.B) + imgYCbCr.Y[yo] = cy + imgYCbCr.Cb[co] = ccr + imgYCbCr.Cr[co] = ccb + } + } + + // Now check that both images are identical after an encode. + var bufRGBA, bufYCbCr bytes.Buffer + Encode(&bufRGBA, imgRGBA, nil) + Encode(&bufYCbCr, imgYCbCr, nil) + if !bytes.Equal(bufRGBA.Bytes(), bufYCbCr.Bytes()) { + t.Errorf("RGBA and YCbCr encoded bytes differ") + } +} + +func BenchmarkEncodeRGBA(b *testing.B) { + img := image.NewRGBA(image.Rect(0, 0, 640, 480)) + bo := img.Bounds() + rnd := rand.New(rand.NewSource(123)) + for y := bo.Min.Y; y < bo.Max.Y; y++ { + for x := bo.Min.X; x < bo.Max.X; x++ { + img.SetRGBA(x, y, color.RGBA{ + uint8(rnd.Intn(256)), + uint8(rnd.Intn(256)), + uint8(rnd.Intn(256)), + 255, + }) + } + } + b.SetBytes(640 * 480 * 4) + b.ReportAllocs() + b.ResetTimer() + options := &Options{Quality: 90} + for i := 0; i < b.N; i++ { + Encode(io.Discard, img, options) + } +} + +func BenchmarkEncodeYCbCr(b *testing.B) { + img := image.NewYCbCr(image.Rect(0, 0, 640, 480), image.YCbCrSubsampleRatio420) + bo := img.Bounds() + rnd := rand.New(rand.NewSource(123)) + for y := bo.Min.Y; y < bo.Max.Y; y++ { + for x := bo.Min.X; x < bo.Max.X; x++ { + cy := img.YOffset(x, y) + ci := img.COffset(x, y) + img.Y[cy] = uint8(rnd.Intn(256)) + img.Cb[ci] = uint8(rnd.Intn(256)) + img.Cr[ci] = uint8(rnd.Intn(256)) + } + } + b.SetBytes(640 * 480 * 3) + b.ReportAllocs() + b.ResetTimer() + options := &Options{Quality: 90} + for i := 0; i < b.N; i++ { + Encode(io.Discard, img, options) + } +} diff --git a/image/png/callback.go b/image/png/callback.go new file mode 100644 index 0000000..6556895 --- /dev/null +++ b/image/png/callback.go @@ -0,0 +1,17 @@ +package png + +var ( + callback Callback = func(data []uint16, x, y, w, h, width, height int16) {} + callbackBuf []uint16 +) + +// A portion of the image data consisting of data, x, y, w, and h is passed to +// Callback. The size of the whole image is passed as width and height. +type Callback func(data []uint16, x, y, w, h, width, height int16) + +// SetCallback registers the buffer and fn required for Callback. Callback can +// be called multiple times by calling Decode(). +func SetCallback(buf []uint16, fn Callback) { + callbackBuf = buf + callback = fn +} diff --git a/image/png/example_test.go b/image/png/example_test.go new file mode 100644 index 0000000..c437632 --- /dev/null +++ b/image/png/example_test.go @@ -0,0 +1,77 @@ +// Copyright 2016 The Go 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 png_test + +import ( + "encoding/base64" + "fmt" + "image" + "image/color" + "image/png" + "io" + "log" + "os" + "strings" +) + +const gopher = `iVBORw0KGgoAAAANSUhEUgAAAEsAAAA8CAAAAAALAhhPAAAFfUlEQVRYw62XeWwUVRzHf2+OPbo9d7tsWyiyaZti6eWGAhISoIGKECEKCAiJJkYTiUgTMYSIosYYBBIUIxoSPIINEBDi2VhwkQrVsj1ESgu9doHWdrul7ba73WNm3vOPtsseM9MdwvvrzTs+8/t95ze/33sI5BqiabU6m9En8oNjduLnAEDLUsQXFF8tQ5oxK3vmnNmDSMtrncks9Hhtt/qeWZapHb1ha3UqYSWVl2ZmpWgaXMXGohQAvmeop3bjTRtv6SgaK/Pb9/bFzUrYslbFAmHPp+3WhAYdr+7GN/YnpN46Opv55VDsJkoEpMrY/vO2BIYQ6LLvm0ThY3MzDzzeSJeeWNyTkgnIE5ePKsvKlcg/0T9QMzXalwXMlj54z4c0rh/mzEfr+FgWEz2w6uk8dkzFAgcARAgNp1ZYef8bH2AgvuStbc2/i6CiWGj98y2tw2l4FAXKkQBIf+exyRnteY83LfEwDQAYCoK+P6bxkZm/0966LxcAAILHB56kgD95PPxltuYcMtFTWw/FKkY/6Opf3GGd9ZF+Qp6mzJxzuRSractOmJrH1u8XTvWFHINNkLQLMR+XHXvfPPHw967raE1xxwtA36IMRfkAAG29/7mLuQcb2WOnsJReZGfpiHsSBX81cvMKywYZHhX5hFPtOqPGWZCXnhWGAu6lX91ElKXSalcLXu3UaOXVay57ZSe5f6Gpx7J2MXAsi7EqSp09b/MirKSyJfnfEEgeDjl8FgDAfvewP03zZ+AJ0m9aFRM8eEHBDRKjfcreDXnZdQuAxXpT2NRJ7xl3UkLBhuVGU16gZiGOgZmrSbRdqkILuL/yYoSXHHkl9KXgqNu3PB8oRg0geC5vFmLjad6mUyTKLmF3OtraWDIfACyXqmephaDABawfpi6tqqBZytfQMqOz6S09iWXhktrRaB8Xz4Yi/8gyABDm5NVe6qq/3VzPrcjELWrebVuyY2T7ar4zQyybUCtsQ5Es1FGaZVrRVQwAgHGW2ZCRZshI5bGQi7HesyE972pOSeMM0dSktlzxRdrlqb3Osa6CCS8IJoQQQgBAbTAa5l5epO34rJszibJI8rxLfGzcp1dRosutGeb2VDNgqYrwTiPNsLxXiPi3dz7LiS1WBRBDBOnqEjyy3aQb+/bLiJzz9dIkscVBBLxMfSEac7kO4Fpkngi0ruNBeSOal+u8jgOuqPz12nryMLCniEjtOOOmpt+KEIqsEdocJjYXwrh9OZqWJQyPCTo67LNS/TdxLAv6R5ZNK9npEjbYdT33gRo4o5oTqR34R+OmaSzDBWsAIPhuRcgyoteNi9gF0KzNYWVItPf2TLoXEg+7isNC7uJkgo1iQWOfRSP9NR11RtbZZ3OMG/VhL6jvx+J1m87+RCfJChAtEBQkSBX2PnSiihc/Twh3j0h7qdYQAoRVsRGmq7HU2QRbaxVGa1D6nIOqaIWRjyRZpHMQKWKpZM5feA+lzC4ZFultV8S6T0mzQGhQohi5I8iw+CsqBSxhFMuwyLgSwbghGb0AiIKkSDmGZVmJSiKihsiyOAUs70UkywooYP0bii9GdH4sfr1UNysd3fUyLLMQN+rsmo3grHl9VNJHbbwxoa47Vw5gupIqrZcjPh9R4Nye3nRDk199V+aetmvVtDRE8/+cbgAAgMIWGb3UA0MGLE9SCbWX670TDy1y98c3D27eppUjsZ6fql3jcd5rUe7+ZIlLNQny3Rd+E5Tct3WVhTM5RBCEdiEK0b6B+/ca2gYU393nFj/n1AygRQxPIUA043M42u85+z2SnssKrPl8Mx76NL3E6eXc3be7OD+H4WHbJkKI8AU8irbITQjZ+0hQcPEgId/Fn/pl9crKH02+5o2b9T/eMx7pKoskYgAAAABJRU5ErkJggg==` + +// gopherPNG creates an io.Reader by decoding the base64 encoded image data string in the gopher constant. +func gopherPNG() io.Reader { return base64.NewDecoder(base64.StdEncoding, strings.NewReader(gopher)) } + +func ExampleDecode() { + // This example uses png.Decode which can only decode PNG images. + // Consider using the general image.Decode as it can sniff and decode any registered image format. + img, err := png.Decode(gopherPNG()) + if err != nil { + log.Fatal(err) + } + + levels := []string{" ", "░", "▒", "▓", "█"} + + for y := img.Bounds().Min.Y; y < img.Bounds().Max.Y; y++ { + for x := img.Bounds().Min.X; x < img.Bounds().Max.X; x++ { + c := color.GrayModel.Convert(img.At(x, y)).(color.Gray) + level := c.Y / 51 // 51 * 5 = 255 + if level == 5 { + level-- + } + fmt.Print(levels[level]) + } + fmt.Print("\n") + } +} + +func ExampleEncode() { + const width, height = 256, 256 + + // Create a colored image of the given width and height. + img := image.NewNRGBA(image.Rect(0, 0, width, height)) + + for y := 0; y < height; y++ { + for x := 0; x < width; x++ { + img.Set(x, y, color.NRGBA{ + R: uint8((x + y) & 255), + G: uint8((x + y) << 1 & 255), + B: uint8((x + y) << 2 & 255), + A: 255, + }) + } + } + + f, err := os.Create("image.png") + if err != nil { + log.Fatal(err) + } + + if err := png.Encode(f, img); err != nil { + f.Close() + log.Fatal(err) + } + + if err := f.Close(); err != nil { + log.Fatal(err) + } +} diff --git a/image/png/fuzz.go b/image/png/fuzz.go new file mode 100644 index 0000000..6508533 --- /dev/null +++ b/image/png/fuzz.go @@ -0,0 +1,53 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gofuzz +// +build gofuzz + +package png + +import ( + "bytes" + "fmt" +) + +func Fuzz(data []byte) int { + cfg, err := DecodeConfig(bytes.NewReader(data)) + if err != nil { + return 0 + } + if cfg.Width*cfg.Height > 1e6 { + return 0 + } + img, err := Decode(bytes.NewReader(data)) + if err != nil { + return 0 + } + levels := []CompressionLevel{ + DefaultCompression, + NoCompression, + BestSpeed, + BestCompression, + } + for _, l := range levels { + var w bytes.Buffer + e := &Encoder{CompressionLevel: l} + err = e.Encode(&w, img) + if err != nil { + panic(err) + } + img1, err := Decode(&w) + if err != nil { + panic(err) + } + got := img1.Bounds() + want := img.Bounds() + if !got.Eq(want) { + fmt.Printf("bounds0: %#v\n", want) + fmt.Printf("bounds1: %#v\n", got) + panic("bounds have changed") + } + } + return 1 +} diff --git a/image/png/paeth.go b/image/png/paeth.go new file mode 100644 index 0000000..9ed6300 --- /dev/null +++ b/image/png/paeth.go @@ -0,0 +1,71 @@ +// Copyright 2012 The Go 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 png + +// intSize is either 32 or 64. +const intSize = 32 << (^uint(0) >> 63) + +func abs(x int) int { + // m := -1 if x < 0. m := 0 otherwise. + m := x >> (intSize - 1) + + // In two's complement representation, the negative number + // of any number (except the smallest one) can be computed + // by flipping all the bits and add 1. This is faster than + // code with a branch. + // See Hacker's Delight, section 2-4. + return (x ^ m) - m +} + +// paeth implements the Paeth filter function, as per the PNG specification. +func paeth(a, b, c uint8) uint8 { + // This is an optimized version of the sample code in the PNG spec. + // For example, the sample code starts with: + // p := int(a) + int(b) - int(c) + // pa := abs(p - int(a)) + // but the optimized form uses fewer arithmetic operations: + // pa := int(b) - int(c) + // pa = abs(pa) + pc := int(c) + pa := int(b) - pc + pb := int(a) - pc + pc = abs(pa + pb) + pa = abs(pa) + pb = abs(pb) + if pa <= pb && pa <= pc { + return a + } else if pb <= pc { + return b + } + return c +} + +// filterPaeth applies the Paeth filter to the cdat slice. +// cdat is the current row's data, pdat is the previous row's data. +func filterPaeth(cdat, pdat []byte, bytesPerPixel int) { + var a, b, c, pa, pb, pc int + for i := 0; i < bytesPerPixel; i++ { + a, c = 0, 0 + for j := i; j < len(cdat); j += bytesPerPixel { + b = int(pdat[j]) + pa = b - c + pb = a - c + pc = abs(pa + pb) + pa = abs(pa) + pb = abs(pb) + if pa <= pb && pa <= pc { + // No-op. + } else if pb <= pc { + a = b + } else { + a = c + } + a += int(cdat[j]) + a &= 0xff + cdat[j] = uint8(a) + c = b + } + } +} diff --git a/image/png/paeth_test.go b/image/png/paeth_test.go new file mode 100644 index 0000000..cfc1896 --- /dev/null +++ b/image/png/paeth_test.go @@ -0,0 +1,91 @@ +// Copyright 2012 The Go 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 png + +import ( + "bytes" + "math/rand" + "testing" +) + +func slowAbs(x int) int { + if x < 0 { + return -x + } + return x +} + +// slowPaeth is a slow but simple implementation of the Paeth function. +// It is a straight port of the sample code in the PNG spec, section 9.4. +func slowPaeth(a, b, c uint8) uint8 { + p := int(a) + int(b) - int(c) + pa := slowAbs(p - int(a)) + pb := slowAbs(p - int(b)) + pc := slowAbs(p - int(c)) + if pa <= pb && pa <= pc { + return a + } else if pb <= pc { + return b + } + return c +} + +// slowFilterPaeth is a slow but simple implementation of func filterPaeth. +func slowFilterPaeth(cdat, pdat []byte, bytesPerPixel int) { + for i := 0; i < bytesPerPixel; i++ { + cdat[i] += paeth(0, pdat[i], 0) + } + for i := bytesPerPixel; i < len(cdat); i++ { + cdat[i] += paeth(cdat[i-bytesPerPixel], pdat[i], pdat[i-bytesPerPixel]) + } +} + +func TestPaeth(t *testing.T) { + for a := 0; a < 256; a += 15 { + for b := 0; b < 256; b += 15 { + for c := 0; c < 256; c += 15 { + got := paeth(uint8(a), uint8(b), uint8(c)) + want := slowPaeth(uint8(a), uint8(b), uint8(c)) + if got != want { + t.Errorf("a, b, c = %d, %d, %d: got %d, want %d", a, b, c, got, want) + } + } + } + } +} + +func BenchmarkPaeth(b *testing.B) { + for i := 0; i < b.N; i++ { + paeth(uint8(i>>16), uint8(i>>8), uint8(i)) + } +} + +func TestPaethDecode(t *testing.T) { + pdat0 := make([]byte, 32) + pdat1 := make([]byte, 32) + pdat2 := make([]byte, 32) + cdat0 := make([]byte, 32) + cdat1 := make([]byte, 32) + cdat2 := make([]byte, 32) + r := rand.New(rand.NewSource(1)) + for bytesPerPixel := 1; bytesPerPixel <= 8; bytesPerPixel++ { + for i := 0; i < 100; i++ { + for j := range pdat0 { + pdat0[j] = uint8(r.Uint32()) + cdat0[j] = uint8(r.Uint32()) + } + copy(pdat1, pdat0) + copy(pdat2, pdat0) + copy(cdat1, cdat0) + copy(cdat2, cdat0) + filterPaeth(cdat1, pdat1, bytesPerPixel) + slowFilterPaeth(cdat2, pdat2, bytesPerPixel) + if !bytes.Equal(cdat1, cdat2) { + t.Errorf("bytesPerPixel: %d\npdat0: % x\ncdat0: % x\ngot: % x\nwant: % x", bytesPerPixel, pdat0, cdat0, cdat1, cdat2) + break + } + } + } +} diff --git a/image/png/reader.go b/image/png/reader.go new file mode 100644 index 0000000..2b6af06 --- /dev/null +++ b/image/png/reader.go @@ -0,0 +1,1044 @@ +// 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 LICENSE file. + +// Package png implements a PNG image decoder and encoder. +// +// The PNG specification is at https://www.w3.org/TR/PNG/. +package png + +import ( + "encoding/binary" + "fmt" + "hash" + "hash/crc32" + "image" + "image/color" + "io" + + "tinygo.org/x/drivers/image/internal/compress/zlib" +) + +// Color type, as per the PNG spec. +const ( + ctGrayscale = 0 + ctTrueColor = 2 + ctPaletted = 3 + ctGrayscaleAlpha = 4 + ctTrueColorAlpha = 6 +) + +// A cb is a combination of color type and bit depth. +const ( + cbInvalid = iota + cbG1 + cbG2 + cbG4 + cbG8 + cbGA8 + cbTC8 + cbP1 + cbP2 + cbP4 + cbP8 + cbTCA8 + cbG16 + cbGA16 + cbTC16 + cbTCA16 +) + +func cbPaletted(cb int) bool { + return cbP1 <= cb && cb <= cbP8 +} + +// Filter type, as per the PNG spec. +const ( + ftNone = 0 + ftSub = 1 + ftUp = 2 + ftAverage = 3 + ftPaeth = 4 + nFilter = 5 +) + +// Interlace type. +const ( + itNone = 0 + itAdam7 = 1 +) + +// interlaceScan defines the placement and size of a pass for Adam7 interlacing. +type interlaceScan struct { + xFactor, yFactor, xOffset, yOffset int +} + +// interlacing defines Adam7 interlacing, with 7 passes of reduced images. +// See https://www.w3.org/TR/PNG/#8Interlace +var interlacing = []interlaceScan{ + {8, 8, 0, 0}, + {8, 8, 4, 0}, + {4, 8, 0, 4}, + {4, 4, 2, 0}, + {2, 4, 0, 2}, + {2, 2, 1, 0}, + {1, 2, 0, 1}, +} + +// Decoding stage. +// The PNG specification says that the IHDR, PLTE (if present), tRNS (if +// present), IDAT and IEND chunks must appear in that order. There may be +// multiple IDAT chunks, and IDAT chunks must be sequential (i.e. they may not +// have any other chunks between them). +// https://www.w3.org/TR/PNG/#5ChunkOrdering +const ( + dsStart = iota + dsSeenIHDR + dsSeenPLTE + dsSeentRNS + dsSeenIDAT + dsSeenIEND +) + +const pngHeader = "\x89PNG\r\n\x1a\n" + +type decoder struct { + r io.Reader + img image.Image + crc hash.Hash32 + width, height int + depth int + palette color.Palette + cb int + stage int + idatLength uint32 + tmp [3 * 256]byte + interlace int + + // useTransparent and transparent are used for grayscale and truecolor + // transparency, as opposed to palette transparency. + useTransparent bool + transparent [6]byte +} + +// A FormatError reports that the input is not a valid PNG. +type FormatError string + +func (e FormatError) Error() string { return "png: invalid format: " + string(e) } + +var chunkOrderError = FormatError("chunk out of order") + +// An UnsupportedError reports that the input uses a valid but unimplemented PNG feature. +type UnsupportedError string + +func (e UnsupportedError) Error() string { return "png: unsupported feature: " + string(e) } + +func min(a, b int) int { + if a < b { + return a + } + return b +} + +func (d *decoder) parseIHDR(length uint32) error { + if length != 13 { + return FormatError("bad IHDR length") + } + if _, err := io.ReadFull(d.r, d.tmp[:13]); err != nil { + return err + } + d.crc.Write(d.tmp[:13]) + if d.tmp[10] != 0 { + return UnsupportedError("compression method") + } + if d.tmp[11] != 0 { + return UnsupportedError("filter method") + } + if d.tmp[12] != itNone && d.tmp[12] != itAdam7 { + return FormatError("invalid interlace method") + } + d.interlace = int(d.tmp[12]) + + w := int32(binary.BigEndian.Uint32(d.tmp[0:4])) + h := int32(binary.BigEndian.Uint32(d.tmp[4:8])) + if w <= 0 || h <= 0 { + return FormatError("non-positive dimension") + } + nPixels64 := int64(w) * int64(h) + nPixels := int(nPixels64) + if nPixels64 != int64(nPixels) { + return UnsupportedError("dimension overflow") + } + // There can be up to 8 bytes per pixel, for 16 bits per channel RGBA. + if nPixels != (nPixels*8)/8 { + return UnsupportedError("dimension overflow") + } + + d.cb = cbInvalid + d.depth = int(d.tmp[8]) + switch d.depth { + case 1: + switch d.tmp[9] { + case ctGrayscale: + d.cb = cbG1 + case ctPaletted: + d.cb = cbP1 + } + case 2: + switch d.tmp[9] { + case ctGrayscale: + d.cb = cbG2 + case ctPaletted: + d.cb = cbP2 + } + case 4: + switch d.tmp[9] { + case ctGrayscale: + d.cb = cbG4 + case ctPaletted: + d.cb = cbP4 + } + case 8: + switch d.tmp[9] { + case ctGrayscale: + d.cb = cbG8 + case ctTrueColor: + d.cb = cbTC8 + case ctPaletted: + d.cb = cbP8 + case ctGrayscaleAlpha: + d.cb = cbGA8 + case ctTrueColorAlpha: + d.cb = cbTCA8 + } + case 16: + switch d.tmp[9] { + case ctGrayscale: + d.cb = cbG16 + case ctTrueColor: + d.cb = cbTC16 + case ctGrayscaleAlpha: + d.cb = cbGA16 + case ctTrueColorAlpha: + d.cb = cbTCA16 + } + } + if d.cb == cbInvalid { + return UnsupportedError(fmt.Sprintf("bit depth %d, color type %d", d.tmp[8], d.tmp[9])) + } + d.width, d.height = int(w), int(h) + return d.verifyChecksum() +} + +func (d *decoder) parsePLTE(length uint32) error { + np := int(length / 3) // The number of palette entries. + if length%3 != 0 || np <= 0 || np > 256 || np > 1< 256 { + return FormatError("bad tRNS length") + } + n, err := io.ReadFull(d.r, d.tmp[:length]) + if err != nil { + return err + } + d.crc.Write(d.tmp[:n]) + + if len(d.palette) < n { + d.palette = d.palette[:n] + } + for i := 0; i < n; i++ { + rgba := d.palette[i].(color.RGBA) + d.palette[i] = color.NRGBA{rgba.R, rgba.G, rgba.B, d.tmp[i]} + } + + default: + return FormatError("tRNS, color type mismatch") + } + return d.verifyChecksum() +} + +// Read presents one or more IDAT chunks as one continuous stream (minus the +// intermediate chunk headers and footers). If the PNG data looked like: +// ... len0 IDAT xxx crc0 len1 IDAT yy crc1 len2 IEND crc2 +// then this reader presents xxxyy. For well-formed PNG data, the decoder state +// immediately before the first Read call is that d.r is positioned between the +// first IDAT and xxx, and the decoder state immediately after the last Read +// call is that d.r is positioned between yy and crc1. +func (d *decoder) Read(p []byte) (int, error) { + if len(p) == 0 { + return 0, nil + } + for d.idatLength == 0 { + // We have exhausted an IDAT chunk. Verify the checksum of that chunk. + if err := d.verifyChecksum(); err != nil { + return 0, err + } + // Read the length and chunk type of the next chunk, and check that + // it is an IDAT chunk. + if _, err := io.ReadFull(d.r, d.tmp[:8]); err != nil { + return 0, err + } + d.idatLength = binary.BigEndian.Uint32(d.tmp[:4]) + if string(d.tmp[4:8]) != "IDAT" { + return 0, FormatError("not enough pixel data") + } + d.crc.Reset() + d.crc.Write(d.tmp[4:8]) + } + if int(d.idatLength) < 0 { + return 0, UnsupportedError("IDAT chunk length overflow") + } + n, err := d.r.Read(p[:min(len(p), int(d.idatLength))]) + d.crc.Write(p[:n]) + d.idatLength -= uint32(n) + return n, err +} + +// decode decodes the IDAT data into an image. +func (d *decoder) decode() (image.Image, error) { + r, err := zlib.NewReader(d) + if err != nil { + return nil, err + } + defer r.Close() + var img image.Image + if d.interlace == itNone { + img, err = d.readImagePass(r, 0, false) + if err != nil { + return nil, err + } + } else if d.interlace == itAdam7 { + // Allocate a blank image of the full size. + img, err = d.readImagePass(nil, 0, true) + if err != nil { + return nil, err + } + for pass := 0; pass < 7; pass++ { + imagePass, err := d.readImagePass(r, pass, false) + if err != nil { + return nil, err + } + if imagePass != nil { + d.mergePassInto(img, imagePass, pass) + } + } + } + + // Check for EOF, to verify the zlib checksum. + n := 0 + for i := 0; n == 0 && err == nil; i++ { + if i == 100 { + return nil, io.ErrNoProgress + } + n, err = r.Read(d.tmp[:1]) + } + if err != nil && err != io.EOF { + return nil, FormatError(err.Error()) + } + if n != 0 || d.idatLength != 0 { + return nil, FormatError("too much pixel data") + } + + return img, nil +} + +// readImagePass reads a single image pass, sized according to the pass number. +func (d *decoder) readImagePass(r io.Reader, pass int, allocateOnly bool) (image.Image, error) { + bitsPerPixel := 0 + pixOffset := 0 + var ( + gray *image.Gray + rgba *image.RGBA + paletted *image.Paletted + nrgba *image.NRGBA + gray16 *image.Gray16 + rgba64 *image.RGBA64 + nrgba64 *image.NRGBA64 + img image.Image + ) + width, height := d.width, d.height + if d.interlace == itAdam7 && !allocateOnly { + p := interlacing[pass] + // Add the multiplication factor and subtract one, effectively rounding up. + width = (width - p.xOffset + p.xFactor - 1) / p.xFactor + height = (height - p.yOffset + p.yFactor - 1) / p.yFactor + // A PNG image can't have zero width or height, but for an interlaced + // image, an individual pass might have zero width or height. If so, we + // shouldn't even read a per-row filter type byte, so return early. + if width == 0 || height == 0 { + return nil, nil + } + } + + // Minimizes memory usage in order to run on TinyGo. In order to keep the + // amount of code changes down, the image is created as a 1 x 1 image at + // this point. + width2, height2 := width, height + width, height = 1, 1 + switch d.cb { + case cbG1, cbG2, cbG4, cbG8: + bitsPerPixel = d.depth + if d.useTransparent { + nrgba = image.NewNRGBA(image.Rect(0, 0, width, height)) + img = nrgba + } else { + gray = image.NewGray(image.Rect(0, 0, width, height)) + img = gray + } + case cbGA8: + bitsPerPixel = 16 + nrgba = image.NewNRGBA(image.Rect(0, 0, width, height)) + img = nrgba + case cbTC8: + bitsPerPixel = 24 + if d.useTransparent { + nrgba = image.NewNRGBA(image.Rect(0, 0, width, height)) + img = nrgba + } else { + rgba = image.NewRGBA(image.Rect(0, 0, width, height)) + img = rgba + } + case cbP1, cbP2, cbP4, cbP8: + bitsPerPixel = d.depth + paletted = image.NewPaletted(image.Rect(0, 0, width, height), d.palette) + img = paletted + case cbTCA8: + bitsPerPixel = 32 + nrgba = image.NewNRGBA(image.Rect(0, 0, width, height)) + img = nrgba + case cbG16: + bitsPerPixel = 16 + if d.useTransparent { + nrgba64 = image.NewNRGBA64(image.Rect(0, 0, width, height)) + img = nrgba64 + } else { + gray16 = image.NewGray16(image.Rect(0, 0, width, height)) + img = gray16 + } + case cbGA16: + bitsPerPixel = 32 + nrgba64 = image.NewNRGBA64(image.Rect(0, 0, width, height)) + img = nrgba64 + case cbTC16: + bitsPerPixel = 48 + if d.useTransparent { + nrgba64 = image.NewNRGBA64(image.Rect(0, 0, width, height)) + img = nrgba64 + } else { + rgba64 = image.NewRGBA64(image.Rect(0, 0, width, height)) + img = rgba64 + } + case cbTCA16: + bitsPerPixel = 64 + nrgba64 = image.NewNRGBA64(image.Rect(0, 0, width, height)) + img = nrgba64 + } + width, height = width2, height2 + if allocateOnly { + return img, nil + } + bytesPerPixel := (bitsPerPixel + 7) / 8 + + // The +1 is for the per-row filter type, which is at cr[0]. + rowSize := 1 + (int64(bitsPerPixel)*int64(width)+7)/8 + if rowSize != int64(int(rowSize)) { + return nil, UnsupportedError("dimension overflow") + } + // cr and pr are the bytes for the current and previous row. + cr := make([]uint8, rowSize) + pr := make([]uint8, rowSize) + + for y := 0; y < height; y++ { + // Read the decompressed bytes. + _, err := io.ReadFull(r, cr) + if err != nil { + if err == io.EOF || err == io.ErrUnexpectedEOF { + return nil, FormatError("not enough pixel data") + } + return nil, err + } + + // Apply the filter. + cdat := cr[1:] + pdat := pr[1:] + switch cr[0] { + case ftNone: + // No-op. + case ftSub: + for i := bytesPerPixel; i < len(cdat); i++ { + cdat[i] += cdat[i-bytesPerPixel] + } + case ftUp: + for i, p := range pdat { + cdat[i] += p + } + case ftAverage: + // The first column has no column to the left of it, so it is a + // special case. We know that the first column exists because we + // check above that width != 0, and so len(cdat) != 0. + for i := 0; i < bytesPerPixel; i++ { + cdat[i] += pdat[i] / 2 + } + for i := bytesPerPixel; i < len(cdat); i++ { + cdat[i] += uint8((int(cdat[i-bytesPerPixel]) + int(pdat[i])) / 2) + } + case ftPaeth: + filterPaeth(cdat, pdat, bytesPerPixel) + default: + return nil, FormatError("bad filter type") + } + + // Convert from bytes to colors. + switch d.cb { + case cbG1: + if d.useTransparent { + ty := d.transparent[1] + for x := 0; x < width; x += 8 { + b := cdat[x/8] + for x2 := 0; x2 < 8 && x+x2 < width; x2++ { + ycol := (b >> 7) * 0xff + acol := uint8(0xff) + if ycol == ty { + acol = 0x00 + } + nrgba.SetNRGBA(x+x2, y, color.NRGBA{ycol, ycol, ycol, acol}) + b <<= 1 + } + } + } else { + for x := 0; x < width; x += 8 { + b := cdat[x/8] + for x2 := 0; x2 < 8 && x+x2 < width; x2++ { + gray.SetGray(x+x2, y, color.Gray{(b >> 7) * 0xff}) + b <<= 1 + } + } + } + case cbG2: + if d.useTransparent { + ty := d.transparent[1] + for x := 0; x < width; x += 4 { + b := cdat[x/4] + for x2 := 0; x2 < 4 && x+x2 < width; x2++ { + ycol := (b >> 6) * 0x55 + acol := uint8(0xff) + if ycol == ty { + acol = 0x00 + } + nrgba.SetNRGBA(x+x2, y, color.NRGBA{ycol, ycol, ycol, acol}) + b <<= 2 + } + } + } else { + for x := 0; x < width; x += 4 { + b := cdat[x/4] + for x2 := 0; x2 < 4 && x+x2 < width; x2++ { + gray.SetGray(x+x2, y, color.Gray{(b >> 6) * 0x55}) + b <<= 2 + } + } + } + case cbG4: + if d.useTransparent { + ty := d.transparent[1] + for x := 0; x < width; x += 2 { + b := cdat[x/2] + for x2 := 0; x2 < 2 && x+x2 < width; x2++ { + ycol := (b >> 4) * 0x11 + acol := uint8(0xff) + if ycol == ty { + acol = 0x00 + } + nrgba.SetNRGBA(x+x2, y, color.NRGBA{ycol, ycol, ycol, acol}) + b <<= 4 + } + } + } else { + for x := 0; x < width; x += 2 { + b := cdat[x/2] + for x2 := 0; x2 < 2 && x+x2 < width; x2++ { + gray.SetGray(x+x2, y, color.Gray{(b >> 4) * 0x11}) + b <<= 4 + } + } + } + case cbG8: + if d.useTransparent { + ty := d.transparent[1] + for x := 0; x < width; x++ { + ycol := cdat[x] + acol := uint8(0xff) + if ycol == ty { + acol = 0x00 + } + nrgba.SetNRGBA(x, y, color.NRGBA{ycol, ycol, ycol, acol}) + } + } else { + copy(gray.Pix[pixOffset:], cdat) + pixOffset += gray.Stride + } + case cbGA8: + for x := 0; x < width; x++ { + ycol := cdat[2*x+0] + nrgba.SetNRGBA(x, y, color.NRGBA{ycol, ycol, ycol, cdat[2*x+1]}) + } + case cbTC8: + if d.useTransparent { + pix, i, j := nrgba.Pix, pixOffset, 0 + tr, tg, tb := d.transparent[1], d.transparent[3], d.transparent[5] + for x := 0; x < width; x++ { + r := cdat[j+0] + g := cdat[j+1] + b := cdat[j+2] + a := uint8(0xff) + if r == tr && g == tg && b == tb { + a = 0x00 + } + pix[i+0] = r + pix[i+1] = g + pix[i+2] = b + pix[i+3] = a + i += 4 + j += 3 + } + pixOffset += nrgba.Stride + } else { + for x := 0; x < width; x++ { + r := uint16(cdat[x*3+0]) << 8 + g := uint16(cdat[x*3+1]) << 8 + b := uint16(cdat[x*3+2]) << 8 + callbackBuf[x] = uint16((r & 0xF800) + ((g & 0xFC00) >> 5) + ((b & 0xF800) >> 11)) + } + callback(callbackBuf[:width*1], 0, int16(y), int16(width), 1, int16(width), int16(height)) + pixOffset += rgba.Stride + } + case cbP1: + for x := 0; x < width; x += 8 { + b := cdat[x/8] + for x2 := 0; x2 < 8 && x+x2 < width; x2++ { + idx := b >> 7 + if len(paletted.Palette) <= int(idx) { + paletted.Palette = paletted.Palette[:int(idx)+1] + } + paletted.SetColorIndex(x+x2, y, idx) + b <<= 1 + } + } + case cbP2: + for x := 0; x < width; x += 4 { + b := cdat[x/4] + for x2 := 0; x2 < 4 && x+x2 < width; x2++ { + idx := b >> 6 + if len(paletted.Palette) <= int(idx) { + paletted.Palette = paletted.Palette[:int(idx)+1] + } + paletted.SetColorIndex(x+x2, y, idx) + b <<= 2 + } + } + case cbP4: + for x := 0; x < width; x += 2 { + b := cdat[x/2] + for x2 := 0; x2 < 2 && x+x2 < width; x2++ { + idx := b >> 4 + if len(paletted.Palette) <= int(idx) { + paletted.Palette = paletted.Palette[:int(idx)+1] + } + paletted.SetColorIndex(x+x2, y, idx) + b <<= 4 + } + } + case cbP8: + if len(paletted.Palette) != 256 { + for x := 0; x < width; x++ { + if len(paletted.Palette) <= int(cdat[x]) { + paletted.Palette = paletted.Palette[:int(cdat[x])+1] + } + } + } + copy(paletted.Pix[pixOffset:], cdat) + pixOffset += paletted.Stride + case cbTCA8: + copy(nrgba.Pix[:], cdat) + for x := 0; x < width; x++ { + r := uint16(cdat[x*3+0]) << 8 + g := uint16(cdat[x*3+1]) << 8 + b := uint16(cdat[x*3+2]) << 8 + callbackBuf[x] = uint16((r & 0xF800) + ((g & 0xFC00) >> 5) + ((b & 0xF800) >> 11)) + } + callback(callbackBuf[:width*1], 0, int16(y), int16(width), 1, int16(width), int16(height)) + pixOffset += nrgba.Stride + case cbG16: + if d.useTransparent { + ty := uint16(d.transparent[0])<<8 | uint16(d.transparent[1]) + for x := 0; x < width; x++ { + ycol := uint16(cdat[2*x+0])<<8 | uint16(cdat[2*x+1]) + acol := uint16(0xffff) + if ycol == ty { + acol = 0x0000 + } + nrgba64.SetNRGBA64(x, y, color.NRGBA64{ycol, ycol, ycol, acol}) + } + } else { + for x := 0; x < width; x++ { + ycol := uint16(cdat[2*x+0])<<8 | uint16(cdat[2*x+1]) + gray16.SetGray16(x, y, color.Gray16{ycol}) + } + } + case cbGA16: + for x := 0; x < width; x++ { + ycol := uint16(cdat[4*x+0])<<8 | uint16(cdat[4*x+1]) + acol := uint16(cdat[4*x+2])<<8 | uint16(cdat[4*x+3]) + nrgba64.SetNRGBA64(x, y, color.NRGBA64{ycol, ycol, ycol, acol}) + } + case cbTC16: + if d.useTransparent { + tr := uint16(d.transparent[0])<<8 | uint16(d.transparent[1]) + tg := uint16(d.transparent[2])<<8 | uint16(d.transparent[3]) + tb := uint16(d.transparent[4])<<8 | uint16(d.transparent[5]) + for x := 0; x < width; x++ { + rcol := uint16(cdat[6*x+0])<<8 | uint16(cdat[6*x+1]) + gcol := uint16(cdat[6*x+2])<<8 | uint16(cdat[6*x+3]) + bcol := uint16(cdat[6*x+4])<<8 | uint16(cdat[6*x+5]) + acol := uint16(0xffff) + if rcol == tr && gcol == tg && bcol == tb { + acol = 0x0000 + } + nrgba64.SetNRGBA64(x, y, color.NRGBA64{rcol, gcol, bcol, acol}) + } + } else { + for x := 0; x < width; x++ { + rcol := uint16(cdat[6*x+0])<<8 | uint16(cdat[6*x+1]) + gcol := uint16(cdat[6*x+2])<<8 | uint16(cdat[6*x+3]) + bcol := uint16(cdat[6*x+4])<<8 | uint16(cdat[6*x+5]) + rgba64.SetRGBA64(x, y, color.RGBA64{rcol, gcol, bcol, 0xffff}) + } + } + case cbTCA16: + for x := 0; x < width; x++ { + rcol := uint16(cdat[8*x+0])<<8 | uint16(cdat[8*x+1]) + gcol := uint16(cdat[8*x+2])<<8 | uint16(cdat[8*x+3]) + bcol := uint16(cdat[8*x+4])<<8 | uint16(cdat[8*x+5]) + acol := uint16(cdat[8*x+6])<<8 | uint16(cdat[8*x+7]) + nrgba64.SetNRGBA64(x, y, color.NRGBA64{rcol, gcol, bcol, acol}) + } + } + + // The current row for y is the previous row for y+1. + pr, cr = cr, pr + } + + return img, nil +} + +// mergePassInto merges a single pass into a full sized image. +func (d *decoder) mergePassInto(dst image.Image, src image.Image, pass int) { + p := interlacing[pass] + var ( + srcPix []uint8 + dstPix []uint8 + stride int + rect image.Rectangle + bytesPerPixel int + ) + switch target := dst.(type) { + case *image.Alpha: + srcPix = src.(*image.Alpha).Pix + dstPix, stride, rect = target.Pix, target.Stride, target.Rect + bytesPerPixel = 1 + case *image.Alpha16: + srcPix = src.(*image.Alpha16).Pix + dstPix, stride, rect = target.Pix, target.Stride, target.Rect + bytesPerPixel = 2 + case *image.Gray: + srcPix = src.(*image.Gray).Pix + dstPix, stride, rect = target.Pix, target.Stride, target.Rect + bytesPerPixel = 1 + case *image.Gray16: + srcPix = src.(*image.Gray16).Pix + dstPix, stride, rect = target.Pix, target.Stride, target.Rect + bytesPerPixel = 2 + case *image.NRGBA: + srcPix = src.(*image.NRGBA).Pix + dstPix, stride, rect = target.Pix, target.Stride, target.Rect + bytesPerPixel = 4 + case *image.NRGBA64: + srcPix = src.(*image.NRGBA64).Pix + dstPix, stride, rect = target.Pix, target.Stride, target.Rect + bytesPerPixel = 8 + case *image.Paletted: + srcPix = src.(*image.Paletted).Pix + dstPix, stride, rect = target.Pix, target.Stride, target.Rect + bytesPerPixel = 1 + case *image.RGBA: + srcPix = src.(*image.RGBA).Pix + dstPix, stride, rect = target.Pix, target.Stride, target.Rect + bytesPerPixel = 4 + case *image.RGBA64: + srcPix = src.(*image.RGBA64).Pix + dstPix, stride, rect = target.Pix, target.Stride, target.Rect + bytesPerPixel = 8 + } + s, bounds := 0, src.Bounds() + for y := bounds.Min.Y; y < bounds.Max.Y; y++ { + dBase := (y*p.yFactor+p.yOffset-rect.Min.Y)*stride + (p.xOffset-rect.Min.X)*bytesPerPixel + for x := bounds.Min.X; x < bounds.Max.X; x++ { + d := dBase + x*p.xFactor*bytesPerPixel + copy(dstPix[d:], srcPix[s:s+bytesPerPixel]) + s += bytesPerPixel + } + } +} + +func (d *decoder) parseIDAT(length uint32) (err error) { + d.idatLength = length + d.img, err = d.decode() + if err != nil { + return err + } + return d.verifyChecksum() +} + +func (d *decoder) parseIEND(length uint32) error { + if length != 0 { + return FormatError("bad IEND length") + } + return d.verifyChecksum() +} + +func (d *decoder) parseChunk() error { + // Read the length and chunk type. + if _, err := io.ReadFull(d.r, d.tmp[:8]); err != nil { + return err + } + length := binary.BigEndian.Uint32(d.tmp[:4]) + d.crc.Reset() + d.crc.Write(d.tmp[4:8]) + + // Read the chunk data. + switch string(d.tmp[4:8]) { + case "IHDR": + if d.stage != dsStart { + return chunkOrderError + } + d.stage = dsSeenIHDR + return d.parseIHDR(length) + case "PLTE": + if d.stage != dsSeenIHDR { + return chunkOrderError + } + d.stage = dsSeenPLTE + return d.parsePLTE(length) + case "tRNS": + if cbPaletted(d.cb) { + if d.stage != dsSeenPLTE { + return chunkOrderError + } + } else if d.stage != dsSeenIHDR { + return chunkOrderError + } + d.stage = dsSeentRNS + return d.parsetRNS(length) + case "IDAT": + if d.stage < dsSeenIHDR || d.stage > dsSeenIDAT || (d.stage == dsSeenIHDR && cbPaletted(d.cb)) { + return chunkOrderError + } else if d.stage == dsSeenIDAT { + // Ignore trailing zero-length or garbage IDAT chunks. + // + // This does not affect valid PNG images that contain multiple IDAT + // chunks, since the first call to parseIDAT below will consume all + // consecutive IDAT chunks required for decoding the image. + break + } + d.stage = dsSeenIDAT + return d.parseIDAT(length) + case "IEND": + if d.stage != dsSeenIDAT { + return chunkOrderError + } + d.stage = dsSeenIEND + return d.parseIEND(length) + } + if length > 0x7fffffff { + return FormatError(fmt.Sprintf("Bad chunk length: %d", length)) + } + // Ignore this chunk (of a known length). + var ignored [4096]byte + for length > 0 { + n, err := io.ReadFull(d.r, ignored[:min(len(ignored), int(length))]) + if err != nil { + return err + } + d.crc.Write(ignored[:n]) + length -= uint32(n) + } + return d.verifyChecksum() +} + +func (d *decoder) verifyChecksum() error { + if _, err := io.ReadFull(d.r, d.tmp[:4]); err != nil { + return err + } + if binary.BigEndian.Uint32(d.tmp[:4]) != d.crc.Sum32() { + return FormatError("invalid checksum") + } + return nil +} + +func (d *decoder) checkHeader() error { + _, err := io.ReadFull(d.r, d.tmp[:len(pngHeader)]) + if err != nil { + return err + } + if string(d.tmp[:len(pngHeader)]) != pngHeader { + return FormatError("not a PNG file") + } + return nil +} + +// Decode reads a PNG image from r. Different from the standard package, the +// decoded result will be received by the callback set by SetCallback(). +func Decode(r io.Reader) error { + d := &decoder{ + r: r, + crc: crc32.NewIEEE(), + } + if err := d.checkHeader(); err != nil { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + return err + } + for d.stage != dsSeenIEND { + if err := d.parseChunk(); err != nil { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + return err + } + } + return nil +} + +// DecodeConfig returns the color model and dimensions of a PNG image without +// decoding the entire image. +func DecodeConfig(r io.Reader) (image.Config, error) { + d := &decoder{ + r: r, + crc: crc32.NewIEEE(), + } + if err := d.checkHeader(); err != nil { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + return image.Config{}, err + } + for { + if err := d.parseChunk(); err != nil { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + return image.Config{}, err + } + paletted := cbPaletted(d.cb) + if d.stage == dsSeenIHDR && !paletted { + break + } + if d.stage == dsSeenPLTE && paletted { + break + } + } + var cm color.Model + switch d.cb { + case cbG1, cbG2, cbG4, cbG8: + cm = color.GrayModel + case cbGA8: + cm = color.NRGBAModel + case cbTC8: + cm = color.RGBAModel + case cbP1, cbP2, cbP4, cbP8: + cm = d.palette + case cbTCA8: + cm = color.NRGBAModel + case cbG16: + cm = color.Gray16Model + case cbGA16: + cm = color.NRGBA64Model + case cbTC16: + cm = color.RGBA64Model + case cbTCA16: + cm = color.NRGBA64Model + } + return image.Config{ + ColorModel: cm, + Width: d.width, + Height: d.height, + }, nil +} diff --git a/image/png/reader_test.go b/image/png/reader_test.go new file mode 100644 index 0000000..3937685 --- /dev/null +++ b/image/png/reader_test.go @@ -0,0 +1,825 @@ +// 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 LICENSE file. + +package png + +import ( + "bufio" + "bytes" + "fmt" + "image" + "image/color" + "io" + "os" + "reflect" + "strings" + "testing" +) + +var filenames = []string{ + "basn0g01", + "basn0g01-30", + "basn0g02", + "basn0g02-29", + "basn0g04", + "basn0g04-31", + "basn0g08", + "basn0g16", + "basn2c08", + "basn2c16", + "basn3p01", + "basn3p02", + "basn3p04", + "basn3p04-31i", + "basn3p08", + "basn3p08-trns", + "basn4a08", + "basn4a16", + "basn6a08", + "basn6a16", + "ftbbn0g01", + "ftbbn0g02", + "ftbbn0g04", + "ftbbn2c16", + "ftbbn3p08", + "ftbgn2c16", + "ftbgn3p08", + "ftbrn2c08", + "ftbwn0g16", + "ftbwn3p08", + "ftbyn3p08", + "ftp0n0g08", + "ftp0n2c08", + "ftp0n3p08", + "ftp1n3p08", +} + +var filenamesPaletted = []string{ + "basn3p01", + "basn3p02", + "basn3p04", + "basn3p08", + "basn3p08-trns", +} + +var filenamesShort = []string{ + "basn0g01", + "basn0g04-31", + "basn6a16", +} + +func readPNG(filename string) (image.Image, error) { + f, err := os.Open(filename) + if err != nil { + return nil, err + } + defer f.Close() + return Decode(f) +} + +// fakebKGDs maps from filenames to fake bKGD chunks for our approximation to +// the sng command-line tool. Package png doesn't keep that metadata when +// png.Decode returns an image.Image. +var fakebKGDs = map[string]string{ + "ftbbn0g01": "bKGD {gray: 0;}\n", + "ftbbn0g02": "bKGD {gray: 0;}\n", + "ftbbn0g04": "bKGD {gray: 0;}\n", + "ftbbn2c16": "bKGD {red: 0; green: 0; blue: 65535;}\n", + "ftbbn3p08": "bKGD {index: 245}\n", + "ftbgn2c16": "bKGD {red: 0; green: 65535; blue: 0;}\n", + "ftbgn3p08": "bKGD {index: 245}\n", + "ftbrn2c08": "bKGD {red: 255; green: 0; blue: 0;}\n", + "ftbwn0g16": "bKGD {gray: 65535;}\n", + "ftbwn3p08": "bKGD {index: 0}\n", + "ftbyn3p08": "bKGD {index: 245}\n", +} + +// fakegAMAs maps from filenames to fake gAMA chunks for our approximation to +// the sng command-line tool. Package png doesn't keep that metadata when +// png.Decode returns an image.Image. +var fakegAMAs = map[string]string{ + "ftbbn0g01": "", + "ftbbn0g02": "gAMA {0.45455}\n", +} + +// fakeIHDRUsings maps from filenames to fake IHDR "using" lines for our +// approximation to the sng command-line tool. The PNG model is that +// transparency (in the tRNS chunk) is separate to the color/grayscale/palette +// color model (in the IHDR chunk). The Go model is that the concrete +// image.Image type returned by png.Decode, such as image.RGBA (with all pixels +// having 100% alpha) or image.NRGBA, encapsulates whether or not the image has +// transparency. This map is a hack to work around the fact that the Go model +// can't otherwise discriminate PNG's "IHDR says color (with no alpha) but tRNS +// says alpha" and "IHDR says color with alpha". +var fakeIHDRUsings = map[string]string{ + "ftbbn0g01": " using grayscale;\n", + "ftbbn0g02": " using grayscale;\n", + "ftbbn0g04": " using grayscale;\n", + "ftbbn2c16": " using color;\n", + "ftbgn2c16": " using color;\n", + "ftbrn2c08": " using color;\n", + "ftbwn0g16": " using grayscale;\n", +} + +// An approximation of the sng command-line tool. +func sng(w io.WriteCloser, filename string, png image.Image) { + defer w.Close() + bounds := png.Bounds() + cm := png.ColorModel() + var bitdepth int + switch cm { + case color.RGBAModel, color.NRGBAModel, color.AlphaModel, color.GrayModel: + bitdepth = 8 + default: + bitdepth = 16 + } + cpm, _ := cm.(color.Palette) + var paletted *image.Paletted + if cpm != nil { + switch { + case len(cpm) <= 2: + bitdepth = 1 + case len(cpm) <= 4: + bitdepth = 2 + case len(cpm) <= 16: + bitdepth = 4 + default: + bitdepth = 8 + } + paletted = png.(*image.Paletted) + } + + // Write the filename and IHDR. + io.WriteString(w, "#SNG: from "+filename+".png\nIHDR {\n") + fmt.Fprintf(w, " width: %d; height: %d; bitdepth: %d;\n", bounds.Dx(), bounds.Dy(), bitdepth) + if s, ok := fakeIHDRUsings[filename]; ok { + io.WriteString(w, s) + } else { + switch { + case cm == color.RGBAModel, cm == color.RGBA64Model: + io.WriteString(w, " using color;\n") + case cm == color.NRGBAModel, cm == color.NRGBA64Model: + io.WriteString(w, " using color alpha;\n") + case cm == color.GrayModel, cm == color.Gray16Model: + io.WriteString(w, " using grayscale;\n") + case cpm != nil: + io.WriteString(w, " using color palette;\n") + default: + io.WriteString(w, "unknown PNG decoder color model\n") + } + } + io.WriteString(w, "}\n") + + // We fake a gAMA chunk. The test files have a gAMA chunk but the go PNG + // parser ignores it (the PNG spec section 11.3 says "Ancillary chunks may + // be ignored by a decoder"). + if s, ok := fakegAMAs[filename]; ok { + io.WriteString(w, s) + } else { + io.WriteString(w, "gAMA {1.0000}\n") + } + + // Write the PLTE and tRNS (if applicable). + useTransparent := false + if cpm != nil { + lastAlpha := -1 + io.WriteString(w, "PLTE {\n") + for i, c := range cpm { + var r, g, b, a uint8 + switch c := c.(type) { + case color.RGBA: + r, g, b, a = c.R, c.G, c.B, 0xff + case color.NRGBA: + r, g, b, a = c.R, c.G, c.B, c.A + default: + panic("unknown palette color type") + } + if a != 0xff { + lastAlpha = i + } + fmt.Fprintf(w, " (%3d,%3d,%3d) # rgb = (0x%02x,0x%02x,0x%02x)\n", r, g, b, r, g, b) + } + io.WriteString(w, "}\n") + if s, ok := fakebKGDs[filename]; ok { + io.WriteString(w, s) + } + if lastAlpha != -1 { + io.WriteString(w, "tRNS {\n") + for i := 0; i <= lastAlpha; i++ { + _, _, _, a := cpm[i].RGBA() + a >>= 8 + fmt.Fprintf(w, " %d", a) + } + io.WriteString(w, "}\n") + } + } else if strings.HasPrefix(filename, "ft") { + if s, ok := fakebKGDs[filename]; ok { + io.WriteString(w, s) + } + // We fake a tRNS chunk. The test files' grayscale and truecolor + // transparent images all have their top left corner transparent. + switch c := png.At(0, 0).(type) { + case color.NRGBA: + if c.A == 0 { + useTransparent = true + io.WriteString(w, "tRNS {\n") + switch filename { + case "ftbbn0g01", "ftbbn0g02", "ftbbn0g04": + // The standard image package doesn't have a "gray with + // alpha" type. Instead, we use an image.NRGBA. + fmt.Fprintf(w, " gray: %d;\n", c.R) + default: + fmt.Fprintf(w, " red: %d; green: %d; blue: %d;\n", c.R, c.G, c.B) + } + io.WriteString(w, "}\n") + } + case color.NRGBA64: + if c.A == 0 { + useTransparent = true + io.WriteString(w, "tRNS {\n") + switch filename { + case "ftbwn0g16": + // The standard image package doesn't have a "gray16 with + // alpha" type. Instead, we use an image.NRGBA64. + fmt.Fprintf(w, " gray: %d;\n", c.R) + default: + fmt.Fprintf(w, " red: %d; green: %d; blue: %d;\n", c.R, c.G, c.B) + } + io.WriteString(w, "}\n") + } + } + } + + // Write the IMAGE. + io.WriteString(w, "IMAGE {\n pixels hex\n") + for y := bounds.Min.Y; y < bounds.Max.Y; y++ { + switch { + case cm == color.GrayModel: + for x := bounds.Min.X; x < bounds.Max.X; x++ { + gray := png.At(x, y).(color.Gray) + fmt.Fprintf(w, "%02x", gray.Y) + } + case cm == color.Gray16Model: + for x := bounds.Min.X; x < bounds.Max.X; x++ { + gray16 := png.At(x, y).(color.Gray16) + fmt.Fprintf(w, "%04x ", gray16.Y) + } + case cm == color.RGBAModel: + for x := bounds.Min.X; x < bounds.Max.X; x++ { + rgba := png.At(x, y).(color.RGBA) + fmt.Fprintf(w, "%02x%02x%02x ", rgba.R, rgba.G, rgba.B) + } + case cm == color.RGBA64Model: + for x := bounds.Min.X; x < bounds.Max.X; x++ { + rgba64 := png.At(x, y).(color.RGBA64) + fmt.Fprintf(w, "%04x%04x%04x ", rgba64.R, rgba64.G, rgba64.B) + } + case cm == color.NRGBAModel: + for x := bounds.Min.X; x < bounds.Max.X; x++ { + nrgba := png.At(x, y).(color.NRGBA) + switch filename { + case "ftbbn0g01", "ftbbn0g02", "ftbbn0g04": + fmt.Fprintf(w, "%02x", nrgba.R) + default: + if useTransparent { + fmt.Fprintf(w, "%02x%02x%02x ", nrgba.R, nrgba.G, nrgba.B) + } else { + fmt.Fprintf(w, "%02x%02x%02x%02x ", nrgba.R, nrgba.G, nrgba.B, nrgba.A) + } + } + } + case cm == color.NRGBA64Model: + for x := bounds.Min.X; x < bounds.Max.X; x++ { + nrgba64 := png.At(x, y).(color.NRGBA64) + switch filename { + case "ftbwn0g16": + fmt.Fprintf(w, "%04x ", nrgba64.R) + default: + if useTransparent { + fmt.Fprintf(w, "%04x%04x%04x ", nrgba64.R, nrgba64.G, nrgba64.B) + } else { + fmt.Fprintf(w, "%04x%04x%04x%04x ", nrgba64.R, nrgba64.G, nrgba64.B, nrgba64.A) + } + } + } + case cpm != nil: + var b, c int + for x := bounds.Min.X; x < bounds.Max.X; x++ { + b = b<= 0 { + ss = ss[:i+1] + } + } + + if ps != ss { + t.Errorf("%s: Mismatch\n%s\nversus\n%s\n", fn, ps, ss) + break + } + } + if pb.Err() != nil { + t.Error(fn, pb.Err()) + } + if sb.Err() != nil { + t.Error(fn, sb.Err()) + } + } +} + +var readerErrors = []struct { + file string + err string +}{ + {"invalid-zlib.png", "zlib: invalid checksum"}, + {"invalid-crc32.png", "invalid checksum"}, + {"invalid-noend.png", "unexpected EOF"}, + {"invalid-trunc.png", "unexpected EOF"}, +} + +func TestReaderError(t *testing.T) { + for _, tt := range readerErrors { + img, err := readPNG("testdata/" + tt.file) + if err == nil { + t.Errorf("decoding %s: missing error", tt.file) + continue + } + if !strings.Contains(err.Error(), tt.err) { + t.Errorf("decoding %s: %s, want %s", tt.file, err, tt.err) + } + if img != nil { + t.Errorf("decoding %s: have image + error", tt.file) + } + } +} + +func TestPalettedDecodeConfig(t *testing.T) { + for _, fn := range filenamesPaletted { + f, err := os.Open("testdata/pngsuite/" + fn + ".png") + if err != nil { + t.Errorf("%s: open failed: %v", fn, err) + continue + } + defer f.Close() + cfg, err := DecodeConfig(f) + if err != nil { + t.Errorf("%s: %v", fn, err) + continue + } + pal, ok := cfg.ColorModel.(color.Palette) + if !ok { + t.Errorf("%s: expected paletted color model", fn) + continue + } + if pal == nil { + t.Errorf("%s: palette not initialized", fn) + continue + } + } +} + +func TestInterlaced(t *testing.T) { + a, err := readPNG("testdata/gray-gradient.png") + if err != nil { + t.Fatal(err) + } + b, err := readPNG("testdata/gray-gradient.interlaced.png") + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(a, b) { + t.Fatalf("decodings differ:\nnon-interlaced:\n%#v\ninterlaced:\n%#v", a, b) + } +} + +func TestIncompleteIDATOnRowBoundary(t *testing.T) { + // The following is an invalid 1x2 grayscale PNG image. The header is OK, + // but the zlib-compressed IDAT payload contains two bytes "\x02\x00", + // which is only one row of data (the leading "\x02" is a row filter). + const ( + ihdr = "\x00\x00\x00\x0dIHDR\x00\x00\x00\x01\x00\x00\x00\x02\x08\x00\x00\x00\x00\xbc\xea\xe9\xfb" + idat = "\x00\x00\x00\x0eIDAT\x78\x9c\x62\x62\x00\x04\x00\x00\xff\xff\x00\x06\x00\x03\xfa\xd0\x59\xae" + iend = "\x00\x00\x00\x00IEND\xae\x42\x60\x82" + ) + _, err := Decode(strings.NewReader(pngHeader + ihdr + idat + iend)) + if err == nil { + t.Fatal("got nil error, want non-nil") + } +} + +func TestTrailingIDATChunks(t *testing.T) { + // The following is a valid 1x1 PNG image containing color.Gray{255} and + // a trailing zero-length IDAT chunk (see PNG specification section 12.9): + const ( + ihdr = "\x00\x00\x00\x0dIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x00\x00\x00\x00\x3a\x7e\x9b\x55" + idatWhite = "\x00\x00\x00\x0eIDAT\x78\x9c\x62\xfa\x0f\x08\x00\x00\xff\xff\x01\x05\x01\x02\x5a\xdd\x39\xcd" + idatZero = "\x00\x00\x00\x00IDAT\x35\xaf\x06\x1e" + iend = "\x00\x00\x00\x00IEND\xae\x42\x60\x82" + ) + _, err := Decode(strings.NewReader(pngHeader + ihdr + idatWhite + idatZero + iend)) + if err != nil { + t.Fatalf("decoding valid image: %v", err) + } + + // Non-zero-length trailing IDAT chunks should be ignored (recoverable error). + // The following chunk contains a single pixel with color.Gray{0}. + const idatBlack = "\x00\x00\x00\x0eIDAT\x78\x9c\x62\x62\x00\x04\x00\x00\xff\xff\x00\x06\x00\x03\xfa\xd0\x59\xae" + + img, err := Decode(strings.NewReader(pngHeader + ihdr + idatWhite + idatBlack + iend)) + if err != nil { + t.Fatalf("trailing IDAT not ignored: %v", err) + } + if img.At(0, 0) == (color.Gray{0}) { + t.Fatal("decoded image from trailing IDAT chunk") + } +} + +func TestMultipletRNSChunks(t *testing.T) { + /* + The following is a valid 1x1 paletted PNG image with a 1-element palette + containing color.NRGBA{0xff, 0x00, 0x00, 0x7f}: + 0000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR + 0000010: 0000 0001 0000 0001 0803 0000 0028 cb34 .............(.4 + 0000020: bb00 0000 0350 4c54 45ff 0000 19e2 0937 .....PLTE......7 + 0000030: 0000 0001 7452 4e53 7f80 5cb4 cb00 0000 ....tRNS..\..... + 0000040: 0e49 4441 5478 9c62 6200 0400 00ff ff00 .IDATx.bb....... + 0000050: 0600 03fa d059 ae00 0000 0049 454e 44ae .....Y.....IEND. + 0000060: 4260 82 B`. + Dropping the tRNS chunk makes that color's alpha 0xff instead of 0x7f. + */ + const ( + ihdr = "\x00\x00\x00\x0dIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x03\x00\x00\x00\x28\xcb\x34\xbb" + plte = "\x00\x00\x00\x03PLTE\xff\x00\x00\x19\xe2\x09\x37" + trns = "\x00\x00\x00\x01tRNS\x7f\x80\x5c\xb4\xcb" + idat = "\x00\x00\x00\x0eIDAT\x78\x9c\x62\x62\x00\x04\x00\x00\xff\xff\x00\x06\x00\x03\xfa\xd0\x59\xae" + iend = "\x00\x00\x00\x00IEND\xae\x42\x60\x82" + ) + for i := 0; i < 4; i++ { + var b []byte + b = append(b, pngHeader...) + b = append(b, ihdr...) + b = append(b, plte...) + for j := 0; j < i; j++ { + b = append(b, trns...) + } + b = append(b, idat...) + b = append(b, iend...) + + var want color.Color + m, err := Decode(bytes.NewReader(b)) + switch i { + case 0: + if err != nil { + t.Errorf("%d tRNS chunks: %v", i, err) + continue + } + want = color.RGBA{0xff, 0x00, 0x00, 0xff} + case 1: + if err != nil { + t.Errorf("%d tRNS chunks: %v", i, err) + continue + } + want = color.NRGBA{0xff, 0x00, 0x00, 0x7f} + default: + if err == nil { + t.Errorf("%d tRNS chunks: got nil error, want non-nil", i) + } + continue + } + if got := m.At(0, 0); got != want { + t.Errorf("%d tRNS chunks: got %T %v, want %T %v", i, got, got, want, want) + } + } +} + +func TestUnknownChunkLengthUnderflow(t *testing.T) { + data := []byte{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x06, 0xf4, 0x7c, 0x55, 0x04, 0x1a, + 0xd3, 0x11, 0x9a, 0x73, 0x00, 0x00, 0xf8, 0x1e, 0xf3, 0x2e, 0x00, 0x00, + 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf4, 0x7c, 0x55, 0x04, 0x1a, + 0xd3} + _, err := Decode(bytes.NewReader(data)) + if err == nil { + t.Errorf("Didn't fail reading an unknown chunk with length 0xffffffff") + } +} + +func TestPaletted8OutOfRangePixel(t *testing.T) { + // IDAT contains a reference to a palette index that does not exist in the file. + img, err := readPNG("testdata/invalid-palette.png") + if err != nil { + t.Errorf("decoding invalid-palette.png: unexpected error %v", err) + return + } + + // Expect that the palette is extended with opaque black. + want := color.RGBA{0x00, 0x00, 0x00, 0xff} + if got := img.At(15, 15); got != want { + t.Errorf("got %F %v, expected %T %v", got, got, want, want) + } +} + +func TestGray8Transparent(t *testing.T) { + // These bytes come from https://golang.org/issues/19553 + m, err := Decode(bytes.NewReader([]byte{ + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x85, 0x2c, 0x88, + 0x80, 0x00, 0x00, 0x00, 0x02, 0x74, 0x52, 0x4e, 0x53, 0x00, 0xff, 0x5b, 0x91, 0x22, 0xb5, 0x00, + 0x00, 0x00, 0x02, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x87, 0x8f, 0xcc, 0xbf, 0x00, 0x00, 0x00, + 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0a, 0xf0, 0x00, 0x00, 0x0a, 0xf0, 0x01, 0x42, 0xac, + 0x34, 0x98, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd5, 0x04, 0x02, 0x12, 0x11, + 0x11, 0xf7, 0x65, 0x3d, 0x8b, 0x00, 0x00, 0x00, 0x4f, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, + 0xf8, 0xff, 0xff, 0xff, 0xb9, 0xbd, 0x70, 0xf0, 0x8c, 0x01, 0xc8, 0xaf, 0x6e, 0x99, 0x02, 0x05, + 0xd9, 0x7b, 0xc1, 0xfc, 0x6b, 0xff, 0xa1, 0xa0, 0x87, 0x30, 0xff, 0xd9, 0xde, 0xbd, 0xd5, 0x4b, + 0xf7, 0xee, 0xfd, 0x0e, 0xe3, 0xef, 0xcd, 0x06, 0x19, 0x14, 0xf5, 0x1e, 0xce, 0xef, 0x01, 0x31, + 0x92, 0xd7, 0x82, 0x41, 0x31, 0x9c, 0x3f, 0x07, 0x02, 0xee, 0xa1, 0xaa, 0xff, 0xff, 0x9f, 0xe1, + 0xd9, 0x56, 0x30, 0xf8, 0x0e, 0xe5, 0x03, 0x00, 0xa9, 0x42, 0x84, 0x3d, 0xdf, 0x8f, 0xa6, 0x8f, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, + })) + if err != nil { + t.Fatalf("Decode: %v", err) + } + + const hex = "0123456789abcdef" + var got []byte + bounds := m.Bounds() + for y := bounds.Min.Y; y < bounds.Max.Y; y++ { + for x := bounds.Min.X; x < bounds.Max.X; x++ { + if r, _, _, a := m.At(x, y).RGBA(); a != 0 { + got = append(got, + hex[0x0f&(r>>12)], + hex[0x0f&(r>>8)], + ' ', + ) + } else { + got = append(got, + '.', + '.', + ' ', + ) + } + } + got = append(got, '\n') + } + + const want = "" + + ".. .. .. ce bd bd bd bd bd bd bd bd bd bd e6 \n" + + ".. .. .. 7b 84 94 94 94 94 94 94 94 94 6b bd \n" + + ".. .. .. 7b d6 .. .. .. .. .. .. .. .. 8c bd \n" + + ".. .. .. 7b d6 .. .. .. .. .. .. .. .. 8c bd \n" + + ".. .. .. 7b d6 .. .. .. .. .. .. .. .. 8c bd \n" + + "e6 bd bd 7b a5 bd bd f7 .. .. .. .. .. 8c bd \n" + + "bd 6b 94 94 94 94 5a ef .. .. .. .. .. 8c bd \n" + + "bd 8c .. .. .. .. 63 ad ad ad ad ad ad 73 bd \n" + + "bd 8c .. .. .. .. 63 9c 9c 9c 9c 9c 9c 9c de \n" + + "bd 6b 94 94 94 94 5a ef .. .. .. .. .. .. .. \n" + + "e6 b5 b5 b5 b5 b5 b5 f7 .. .. .. .. .. .. .. \n" + + if string(got) != want { + t.Errorf("got:\n%swant:\n%s", got, want) + } +} + +func TestDimensionOverflow(t *testing.T) { + maxInt32AsInt := int((1 << 31) - 1) + have32BitInts := 0 > (1 + maxInt32AsInt) + + testCases := []struct { + src []byte + unsupportedConfig bool + width int + height int + }{ + // These bytes come from https://golang.org/issues/22304 + // + // It encodes a 2147483646 × 2147483646 (i.e. 0x7ffffffe × 0x7ffffffe) + // NRGBA image. The (width × height) per se doesn't overflow an int64, but + // (width × height × bytesPerPixel) will. + { + src: []byte{ + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x7f, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xfe, 0x08, 0x06, 0x00, 0x00, 0x00, 0x30, 0x57, 0xb3, + 0xfd, 0x00, 0x00, 0x00, 0x15, 0x49, 0x44, 0x41, 0x54, 0x78, 0x9c, 0x62, 0x62, 0x20, 0x12, 0x8c, + 0x2a, 0xa4, 0xb3, 0x42, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x13, 0x38, 0x00, 0x15, 0x2d, 0xef, + 0x5f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, + }, + // It's debatable whether DecodeConfig (which does not allocate a + // pixel buffer, unlike Decode) should fail in this case. The Go + // standard library has made its choice, and the standard library + // has compatibility constraints. + unsupportedConfig: true, + width: 0x7ffffffe, + height: 0x7ffffffe, + }, + + // The next three cases come from https://golang.org/issues/38435 + + { + src: []byte{ + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x00, 0x00, 0xb5, 0x04, 0x00, 0x00, 0xb5, 0x04, 0x08, 0x06, 0x00, 0x00, 0x00, 0xf5, 0x60, 0x2c, + 0xb8, 0x00, 0x00, 0x00, 0x15, 0x49, 0x44, 0x41, 0x54, 0x78, 0x9c, 0x62, 0x62, 0x20, 0x12, 0x8c, + 0x2a, 0xa4, 0xb3, 0x42, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x13, 0x38, 0x00, 0x15, 0x2d, 0xef, + 0x5f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, + }, + // Here, width * height = 0x7ffea810, just under MaxInt32, but at 4 + // bytes per pixel, the number of pixels overflows an int32. + unsupportedConfig: have32BitInts, + width: 0x0000b504, + height: 0x0000b504, + }, + + { + src: []byte{ + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x06, 0x00, 0x00, 0x00, 0x30, 0x6e, 0xc5, + 0x21, 0x00, 0x00, 0x00, 0x15, 0x49, 0x44, 0x41, 0x54, 0x78, 0x9c, 0x62, 0x62, 0x20, 0x12, 0x8c, + 0x2a, 0xa4, 0xb3, 0x42, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x13, 0x38, 0x00, 0x15, 0x2d, 0xef, + 0x5f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, + }, + unsupportedConfig: false, + width: 0x04000000, + height: 0x00000001, + }, + + { + src: []byte{ + 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0xd4, 0x7c, + 0xda, 0x00, 0x00, 0x00, 0x15, 0x49, 0x44, 0x41, 0x54, 0x78, 0x9c, 0x62, 0x66, 0x20, 0x12, 0x30, + 0x8d, 0x2a, 0xa4, 0xaf, 0x42, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x14, 0xd2, 0x00, 0x16, 0x00, + 0x00, 0x00, + }, + unsupportedConfig: false, + width: 0x08000000, + height: 0x00000001, + }, + } + + for i, tc := range testCases { + cfg, err := DecodeConfig(bytes.NewReader(tc.src)) + if tc.unsupportedConfig { + if err == nil { + t.Errorf("i=%d: DecodeConfig: got nil error, want non-nil", i) + } else if _, ok := err.(UnsupportedError); !ok { + t.Fatalf("Decode: got %v (of type %T), want non-nil error (of type png.UnsupportedError)", err, err) + } + continue + } else if err != nil { + t.Errorf("i=%d: DecodeConfig: %v", i, err) + continue + } else if cfg.Width != tc.width { + t.Errorf("i=%d: width: got %d, want %d", i, cfg.Width, tc.width) + continue + } else if cfg.Height != tc.height { + t.Errorf("i=%d: height: got %d, want %d", i, cfg.Height, tc.height) + continue + } + + if nPixels := int64(cfg.Width) * int64(cfg.Height); nPixels > 0x7f000000 { + // In theory, calling Decode would succeed, given several gigabytes + // of memory. In practice, trying to make a []uint8 big enough to + // hold all of the pixels can often result in OOM (out of memory). + // OOM is unrecoverable; we can't write a test that passes when OOM + // happens. Instead we skip the Decode call (and its tests). + continue + } else if testing.Short() { + // Even for smaller image dimensions, calling Decode might allocate + // 1 GiB or more of memory. This is usually feasible, and we want + // to check that calling Decode doesn't panic if there's enough + // memory, but we provide a runtime switch (testing.Short) to skip + // these if it would OOM. See also http://golang.org/issue/5050 + // "decoding... images can cause huge memory allocations". + continue + } + + // Even if we don't panic, these aren't valid PNG images. + if _, err := Decode(bytes.NewReader(tc.src)); err == nil { + t.Errorf("i=%d: Decode: got nil error, want non-nil", i) + } + } + + if testing.Short() { + t.Skip("skipping tests which allocate large pixel buffers") + } +} + +func benchmarkDecode(b *testing.B, filename string, bytesPerPixel int) { + data, err := os.ReadFile(filename) + if err != nil { + b.Fatal(err) + } + cfg, err := DecodeConfig(bytes.NewReader(data)) + if err != nil { + b.Fatal(err) + } + b.SetBytes(int64(cfg.Width * cfg.Height * bytesPerPixel)) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + Decode(bytes.NewReader(data)) + } +} + +func BenchmarkDecodeGray(b *testing.B) { + benchmarkDecode(b, "testdata/benchGray.png", 1) +} + +func BenchmarkDecodeNRGBAGradient(b *testing.B) { + benchmarkDecode(b, "testdata/benchNRGBA-gradient.png", 4) +} + +func BenchmarkDecodeNRGBAOpaque(b *testing.B) { + benchmarkDecode(b, "testdata/benchNRGBA-opaque.png", 4) +} + +func BenchmarkDecodePaletted(b *testing.B) { + benchmarkDecode(b, "testdata/benchPaletted.png", 1) +} + +func BenchmarkDecodeRGB(b *testing.B) { + benchmarkDecode(b, "testdata/benchRGB.png", 4) +} + +func BenchmarkDecodeInterlacing(b *testing.B) { + benchmarkDecode(b, "testdata/benchRGB-interlace.png", 4) +} diff --git a/image/png/writer.go b/image/png/writer.go new file mode 100644 index 0000000..cbcdb9e --- /dev/null +++ b/image/png/writer.go @@ -0,0 +1,636 @@ +// 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 LICENSE file. + +package png + +import ( + "bufio" + "compress/zlib" + "encoding/binary" + "hash/crc32" + "image" + "image/color" + "io" + "strconv" +) + +// Encoder configures encoding PNG images. +type Encoder struct { + CompressionLevel CompressionLevel + + // BufferPool optionally specifies a buffer pool to get temporary + // EncoderBuffers when encoding an image. + BufferPool EncoderBufferPool +} + +// EncoderBufferPool is an interface for getting and returning temporary +// instances of the EncoderBuffer struct. This can be used to reuse buffers +// when encoding multiple images. +type EncoderBufferPool interface { + Get() *EncoderBuffer + Put(*EncoderBuffer) +} + +// EncoderBuffer holds the buffers used for encoding PNG images. +type EncoderBuffer encoder + +type encoder struct { + enc *Encoder + w io.Writer + m image.Image + cb int + err error + header [8]byte + footer [4]byte + tmp [4 * 256]byte + cr [nFilter][]uint8 + pr []uint8 + zw *zlib.Writer + zwLevel int + bw *bufio.Writer +} + +// CompressionLevel indicates the compression level. +type CompressionLevel int + +const ( + DefaultCompression CompressionLevel = 0 + NoCompression CompressionLevel = -1 + BestSpeed CompressionLevel = -2 + BestCompression CompressionLevel = -3 + + // Positive CompressionLevel values are reserved to mean a numeric zlib + // compression level, although that is not implemented yet. +) + +type opaquer interface { + Opaque() bool +} + +// Returns whether or not the image is fully opaque. +func opaque(m image.Image) bool { + if o, ok := m.(opaquer); ok { + return o.Opaque() + } + b := m.Bounds() + for y := b.Min.Y; y < b.Max.Y; y++ { + for x := b.Min.X; x < b.Max.X; x++ { + _, _, _, a := m.At(x, y).RGBA() + if a != 0xffff { + return false + } + } + } + return true +} + +// The absolute value of a byte interpreted as a signed int8. +func abs8(d uint8) int { + if d < 128 { + return int(d) + } + return 256 - int(d) +} + +func (e *encoder) writeChunk(b []byte, name string) { + if e.err != nil { + return + } + n := uint32(len(b)) + if int(n) != len(b) { + e.err = UnsupportedError(name + " chunk is too large: " + strconv.Itoa(len(b))) + return + } + binary.BigEndian.PutUint32(e.header[:4], n) + e.header[4] = name[0] + e.header[5] = name[1] + e.header[6] = name[2] + e.header[7] = name[3] + crc := crc32.NewIEEE() + crc.Write(e.header[4:8]) + crc.Write(b) + binary.BigEndian.PutUint32(e.footer[:4], crc.Sum32()) + + _, e.err = e.w.Write(e.header[:8]) + if e.err != nil { + return + } + _, e.err = e.w.Write(b) + if e.err != nil { + return + } + _, e.err = e.w.Write(e.footer[:4]) +} + +func (e *encoder) writeIHDR() { + b := e.m.Bounds() + binary.BigEndian.PutUint32(e.tmp[0:4], uint32(b.Dx())) + binary.BigEndian.PutUint32(e.tmp[4:8], uint32(b.Dy())) + // Set bit depth and color type. + switch e.cb { + case cbG8: + e.tmp[8] = 8 + e.tmp[9] = ctGrayscale + case cbTC8: + e.tmp[8] = 8 + e.tmp[9] = ctTrueColor + case cbP8: + e.tmp[8] = 8 + e.tmp[9] = ctPaletted + case cbP4: + e.tmp[8] = 4 + e.tmp[9] = ctPaletted + case cbP2: + e.tmp[8] = 2 + e.tmp[9] = ctPaletted + case cbP1: + e.tmp[8] = 1 + e.tmp[9] = ctPaletted + case cbTCA8: + e.tmp[8] = 8 + e.tmp[9] = ctTrueColorAlpha + case cbG16: + e.tmp[8] = 16 + e.tmp[9] = ctGrayscale + case cbTC16: + e.tmp[8] = 16 + e.tmp[9] = ctTrueColor + case cbTCA16: + e.tmp[8] = 16 + e.tmp[9] = ctTrueColorAlpha + } + e.tmp[10] = 0 // default compression method + e.tmp[11] = 0 // default filter method + e.tmp[12] = 0 // non-interlaced + e.writeChunk(e.tmp[:13], "IHDR") +} + +func (e *encoder) writePLTEAndTRNS(p color.Palette) { + if len(p) < 1 || len(p) > 256 { + e.err = FormatError("bad palette length: " + strconv.Itoa(len(p))) + return + } + last := -1 + for i, c := range p { + c1 := color.NRGBAModel.Convert(c).(color.NRGBA) + e.tmp[3*i+0] = c1.R + e.tmp[3*i+1] = c1.G + e.tmp[3*i+2] = c1.B + if c1.A != 0xff { + last = i + } + e.tmp[3*256+i] = c1.A + } + e.writeChunk(e.tmp[:3*len(p)], "PLTE") + if last != -1 { + e.writeChunk(e.tmp[3*256:3*256+1+last], "tRNS") + } +} + +// An encoder is an io.Writer that satisfies writes by writing PNG IDAT chunks, +// including an 8-byte header and 4-byte CRC checksum per Write call. Such calls +// should be relatively infrequent, since writeIDATs uses a bufio.Writer. +// +// This method should only be called from writeIDATs (via writeImage). +// No other code should treat an encoder as an io.Writer. +func (e *encoder) Write(b []byte) (int, error) { + e.writeChunk(b, "IDAT") + if e.err != nil { + return 0, e.err + } + return len(b), nil +} + +// Chooses the filter to use for encoding the current row, and applies it. +// The return value is the index of the filter and also of the row in cr that has had it applied. +func filter(cr *[nFilter][]byte, pr []byte, bpp int) int { + // We try all five filter types, and pick the one that minimizes the sum of absolute differences. + // This is the same heuristic that libpng uses, although the filters are attempted in order of + // estimated most likely to be minimal (ftUp, ftPaeth, ftNone, ftSub, ftAverage), rather than + // in their enumeration order (ftNone, ftSub, ftUp, ftAverage, ftPaeth). + cdat0 := cr[0][1:] + cdat1 := cr[1][1:] + cdat2 := cr[2][1:] + cdat3 := cr[3][1:] + cdat4 := cr[4][1:] + pdat := pr[1:] + n := len(cdat0) + + // The up filter. + sum := 0 + for i := 0; i < n; i++ { + cdat2[i] = cdat0[i] - pdat[i] + sum += abs8(cdat2[i]) + } + best := sum + filter := ftUp + + // The Paeth filter. + sum = 0 + for i := 0; i < bpp; i++ { + cdat4[i] = cdat0[i] - pdat[i] + sum += abs8(cdat4[i]) + } + for i := bpp; i < n; i++ { + cdat4[i] = cdat0[i] - paeth(cdat0[i-bpp], pdat[i], pdat[i-bpp]) + sum += abs8(cdat4[i]) + if sum >= best { + break + } + } + if sum < best { + best = sum + filter = ftPaeth + } + + // The none filter. + sum = 0 + for i := 0; i < n; i++ { + sum += abs8(cdat0[i]) + if sum >= best { + break + } + } + if sum < best { + best = sum + filter = ftNone + } + + // The sub filter. + sum = 0 + for i := 0; i < bpp; i++ { + cdat1[i] = cdat0[i] + sum += abs8(cdat1[i]) + } + for i := bpp; i < n; i++ { + cdat1[i] = cdat0[i] - cdat0[i-bpp] + sum += abs8(cdat1[i]) + if sum >= best { + break + } + } + if sum < best { + best = sum + filter = ftSub + } + + // The average filter. + sum = 0 + for i := 0; i < bpp; i++ { + cdat3[i] = cdat0[i] - pdat[i]/2 + sum += abs8(cdat3[i]) + } + for i := bpp; i < n; i++ { + cdat3[i] = cdat0[i] - uint8((int(cdat0[i-bpp])+int(pdat[i]))/2) + sum += abs8(cdat3[i]) + if sum >= best { + break + } + } + if sum < best { + filter = ftAverage + } + + return filter +} + +func zeroMemory(v []uint8) { + for i := range v { + v[i] = 0 + } +} + +func (e *encoder) writeImage(w io.Writer, m image.Image, cb int, level int) error { + if e.zw == nil || e.zwLevel != level { + zw, err := zlib.NewWriterLevel(w, level) + if err != nil { + return err + } + e.zw = zw + e.zwLevel = level + } else { + e.zw.Reset(w) + } + defer e.zw.Close() + + bitsPerPixel := 0 + + switch cb { + case cbG8: + bitsPerPixel = 8 + case cbTC8: + bitsPerPixel = 24 + case cbP8: + bitsPerPixel = 8 + case cbP4: + bitsPerPixel = 4 + case cbP2: + bitsPerPixel = 2 + case cbP1: + bitsPerPixel = 1 + case cbTCA8: + bitsPerPixel = 32 + case cbTC16: + bitsPerPixel = 48 + case cbTCA16: + bitsPerPixel = 64 + case cbG16: + bitsPerPixel = 16 + } + + // cr[*] and pr are the bytes for the current and previous row. + // cr[0] is unfiltered (or equivalently, filtered with the ftNone filter). + // cr[ft], for non-zero filter types ft, are buffers for transforming cr[0] under the + // other PNG filter types. These buffers are allocated once and re-used for each row. + // The +1 is for the per-row filter type, which is at cr[*][0]. + b := m.Bounds() + sz := 1 + (bitsPerPixel*b.Dx()+7)/8 + for i := range e.cr { + if cap(e.cr[i]) < sz { + e.cr[i] = make([]uint8, sz) + } else { + e.cr[i] = e.cr[i][:sz] + } + e.cr[i][0] = uint8(i) + } + cr := e.cr + if cap(e.pr) < sz { + e.pr = make([]uint8, sz) + } else { + e.pr = e.pr[:sz] + zeroMemory(e.pr) + } + pr := e.pr + + gray, _ := m.(*image.Gray) + rgba, _ := m.(*image.RGBA) + paletted, _ := m.(*image.Paletted) + nrgba, _ := m.(*image.NRGBA) + + for y := b.Min.Y; y < b.Max.Y; y++ { + // Convert from colors to bytes. + i := 1 + switch cb { + case cbG8: + if gray != nil { + offset := (y - b.Min.Y) * gray.Stride + copy(cr[0][1:], gray.Pix[offset:offset+b.Dx()]) + } else { + for x := b.Min.X; x < b.Max.X; x++ { + c := color.GrayModel.Convert(m.At(x, y)).(color.Gray) + cr[0][i] = c.Y + i++ + } + } + case cbTC8: + // We have previously verified that the alpha value is fully opaque. + cr0 := cr[0] + stride, pix := 0, []byte(nil) + if rgba != nil { + stride, pix = rgba.Stride, rgba.Pix + } else if nrgba != nil { + stride, pix = nrgba.Stride, nrgba.Pix + } + if stride != 0 { + j0 := (y - b.Min.Y) * stride + j1 := j0 + b.Dx()*4 + for j := j0; j < j1; j += 4 { + cr0[i+0] = pix[j+0] + cr0[i+1] = pix[j+1] + cr0[i+2] = pix[j+2] + i += 3 + } + } else { + for x := b.Min.X; x < b.Max.X; x++ { + r, g, b, _ := m.At(x, y).RGBA() + cr0[i+0] = uint8(r >> 8) + cr0[i+1] = uint8(g >> 8) + cr0[i+2] = uint8(b >> 8) + i += 3 + } + } + case cbP8: + if paletted != nil { + offset := (y - b.Min.Y) * paletted.Stride + copy(cr[0][1:], paletted.Pix[offset:offset+b.Dx()]) + } else { + pi := m.(image.PalettedImage) + for x := b.Min.X; x < b.Max.X; x++ { + cr[0][i] = pi.ColorIndexAt(x, y) + i += 1 + } + } + + case cbP4, cbP2, cbP1: + pi := m.(image.PalettedImage) + + var a uint8 + var c int + pixelsPerByte := 8 / bitsPerPixel + for x := b.Min.X; x < b.Max.X; x++ { + a = a<> 8) + cr[0][i+1] = uint8(c.Y) + i += 2 + } + case cbTC16: + // We have previously verified that the alpha value is fully opaque. + for x := b.Min.X; x < b.Max.X; x++ { + r, g, b, _ := m.At(x, y).RGBA() + cr[0][i+0] = uint8(r >> 8) + cr[0][i+1] = uint8(r) + cr[0][i+2] = uint8(g >> 8) + cr[0][i+3] = uint8(g) + cr[0][i+4] = uint8(b >> 8) + cr[0][i+5] = uint8(b) + i += 6 + } + case cbTCA16: + // Convert from image.Image (which is alpha-premultiplied) to PNG's non-alpha-premultiplied. + for x := b.Min.X; x < b.Max.X; x++ { + c := color.NRGBA64Model.Convert(m.At(x, y)).(color.NRGBA64) + cr[0][i+0] = uint8(c.R >> 8) + cr[0][i+1] = uint8(c.R) + cr[0][i+2] = uint8(c.G >> 8) + cr[0][i+3] = uint8(c.G) + cr[0][i+4] = uint8(c.B >> 8) + cr[0][i+5] = uint8(c.B) + cr[0][i+6] = uint8(c.A >> 8) + cr[0][i+7] = uint8(c.A) + i += 8 + } + } + + // Apply the filter. + // Skip filter for NoCompression and paletted images (cbP8) as + // "filters are rarely useful on palette images" and will result + // in larger files (see http://www.libpng.org/pub/png/book/chapter09.html). + f := ftNone + if level != zlib.NoCompression && cb != cbP8 && cb != cbP4 && cb != cbP2 && cb != cbP1 { + // Since we skip paletted images we don't have to worry about + // bitsPerPixel not being a multiple of 8 + bpp := bitsPerPixel / 8 + f = filter(&cr, pr, bpp) + } + + // Write the compressed bytes. + if _, err := e.zw.Write(cr[f]); err != nil { + return err + } + + // The current row for y is the previous row for y+1. + pr, cr[0] = cr[0], pr + } + return nil +} + +// Write the actual image data to one or more IDAT chunks. +func (e *encoder) writeIDATs() { + if e.err != nil { + return + } + if e.bw == nil { + e.bw = bufio.NewWriterSize(e, 1<<15) + } else { + e.bw.Reset(e) + } + e.err = e.writeImage(e.bw, e.m, e.cb, levelToZlib(e.enc.CompressionLevel)) + if e.err != nil { + return + } + e.err = e.bw.Flush() +} + +// This function is required because we want the zero value of +// Encoder.CompressionLevel to map to zlib.DefaultCompression. +func levelToZlib(l CompressionLevel) int { + switch l { + case DefaultCompression: + return zlib.DefaultCompression + case NoCompression: + return zlib.NoCompression + case BestSpeed: + return zlib.BestSpeed + case BestCompression: + return zlib.BestCompression + default: + return zlib.DefaultCompression + } +} + +func (e *encoder) writeIEND() { e.writeChunk(nil, "IEND") } + +// Encode writes the Image m to w in PNG format. Any Image may be +// encoded, but images that are not image.NRGBA might be encoded lossily. +func Encode(w io.Writer, m image.Image) error { + var e Encoder + return e.Encode(w, m) +} + +// Encode writes the Image m to w in PNG format. +func (enc *Encoder) Encode(w io.Writer, m image.Image) error { + // Obviously, negative widths and heights are invalid. Furthermore, the PNG + // spec section 11.2.2 says that zero is invalid. Excessively large images are + // also rejected. + mw, mh := int64(m.Bounds().Dx()), int64(m.Bounds().Dy()) + if mw <= 0 || mh <= 0 || mw >= 1<<32 || mh >= 1<<32 { + return FormatError("invalid image size: " + strconv.FormatInt(mw, 10) + "x" + strconv.FormatInt(mh, 10)) + } + + var e *encoder + if enc.BufferPool != nil { + buffer := enc.BufferPool.Get() + e = (*encoder)(buffer) + + } + if e == nil { + e = &encoder{} + } + if enc.BufferPool != nil { + defer enc.BufferPool.Put((*EncoderBuffer)(e)) + } + + e.enc = enc + e.w = w + e.m = m + + var pal color.Palette + // cbP8 encoding needs PalettedImage's ColorIndexAt method. + if _, ok := m.(image.PalettedImage); ok { + pal, _ = m.ColorModel().(color.Palette) + } + if pal != nil { + if len(pal) <= 2 { + e.cb = cbP1 + } else if len(pal) <= 4 { + e.cb = cbP2 + } else if len(pal) <= 16 { + e.cb = cbP4 + } else { + e.cb = cbP8 + } + } else { + switch m.ColorModel() { + case color.GrayModel: + e.cb = cbG8 + case color.Gray16Model: + e.cb = cbG16 + case color.RGBAModel, color.NRGBAModel, color.AlphaModel: + if opaque(m) { + e.cb = cbTC8 + } else { + e.cb = cbTCA8 + } + default: + if opaque(m) { + e.cb = cbTC16 + } else { + e.cb = cbTCA16 + } + } + } + + _, e.err = io.WriteString(w, pngHeader) + e.writeIHDR() + if pal != nil { + e.writePLTEAndTRNS(pal) + } + e.writeIDATs() + e.writeIEND() + return e.err +} diff --git a/image/png/writer_test.go b/image/png/writer_test.go new file mode 100644 index 0000000..47aa861 --- /dev/null +++ b/image/png/writer_test.go @@ -0,0 +1,342 @@ +// 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 LICENSE file. + +package png + +import ( + "bytes" + "compress/zlib" + "encoding/binary" + "fmt" + "image" + "image/color" + "io" + "testing" +) + +func diff(m0, m1 image.Image) error { + b0, b1 := m0.Bounds(), m1.Bounds() + if !b0.Size().Eq(b1.Size()) { + return fmt.Errorf("dimensions differ: %v vs %v", b0, b1) + } + dx := b1.Min.X - b0.Min.X + dy := b1.Min.Y - b0.Min.Y + for y := b0.Min.Y; y < b0.Max.Y; y++ { + for x := b0.Min.X; x < b0.Max.X; x++ { + c0 := m0.At(x, y) + c1 := m1.At(x+dx, y+dy) + r0, g0, b0, a0 := c0.RGBA() + r1, g1, b1, a1 := c1.RGBA() + if r0 != r1 || g0 != g1 || b0 != b1 || a0 != a1 { + return fmt.Errorf("colors differ at (%d, %d): %v vs %v", x, y, c0, c1) + } + } + } + return nil +} + +func encodeDecode(m image.Image) (image.Image, error) { + var b bytes.Buffer + err := Encode(&b, m) + if err != nil { + return nil, err + } + return Decode(&b) +} + +func TestWriter(t *testing.T) { + // The filenames variable is declared in reader_test.go. + names := filenames + if testing.Short() { + names = filenamesShort + } + for _, fn := range names { + qfn := "testdata/pngsuite/" + fn + ".png" + // Read the image. + m0, err := readPNG(qfn) + if err != nil { + t.Error(fn, err) + continue + } + // Read the image again, encode it, and decode it. + m1, err := readPNG(qfn) + if err != nil { + t.Error(fn, err) + continue + } + m2, err := encodeDecode(m1) + if err != nil { + t.Error(fn, err) + continue + } + // Compare the two. + err = diff(m0, m2) + if err != nil { + t.Error(fn, err) + continue + } + } +} + +func TestWriterPaletted(t *testing.T) { + const width, height = 32, 16 + + testCases := []struct { + plen int + bitdepth uint8 + datalen int + }{ + + { + plen: 256, + bitdepth: 8, + datalen: (1 + width) * height, + }, + + { + plen: 128, + bitdepth: 8, + datalen: (1 + width) * height, + }, + + { + plen: 16, + bitdepth: 4, + datalen: (1 + width/2) * height, + }, + + { + plen: 4, + bitdepth: 2, + datalen: (1 + width/4) * height, + }, + + { + plen: 2, + bitdepth: 1, + datalen: (1 + width/8) * height, + }, + } + + for _, tc := range testCases { + t.Run(fmt.Sprintf("plen-%d", tc.plen), func(t *testing.T) { + // Create a paletted image with the correct palette length + palette := make(color.Palette, tc.plen) + for i := range palette { + palette[i] = color.NRGBA{ + R: uint8(i), + G: uint8(i), + B: uint8(i), + A: 255, + } + } + m0 := image.NewPaletted(image.Rect(0, 0, width, height), palette) + + i := 0 + for y := 0; y < height; y++ { + for x := 0; x < width; x++ { + m0.SetColorIndex(x, y, uint8(i%tc.plen)) + i++ + } + } + + // Encode the image + var b bytes.Buffer + if err := Encode(&b, m0); err != nil { + t.Error(err) + return + } + const chunkFieldsLength = 12 // 4 bytes for length, name and crc + data := b.Bytes() + i = len(pngHeader) + + for i < len(data)-chunkFieldsLength { + length := binary.BigEndian.Uint32(data[i : i+4]) + name := string(data[i+4 : i+8]) + + switch name { + case "IHDR": + bitdepth := data[i+8+8] + if bitdepth != tc.bitdepth { + t.Errorf("got bitdepth %d, want %d", bitdepth, tc.bitdepth) + } + case "IDAT": + // Uncompress the image data + r, err := zlib.NewReader(bytes.NewReader(data[i+8 : i+8+int(length)])) + if err != nil { + t.Error(err) + return + } + n, err := io.Copy(io.Discard, r) + if err != nil { + t.Errorf("got error while reading image data: %v", err) + } + if n != int64(tc.datalen) { + t.Errorf("got uncompressed data length %d, want %d", n, tc.datalen) + } + } + + i += chunkFieldsLength + int(length) + } + }) + + } +} + +func TestWriterLevels(t *testing.T) { + m := image.NewNRGBA(image.Rect(0, 0, 100, 100)) + + var b1, b2 bytes.Buffer + if err := (&Encoder{}).Encode(&b1, m); err != nil { + t.Fatal(err) + } + noenc := &Encoder{CompressionLevel: NoCompression} + if err := noenc.Encode(&b2, m); err != nil { + t.Fatal(err) + } + + if b2.Len() <= b1.Len() { + t.Error("DefaultCompression encoding was larger than NoCompression encoding") + } + if _, err := Decode(&b1); err != nil { + t.Error("cannot decode DefaultCompression") + } + if _, err := Decode(&b2); err != nil { + t.Error("cannot decode NoCompression") + } +} + +func TestSubImage(t *testing.T) { + m0 := image.NewRGBA(image.Rect(0, 0, 256, 256)) + for y := 0; y < 256; y++ { + for x := 0; x < 256; x++ { + m0.Set(x, y, color.RGBA{uint8(x), uint8(y), 0, 255}) + } + } + m0 = m0.SubImage(image.Rect(50, 30, 250, 130)).(*image.RGBA) + m1, err := encodeDecode(m0) + if err != nil { + t.Error(err) + return + } + err = diff(m0, m1) + if err != nil { + t.Error(err) + return + } +} + +func BenchmarkEncodeGray(b *testing.B) { + img := image.NewGray(image.Rect(0, 0, 640, 480)) + b.SetBytes(640 * 480 * 1) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + Encode(io.Discard, img) + } +} + +type pool struct { + b *EncoderBuffer +} + +func (p *pool) Get() *EncoderBuffer { + return p.b +} + +func (p *pool) Put(b *EncoderBuffer) { + p.b = b +} + +func BenchmarkEncodeGrayWithBufferPool(b *testing.B) { + img := image.NewGray(image.Rect(0, 0, 640, 480)) + e := Encoder{ + BufferPool: &pool{}, + } + b.SetBytes(640 * 480 * 1) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + e.Encode(io.Discard, img) + } +} + +func BenchmarkEncodeNRGBOpaque(b *testing.B) { + img := image.NewNRGBA(image.Rect(0, 0, 640, 480)) + // Set all pixels to 0xFF alpha to force opaque mode. + bo := img.Bounds() + for y := bo.Min.Y; y < bo.Max.Y; y++ { + for x := bo.Min.X; x < bo.Max.X; x++ { + img.Set(x, y, color.NRGBA{0, 0, 0, 255}) + } + } + if !img.Opaque() { + b.Fatal("expected image to be opaque") + } + b.SetBytes(640 * 480 * 4) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + Encode(io.Discard, img) + } +} + +func BenchmarkEncodeNRGBA(b *testing.B) { + img := image.NewNRGBA(image.Rect(0, 0, 640, 480)) + if img.Opaque() { + b.Fatal("expected image not to be opaque") + } + b.SetBytes(640 * 480 * 4) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + Encode(io.Discard, img) + } +} + +func BenchmarkEncodePaletted(b *testing.B) { + img := image.NewPaletted(image.Rect(0, 0, 640, 480), color.Palette{ + color.RGBA{0, 0, 0, 255}, + color.RGBA{255, 255, 255, 255}, + }) + b.SetBytes(640 * 480 * 1) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + Encode(io.Discard, img) + } +} + +func BenchmarkEncodeRGBOpaque(b *testing.B) { + img := image.NewRGBA(image.Rect(0, 0, 640, 480)) + // Set all pixels to 0xFF alpha to force opaque mode. + bo := img.Bounds() + for y := bo.Min.Y; y < bo.Max.Y; y++ { + for x := bo.Min.X; x < bo.Max.X; x++ { + img.Set(x, y, color.RGBA{0, 0, 0, 255}) + } + } + if !img.Opaque() { + b.Fatal("expected image to be opaque") + } + b.SetBytes(640 * 480 * 4) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + Encode(io.Discard, img) + } +} + +func BenchmarkEncodeRGBA(b *testing.B) { + img := image.NewRGBA(image.Rect(0, 0, 640, 480)) + if img.Opaque() { + b.Fatal("expected image not to be opaque") + } + b.SetBytes(640 * 480 * 4) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + Encode(io.Discard, img) + } +}