diff --git a/boot/limine b/boot/limine deleted file mode 160000 index f777d33..0000000 --- a/boot/limine +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f777d332c66e674e37bd8f46fec9cb2b30f08628 diff --git a/boot/limine/.gitignore b/boot/limine/.gitignore new file mode 100644 index 0000000..a1492fd --- /dev/null +++ b/boot/limine/.gitignore @@ -0,0 +1,2 @@ +limine +limine.exe diff --git a/boot/limine/BOOTAA64.EFI b/boot/limine/BOOTAA64.EFI new file mode 100644 index 0000000..9dba5d5 Binary files /dev/null and b/boot/limine/BOOTAA64.EFI differ diff --git a/boot/limine/BOOTIA32.EFI b/boot/limine/BOOTIA32.EFI new file mode 100644 index 0000000..006ef2d Binary files /dev/null and b/boot/limine/BOOTIA32.EFI differ diff --git a/boot/limine/BOOTLOONGARCH64.EFI b/boot/limine/BOOTLOONGARCH64.EFI new file mode 100644 index 0000000..2288a7c Binary files /dev/null and b/boot/limine/BOOTLOONGARCH64.EFI differ diff --git a/boot/limine/BOOTRISCV64.EFI b/boot/limine/BOOTRISCV64.EFI new file mode 100644 index 0000000..539945e Binary files /dev/null and b/boot/limine/BOOTRISCV64.EFI differ diff --git a/boot/limine/BOOTX64.EFI b/boot/limine/BOOTX64.EFI new file mode 100644 index 0000000..6940581 Binary files /dev/null and b/boot/limine/BOOTX64.EFI differ diff --git a/boot/limine/LICENSE b/boot/limine/LICENSE new file mode 100644 index 0000000..3f9ab86 --- /dev/null +++ b/boot/limine/LICENSE @@ -0,0 +1,22 @@ +Copyright (C) 2019-2025 Mintsuki and contributors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/boot/limine/Makefile b/boot/limine/Makefile new file mode 100644 index 0000000..4962735 --- /dev/null +++ b/boot/limine/Makefile @@ -0,0 +1,19 @@ +.POSIX: + +SHELL=/bin/sh + +CC=cc +CFLAGS=-g -O2 -pipe +CPPFLAGS= +LDFLAGS= +LIBS= + +.PHONY: all +all: limine + +.PHONY: clean +clean: + rm -f limine limine.exe + +limine: limine.c + $(CC) $(CFLAGS) -std=c99 $(CPPFLAGS) $(LDFLAGS) $< $(LIBS) -o $@ diff --git a/boot/limine/limine-bios-cd.bin b/boot/limine/limine-bios-cd.bin new file mode 100644 index 0000000..1e89e17 Binary files /dev/null and b/boot/limine/limine-bios-cd.bin differ diff --git a/boot/limine/limine-bios-hdd.h b/boot/limine/limine-bios-hdd.h new file mode 100644 index 0000000..7ae0b0a --- /dev/null +++ b/boot/limine/limine-bios-hdd.h @@ -0,0 +1,1209 @@ +const uint8_t binary_limine_hdd_bin_data[] = { + 0xeb, 0x3c, 0x90, 0x4c, 0x49, 0x4d, 0x49, 0x4e, 0x45, 0x20, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x49, 0x4d, 0x49, 0x4e, + 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0xfc, + 0xea, 0x45, 0x7c, 0x00, 0x00, 0x31, 0xf6, 0x8e, 0xde, 0x8e, 0xc6, 0x8e, 0xd6, 0xbc, 0x00, 0x7c, + 0xfb, 0x80, 0xfa, 0x80, 0x0f, 0x82, 0x0f, 0x01, 0x80, 0xfa, 0x8f, 0x0f, 0x87, 0x07, 0x01, 0xb4, + 0x41, 0xbb, 0xaa, 0x55, 0xcd, 0x13, 0x0f, 0x82, 0xfb, 0x00, 0x81, 0xfb, 0x55, 0xaa, 0x0f, 0x85, + 0xf2, 0x00, 0x68, 0x00, 0x70, 0x07, 0xbf, 0xa4, 0x7d, 0x66, 0x8b, 0x05, 0x66, 0x8b, 0x6d, 0x04, + 0x31, 0xdb, 0x66, 0xb9, 0x00, 0x7e, 0x00, 0x00, 0xe8, 0x55, 0x00, 0x0f, 0x82, 0xd4, 0x00, 0x0f, + 0x01, 0x16, 0x4d, 0x7d, 0xfa, 0x0f, 0x20, 0xc0, 0x0f, 0xba, 0xe8, 0x00, 0x0f, 0x22, 0xc0, 0xea, + 0x78, 0x7d, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0xbe, 0x00, 0x80, 0xc7, 0x04, 0x10, 0x00, 0xc7, 0x44, 0x02, 0x01, 0x00, 0x89, 0x5c, 0x04, + 0x8c, 0x44, 0x06, 0x52, 0x56, 0x66, 0x50, 0x66, 0x55, 0xb4, 0x48, 0xbe, 0x10, 0x80, 0xc7, 0x04, + 0x1e, 0x00, 0xcd, 0x13, 0x72, 0x45, 0x8b, 0x6c, 0x18, 0x89, 0xc8, 0x66, 0xc1, 0xe9, 0x10, 0x89, + 0xca, 0x31, 0xc9, 0xf7, 0xf5, 0x85, 0xd2, 0x0f, 0x95, 0xc1, 0x01, 0xc1, 0x66, 0x5a, 0x66, 0x58, + 0x5e, 0x66, 0xf7, 0xf5, 0x66, 0x89, 0x44, 0x08, 0x66, 0xc7, 0x44, 0x0c, 0x00, 0x00, 0x00, 0x00, + 0x5a, 0xb4, 0x42, 0xf8, 0xcd, 0x13, 0x72, 0x13, 0x01, 0x6c, 0x04, 0x66, 0x31, 0xdb, 0x66, 0xff, + 0x44, 0x08, 0x0f, 0x90, 0xc3, 0x66, 0x01, 0x5c, 0x0c, 0xe2, 0xe6, 0x61, 0xc3, 0x17, 0x00, 0x4b, + 0x7d, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x9b, 0xcf, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x93, 0xcf, 0x00, 0x46, 0x46, 0x46, 0x46, 0x81, 0xc6, 0x30, 0x4f, 0x68, 0x00, 0xb8, 0x07, 0x26, + 0x89, 0x36, 0x00, 0x00, 0xfb, 0xf4, 0xeb, 0xfd, 0xb8, 0x10, 0x00, 0x00, 0x00, 0x8e, 0xd8, 0x8e, + 0xc0, 0x8e, 0xe0, 0x8e, 0xe8, 0x8e, 0xd0, 0x81, 0xe2, 0xff, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x52, + 0x68, 0x69, 0x3e, 0x00, 0x00, 0x68, 0x00, 0x0b, 0x07, 0x00, 0xe8, 0x61, 0x82, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa, + 0xfc, 0x30, 0xc0, 0xbf, 0xff, 0x0a, 0x07, 0x00, 0xb9, 0xff, 0x0a, 0x07, 0x00, 0x81, 0xe9, 0xff, + 0x0a, 0x07, 0x00, 0xf3, 0xaa, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x57, 0x56, 0x0f, 0xb6, 0x74, 0x24, + 0x14, 0x8b, 0x7c, 0x24, 0x18, 0xff, 0x74, 0x24, 0x10, 0xff, 0x74, 0x24, 0x10, 0x68, 0x00, 0xf0, + 0x00, 0x00, 0xe8, 0x14, 0x00, 0x00, 0x00, 0x83, 0xc4, 0x0c, 0xbc, 0x00, 0xf0, 0x00, 0x00, 0x31, + 0xed, 0x57, 0x56, 0x6a, 0x00, 0x68, 0x00, 0xf0, 0x00, 0x00, 0xc3, 0x55, 0x53, 0x57, 0x56, 0x8b, + 0x54, 0x24, 0x1c, 0xb8, 0xfd, 0xff, 0xff, 0xff, 0x83, 0xfa, 0x12, 0x0f, 0x82, 0xa2, 0x00, 0x00, + 0x00, 0x8b, 0x4c, 0x24, 0x18, 0x80, 0x39, 0x1f, 0x0f, 0x85, 0x95, 0x00, 0x00, 0x00, 0x80, 0x79, + 0x01, 0x8b, 0x0f, 0x85, 0x8b, 0x00, 0x00, 0x00, 0x80, 0x79, 0x02, 0x08, 0x0f, 0x85, 0x81, 0x00, + 0x00, 0x00, 0x0f, 0xb6, 0x59, 0x03, 0x83, 0xfb, 0x1f, 0x77, 0x78, 0x8d, 0x71, 0x0a, 0xf6, 0xc3, + 0x04, 0x74, 0x0e, 0x0f, 0xb7, 0x3e, 0x8d, 0x6a, 0xf4, 0x39, 0xfd, 0x72, 0x66, 0x8d, 0x74, 0x3e, + 0x02, 0xf6, 0xc3, 0x08, 0x75, 0x04, 0x89, 0xf7, 0xeb, 0x13, 0x89, 0xf5, 0x29, 0xcd, 0x39, 0xd5, + 0x73, 0x51, 0x8d, 0x7e, 0x01, 0x45, 0x80, 0x3e, 0x00, 0x89, 0xfe, 0x75, 0xf1, 0x80, 0xfb, 0x10, + 0x73, 0x04, 0x89, 0xfd, 0xeb, 0x13, 0x89, 0xfe, 0x29, 0xce, 0x39, 0xd6, 0x73, 0x35, 0x8d, 0x6f, + 0x01, 0x46, 0x80, 0x3f, 0x00, 0x89, 0xef, 0x75, 0xf1, 0x83, 0xe3, 0x02, 0x01, 0xeb, 0x01, 0xd1, + 0x29, 0xd9, 0x83, 0xf9, 0x08, 0x7c, 0x1c, 0x83, 0xc1, 0xf8, 0x51, 0x53, 0xff, 0x74, 0x24, 0x1c, + 0xe8, 0x13, 0x00, 0x00, 0x00, 0x83, 0xc4, 0x0c, 0x31, 0xc9, 0x85, 0xc0, 0x0f, 0x94, 0xc1, 0x8d, + 0x44, 0x49, 0xfd, 0x5e, 0x5f, 0x5b, 0x5d, 0xc3, 0x55, 0x53, 0x57, 0x56, 0x81, 0xec, 0x38, 0x06, + 0x00, 0x00, 0x8b, 0x84, 0x24, 0x4c, 0x06, 0x00, 0x00, 0x8b, 0x8c, 0x24, 0x50, 0x06, 0x00, 0x00, + 0x8d, 0x54, 0x24, 0x30, 0x89, 0x4a, 0xe4, 0x03, 0x8c, 0x24, 0x54, 0x06, 0x00, 0x00, 0x89, 0x4a, + 0xe8, 0x31, 0xc9, 0x89, 0x4a, 0xec, 0x89, 0x4a, 0xf0, 0x89, 0x4a, 0xf4, 0x89, 0x42, 0xfc, 0x89, + 0x42, 0xf8, 0x8b, 0x54, 0x24, 0x20, 0x85, 0xd2, 0x7e, 0x0a, 0x8b, 0x44, 0x24, 0x1c, 0x89, 0x44, + 0x24, 0x04, 0xeb, 0x4a, 0x8b, 0x74, 0x24, 0x14, 0x8b, 0x44, 0x24, 0x18, 0x8b, 0x4c, 0x24, 0x1c, + 0x89, 0x4c, 0x24, 0x04, 0x89, 0xd1, 0x39, 0xc6, 0x74, 0x1e, 0x8d, 0x56, 0x01, 0x89, 0x54, 0x24, + 0x14, 0x0f, 0xb6, 0x36, 0xd3, 0xe6, 0x8b, 0x7c, 0x24, 0x04, 0x09, 0xf7, 0x89, 0x7c, 0x24, 0x04, + 0x89, 0x7c, 0x24, 0x1c, 0x89, 0xd6, 0xeb, 0x08, 0xc7, 0x44, 0x24, 0x24, 0x01, 0x00, 0x00, 0x00, + 0x8d, 0x51, 0x08, 0x89, 0x54, 0x24, 0x20, 0x83, 0xf9, 0xf9, 0x89, 0xd1, 0x7c, 0xc8, 0x8b, 0x6c, + 0x24, 0x04, 0xd1, 0xed, 0x89, 0x6c, 0x24, 0x1c, 0x8d, 0x4a, 0xff, 0x89, 0x4c, 0x24, 0x20, 0x83, + 0xf9, 0x01, 0x77, 0x41, 0x8b, 0x44, 0x24, 0x14, 0x8b, 0x74, 0x24, 0x18, 0x83, 0xc2, 0xf7, 0x8d, + 0x4a, 0x08, 0x39, 0xf0, 0x74, 0x16, 0x8d, 0x78, 0x01, 0x89, 0x7c, 0x24, 0x14, 0x0f, 0xb6, 0x18, + 0xd3, 0xe3, 0x09, 0xdd, 0x89, 0x6c, 0x24, 0x1c, 0x89, 0xf8, 0xeb, 0x08, 0xc7, 0x44, 0x24, 0x24, + 0x01, 0x00, 0x00, 0x00, 0x83, 0xc2, 0x10, 0x89, 0x54, 0x24, 0x20, 0x83, 0xf9, 0xfa, 0x89, 0xca, + 0x7c, 0xcd, 0x83, 0xc1, 0x08, 0x89, 0xee, 0x83, 0xe6, 0x03, 0xc1, 0xed, 0x02, 0x89, 0x6c, 0x24, + 0x1c, 0x8d, 0x51, 0xfe, 0x89, 0x54, 0x24, 0x20, 0xb8, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x24, 0xb5, + 0x28, 0x0a, 0x07, 0x00, 0x8b, 0x4c, 0x24, 0x14, 0x8b, 0x54, 0x24, 0x18, 0x29, 0xca, 0x83, 0xfa, + 0x04, 0x0f, 0x8c, 0x47, 0x05, 0x00, 0x00, 0x0f, 0xb7, 0x19, 0x0f, 0xb7, 0x51, 0x02, 0x66, 0x31, + 0xda, 0x66, 0x83, 0xfa, 0xff, 0x0f, 0x85, 0x33, 0x05, 0x00, 0x00, 0x83, 0xc1, 0x04, 0x89, 0x4c, + 0x24, 0x14, 0x85, 0xdb, 0x74, 0x1d, 0x8b, 0x4c, 0x24, 0x14, 0x8b, 0x54, 0x24, 0x2c, 0x8d, 0x71, + 0x01, 0x8d, 0x7a, 0x01, 0x4b, 0x89, 0x74, 0x24, 0x14, 0x8a, 0x09, 0x89, 0x7c, 0x24, 0x2c, 0x88, + 0x0a, 0x75, 0xe3, 0x31, 0xc0, 0x89, 0x44, 0x24, 0x1c, 0x89, 0x44, 0x24, 0x20, 0xe9, 0xd8, 0x00, + 0x00, 0x00, 0xb8, 0xe0, 0xff, 0xff, 0xff, 0x66, 0xc7, 0x44, 0x04, 0x50, 0x00, 0x00, 0x83, 0xc0, + 0x02, 0x75, 0xf4, 0xc7, 0x44, 0x24, 0x3e, 0x18, 0x00, 0x98, 0x00, 0x66, 0xc7, 0x44, 0x24, 0x42, + 0x70, 0x00, 0xb8, 0xe8, 0xff, 0xff, 0xff, 0x8d, 0x88, 0x18, 0x01, 0x00, 0x00, 0x66, 0x89, 0x8c, + 0x44, 0x80, 0x00, 0x00, 0x00, 0x40, 0x75, 0xef, 0x31, 0xc0, 0x66, 0x89, 0x84, 0x44, 0x80, 0x00, + 0x00, 0x00, 0x40, 0x3d, 0x90, 0x00, 0x00, 0x00, 0x75, 0xf0, 0xb8, 0xf8, 0xff, 0xff, 0xff, 0x8d, + 0x88, 0x20, 0x01, 0x00, 0x00, 0x66, 0x89, 0x8c, 0x44, 0xb0, 0x01, 0x00, 0x00, 0x40, 0x75, 0xef, + 0xb8, 0x90, 0xff, 0xff, 0xff, 0x8d, 0x88, 0x00, 0x01, 0x00, 0x00, 0x66, 0x89, 0x8c, 0x44, 0x90, + 0x02, 0x00, 0x00, 0x40, 0x75, 0xef, 0xc7, 0x84, 0x24, 0x90, 0x02, 0x00, 0x00, 0x1d, 0x01, 0x00, + 0x00, 0xb8, 0xe0, 0xff, 0xff, 0xff, 0x66, 0xc7, 0x84, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x83, 0xc0, 0x02, 0x75, 0xf1, 0x66, 0xc7, 0x84, 0x24, 0x9e, 0x02, 0x00, 0x00, 0x20, 0x00, 0x31, + 0xc0, 0x66, 0x89, 0x84, 0x44, 0xb4, 0x02, 0x00, 0x00, 0x40, 0x83, 0xf8, 0x20, 0x75, 0xf2, 0xc7, + 0x84, 0x24, 0xf4, 0x04, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x8d, 0x4c, 0x24, 0x14, 0x8d, 0x54, + 0x24, 0x30, 0x8d, 0x84, 0x24, 0x94, 0x02, 0x00, 0x00, 0x50, 0xe8, 0x91, 0x04, 0x00, 0x00, 0x83, + 0xc4, 0x04, 0x85, 0xc0, 0x0f, 0x85, 0x24, 0x04, 0x00, 0x00, 0xf6, 0x44, 0x24, 0x04, 0x01, 0x0f, + 0x84, 0xed, 0xfd, 0xff, 0xff, 0xe9, 0xfc, 0x03, 0x00, 0x00, 0x83, 0xfa, 0x04, 0x77, 0x45, 0x89, + 0xc8, 0x8b, 0x4c, 0x24, 0x14, 0x8b, 0x74, 0x24, 0x18, 0x83, 0xc0, 0xf6, 0x8d, 0x50, 0x08, 0x39, + 0xf1, 0x74, 0x18, 0x8d, 0x79, 0x01, 0x89, 0x7c, 0x24, 0x14, 0x0f, 0xb6, 0x19, 0x89, 0xd1, 0xd3, + 0xe3, 0x09, 0xdd, 0x89, 0x6c, 0x24, 0x1c, 0x89, 0xf9, 0xeb, 0x08, 0xc7, 0x44, 0x24, 0x24, 0x01, + 0x00, 0x00, 0x00, 0x83, 0xc0, 0x10, 0x89, 0x44, 0x24, 0x20, 0x83, 0xfa, 0xfd, 0x89, 0xd0, 0x7c, + 0xcb, 0x83, 0xc2, 0x08, 0x89, 0xee, 0xc1, 0xee, 0x05, 0x89, 0x74, 0x24, 0x1c, 0x8d, 0x5a, 0xfb, + 0x89, 0x5c, 0x24, 0x20, 0x83, 0xfb, 0x04, 0x77, 0x47, 0x8b, 0x4c, 0x24, 0x14, 0x8b, 0x44, 0x24, + 0x18, 0x89, 0x04, 0x24, 0x83, 0xc2, 0xf3, 0x8d, 0x5a, 0x08, 0x3b, 0x0c, 0x24, 0x74, 0x18, 0x8d, + 0x41, 0x01, 0x89, 0x44, 0x24, 0x14, 0x0f, 0xb6, 0x39, 0x89, 0xd9, 0xd3, 0xe7, 0x09, 0xfe, 0x89, + 0x74, 0x24, 0x1c, 0x89, 0xc1, 0xeb, 0x08, 0xc7, 0x44, 0x24, 0x24, 0x01, 0x00, 0x00, 0x00, 0x83, + 0xc2, 0x10, 0x89, 0x54, 0x24, 0x20, 0x83, 0xfb, 0xfd, 0x89, 0xda, 0x7c, 0xca, 0x83, 0xc3, 0x08, + 0x89, 0xf0, 0xc1, 0xe8, 0x05, 0x89, 0x04, 0x24, 0x89, 0x44, 0x24, 0x1c, 0x8d, 0x43, 0xfb, 0x89, + 0x44, 0x24, 0x20, 0x83, 0xf8, 0x03, 0x77, 0x51, 0x89, 0x74, 0x24, 0x08, 0x8b, 0x7c, 0x24, 0x14, + 0x8b, 0x74, 0x24, 0x18, 0x83, 0xc3, 0xf3, 0x8d, 0x43, 0x08, 0x39, 0xf7, 0x74, 0x1e, 0x8d, 0x57, + 0x01, 0x89, 0x54, 0x24, 0x14, 0x0f, 0xb6, 0x3f, 0x89, 0xc1, 0xd3, 0xe7, 0x8b, 0x0c, 0x24, 0x09, + 0xf9, 0x89, 0x0c, 0x24, 0x89, 0x4c, 0x24, 0x1c, 0x89, 0xd7, 0xeb, 0x08, 0xc7, 0x44, 0x24, 0x24, + 0x01, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x10, 0x89, 0x5c, 0x24, 0x20, 0x83, 0xf8, 0xfc, 0x89, 0xc3, + 0x7c, 0xc5, 0x83, 0xc0, 0x08, 0x8b, 0x74, 0x24, 0x08, 0x83, 0xe5, 0x1f, 0x8b, 0x14, 0x24, 0xc1, + 0xea, 0x04, 0x89, 0x54, 0x24, 0x1c, 0x83, 0xc0, 0xfc, 0x89, 0x44, 0x24, 0x20, 0x83, 0xfd, 0x1d, + 0xc7, 0x44, 0x24, 0x10, 0xfd, 0xff, 0xff, 0xff, 0x0f, 0x87, 0xdc, 0x02, 0x00, 0x00, 0x83, 0xe6, + 0x1f, 0x83, 0xfe, 0x1d, 0x0f, 0x87, 0xd0, 0x02, 0x00, 0x00, 0x81, 0xc5, 0x01, 0x01, 0x00, 0x00, + 0x89, 0x6c, 0x24, 0x0c, 0x46, 0x89, 0x74, 0x24, 0x08, 0x83, 0x24, 0x24, 0x0f, 0xb9, 0xed, 0xff, + 0xff, 0xff, 0xc6, 0x84, 0x0c, 0x0b, 0x05, 0x00, 0x00, 0x00, 0x41, 0x75, 0xf5, 0x83, 0x04, 0x24, + 0x03, 0x8b, 0x5c, 0x24, 0x14, 0x8b, 0x74, 0x24, 0x18, 0x31, 0xed, 0x83, 0xf8, 0x02, 0x7f, 0x36, + 0x89, 0xdf, 0x39, 0xf7, 0x74, 0x18, 0x8d, 0x5f, 0x01, 0x89, 0x5c, 0x24, 0x14, 0x0f, 0xb6, 0x3f, + 0x89, 0xc1, 0xd3, 0xe7, 0x09, 0xfa, 0x89, 0x54, 0x24, 0x1c, 0x89, 0xdf, 0xeb, 0x08, 0xc7, 0x44, + 0x24, 0x24, 0x01, 0x00, 0x00, 0x00, 0x8d, 0x48, 0x08, 0x89, 0x4c, 0x24, 0x20, 0x83, 0xf8, 0xfb, + 0x89, 0xc8, 0x7c, 0xce, 0xeb, 0x02, 0x89, 0xc1, 0x89, 0xd0, 0xc1, 0xe8, 0x03, 0x89, 0x44, 0x24, + 0x1c, 0x83, 0xc1, 0xfd, 0x89, 0x4c, 0x24, 0x20, 0x80, 0xe2, 0x07, 0x0f, 0xb6, 0xbd, 0xec, 0x0a, + 0x07, 0x00, 0x88, 0x94, 0x3c, 0xf8, 0x04, 0x00, 0x00, 0x3b, 0x2c, 0x24, 0x8d, 0x6d, 0x01, 0x89, + 0xc2, 0x89, 0xc8, 0x75, 0x96, 0x8d, 0x4c, 0x24, 0x30, 0x8d, 0x94, 0x24, 0xf8, 0x04, 0x00, 0x00, + 0x6a, 0x13, 0xe8, 0x07, 0x04, 0x00, 0x00, 0x83, 0xc4, 0x04, 0x85, 0xc0, 0x0f, 0x85, 0x14, 0x02, + 0x00, 0x00, 0x83, 0xbc, 0x24, 0x90, 0x02, 0x00, 0x00, 0xff, 0x0f, 0x84, 0x0a, 0x02, 0x00, 0x00, + 0x8b, 0x5c, 0x24, 0x0c, 0x8b, 0x44, 0x24, 0x08, 0x8d, 0x34, 0x18, 0x31, 0xff, 0x8d, 0x4c, 0x24, + 0x14, 0x8d, 0x54, 0x24, 0x30, 0xe8, 0x81, 0x03, 0x00, 0x00, 0x3b, 0x84, 0x24, 0x90, 0x02, 0x00, + 0x00, 0x0f, 0x8f, 0xe3, 0x01, 0x00, 0x00, 0x83, 0xf8, 0x12, 0x0f, 0x84, 0xb4, 0x00, 0x00, 0x00, + 0x83, 0xf8, 0x11, 0x74, 0x61, 0x83, 0xf8, 0x10, 0x0f, 0x85, 0xf0, 0x00, 0x00, 0x00, 0x85, 0xff, + 0x0f, 0x84, 0xc4, 0x01, 0x00, 0x00, 0x8b, 0x6c, 0x24, 0x20, 0x83, 0xfd, 0x02, 0x0f, 0x8d, 0x1a, + 0x01, 0x00, 0x00, 0x8b, 0x5c, 0x24, 0x14, 0x8b, 0x44, 0x24, 0x18, 0x8b, 0x54, 0x24, 0x1c, 0x89, + 0xe9, 0x39, 0xc3, 0x74, 0x16, 0x8d, 0x6b, 0x01, 0x89, 0x6c, 0x24, 0x14, 0x0f, 0xb6, 0x1b, 0xd3, + 0xe3, 0x09, 0xda, 0x89, 0x54, 0x24, 0x1c, 0x89, 0xeb, 0xeb, 0x08, 0xc7, 0x44, 0x24, 0x24, 0x01, + 0x00, 0x00, 0x00, 0x8d, 0x69, 0x08, 0x89, 0x6c, 0x24, 0x20, 0x83, 0xf9, 0xfa, 0x89, 0xe9, 0x7c, + 0xd0, 0xe9, 0xdb, 0x00, 0x00, 0x00, 0x8b, 0x5c, 0x24, 0x20, 0x83, 0xfb, 0x03, 0x0f, 0x8d, 0x90, + 0x00, 0x00, 0x00, 0x8b, 0x6c, 0x24, 0x14, 0x8b, 0x54, 0x24, 0x18, 0x8b, 0x44, 0x24, 0x1c, 0x89, + 0xd9, 0x39, 0xd5, 0x74, 0x17, 0x8d, 0x5d, 0x01, 0x89, 0x5c, 0x24, 0x14, 0x0f, 0xb6, 0x6d, 0x00, + 0xd3, 0xe5, 0x09, 0xe8, 0x89, 0x44, 0x24, 0x1c, 0x89, 0xdd, 0xeb, 0x08, 0xc7, 0x44, 0x24, 0x24, + 0x01, 0x00, 0x00, 0x00, 0x8d, 0x59, 0x08, 0x89, 0x5c, 0x24, 0x20, 0x83, 0xf9, 0xfb, 0x89, 0xd9, + 0x7c, 0xcf, 0xeb, 0x53, 0x8b, 0x5c, 0x24, 0x20, 0x83, 0xfb, 0x07, 0x7d, 0x62, 0x8b, 0x6c, 0x24, + 0x14, 0x8b, 0x54, 0x24, 0x18, 0x8b, 0x44, 0x24, 0x1c, 0x89, 0xd9, 0x39, 0xd5, 0x74, 0x17, 0x8d, + 0x5d, 0x01, 0x89, 0x5c, 0x24, 0x14, 0x0f, 0xb6, 0x6d, 0x00, 0xd3, 0xe5, 0x09, 0xe8, 0x89, 0x44, + 0x24, 0x1c, 0x89, 0xdd, 0xeb, 0x08, 0xc7, 0x44, 0x24, 0x24, 0x01, 0x00, 0x00, 0x00, 0x8d, 0x59, + 0x08, 0x89, 0x5c, 0x24, 0x20, 0x83, 0xf9, 0xff, 0x89, 0xd9, 0x7c, 0xcf, 0xeb, 0x25, 0x31, 0xc9, + 0x41, 0xeb, 0x63, 0x8b, 0x44, 0x24, 0x1c, 0x89, 0xc1, 0x83, 0xe1, 0x07, 0xc1, 0xe8, 0x03, 0x89, + 0x44, 0x24, 0x1c, 0x83, 0xc3, 0xfd, 0x89, 0x5c, 0x24, 0x20, 0x83, 0xc1, 0x03, 0xeb, 0x1a, 0x8b, + 0x44, 0x24, 0x1c, 0x89, 0xc1, 0x83, 0xe1, 0x7f, 0xc1, 0xe8, 0x07, 0x89, 0x44, 0x24, 0x1c, 0x83, + 0xc3, 0xf9, 0x89, 0x5c, 0x24, 0x20, 0x83, 0xc1, 0x0b, 0x31, 0xc0, 0xeb, 0x25, 0x8b, 0x54, 0x24, + 0x1c, 0x8d, 0x84, 0x24, 0xf8, 0x04, 0x00, 0x00, 0x8a, 0x44, 0x07, 0xff, 0x89, 0xd1, 0x83, 0xe1, + 0x03, 0xc1, 0xea, 0x02, 0x89, 0x54, 0x24, 0x1c, 0x83, 0xc5, 0xfe, 0x89, 0x6c, 0x24, 0x20, 0x83, + 0xc1, 0x03, 0x8b, 0x5c, 0x24, 0x0c, 0x89, 0xf2, 0x29, 0xfa, 0x39, 0xd1, 0x77, 0x6c, 0x88, 0x84, + 0x3c, 0xf8, 0x04, 0x00, 0x00, 0x47, 0x49, 0x75, 0xf5, 0x39, 0xf7, 0x0f, 0x82, 0x5c, 0xfe, 0xff, + 0xff, 0x80, 0xbc, 0x24, 0xf8, 0x05, 0x00, 0x00, 0x00, 0x74, 0x4f, 0x8d, 0x4c, 0x24, 0x30, 0x8d, + 0x94, 0x24, 0xf8, 0x04, 0x00, 0x00, 0x53, 0xe8, 0x22, 0x02, 0x00, 0x00, 0x83, 0xc4, 0x04, 0x85, + 0xc0, 0x75, 0x33, 0x8d, 0x94, 0x1c, 0xf8, 0x04, 0x00, 0x00, 0x8d, 0x8c, 0x24, 0x94, 0x02, 0x00, + 0x00, 0xff, 0x74, 0x24, 0x08, 0xe8, 0x04, 0x02, 0x00, 0x00, 0x83, 0xc4, 0x04, 0x85, 0xc0, 0x75, + 0x1d, 0xe9, 0xd4, 0xfb, 0xff, 0xff, 0x31, 0xc0, 0x83, 0x7c, 0x24, 0x24, 0x00, 0x0f, 0x94, 0xc0, + 0x8d, 0x44, 0x40, 0xfd, 0xeb, 0x08, 0x89, 0x44, 0x24, 0x10, 0x8b, 0x44, 0x24, 0x10, 0x81, 0xc4, + 0x38, 0x06, 0x00, 0x00, 0x5e, 0x5f, 0x5b, 0x5d, 0xc3, 0x55, 0x53, 0x57, 0x56, 0x89, 0xce, 0x8b, + 0x59, 0x0c, 0x39, 0xd3, 0x7d, 0x2d, 0x8b, 0x0e, 0x8b, 0x46, 0x04, 0x39, 0xc1, 0x74, 0x13, 0x8d, + 0x79, 0x01, 0x89, 0x3e, 0x0f, 0xb6, 0x29, 0x89, 0xd9, 0xd3, 0xe5, 0x09, 0x6e, 0x08, 0x89, 0xf9, + 0xeb, 0x07, 0xc7, 0x46, 0x10, 0x01, 0x00, 0x00, 0x00, 0x83, 0xc3, 0x08, 0x89, 0x5e, 0x0c, 0x39, + 0xd3, 0x7c, 0xd8, 0x8b, 0x7e, 0x08, 0x31, 0xc0, 0x48, 0x89, 0xd1, 0xd3, 0xe0, 0xf7, 0xd0, 0x21, + 0xf8, 0xd3, 0xef, 0x89, 0x7e, 0x08, 0x29, 0xd3, 0x89, 0x5e, 0x0c, 0x5e, 0x5f, 0x5b, 0x5d, 0xc3, + 0x55, 0x53, 0x57, 0x56, 0x83, 0xec, 0x08, 0x89, 0xd5, 0x89, 0xcf, 0xe8, 0x1b, 0x01, 0x00, 0x00, + 0x83, 0x7f, 0x10, 0x00, 0x74, 0x0d, 0xb8, 0xfd, 0xff, 0xff, 0xff, 0x83, 0xc4, 0x08, 0x5e, 0x5f, + 0x5b, 0x5d, 0xc3, 0x89, 0x2c, 0x24, 0x3d, 0xff, 0x00, 0x00, 0x00, 0x77, 0x10, 0x8b, 0x4f, 0x18, + 0x8d, 0x51, 0x01, 0x89, 0x57, 0x18, 0x88, 0x01, 0xe9, 0xcf, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x01, + 0x00, 0x00, 0x0f, 0x84, 0xdc, 0x00, 0x00, 0x00, 0x3b, 0x85, 0x60, 0x02, 0x00, 0x00, 0x7f, 0xc6, + 0x3d, 0x1d, 0x01, 0x00, 0x00, 0x77, 0xbf, 0x8b, 0x4c, 0x24, 0x1c, 0x83, 0xb9, 0x60, 0x02, 0x00, + 0x00, 0xff, 0x74, 0xb2, 0x0f, 0xb7, 0x8c, 0x00, 0x54, 0x08, 0x07, 0x00, 0x89, 0x4c, 0x24, 0x04, + 0x05, 0xff, 0xfe, 0xff, 0xff, 0x31, 0xf6, 0xb9, 0xff, 0x00, 0x00, 0x10, 0x0f, 0xa3, 0xc1, 0x72, + 0x10, 0x0f, 0xb6, 0x90, 0x38, 0x0a, 0x07, 0x00, 0x89, 0xf9, 0xe8, 0x1a, 0xff, 0xff, 0xff, 0x89, + 0xc6, 0x89, 0xf9, 0x8b, 0x5c, 0x24, 0x1c, 0x89, 0xda, 0xe8, 0x8d, 0x00, 0x00, 0x00, 0x3b, 0x83, + 0x60, 0x02, 0x00, 0x00, 0x0f, 0x8f, 0x6c, 0xff, 0xff, 0xff, 0x89, 0xc1, 0x83, 0xf8, 0x1d, 0x0f, + 0x87, 0x61, 0xff, 0xff, 0xff, 0x0f, 0xb7, 0xac, 0x09, 0xb0, 0x0a, 0x07, 0x00, 0x31, 0xc0, 0x83, + 0xf9, 0x04, 0x72, 0x0e, 0x0f, 0xb6, 0x91, 0x92, 0x0a, 0x07, 0x00, 0x89, 0xf9, 0xe8, 0xd7, 0xfe, + 0xff, 0xff, 0x01, 0xe8, 0x8b, 0x4f, 0x18, 0x89, 0xca, 0x2b, 0x57, 0x14, 0x39, 0xd0, 0x0f, 0x8f, + 0x32, 0xff, 0xff, 0xff, 0x03, 0x74, 0x24, 0x04, 0x85, 0xf6, 0x7e, 0x18, 0xf7, 0xd8, 0x31, 0xc9, + 0x8b, 0x57, 0x18, 0x8d, 0x2c, 0x0a, 0x8a, 0x1c, 0x28, 0x88, 0x1c, 0x0a, 0x41, 0x39, 0xce, 0x75, + 0xef, 0x8b, 0x4f, 0x18, 0x01, 0xf1, 0x89, 0x4f, 0x18, 0x8b, 0x2c, 0x24, 0x89, 0xf9, 0x89, 0xea, + 0xe8, 0x16, 0x00, 0x00, 0x00, 0x83, 0x7f, 0x10, 0x00, 0x0f, 0x84, 0x07, 0xff, 0xff, 0xff, 0xe9, + 0xf2, 0xfe, 0xff, 0xff, 0x31, 0xc0, 0xe9, 0xf0, 0xfe, 0xff, 0xff, 0x55, 0x53, 0x57, 0x56, 0x50, + 0x89, 0xd5, 0x89, 0xcb, 0x31, 0xd2, 0x42, 0xe8, 0x6d, 0xfe, 0xff, 0xff, 0x89, 0xc7, 0x0f, 0xb7, + 0x45, 0x02, 0x31, 0xf6, 0x39, 0xc7, 0x89, 0x2c, 0x24, 0x72, 0x21, 0x83, 0xc5, 0x04, 0x31, 0xf6, + 0x01, 0xc6, 0x29, 0xc7, 0x89, 0xd9, 0x31, 0xd2, 0x42, 0xe8, 0x4b, 0xfe, 0xff, 0xff, 0x8d, 0x3c, + 0x78, 0x0f, 0xb7, 0x45, 0x00, 0x83, 0xc5, 0x02, 0x39, 0xc7, 0x7d, 0xe4, 0x01, 0xfe, 0x8b, 0x04, + 0x24, 0x0f, 0xb7, 0x44, 0x70, 0x20, 0x83, 0xc4, 0x04, 0x5e, 0x5f, 0x5b, 0x5d, 0xc3, 0x55, 0x53, + 0x57, 0x56, 0x83, 0xec, 0x24, 0x8b, 0x7c, 0x24, 0x38, 0xb8, 0xe0, 0xff, 0xff, 0xff, 0x66, 0xc7, + 0x44, 0x01, 0x20, 0x00, 0x00, 0x83, 0xc0, 0x02, 0x75, 0xf4, 0xc7, 0x81, 0x60, 0x02, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x85, 0xff, 0x74, 0x1b, 0x31, 0xc0, 0x80, 0x3c, 0x02, 0x00, 0x74, 0x0e, + 0x89, 0x81, 0x60, 0x02, 0x00, 0x00, 0x0f, 0xb6, 0x34, 0x02, 0x66, 0xff, 0x04, 0x71, 0x40, 0x39, + 0xc7, 0x75, 0xe7, 0x31, 0xff, 0x31, 0xdb, 0x43, 0xbd, 0xe0, 0xff, 0xff, 0xff, 0xb8, 0xfd, 0xff, + 0xff, 0xff, 0x0f, 0xb7, 0x74, 0x29, 0x20, 0x29, 0xf3, 0x72, 0x72, 0x01, 0xdb, 0x66, 0x89, 0x7c, + 0x2c, 0x24, 0x01, 0xf7, 0x83, 0xc5, 0x02, 0x75, 0xe9, 0x83, 0xff, 0x02, 0x0f, 0x93, 0x44, 0x24, + 0x03, 0x85, 0xdb, 0x0f, 0x95, 0xc3, 0x84, 0x5c, 0x24, 0x03, 0x75, 0x51, 0x83, 0xff, 0x01, 0x75, + 0x07, 0x66, 0x83, 0x79, 0x02, 0x01, 0x75, 0x45, 0x8b, 0x5c, 0x24, 0x38, 0x85, 0xdb, 0x74, 0x25, + 0x31, 0xc0, 0x0f, 0xb6, 0x34, 0x02, 0x85, 0xf6, 0x74, 0x16, 0x0f, 0xb7, 0x5c, 0x74, 0x04, 0x8d, + 0x6b, 0x01, 0x66, 0x89, 0x6c, 0x74, 0x04, 0x66, 0x89, 0x44, 0x59, 0x20, 0x8b, 0x5c, 0x24, 0x38, + 0x40, 0x39, 0xc3, 0x75, 0xdd, 0x31, 0xc0, 0x83, 0xff, 0x01, 0x75, 0x11, 0x66, 0xc7, 0x41, 0x02, + 0x02, 0x00, 0x8b, 0x91, 0x60, 0x02, 0x00, 0x00, 0x42, 0x66, 0x89, 0x51, 0x22, 0x83, 0xc4, 0x24, + 0x5e, 0x5f, 0x5b, 0x5d, 0xc3, 0x00, 0x00, 0x00, 0x14, 0x02, 0x07, 0x00, 0x72, 0x02, 0x07, 0x00, + 0x5a, 0x03, 0x07, 0x00, 0x6e, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, + 0x05, 0x05, 0x05, 0x05, 0x00, 0x7f, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, + 0x08, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x0b, 0x00, 0x0d, 0x00, 0x0f, 0x00, 0x11, 0x00, 0x13, 0x00, + 0x17, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x23, 0x00, 0x2b, 0x00, 0x33, 0x00, 0x3b, 0x00, 0x43, 0x00, + 0x53, 0x00, 0x63, 0x00, 0x73, 0x00, 0x83, 0x00, 0xa3, 0x00, 0xc3, 0x00, 0xe3, 0x00, 0x02, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, + 0x06, 0x06, 0x07, 0x07, 0x08, 0x08, 0x09, 0x09, 0x0a, 0x0a, 0x0b, 0x0b, 0x0c, 0x0c, 0x0d, 0x0d, + 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x07, 0x00, 0x09, 0x00, 0x0d, 0x00, + 0x11, 0x00, 0x19, 0x00, 0x21, 0x00, 0x31, 0x00, 0x41, 0x00, 0x61, 0x00, 0x81, 0x00, 0xc1, 0x00, + 0x01, 0x01, 0x81, 0x01, 0x01, 0x02, 0x01, 0x03, 0x01, 0x04, 0x01, 0x06, 0x01, 0x08, 0x01, 0x0c, + 0x01, 0x10, 0x01, 0x18, 0x01, 0x20, 0x01, 0x30, 0x01, 0x40, 0x01, 0x60, 0x10, 0x11, 0x12, 0x00, + 0x08, 0x07, 0x09, 0x06, 0x0a, 0x05, 0x0b, 0x04, 0x0c, 0x03, 0x0d, 0x02, 0x0e, 0x01, 0x0f, 0x90, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x85, 0x7c, 0x0d, 0x5c, 0x53, 0x47, + 0xb6, 0xf8, 0xbd, 0x10, 0x30, 0x62, 0xf4, 0x46, 0x45, 0x0b, 0x8a, 0x35, 0x5a, 0xec, 0xca, 0xd6, + 0x55, 0xa2, 0xb6, 0x05, 0x3f, 0x2a, 0x5f, 0x01, 0xd4, 0x46, 0x03, 0x91, 0xd0, 0xdd, 0x96, 0x52, + 0x2a, 0xa4, 0x81, 0xaa, 0xd0, 0x90, 0xeb, 0x47, 0x15, 0x1b, 0xbc, 0x64, 0xcb, 0x70, 0x7b, 0xfb, + 0xba, 0xad, 0xdd, 0xd7, 0xff, 0xee, 0xf6, 0x6d, 0xbb, 0x6d, 0x77, 0xed, 0x7e, 0xe9, 0x6e, 0x5f, + 0xfd, 0xaa, 0x1f, 0x09, 0xb8, 0x01, 0xd4, 0x55, 0x50, 0x57, 0x41, 0x5d, 0xa5, 0xad, 0x6b, 0x2f, + 0x0d, 0xaf, 0x1b, 0xc0, 0x02, 0xa2, 0x25, 0xff, 0x73, 0xe6, 0x26, 0x08, 0xed, 0xee, 0x7b, 0xfe, + 0x4c, 0x72, 0x67, 0xe6, 0xcc, 0x99, 0x33, 0x67, 0xce, 0xe7, 0xcc, 0x5c, 0xee, 0x26, 0xba, 0x8f, + 0x6f, 0x5d, 0xa2, 0x62, 0x0e, 0x25, 0xfd, 0x54, 0xc5, 0x54, 0x77, 0xe2, 0x63, 0xef, 0x6f, 0x39, + 0x76, 0xca, 0xef, 0xfc, 0x0c, 0xf3, 0xe5, 0x03, 0xf0, 0x15, 0xc3, 0x1c, 0xd4, 0x31, 0x0c, 0xf3, + 0x6a, 0xdb, 0xab, 0xee, 0x57, 0x3b, 0x5e, 0x95, 0x5f, 0x6d, 0xe9, 0xcc, 0xd2, 0x32, 0xcc, 0xe9, + 0xd0, 0xbf, 0x3c, 0xf2, 0x0f, 0x8b, 0xd0, 0x15, 0x49, 0x2e, 0x5a, 0x1b, 0x0d, 0x7d, 0x81, 0xf0, + 0x46, 0xc3, 0x00, 0x00, 0x33, 0x92, 0xa1, 0x8f, 0x9c, 0x1c, 0xbc, 0x7b, 0x84, 0xd9, 0xc1, 0x30, + 0xc7, 0xf1, 0xeb, 0x10, 0x13, 0xc6, 0x30, 0xbd, 0xef, 0x73, 0x6c, 0x4c, 0x99, 0xda, 0xb6, 0x0d, + 0xd0, 0x9e, 0x3a, 0xa8, 0x1d, 0x81, 0x93, 0xd3, 0xb9, 0xe3, 0x87, 0xb8, 0xd9, 0x6e, 0xeb, 0xc1, + 0xb7, 0xa0, 0xad, 0x8c, 0x31, 0x9d, 0xd2, 0xbb, 0xef, 0xb5, 0xde, 0x29, 0x63, 0x6c, 0xcc, 0x8e, + 0x53, 0x8f, 0x32, 0x49, 0x6b, 0x58, 0xc4, 0xce, 0x04, 0x18, 0xdd, 0x9b, 0x2a, 0x85, 0x06, 0x8e, + 0x9d, 0x31, 0x88, 0xa4, 0x9e, 0x81, 0x2f, 0x35, 0xf3, 0x6d, 0xa4, 0xdc, 0x61, 0x3f, 0x03, 0x68, + 0xbf, 0xfc, 0x12, 0x5a, 0x47, 0x61, 0xbc, 0xe5, 0xfb, 0x26, 0x10, 0x8e, 0xa8, 0xea, 0x32, 0xe2, + 0x55, 0xbf, 0x12, 0xba, 0x19, 0x46, 0xcc, 0x88, 0x57, 0xbf, 0x77, 0x4b, 0x79, 0xd0, 0xbc, 0x37, + 0x00, 0x0f, 0x1c, 0x1b, 0x71, 0x97, 0xfe, 0x8c, 0x57, 0xf5, 0xe0, 0xcf, 0x0c, 0x0d, 0xfc, 0x98, + 0x2d, 0xf9, 0x79, 0x5f, 0x2e, 0xed, 0xfe, 0x57, 0x83, 0xd1, 0x19, 0x7c, 0x99, 0xd7, 0x4d, 0x87, + 0x6a, 0x79, 0xc4, 0x4a, 0x1e, 0xf4, 0x77, 0x3f, 0x62, 0x15, 0x1f, 0x1c, 0xe8, 0xe6, 0x3e, 0xe4, + 0xde, 0x1d, 0x33, 0xd3, 0xfa, 0xb6, 0xb5, 0xc0, 0x5a, 0x68, 0x7d, 0xda, 0xfa, 0x23, 0xeb, 0x0f, + 0xad, 0x4f, 0x5a, 0x9f, 0xc0, 0x36, 0x7f, 0xf7, 0x9d, 0xbf, 0x32, 0x83, 0xf7, 0x60, 0x6f, 0x75, + 0x3f, 0x67, 0x95, 0x8a, 0xe3, 0xe7, 0x5a, 0x4d, 0x56, 0xb3, 0x35, 0xc7, 0x9a, 0x6b, 0xb5, 0x58, + 0xf3, 0xad, 0x79, 0xd6, 0x5f, 0xdc, 0x1f, 0xc9, 0xbd, 0xc3, 0xed, 0x51, 0x7a, 0x3c, 0x62, 0xe5, + 0xd8, 0xa9, 0x77, 0xe9, 0xcf, 0xfd, 0xaa, 0x1e, 0x18, 0x58, 0xc3, 0xe2, 0xc0, 0x67, 0xba, 0x63, + 0x18, 0x2b, 0xac, 0xd5, 0x3d, 0x9a, 0x0a, 0x0a, 0x9f, 0x7e, 0xb2, 0xe1, 0xb5, 0xd1, 0xff, 0x98, + 0xff, 0xe5, 0x9f, 0xc2, 0x91, 0xd0, 0xbf, 0x5f, 0xcc, 0xb7, 0x06, 0x22, 0x27, 0xf5, 0xbc, 0x3d, + 0x3f, 0x30, 0x7f, 0x6a, 0x8f, 0x38, 0x05, 0x85, 0x80, 0x4c, 0x99, 0x0a, 0x2c, 0x68, 0x8c, 0xc0, + 0xe7, 0x69, 0xf0, 0x24, 0xae, 0x8b, 0x57, 0x35, 0x46, 0x4c, 0xea, 0x51, 0x3a, 0x00, 0xbf, 0x92, + 0x7a, 0x29, 0xbf, 0x52, 0xe8, 0xcf, 0x8c, 0xec, 0xde, 0x20, 0xbf, 0x9e, 0xef, 0xf9, 0xf7, 0xfc, + 0x72, 0xf5, 0x7c, 0x6b, 0x69, 0xbc, 0x91, 0x6b, 0x7a, 0x19, 0x6f, 0x64, 0x2e, 0x7e, 0x59, 0x7a, + 0x19, 0x6b, 0xf2, 0xd4, 0x49, 0x3d, 0x8e, 0xf9, 0xc8, 0x8c, 0xff, 0x66, 0x13, 0xdd, 0x7f, 0x9d, + 0x8a, 0xec, 0x73, 0x74, 0xea, 0xe1, 0xe9, 0x57, 0xb9, 0xbd, 0xb5, 0x0f, 0x5a, 0x7a, 0x0f, 0x32, + 0x61, 0x7f, 0x9d, 0xba, 0x47, 0xe5, 0x88, 0xc2, 0x9e, 0x2a, 0x27, 0xf4, 0x7c, 0x66, 0x90, 0xf2, + 0x28, 0xa9, 0x97, 0xf2, 0x28, 0xa5, 0x97, 0xd3, 0x35, 0x38, 0x4f, 0x01, 0x93, 0x1a, 0xbe, 0xec, + 0xed, 0x01, 0x26, 0x7d, 0x02, 0x4c, 0xba, 0xf2, 0x6a, 0xc3, 0xab, 0x9f, 0xbf, 0xea, 0x7b, 0xf5, + 0x3c, 0x32, 0x49, 0xa4, 0xf3, 0x22, 0x74, 0x8e, 0xce, 0xe5, 0x30, 0x28, 0xc3, 0x38, 0xa6, 0x07, + 0x1e, 0x06, 0x3a, 0x98, 0xc0, 0xc3, 0xb9, 0xf4, 0x1b, 0x2b, 0xe5, 0xf2, 0x2e, 0x86, 0x11, 0x4e, + 0x68, 0x1a, 0xf4, 0xee, 0x86, 0xff, 0x9d, 0x77, 0xf8, 0x4f, 0xd1, 0x0f, 0x90, 0x26, 0xd5, 0x7b, + 0xcc, 0x2d, 0x86, 0x69, 0x00, 0xf6, 0xa8, 0x6e, 0x51, 0xf6, 0x68, 0xe8, 0xcf, 0x8c, 0xe8, 0x5b, + 0x0a, 0x7b, 0xa4, 0x0d, 0xf1, 0xd1, 0x5f, 0xbe, 0xda, 0xfb, 0xef, 0x59, 0xb4, 0xa7, 0x57, 0x11, + 0xa9, 0x50, 0xd3, 0x9d, 0xc0, 0x66, 0x55, 0x60, 0xb3, 0x3a, 0xb0, 0x99, 0x09, 0xdc, 0xcf, 0xdc, + 0x12, 0x4e, 0x44, 0x0e, 0xce, 0xc7, 0xe9, 0xaa, 0x6e, 0xe1, 0xcf, 0xfd, 0x9a, 0x5b, 0xf7, 0xa6, + 0xfb, 0x59, 0xef, 0xb7, 0xa7, 0x3b, 0x27, 0x10, 0x60, 0x98, 0x11, 0x82, 0xf1, 0xef, 0xe5, 0x00, + 0x34, 0xdb, 0x9c, 0x0f, 0xba, 0xad, 0x11, 0x0d, 0xd1, 0x62, 0x95, 0x56, 0xcc, 0xd3, 0x88, 0x05, + 0x6a, 0x91, 0x8f, 0x71, 0x9d, 0x73, 0xcc, 0x77, 0x05, 0x1c, 0xd9, 0x2e, 0x37, 0x57, 0xf3, 0x1f, + 0xb8, 0xec, 0x47, 0xdd, 0x82, 0x7f, 0x26, 0x77, 0xf4, 0xa4, 0xd0, 0x3d, 0x33, 0xa1, 0x49, 0x18, + 0xd0, 0x71, 0xbb, 0x3e, 0x87, 0x6a, 0x57, 0x9f, 0x23, 0x8e, 0xdc, 0x4f, 0x2c, 0x2a, 0xdf, 0x14, + 0x84, 0xfc, 0xa3, 0x52, 0x35, 0x96, 0xdc, 0xdf, 0x98, 0xa9, 0x42, 0xf4, 0xfa, 0x2b, 0xfa, 0x73, + 0x9d, 0x1b, 0x41, 0x9f, 0xb1, 0xf5, 0x0c, 0xb6, 0x5e, 0xe1, 0x6a, 0x9e, 0x83, 0xb2, 0x94, 0x1d, + 0x70, 0x35, 0x71, 0x35, 0xff, 0xc5, 0x22, 0xea, 0x26, 0x40, 0xca, 0x1d, 0xad, 0x87, 0x01, 0x12, + 0x3c, 0xc2, 0xed, 0x99, 0x95, 0x1f, 0x4a, 0xa9, 0x6c, 0x5f, 0x2b, 0xb9, 0x76, 0xfe, 0x26, 0xe1, + 0x65, 0x72, 0x89, 0x78, 0xce, 0xff, 0x93, 0x18, 0xfc, 0xdc, 0x1f, 0xce, 0x37, 0x1a, 0xba, 0x10, + 0xab, 0xcf, 0x20, 0xad, 0x0d, 0xb8, 0xce, 0x72, 0x35, 0xcb, 0x69, 0xf7, 0xc6, 0x91, 0x94, 0xb9, + 0x67, 0x05, 0x81, 0x80, 0x46, 0x47, 0x2e, 0x74, 0x23, 0x1e, 0x4e, 0x40, 0x8b, 0xd2, 0xd7, 0x3e, + 0x0a, 0x21, 0x60, 0x23, 0xd7, 0x7c, 0x65, 0xa4, 0x4d, 0x7f, 0xae, 0xbf, 0x9f, 0xb4, 0xea, 0xcf, + 0xb9, 0xfa, 0x48, 0x03, 0x57, 0xe3, 0x41, 0x05, 0x98, 0x10, 0xa4, 0xbe, 0xf3, 0x23, 0x2c, 0x79, + 0x53, 0xee, 0x61, 0xe4, 0x27, 0x91, 0x8b, 0x8d, 0x06, 0x3f, 0x8a, 0x90, 0x3e, 0xe0, 0x5b, 0xd0, + 0xf9, 0x3a, 0x02, 0x18, 0xfc, 0x1f, 0xcf, 0x24, 0xfe, 0xb9, 0x7f, 0x21, 0x6d, 0xb5, 0x9d, 0xe7, + 0x3b, 0x88, 0x41, 0x26, 0x17, 0xc9, 0x25, 0xd1, 0xe0, 0xaf, 0x85, 0x61, 0xa0, 0xe6, 0x26, 0x0c, + 0xe7, 0x1b, 0x7b, 0x4d, 0x2c, 0x90, 0xf5, 0xcd, 0x62, 0x9e, 0x5f, 0x34, 0x74, 0x91, 0x3c, 0x3f, + 0xf7, 0x7e, 0x3f, 0xcb, 0xbd, 0x7f, 0x0d, 0x3e, 0x0d, 0x2c, 0x29, 0xe8, 0x62, 0xdd, 0x63, 0x9b, + 0xc8, 0x60, 0xff, 0x39, 0xd2, 0xdd, 0xdf, 0x2a, 0x16, 0x68, 0xd9, 0x76, 0xd1, 0x18, 0x3d, 0xf1, + 0x24, 0x69, 0xf5, 0x74, 0xce, 0xf4, 0x0c, 0xce, 0x24, 0xe7, 0x1f, 0x28, 0x88, 0x7e, 0x20, 0x4f, + 0x9b, 0x70, 0x11, 0xfa, 0xc7, 0x5e, 0x17, 0x0b, 0xba, 0x56, 0xf1, 0x9f, 0x60, 0x4f, 0xd6, 0x2d, + 0xe6, 0xe1, 0x52, 0x45, 0x90, 0x85, 0xe4, 0x45, 0x95, 0xd0, 0x31, 0x34, 0xd6, 0x43, 0x2e, 0x93, + 0x53, 0xa4, 0x0d, 0xe4, 0xf7, 0xe9, 0xc2, 0x27, 0x0b, 0x1a, 0x88, 0x87, 0xb4, 0xc0, 0x04, 0xbb, + 0x49, 0x83, 0xab, 0x8f, 0xab, 0xa9, 0x18, 0x0a, 0x04, 0x60, 0xad, 0x1a, 0x23, 0xe9, 0xe4, 0x9e, + 0x85, 0x12, 0x2c, 0xd6, 0xb8, 0x59, 0xed, 0xc3, 0x13, 0x16, 0x02, 0xac, 0xa3, 0x9e, 0x3b, 0x72, + 0x96, 0xb4, 0x9c, 0x97, 0x91, 0x41, 0xf5, 0xbe, 0xff, 0x06, 0x88, 0x31, 0xb3, 0x5a, 0x61, 0x8d, + 0xd7, 0xa8, 0xb8, 0x23, 0x4d, 0xe7, 0xbf, 0x24, 0xe7, 0x3b, 0x13, 0x10, 0x8d, 0x17, 0xf8, 0xd9, + 0x86, 0xb3, 0xed, 0x22, 0xc0, 0x62, 0xa7, 0xa7, 0x03, 0xe1, 0x3d, 0xd0, 0x7e, 0xb1, 0xf3, 0x33, + 0x68, 0x0f, 0xca, 0xd5, 0x8d, 0x01, 0xa1, 0x2b, 0x46, 0x34, 0x68, 0x60, 0x3a, 0xe4, 0x8c, 0xe7, + 0xab, 0x99, 0xe4, 0x24, 0x4c, 0x47, 0xdf, 0xba, 0x28, 0x4f, 0xcb, 0xf6, 0x08, 0xad, 0xc0, 0x5b, + 0xac, 0xeb, 0x27, 0x8e, 0x78, 0x15, 0x3c, 0x0e, 0xcd, 0xd4, 0xfb, 0x41, 0xfa, 0xf4, 0xbd, 0xec, + 0x1d, 0xa1, 0x85, 0x91, 0x76, 0xc4, 0xab, 0xf3, 0x73, 0x72, 0x4d, 0x66, 0xf9, 0x89, 0x6f, 0x02, + 0x01, 0xe1, 0x44, 0xb4, 0x04, 0xb6, 0x5b, 0x34, 0xa9, 0xf4, 0x3d, 0x8b, 0x12, 0xc3, 0xa1, 0x83, + 0x70, 0x8e, 0x21, 0x7e, 0xa9, 0xe4, 0x16, 0x9d, 0xe7, 0x3d, 0x31, 0xe6, 0xa3, 0xb9, 0xa3, 0x06, + 0xed, 0xa1, 0x15, 0x28, 0xb3, 0x19, 0x1e, 0x90, 0x0c, 0xc1, 0xad, 0xe3, 0x8e, 0x5e, 0x14, 0x7a, + 0x66, 0x02, 0x07, 0x32, 0x5a, 0x48, 0x8b, 0x98, 0xa7, 0x26, 0xe7, 0xb9, 0xa3, 0xe7, 0xb8, 0x8c, + 0x56, 0xa8, 0x14, 0xea, 0x75, 0x22, 0xaf, 0xe1, 0x8e, 0x9e, 0x01, 0xe9, 0x41, 0x80, 0x93, 0xa4, + 0x9e, 0x18, 0xbb, 0x12, 0x4e, 0xea, 0x9b, 0x85, 0xc1, 0x15, 0xc7, 0xa9, 0xc1, 0x7b, 0xf9, 0xbf, + 0xe0, 0x9b, 0x1f, 0x43, 0xda, 0x3b, 0xdf, 0xc0, 0xd5, 0x6e, 0x1d, 0xf2, 0x90, 0xeb, 0xdc, 0x1f, + 0xfa, 0x61, 0x11, 0x49, 0xcf, 0xf9, 0x2f, 0xfb, 0x3c, 0x3a, 0xce, 0x30, 0x78, 0x88, 0x42, 0x1a, + 0x5a, 0xff, 0xb4, 0xe2, 0xfb, 0x46, 0x3f, 0xf7, 0xc1, 0xb5, 0xf3, 0x9f, 0x43, 0x3d, 0x69, 0xe7, + 0x0c, 0xbd, 0x20, 0x2d, 0xd8, 0xf6, 0x89, 0x02, 0x70, 0xaa, 0xbf, 0x25, 0x1c, 0x38, 0x66, 0x90, + 0xf5, 0x57, 0xb8, 0xf7, 0x07, 0x59, 0x45, 0x0a, 0xce, 0xb0, 0xe3, 0x78, 0xbf, 0xa4, 0x59, 0x0d, + 0x03, 0x93, 0xd6, 0xfe, 0x56, 0x72, 0xa7, 0xff, 0xbc, 0x68, 0xd0, 0xb2, 0x0d, 0xa0, 0x92, 0x13, + 0x3d, 0xe4, 0x94, 0xc7, 0x37, 0xd3, 0x73, 0x7b, 0x26, 0x69, 0x7a, 0xc0, 0x10, 0xfd, 0x80, 0x51, + 0x9b, 0x70, 0x56, 0x34, 0x76, 0xc5, 0xd6, 0x07, 0x0c, 0x32, 0x7f, 0x14, 0xbb, 0x62, 0xbf, 0x7e, + 0x02, 0xc2, 0x13, 0x5a, 0xf2, 0x10, 0x2b, 0x40, 0x97, 0x81, 0x15, 0x46, 0xed, 0x41, 0x85, 0x15, + 0xa8, 0x63, 0x02, 0xd0, 0x7a, 0xf4, 0xb2, 0xd0, 0x3b, 0xd3, 0x05, 0xb3, 0x6f, 0x87, 0x46, 0xf5, + 0x70, 0x3d, 0x65, 0xc2, 0x90, 0xd0, 0x4f, 0x99, 0x70, 0x9b, 0xb4, 0x27, 0xdc, 0x16, 0x6e, 0xaf, + 0xd8, 0x1c, 0x25, 0x1a, 0xd4, 0xa4, 0xa7, 0xf3, 0xd7, 0x28, 0xee, 0x6e, 0xa8, 0x38, 0x4c, 0x67, + 0x51, 0xf3, 0x53, 0xe4, 0x43, 0x81, 0x9f, 0x9c, 0x02, 0x56, 0x54, 0xc9, 0x62, 0x95, 0x9a, 0x0c, + 0x70, 0x7f, 0xb8, 0xc7, 0x8d, 0xfa, 0x7b, 0xdc, 0x98, 0xdb, 0xce, 0x7d, 0x30, 0x74, 0xfe, 0x0b, + 0xa8, 0x16, 0x81, 0x2f, 0x86, 0xfe, 0x46, 0xc3, 0x8d, 0x11, 0xdc, 0xb8, 0x43, 0xaa, 0xba, 0xfa, + 0x5b, 0xc3, 0x8d, 0xc0, 0x0d, 0x02, 0xcd, 0xef, 0xd7, 0x03, 0x33, 0xfc, 0x2c, 0xcc, 0x4f, 0xe1, + 0xc9, 0x8d, 0x11, 0x3c, 0x69, 0x00, 0x9e, 0x54, 0x69, 0xd9, 0x3b, 0x62, 0x55, 0xf4, 0xc4, 0xdb, + 0xc3, 0x3c, 0x39, 0xfb, 0x40, 0x15, 0xe5, 0x49, 0x13, 0x60, 0x8f, 0x1d, 0x4c, 0xe5, 0x0f, 0x09, + 0x27, 0xb4, 0xa3, 0x98, 0x90, 0x24, 0x56, 0x81, 0xf8, 0xa9, 0xc5, 0x94, 0x68, 0x6e, 0x6f, 0xe3, + 0x72, 0xd6, 0x09, 0xa3, 0x0a, 0x48, 0x1d, 0xf0, 0x46, 0xe4, 0xb5, 0xef, 0x62, 0x20, 0xe4, 0x72, + 0xf3, 0x53, 0x6d, 0x0c, 0xb4, 0x90, 0xf3, 0xb2, 0x4d, 0x0f, 0x3f, 0x97, 0x85, 0x13, 0xaa, 0xf7, + 0xb0, 0x45, 0x2a, 0xb8, 0x61, 0x6d, 0x0c, 0xd7, 0x32, 0x56, 0xb2, 0x3d, 0x8c, 0x78, 0x3c, 0x9d, + 0x2a, 0x2b, 0x59, 0x1d, 0x29, 0x74, 0x70, 0x56, 0x92, 0xae, 0x22, 0x95, 0x6a, 0x62, 0xd6, 0x48, + 0x55, 0x47, 0xca, 0xe2, 0xcb, 0x98, 0x7c, 0xd9, 0x9f, 0x41, 0x7d, 0x46, 0x63, 0x56, 0x3c, 0x93, + 0x06, 0xd8, 0x61, 0x44, 0x86, 0x64, 0xc5, 0x80, 0x1e, 0x76, 0x68, 0x48, 0x56, 0xb4, 0xc7, 0x07, + 0x5d, 0x0b, 0x23, 0xf3, 0xf3, 0xcb, 0x26, 0xcb, 0x2f, 0xf4, 0xa3, 0x30, 0x6b, 0x8e, 0x41, 0xa4, + 0xc4, 0xf4, 0x65, 0xa9, 0x59, 0xfe, 0x01, 0x50, 0x0f, 0x7d, 0x9f, 0xcb, 0xed, 0x98, 0x26, 0x1a, + 0x63, 0x40, 0x38, 0xb9, 0xbd, 0xab, 0xa2, 0x73, 0x02, 0x0f, 0x23, 0x01, 0x26, 0x59, 0x50, 0xf0, + 0x12, 0xbf, 0x70, 0x22, 0x89, 0x4e, 0xcc, 0x96, 0x91, 0xc5, 0x42, 0xe8, 0x24, 0xff, 0x78, 0x46, + 0xc8, 0x76, 0x57, 0x77, 0x31, 0x60, 0xdd, 0x0e, 0xf2, 0xa0, 0xc0, 0x75, 0x8c, 0x24, 0xdd, 0x1f, + 0x00, 0xe5, 0x3c, 0xe9, 0xf9, 0x52, 0x45, 0xde, 0xdc, 0x0a, 0x8f, 0xc2, 0xa7, 0x13, 0x88, 0xe4, + 0x80, 0x07, 0xc9, 0xd8, 0x44, 0x4e, 0x0a, 0x9f, 0x69, 0x48, 0x9e, 0x13, 0x66, 0x42, 0xa4, 0x1d, + 0x58, 0x27, 0x2d, 0xa3, 0xd0, 0xb4, 0xda, 0x8d, 0xd5, 0xc6, 0x13, 0xdc, 0x7e, 0x37, 0x31, 0xec, + 0xd6, 0xbb, 0x53, 0x3e, 0x71, 0xe2, 0x2a, 0x37, 0xea, 0x9b, 0x71, 0x09, 0xc0, 0xa6, 0x55, 0xdd, + 0xc0, 0xa9, 0x4a, 0x47, 0xfb, 0x40, 0xbb, 0xf3, 0xe5, 0x40, 0xba, 0x32, 0x61, 0xd7, 0x34, 0xc0, + 0xc0, 0x64, 0x03, 0xe4, 0xdb, 0x13, 0xe0, 0x49, 0x74, 0xe1, 0xa0, 0x56, 0xe2, 0xba, 0x3b, 0x84, + 0x05, 0x1c, 0x98, 0xb8, 0xa2, 0xb0, 0xaa, 0xd1, 0x85, 0x94, 0xdd, 0xcf, 0x50, 0x26, 0x6c, 0xe8, + 0xa3, 0x4c, 0xe8, 0x73, 0x0d, 0x01, 0x18, 0xcb, 0xb9, 0x06, 0x80, 0x1b, 0xdc, 0x01, 0x49, 0x47, + 0x09, 0x56, 0x91, 0x26, 0x8f, 0x1c, 0x46, 0x0c, 0x1d, 0x56, 0xe1, 0x28, 0xed, 0x63, 0x2f, 0xe0, + 0x0e, 0xb8, 0x96, 0xc0, 0x13, 0x77, 0xe0, 0xcd, 0x24, 0xc4, 0xe8, 0xb5, 0x8e, 0xbd, 0xe8, 0xc8, + 0xe6, 0x0e, 0x9c, 0x23, 0xde, 0x59, 0x17, 0xab, 0x87, 0xd0, 0xd9, 0x39, 0x92, 0xad, 0xae, 0x66, + 0xee, 0x4d, 0x83, 0xdf, 0xd3, 0xa1, 0xe2, 0xf6, 0x3b, 0xb4, 0xe1, 0x9e, 0x9b, 0xea, 0xea, 0x21, + 0xe6, 0x1d, 0xc0, 0xbb, 0xdb, 0x70, 0x55, 0x34, 0x76, 0x70, 0xfb, 0x9b, 0x8f, 0xb1, 0x54, 0xea, + 0xce, 0x10, 0x63, 0x47, 0x9d, 0xf1, 0x6a, 0x14, 0x48, 0x5c, 0xcd, 0xcf, 0xc2, 0xd0, 0x90, 0x97, + 0x55, 0xc8, 0x1b, 0x1f, 0xc5, 0xf9, 0x80, 0x15, 0x22, 0x05, 0x57, 0x49, 0x0c, 0xd9, 0xaa, 0x25, + 0x5b, 0x17, 0x93, 0xad, 0x89, 0xa2, 0x6b, 0x3e, 0xce, 0x4a, 0x5a, 0x88, 0xc3, 0x66, 0x26, 0x91, + 0x35, 0xcb, 0x1a, 0x33, 0xe3, 0xe0, 0x39, 0xa0, 0xbf, 0x22, 0x2e, 0xa7, 0xd2, 0x13, 0xe0, 0xa3, + 0xa9, 0xf4, 0xc8, 0xf3, 0x16, 0x28, 0x18, 0x1a, 0xa9, 0xec, 0x34, 0x1a, 0x9a, 0xb4, 0xb0, 0x2e, + 0x64, 0xc0, 0x23, 0xc3, 0xda, 0xc3, 0x98, 0x03, 0x54, 0x70, 0x0c, 0xa7, 0x49, 0xc1, 0x05, 0x52, + 0xd0, 0x52, 0x16, 0x6f, 0x96, 0x0a, 0xde, 0x32, 0xcb, 0x07, 0xd3, 0x14, 0x36, 0x1a, 0x8e, 0xa0, + 0xdc, 0x10, 0xde, 0x2f, 0x46, 0x12, 0xc3, 0x3e, 0xd1, 0xe0, 0x24, 0x86, 0xdf, 0x8b, 0xae, 0x1d, + 0x94, 0x97, 0x86, 0xff, 0x2a, 0x9b, 0x6b, 0x96, 0x5c, 0xb8, 0x54, 0x26, 0xd9, 0xae, 0x74, 0x10, + 0x0d, 0x17, 0x88, 0xab, 0x02, 0x49, 0x33, 0xb4, 0x10, 0xd7, 0x06, 0xfa, 0x00, 0x4a, 0x70, 0x9a, + 0x48, 0x36, 0xca, 0xf2, 0x62, 0xf8, 0xa6, 0x64, 0xe9, 0xdd, 0xa6, 0x7c, 0x39, 0x57, 0xe9, 0x64, + 0x36, 0x03, 0xeb, 0xbb, 0x6f, 0x29, 0xac, 0x37, 0xbc, 0x03, 0x7c, 0xaf, 0x62, 0x31, 0x72, 0x07, + 0x30, 0x91, 0xca, 0x9b, 0x73, 0xc7, 0x63, 0x01, 0x86, 0x8f, 0x58, 0xcb, 0xf7, 0x01, 0x4f, 0xe6, + 0x06, 0x87, 0xa4, 0x74, 0xde, 0x49, 0x55, 0x86, 0xa5, 0x88, 0x45, 0x65, 0x10, 0x43, 0x13, 0x31, + 0x9e, 0x16, 0xe9, 0xe0, 0xc4, 0xd0, 0x22, 0x52, 0x72, 0x88, 0xe1, 0x02, 0x1d, 0xd6, 0x06, 0x4b, + 0xc2, 0x58, 0xe4, 0xf6, 0xd4, 0x7b, 0x03, 0x6f, 0x1d, 0x39, 0xb0, 0x8a, 0xc5, 0x6c, 0x01, 0x00, + 0xa9, 0x0a, 0x8a, 0x05, 0x57, 0xc1, 0xb1, 0x39, 0x77, 0xa8, 0x03, 0x01, 0x3e, 0x62, 0x25, 0x8c, + 0xde, 0x9c, 0x7c, 0x96, 0xcb, 0x3a, 0x4b, 0x56, 0x45, 0xc3, 0x9a, 0xd6, 0x5c, 0x01, 0x54, 0x65, + 0xac, 0xbe, 0x39, 0x27, 0xc7, 0x94, 0x4b, 0x2e, 0xca, 0xb3, 0xee, 0x52, 0x6f, 0xe0, 0x72, 0x8b, + 0x55, 0x37, 0x38, 0x17, 0xfa, 0xeb, 0xea, 0x9d, 0xd1, 0x8a, 0x66, 0xbf, 0x1c, 0x1e, 0x9a, 0x09, + 0x38, 0xf3, 0xfe, 0xd0, 0xc2, 0xbc, 0xf1, 0x83, 0x51, 0x0b, 0x43, 0x67, 0x35, 0x62, 0x6d, 0x5c, + 0x69, 0x48, 0xb7, 0xb2, 0x3c, 0xae, 0x14, 0x5c, 0x5a, 0x37, 0x71, 0x65, 0x53, 0x2e, 0x66, 0xc0, + 0x77, 0x59, 0xbc, 0x49, 0x32, 0xbc, 0x65, 0x92, 0x27, 0x28, 0x53, 0x71, 0xf5, 0xc1, 0x5a, 0xb1, + 0x20, 0xfc, 0x60, 0x71, 0x44, 0x96, 0xae, 0x95, 0x1b, 0xd7, 0xca, 0x70, 0x02, 0x17, 0xca, 0x31, + 0x3e, 0xf0, 0x42, 0xb4, 0x25, 0x5f, 0x3e, 0x9d, 0x42, 0x81, 0xb1, 0xa3, 0x09, 0xa6, 0x5e, 0xd5, + 0x3b, 0x3c, 0x75, 0xde, 0x08, 0x41, 0x40, 0xd5, 0x0d, 0x91, 0xef, 0x82, 0x19, 0xfb, 0xcc, 0x38, + 0x73, 0x28, 0x19, 0x64, 0x30, 0x7a, 0xe9, 0xd5, 0x77, 0xd0, 0x55, 0x70, 0x2e, 0x11, 0x66, 0xd8, + 0xb9, 0x8f, 0xaa, 0x44, 0x86, 0x36, 0xea, 0x4f, 0x2c, 0xc8, 0xeb, 0x1e, 0x9d, 0xe2, 0x8b, 0x5c, + 0x39, 0xe0, 0x0b, 0xdd, 0x32, 0x08, 0x49, 0x47, 0x67, 0x26, 0x3c, 0x02, 0x92, 0xea, 0x17, 0xa3, + 0x21, 0xa6, 0x04, 0x31, 0xf7, 0x28, 0x78, 0x6b, 0x57, 0x81, 0x74, 0x74, 0x10, 0x63, 0x9b, 0xba, + 0x69, 0x0f, 0xcb, 0xcf, 0x14, 0x0d, 0xbb, 0x93, 0xbd, 0x7c, 0x74, 0x59, 0x45, 0x2e, 0xf1, 0xca, + 0x1d, 0x8b, 0xd0, 0x38, 0xc9, 0xc2, 0x09, 0x35, 0xe9, 0xf6, 0xfd, 0x47, 0x26, 0x01, 0x2a, 0x8c, + 0x6d, 0x35, 0xcd, 0x22, 0x04, 0x45, 0x60, 0x9d, 0x1b, 0x49, 0x9a, 0x5a, 0xa0, 0x52, 0xcd, 0xf0, + 0x31, 0x0a, 0xef, 0xf2, 0xe7, 0xe1, 0x4c, 0xdb, 0x60, 0x98, 0x90, 0x51, 0xe4, 0xf6, 0x7b, 0x9c, + 0xdd, 0x2c, 0x68, 0x13, 0x7b, 0x06, 0x62, 0x29, 0xb6, 0x11, 0xec, 0x82, 0x1e, 0x16, 0x2c, 0x55, + 0xef, 0xce, 0x06, 0xa2, 0x88, 0xa1, 0x4d, 0x5c, 0xf6, 0xb1, 0x3b, 0x85, 0x65, 0xc4, 0x34, 0x6a, + 0x72, 0x11, 0x0b, 0xf7, 0x32, 0x5a, 0x28, 0xc2, 0xd7, 0x12, 0x63, 0x8d, 0x35, 0xc4, 0x7f, 0x2b, + 0x39, 0xfa, 0x18, 0x3c, 0xd0, 0xf5, 0x0f, 0x1a, 0x57, 0x09, 0x57, 0x62, 0xc4, 0x3a, 0xf4, 0x91, + 0x8f, 0xe9, 0x3a, 0x7c, 0x8c, 0xeb, 0xc0, 0xe9, 0x89, 0xe1, 0x95, 0xfe, 0xcb, 0x24, 0xef, 0x35, + 0x6a, 0x86, 0x50, 0x28, 0xb7, 0xaf, 0x18, 0xa9, 0x3c, 0x10, 0x70, 0x81, 0xd1, 0xfd, 0xd6, 0x82, + 0x50, 0xc9, 0x1b, 0xea, 0xbe, 0xc7, 0xfe, 0x27, 0xd8, 0xa3, 0x88, 0x4d, 0x78, 0x13, 0x31, 0x33, + 0xec, 0x90, 0x30, 0x94, 0x62, 0xff, 0x23, 0xa7, 0x17, 0xf9, 0x57, 0xfa, 0x21, 0x42, 0x7b, 0x4d, + 0xb8, 0xc2, 0xb0, 0xde, 0x89, 0xe7, 0xc1, 0x5e, 0x24, 0x9f, 0x21, 0x30, 0xed, 0xb6, 0xd8, 0x16, + 0x2e, 0xed, 0x3c, 0xc9, 0x6b, 0xe3, 0xd2, 0xd0, 0x6c, 0x88, 0xc6, 0x1a, 0x2e, 0xed, 0xac, 0xc8, + 0xd7, 0x66, 0x0a, 0x43, 0x63, 0x15, 0xa9, 0xe5, 0x5c, 0xe3, 0x00, 0x93, 0x6f, 0x16, 0xb7, 0xdf, + 0x70, 0x54, 0xe4, 0xfd, 0x81, 0x47, 0x4c, 0xb6, 0xbe, 0x54, 0x96, 0x91, 0x3f, 0x78, 0x00, 0xa6, + 0xdc, 0x03, 0xc3, 0x1e, 0x52, 0xa3, 0xbf, 0x01, 0xab, 0xb2, 0x4a, 0x45, 0x5a, 0x04, 0x77, 0x46, + 0xae, 0x09, 0x84, 0x78, 0xeb, 0x34, 0x24, 0x5d, 0x5d, 0xe3, 0x76, 0xa8, 0xbc, 0x99, 0x29, 0xec, + 0xbb, 0xd9, 0x4b, 0xc1, 0xdd, 0x68, 0x5c, 0x18, 0x84, 0x79, 0x3a, 0xc2, 0x72, 0x4c, 0x81, 0x87, + 0x33, 0xa0, 0x46, 0xde, 0xb6, 0x90, 0xce, 0xf0, 0x3d, 0x2c, 0x88, 0xe3, 0x29, 0x50, 0x0e, 0x4b, + 0xa6, 0xe0, 0x03, 0x59, 0x5c, 0x0b, 0x66, 0x6b, 0xff, 0xc2, 0xa0, 0x6c, 0x97, 0x31, 0x16, 0x93, + 0xfc, 0x52, 0x9c, 0x22, 0x76, 0xd9, 0xe1, 0xc2, 0xed, 0x30, 0x6e, 0xd7, 0xaf, 0xbe, 0x41, 0x26, + 0x66, 0x0a, 0x03, 0x01, 0xc7, 0xb2, 0x7f, 0x37, 0xc2, 0x7d, 0xff, 0xcb, 0x08, 0xcb, 0x6a, 0x81, + 0xa7, 0x81, 0x94, 0x38, 0x18, 0x67, 0x4d, 0x68, 0x1c, 0x4b, 0x80, 0xf7, 0x9b, 0xe4, 0xa9, 0xca, + 0x40, 0xc4, 0x23, 0x78, 0xc2, 0x33, 0x85, 0xdb, 0xec, 0x96, 0x9f, 0x77, 0x3e, 0x0c, 0x83, 0x55, + 0x9f, 0xc0, 0x85, 0x1e, 0xe5, 0xa7, 0xae, 0x4d, 0xbd, 0x97, 0x63, 0xa8, 0xe5, 0x19, 0xcb, 0x18, + 0xa6, 0x06, 0x32, 0x81, 0x7d, 0x28, 0xcb, 0x7a, 0x92, 0xd7, 0x45, 0xbc, 0x7a, 0x37, 0xf7, 0xab, + 0x60, 0x8c, 0x24, 0x0c, 0x4c, 0xa1, 0x01, 0x86, 0xbd, 0x38, 0x58, 0x71, 0x70, 0x0a, 0x06, 0x1e, + 0xcd, 0xdc, 0xaf, 0x48, 0x23, 0xe4, 0x0f, 0xbb, 0xdd, 0x90, 0x3c, 0xec, 0xae, 0x57, 0xd7, 0x83, + 0x51, 0xd8, 0xed, 0x56, 0xb7, 0x50, 0x58, 0x3e, 0x89, 0xdb, 0x7b, 0x2a, 0x08, 0x9e, 0x7c, 0x76, + 0xcb, 0xf7, 0x49, 0x13, 0x8d, 0xe7, 0x3d, 0x87, 0x53, 0xd2, 0x38, 0x88, 0x0f, 0xfb, 0x3f, 0x2b, + 0xe5, 0xbb, 0xf0, 0x91, 0xbd, 0x58, 0xc6, 0xe4, 0x00, 0x8b, 0xce, 0x7f, 0x8d, 0xb2, 0xa0, 0xc5, + 0xbc, 0x20, 0xaf, 0x4b, 0x5e, 0x02, 0xf4, 0xc8, 0xbf, 0x9d, 0x0f, 0x5f, 0xd7, 0xf1, 0xe9, 0x77, + 0x03, 0x68, 0x47, 0x35, 0x1f, 0xc2, 0x54, 0x02, 0x7c, 0x2c, 0xac, 0xa8, 0xda, 0x24, 0xff, 0x79, + 0x16, 0x9d, 0xb9, 0x2f, 0xd6, 0xf6, 0x67, 0x58, 0xd6, 0xce, 0x3f, 0x51, 0x3a, 0x59, 0x7e, 0xa2, + 0x7c, 0xe8, 0x11, 0xe8, 0xf1, 0x2e, 0x7c, 0xbd, 0xf7, 0x0a, 0x88, 0xb0, 0x2f, 0xe2, 0xdd, 0x57, + 0x94, 0x60, 0x22, 0xca, 0xf6, 0x4c, 0x3a, 0x00, 0xd6, 0x62, 0x96, 0xb9, 0x75, 0x3c, 0x03, 0xc9, + 0x90, 0x47, 0xde, 0x85, 0x49, 0xcb, 0x52, 0xe2, 0x15, 0x53, 0x62, 0x00, 0xa2, 0x5f, 0xd8, 0x19, + 0x17, 0xd8, 0x31, 0x4f, 0x1f, 0x58, 0x0b, 0x51, 0xe0, 0xfe, 0x4c, 0x8d, 0x19, 0xd2, 0x3c, 0x93, + 0x3c, 0x76, 0x96, 0x62, 0x60, 0xdc, 0x0e, 0xe0, 0xab, 0x6c, 0x62, 0x90, 0x53, 0xfc, 0x98, 0xac, + 0xf4, 0xa5, 0x3b, 0xe3, 0x76, 0xb6, 0x3b, 0x97, 0xbf, 0x46, 0xd5, 0x72, 0xbc, 0xed, 0x9d, 0x0c, + 0x10, 0xae, 0x6c, 0x85, 0x28, 0xe7, 0xf2, 0x5a, 0xac, 0x75, 0x4c, 0x93, 0xc7, 0xfd, 0x0a, 0x34, + 0xce, 0xd0, 0xf5, 0xde, 0x32, 0x5c, 0x46, 0x83, 0xff, 0xbd, 0x24, 0x5c, 0xdb, 0xc8, 0x3d, 0x60, + 0x88, 0x8f, 0xa7, 0xd1, 0x75, 0xb0, 0x4c, 0x09, 0xad, 0x03, 0x39, 0x5b, 0x37, 0xe3, 0x27, 0xd0, + 0xcd, 0x1b, 0x81, 0xdf, 0xac, 0x6d, 0x4a, 0x26, 0xcb, 0xe4, 0xc8, 0xa7, 0xa3, 0xa8, 0x40, 0x02, + 0x75, 0x4b, 0x6c, 0x97, 0xa0, 0x4b, 0xbe, 0x7c, 0x78, 0xb8, 0x66, 0xae, 0xed, 0x77, 0x06, 0xac, + 0xd9, 0x33, 0x5c, 0x33, 0xd5, 0xb6, 0x8a, 0xd6, 0xfc, 0x34, 0x54, 0xc3, 0xd5, 0xfc, 0x98, 0xa6, + 0x4a, 0xb5, 0x41, 0xd4, 0x48, 0x2d, 0x2b, 0xa6, 0xc4, 0x89, 0x6b, 0x74, 0x87, 0x1d, 0xab, 0xc2, + 0x19, 0x7d, 0xfd, 0xd8, 0x93, 0x7c, 0x96, 0x34, 0xa5, 0xe2, 0x69, 0x86, 0x49, 0x68, 0x11, 0xda, + 0x99, 0xe3, 0x15, 0x90, 0x93, 0xe5, 0x98, 0xca, 0x98, 0xdc, 0x7c, 0x8b, 0xac, 0x1d, 0x87, 0x68, + 0x62, 0x2c, 0x72, 0x3d, 0xc5, 0xa7, 0x2a, 0x8b, 0xb6, 0x75, 0x71, 0x2a, 0xc6, 0x76, 0x3a, 0x1b, + 0xe6, 0xda, 0xba, 0x34, 0xc4, 0x97, 0xe9, 0xb6, 0x85, 0x40, 0xab, 0x2f, 0xc2, 0xf6, 0x3f, 0x40, + 0xa0, 0x9c, 0xa1, 0xa3, 0xb0, 0x7a, 0x37, 0x95, 0x37, 0x6f, 0x04, 0xb2, 0x82, 0xdd, 0xc7, 0xfa, + 0xfc, 0x0a, 0x0d, 0xbe, 0x9b, 0x30, 0x5d, 0xa1, 0x6b, 0x31, 0x44, 0x54, 0x92, 0xf1, 0xb4, 0xac, + 0x45, 0xf2, 0x3c, 0x7a, 0xb7, 0xab, 0x99, 0x0f, 0x07, 0xe7, 0x29, 0x9c, 0x58, 0x1c, 0x0a, 0x12, + 0xab, 0xbb, 0xb2, 0xc1, 0xd4, 0x92, 0x33, 0x64, 0xa2, 0xde, 0x2d, 0x49, 0xbf, 0x87, 0xb5, 0x37, + 0xd9, 0x70, 0x1f, 0xcb, 0x64, 0xca, 0xc9, 0x95, 0x7b, 0xa2, 0x29, 0x65, 0x92, 0xeb, 0x33, 0xa8, + 0x2f, 0x0b, 0xb7, 0xe5, 0x00, 0xf7, 0x4d, 0xf2, 0xef, 0xb5, 0x21, 0x92, 0x96, 0x49, 0xae, 0xa1, + 0x91, 0x2d, 0xaf, 0x0f, 0xb7, 0xcc, 0x96, 0x5c, 0x7b, 0xb1, 0x25, 0xc2, 0x76, 0x28, 0x0d, 0x5b, + 0xb6, 0x0e, 0xb7, 0xa8, 0xf5, 0x81, 0xac, 0xce, 0xed, 0xa0, 0x28, 0x75, 0x6f, 0x1f, 0x02, 0x08, + 0x6e, 0xff, 0xa9, 0x83, 0x03, 0x68, 0xee, 0x02, 0x59, 0x4b, 0xde, 0xaa, 0x01, 0xad, 0x71, 0xa8, + 0x53, 0xf8, 0xaf, 0x3b, 0x7f, 0x84, 0x26, 0x13, 0x42, 0x94, 0x03, 0xd2, 0x01, 0x04, 0x3a, 0xd0, + 0x4a, 0x81, 0xac, 0x4b, 0x6b, 0x77, 0x20, 0xc8, 0x38, 0xc1, 0x1d, 0xc6, 0xd5, 0x3c, 0x02, 0x30, + 0xbe, 0x2e, 0x08, 0x8e, 0x8e, 0x7e, 0x83, 0xae, 0xb7, 0xcd, 0xd3, 0x11, 0x21, 0x65, 0x84, 0xa1, + 0x13, 0x26, 0x97, 0xfe, 0x1f, 0xa9, 0x6a, 0xe9, 0x87, 0xc7, 0xab, 0xd0, 0x7c, 0x1c, 0x9a, 0x61, + 0xd5, 0x22, 0x45, 0xd7, 0x69, 0x8a, 0xeb, 0xe8, 0x61, 0xfa, 0x73, 0x09, 0x54, 0x00, 0x0a, 0xf5, + 0xd8, 0x1a, 0x10, 0xdf, 0x6c, 0x41, 0x24, 0x55, 0x37, 0x48, 0x5e, 0x07, 0x97, 0x31, 0x58, 0x77, + 0xf4, 0x08, 0xa5, 0x0d, 0x60, 0x64, 0x6e, 0xef, 0x60, 0x78, 0x15, 0xf8, 0xab, 0xab, 0xec, 0x60, + 0x02, 0x66, 0x93, 0xbc, 0x7f, 0xf9, 0x2d, 0x8e, 0x61, 0xb6, 0x8c, 0x85, 0xac, 0x51, 0x83, 0x92, + 0x3d, 0x61, 0xf9, 0x2d, 0xf0, 0xf7, 0x5b, 0xb4, 0x50, 0x46, 0x3e, 0x07, 0xd5, 0xd1, 0x37, 0x09, + 0xca, 0x98, 0x29, 0xef, 0x03, 0x3f, 0xe9, 0x47, 0x9f, 0x64, 0xb8, 0x21, 0x42, 0xba, 0x90, 0xd7, + 0x65, 0x25, 0x6b, 0x34, 0xb5, 0x4f, 0x4f, 0xb0, 0x12, 0x8b, 0xb6, 0x76, 0xe7, 0x24, 0xd1, 0xd5, + 0x84, 0x23, 0x67, 0x46, 0x8b, 0x05, 0x37, 0xc8, 0xd3, 0x31, 0xa2, 0xd4, 0x86, 0xc5, 0x35, 0xf1, + 0xc4, 0x12, 0x27, 0x1a, 0xda, 0xac, 0x24, 0x73, 0x2e, 0xb7, 0xf7, 0x0e, 0x7b, 0x89, 0xec, 0x9c, + 0x07, 0x41, 0x97, 0xe1, 0x02, 0x12, 0xd0, 0xe2, 0xac, 0xf2, 0x33, 0x24, 0x33, 0xd1, 0xa1, 0x95, + 0x0a, 0x7e, 0x0f, 0x51, 0xf9, 0x34, 0x4f, 0xa7, 0x16, 0x7e, 0xa2, 0x7d, 0x61, 0xe0, 0x90, 0x76, + 0xea, 0xf4, 0x01, 0x09, 0x02, 0xad, 0x6e, 0x72, 0x39, 0xdf, 0x24, 0x9f, 0x63, 0x83, 0x22, 0x7a, + 0x90, 0x9a, 0x0b, 0x58, 0xfc, 0xd3, 0x24, 0x13, 0x12, 0x96, 0xea, 0x13, 0xb8, 0xec, 0x23, 0x92, + 0x85, 0xea, 0xae, 0x1a, 0x16, 0x13, 0x03, 0x10, 0x97, 0xb7, 0xe4, 0x4f, 0xd1, 0x74, 0x5e, 0x01, + 0xb9, 0x76, 0xb9, 0xb0, 0xd2, 0xa8, 0x01, 0x65, 0x75, 0xee, 0x48, 0x66, 0x17, 0x48, 0x2f, 0xb1, + 0x8e, 0x3e, 0xd1, 0xf0, 0x0b, 0xfd, 0x39, 0x98, 0x13, 0x6e, 0x08, 0x44, 0x8b, 0x86, 0x23, 0xd2, + 0x9b, 0x4a, 0xd4, 0x9b, 0x36, 0xcd, 0x23, 0x03, 0x1d, 0x69, 0xd1, 0x92, 0x2a, 0x59, 0xdf, 0xf7, + 0xc9, 0x9d, 0x21, 0xe4, 0xe0, 0x2b, 0x31, 0x11, 0x48, 0xc2, 0xed, 0x05, 0x8e, 0x28, 0x57, 0xb3, + 0xa3, 0x70, 0x4d, 0x3a, 0xef, 0xf3, 0x6d, 0x85, 0x3c, 0xbf, 0x3d, 0xc7, 0x24, 0xb9, 0x2a, 0x01, + 0xc4, 0x84, 0x96, 0xe8, 0x67, 0x49, 0x54, 0x3c, 0xbc, 0x35, 0x33, 0x10, 0x15, 0x03, 0x34, 0x00, + 0x9f, 0x82, 0xed, 0x52, 0xc1, 0x69, 0xb3, 0x1c, 0x15, 0x9a, 0x07, 0x9f, 0x97, 0xd0, 0x9f, 0x55, + 0xa6, 0x33, 0x4b, 0x1f, 0x23, 0xa4, 0x45, 0x7e, 0x46, 0xe9, 0x49, 0x7a, 0x80, 0x4a, 0xdf, 0x8f, + 0xfb, 0xaf, 0x59, 0x86, 0xd1, 0x5e, 0x94, 0x33, 0x92, 0x82, 0x4e, 0x68, 0x04, 0xde, 0x10, 0x52, + 0xc3, 0x69, 0x93, 0xfc, 0x31, 0x13, 0x44, 0xea, 0x18, 0xa3, 0xbf, 0xd2, 0xf9, 0x33, 0x0c, 0xb4, + 0x12, 0xe5, 0x67, 0xe7, 0x29, 0xb6, 0xbe, 0xa1, 0x2c, 0x5b, 0xb6, 0x28, 0xcf, 0x42, 0x95, 0x5f, + 0x27, 0xf1, 0x6f, 0x1d, 0x1a, 0x4f, 0x53, 0x82, 0xde, 0x0f, 0xb8, 0x03, 0x79, 0x37, 0x89, 0x69, + 0x31, 0x3f, 0x99, 0x3b, 0x60, 0xec, 0xf0, 0x7c, 0xaa, 0x1d, 0x7b, 0x12, 0xb3, 0x61, 0xd3, 0x62, + 0xd2, 0xe8, 0x8b, 0x20, 0x8d, 0xf0, 0x2c, 0x1a, 0x65, 0x08, 0x7e, 0xb8, 0x03, 0x15, 0x1a, 0x29, + 0x43, 0x1f, 0x80, 0x25, 0xeb, 0x23, 0x59, 0xcb, 0xc8, 0xda, 0x24, 0x88, 0xb3, 0xdc, 0x19, 0x74, + 0x72, 0xe0, 0x45, 0xde, 0x0e, 0x57, 0x06, 0xca, 0x4a, 0x21, 0xdb, 0xb5, 0x8d, 0xe9, 0xd1, 0xff, + 0x80, 0x39, 0x36, 0xa6, 0xc7, 0x44, 0x8d, 0x03, 0x5b, 0x96, 0x95, 0x44, 0xd2, 0xe3, 0x1a, 0xd3, + 0x51, 0x7c, 0x30, 0x9d, 0xc2, 0x8c, 0xab, 0xad, 0xfa, 0x44, 0x0d, 0xfb, 0xad, 0x25, 0x4b, 0x44, + 0x2d, 0xb9, 0x48, 0x4e, 0x71, 0xfb, 0x53, 0x27, 0x70, 0x07, 0xb6, 0x69, 0xb8, 0xbd, 0x03, 0x92, + 0xeb, 0x04, 0xcc, 0xcf, 0x86, 0x4c, 0x2f, 0x03, 0xbd, 0xb3, 0x3c, 0x1a, 0x8c, 0xdb, 0x20, 0xd7, + 0x74, 0x94, 0x71, 0x07, 0x2c, 0xd3, 0x84, 0xed, 0x2a, 0x1d, 0x3f, 0x96, 0x3b, 0x90, 0x19, 0xed, + 0xe9, 0xd0, 0x8e, 0xad, 0x97, 0x40, 0x30, 0xdb, 0x4d, 0xb2, 0x56, 0x21, 0x06, 0x4d, 0xd9, 0x9b, + 0x68, 0x0f, 0x1a, 0x45, 0xbe, 0x83, 0xf0, 0x37, 0xb8, 0xbd, 0x7c, 0x97, 0x45, 0x5e, 0xfb, 0x90, + 0x42, 0x69, 0x3b, 0x19, 0xd4, 0x5f, 0x31, 0x5b, 0xcc, 0x66, 0x58, 0x7c, 0x93, 0x7c, 0x99, 0x76, + 0x01, 0x01, 0xb8, 0x21, 0xa9, 0x5c, 0x48, 0x28, 0x84, 0xda, 0x3b, 0xbf, 0x4f, 0x39, 0xea, 0xcb, + 0xe4, 0x0e, 0xa4, 0xcf, 0xa5, 0xfa, 0x38, 0x26, 0x40, 0x3d, 0x12, 0x15, 0x7f, 0xe2, 0xe5, 0xf6, + 0xf6, 0x5b, 0x64, 0x46, 0x41, 0xc7, 0x1d, 0x30, 0x03, 0xc1, 0xe6, 0x79, 0xdc, 0x81, 0xd5, 0x73, + 0x3d, 0x9f, 0x46, 0xe8, 0x03, 0xf9, 0x39, 0xf9, 0xb8, 0x63, 0x65, 0x0a, 0x2c, 0x92, 0xb7, 0x51, + 0x73, 0x11, 0x23, 0x0c, 0xe9, 0x2a, 0x27, 0xe8, 0xfb, 0xd6, 0x88, 0x05, 0x10, 0xa9, 0xf9, 0x3b, + 0x7d, 0x54, 0x18, 0xfd, 0xe0, 0xa2, 0xa5, 0xd4, 0x09, 0xa0, 0xdb, 0xfa, 0x3e, 0x68, 0x80, 0xe8, + 0x84, 0xf0, 0x17, 0x3c, 0x37, 0x23, 0xea, 0x54, 0x7a, 0x74, 0xae, 0x0d, 0x00, 0xc4, 0x9e, 0x11, + 0xaa, 0x34, 0x4c, 0xdd, 0x9a, 0x71, 0x60, 0x98, 0xa1, 0xe8, 0xbc, 0xcd, 0x71, 0x2e, 0x8c, 0xa3, + 0xf7, 0xa4, 0x38, 0x62, 0x14, 0xd6, 0xe8, 0x14, 0x3e, 0x99, 0xe4, 0x87, 0x1f, 0xa1, 0x0c, 0xaa, + 0x8b, 0x8c, 0x9f, 0xc9, 0xed, 0x6f, 0x92, 0xa2, 0x57, 0x4a, 0x19, 0x3f, 0xe9, 0x5d, 0x1e, 0x8e, + 0x3b, 0x6b, 0x2f, 0x1b, 0x70, 0xa7, 0x2e, 0xfa, 0x27, 0x90, 0xfe, 0x49, 0xaf, 0x44, 0x20, 0xb8, + 0xb4, 0x7b, 0x0a, 0xfe, 0x7c, 0x72, 0x07, 0xd3, 0x80, 0xaa, 0xb6, 0xba, 0x8c, 0xc2, 0xa8, 0xda, + 0x8c, 0x69, 0x03, 0xe9, 0xfc, 0xd7, 0xfa, 0x73, 0x62, 0xd5, 0xd5, 0x3a, 0x55, 0x7e, 0x6d, 0xc6, + 0xc4, 0x88, 0x34, 0x61, 0x30, 0x92, 0xef, 0x25, 0x50, 0xce, 0x8c, 0x03, 0x49, 0xa8, 0xad, 0x19, + 0x7f, 0x16, 0x3a, 0xd5, 0x65, 0xde, 0x0f, 0x4f, 0x2d, 0xb8, 0xeb, 0xd4, 0x0c, 0x64, 0x73, 0xae, + 0x2f, 0xd0, 0xc5, 0xe3, 0x40, 0xce, 0x23, 0x14, 0xb9, 0x8e, 0x57, 0x0b, 0xee, 0x80, 0xbd, 0x1b, + 0x42, 0x49, 0x49, 0xc2, 0x0a, 0x6f, 0x86, 0x9a, 0x65, 0x9c, 0xcb, 0xd1, 0x9c, 0x33, 0x07, 0x0d, + 0x93, 0x59, 0xe6, 0xf0, 0x76, 0xf8, 0xe2, 0x0c, 0xf5, 0x01, 0x5e, 0x93, 0x13, 0x68, 0x09, 0x7a, + 0x9e, 0x74, 0x34, 0xa5, 0x6b, 0xc6, 0xf5, 0x79, 0xd4, 0x9c, 0x6b, 0x37, 0xa2, 0x04, 0x17, 0x0f, + 0x5d, 0x23, 0x2e, 0xe8, 0x52, 0xf8, 0x01, 0x70, 0xe7, 0x75, 0xe0, 0x48, 0x1d, 0x4f, 0x37, 0x1a, + 0xe4, 0xe0, 0x86, 0x64, 0x20, 0x6b, 0xd9, 0x7c, 0x87, 0x5e, 0xb8, 0xa3, 0xe6, 0x5e, 0xf7, 0x08, + 0x77, 0xa2, 0xb6, 0x3c, 0x13, 0x65, 0x94, 0xfb, 0x3c, 0xac, 0xe3, 0x09, 0xee, 0x98, 0xdb, 0x24, + 0xb7, 0x8c, 0xa5, 0x6b, 0x53, 0x9b, 0x31, 0xa3, 0x39, 0x1d, 0x3b, 0xab, 0x92, 0xb2, 0xc0, 0x0f, + 0xff, 0xd5, 0x37, 0xa3, 0xcf, 0x20, 0xb3, 0xc0, 0x7b, 0xfe, 0x59, 0xa5, 0xf6, 0x13, 0x0c, 0xeb, + 0x30, 0x36, 0x97, 0xa1, 0xf9, 0x0f, 0x65, 0xe3, 0x24, 0x43, 0xb3, 0xc9, 0x22, 0xbf, 0x1e, 0x15, + 0xb4, 0xf2, 0x5c, 0xcd, 0x7f, 0x52, 0xc9, 0xa5, 0x46, 0x8f, 0x2e, 0x9e, 0x4f, 0xed, 0xbc, 0xad, + 0x86, 0x5f, 0xc7, 0x4a, 0x91, 0xbf, 0x90, 0x09, 0x42, 0xc3, 0xed, 0x6d, 0xf0, 0xc8, 0x11, 0x10, + 0x63, 0x0a, 0xf5, 0x3a, 0xc1, 0x70, 0x55, 0x97, 0xec, 0xe5, 0x76, 0x25, 0xc2, 0xac, 0x7d, 0x11, + 0xd0, 0xc1, 0x77, 0x19, 0x56, 0x9d, 0xdb, 0x5b, 0xd0, 0x61, 0xce, 0x91, 0xbf, 0x3f, 0x57, 0x91, + 0xa9, 0x70, 0xa8, 0x22, 0xfe, 0xea, 0x13, 0x89, 0x21, 0x2d, 0x28, 0xd3, 0xc8, 0x1f, 0xcf, 0x0d, + 0x05, 0x80, 0xe3, 0x20, 0xba, 0x59, 0xb7, 0x98, 0x0e, 0x7f, 0x70, 0x1c, 0x06, 0x1f, 0x3b, 0xc6, + 0x20, 0x47, 0xbd, 0x20, 0x80, 0x4c, 0x36, 0xdf, 0x8d, 0x4a, 0x94, 0xa4, 0xef, 0xeb, 0xfc, 0x18, + 0x9d, 0x92, 0x0e, 0xc2, 0x38, 0xb5, 0xfc, 0xa0, 0x02, 0x0d, 0x95, 0x6f, 0xe3, 0x0e, 0x9b, 0x57, + 0x17, 0xac, 0x9f, 0xa0, 0xd4, 0xfb, 0x5a, 0x87, 0xb7, 0x92, 0x88, 0xb1, 0x4b, 0xdc, 0x06, 0xae, + 0x56, 0x08, 0x68, 0x0e, 0xfd, 0x93, 0xc3, 0x24, 0xba, 0x49, 0x08, 0x68, 0x8f, 0xfd, 0x33, 0x80, + 0x8f, 0xfe, 0xb1, 0x67, 0x84, 0x80, 0xee, 0x93, 0x7f, 0x82, 0xb1, 0xe3, 0x0c, 0xd7, 0x84, 0xc1, + 0x30, 0xfb, 0xc6, 0xe4, 0xcb, 0x5b, 0x4a, 0x25, 0x08, 0xb1, 0xb4, 0x90, 0x1a, 0x04, 0xc0, 0x83, + 0x40, 0x76, 0x23, 0xa1, 0xc6, 0xec, 0xa1, 0x46, 0x4c, 0x05, 0xda, 0x9f, 0x25, 0x78, 0x55, 0x08, + 0xaa, 0x4a, 0xbe, 0xbc, 0xf9, 0x53, 0x8b, 0xfc, 0xd5, 0xf7, 0x94, 0x69, 0x78, 0x20, 0x3b, 0x01, + 0x0d, 0x70, 0x05, 0xa4, 0x02, 0xbf, 0x63, 0x26, 0x64, 0x00, 0xc6, 0x1b, 0x00, 0x4c, 0xa2, 0xff, + 0x04, 0x18, 0xcc, 0x72, 0x29, 0x15, 0xff, 0x1b, 0x00, 0x98, 0x99, 0xdc, 0xcf, 0xdf, 0xa4, 0x53, + 0x22, 0x4d, 0x23, 0xf6, 0x7c, 0x70, 0xe3, 0x25, 0x5b, 0x2b, 0xe6, 0xa4, 0x04, 0xf8, 0xb8, 0x00, + 0x1f, 0x03, 0xb9, 0x79, 0x80, 0xd7, 0x82, 0xb0, 0xc8, 0x0b, 0xa8, 0xa1, 0x8b, 0xa6, 0x40, 0x16, + 0x84, 0xaa, 0xd0, 0x8a, 0x99, 0x19, 0x10, 0x08, 0x9b, 0x02, 0x9b, 0x53, 0xe4, 0xe6, 0x07, 0x29, + 0x83, 0xcb, 0xb2, 0x2d, 0xf2, 0x31, 0xe5, 0xf1, 0xe9, 0x7b, 0x5b, 0x48, 0x3a, 0x92, 0x77, 0x01, + 0x1c, 0xb1, 0x68, 0x88, 0x1e, 0x67, 0x88, 0xe1, 0x6a, 0xfe, 0xce, 0x50, 0x15, 0xe4, 0x0e, 0xa4, + 0x6a, 0xb8, 0xfd, 0x2b, 0x27, 0x70, 0x7b, 0x21, 0x0b, 0x6e, 0xd3, 0x37, 0x83, 0x3f, 0xc8, 0xbb, + 0x0a, 0xd4, 0x86, 0x1b, 0x35, 0x20, 0x12, 0x93, 0xf3, 0xb4, 0x60, 0xd4, 0x21, 0xf7, 0x16, 0xf9, + 0x36, 0x4b, 0x6e, 0x8e, 0x5c, 0xe0, 0x0b, 0x46, 0x9d, 0x1d, 0xe4, 0xbc, 0x58, 0x15, 0xfd, 0x10, + 0x24, 0x6a, 0xc6, 0x98, 0xe9, 0xc6, 0xab, 0xdc, 0xde, 0x6b, 0x20, 0x22, 0xfd, 0x37, 0xd9, 0xcb, + 0x62, 0x81, 0x9c, 0xd0, 0x40, 0x0a, 0x64, 0x08, 0xe2, 0x62, 0x5b, 0x88, 0xa1, 0x2b, 0xe1, 0x1a, + 0xdd, 0x23, 0x8b, 0x6d, 0x48, 0xee, 0x27, 0x4d, 0xb1, 0x90, 0x7e, 0xb4, 0x73, 0x69, 0xfd, 0xe0, + 0xfd, 0x20, 0x33, 0x11, 0x35, 0xb5, 0x82, 0x67, 0x08, 0x53, 0x8f, 0xfd, 0x69, 0x30, 0xbe, 0x47, + 0xdf, 0x1c, 0x9e, 0xa6, 0x03, 0x59, 0xe6, 0x0e, 0xe4, 0x82, 0x39, 0x39, 0xd9, 0xff, 0x19, 0xdb, + 0x1a, 0x6e, 0x90, 0x27, 0xc3, 0x92, 0xe5, 0xa9, 0x21, 0x25, 0x64, 0x07, 0xcd, 0x16, 0xc8, 0x9c, + 0x31, 0x94, 0x4f, 0x84, 0xb1, 0xe5, 0x99, 0x1a, 0xf4, 0x72, 0x57, 0x29, 0x1f, 0x63, 0xd8, 0x6e, + 0x91, 0x8f, 0x99, 0x78, 0x39, 0xf9, 0x36, 0x69, 0x89, 0xf5, 0x73, 0xbb, 0x70, 0x77, 0x45, 0x38, + 0xa1, 0x1b, 0x61, 0x62, 0x4d, 0x62, 0x95, 0x5a, 0x4c, 0x55, 0xe1, 0x66, 0xfa, 0x83, 0xc2, 0x80, + 0x96, 0xcf, 0x80, 0xec, 0x78, 0x0c, 0x77, 0xe0, 0x05, 0x18, 0xe9, 0x85, 0x38, 0x29, 0xda, 0x62, + 0x2a, 0x0b, 0x33, 0xe5, 0xe6, 0x07, 0xf4, 0x72, 0x13, 0x8d, 0xe1, 0xe2, 0x7c, 0x2f, 0x50, 0xce, + 0xec, 0x4d, 0x8d, 0x93, 0x54, 0xaf, 0xe9, 0xcf, 0xe5, 0x96, 0xa9, 0x72, 0x4d, 0xd8, 0xfc, 0xa1, + 0x12, 0xe2, 0x39, 0x9f, 0x0b, 0xe7, 0x7c, 0xab, 0x11, 0x87, 0xc4, 0xf7, 0x58, 0x71, 0x23, 0x3a, + 0x84, 0x8b, 0x5c, 0x22, 0xe7, 0x5b, 0x7d, 0xec, 0x79, 0xb6, 0x17, 0x51, 0x9a, 0xa1, 0xd9, 0x02, + 0xdd, 0xec, 0x4a, 0x37, 0xee, 0x40, 0x24, 0xcd, 0x11, 0xe7, 0x04, 0x40, 0xf8, 0xc8, 0x60, 0x5f, + 0x3d, 0xcb, 0x19, 0x3c, 0xa2, 0x51, 0x4d, 0x58, 0x90, 0x85, 0x10, 0xb5, 0x05, 0x9d, 0x51, 0x7d, + 0x74, 0xe3, 0x59, 0xef, 0x0e, 0x51, 0x2f, 0x16, 0x68, 0xcc, 0xf2, 0xde, 0x31, 0xc1, 0xad, 0x1d, + 0xc1, 0x1b, 0x66, 0x91, 0x6b, 0xe6, 0x04, 0x15, 0xc6, 0xb9, 0x74, 0x81, 0x23, 0xd2, 0x3b, 0x66, + 0x01, 0x19, 0x48, 0x31, 0x9b, 0xe4, 0xbb, 0x11, 0x74, 0xdd, 0xc5, 0x02, 0xb5, 0x73, 0xfb, 0x78, + 0x08, 0xef, 0xf3, 0x6d, 0xad, 0x10, 0xee, 0x9b, 0xe5, 0xb7, 0x1e, 0x52, 0x74, 0x61, 0x76, 0xbe, + 0x59, 0xfe, 0x41, 0x58, 0xc8, 0x05, 0x4f, 0x80, 0x92, 0x97, 0x6e, 0xe4, 0xa1, 0xef, 0x1c, 0x47, + 0xb6, 0xaa, 0x49, 0x85, 0xb2, 0xfb, 0xaa, 0x77, 0xfb, 0xfa, 0xa9, 0x8c, 0xf1, 0x6a, 0xe7, 0x63, + 0x2c, 0x3f, 0xd5, 0xb9, 0x93, 0x65, 0xf8, 0xfb, 0x02, 0x9b, 0xe3, 0x02, 0x9b, 0xb5, 0x72, 0x51, + 0xbc, 0xa2, 0xc8, 0x63, 0x2c, 0x01, 0x4b, 0x0c, 0x10, 0x11, 0xd8, 0xac, 0x81, 0xd0, 0x5f, 0x5e, + 0xa5, 0x54, 0x97, 0x25, 0x5a, 0xe4, 0x15, 0xf1, 0x23, 0xc4, 0x0f, 0xe4, 0xd4, 0x99, 0xc4, 0xf2, + 0xf7, 0x89, 0x46, 0x6d, 0x78, 0x36, 0x88, 0x71, 0x4c, 0x0e, 0x8a, 0x72, 0x45, 0x22, 0xa5, 0xa8, + 0xa0, 0xa1, 0x20, 0xf0, 0x4c, 0x34, 0x9d, 0xad, 0xc9, 0x04, 0xf5, 0xa8, 0xb8, 0x11, 0x54, 0xca, + 0xb5, 0x23, 0xb7, 0xc3, 0x0d, 0x1a, 0x58, 0x40, 0xa1, 0x2a, 0x9a, 0xe1, 0xde, 0x6c, 0x98, 0x5d, + 0xa0, 0x75, 0xae, 0x60, 0xf9, 0x7c, 0x71, 0x8b, 0xd6, 0xf9, 0x12, 0xcb, 0x3a, 0xf4, 0xfa, 0xe6, + 0xc3, 0xc8, 0xd0, 0xf0, 0xfc, 0x38, 0xf1, 0x25, 0xdd, 0xc4, 0xb3, 0xd5, 0x9f, 0x31, 0xfe, 0x40, + 0x20, 0x27, 0xa7, 0x8c, 0xcd, 0x31, 0xe5, 0xe7, 0xe6, 0x58, 0xe4, 0xec, 0x19, 0x88, 0x2f, 0x1e, + 0xe8, 0xf0, 0xa6, 0xb0, 0x2c, 0xe8, 0x4c, 0xcd, 0x15, 0xae, 0x66, 0x06, 0xba, 0xdc, 0x87, 0xdf, + 0xc2, 0xad, 0x94, 0x88, 0x5f, 0x2c, 0xa1, 0xc7, 0x06, 0x4c, 0x27, 0x75, 0x17, 0xfb, 0x4f, 0xe5, + 0xd8, 0x18, 0xf0, 0x5b, 0xa6, 0xc0, 0x96, 0x38, 0xd9, 0x48, 0x67, 0xa2, 0x25, 0xde, 0x9a, 0x2b, + 0x8e, 0xe9, 0xe2, 0x63, 0x62, 0xa6, 0xea, 0x3d, 0x84, 0x26, 0xcb, 0xdf, 0x52, 0xd2, 0xa4, 0x85, + 0xc7, 0xf0, 0xc1, 0x17, 0x46, 0xfa, 0xf5, 0x6e, 0xe0, 0x7a, 0xa0, 0x52, 0x17, 0xa8, 0x8c, 0x33, + 0x99, 0xf2, 0xcd, 0x01, 0x73, 0x34, 0xac, 0x38, 0xfc, 0x20, 0x87, 0x20, 0x30, 0xb0, 0x36, 0x86, + 0xb3, 0x6c, 0xe7, 0x6f, 0x60, 0x14, 0x1b, 0x03, 0xd8, 0xe5, 0x86, 0x07, 0x94, 0x05, 0x84, 0x90, + 0x12, 0xe4, 0xfb, 0x47, 0x71, 0x62, 0x9a, 0x8e, 0xb4, 0x8f, 0xf5, 0x38, 0x2a, 0x83, 0x16, 0x9e, + 0x1e, 0xd6, 0x68, 0x19, 0x7d, 0x5f, 0x42, 0x2f, 0x44, 0x9b, 0xb1, 0x03, 0x87, 0xb0, 0x94, 0x7c, + 0x8a, 0x4b, 0x6f, 0x07, 0xab, 0x6c, 0x68, 0xcf, 0x07, 0xc6, 0x40, 0x0e, 0x0b, 0xfa, 0xa0, 0x0e, + 0x98, 0x70, 0xa4, 0x70, 0x3a, 0x17, 0x32, 0x30, 0x99, 0xce, 0xc6, 0x8c, 0xf9, 0xad, 0x25, 0x90, + 0x07, 0x2d, 0x5a, 0xb4, 0x13, 0x4f, 0xc4, 0x89, 0x29, 0x3a, 0x08, 0xc5, 0x92, 0x2f, 0xc7, 0x36, + 0x92, 0x8b, 0x14, 0x97, 0xb4, 0x2c, 0x8a, 0x60, 0x38, 0xac, 0xb6, 0xbf, 0x4d, 0x29, 0x82, 0x1e, + 0xf2, 0xcb, 0xb3, 0xe9, 0xba, 0xd1, 0x39, 0xe1, 0x66, 0xad, 0x66, 0x54, 0x94, 0x12, 0x37, 0x16, + 0x77, 0x00, 0x20, 0xee, 0x97, 0xf8, 0xcb, 0xf9, 0x65, 0x11, 0xf9, 0x36, 0xdc, 0xae, 0xb2, 0x98, + 0xe5, 0xdd, 0x6a, 0x2a, 0xdd, 0xde, 0xcc, 0x08, 0xc6, 0x76, 0x23, 0x85, 0x65, 0x2c, 0xf2, 0x5b, + 0xe1, 0xa1, 0x84, 0xca, 0xf5, 0x06, 0x48, 0x1b, 0x18, 0xf8, 0x0b, 0xb3, 0x43, 0xd3, 0x25, 0x6d, + 0xe2, 0x8c, 0x77, 0x90, 0x79, 0x57, 0x1c, 0xe3, 0x93, 0xc3, 0x83, 0x0e, 0xe6, 0x49, 0x8d, 0xef, + 0x9f, 0x65, 0x5a, 0xf9, 0x8f, 0x41, 0xa8, 0x06, 0xb4, 0x89, 0xe1, 0xc7, 0xe8, 0xce, 0x5f, 0x20, + 0xdf, 0x86, 0x1b, 0x43, 0xf9, 0x16, 0x49, 0xba, 0x02, 0x8a, 0x91, 0x63, 0x92, 0xe3, 0x95, 0xf1, + 0xb8, 0xfd, 0x2e, 0xac, 0x80, 0x34, 0xd6, 0x31, 0x75, 0x79, 0x80, 0xee, 0xe8, 0x57, 0xc0, 0x60, + 0xd5, 0x5e, 0x04, 0x07, 0x04, 0x3e, 0xaf, 0xe8, 0xaa, 0x06, 0xe9, 0x26, 0xe9, 0x90, 0x96, 0xae, + 0x0b, 0x62, 0x4e, 0x57, 0x89, 0xd2, 0x36, 0xa8, 0xf4, 0x7c, 0x3a, 0x0e, 0xd4, 0x3a, 0x50, 0xa9, + 0xce, 0xcd, 0x31, 0xa1, 0xcc, 0xb5, 0x50, 0xed, 0x8a, 0x79, 0x17, 0x29, 0x23, 0xe9, 0x1a, 0x42, + 0x49, 0x14, 0xab, 0x40, 0xf2, 0xfc, 0x24, 0x66, 0x2d, 0xc8, 0x19, 0x0d, 0x99, 0xfb, 0x45, 0x08, + 0xe0, 0x0c, 0x5d, 0xe2, 0x93, 0x6a, 0x4c, 0x06, 0x64, 0xc9, 0x75, 0x05, 0x1c, 0x5d, 0x16, 0xb7, + 0x7f, 0x2d, 0xc4, 0x02, 0x8e, 0x28, 0x0c, 0x8e, 0x23, 0x6a, 0xd5, 0x29, 0xbe, 0xff, 0xf1, 0xe2, + 0xc1, 0xc2, 0x0d, 0x3c, 0x24, 0xa4, 0x71, 0x37, 0x38, 0x4e, 0x08, 0xc1, 0xf6, 0x4f, 0x76, 0x9d, + 0xe3, 0x6a, 0x3e, 0xc0, 0xd8, 0x93, 0xef, 0xe0, 0xf6, 0xa7, 0xeb, 0x88, 0x47, 0xf8, 0x94, 0x4d, + 0xa8, 0x97, 0xd6, 0x45, 0x81, 0xbb, 0x51, 0xed, 0x58, 0x28, 0x55, 0xce, 0x62, 0xbd, 0x42, 0x37, + 0xcb, 0x76, 0x3b, 0xb7, 0x85, 0xb3, 0x8e, 0x48, 0xe7, 0xb6, 0xb0, 0x30, 0x3e, 0xce, 0x99, 0xbc, + 0x86, 0x8f, 0x72, 0x6e, 0x63, 0x8d, 0x5c, 0xcd, 0x4f, 0x70, 0x92, 0xfb, 0x5f, 0x08, 0x4b, 0xe8, + 0x61, 0xbb, 0x85, 0xc1, 0xf0, 0x97, 0xc0, 0x60, 0x83, 0xde, 0x3e, 0xc8, 0xed, 0x5f, 0x37, 0x6e, + 0x96, 0x30, 0x38, 0xdf, 0x31, 0x46, 0x18, 0x5c, 0xea, 0xb8, 0xcf, 0x37, 0xc6, 0xb9, 0x63, 0xdc, + 0xec, 0xa5, 0x8e, 0x09, 0xb5, 0xbb, 0xc7, 0x23, 0x83, 0x52, 0x93, 0x9b, 0xf8, 0xab, 0xc4, 0xe3, + 0xad, 0xa1, 0x25, 0x46, 0x21, 0x7a, 0x98, 0x99, 0x0f, 0x84, 0x0d, 0xe7, 0xbe, 0xaf, 0x50, 0xf4, + 0xe1, 0x10, 0x31, 0x26, 0x78, 0x7d, 0xb1, 0xd5, 0x43, 0x2c, 0xee, 0xc7, 0xed, 0xc2, 0xd3, 0x63, + 0x70, 0xd7, 0x37, 0x19, 0x48, 0xdc, 0xe6, 0x04, 0x80, 0x4d, 0x2c, 0x1e, 0xc2, 0xb9, 0x7e, 0x00, + 0x36, 0x96, 0x8a, 0x33, 0x12, 0x24, 0x78, 0xef, 0x70, 0x35, 0xe5, 0x50, 0x53, 0x3d, 0x84, 0x5b, + 0x27, 0x9c, 0x80, 0xa7, 0xd2, 0x82, 0x27, 0xc2, 0x92, 0x23, 0xd1, 0x35, 0x32, 0xc9, 0xd5, 0xf3, + 0x82, 0x89, 0xc1, 0xc3, 0x94, 0x88, 0x60, 0x34, 0xa4, 0xd0, 0xc2, 0xb9, 0x36, 0x05, 0x46, 0x50, + 0xf4, 0x24, 0x60, 0xe8, 0x2c, 0xc5, 0xc8, 0xac, 0x32, 0x4c, 0x7c, 0x32, 0xca, 0xf9, 0x52, 0x80, + 0x71, 0x14, 0x60, 0xd8, 0xc2, 0x4f, 0x08, 0xf0, 0x37, 0x02, 0x7c, 0x97, 0xdc, 0x31, 0x93, 0xd2, + 0x6c, 0x96, 0x77, 0x2a, 0xc9, 0xb3, 0xe7, 0xe6, 0x38, 0x7d, 0x73, 0x8e, 0x39, 0xa8, 0x39, 0x39, + 0x16, 0x58, 0x22, 0xba, 0xa8, 0x77, 0xa8, 0x35, 0x8c, 0xe9, 0x5c, 0x07, 0x83, 0x94, 0x69, 0x50, + 0xc0, 0x7f, 0xad, 0xf4, 0x04, 0x6f, 0x0e, 0x99, 0x13, 0xca, 0x33, 0x15, 0x70, 0x5c, 0xe4, 0x0a, + 0x15, 0x79, 0x42, 0x4d, 0xbc, 0x90, 0x38, 0x24, 0xe8, 0x82, 0xa6, 0x95, 0x54, 0x68, 0x1b, 0x53, + 0xa2, 0xf7, 0x4c, 0x82, 0x70, 0x3e, 0x25, 0xa6, 0x1d, 0x7e, 0x44, 0xc8, 0xb8, 0xb2, 0xe2, 0x1a, + 0xb3, 0x86, 0xc3, 0xf9, 0x2c, 0x95, 0x6f, 0xbf, 0xad, 0x2b, 0x93, 0x6e, 0x4d, 0x7c, 0x02, 0xf3, + 0xb1, 0xfd, 0x0e, 0x33, 0xfb, 0x1e, 0x34, 0x7a, 0xc6, 0x68, 0xd4, 0x3b, 0x93, 0x56, 0x0c, 0x13, + 0x73, 0x55, 0x9e, 0xcf, 0xc6, 0x85, 0xe7, 0x69, 0x85, 0x56, 0x46, 0x71, 0xe8, 0x39, 0xb9, 0x68, + 0xe9, 0x12, 0xe5, 0x27, 0x15, 0xfa, 0x42, 0x56, 0x12, 0x48, 0xac, 0xd0, 0xca, 0xe1, 0x0a, 0x89, + 0xa1, 0x4a, 0xc1, 0xdd, 0x21, 0x0c, 0x14, 0x72, 0xaf, 0x2b, 0xce, 0x00, 0x9c, 0x85, 0x94, 0xf3, + 0x4b, 0x29, 0xb5, 0x43, 0x18, 0x9c, 0xc6, 0xa5, 0x7b, 0x42, 0x75, 0xa4, 0xa9, 0xbf, 0x8d, 0xcb, + 0x56, 0x8a, 0x66, 0x48, 0xa0, 0xa0, 0x5f, 0x5d, 0xac, 0xfe, 0x1c, 0xd8, 0xac, 0xa8, 0xda, 0x38, + 0x6d, 0xdd, 0x53, 0x13, 0xd9, 0x34, 0x5f, 0x8f, 0x17, 0xb2, 0xda, 0x27, 0x83, 0xa1, 0x03, 0x80, + 0xe4, 0xa9, 0xeb, 0xc2, 0xea, 0x66, 0x25, 0x75, 0xf0, 0x93, 0xf4, 0x7d, 0x99, 0x10, 0x5a, 0xc6, + 0xd4, 0xa9, 0x16, 0xd6, 0xc5, 0xeb, 0x33, 0x93, 0x3a, 0x1c, 0xdd, 0xfa, 0xe6, 0xa4, 0x0e, 0xee, + 0x0d, 0x8f, 0x94, 0x31, 0x36, 0xe0, 0x0b, 0xd3, 0xbb, 0x87, 0xc3, 0x08, 0x05, 0x35, 0xb7, 0x9f, + 0x21, 0x0d, 0xce, 0x86, 0xe3, 0xe0, 0x8a, 0xce, 0xe8, 0x9c, 0x77, 0xa6, 0x71, 0xfb, 0x27, 0x72, + 0xe9, 0x7e, 0xd2, 0xea, 0xf4, 0x1c, 0x27, 0x97, 0x84, 0xb3, 0x3a, 0xe7, 0x6d, 0xa0, 0x6d, 0x30, + 0x79, 0x88, 0x5f, 0xa2, 0x60, 0x4e, 0xa1, 0x7d, 0x54, 0x89, 0xd0, 0x9b, 0xdb, 0x1f, 0xad, 0xc7, + 0x63, 0xd6, 0xe3, 0xa4, 0x31, 0x04, 0x38, 0xa0, 0x74, 0x3c, 0x2f, 0x9c, 0x52, 0xca, 0x97, 0x33, + 0x93, 0xaf, 0x3b, 0x9a, 0x81, 0x82, 0x96, 0x91, 0x14, 0xdc, 0xb3, 0x43, 0xe0, 0x46, 0x40, 0xd9, + 0x74, 0x78, 0xc4, 0xcf, 0xab, 0x57, 0xea, 0x03, 0x75, 0x71, 0x8f, 0x2d, 0x89, 0x5b, 0xc2, 0x4f, + 0xd6, 0xbb, 0x61, 0xba, 0xf7, 0x25, 0xdf, 0x06, 0x3d, 0x85, 0xd4, 0x74, 0x02, 0x78, 0xb0, 0x28, + 0xee, 0x0d, 0x37, 0xb7, 0xdf, 0x2d, 0x65, 0x30, 0x81, 0x51, 0xa1, 0x00, 0x45, 0xb0, 0x0a, 0xba, + 0xd2, 0x78, 0x08, 0x48, 0xd3, 0x24, 0x81, 0x83, 0x01, 0x0a, 0x93, 0xc8, 0x49, 0x67, 0xfd, 0x71, + 0x72, 0x0a, 0x49, 0x41, 0xfe, 0xb6, 0x93, 0x7a, 0xe2, 0x85, 0x1a, 0xa1, 0x49, 0x29, 0x7b, 0x93, + 0x1b, 0xf8, 0xa9, 0x30, 0x4e, 0xb3, 0x63, 0x06, 0xc4, 0x4e, 0xca, 0x50, 0xc7, 0x7c, 0x13, 0x61, + 0xa8, 0xf1, 0xa4, 0x47, 0xef, 0x4e, 0x6a, 0x85, 0x01, 0x71, 0xb4, 0x11, 0xde, 0x1c, 0x92, 0x00, + 0x58, 0x1f, 0xe7, 0x0e, 0x96, 0x65, 0xa4, 0x14, 0x96, 0xef, 0xbb, 0xe7, 0xd4, 0xd4, 0x40, 0xfe, + 0xf1, 0xbb, 0xb8, 0x35, 0x1f, 0x85, 0x41, 0xa5, 0x45, 0xfe, 0x80, 0x51, 0x0e, 0x27, 0x00, 0xf3, + 0x19, 0xc7, 0x0a, 0x67, 0x32, 0xc3, 0xed, 0x6e, 0x10, 0x40, 0x3b, 0xde, 0x6c, 0xac, 0xb9, 0xce, + 0x2f, 0x38, 0x86, 0x16, 0x2e, 0xd9, 0x7b, 0x8c, 0x86, 0x53, 0x17, 0xed, 0x33, 0x53, 0x6b, 0x33, + 0x96, 0xfb, 0xb3, 0xc8, 0x19, 0xde, 0x2d, 0x19, 0xba, 0xca, 0x54, 0xe8, 0x3b, 0xe5, 0xb8, 0x04, + 0x25, 0x12, 0x76, 0x43, 0x8c, 0xed, 0xce, 0x46, 0x07, 0x1c, 0xa4, 0xa2, 0x0e, 0x45, 0xc4, 0x2d, + 0xab, 0x80, 0x1b, 0xac, 0x5b, 0x52, 0xa5, 0xf4, 0xb7, 0x31, 0x4d, 0xa1, 0x06, 0xee, 0x98, 0x07, + 0xa7, 0xfd, 0x4b, 0xe7, 0x60, 0xc4, 0x96, 0x08, 0xc1, 0xfd, 0xa1, 0xef, 0x7e, 0xca, 0x85, 0x60, + 0xb1, 0xd9, 0xc7, 0x39, 0x3d, 0x2d, 0x82, 0xbb, 0x45, 0x7f, 0x6e, 0x95, 0xf3, 0x76, 0x14, 0x97, + 0x5e, 0x3f, 0x62, 0x06, 0x90, 0xb7, 0x19, 0xb4, 0x20, 0x48, 0x9e, 0x81, 0x99, 0x60, 0xd8, 0xf5, + 0xcd, 0xdc, 0xb1, 0x69, 0xa4, 0x4d, 0xf5, 0xcb, 0x65, 0xd8, 0xb3, 0xe1, 0x43, 0x5f, 0x0c, 0x14, + 0x8e, 0x2b, 0x85, 0x66, 0xdf, 0x38, 0x28, 0xb4, 0x2c, 0x1b, 0xbb, 0x65, 0xbe, 0xd0, 0xd0, 0x22, + 0xdc, 0x09, 0x38, 0x1e, 0x24, 0xb8, 0x75, 0x29, 0x56, 0x69, 0xfb, 0xbf, 0xe0, 0xf6, 0x9e, 0x65, + 0x5b, 0x21, 0x43, 0xf5, 0xb3, 0xdd, 0xe4, 0xb2, 0x67, 0x70, 0x26, 0xdb, 0x36, 0xb1, 0x15, 0x7c, + 0x55, 0x1a, 0xf1, 0xfa, 0xfe, 0x00, 0x0b, 0x03, 0x26, 0x2e, 0x8c, 0x68, 0x01, 0xfc, 0xe4, 0x88, + 0x19, 0xa1, 0x20, 0x54, 0xa1, 0x04, 0x70, 0xfb, 0x39, 0xb4, 0xbb, 0x53, 0x81, 0x12, 0x57, 0x33, + 0x7f, 0x1f, 0xf0, 0x71, 0x80, 0x9e, 0xac, 0xa8, 0x3b, 0xe7, 0x80, 0x1d, 0xf1, 0x46, 0x2e, 0x90, + 0x9e, 0x66, 0x7d, 0x7a, 0xa8, 0xfe, 0x54, 0xa9, 0xb6, 0xc8, 0xd6, 0x21, 0x7c, 0x00, 0x27, 0xc3, + 0xf6, 0xfa, 0x62, 0xb3, 0xea, 0xc6, 0x2c, 0x5b, 0xe0, 0x98, 0x08, 0x29, 0x23, 0x9e, 0xd1, 0x74, + 0x00, 0x73, 0x6b, 0xc3, 0xb3, 0xd2, 0x7d, 0x9d, 0x59, 0xfb, 0x16, 0x38, 0x57, 0x2c, 0x70, 0x7c, + 0x5e, 0x16, 0x66, 0x7b, 0x25, 0x0b, 0xf7, 0x08, 0x5f, 0xa2, 0xa7, 0xf7, 0x34, 0x25, 0xc2, 0x1d, + 0xdb, 0xb2, 0x70, 0xdb, 0x1b, 0xb4, 0xfe, 0xb9, 0x7b, 0xf5, 0xbf, 0x52, 0xea, 0xff, 0x83, 0xd6, + 0xaf, 0x0d, 0xd5, 0x3b, 0xb6, 0x97, 0xa9, 0x6c, 0xff, 0x49, 0xeb, 0x96, 0x0e, 0xd7, 0x3d, 0x07, + 0x70, 0x0d, 0x74, 0xef, 0xf1, 0x7b, 0xc3, 0x75, 0x8b, 0x61, 0xac, 0xbc, 0x0c, 0xac, 0x9b, 0x7c, + 0x0f, 0xe7, 0x53, 0x68, 0x19, 0xd3, 0x03, 0xc9, 0x7e, 0xae, 0x26, 0x17, 0x1e, 0x9d, 0x49, 0x0b, + 0xb8, 0x9a, 0x95, 0x98, 0x18, 0x86, 0x2f, 0xe8, 0xcc, 0x83, 0xdf, 0x74, 0xe7, 0xf6, 0xc0, 0x02, + 0xe9, 0xc9, 0x00, 0x0f, 0xf1, 0x47, 0x72, 0x2f, 0xb7, 0xdb, 0xed, 0x55, 0x85, 0x83, 0x85, 0x16, + 0x1a, 0xc3, 0x3a, 0x67, 0xff, 0xab, 0x66, 0xb6, 0x41, 0xc1, 0x96, 0xd1, 0x80, 0x2d, 0x9c, 0xa1, + 0xc1, 0x3b, 0x62, 0x2b, 0x02, 0x74, 0x83, 0xd7, 0xd4, 0x15, 0xa8, 0x25, 0x03, 0xc4, 0xf8, 0xb7, + 0xbc, 0x11, 0xa9, 0x4b, 0xc1, 0xa6, 0xbd, 0x83, 0x3b, 0x92, 0xe2, 0xf8, 0x8a, 0xd5, 0xe0, 0xb2, + 0x9b, 0xb9, 0xdd, 0xf5, 0xba, 0x7a, 0xe7, 0x20, 0xcb, 0x6b, 0xe5, 0xc2, 0x57, 0xd8, 0x91, 0x6d, + 0xc2, 0xed, 0xf0, 0x43, 0x13, 0x20, 0x87, 0x3d, 0xfc, 0x12, 0x7c, 0x71, 0x19, 0x27, 0x21, 0x85, + 0xcf, 0x38, 0x99, 0x23, 0x97, 0xd0, 0xc8, 0x57, 0x15, 0xe0, 0x6f, 0x59, 0x82, 0x51, 0xb0, 0xda, + 0xf6, 0x04, 0xee, 0xfd, 0x3e, 0xae, 0x34, 0x80, 0xe1, 0x8c, 0x99, 0x44, 0x9f, 0x40, 0x7b, 0x97, + 0x85, 0x76, 0x82, 0x17, 0x1d, 0x5c, 0x05, 0x30, 0x87, 0x66, 0xa6, 0x62, 0xde, 0x7c, 0x37, 0x41, + 0x45, 0x53, 0xb5, 0x1c, 0x5b, 0x1d, 0xa0, 0x96, 0x27, 0x2b, 0x58, 0x64, 0x0e, 0x28, 0x97, 0xcb, + 0x44, 0x6a, 0x7b, 0x7b, 0xb7, 0x87, 0x31, 0xb6, 0x27, 0x81, 0x9f, 0xf2, 0xd7, 0xca, 0xd6, 0xab, + 0xfc, 0x93, 0xb6, 0xe1, 0xcb, 0x1b, 0x5d, 0xf3, 0x82, 0xe1, 0x30, 0x57, 0x73, 0x84, 0x66, 0x5e, + 0x31, 0xfb, 0xd8, 0x71, 0xc6, 0x38, 0xae, 0xe6, 0xd7, 0xb4, 0xa4, 0x15, 0x2b, 0xa3, 0xb9, 0xbd, + 0x95, 0x2a, 0xdc, 0xdf, 0x21, 0xbc, 0x1f, 0xe4, 0x6c, 0x88, 0x3d, 0x03, 0xc9, 0xde, 0xe4, 0xbc, + 0xe8, 0x32, 0xc6, 0x04, 0xe9, 0x50, 0x2e, 0x81, 0xec, 0x47, 0x2e, 0xba, 0xa6, 0xe4, 0x3e, 0x1e, + 0x72, 0x51, 0xd8, 0xae, 0x63, 0x21, 0x74, 0xe2, 0xa7, 0x8a, 0xe9, 0x73, 0xf5, 0x4d, 0xe4, 0xa4, + 0xb8, 0x7a, 0x9e, 0xbe, 0x7b, 0xac, 0x87, 0xb4, 0x72, 0x35, 0x57, 0xd1, 0x59, 0x1a, 0x6f, 0x04, + 0x77, 0x7c, 0x84, 0xed, 0xf1, 0x8c, 0x98, 0x1e, 0x0d, 0xee, 0x9e, 0x9f, 0xcc, 0xed, 0x4d, 0x57, + 0x99, 0xe4, 0xbf, 0xc6, 0x06, 0xc3, 0x90, 0x78, 0xa8, 0x17, 0xcd, 0x89, 0x90, 0x94, 0x89, 0xab, + 0x17, 0x13, 0x63, 0x8b, 0xb4, 0x2f, 0xa0, 0x5c, 0x2f, 0x5a, 0xe9, 0x27, 0xfd, 0x9e, 0xc0, 0x58, + 0xcf, 0xd0, 0x4c, 0x4b, 0x7e, 0x4e, 0xae, 0xfc, 0xe5, 0xdf, 0x95, 0x61, 0x41, 0x3f, 0xfc, 0xc4, + 0xd0, 0xd4, 0xff, 0x05, 0xdb, 0x43, 0x8c, 0xa7, 0xb9, 0xbd, 0xb7, 0xd9, 0x4b, 0xa2, 0xf1, 0x42, + 0x02, 0x24, 0x9a, 0x2d, 0xb1, 0x03, 0xfa, 0xbe, 0xb1, 0x4d, 0x9c, 0xeb, 0x6f, 0xe8, 0x94, 0xb6, + 0xab, 0xc4, 0xd5, 0x2a, 0xb1, 0xa0, 0x83, 0xdb, 0xdb, 0x0e, 0xb9, 0x79, 0xff, 0xa7, 0x98, 0x92, + 0xa9, 0xc3, 0x0d, 0x4d, 0x93, 0xf3, 0x4e, 0xe7, 0xe7, 0x9a, 0x02, 0x95, 0xf1, 0x66, 0xf9, 0x37, + 0xd7, 0x83, 0x27, 0x8f, 0x8e, 0xe9, 0x10, 0x3b, 0x71, 0x35, 0x6f, 0x23, 0xa5, 0x8d, 0x01, 0xe1, + 0x22, 0x38, 0xc5, 0xb1, 0x20, 0x67, 0x12, 0x6e, 0x7a, 0x1e, 0x82, 0x29, 0xb0, 0x34, 0x47, 0xbc, + 0x41, 0x56, 0xcf, 0xc5, 0x4d, 0xa4, 0xca, 0x79, 0x22, 0x84, 0x8b, 0x86, 0x18, 0x72, 0x92, 0x78, + 0x12, 0x6e, 0x8b, 0x55, 0x71, 0xd3, 0xab, 0x64, 0xd2, 0x22, 0x16, 0xf8, 0xfb, 0x3f, 0xe7, 0xf6, + 0xf6, 0xb2, 0x17, 0xc5, 0xbc, 0xb6, 0x84, 0x7a, 0xd1, 0x70, 0x35, 0xd6, 0x9f, 0x70, 0x5e, 0xb1, + 0x52, 0xde, 0xe4, 0x76, 0x32, 0x00, 0xf9, 0x18, 0x64, 0x7c, 0x55, 0x5d, 0x90, 0xfa, 0x81, 0x2e, + 0xb3, 0x03, 0x60, 0x0d, 0xc3, 0x73, 0xe2, 0xcd, 0xb9, 0x26, 0x79, 0x53, 0x3c, 0x66, 0x70, 0x32, + 0x08, 0x3a, 0x7b, 0x1d, 0x88, 0x9c, 0xd8, 0x23, 0xf2, 0xfe, 0xa5, 0x55, 0x31, 0xa4, 0x65, 0xba, + 0x21, 0x0e, 0x96, 0x85, 0xdb, 0xf5, 0x02, 0x28, 0xea, 0x3e, 0x16, 0xcd, 0xbf, 0x70, 0x62, 0x9e, + 0x72, 0x1c, 0xf3, 0x65, 0x0a, 0x5d, 0x6f, 0x54, 0xae, 0xd0, 0xea, 0x3e, 0x25, 0x55, 0xbd, 0x55, + 0xf6, 0x14, 0xde, 0x5e, 0x58, 0x18, 0xaf, 0x98, 0xbf, 0xe6, 0x8f, 0x58, 0x70, 0x3c, 0xa2, 0x4a, + 0xc2, 0x6d, 0x68, 0x48, 0xb8, 0x6e, 0xcf, 0x2c, 0x63, 0xca, 0x9e, 0x82, 0x64, 0x00, 0x6d, 0xe4, + 0x17, 0x54, 0xb7, 0xf0, 0x66, 0xe7, 0x04, 0x7a, 0x3e, 0xf0, 0x9b, 0xdb, 0x21, 0xfd, 0xd3, 0xea, + 0xdd, 0x7d, 0x0d, 0x2c, 0xcd, 0x57, 0x49, 0xb7, 0xe3, 0x21, 0xdf, 0xb1, 0xea, 0xaa, 0x77, 0x20, + 0xda, 0x61, 0xf8, 0xfb, 0x61, 0x56, 0x78, 0xdd, 0x26, 0x0d, 0x9c, 0x5f, 0x1b, 0x49, 0x53, 0x03, + 0xcf, 0x81, 0xf7, 0x78, 0x10, 0x16, 0x16, 0x22, 0xef, 0xa9, 0x51, 0xd7, 0x35, 0x32, 0xc0, 0x2e, + 0x49, 0x55, 0x90, 0x18, 0x8e, 0xc1, 0x9d, 0x1a, 0x73, 0x19, 0x6b, 0xb6, 0xe1, 0xa1, 0x7d, 0xbe, + 0x45, 0x2e, 0x55, 0x46, 0xe7, 0xf6, 0x8f, 0xd9, 0xf3, 0x12, 0xe7, 0xca, 0x81, 0x4a, 0xda, 0x7a, + 0x46, 0x69, 0x5d, 0x1d, 0x6a, 0x35, 0xf4, 0x60, 0xf3, 0x42, 0x76, 0xb8, 0xfb, 0x35, 0x05, 0xe0, + 0xfb, 0xa3, 0x01, 0x26, 0x86, 0xfa, 0x7f, 0xa5, 0x34, 0x8f, 0x1b, 0xdd, 0xdc, 0x43, 0x37, 0x8a, + 0x0e, 0xa9, 0xe8, 0x1d, 0xd7, 0x3f, 0x9b, 0x73, 0xcc, 0x65, 0xe1, 0x60, 0x07, 0x6f, 0x52, 0x3b, + 0x18, 0x73, 0x10, 0xab, 0x4d, 0xb6, 0x1f, 0x81, 0x9e, 0x41, 0xa3, 0x49, 0xd6, 0x3f, 0x30, 0xbc, + 0xe5, 0x73, 0x98, 0x6e, 0x68, 0xc1, 0x97, 0xd9, 0x64, 0x2e, 0x7b, 0x04, 0x5b, 0x2d, 0xf2, 0xbe, + 0x60, 0xaf, 0x70, 0xda, 0x2b, 0x27, 0xd4, 0xeb, 0xce, 0xec, 0xe1, 0x5e, 0x35, 0x74, 0x34, 0xb3, + 0x02, 0x61, 0x2e, 0xcb, 0x55, 0xfa, 0x6d, 0xfd, 0xd7, 0xfd, 0x1a, 0x42, 0xfd, 0x1c, 0xa6, 0x83, + 0x11, 0xc1, 0x91, 0xc2, 0x95, 0x1e, 0x99, 0xc1, 0x1e, 0x11, 0xb4, 0x07, 0x9e, 0x3a, 0xd0, 0x1e, + 0x3f, 0x19, 0xee, 0x71, 0x3f, 0xa4, 0x8a, 0x90, 0x5b, 0xdb, 0x92, 0x54, 0x74, 0xd2, 0x53, 0x15, + 0x78, 0x6b, 0x75, 0x55, 0x8f, 0xf9, 0x9f, 0x90, 0x1e, 0xe2, 0xad, 0xb1, 0x8c, 0xd0, 0x72, 0x28, + 0x99, 0xbf, 0xbe, 0x2f, 0x5f, 0x7e, 0x46, 0xb1, 0xfa, 0x10, 0x8e, 0x4c, 0xd3, 0xbb, 0x25, 0xfe, + 0x96, 0x09, 0x7c, 0xa6, 0xed, 0x20, 0xf0, 0xcd, 0x92, 0x2f, 0x9f, 0xbf, 0x43, 0x51, 0x88, 0x8f, + 0x60, 0xce, 0x03, 0xae, 0xfb, 0x5e, 0xca, 0x13, 0x8d, 0x3b, 0x87, 0xae, 0x0e, 0x8c, 0x1f, 0x9f, + 0xc2, 0x6d, 0xd8, 0xb3, 0xb3, 0x82, 0x1e, 0xf6, 0x23, 0x56, 0x5c, 0xe6, 0xa2, 0xf2, 0x35, 0x04, + 0xaa, 0x8a, 0xf2, 0x65, 0xc9, 0x57, 0x00, 0xa9, 0x27, 0xae, 0xbe, 0x33, 0x52, 0xca, 0x82, 0x0d, + 0xf2, 0xd2, 0xfe, 0x90, 0xac, 0x4d, 0x09, 0x49, 0xda, 0x41, 0x7a, 0x99, 0xa3, 0xa6, 0x1c, 0x8f, + 0x40, 0xfe, 0x50, 0x7d, 0x54, 0xa6, 0xb7, 0x40, 0xc0, 0x80, 0xba, 0x0a, 0x30, 0x3f, 0xbd, 0x83, + 0x47, 0x1e, 0x01, 0x70, 0x6d, 0x4b, 0x5d, 0x89, 0x78, 0x78, 0x2c, 0x5c, 0x86, 0x39, 0x1f, 0x76, + 0xd2, 0x6b, 0x7b, 0xca, 0xad, 0x97, 0xdc, 0xfc, 0x1c, 0x79, 0xc9, 0xac, 0xe0, 0xad, 0x86, 0xb9, + 0x08, 0x03, 0x76, 0x02, 0xd4, 0x49, 0x8b, 0x96, 0x42, 0x94, 0xe6, 0xd1, 0x9a, 0xb3, 0xe4, 0x9a, + 0xe7, 0xe6, 0x18, 0xd6, 0x3b, 0xb1, 0x15, 0x58, 0x77, 0x10, 0xbb, 0x9b, 0x72, 0x2c, 0xc1, 0x7b, + 0x11, 0x60, 0xf1, 0x2d, 0xf2, 0xb9, 0x41, 0x4a, 0xae, 0x64, 0x38, 0xa2, 0x6f, 0x26, 0xd9, 0x1a, + 0x92, 0xad, 0x26, 0xd9, 0x2a, 0xa2, 0x96, 0xa4, 0xc7, 0x31, 0x3e, 0xd1, 0x9a, 0x72, 0xe4, 0x49, + 0xb3, 0x86, 0x17, 0x3a, 0x02, 0x68, 0x10, 0x23, 0xe9, 0xb6, 0x05, 0xa4, 0xc3, 0x24, 0x55, 0x85, + 0x61, 0x71, 0xaa, 0xba, 0x2e, 0x53, 0x53, 0x9b, 0xaa, 0x49, 0x27, 0x3f, 0xd4, 0x8a, 0x99, 0xd1, + 0x24, 0x35, 0x5a, 0x94, 0xa8, 0xef, 0xfa, 0x25, 0xb5, 0x6b, 0x01, 0x6e, 0xe5, 0x75, 0x72, 0x1d, + 0xed, 0xda, 0x9d, 0x99, 0xe4, 0x0c, 0xd8, 0x0b, 0x42, 0x4d, 0x99, 0xf8, 0xf1, 0x33, 0x78, 0x32, + 0xce, 0x77, 0x71, 0x7b, 0xfb, 0xd1, 0x82, 0x80, 0x8e, 0x25, 0x12, 0xfb, 0x62, 0x72, 0x51, 0xb9, + 0xa1, 0x91, 0xd0, 0xa4, 0xdc, 0xd1, 0x98, 0x6e, 0xec, 0x12, 0xdc, 0x2c, 0x84, 0xcf, 0x30, 0x15, + 0x6e, 0x6f, 0x1b, 0xf4, 0xbc, 0xcc, 0x9e, 0xc4, 0x7b, 0x2c, 0x96, 0x65, 0x60, 0x53, 0x48, 0x26, + 0x10, 0x7e, 0xd5, 0x62, 0x92, 0x9b, 0xbe, 0xa2, 0x1e, 0x1e, 0x37, 0x8f, 0x5f, 0x08, 0xa7, 0x37, + 0x04, 0x48, 0xa6, 0x09, 0xac, 0x20, 0xc9, 0x7c, 0x5c, 0xa4, 0x97, 0x67, 0xc8, 0x9a, 0x6c, 0x92, + 0x99, 0xb1, 0x8f, 0xed, 0x5c, 0x07, 0xcd, 0xc7, 0x87, 0x90, 0xb5, 0x38, 0x7b, 0xc3, 0xdd, 0xa0, + 0x68, 0x70, 0x35, 0x2f, 0x62, 0xbf, 0x2a, 0xad, 0x10, 0x50, 0x71, 0xaf, 0x3c, 0x03, 0x99, 0x91, + 0x54, 0x78, 0x37, 0x8b, 0x54, 0x5d, 0xa0, 0x71, 0x78, 0x06, 0x31, 0xb4, 0x41, 0xcc, 0x58, 0xd0, + 0x42, 0x06, 0x3c, 0x1d, 0xaa, 0x08, 0xd4, 0x68, 0xc8, 0x3a, 0xca, 0xb4, 0x39, 0x26, 0x18, 0x1e, + 0x04, 0x57, 0xba, 0x1d, 0xd2, 0x3e, 0x88, 0xd8, 0x39, 0xc7, 0x58, 0x61, 0x20, 0x82, 0x73, 0x7d, + 0x8d, 0xcb, 0x68, 0x38, 0x0d, 0xee, 0x42, 0xca, 0x67, 0xe9, 0xd9, 0xcd, 0xa1, 0x58, 0xd4, 0xc7, + 0xa3, 0x78, 0x70, 0xdf, 0xfb, 0x3b, 0x31, 0x92, 0xd0, 0x65, 0x40, 0x46, 0xd2, 0xdb, 0x02, 0xc8, + 0x4b, 0x7a, 0x61, 0x03, 0xd9, 0x49, 0xef, 0x6f, 0xc0, 0x90, 0x6f, 0x3e, 0x4e, 0x5b, 0xa2, 0x89, + 0xcb, 0x84, 0xec, 0x3a, 0xaa, 0xdc, 0x98, 0xb9, 0x11, 0xba, 0x31, 0x23, 0x13, 0x7a, 0x43, 0xc9, + 0x75, 0x85, 0x1c, 0xdd, 0x4a, 0x2f, 0x1a, 0xac, 0x83, 0x6f, 0x47, 0x01, 0xdd, 0xb4, 0x1c, 0xe0, + 0xde, 0xf7, 0x8f, 0x25, 0xdd, 0x9e, 0x4f, 0xc7, 0x56, 0x37, 0x9f, 0xa1, 0x67, 0x09, 0xb8, 0x9c, + 0x41, 0x81, 0x0c, 0xdd, 0xc6, 0x39, 0x3f, 0x10, 0xa4, 0xdc, 0x75, 0x03, 0xb5, 0x04, 0x88, 0x8f, + 0x00, 0xe2, 0x79, 0xb5, 0xf8, 0x31, 0xca, 0xa3, 0x3e, 0x70, 0x6f, 0x3a, 0x10, 0xc6, 0x32, 0xab, + 0xf9, 0x0f, 0xc1, 0xe8, 0xf5, 0x8d, 0x42, 0x7d, 0xec, 0xdf, 0xa1, 0xde, 0xaa, 0xa0, 0x76, 0x1e, + 0x45, 0xcc, 0xcc, 0xc1, 0x00, 0xbd, 0x5c, 0x83, 0xd7, 0x23, 0x95, 0x7b, 0xb4, 0x22, 0x05, 0x23, + 0xe1, 0x22, 0x9d, 0x3c, 0x66, 0xe7, 0x74, 0xf2, 0x90, 0xb2, 0xd7, 0xd1, 0xc9, 0xd7, 0xa6, 0xd3, + 0x3b, 0x42, 0xe9, 0x5a, 0x51, 0x99, 0x7a, 0x7a, 0x74, 0xf8, 0xc7, 0x38, 0xe9, 0xc9, 0x94, 0x07, + 0xe1, 0x94, 0x3e, 0xe1, 0x12, 0x43, 0x2a, 0x13, 0xc9, 0xf6, 0xc5, 0xa2, 0xab, 0x0b, 0xaf, 0x74, + 0xa6, 0x27, 0x35, 0xa6, 0x2f, 0xa3, 0x19, 0x9a, 0x6b, 0x1d, 0xed, 0x13, 0x63, 0x06, 0xc1, 0x36, + 0xc9, 0x1f, 0x76, 0x05, 0xc5, 0xc3, 0x71, 0x3f, 0xde, 0x32, 0xca, 0x6b, 0xa3, 0x06, 0xfd, 0x04, + 0x35, 0xe8, 0x47, 0x44, 0xa3, 0x7b, 0x84, 0x41, 0xaf, 0x4d, 0x4f, 0x31, 0xcb, 0x15, 0x14, 0x5e, + 0x05, 0xda, 0x7a, 0x5f, 0xf0, 0x28, 0x90, 0xa4, 0x6f, 0x80, 0xf6, 0x49, 0x50, 0x42, 0xb5, 0xf4, + 0x69, 0x83, 0xd5, 0x08, 0x6f, 0xf3, 0xa6, 0xaf, 0x63, 0x40, 0x9a, 0xc4, 0x82, 0x16, 0xea, 0x26, + 0x4f, 0x23, 0xbb, 0x6a, 0xfe, 0x46, 0x8f, 0xd9, 0x39, 0xae, 0xe6, 0x34, 0x3c, 0x64, 0xa1, 0x54, + 0xd1, 0x43, 0x4c, 0xaa, 0xd5, 0x9d, 0x13, 0x50, 0x34, 0xee, 0x89, 0xd2, 0x15, 0xd2, 0x2d, 0xf1, + 0x57, 0xcd, 0x65, 0x5a, 0xb3, 0xc9, 0x92, 0x23, 0xa7, 0xf4, 0x2b, 0x7c, 0xdb, 0xa9, 0x02, 0xeb, + 0xf0, 0x06, 0x75, 0xc4, 0x1a, 0x91, 0x05, 0xbf, 0x42, 0x22, 0xc5, 0x54, 0x15, 0xc9, 0x54, 0x89, + 0xa9, 0x6a, 0x92, 0xa9, 0xae, 0x4b, 0xd5, 0xd4, 0x66, 0x6a, 0xb2, 0xc8, 0x4e, 0xad, 0x98, 0x1a, + 0x8d, 0x67, 0x8f, 0x20, 0x15, 0x4f, 0x2f, 0x26, 0x99, 0x89, 0x28, 0x15, 0x4f, 0x2f, 0xa3, 0x77, + 0xbd, 0x62, 0x94, 0xb5, 0x00, 0x05, 0xf9, 0x8d, 0x2f, 0xc4, 0x81, 0x07, 0x45, 0xe5, 0x6e, 0x10, + 0xe8, 0x87, 0xc2, 0x70, 0x50, 0x11, 0x45, 0x10, 0x25, 0xba, 0x10, 0x54, 0x51, 0x3e, 0x62, 0x6b, + 0x9f, 0x4e, 0xb1, 0xc8, 0x36, 0xda, 0x0b, 0xe2, 0x23, 0xe0, 0xc4, 0x44, 0x92, 0x89, 0x2c, 0xd0, + 0x88, 0x55, 0x7e, 0x5f, 0x8e, 0x3e, 0xb0, 0xd6, 0xf7, 0x38, 0x4c, 0x3e, 0xd3, 0xe6, 0xcd, 0x5c, + 0xc7, 0xf8, 0x52, 0xf1, 0x11, 0xe0, 0x93, 0x46, 0xc0, 0x8f, 0x51, 0xe0, 0xc3, 0x42, 0x50, 0xac, + 0xa4, 0xc8, 0x72, 0x98, 0x08, 0xcc, 0xce, 0x7c, 0x82, 0xac, 0x79, 0x4a, 0x4c, 0x83, 0x79, 0x3c, + 0x23, 0xa6, 0x81, 0x1a, 0x17, 0x63, 0x52, 0x1e, 0x1d, 0x3a, 0x15, 0x10, 0x96, 0xe3, 0xed, 0x0d, + 0xc6, 0x51, 0x44, 0xcd, 0x38, 0xb5, 0xe2, 0xe2, 0x78, 0x7a, 0xbf, 0x43, 0xf5, 0x27, 0xe7, 0x56, + 0xc8, 0xa5, 0xe2, 0x40, 0x25, 0xcb, 0xb4, 0xf9, 0x26, 0x79, 0x73, 0x5c, 0xd0, 0x36, 0x0d, 0xb7, + 0x3b, 0x16, 0x3a, 0xb7, 0xae, 0x63, 0xf9, 0x58, 0xc1, 0xfd, 0x04, 0x85, 0x58, 0x37, 0x1a, 0xc2, + 0xa1, 0xcd, 0x5c, 0xfa, 0x30, 0x62, 0xb7, 0x7f, 0x04, 0xb9, 0x52, 0xa4, 0xde, 0xdd, 0x00, 0x7d, + 0xd0, 0xec, 0xd3, 0xeb, 0x25, 0x40, 0xf6, 0xf2, 0xef, 0x8c, 0x19, 0xfd, 0x27, 0xe7, 0x8b, 0x36, + 0x96, 0x9f, 0x9e, 0x1f, 0xb0, 0x6f, 0x90, 0x0f, 0xf9, 0x83, 0x7b, 0xa6, 0x41, 0x74, 0x13, 0x69, + 0xbf, 0xcc, 0x64, 0xaf, 0xfd, 0xd2, 0x68, 0x7c, 0xca, 0x55, 0x14, 0xc8, 0x36, 0x17, 0x05, 0x53, + 0x96, 0x3c, 0xad, 0x12, 0x61, 0x8b, 0xcb, 0x29, 0xd6, 0x31, 0xc9, 0x15, 0x6a, 0x3e, 0x2a, 0xe9, + 0x09, 0x0d, 0x1f, 0x91, 0x6c, 0xd2, 0x3a, 0xd4, 0x42, 0xa3, 0x6a, 0x25, 0xdf, 0x19, 0x4c, 0x77, + 0x11, 0x4d, 0xa8, 0xff, 0xfd, 0x34, 0x6b, 0xcf, 0x53, 0x8b, 0xf4, 0xba, 0x8b, 0x18, 0x99, 0x8c, + 0xc0, 0x5e, 0x00, 0xbe, 0x45, 0xb3, 0x73, 0x00, 0x05, 0x00, 0xb0, 0x75, 0x6a, 0x09, 0x37, 0xee, + 0xef, 0xe6, 0x98, 0x82, 0x9b, 0xa8, 0x9a, 0x91, 0x77, 0x48, 0xe9, 0xa5, 0x78, 0x89, 0xf7, 0x2b, + 0x17, 0xa7, 0x41, 0xad, 0x1b, 0xc2, 0xb8, 0xfd, 0xe9, 0x43, 0x68, 0xd3, 0x19, 0xdc, 0xb0, 0x1b, + 0x98, 0xe3, 0x88, 0xab, 0x0e, 0x0c, 0xe1, 0x99, 0x78, 0x54, 0xed, 0xcb, 0x8f, 0xc3, 0x40, 0x60, + 0xfb, 0xfc, 0x5e, 0xfa, 0xc4, 0xa4, 0xfb, 0xce, 0x03, 0x30, 0x98, 0x82, 0x67, 0x5f, 0x4a, 0x12, + 0x06, 0x72, 0x77, 0xe6, 0x0b, 0x03, 0x66, 0xae, 0x66, 0x05, 0x9e, 0x84, 0x0c, 0xe4, 0x71, 0x35, + 0xf7, 0xd1, 0x87, 0x27, 0x38, 0xd7, 0x0e, 0x94, 0xea, 0x7e, 0xc9, 0xae, 0x86, 0xd8, 0x70, 0x12, + 0xb9, 0x1d, 0xa8, 0x50, 0xc9, 0x4b, 0x81, 0x96, 0xce, 0xb1, 0xf4, 0xb6, 0xfc, 0x6b, 0xc2, 0x6d, + 0xf5, 0x96, 0xb4, 0x40, 0xbc, 0xf4, 0x0b, 0x74, 0x9d, 0x97, 0xc4, 0x49, 0x30, 0x63, 0xd2, 0x0d, + 0x11, 0xdd, 0x7d, 0x08, 0xf3, 0x0e, 0x45, 0xf2, 0x80, 0xe3, 0x71, 0x61, 0x20, 0x43, 0x09, 0x7f, + 0xbe, 0x85, 0xa9, 0x1c, 0xc8, 0xec, 0x3c, 0x4e, 0x95, 0x6a, 0x3d, 0x57, 0xb3, 0x9d, 0x82, 0x17, + 0x73, 0x2e, 0x35, 0x42, 0x06, 0x91, 0xb5, 0x60, 0x32, 0xda, 0x6d, 0x92, 0x33, 0x10, 0x74, 0x2d, + 0x46, 0xf8, 0x61, 0x42, 0xbd, 0x0a, 0xef, 0xe8, 0x18, 0x64, 0x93, 0x5c, 0xe6, 0x57, 0x72, 0xbf, + 0x7a, 0xa1, 0x1e, 0xe7, 0xfd, 0x2a, 0x46, 0x60, 0xa4, 0x55, 0xaa, 0x08, 0xac, 0xc2, 0x23, 0x1a, + 0xa3, 0x0c, 0x89, 0x7a, 0xe0, 0x01, 0xe2, 0xe7, 0x3f, 0x87, 0xb8, 0x17, 0xaf, 0x9a, 0xff, 0x10, + 0xef, 0xa4, 0xe2, 0xe6, 0x72, 0x75, 0x00, 0xbf, 0x81, 0x79, 0x5c, 0xcd, 0x49, 0xa8, 0xcb, 0x02, + 0xfd, 0xaa, 0xd3, 0xd6, 0xfe, 0xe7, 0x6a, 0x60, 0x8d, 0xd0, 0xc9, 0x72, 0xbb, 0x3e, 0x82, 0xca, + 0x94, 0xac, 0xea, 0x00, 0x6e, 0x1c, 0xf3, 0xff, 0x80, 0xec, 0x95, 0xf6, 0xea, 0x7c, 0xf7, 0xbb, + 0x73, 0xd8, 0x15, 0x3c, 0x2e, 0xee, 0x21, 0x43, 0x9d, 0x3c, 0xd2, 0x17, 0x25, 0xa5, 0xa9, 0x31, + 0xf9, 0xfc, 0x1a, 0xb5, 0xdc, 0xae, 0xc2, 0x61, 0x91, 0xac, 0xc3, 0xf7, 0x86, 0xe5, 0x6a, 0x96, + 0x52, 0x37, 0x22, 0xaf, 0xc9, 0xaa, 0x63, 0x6b, 0x5f, 0xa6, 0x83, 0x7e, 0x05, 0x83, 0x62, 0x84, + 0x9e, 0x1a, 0x1c, 0x94, 0xab, 0x41, 0xcd, 0xf1, 0x5d, 0x57, 0x16, 0x90, 0x7b, 0xb9, 0x1b, 0xb0, + 0x29, 0x4b, 0xb7, 0x22, 0xab, 0xf3, 0x53, 0x26, 0xc8, 0x87, 0xd0, 0xdb, 0x0d, 0x75, 0xea, 0x1a, + 0x18, 0xf1, 0xaf, 0xf0, 0x94, 0x12, 0x1a, 0x02, 0x9d, 0x53, 0xed, 0x7f, 0xd0, 0x55, 0xaf, 0x53, + 0xa7, 0xd4, 0x34, 0xf3, 0x37, 0x3b, 0x7f, 0xcb, 0x30, 0xa3, 0x16, 0xa9, 0x11, 0x4f, 0x94, 0x07, + 0x81, 0xf8, 0xce, 0x23, 0x78, 0x5f, 0x51, 0x11, 0x15, 0x4d, 0x5d, 0xd8, 0x3d, 0x61, 0x81, 0x21, + 0x7c, 0x2f, 0x02, 0x1f, 0xeb, 0x58, 0x30, 0x32, 0x33, 0x53, 0x81, 0x5f, 0xc0, 0x0a, 0x65, 0x04, + 0xc7, 0x8f, 0x82, 0x60, 0x75, 0x6c, 0x6a, 0x8d, 0x9b, 0xff, 0xd2, 0xb7, 0x56, 0x69, 0xf5, 0xad, + 0xfa, 0xf3, 0xdc, 0x43, 0x83, 0xb8, 0x77, 0xa8, 0x80, 0x65, 0xd4, 0xfe, 0xa7, 0x02, 0xf6, 0x13, + 0x13, 0xc8, 0x48, 0x2a, 0x2f, 0xfb, 0x1e, 0xfd, 0xd3, 0xdc, 0x83, 0x23, 0x00, 0x26, 0x85, 0xa8, + 0xac, 0x45, 0x80, 0x14, 0x00, 0x88, 0x38, 0x4e, 0x0f, 0x54, 0x86, 0x65, 0xd5, 0xa7, 0x0b, 0x55, + 0xf8, 0xc6, 0x93, 0x41, 0x34, 0x85, 0x79, 0x7e, 0x72, 0x09, 0x86, 0x0b, 0xb6, 0x93, 0x7a, 0xb0, + 0x5f, 0x9d, 0xdf, 0xdc, 0xc5, 0x0b, 0x93, 0x22, 0x4a, 0x86, 0x9f, 0x34, 0xfa, 0x1a, 0x9c, 0xcb, + 0x69, 0xbe, 0xcb, 0x2f, 0x52, 0xb2, 0x50, 0x96, 0x5f, 0x24, 0x2c, 0xdf, 0xb0, 0x1a, 0x4d, 0xd0, + 0x2c, 0x7d, 0xdf, 0xbb, 0x36, 0x78, 0xca, 0xb7, 0x61, 0xf7, 0xc0, 0xe2, 0x7d, 0xf2, 0xb9, 0xfb, + 0xc2, 0x50, 0xbb, 0xc0, 0x8c, 0x20, 0x84, 0xfd, 0x53, 0x57, 0x80, 0x7f, 0xbe, 0xb3, 0x99, 0xa1, + 0x91, 0x0e, 0x7d, 0xf9, 0x42, 0xdf, 0x27, 0x15, 0x1c, 0x29, 0x9b, 0x5b, 0xc6, 0x98, 0xe5, 0x9f, + 0xdf, 0x47, 0x35, 0x91, 0x3b, 0xf6, 0x63, 0xec, 0x2d, 0x0c, 0x44, 0xf1, 0xdf, 0x6b, 0x34, 0x74, + 0x8c, 0x9f, 0x00, 0x51, 0x2f, 0x58, 0x7b, 0xf9, 0x7b, 0x27, 0x69, 0x50, 0x88, 0xd7, 0x01, 0xcd, + 0x72, 0xb9, 0x02, 0x7b, 0x30, 0x0a, 0x5a, 0x7d, 0x11, 0xe3, 0x99, 0x09, 0xb8, 0xec, 0x1d, 0x14, + 0x2e, 0xd0, 0x4c, 0xe1, 0xf0, 0xc8, 0xf0, 0x37, 0xfa, 0xbe, 0x10, 0x8d, 0xe6, 0x10, 0xd5, 0xab, + 0x9c, 0xcb, 0xd3, 0xa8, 0xbd, 0x4c, 0xe5, 0xf6, 0x07, 0x07, 0x9a, 0xee, 0x48, 0xc0, 0xd1, 0x26, + 0x94, 0x8d, 0x97, 0xd3, 0x36, 0x51, 0xa1, 0xdb, 0x17, 0xe5, 0x9b, 0x4a, 0x8f, 0x87, 0xdf, 0xf1, + 0x85, 0xa2, 0xe1, 0x49, 0x75, 0x14, 0x9a, 0xdb, 0x0f, 0xb5, 0x71, 0x0a, 0x14, 0x0e, 0xf1, 0xcb, + 0xd0, 0x4d, 0xed, 0x90, 0xf9, 0x88, 0x03, 0xdf, 0xa3, 0x77, 0xe3, 0x0d, 0x6a, 0x70, 0x31, 0x78, + 0x1e, 0x7c, 0x15, 0xc2, 0x21, 0xd2, 0x32, 0xd6, 0xef, 0xf8, 0x21, 0xb9, 0x44, 0x8c, 0x90, 0x37, + 0xa3, 0xe2, 0xf5, 0xe8, 0xeb, 0xf5, 0x8d, 0x09, 0x8d, 0xb1, 0xf5, 0x9f, 0x4c, 0x42, 0xd9, 0xc9, + 0xeb, 0x82, 0xa0, 0x20, 0x2a, 0x37, 0x5f, 0x7e, 0xe0, 0x6c, 0x30, 0x7b, 0x66, 0x3d, 0xd2, 0x62, + 0x42, 0x6e, 0x27, 0x74, 0x3b, 0x9b, 0x13, 0x6b, 0x1f, 0x9f, 0xd1, 0xb6, 0xfa, 0xd0, 0x58, 0xdc, + 0xd7, 0xba, 0x4d, 0xef, 0xda, 0x43, 0x9c, 0x47, 0x1a, 0xed, 0xcd, 0x42, 0x95, 0x9a, 0xd9, 0x3a, + 0x2d, 0xdd, 0x17, 0x27, 0xb2, 0xcb, 0xa9, 0x88, 0xa5, 0x4b, 0x26, 0x96, 0x4c, 0xf4, 0x3a, 0x91, + 0xd0, 0x44, 0xdf, 0x22, 0x6f, 0xc6, 0x8c, 0xb6, 0x1f, 0x88, 0x46, 0x7f, 0x1d, 0xfc, 0xc2, 0x0c, + 0x1e, 0x90, 0xf2, 0xda, 0xa4, 0x1d, 0x93, 0x59, 0x71, 0x62, 0xf5, 0xa0, 0x22, 0x20, 0x92, 0x9d, + 0x25, 0xfa, 0xda, 0x5d, 0x08, 0x5e, 0x37, 0x06, 0xcf, 0xbd, 0x6f, 0x88, 0xac, 0xd2, 0x1b, 0xcf, + 0xf6, 0x46, 0x4d, 0x4b, 0x47, 0x30, 0xec, 0xc4, 0x89, 0x8d, 0x98, 0x95, 0xe1, 0x82, 0xd7, 0x20, + 0x33, 0xc4, 0x3f, 0xb6, 0xc5, 0xf1, 0x14, 0x4c, 0x4d, 0xaa, 0xea, 0x0c, 0xcd, 0xc4, 0x22, 0xff, + 0xf0, 0xcc, 0xbd, 0x99, 0x68, 0x08, 0xe9, 0x4d, 0x38, 0xe5, 0x3c, 0x95, 0x58, 0x5b, 0x38, 0xb4, + 0x56, 0x99, 0x48, 0x37, 0x4d, 0x7d, 0xa7, 0xf3, 0x5d, 0xc4, 0x6b, 0x3f, 0x49, 0x2f, 0xd7, 0x2e, + 0xa7, 0x34, 0x25, 0xd0, 0x29, 0xd4, 0xbe, 0x45, 0x69, 0x9a, 0x99, 0x55, 0x73, 0x85, 0xff, 0x87, + 0x6f, 0x4a, 0x68, 0x7e, 0x13, 0x46, 0xce, 0x6f, 0x04, 0xa9, 0xba, 0xd1, 0x2b, 0x80, 0x7c, 0xee, + 0xfa, 0x0e, 0xb5, 0x94, 0xd4, 0x01, 0x20, 0x75, 0xbd, 0x64, 0xe8, 0x24, 0x17, 0xc9, 0x1d, 0xe1, + 0x73, 0xae, 0x4e, 0x3c, 0x95, 0xc9, 0x32, 0xb5, 0xc6, 0xde, 0xda, 0xec, 0x21, 0xd2, 0xca, 0xbd, + 0x3f, 0x18, 0xe7, 0xf9, 0x4a, 0x95, 0xfd, 0x09, 0x87, 0x14, 0xde, 0xa1, 0x57, 0x70, 0x63, 0xcf, + 0x02, 0xb6, 0x1e, 0x7b, 0xeb, 0x81, 0xc4, 0xc3, 0x34, 0x0e, 0xae, 0xea, 0xaa, 0x2b, 0xe8, 0x15, + 0x1f, 0xad, 0x1e, 0xa2, 0xd4, 0xe6, 0x4b, 0x6b, 0x58, 0xc2, 0xd5, 0x1e, 0xa3, 0xd4, 0x1e, 0xc6, + 0x6d, 0x97, 0x34, 0xfe, 0x33, 0xf1, 0x3e, 0x5f, 0xc6, 0x9f, 0x13, 0x0f, 0x7e, 0xa3, 0x80, 0x8b, + 0x40, 0x4a, 0x08, 0x3c, 0x57, 0xda, 0xc9, 0x92, 0x64, 0xa8, 0xac, 0xfd, 0x29, 0xed, 0xf1, 0x5a, + 0x53, 0x3a, 0x2a, 0xe6, 0x75, 0x71, 0xcc, 0xb7, 0xb8, 0x4e, 0x6d, 0x9a, 0x97, 0x2e, 0x0c, 0x53, + 0x73, 0xc5, 0x71, 0x5d, 0xbc, 0x2f, 0xb8, 0x64, 0x7f, 0x93, 0x56, 0xe1, 0x80, 0x3f, 0xa3, 0xdd, + 0x63, 0x52, 0x7c, 0x9f, 0x51, 0xf3, 0xe9, 0x73, 0x87, 0xb6, 0x6c, 0x79, 0xb5, 0xab, 0x8f, 0x0f, + 0x23, 0x5f, 0xd9, 0x10, 0xb3, 0xac, 0xa5, 0x91, 0xb6, 0xea, 0x38, 0xa3, 0x05, 0x5f, 0x98, 0x89, + 0x11, 0xda, 0x73, 0xe2, 0x23, 0xc1, 0xbd, 0xa3, 0x43, 0x1d, 0xd9, 0x78, 0xb7, 0xe2, 0xac, 0x38, + 0x31, 0xb9, 0xbe, 0xf2, 0x31, 0xc2, 0xfb, 0x21, 0xb0, 0xba, 0x48, 0xae, 0xa3, 0x09, 0xbb, 0xe3, + 0x5c, 0x16, 0xcb, 0x48, 0x4f, 0xb2, 0x7c, 0xbf, 0x18, 0x1d, 0x9b, 0x5c, 0x6f, 0xff, 0x82, 0xbd, + 0x4d, 0xea, 0x13, 0x7a, 0x72, 0x73, 0x4c, 0xb6, 0xab, 0xc0, 0x2e, 0xf9, 0x10, 0x8d, 0x55, 0xc1, + 0x43, 0xfb, 0x29, 0x66, 0xdf, 0x04, 0x93, 0xed, 0x6f, 0x38, 0xdc, 0xbb, 0x03, 0x8a, 0xbb, 0xef, + 0xe3, 0x5f, 0xb7, 0x59, 0x10, 0xf0, 0x35, 0xa5, 0x62, 0xc4, 0xea, 0x38, 0x97, 0xcf, 0x5d, 0xc3, + 0x32, 0xac, 0x12, 0xf1, 0x81, 0x97, 0xad, 0x6e, 0xa0, 0xd6, 0xfb, 0x73, 0x3c, 0x89, 0x7c, 0x77, + 0x31, 0x34, 0x89, 0x0f, 0x27, 0xc2, 0x37, 0xe9, 0x66, 0xdb, 0xc1, 0xf7, 0x9c, 0x63, 0x8e, 0xd3, + 0xd3, 0xbc, 0xb3, 0x54, 0xea, 0x63, 0x5b, 0xed, 0xcf, 0xe2, 0xb5, 0xf0, 0x9c, 0x32, 0x96, 0x9e, + 0x3b, 0xe6, 0x40, 0x00, 0x68, 0x7b, 0x0d, 0xcc, 0x8a, 0xed, 0x1d, 0xf8, 0x92, 0xff, 0x49, 0x6f, + 0x72, 0xcc, 0x53, 0x10, 0xd4, 0xb8, 0xc9, 0x75, 0x3e, 0x85, 0x62, 0xac, 0xf6, 0x22, 0xb0, 0xd0, + 0x82, 0x48, 0x6f, 0x53, 0xa4, 0xe4, 0xce, 0x68, 0xb4, 0x84, 0x76, 0x79, 0x0f, 0x81, 0x2b, 0xff, + 0xcb, 0x56, 0xa2, 0x1c, 0x53, 0x44, 0x77, 0xe1, 0x95, 0xb0, 0x7c, 0xb3, 0x45, 0x0e, 0x9f, 0x4c, + 0x6d, 0x0d, 0xbb, 0x1c, 0xa1, 0x84, 0x29, 0x08, 0xc6, 0x98, 0x47, 0x0c, 0x6c, 0x64, 0x82, 0x2f, + 0x6d, 0x28, 0x5b, 0x2f, 0x8d, 0x06, 0x96, 0xf1, 0x1d, 0xc3, 0x3d, 0x63, 0x83, 0xae, 0xce, 0x18, + 0xcf, 0xed, 0xcf, 0x9b, 0xcb, 0xed, 0x6f, 0x06, 0xbb, 0x41, 0x4f, 0xd0, 0x46, 0xdd, 0x53, 0x08, + 0xf0, 0xea, 0x11, 0x78, 0xe6, 0x2b, 0x13, 0xb8, 0x27, 0xc8, 0x26, 0xfa, 0x26, 0x95, 0x5a, 0xc4, + 0x98, 0xd7, 0xe0, 0x47, 0x97, 0x64, 0xc6, 0x54, 0x2b, 0x15, 0x4c, 0x4b, 0x8b, 0x04, 0x61, 0xad, + 0xe1, 0x34, 0x58, 0x4f, 0xd5, 0x66, 0x61, 0x87, 0x47, 0xcb, 0x72, 0xae, 0x12, 0x0c, 0x1c, 0x96, + 0x79, 0xf0, 0xad, 0x00, 0x3f, 0x5e, 0xa2, 0xe0, 0x2f, 0x90, 0xaa, 0x26, 0x41, 0x06, 0xf7, 0xd7, + 0x48, 0x4d, 0xcc, 0x09, 0x62, 0x70, 0x8b, 0xf7, 0x89, 0x5b, 0x54, 0x62, 0x96, 0x9a, 0x6d, 0xc1, + 0x7b, 0x2a, 0x59, 0x9a, 0x89, 0x7e, 0x54, 0x0f, 0xbf, 0xb8, 0x6d, 0x40, 0xd4, 0xb3, 0x43, 0x84, + 0x3f, 0x22, 0xbe, 0x70, 0x57, 0xfc, 0xa1, 0x6a, 0x62, 0x2f, 0xc9, 0x6b, 0x4b, 0x06, 0xb9, 0x07, + 0xcd, 0x89, 0xad, 0xe7, 0xde, 0xf0, 0x92, 0x2a, 0x79, 0x29, 0xde, 0x5b, 0x3f, 0x02, 0x29, 0xe8, + 0x74, 0xbe, 0x83, 0x7b, 0xbd, 0x5e, 0xd7, 0x83, 0xbb, 0x9b, 0x31, 0x4b, 0xc1, 0x0a, 0x5c, 0x9f, + 0x5e, 0x75, 0xd5, 0x3e, 0x61, 0x29, 0xa8, 0x1a, 0x3c, 0x75, 0x70, 0xbb, 0x34, 0xe0, 0xb8, 0x43, + 0xf5, 0xd0, 0xb7, 0xaf, 0x9e, 0xe5, 0xb5, 0xa4, 0x91, 0xde, 0x8d, 0xc1, 0xf3, 0x3d, 0x7c, 0x25, + 0x6f, 0x60, 0x29, 0xd8, 0x47, 0x68, 0xef, 0x02, 0x4c, 0x35, 0x17, 0xf9, 0x48, 0xd1, 0xd0, 0x46, + 0xaf, 0xc6, 0x37, 0x91, 0x42, 0x15, 0x19, 0x23, 0xe6, 0xc9, 0xb8, 0x43, 0xd6, 0x15, 0xdb, 0x46, + 0xf2, 0xd5, 0x24, 0x4b, 0xa3, 0xbf, 0x22, 0xf2, 0x90, 0x5a, 0xba, 0xc5, 0xbc, 0x13, 0x82, 0x27, + 0x66, 0x15, 0xe7, 0x7a, 0x10, 0x55, 0x2b, 0x4b, 0x2d, 0xae, 0xd5, 0x90, 0xfa, 0xb1, 0x27, 0x1d, + 0x26, 0x67, 0x95, 0x96, 0x71, 0x94, 0x2c, 0xc7, 0x75, 0x26, 0x27, 0x85, 0xcb, 0x8c, 0xfd, 0x31, + 0xf1, 0x51, 0x18, 0xa6, 0xda, 0x8b, 0xc2, 0x25, 0xe6, 0x63, 0x54, 0x03, 0xcb, 0xfe, 0x09, 0x0a, + 0xd9, 0xac, 0x6b, 0xca, 0x65, 0x09, 0x60, 0xe9, 0xa3, 0x09, 0x7e, 0xc0, 0x4b, 0xf2, 0x55, 0x20, + 0x01, 0x6b, 0x35, 0x87, 0x68, 0x6b, 0x13, 0xc9, 0x52, 0xfb, 0xa6, 0x03, 0xfb, 0x24, 0x55, 0xae, + 0x68, 0x6c, 0x91, 0x16, 0x7b, 0x0e, 0x61, 0x10, 0xd8, 0xfb, 0x01, 0x40, 0xae, 0x02, 0xef, 0xb8, + 0x06, 0xd6, 0x23, 0x73, 0x29, 0x44, 0x37, 0xbb, 0x04, 0xcc, 0xa8, 0xaa, 0xfc, 0x10, 0x10, 0x1c, + 0xa3, 0xa9, 0x4d, 0xdd, 0xf8, 0xdd, 0xb0, 0x88, 0xb5, 0x46, 0x59, 0xd2, 0xa4, 0x80, 0xed, 0x11, + 0x76, 0x9c, 0xd4, 0xb2, 0xfc, 0xb3, 0xd2, 0xb2, 0x93, 0xce, 0x2a, 0x99, 0xe1, 0x1f, 0x17, 0x39, + 0xb1, 0x50, 0x45, 0xd5, 0x3a, 0xf9, 0x24, 0xbd, 0xc9, 0x1c, 0x7b, 0xd9, 0xfe, 0xa8, 0x98, 0xaf, + 0x16, 0xb7, 0x68, 0x80, 0x3a, 0xf6, 0xe4, 0xc4, 0xde, 0xea, 0x41, 0x16, 0xe5, 0xf4, 0x0a, 0x63, + 0xd7, 0x57, 0x37, 0x23, 0x31, 0xe1, 0x90, 0xcd, 0x5f, 0x0c, 0x90, 0xb5, 0x6a, 0xb2, 0x45, 0xd3, + 0x98, 0x45, 0x4f, 0xde, 0x1b, 0xc7, 0xe0, 0x1c, 0xc5, 0xb5, 0xea, 0x71, 0x6b, 0x35, 0x8e, 0x28, + 0xbc, 0x65, 0x34, 0x1b, 0xbf, 0x66, 0xc2, 0xd7, 0xca, 0xe4, 0xa6, 0xca, 0x68, 0x72, 0x4a, 0xd2, + 0xac, 0xc4, 0x3b, 0x8d, 0x8b, 0x4f, 0x06, 0xe9, 0x26, 0xed, 0xd9, 0xfa, 0x2b, 0x29, 0x60, 0x9c, + 0x93, 0x9b, 0xb8, 0x5d, 0x45, 0x34, 0x0d, 0xf6, 0xe3, 0x49, 0x0b, 0x3f, 0x45, 0xef, 0x4e, 0x01, + 0xa9, 0xea, 0x44, 0x69, 0x1e, 0xce, 0xcf, 0xb2, 0x89, 0x11, 0x6f, 0x30, 0x49, 0xaa, 0x27, 0x25, + 0x95, 0x87, 0xe0, 0x6e, 0x9e, 0x3f, 0xf9, 0x3c, 0x29, 0x68, 0x23, 0xed, 0x95, 0xcb, 0x70, 0x6b, + 0x20, 0x51, 0xdc, 0x8a, 0x9b, 0xa6, 0xa2, 0xb1, 0x8d, 0x34, 0x61, 0xac, 0x60, 0x94, 0xc5, 0x71, + 0x68, 0x6b, 0xcd, 0xaa, 0xe4, 0x6e, 0xd2, 0x1a, 0x7b, 0x1b, 0x22, 0x1a, 0x2e, 0x6d, 0x10, 0xef, + 0xaa, 0xa4, 0xf1, 0x5d, 0x5c, 0x5a, 0x53, 0x8a, 0xd0, 0x10, 0x93, 0x5c, 0xcf, 0x5f, 0x92, 0x54, + 0x94, 0xaa, 0xb8, 0x7a, 0x4a, 0x95, 0x64, 0x78, 0x9f, 0x34, 0x92, 0x6b, 0xbd, 0x1f, 0xd0, 0x12, + 0xee, 0xc2, 0x5c, 0x1d, 0x51, 0x22, 0x5e, 0xa0, 0xba, 0x55, 0x2c, 0x68, 0x4b, 0x17, 0x0c, 0x1d, + 0x31, 0x90, 0xa8, 0x25, 0x37, 0x70, 0xae, 0x32, 0xdc, 0x22, 0xc9, 0x49, 0xc4, 0x5b, 0x36, 0x57, + 0x14, 0x02, 0xc5, 0x75, 0x1e, 0xad, 0x30, 0xc8, 0x3a, 0xb4, 0xd5, 0x83, 0xe1, 0xc0, 0x13, 0x87, + 0xba, 0x7a, 0x90, 0xc6, 0x94, 0x2f, 0x48, 0x1a, 0x4f, 0x72, 0xce, 0x5c, 0xbe, 0x48, 0xcc, 0x51, + 0x8b, 0x2f, 0x68, 0xc4, 0x64, 0x92, 0x27, 0xb3, 0x97, 0xc4, 0x1c, 0xd5, 0xc4, 0x9e, 0x45, 0xdb, + 0x62, 0x16, 0xe5, 0xc4, 0x8d, 0x1d, 0xe4, 0x0d, 0x20, 0x61, 0xe1, 0x39, 0xba, 0xc9, 0x2f, 0xc4, + 0x93, 0x1c, 0x35, 0x79, 0x41, 0x23, 0xad, 0x0e, 0xc3, 0x99, 0xb6, 0x56, 0x3e, 0x40, 0x5a, 0x13, + 0xda, 0xe9, 0x6d, 0x9b, 0x2e, 0x49, 0x55, 0x2f, 0x6d, 0x95, 0x89, 0xc2, 0x47, 0x85, 0x26, 0xc1, + 0x1d, 0xb3, 0x92, 0xff, 0x72, 0x35, 0xaa, 0xa4, 0xe1, 0x86, 0x6f, 0x1c, 0xbe, 0x81, 0x60, 0x54, + 0xfb, 0xc2, 0xe1, 0x37, 0x1d, 0x38, 0x99, 0x0d, 0x74, 0xee, 0x7a, 0x86, 0x72, 0x18, 0xcf, 0xa6, + 0x88, 0x5a, 0x38, 0x61, 0x52, 0x2c, 0xc2, 0x83, 0xe9, 0xd4, 0xa2, 0xd4, 0x7f, 0x41, 0x37, 0x63, + 0xf1, 0xae, 0x08, 0x58, 0xb0, 0x7b, 0x7a, 0x3f, 0x9e, 0x6e, 0xab, 0x68, 0xde, 0xc5, 0x1a, 0x12, + 0xe9, 0x8d, 0xa0, 0x16, 0xf2, 0x20, 0x36, 0x8d, 0xb8, 0x96, 0xa4, 0x11, 0x96, 0x47, 0x57, 0xe1, + 0xfe, 0x7e, 0xcd, 0xeb, 0x74, 0x3f, 0xe5, 0x60, 0x0c, 0x94, 0xc4, 0x19, 0xb4, 0x8f, 0x51, 0xae, + 0xbe, 0x83, 0x57, 0x98, 0xb9, 0x1a, 0xdc, 0xb9, 0x90, 0x34, 0x7f, 0xa7, 0x6f, 0xeb, 0xef, 0x5e, + 0x89, 0x28, 0x14, 0xf2, 0x2f, 0xe1, 0x04, 0xc4, 0x17, 0x55, 0x62, 0x94, 0x68, 0x57, 0xe3, 0x9b, + 0x1c, 0x7e, 0xd1, 0xae, 0x99, 0x38, 0x24, 0xbc, 0x88, 0x86, 0x03, 0xcf, 0x7f, 0x0e, 0x4f, 0x00, + 0xdc, 0x56, 0x71, 0x12, 0x77, 0xfc, 0x1c, 0x77, 0xe0, 0xb2, 0xe7, 0x73, 0x15, 0x70, 0xf3, 0x9d, + 0x40, 0xe0, 0x30, 0xbe, 0xbf, 0xcc, 0x19, 0x2f, 0x27, 0xb7, 0x0b, 0xd7, 0x19, 0x7b, 0xa1, 0x32, + 0x9e, 0x14, 0x4d, 0x07, 0x10, 0x5f, 0xc9, 0xc5, 0x01, 0x8e, 0x63, 0xb0, 0x99, 0x7c, 0x96, 0x3a, + 0xcb, 0xe9, 0x47, 0x72, 0xdf, 0xc7, 0x30, 0xef, 0x91, 0xea, 0x2a, 0x3f, 0x0b, 0xab, 0x41, 0xfa, + 0xa1, 0x9b, 0x58, 0x25, 0x73, 0xbb, 0x4e, 0x51, 0x8a, 0x68, 0x07, 0x10, 0x6e, 0x90, 0x6e, 0x76, + 0x95, 0x5a, 0xc8, 0xd5, 0x04, 0x1a, 0xd3, 0x14, 0xb9, 0x0e, 0x43, 0x83, 0x7c, 0x48, 0x21, 0x62, + 0x2c, 0x77, 0xbc, 0x95, 0x3b, 0x70, 0xd2, 0xf3, 0xe9, 0x68, 0x22, 0x50, 0x6d, 0xb4, 0x80, 0xcd, + 0x9f, 0x3c, 0xa8, 0x28, 0x50, 0x8f, 0xdd, 0x16, 0x8c, 0x87, 0x62, 0xbb, 0x2b, 0x0b, 0xee, 0x75, + 0x6e, 0xe6, 0x0e, 0xb4, 0x7a, 0x3e, 0x53, 0x55, 0xdf, 0xc6, 0xce, 0x87, 0x94, 0xce, 0xad, 0x41, + 0xd2, 0x15, 0xde, 0xa0, 0xc8, 0x1e, 0x59, 0xb9, 0x07, 0x2a, 0x1e, 0xaa, 0xf2, 0xa3, 0x83, 0x7e, + 0x65, 0xe5, 0xef, 0xa1, 0x10, 0xdb, 0x0d, 0x82, 0x02, 0x61, 0xee, 0x91, 0x5c, 0x6c, 0xc2, 0xf7, + 0x55, 0x5f, 0xc9, 0xc5, 0x7a, 0x5f, 0xa4, 0xd2, 0x3b, 0x9d, 0xd0, 0x1f, 0x98, 0x50, 0x16, 0x88, + 0xc2, 0x52, 0xba, 0x20, 0xe4, 0x36, 0xb7, 0x6b, 0x3b, 0x6e, 0xfe, 0xf4, 0x1d, 0xc7, 0xb6, 0x4f, + 0x70, 0x86, 0x96, 0x7c, 0xb3, 0x9c, 0x44, 0x77, 0x0a, 0x15, 0xab, 0x72, 0xf0, 0xd1, 0x5f, 0xab, + 0x98, 0x59, 0x4d, 0x6c, 0xd3, 0x21, 0x94, 0x50, 0x8b, 0xa5, 0x8c, 0xb5, 0xe4, 0x58, 0x4c, 0x96, + 0x1c, 0x00, 0x5b, 0x42, 0x93, 0x9c, 0x79, 0xd8, 0x23, 0x52, 0xe9, 0xa1, 0xac, 0x3f, 0x13, 0xba, + 0x53, 0x62, 0x8b, 0x4f, 0xa5, 0xc2, 0xe3, 0xfa, 0x07, 0x15, 0x1e, 0x3c, 0x2b, 0x1f, 0x4f, 0xc7, + 0x55, 0x53, 0x09, 0xa0, 0x02, 0x12, 0x74, 0xaa, 0x0e, 0x3d, 0x48, 0x5e, 0x04, 0x9a, 0x98, 0x39, + 0x38, 0x2a, 0xbe, 0xa4, 0x73, 0x2e, 0x27, 0x37, 0x37, 0x37, 0x27, 0xd7, 0x94, 0x3b, 0xda, 0xd3, + 0x9c, 0x08, 0x0b, 0x7a, 0x1a, 0xea, 0xac, 0x00, 0xfb, 0xf7, 0xfe, 0x11, 0x3a, 0x27, 0x10, 0x0b, + 0xb4, 0xca, 0x25, 0x22, 0xd7, 0x15, 0xc7, 0xe2, 0x83, 0x48, 0x6f, 0x19, 0x63, 0x32, 0x99, 0xe5, + 0x8d, 0x4c, 0xf0, 0x7e, 0x8f, 0x2b, 0xe0, 0x98, 0x27, 0x56, 0x69, 0x92, 0xef, 0x70, 0xe9, 0xd7, + 0xcd, 0x80, 0xd6, 0x22, 0x9f, 0x19, 0x87, 0xfb, 0x33, 0x78, 0xef, 0xe8, 0x84, 0x06, 0x92, 0xfa, + 0x3e, 0x80, 0x88, 0x32, 0xe5, 0xcb, 0xeb, 0xe9, 0xe5, 0x32, 0x75, 0xd0, 0x2d, 0x02, 0xf6, 0x61, + 0x6c, 0x78, 0xe5, 0x60, 0xc6, 0x88, 0xbb, 0x4b, 0x65, 0xcc, 0xb0, 0x3b, 0xfc, 0xee, 0x9d, 0xa6, + 0x18, 0x3c, 0x79, 0x82, 0x7c, 0x3d, 0x43, 0x8d, 0x1b, 0x62, 0xf8, 0x72, 0xf3, 0x70, 0x0c, 0x31, + 0x84, 0x52, 0x38, 0x9e, 0xaa, 0x40, 0x53, 0xf6, 0xd6, 0x17, 0x13, 0xd0, 0x6a, 0xaf, 0x94, 0x16, + 0xff, 0xe5, 0x2d, 0x5c, 0xbd, 0xc7, 0x58, 0xfe, 0x19, 0x31, 0xd3, 0x2f, 0x5a, 0x6e, 0x89, 0x3b, + 0x07, 0xc0, 0x94, 0xb1, 0x8d, 0xe2, 0xd3, 0x77, 0x27, 0x9e, 0x77, 0x56, 0x45, 0x33, 0x3c, 0xe7, + 0xba, 0xb2, 0x73, 0x9c, 0x3e, 0xe0, 0x3a, 0xf7, 0x09, 0xee, 0x2a, 0xbf, 0x94, 0x44, 0x0a, 0xf0, + 0x7d, 0x47, 0x90, 0x05, 0xb0, 0xbe, 0x94, 0x18, 0x73, 0x3e, 0x1a, 0xc2, 0xbc, 0x2e, 0x39, 0xbe, + 0x01, 0xf4, 0xd9, 0xd8, 0x01, 0x14, 0x41, 0xb0, 0x7e, 0x5e, 0xcc, 0xbb, 0xb1, 0xb4, 0xea, 0x2a, + 0x69, 0x9b, 0x0e, 0x8e, 0xcc, 0x20, 0x57, 0x45, 0xaf, 0x14, 0xbc, 0xb2, 0xab, 0xf9, 0xa5, 0x37, + 0x6c, 0x7f, 0x57, 0x34, 0xbc, 0xe3, 0xf3, 0x40, 0x20, 0x61, 0x10, 0xdc, 0x96, 0x57, 0xef, 0x06, + 0xf6, 0x9b, 0x4c, 0x39, 0x78, 0x85, 0xcb, 0x92, 0x6b, 0xce, 0x1f, 0xc1, 0xfc, 0x2c, 0xba, 0xba, + 0xf3, 0x90, 0x10, 0xc7, 0x64, 0xb2, 0x1c, 0x89, 0x25, 0x33, 0x7e, 0x81, 0x9a, 0x84, 0x8f, 0xbe, + 0x09, 0x01, 0xde, 0x8f, 0x87, 0x34, 0x92, 0x72, 0xb5, 0xb4, 0x8c, 0x19, 0xd1, 0xf5, 0x73, 0x65, + 0x5f, 0x9c, 0x0c, 0x08, 0x27, 0x62, 0x46, 0x04, 0x1b, 0xae, 0x7b, 0x47, 0xe5, 0x20, 0x1e, 0x46, + 0x8d, 0xfe, 0x1c, 0x31, 0xa9, 0x08, 0x1e, 0xde, 0x6f, 0x17, 0xf3, 0xb4, 0x42, 0x7d, 0x68, 0xff, + 0x2d, 0xf4, 0x5e, 0xfb, 0x12, 0x96, 0x37, 0x89, 0x69, 0x7e, 0xf1, 0xc5, 0x5b, 0xc7, 0xa8, 0xf2, + 0x06, 0x0f, 0xcb, 0x87, 0xc4, 0x1f, 0x0d, 0xd8, 0x17, 0x90, 0x6b, 0xac, 0x77, 0xf2, 0x8b, 0x77, + 0xab, 0x87, 0x50, 0x81, 0x51, 0xeb, 0x67, 0x43, 0x9c, 0x97, 0xe0, 0x1d, 0x8f, 0x4a, 0x0b, 0xa1, + 0x14, 0x6a, 0x35, 0xef, 0x0f, 0x2f, 0xe8, 0x62, 0x1b, 0x48, 0x41, 0x97, 0x4f, 0xcd, 0xc2, 0x57, + 0x38, 0x5b, 0x00, 0x09, 0x2d, 0xd8, 0xc6, 0x0f, 0xe8, 0xf8, 0x7e, 0x92, 0xad, 0x42, 0x35, 0xd2, + 0x06, 0x43, 0xbf, 0x7a, 0x15, 0x43, 0x6d, 0x1b, 0x84, 0x9f, 0x2b, 0x42, 0xdb, 0x3b, 0x28, 0x61, + 0xc7, 0xf6, 0xa1, 0x32, 0xad, 0xf1, 0x8b, 0x4f, 0xdf, 0x4a, 0x86, 0x28, 0x3b, 0xf6, 0x32, 0xa4, + 0xa0, 0x55, 0x6a, 0xfb, 0x84, 0xf0, 0x35, 0x03, 0x93, 0x9f, 0xbe, 0x0b, 0x55, 0xad, 0xb1, 0xed, + 0xf6, 0xc9, 0x82, 0x37, 0x26, 0x9b, 0x6f, 0xd7, 0x9f, 0x5b, 0x45, 0x5a, 0x7c, 0x51, 0xe8, 0xa1, + 0xea, 0x1b, 0xc4, 0x48, 0xfd, 0xb9, 0x51, 0x11, 0x7f, 0xb4, 0x58, 0x00, 0x69, 0x57, 0x4c, 0xdd, + 0xc6, 0xc4, 0x3a, 0xe3, 0x3c, 0x40, 0x0e, 0x19, 0x49, 0x1b, 0xb7, 0xdb, 0xad, 0xeb, 0x54, 0x7b, + 0xc4, 0x25, 0xa4, 0xaa, 0x83, 0xbe, 0x91, 0xc0, 0xb9, 0xea, 0x61, 0x96, 0xe1, 0x10, 0x8b, 0x40, + 0x00, 0xd2, 0x36, 0xd9, 0x10, 0x0d, 0xe1, 0x08, 0x88, 0xaa, 0x55, 0xcc, 0xc3, 0x1b, 0x6f, 0x52, + 0x85, 0xd6, 0x75, 0xce, 0xa1, 0x4a, 0x9e, 0xca, 0xaf, 0x55, 0x48, 0x22, 0x05, 0x37, 0xc4, 0xcc, + 0x01, 0xb6, 0x49, 0xb4, 0xdc, 0x9d, 0x78, 0x19, 0xb4, 0x22, 0xf9, 0x94, 0x58, 0x10, 0x4d, 0xda, + 0xa7, 0x1b, 0x6f, 0x70, 0xaf, 0x7b, 0x92, 0x0d, 0x5a, 0x90, 0x86, 0x82, 0x38, 0xee, 0x8d, 0xbf, + 0x40, 0x24, 0x33, 0x3d, 0x0f, 0xe2, 0x18, 0xb7, 0x5a, 0x56, 0x37, 0x39, 0xab, 0xe6, 0x31, 0xbc, + 0x6a, 0x0f, 0xeb, 0x98, 0xb9, 0x87, 0x05, 0x6a, 0x00, 0xb5, 0xc3, 0x04, 0x13, 0x58, 0xcb, 0xbf, + 0x57, 0x2b, 0x2f, 0x66, 0x67, 0x1b, 0xe6, 0x2e, 0x63, 0x1d, 0xab, 0x6a, 0xfe, 0xc7, 0xb1, 0x58, + 0xaa, 0xea, 0xc0, 0x3d, 0xca, 0x6e, 0x32, 0x18, 0xe0, 0x75, 0xe6, 0xe1, 0x98, 0x50, 0x7e, 0x44, + 0xb9, 0xb8, 0x5a, 0x86, 0x07, 0x36, 0x5f, 0xd3, 0x77, 0x97, 0x34, 0xe2, 0x18, 0x58, 0x52, 0xc2, + 0xfa, 0xc6, 0x04, 0x57, 0x11, 0xdc, 0x0d, 0x40, 0x28, 0xcb, 0x5f, 0x98, 0x41, 0xe5, 0xce, 0xf6, + 0xe9, 0xbd, 0x63, 0xbe, 0x44, 0xcc, 0x7e, 0xc0, 0x71, 0x6b, 0x49, 0x6b, 0x38, 0x38, 0x2a, 0xa0, + 0xf9, 0xda, 0x64, 0x1e, 0x90, 0xd0, 0x08, 0x12, 0x22, 0x42, 0xae, 0x66, 0x0f, 0x7d, 0x3b, 0xaf, + 0x8b, 0x18, 0x6f, 0x80, 0x2f, 0x2d, 0xe8, 0x40, 0x5f, 0x6a, 0xbc, 0x0a, 0x5e, 0x53, 0x9c, 0x08, + 0xa1, 0x9f, 0xf8, 0x82, 0x9a, 0xf0, 0xa7, 0xd9, 0x8b, 0xc4, 0xd8, 0x26, 0x6e, 0xd3, 0x90, 0xaa, + 0x13, 0x13, 0xaf, 0xe3, 0x05, 0x9e, 0xbc, 0x96, 0xe4, 0x7a, 0xd2, 0x0e, 0xac, 0x8d, 0x6d, 0x85, + 0xe9, 0x43, 0x6c, 0x99, 0x0c, 0xb9, 0x62, 0x5e, 0x57, 0xec, 0x20, 0x04, 0x70, 0xea, 0x93, 0x0e, + 0xf0, 0x69, 0x37, 0x96, 0x42, 0x8c, 0x66, 0xec, 0x8a, 0xbd, 0xcd, 0xbd, 0x61, 0xf0, 0x41, 0xe8, + 0x94, 0xec, 0x21, 0x97, 0xa7, 0xe7, 0x69, 0x20, 0x00, 0x04, 0x10, 0x88, 0x0e, 0xae, 0x41, 0xae, + 0x07, 0xec, 0x52, 0xff, 0x2d, 0x6a, 0xa3, 0x8f, 0x5f, 0x05, 0x9a, 0x24, 0xf2, 0x2d, 0x09, 0x17, + 0x31, 0xca, 0x6b, 0x08, 0xe7, 0x4f, 0x4f, 0x2e, 0x38, 0x81, 0x41, 0xc5, 0x44, 0x92, 0xaa, 0x22, + 0x40, 0xc1, 0x0f, 0x35, 0x9d, 0xe7, 0xe9, 0x6b, 0xdb, 0xfe, 0x55, 0x10, 0x6e, 0x24, 0x9f, 0xaf, + 0x9c, 0x4c, 0xe3, 0xb1, 0xab, 0xa1, 0x78, 0x4c, 0xac, 0x6a, 0xeb, 0xfd, 0x60, 0x75, 0xe7, 0xc7, + 0xd4, 0x35, 0x8b, 0x86, 0x0b, 0xc9, 0x10, 0xcd, 0xd2, 0xb1, 0x61, 0x69, 0xbc, 0xb5, 0x7e, 0xa4, + 0x73, 0x90, 0x7b, 0x03, 0x28, 0x53, 0xb7, 0x38, 0x5e, 0x04, 0xdb, 0x64, 0xbc, 0x90, 0x6c, 0x1c, + 0x86, 0x10, 0xab, 0x5a, 0x92, 0xfb, 0x15, 0xe2, 0x20, 0x8e, 0x3d, 0x89, 0x71, 0x6c, 0x29, 0x1e, + 0x3d, 0x74, 0x27, 0xdc, 0x06, 0xd3, 0x17, 0x8b, 0xaf, 0x01, 0x92, 0x55, 0xca, 0x29, 0xa6, 0x7f, + 0x39, 0xfa, 0x55, 0x20, 0xa1, 0xb2, 0x4c, 0x52, 0xa5, 0x88, 0xab, 0xb4, 0x62, 0xde, 0x55, 0xf2, + 0x78, 0xbd, 0x36, 0x00, 0xae, 0x1f, 0x38, 0xe8, 0xa8, 0x57, 0xe1, 0xb9, 0xaf, 0xa6, 0x5e, 0xac, + 0xba, 0x90, 0x70, 0x96, 0xec, 0xa8, 0x07, 0xe9, 0x3f, 0x1d, 0xdb, 0x0d, 0x10, 0x1a, 0x7c, 0xdd, + 0x33, 0x96, 0x74, 0x3f, 0x64, 0x6c, 0xf9, 0x16, 0xce, 0x3c, 0x3f, 0xa0, 0x4b, 0x27, 0x18, 0x58, + 0x71, 0xbb, 0xaa, 0xf0, 0xb5, 0x69, 0xa3, 0xbf, 0xfa, 0x76, 0x80, 0xbe, 0x8b, 0xa2, 0x85, 0xe5, + 0xda, 0x3c, 0x21, 0x64, 0xf2, 0x5f, 0xbf, 0x8e, 0x46, 0x1c, 0x4f, 0x92, 0xcf, 0x62, 0x54, 0xc7, + 0x5f, 0x25, 0x19, 0x67, 0xd0, 0x38, 0xc3, 0x8f, 0x0a, 0xd7, 0x44, 0x75, 0x86, 0x3c, 0x75, 0x46, + 0x43, 0xd6, 0x9d, 0x51, 0x67, 0x89, 0x86, 0x26, 0x92, 0x24, 0x9c, 0x48, 0x0c, 0x69, 0x45, 0x59, + 0x85, 0x2c, 0x52, 0x77, 0xa2, 0xf2, 0xa6, 0x8c, 0x67, 0x95, 0xbb, 0x4c, 0x42, 0xd7, 0x5c, 0x89, + 0xbf, 0x80, 0xdb, 0x27, 0x16, 0x39, 0x31, 0x52, 0x79, 0x95, 0x32, 0x33, 0xde, 0x64, 0xa1, 0x1e, + 0x69, 0x9a, 0xdc, 0x74, 0x90, 0x4a, 0x9b, 0xb5, 0x7a, 0x67, 0xfc, 0x1a, 0x0b, 0x6f, 0xe7, 0x0e, + 0xe0, 0xfb, 0x45, 0x2a, 0xee, 0x00, 0x7f, 0x8b, 0xf5, 0x96, 0x45, 0xda, 0x96, 0xa4, 0xe2, 0x7d, + 0xc5, 0xc5, 0x91, 0xc1, 0xfd, 0x61, 0xfe, 0x09, 0x00, 0x8c, 0x64, 0xc2, 0x36, 0xe7, 0x8b, 0x99, + 0x73, 0xb9, 0x03, 0x7e, 0x8f, 0xac, 0x11, 0x3a, 0xfc, 0x00, 0xa9, 0xb2, 0xbd, 0x98, 0x81, 0x90, + 0x51, 0xc3, 0x90, 0xcb, 0xf0, 0x2a, 0xec, 0xc9, 0xc3, 0x94, 0x1a, 0xe7, 0xf2, 0x94, 0xa5, 0xb8, + 0x1b, 0x33, 0xde, 0xf6, 0x30, 0xbe, 0xd3, 0x55, 0xf1, 0x25, 0xad, 0x15, 0x4e, 0xcc, 0x85, 0x48, + 0xc7, 0x76, 0x1f, 0x54, 0xf9, 0x26, 0xdb, 0xc2, 0xa0, 0xbf, 0x4f, 0x63, 0xdb, 0x9a, 0x4a, 0xdf, + 0xfd, 0x9a, 0x14, 0x7c, 0xff, 0xfd, 0x5a, 0x48, 0xc2, 0xab, 0xbb, 0x70, 0xe7, 0x54, 0xe4, 0x35, + 0xae, 0x3e, 0xc7, 0x0f, 0x2c, 0xb2, 0xe7, 0x4a, 0xe8, 0xf0, 0x41, 0x27, 0xb9, 0xf0, 0x3e, 0xb3, + 0xc9, 0x22, 0xd7, 0x5f, 0x09, 0x6e, 0x3b, 0x73, 0xae, 0xa5, 0x78, 0x4e, 0x75, 0x14, 0xeb, 0x7d, + 0x36, 0xbd, 0x5b, 0xfa, 0x98, 0xbe, 0x4f, 0x1e, 0x89, 0x6f, 0x04, 0x65, 0xaa, 0xac, 0x8d, 0x99, + 0x61, 0xe1, 0x0c, 0x01, 0xda, 0x55, 0xa4, 0x5b, 0xf8, 0x54, 0x73, 0x1c, 0x8f, 0x14, 0x67, 0x0d, + 0xe4, 0x98, 0xca, 0x5e, 0x90, 0xe3, 0x0f, 0x2b, 0xba, 0xb7, 0x39, 0x92, 0x04, 0xe7, 0x36, 0x6b, + 0x88, 0xf5, 0x3a, 0x97, 0x6b, 0x31, 0x06, 0xe3, 0xa7, 0xd9, 0xe6, 0xe2, 0x81, 0xa8, 0x4d, 0xde, + 0x0e, 0x46, 0xf9, 0xac, 0x4a, 0xb9, 0xb1, 0x17, 0x81, 0x6d, 0xac, 0xb8, 0x33, 0x5a, 0xfa, 0x38, + 0x12, 0x4f, 0x03, 0x17, 0x22, 0xa3, 0x1b, 0x55, 0xc1, 0xdc, 0x10, 0x06, 0x11, 0x6e, 0x4e, 0xe0, + 0x0e, 0xb8, 0x2d, 0xa6, 0x32, 0x8d, 0xfc, 0x97, 0x43, 0x14, 0x3d, 0xfe, 0x1d, 0x00, 0xce, 0xb5, + 0x93, 0xbe, 0xfa, 0xeb, 0xd2, 0x28, 0x47, 0x3e, 0x0a, 0x8d, 0xb6, 0x57, 0xf1, 0x8e, 0x0c, 0x20, + 0xf8, 0x71, 0x10, 0xc1, 0xce, 0x30, 0x89, 0xbe, 0xb9, 0x0c, 0x46, 0xc2, 0x24, 0x3f, 0xd6, 0x1e, + 0x74, 0xad, 0x14, 0x2b, 0xa7, 0x60, 0x9d, 0x23, 0x97, 0x8f, 0xc4, 0x3a, 0x17, 0x7d, 0xbc, 0xc1, + 0xdf, 0x52, 0x96, 0x28, 0x3b, 0x07, 0x82, 0x17, 0x79, 0x44, 0x43, 0xbd, 0xbe, 0x8f, 0x54, 0xea, + 0x48, 0x7a, 0xdc, 0x3e, 0xb6, 0x36, 0xbc, 0x36, 0x3d, 0x9e, 0x6c, 0x9f, 0x6b, 0x6d, 0x4c, 0x9f, + 0x67, 0x00, 0xab, 0x02, 0x78, 0x1d, 0x97, 0x15, 0x40, 0x7c, 0xfd, 0xbf, 0x4b, 0xda, 0x1a, 0x96, + 0x2f, 0x1b, 0x82, 0x5d, 0xd3, 0xd5, 0x5e, 0x66, 0x81, 0x98, 0xae, 0x4e, 0x09, 0xf0, 0x32, 0x25, + 0xa1, 0x3d, 0x5c, 0xa1, 0x6b, 0xbb, 0xe6, 0x60, 0x1d, 0x3d, 0xa7, 0xdb, 0x8a, 0xa7, 0x59, 0x96, + 0x7c, 0xf9, 0x6f, 0xe1, 0xc1, 0x37, 0xd6, 0xbb, 0x48, 0x56, 0x98, 0xb5, 0xf1, 0x65, 0x6c, 0x65, + 0x0c, 0xa0, 0x4a, 0x56, 0xf2, 0x32, 0x5e, 0x9c, 0x94, 0x5c, 0xbb, 0x86, 0x82, 0xd3, 0xd8, 0xd2, + 0xa6, 0x4c, 0x03, 0x5f, 0xcc, 0x16, 0xbe, 0x40, 0xe6, 0xe4, 0x9b, 0xca, 0x74, 0xf2, 0x9e, 0x83, + 0xa1, 0xd3, 0xdf, 0x39, 0xc0, 0x16, 0x8a, 0xd7, 0xf6, 0x0f, 0xbc, 0xb3, 0x92, 0x2a, 0x53, 0xf8, + 0xb2, 0x44, 0x08, 0x96, 0x94, 0xdb, 0xd8, 0x9d, 0x69, 0x2c, 0xe5, 0x9d, 0x8a, 0xf2, 0x4e, 0x36, + 0xc9, 0x3f, 0xfd, 0x67, 0x70, 0x06, 0x5d, 0x81, 0xca, 0x38, 0xf9, 0xe5, 0xfe, 0x20, 0xf5, 0x5a, + 0x31, 0x3d, 0x6e, 0x5c, 0xba, 0x8e, 0xab, 0xb9, 0x4e, 0x4f, 0x88, 0xba, 0x48, 0x93, 0xd0, 0xc1, + 0xe1, 0x1b, 0xed, 0x4d, 0xb8, 0xf8, 0x86, 0xd3, 0x92, 0xe1, 0x1a, 0xbd, 0x70, 0x2e, 0x74, 0x4c, + 0x08, 0x5a, 0x59, 0x20, 0x06, 0xb2, 0x6c, 0xee, 0x00, 0x64, 0x41, 0x17, 0xf0, 0x30, 0xb3, 0xad, + 0xd1, 0x70, 0x0d, 0xeb, 0xad, 0x8d, 0x86, 0xcf, 0xd0, 0x06, 0x37, 0x59, 0x31, 0x83, 0x36, 0x9c, + 0x86, 0x9f, 0x9b, 0x01, 0xbe, 0x25, 0x00, 0x9a, 0x35, 0x5b, 0xfe, 0xea, 0x40, 0xe8, 0x3e, 0x92, + 0x6b, 0x3f, 0x0e, 0x94, 0xae, 0x25, 0x43, 0xec, 0x00, 0x77, 0xc0, 0xf8, 0x19, 0xc4, 0x01, 0x5d, + 0x26, 0xf9, 0xfd, 0x30, 0x65, 0x87, 0xf3, 0x40, 0xde, 0x67, 0xec, 0x45, 0xeb, 0xd2, 0x3c, 0x99, + 0x7b, 0xc3, 0x13, 0x65, 0xf4, 0x03, 0x71, 0x7d, 0x1e, 0x56, 0x5c, 0xad, 0x73, 0xa8, 0x48, 0xbf, + 0x2f, 0x31, 0x74, 0x88, 0xd6, 0x9f, 0xec, 0x55, 0x5e, 0x0a, 0x00, 0xcf, 0xd3, 0x56, 0x19, 0x9b, + 0x6b, 0x5b, 0x87, 0x3a, 0xb3, 0xec, 0x0b, 0x3a, 0x73, 0xe8, 0x03, 0x1d, 0xfe, 0xcc, 0xa2, 0x21, + 0x69, 0xa4, 0xe7, 0xa5, 0xb1, 0x90, 0xe0, 0xe5, 0x63, 0x9a, 0x64, 0xb8, 0x66, 0xa5, 0x19, 0x7f, + 0x70, 0x42, 0xdc, 0x81, 0x66, 0x53, 0x4e, 0xd9, 0x2c, 0x39, 0x27, 0x44, 0x1c, 0xff, 0x08, 0x5d, + 0xc4, 0x2e, 0xd9, 0xf3, 0xb5, 0xc2, 0xff, 0x6b, 0xf8, 0x96, 0xc9, 0x8e, 0xe1, 0x57, 0x79, 0x1f, + 0x52, 0x54, 0x6e, 0x32, 0x68, 0x91, 0xc5, 0x86, 0x5b, 0xc7, 0x65, 0xac, 0x1c, 0x09, 0x05, 0xdb, + 0x6f, 0x20, 0xca, 0xf1, 0xfd, 0x03, 0x6d, 0xc9, 0xc1, 0xa1, 0x2a, 0x0c, 0xb6, 0xd5, 0x30, 0xd0, + 0xe2, 0x49, 0x56, 0x51, 0x0b, 0x65, 0x2d, 0x94, 0x13, 0xf7, 0xb1, 0xd6, 0xe4, 0x1e, 0xfe, 0xfe, + 0x60, 0xb3, 0xb6, 0xff, 0x9c, 0x95, 0x68, 0xad, 0x22, 0x73, 0x58, 0x69, 0x9e, 0x64, 0x4d, 0x6e, + 0xe1, 0xde, 0x74, 0x1f, 0xa6, 0xad, 0x24, 0x2a, 0x98, 0xdd, 0xa0, 0x61, 0xfa, 0x88, 0x95, 0x3f, + 0x00, 0xd2, 0x6b, 0x80, 0x71, 0x78, 0xab, 0x46, 0xe2, 0x5b, 0x14, 0x3b, 0x55, 0xcb, 0x86, 0xec, + 0x14, 0x1b, 0x4f, 0xed, 0xd4, 0x14, 0x59, 0xf7, 0xdf, 0x74, 0x1a, 0x32, 0x4f, 0xe1, 0xf9, 0xa2, + 0x1b, 0xc5, 0x7b, 0xc2, 0xf8, 0xc1, 0x7d, 0x7f, 0xb8, 0x59, 0x1c, 0x7c, 0x6a, 0xa1, 0x4f, 0xac, + 0x63, 0xf0, 0xc6, 0x33, 0xc4, 0x13, 0xac, 0x6b, 0x0d, 0xb5, 0x3a, 0x9b, 0xc3, 0x48, 0xd3, 0xcd, + 0x67, 0x82, 0xd5, 0x7f, 0x0c, 0x55, 0xcb, 0xdf, 0x53, 0xb0, 0x4d, 0xbe, 0xf1, 0x3a, 0x14, 0x23, + 0xe3, 0xef, 0x6a, 0xc2, 0x6e, 0xbe, 0x2e, 0x4f, 0x42, 0xa9, 0xa2, 0xf7, 0x24, 0xe6, 0x3e, 0x3d, + 0x22, 0xda, 0x48, 0x91, 0x0c, 0xa7, 0x91, 0x3c, 0x93, 0xdc, 0xc9, 0x04, 0xdf, 0xa8, 0x39, 0xce, + 0x80, 0x68, 0x4a, 0x05, 0xff, 0x8d, 0x7f, 0x2b, 0x48, 0xc6, 0x40, 0x4b, 0x8e, 0xa1, 0xf1, 0xd6, + 0x0d, 0x53, 0xaa, 0xd1, 0x4c, 0x0a, 0xae, 0xe2, 0xdb, 0x77, 0x26, 0x20, 0x7e, 0xfd, 0x47, 0xc1, + 0x57, 0xd3, 0x2f, 0xb0, 0xfc, 0x42, 0xe2, 0x27, 0x83, 0xd2, 0xf1, 0x98, 0x37, 0x43, 0x49, 0x1a, + 0xa4, 0xc0, 0x42, 0x55, 0x17, 0xe3, 0x98, 0x4a, 0xbc, 0x99, 0x10, 0x4e, 0x91, 0x4b, 0xfc, 0x3e, + 0xdb, 0xcf, 0x15, 0x57, 0xf0, 0x72, 0x3b, 0xfe, 0x19, 0x8c, 0x4c, 0xf2, 0x30, 0x86, 0xfe, 0xc2, + 0x89, 0x94, 0x11, 0x2f, 0xc0, 0xd0, 0xb8, 0x39, 0x3a, 0xb0, 0xd8, 0xe5, 0x86, 0x95, 0xb2, 0xa5, + 0x2a, 0xf0, 0xf9, 0x00, 0x7f, 0xd0, 0x89, 0xb9, 0x68, 0xed, 0x91, 0x6c, 0x16, 0x98, 0xfd, 0x0a, + 0xa3, 0xfb, 0xa9, 0x8a, 0x69, 0xac, 0x61, 0x66, 0xc3, 0x0f, 0xd0, 0xf6, 0x2a, 0x7d, 0x83, 0xf2, + 0x15, 0xe6, 0x41, 0x28, 0x0a, 0x6e, 0x15, 0x7f, 0x09, 0x90, 0x71, 0xec, 0x8c, 0x8f, 0x41, 0xf2, + 0x0a, 0x1a, 0x4e, 0x5b, 0xf2, 0xf1, 0xef, 0xa5, 0x91, 0x46, 0xd1, 0x11, 0xaf, 0x15, 0x1f, 0x8f, + 0x8f, 0xee, 0x7d, 0xbf, 0xf0, 0xe9, 0x86, 0x7c, 0x71, 0x5d, 0xbc, 0x9a, 0x5c, 0xc2, 0x16, 0xa8, + 0xd3, 0xf6, 0xfe, 0x96, 0xb4, 0x14, 0x36, 0x7c, 0x1b, 0x32, 0xb9, 0x7f, 0x8b, 0xaa, 0xf7, 0x7d, + 0x9f, 0x46, 0xda, 0xc1, 0x05, 0x24, 0xc7, 0x84, 0xc0, 0x37, 0xbd, 0xef, 0xdf, 0x85, 0xbe, 0x00, + 0xb6, 0x03, 0xba, 0x85, 0xd0, 0xfd, 0xda, 0x31, 0xae, 0x2e, 0x2b, 0xf0, 0xfd, 0xcc, 0x00, 0x77, + 0xcc, 0x8d, 0x67, 0x9e, 0x00, 0x71, 0x7a, 0xe4, 0xbf, 0xbb, 0x7a, 0xdc, 0xd0, 0x34, 0xe1, 0x9d, + 0x37, 0x98, 0xc3, 0x6b, 0xaf, 0x85, 0xca, 0xac, 0xac, 0x1e, 0x55, 0x0e, 0x93, 0x07, 0x86, 0x46, + 0x96, 0xc3, 0x65, 0x79, 0x54, 0x59, 0x25, 0xb7, 0x8d, 0x2a, 0x47, 0xc8, 0x4d, 0xa3, 0xca, 0x91, + 0xf2, 0xc1, 0x51, 0xe5, 0x31, 0xf2, 0x1e, 0xa5, 0xfc, 0x04, 0x2d, 0xaa, 0xe5, 0xff, 0x47, 0x8b, + 0xc3, 0xed, 0x63, 0xe5, 0xda, 0x91, 0xed, 0x51, 0xf2, 0xb6, 0x60, 0xbb, 0x52, 0x1e, 0x27, 0x97, + 0x8e, 0x2a, 0x6b, 0xe4, 0x1f, 0x8e, 0x2a, 0x8f, 0x97, 0x57, 0x8e, 0x2a, 0x4f, 0x90, 0x93, 0x47, + 0xe3, 0xe7, 0xe4, 0xb9, 0xa3, 0xe8, 0xd1, 0xca, 0x31, 0x23, 0xc7, 0x9b, 0x28, 0x8f, 0x1d, 0x0d, + 0x3f, 0x49, 0x1e, 0xf8, 0x66, 0x24, 0xfc, 0x64, 0x59, 0x1e, 0x55, 0x8e, 0x96, 0xdb, 0x46, 0x95, + 0xa7, 0xc8, 0x4d, 0xa3, 0xca, 0x53, 0xe5, 0x83, 0xa3, 0xca, 0xf7, 0xc9, 0x7b, 0x46, 0x95, 0x63, + 0xe4, 0xb7, 0x46, 0x95, 0x63, 0xe5, 0xda, 0x51, 0xe5, 0x69, 0xf2, 0xd6, 0x51, 0xe5, 0xe9, 0xb2, + 0x6d, 0x54, 0x39, 0x8e, 0xfe, 0x2d, 0xa7, 0x7b, 0xe5, 0x19, 0x72, 0xf6, 0x37, 0x23, 0xe6, 0x73, + 0xbf, 0x9c, 0xfc, 0xcd, 0xa8, 0xf9, 0xcc, 0x94, 0xe7, 0x7e, 0xa3, 0xdc, 0xeb, 0x61, 0x30, 0xee, + 0x62, 0x70, 0x6f, 0x00, 0xdf, 0xbb, 0xc3, 0xb7, 0x8c, 0x51, 0xa1, 0xf0, 0xb2, 0x60, 0x22, 0x9e, + 0xc5, 0xc1, 0x27, 0x3d, 0x23, 0x31, 0x51, 0xcf, 0xa4, 0x3a, 0x1c, 0x25, 0x1b, 0x2b, 0x1c, 0x25, + 0xc5, 0xba, 0xcd, 0xe5, 0x1b, 0xf8, 0x8d, 0x25, 0x85, 0xf6, 0x92, 0xa2, 0xe2, 0xb9, 0x09, 0xba, + 0xf2, 0x4d, 0xba, 0x8a, 0xad, 0x25, 0xcc, 0x1a, 0xe3, 0x4a, 0xc6, 0x5c, 0xb2, 0x9e, 0xb7, 0x97, + 0x3a, 0xb6, 0x31, 0x6b, 0x37, 0x97, 0xd8, 0xad, 0x1b, 0xca, 0xb7, 0x30, 0x1b, 0x4b, 0x36, 0xf1, + 0x8c, 0xb1, 0x64, 0x63, 0xb9, 0x7d, 0x9b, 0x6e, 0x63, 0x51, 0x85, 0xae, 0x64, 0xab, 0xad, 0x88, + 0xaf, 0x04, 0x24, 0xf3, 0x19, 0xd3, 0x13, 0x86, 0x35, 0x96, 0x87, 0x98, 0x39, 0x95, 0x50, 0xb9, + 0xbe, 0xa4, 0xc2, 0x51, 0x0a, 0x88, 0x8a, 0x1c, 0xba, 0x39, 0x5b, 0xe7, 0xeb, 0x0c, 0x76, 0x7b, + 0xb9, 0x5d, 0xb7, 0xbe, 0xbc, 0xb8, 0x64, 0x09, 0x94, 0x01, 0xed, 0x73, 0x80, 0xc7, 0xa1, 0xdb, + 0x54, 0xee, 0xd0, 0x55, 0xd8, 0x4b, 0x2a, 0xe1, 0x99, 0x81, 0x21, 0x75, 0x30, 0x48, 0x25, 0xf6, + 0x72, 0x94, 0x97, 0xeb, 0xca, 0x37, 0x14, 0x33, 0x2b, 0x37, 0x6d, 0x2e, 0xda, 0x50, 0x5a, 0xac, + 0x2b, 0xaf, 0xc0, 0xae, 0xcc, 0x3a, 0xa8, 0xde, 0x58, 0xb4, 0x69, 0x9b, 0xce, 0x90, 0xb4, 0x30, + 0x51, 0x07, 0x9d, 0xec, 0xa5, 0x25, 0x95, 0xb3, 0x98, 0xf4, 0x72, 0x7e, 0x43, 0x31, 0xc5, 0x55, + 0xb2, 0xa9, 0xe8, 0xd9, 0x0d, 0x25, 0xba, 0x54, 0x68, 0xdd, 0x50, 0xba, 0xa9, 0x84, 0x31, 0xaf, + 0x34, 0x66, 0x30, 0x4c, 0x1a, 0xcc, 0xeb, 0xf9, 0x8a, 0xf2, 0x52, 0x18, 0x24, 0xab, 0x64, 0x53, + 0x89, 0xbd, 0x68, 0x03, 0x0c, 0x5a, 0xee, 0x28, 0x59, 0x4f, 0x29, 0xb4, 0x16, 0xf1, 0x1b, 0x1c, + 0x4c, 0x46, 0x69, 0xe5, 0xf3, 0xba, 0x12, 0x4a, 0x25, 0xd2, 0x9b, 0x61, 0x2f, 0xdd, 0x5c, 0x82, + 0x94, 0x1a, 0x32, 0x57, 0xea, 0x4c, 0xa9, 0xb9, 0xeb, 0x70, 0x72, 0xba, 0xd2, 0x4d, 0x95, 0x8e, + 0xa2, 0x0d, 0x1b, 0x8a, 0x68, 0xbf, 0xf5, 0xb6, 0x92, 0xf5, 0xcf, 0x43, 0xef, 0xd2, 0x0d, 0x25, + 0xc5, 0x48, 0xfc, 0x12, 0x9d, 0x99, 0x5f, 0xbf, 0xbe, 0xa4, 0xb2, 0xd2, 0xca, 0x6f, 0xd8, 0xb0, + 0x0d, 0x60, 0x4b, 0x1d, 0xa5, 0x40, 0xfc, 0x8b, 0x25, 0xc5, 0x51, 0x8c, 0xc3, 0xea, 0xa8, 0x80, + 0xf6, 0x12, 0x3b, 0x4c, 0x50, 0x57, 0x5a, 0xa9, 0x83, 0x09, 0x17, 0x97, 0x6e, 0x7a, 0x4e, 0xe7, + 0xb0, 0x95, 0xe8, 0xac, 0x80, 0x00, 0xa0, 0x75, 0x95, 0x1b, 0x01, 0x35, 0x34, 0x57, 0x14, 0xad, + 0x7f, 0xbe, 0xc4, 0x51, 0xa9, 0x9b, 0x5b, 0xea, 0x40, 0x38, 0xe0, 0x5f, 0xb1, 0xee, 0xd9, 0x6d, + 0x8e, 0x92, 0xca, 0x84, 0x79, 0xba, 0xe2, 0xf2, 0x2d, 0x9b, 0x36, 0x94, 0x17, 0x15, 0xeb, 0x36, + 0x96, 0x3e, 0x67, 0x73, 0xe8, 0x1c, 0x45, 0xcf, 0x97, 0xe8, 0x36, 0x94, 0x6f, 0x7a, 0xae, 0xc4, + 0x3e, 0x3f, 0x8a, 0xc9, 0x4c, 0x5d, 0xb7, 0x68, 0x21, 0x93, 0x49, 0x09, 0x02, 0x0e, 0xea, 0x28, + 0x20, 0x10, 0xfc, 0x5c, 0x89, 0x6e, 0xd1, 0x7c, 0x66, 0xc1, 0xb3, 0xe5, 0xe5, 0x8e, 0x05, 0x1b, + 0x4a, 0x37, 0x02, 0x5f, 0x7e, 0xf0, 0x6c, 0x69, 0x79, 0xe5, 0xfc, 0xca, 0x6d, 0x95, 0xcc, 0xb7, + 0xca, 0xba, 0x4a, 0xa0, 0x17, 0x88, 0x59, 0x5f, 0x6e, 0xb7, 0x03, 0x7b, 0x00, 0xe9, 0xf4, 0x27, + 0x17, 0xe9, 0x37, 0x9a, 0x52, 0xd7, 0xac, 0x4c, 0x87, 0xa7, 0x47, 0x97, 0xea, 0x37, 0x4e, 0x7f, + 0x32, 0x71, 0xe3, 0x12, 0x1d, 0x93, 0x0a, 0xfc, 0xde, 0xf4, 0x03, 0xbe, 0x92, 0xf2, 0x7b, 0xe3, + 0x08, 0x71, 0x80, 0x45, 0xd9, 0x86, 0x53, 0x04, 0x5e, 0x95, 0x16, 0x97, 0xe8, 0x8a, 0x74, 0x41, + 0x98, 0x4a, 0x85, 0xdd, 0xf3, 0x47, 0xac, 0x56, 0x71, 0x89, 0xa3, 0xc4, 0x8e, 0xe3, 0xeb, 0x90, + 0x36, 0x5d, 0x31, 0xf2, 0x9c, 0xa1, 0x63, 0xc1, 0x00, 0x89, 0x5b, 0x19, 0x13, 0x48, 0x46, 0x25, + 0x60, 0x78, 0xbe, 0x64, 0x1b, 0xce, 0xc7, 0x5e, 0xe2, 0xe0, 0xed, 0x28, 0x1b, 0xba, 0x39, 0x95, + 0xf3, 0x83, 0x2c, 0x4d, 0xdf, 0x50, 0x5e, 0x59, 0x42, 0x17, 0x81, 0xb7, 0x97, 0xc0, 0x22, 0x6e, + 0x2e, 0x45, 0xf9, 0x81, 0xce, 0x89, 0x8c, 0xd9, 0x01, 0x8c, 0x74, 0xd8, 0x8b, 0xd6, 0x97, 0x2c, + 0x89, 0x62, 0x74, 0xba, 0x27, 0xe7, 0x54, 0x14, 0x44, 0x31, 0xd9, 0xc0, 0xb7, 0x10, 0xb9, 0xc0, + 0xee, 0xf2, 0xf5, 0x45, 0x8e, 0x72, 0xfb, 0x12, 0xdd, 0x5a, 0xde, 0xa1, 0x2b, 0xb7, 0x06, 0x1b, + 0x14, 0x39, 0x06, 0xce, 0xd9, 0xf9, 0xf5, 0x30, 0x22, 0x90, 0x5e, 0xfa, 0xdc, 0xa6, 0x22, 0xfa, + 0x84, 0x7c, 0xe1, 0x51, 0x63, 0x98, 0xb4, 0x72, 0x7e, 0x53, 0xb1, 0xce, 0x5e, 0x04, 0xbc, 0xa7, + 0xd2, 0x5e, 0x52, 0x0c, 0x95, 0x26, 0xe4, 0xb5, 0x22, 0x4f, 0x2b, 0x56, 0xac, 0x60, 0x4a, 0x8a, + 0x4b, 0x01, 0x3b, 0xae, 0x0b, 0x33, 0x7f, 0x01, 0x13, 0xc5, 0xac, 0x59, 0x97, 0x69, 0x0e, 0xa9, + 0x4e, 0x70, 0x70, 0x45, 0x00, 0x29, 0xf5, 0xf3, 0x99, 0x59, 0x30, 0x30, 0x93, 0x51, 0xb2, 0xb9, + 0x74, 0x7d, 0x09, 0xe5, 0x4f, 0xd1, 0x66, 0x68, 0x41, 0xe6, 0x0d, 0xeb, 0xc1, 0x3a, 0xb3, 0x99, + 0x89, 0x9a, 0x35, 0x4b, 0x67, 0x56, 0x56, 0x55, 0x91, 0x1d, 0x04, 0xb5, 0x22, 0x39, 0xb3, 0xb0, + 0x29, 0xbb, 0x08, 0x04, 0x77, 0x5b, 0x39, 0x0f, 0xb4, 0x56, 0x94, 0x82, 0x20, 0x7c, 0x7b, 0x85, + 0x81, 0x7d, 0x28, 0x75, 0x76, 0xe0, 0xf8, 0x3c, 0x1d, 0x15, 0x0a, 0xf8, 0x51, 0x80, 0xe6, 0xe9, + 0x40, 0xfa, 0x47, 0xca, 0x09, 0xe2, 0x2b, 0x2e, 0x45, 0x49, 0x28, 0x47, 0x4d, 0x43, 0x16, 0x95, + 0xc3, 0x6a, 0xc1, 0x0f, 0xa2, 0xa8, 0x28, 0xb2, 0x3b, 0x4a, 0x71, 0x06, 0x95, 0x68, 0x31, 0xb0, + 0x46, 0x59, 0x46, 0x3a, 0x81, 0x15, 0x51, 0x51, 0xcc, 0x77, 0xa4, 0x4d, 0x59, 0xd0, 0xf4, 0x75, + 0xb9, 0x8f, 0x3f, 0x94, 0xfa, 0xf8, 0xba, 0x87, 0x32, 0x0c, 0x8f, 0x2b, 0xeb, 0x8a, 0xfd, 0xe6, + 0x2b, 0x0b, 0xf6, 0x83, 0xca, 0xa0, 0x69, 0x50, 0xd8, 0x98, 0xba, 0x01, 0x78, 0x4f, 0xcb, 0x54, + 0xdd, 0x18, 0x63, 0xd1, 0x7a, 0x1b, 0x0a, 0x8c, 0x52, 0x0a, 0x0e, 0xf0, 0x9d, 0x71, 0xe6, 0x03, + 0xbb, 0xbf, 0xc3, 0xe7, 0x4a, 0x98, 0x4a, 0x25, 0x16, 0xb7, 0xc0, 0x4a, 0x29, 0xd2, 0x73, 0x4f, + 0x57, 0xca, 0x2b, 0x4a, 0x36, 0x29, 0xdc, 0x9c, 0xb3, 0x15, 0xb9, 0xf0, 0x2c, 0xa8, 0x8e, 0xa2, + 0x88, 0x54, 0x25, 0x46, 0x69, 0xcf, 0xff, 0xa9, 0x44, 0xcf, 0xf2, 0xa5, 0x20, 0xe1, 0x2b, 0x33, + 0x40, 0x4b, 0x41, 0xa9, 0x1d, 0xeb, 0x6d, 0xa0, 0x47, 0x06, 0x90, 0x16, 0xe4, 0x1b, 0xca, 0xe3, + 0x7c, 0x1d, 0x28, 0xc1, 0xa6, 0xcd, 0x30, 0x2b, 0x20, 0x0b, 0x8c, 0xd1, 0xc6, 0x7f, 0x29, 0x12, + 0x40, 0x65, 0x46, 0x39, 0x8f, 0xaa, 0xa3, 0xb0, 0x62, 0x6b, 0xd2, 0xa3, 0x8c, 0xa5, 0xd4, 0xee, + 0xe0, 0x41, 0x12, 0x2a, 0x29, 0x18, 0x53, 0x5a, 0x59, 0x9e, 0xfc, 0xc8, 0x23, 0x89, 0x30, 0x11, + 0x00, 0xdf, 0x54, 0xb4, 0xb1, 0x44, 0xd1, 0xdf, 0x61, 0x79, 0x4c, 0xd4, 0x2f, 0x5c, 0xb4, 0xf8, + 0xe1, 0x47, 0x1e, 0x4d, 0x4a, 0x2e, 0x7a, 0x76, 0x7d, 0x71, 0x89, 0x35, 0xa8, 0x06, 0xba, 0x65, + 0x73, 0x2a, 0x1f, 0x9a, 0x53, 0xf1, 0x58, 0x14, 0xb3, 0xd2, 0xbc, 0x56, 0x41, 0xb0, 0xa9, 0x1c, + 0x4c, 0x62, 0xe9, 0xc6, 0x22, 0x20, 0x43, 0xf1, 0x05, 0xb0, 0x8c, 0x95, 0xeb, 0xed, 0xa5, 0x15, + 0x28, 0xc0, 0xb3, 0xd0, 0x34, 0xff, 0x2b, 0x25, 0x50, 0xb8, 0x98, 0x0b, 0x5e, 0xe3, 0x9e, 0x0a, + 0x96, 0x3c, 0xcb, 0x3f, 0xc7, 0x3c, 0x91, 0x69, 0xc8, 0x65, 0xe6, 0x6e, 0x02, 0x43, 0x98, 0x10, + 0x04, 0x0a, 0x49, 0xf0, 0x4a, 0xd3, 0xe6, 0xc5, 0xba, 0xa2, 0xe2, 0x62, 0x94, 0x84, 0x25, 0xba, + 0xd9, 0x73, 0x2a, 0x67, 0xd3, 0x97, 0x22, 0xc3, 0xc0, 0x5d, 0xa9, 0x19, 0x2d, 0x1b, 0xa6, 0x52, + 0x6b, 0x75, 0x29, 0x4e, 0xea, 0xc0, 0xc0, 0x71, 0xcd, 0x87, 0xff, 0xf8, 0x59, 0xc0, 0xd0, 0x35, + 0x65, 0xce, 0x3e, 0xc0, 0x32, 0xf1, 0x73, 0x94, 0xcf, 0xf2, 0xe0, 0xaf, 0x63, 0xce, 0xbd, 0x3a, + 0x6c, 0xff, 0x04, 0x02, 0xed, 0xc7, 0x20, 0x9c, 0x1b, 0x0b, 0xd1, 0xdc, 0x39, 0xf8, 0x4c, 0x85, + 0xcf, 0x83, 0x90, 0x16, 0xbf, 0x02, 0xbf, 0x2f, 0x65, 0xe0, 0xfb, 0x55, 0x2c, 0x93, 0x09, 0xbf, + 0xbb, 0xe1, 0x53, 0x0c, 0x75, 0xdb, 0x20, 0x3b, 0xfa, 0x3b, 0xfc, 0x2e, 0xcd, 0x50, 0xea, 0xdf, + 0xca, 0xc4, 0xcb, 0xc0, 0x2c, 0xf3, 0x36, 0x7c, 0x4e, 0x43, 0xfd, 0x2f, 0x82, 0xf0, 0xff, 0xd7, + 0x67, 0x3c, 0xc0, 0xba, 0x1f, 0x63, 0x99, 0x16, 0xf8, 0x74, 0xc0, 0xc7, 0x0f, 0x1f, 0x66, 0x05, + 0xcb, 0x68, 0xe1, 0xa3, 0x83, 0x4f, 0x22, 0x7c, 0x52, 0xe0, 0x63, 0x82, 0xcf, 0x33, 0xf0, 0xa9, + 0x80, 0x8f, 0x13, 0x3e, 0xaf, 0xc1, 0xe7, 0x1d, 0xf8, 0xec, 0x83, 0x8f, 0x1b, 0x3e, 0x2d, 0xf0, + 0xe9, 0x80, 0x8f, 0x1f, 0xaf, 0x3d, 0xa5, 0x40, 0x7f, 0xf8, 0xe8, 0xe0, 0x93, 0x08, 0x9f, 0x14, + 0xf8, 0x98, 0xe0, 0xf3, 0x0c, 0x7c, 0x2a, 0xe0, 0xe3, 0x84, 0xcf, 0x6b, 0xf0, 0x79, 0x07, 0x3e, + 0xfb, 0xe0, 0x83, 0x3e, 0x3f, 0x1a, 0x37, 0xea, 0xf0, 0x26, 0xe0, 0x9a, 0x3c, 0xe6, 0xf5, 0xd7, + 0x7e, 0x73, 0xbc, 0xeb, 0xa1, 0x87, 0xfd, 0x47, 0x84, 0x55, 0x8f, 0xbe, 0x3e, 0x7f, 0xcf, 0x2f, + 0x97, 0xdf, 0x7c, 0x69, 0x69, 0x0a, 0x84, 0xa9, 0x95, 0x15, 0xa5, 0x9b, 0xf8, 0x0a, 0x66, 0xda, + 0x2d, 0x86, 0x29, 0x2c, 0xe4, 0x8b, 0x4b, 0x37, 0x6f, 0x2c, 0x2f, 0x2e, 0x2e, 0x5d, 0xcc, 0xd8, + 0xfb, 0xb0, 0x82, 0x16, 0x16, 0x31, 0x9f, 0xf6, 0x85, 0x5a, 0xb1, 0xd4, 0xd5, 0x4f, 0x4b, 0xc1, + 0xb6, 0xee, 0x01, 0x86, 0x01, 0x75, 0x7a, 0x9e, 0x86, 0x0c, 0x85, 0x95, 0xd4, 0x42, 0x54, 0x32, + 0x17, 0x6f, 0x07, 0x6b, 0xd7, 0x43, 0xb5, 0xa3, 0xa4, 0xb0, 0x74, 0x53, 0x71, 0xc9, 0x56, 0x66, + 0x27, 0x84, 0x24, 0xd4, 0x2d, 0x30, 0x91, 0x61, 0x2c, 0x43, 0x1d, 0xd2, 0xa2, 0x42, 0x74, 0x8f, + 0xcc, 0xd7, 0x50, 0xb6, 0x16, 0x39, 0x16, 0x2d, 0x2c, 0x7c, 0xae, 0xc4, 0x51, 0x08, 0xa6, 0xae, + 0x64, 0x03, 0x33, 0x35, 0x3c, 0x54, 0x87, 0x20, 0x85, 0xeb, 0xcb, 0x37, 0x39, 0x4a, 0xb6, 0x3a, + 0x98, 0xfb, 0x23, 0x42, 0xd5, 0xa8, 0xaa, 0x4c, 0x6b, 0xe4, 0xc8, 0x22, 0x80, 0x32, 0x8f, 0x46, + 0xb1, 0xcc, 0x7a, 0xb0, 0x0e, 0x25, 0x85, 0xeb, 0x37, 0x60, 0x3c, 0x62, 0x2f, 0x5c, 0x6f, 0x2b, + 0x82, 0x7a, 0xfc, 0x43, 0x19, 0x0a, 0x24, 0x92, 0xca, 0xe0, 0x1f, 0xcc, 0x50, 0x8a, 0xeb, 0xd1, + 0x75, 0x30, 0x8b, 0xa1, 0x4c, 0xe7, 0x30, 0xba, 0xd7, 0x62, 0xcd, 0xb7, 0xaa, 0xad, 0xf6, 0xf2, + 0x8d, 0x85, 0xe0, 0xe0, 0x98, 0xcf, 0xa0, 0xc5, 0x5a, 0x39, 0x82, 0x60, 0xdf, 0xbd, 0x8a, 0xe7, + 0xf8, 0xd2, 0x62, 0xa6, 0x07, 0xcb, 0x94, 0xc8, 0x4d, 0xe3, 0xe1, 0x49, 0x19, 0xe6, 0x23, 0x7c, + 0xa4, 0x04, 0xb4, 0x87, 0x9e, 0x40, 0xdd, 0x19, 0xff, 0x88, 0x02, 0xb2, 0xbd, 0x84, 0xd9, 0xc2, + 0xb1, 0x21, 0xb5, 0x56, 0x66, 0x8a, 0x6f, 0x06, 0x86, 0x2a, 0x14, 0x04, 0x23, 0x2a, 0x14, 0xe4, + 0x5f, 0xd1, 0x1a, 0xd0, 0x5f, 0x08, 0x70, 0x02, 0xf0, 0xec, 0x28, 0xe7, 0x2b, 0x2a, 0x4a, 0xec, + 0xcc, 0xe4, 0xc9, 0x2c, 0x53, 0xf4, 0x6c, 0x25, 0x33, 0x7b, 0x32, 0xb2, 0xdd, 0xbe, 0xbe, 0x62, + 0x1b, 0x63, 0x08, 0x3e, 0x6e, 0xac, 0x60, 0xb6, 0x07, 0x1f, 0x8b, 0x60, 0xf5, 0xa0, 0x18, 0x50, + 0x8a, 0x9b, 0xf0, 0x79, 0x45, 0x74, 0xf0, 0x39, 0xd8, 0xb6, 0x4f, 0x29, 0x83, 0x8d, 0x61, 0xfe, + 0x02, 0x8f, 0x60, 0xec, 0x1c, 0x85, 0x60, 0x19, 0x36, 0x31, 0x8f, 0x4c, 0x61, 0x19, 0xb0, 0x2c, + 0x85, 0x8e, 0xf2, 0x42, 0x1c, 0x7c, 0x2d, 0x14, 0x8b, 0x4b, 0x9f, 0x83, 0x65, 0x0b, 0x56, 0xbc, + 0x3c, 0x85, 0x76, 0x04, 0x82, 0x4a, 0x19, 0xf5, 0x54, 0x96, 0x41, 0x26, 0x01, 0x45, 0x60, 0x61, + 0x40, 0x3a, 0x2a, 0x8a, 0x1c, 0x36, 0xe6, 0xa9, 0xfb, 0x40, 0x92, 0x8b, 0x36, 0x95, 0xae, 0x67, + 0x16, 0xc4, 0xb0, 0xcc, 0x88, 0x38, 0x94, 0x19, 0x3f, 0x0d, 0xe0, 0x2b, 0x1c, 0xf7, 0x18, 0xfb, + 0xce, 0x34, 0x9c, 0x66, 0x21, 0xb5, 0x23, 0x85, 0x1b, 0x9f, 0xb5, 0x33, 0x0b, 0xe2, 0x58, 0x06, + 0x7e, 0x29, 0x04, 0xb4, 0x97, 0xc5, 0x21, 0x2a, 0x3b, 0xed, 0xc1, 0xfc, 0xcf, 0xac, 0x61, 0x6c, + 0xd8, 0xfc, 0xec, 0x36, 0x05, 0x47, 0xd1, 0xec, 0x6f, 0x57, 0x5b, 0x2b, 0x95, 0x65, 0xfc, 0xd3, + 0x77, 0x5a, 0xd6, 0x97, 0x97, 0xdb, 0x8b, 0x99, 0xee, 0xef, 0xd4, 0xa3, 0x9d, 0x2f, 0x54, 0x82, + 0x95, 0x38, 0xb0, 0x37, 0x0a, 0xdf, 0x1f, 0x86, 0xa7, 0xcd, 0xca, 0xa3, 0xe3, 0x7b, 0x58, 0x09, + 0x42, 0xc9, 0xac, 0x9e, 0xab, 0x3c, 0xc1, 0xec, 0xfb, 0x82, 0x8f, 0x5b, 0x99, 0x9e, 0x84, 0x60, + 0x9f, 0xc2, 0xca, 0xe1, 0x08, 0x85, 0xd9, 0xfd, 0x7d, 0x90, 0x5e, 0xf0, 0x09, 0x85, 0xe0, 0x0b, + 0x0a, 0xa9, 0x23, 0x60, 0x84, 0x87, 0x60, 0x76, 0x25, 0x1b, 0x41, 0xe6, 0x94, 0x8a, 0x42, 0x1a, + 0x6c, 0x30, 0xc7, 0xa1, 0xba, 0x62, 0xe3, 0xc6, 0xc2, 0xca, 0x22, 0x0c, 0x30, 0x2b, 0x4b, 0x0a, + 0x83, 0x61, 0x30, 0xf3, 0xb3, 0x05, 0x0a, 0x7f, 0x95, 0x3e, 0xcc, 0xa9, 0x05, 0xb8, 0x50, 0xa5, + 0xc3, 0xe5, 0x4b, 0x7a, 0xa5, 0xd9, 0x5e, 0xb4, 0x25, 0x54, 0xd5, 0xa5, 0x57, 0x50, 0x81, 0x04, + 0x96, 0x30, 0x0f, 0x2f, 0x54, 0x0a, 0xc0, 0x7b, 0x3a, 0xfc, 0x1b, 0x50, 0x06, 0xc5, 0x1b, 0x41, + 0xd0, 0xef, 0xbf, 0x5d, 0x53, 0xe8, 0xd8, 0x56, 0x51, 0x02, 0x8f, 0xe0, 0x19, 0xc0, 0x19, 0x9c, + 0xf8, 0x5f, 0x9b, 0x15, 0xe9, 0xf6, 0x2f, 0x82, 0x39, 0xe1, 0x8c, 0xe8, 0x92, 0x6d, 0xb2, 0x96, + 0x33, 0x3f, 0x59, 0xac, 0x0c, 0x4b, 0x1d, 0x3a, 0xed, 0xc1, 0xc8, 0x8b, 0xff, 0xd5, 0xc4, 0x51, + 0xc7, 0x6f, 0x3d, 0xac, 0x00, 0x6f, 0x2a, 0xd9, 0x52, 0xa8, 0x58, 0x94, 0xa1, 0x47, 0x59, 0x8c, + 0xbd, 0x61, 0x4d, 0x36, 0x15, 0x17, 0x2a, 0xcb, 0xc4, 0x4c, 0x4c, 0x52, 0xea, 0xa8, 0x89, 0xb9, + 0x08, 0x05, 0xf4, 0x40, 0x8a, 0x32, 0x15, 0x2c, 0x03, 0x8d, 0x58, 0x98, 0xa8, 0x8c, 0xc6, 0x7c, + 0x18, 0x2c, 0x29, 0x59, 0x03, 0x63, 0x59, 0x1e, 0xe4, 0x58, 0x09, 0x64, 0x17, 0xcc, 0xcd, 0xe5, + 0x38, 0x1d, 0x4c, 0x63, 0x98, 0x88, 0xc7, 0x82, 0x0d, 0xa5, 0xc5, 0xa0, 0x60, 0xf8, 0xa7, 0x81, + 0xf0, 0x1f, 0x1b, 0xfa, 0xe3, 0xd0, 0xda, 0x6f, 0xfd, 0xad, 0x68, 0x6c, 0xfe, 0x79, 0xf0, 0xf7, + 0x8d, 0x50, 0xf9, 0x6c, 0xb0, 0x7c, 0x56, 0x01, 0xfa, 0xb9, 0x4e, 0xf9, 0x7d, 0x83, 0x61, 0xfe, + 0x3f, 0x19, 0xa8, 0x86, 0x93, 0x70, 0x5e, 0x00, 0x00, +}; diff --git a/boot/limine/limine-bios-pxe.bin b/boot/limine/limine-bios-pxe.bin new file mode 100644 index 0000000..73a10af Binary files /dev/null and b/boot/limine/limine-bios-pxe.bin differ diff --git a/boot/limine/limine-bios.sys b/boot/limine/limine-bios.sys new file mode 100644 index 0000000..99b6cd0 Binary files /dev/null and b/boot/limine/limine-bios.sys differ diff --git a/boot/limine/limine-uefi-cd.bin b/boot/limine/limine-uefi-cd.bin new file mode 100644 index 0000000..de3a191 Binary files /dev/null and b/boot/limine/limine-uefi-cd.bin differ diff --git a/boot/limine/limine.c b/boot/limine/limine.c new file mode 100644 index 0000000..74983e8 --- /dev/null +++ b/boot/limine/limine.c @@ -0,0 +1,1354 @@ +#undef IS_WINDOWS +#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__) +#define IS_WINDOWS 1 +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef LIMINE_NO_BIOS +#include "limine-bios-hdd.h" +#endif + +static char *program_name = NULL; + +static void perror_wrap(const char *fmt, ...) { + int old_errno = errno; + + fprintf(stderr, "%s: ", program_name); + + va_list args; + va_start(args, fmt); + + vfprintf(stderr, fmt, args); + + va_end(args); + + fprintf(stderr, ": %s\n", strerror(old_errno)); +} + +static void remove_arg(int *argc, char *argv[], int index) { + for (int i = index; i < *argc - 1; i++) { + argv[i] = argv[i + 1]; + } + + (*argc)--; + + argv[*argc] = NULL; +} + +#ifndef LIMINE_NO_BIOS + +static bool quiet = false; + +static int set_pos(FILE *stream, uint64_t pos) { + if (sizeof(long) >= 8) { + return fseek(stream, (long)pos, SEEK_SET); + } + + long jump_size = (LONG_MAX / 2) + 1; + long last_jump = pos % jump_size; + uint64_t jumps = pos / jump_size; + + rewind(stream); + + for (uint64_t i = 0; i < jumps; i++) { + if (fseek(stream, jump_size, SEEK_CUR) != 0) { + return -1; + } + } + if (fseek(stream, last_jump, SEEK_CUR) != 0) { + return -1; + } + + return 0; +} + +#define SIZEOF_ARRAY(array) (sizeof(array) / sizeof(array[0])) +#define DIV_ROUNDUP(a, b) (((a) + ((b) - 1)) / (b)) + +struct gpt_table_header { + // the head + char signature[8]; + uint32_t revision; + uint32_t header_size; + uint32_t crc32; + uint32_t _reserved0; + + // the partitioning info + uint64_t my_lba; + uint64_t alternate_lba; + uint64_t first_usable_lba; + uint64_t last_usable_lba; + + // the guid + uint64_t disk_guid[2]; + + // entries related + uint64_t partition_entry_lba; + uint32_t number_of_partition_entries; + uint32_t size_of_partition_entry; + uint32_t partition_entry_array_crc32; +}; + +struct gpt_entry { + uint64_t partition_type_guid[2]; + + uint64_t unique_partition_guid[2]; + + uint64_t starting_lba; + uint64_t ending_lba; + + uint64_t attributes; + + uint16_t partition_name[36]; +}; + +struct gpt2mbr_type_conv { + uint64_t gpt_type1; + uint64_t gpt_type2; + uint8_t mbr_type; +}; + +// This table is very incomplete, but it should be enough for covering +// all that matters for ISOHYBRIDs. +// Of course, though, expansion is welcome. +static struct gpt2mbr_type_conv gpt2mbr_type_conv_table[] = { + { 0x11d2f81fc12a7328, 0x3bc93ec9a0004bba, 0xef }, // EFI system partition + { 0x4433b9e5ebd0a0a2, 0xc79926b7b668c087, 0x07 }, // Microsoft basic data + { 0x11aa000048465300, 0xacec4365300011aa, 0xaf }, // HFS/HFS+ +}; + +static int gpt2mbr_type(uint64_t gpt_type1, uint64_t gpt_type2) { + for (size_t i = 0; i < SIZEOF_ARRAY(gpt2mbr_type_conv_table); i++) { + if (gpt2mbr_type_conv_table[i].gpt_type1 == gpt_type1 + && gpt2mbr_type_conv_table[i].gpt_type2 == gpt_type2) { + return gpt2mbr_type_conv_table[i].mbr_type; + } + } + return -1; +} + +static void lba2chs(uint8_t *chs, uint64_t lba) { + // If LBA is too big to express, use a standard value for CHS. + if (lba > 63 * 255 * 1024) { + goto lba_too_big; + } + + uint64_t cylinder = lba / (255 * 63); + if (cylinder >= 1024) { +lba_too_big: + chs[0] = 0xfe; + chs[1] = 0xff; + chs[2] = 0xff; + return; + } + uint64_t head = (lba / 63) % 255; + uint64_t sector = (lba % 63) + 1; + + chs[0] = head; + chs[1] = (cylinder >> 2) & 0xc0; // high 2 bits + chs[1] |= sector & 0x3f; + chs[2] = cylinder; // low 8 bits +} + +static uint16_t endswap16(uint16_t value) { + uint16_t ret = 0; + ret |= (value >> 8) & 0x00ff; + ret |= (value << 8) & 0xff00; + return ret; +} + +static uint32_t endswap32(uint32_t value) { + uint32_t ret = 0; + ret |= (value >> 24) & 0x000000ff; + ret |= (value >> 8) & 0x0000ff00; + ret |= (value << 8) & 0x00ff0000; + ret |= (value << 24) & 0xff000000; + return ret; +} + +static uint64_t endswap64(uint64_t value) { + uint64_t ret = 0; + ret |= (value >> 56) & 0x00000000000000ff; + ret |= (value >> 40) & 0x000000000000ff00; + ret |= (value >> 24) & 0x0000000000ff0000; + ret |= (value >> 8) & 0x00000000ff000000; + ret |= (value << 8) & 0x000000ff00000000; + ret |= (value << 24) & 0x0000ff0000000000; + ret |= (value << 40) & 0x00ff000000000000; + ret |= (value << 56) & 0xff00000000000000; + return ret; +} + +#ifdef __BYTE_ORDER__ + +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ +#define bigendian true +#else +#define bigendian false +#endif + +#else /* !__BYTE_ORDER__ */ + +static bool bigendian = false; + +#endif /* !__BYTE_ORDER__ */ + +#define ENDSWAP(VALUE) (bigendian ? ( \ + sizeof(VALUE) == 1 ? (VALUE) : \ + sizeof(VALUE) == 2 ? endswap16(VALUE) : \ + sizeof(VALUE) == 4 ? endswap32(VALUE) : \ + sizeof(VALUE) == 8 ? endswap64(VALUE) : (abort(), 1) \ +) : (VALUE)) + +static enum { + CACHE_CLEAN, + CACHE_DIRTY +} cache_state; +static uint64_t cached_block; +static uint8_t *cache = NULL; +static FILE *device = NULL; +static size_t block_size; + +static bool device_init(void) { + size_t guesses[] = { 512, 2048, 4096 }; + + for (size_t i = 0; i < SIZEOF_ARRAY(guesses); i++) { + void *tmp = realloc(cache, guesses[i]); + if (tmp == NULL) { + perror_wrap("error: device_init(): realloc()"); + return false; + } + cache = tmp; + + rewind(device); + + size_t ret = fread(cache, guesses[i], 1, device); + if (ret != 1) { + continue; + } + + block_size = guesses[i]; + + if (!quiet) { + fprintf(stderr, "Physical block size of %zu bytes.\n", block_size); + } + + cache_state = CACHE_CLEAN; + cached_block = 0; + return true; + } + + fprintf(stderr, "error: device_init(): Couldn't determine block size of device.\n"); + return false; +} + +static bool device_flush_cache(void) { + if (cache_state == CACHE_CLEAN) + return true; + + if (set_pos(device, cached_block * block_size) != 0) { + perror_wrap("error: device_flush_cache(): set_pos()"); + return false; + } + + size_t ret = fwrite(cache, block_size, 1, device); + if (ret != 1) { + if (ferror(device)) { + perror_wrap("error: device_flush_cache(): fwrite()"); + } + return false; + } + + cache_state = CACHE_CLEAN; + return true; +} + +static bool device_cache_block(uint64_t block) { + if (cached_block == block) + return true; + + if (cache_state == CACHE_DIRTY) { + if (!device_flush_cache()) + return false; + } + + if (set_pos(device, block * block_size) != 0) { + perror_wrap("error: device_cache_block(): set_pos()"); + return false; + } + + size_t ret = fread(cache, block_size, 1, device); + if (ret != 1) { + if (ferror(device)) { + perror_wrap("error: device_cache_block(): fread()"); + } + return false; + } + + cached_block = block; + + return true; +} + +struct uninstall_data { + void *data; + uint64_t loc; + uint64_t count; +}; + +#define UNINSTALL_DATA_MAX 256 + +static bool uninstalling = false; +static struct uninstall_data uninstall_data[UNINSTALL_DATA_MAX]; +static struct uninstall_data uninstall_data_rev[UNINSTALL_DATA_MAX]; +static uint64_t uninstall_data_i = 0; +static const char *uninstall_file = NULL; + +static void reverse_uninstall_data(void) { + for (size_t i = 0, j = uninstall_data_i - 1; i < uninstall_data_i; i++, j--) { + uninstall_data_rev[j] = uninstall_data[i]; + } + + memcpy(uninstall_data, uninstall_data_rev, uninstall_data_i * sizeof(struct uninstall_data)); +} + +static void free_uninstall_data(void) { + for (size_t i = 0; i < uninstall_data_i; i++) { + free(uninstall_data[i].data); + } +} + +static bool store_uninstall_data(const char *filename) { + if (!quiet) { + fprintf(stderr, "Storing uninstall data to file: `%s`...\n", filename); + } + + FILE *udfile = fopen(filename, "wb"); + if (udfile == NULL) { + perror_wrap("error: `%s`", filename); + goto error; + } + + if (fwrite(&uninstall_data_i, sizeof(uint64_t), 1, udfile) != 1) { + goto fwrite_error; + } + + for (size_t i = 0; i < uninstall_data_i; i++) { + if (fwrite(&uninstall_data[i].loc, sizeof(uint64_t), 1, udfile) != 1) { + goto fwrite_error; + } + if (fwrite(&uninstall_data[i].count, sizeof(uint64_t), 1, udfile) != 1) { + goto fwrite_error; + } + if (fwrite(uninstall_data[i].data, uninstall_data[i].count, 1, udfile) != 1) { + goto fwrite_error; + } + } + + fclose(udfile); + return true; + +fwrite_error: + perror_wrap("error: store_uninstall_data(): fwrite()"); + +error: + if (udfile != NULL) { + fclose(udfile); + } + return false; +} + +static bool load_uninstall_data(const char *filename) { + if (!quiet) { + fprintf(stderr, "Loading uninstall data from file: `%s`...\n", filename); + } + + FILE *udfile = fopen(filename, "rb"); + if (udfile == NULL) { + perror_wrap("error: `%s`", filename); + goto error; + } + + if (fread(&uninstall_data_i, sizeof(uint64_t), 1, udfile) != 1) { + goto fread_error; + } + + for (size_t i = 0; i < uninstall_data_i; i++) { + if (fread(&uninstall_data[i].loc, sizeof(uint64_t), 1, udfile) != 1) { + goto fread_error; + } + if (fread(&uninstall_data[i].count, sizeof(uint64_t), 1, udfile) != 1) { + goto fread_error; + } + uninstall_data[i].data = malloc(uninstall_data[i].count); + if (uninstall_data[i].data == NULL) { + perror_wrap("error: load_uninstall_data(): malloc()"); + goto error; + } + if (fread(uninstall_data[i].data, uninstall_data[i].count, 1, udfile) != 1) { + goto fread_error; + } + } + + fclose(udfile); + return true; + +fread_error: + perror_wrap("error: load_uninstall_data(): fread()"); + +error: + if (udfile != NULL) { + fclose(udfile); + } + return false; +} + +static bool _device_read(void *_buffer, uint64_t loc, size_t count) { + uint8_t *buffer = _buffer; + uint64_t progress = 0; + while (progress < count) { + uint64_t block = (loc + progress) / block_size; + + if (!device_cache_block(block)) { + return false; + } + + uint64_t chunk = count - progress; + uint64_t offset = (loc + progress) % block_size; + if (chunk > block_size - offset) + chunk = block_size - offset; + + memcpy(buffer + progress, &cache[offset], chunk); + progress += chunk; + } + + return true; +} + +static bool _device_write(const void *_buffer, uint64_t loc, size_t count) { + if (uninstalling) { + goto skip_save; + } + + if (uninstall_data_i >= UNINSTALL_DATA_MAX) { + fprintf(stderr, "error: Too many uninstall data entries! Please report this bug upstream.\n"); + return false; + } + + struct uninstall_data *ud = &uninstall_data[uninstall_data_i]; + + ud->data = malloc(count); + if (ud->data == NULL) { + perror_wrap("error: _device_write(): malloc()"); + return false; + } + + if (!_device_read(ud->data, loc, count)) { + return false; + } + + ud->loc = loc; + ud->count = count; + +skip_save:; + const uint8_t *buffer = _buffer; + uint64_t progress = 0; + while (progress < count) { + uint64_t block = (loc + progress) / block_size; + + if (!device_cache_block(block)) { + return false; + } + + uint64_t chunk = count - progress; + uint64_t offset = (loc + progress) % block_size; + if (chunk > block_size - offset) + chunk = block_size - offset; + + memcpy(&cache[offset], buffer + progress, chunk); + cache_state = CACHE_DIRTY; + progress += chunk; + } + + if (!uninstalling) { + uninstall_data_i++; + } + return true; +} + +static bool uninstall(bool quiet_arg) { + bool print_cache_flush_fail = false; + bool print_write_fail = false; + bool ret = true; + + uninstalling = true; + + cache_state = CACHE_CLEAN; + cached_block = (uint64_t)-1; + + for (size_t i = 0; i < uninstall_data_i; i++) { + struct uninstall_data *ud = &uninstall_data[i]; + bool retry = false; + while (!_device_write(ud->data, ud->loc, ud->count)) { + if (retry) { + fprintf(stderr, "warning: Retry failed.\n"); + print_write_fail = true; + break; + } + if (!quiet) { + fprintf(stderr, "warning: Uninstall data index %zu failed to write, retrying...\n", i); + } + if (!device_flush_cache()) { + print_cache_flush_fail = true; + } + cache_state = CACHE_CLEAN; + cached_block = (uint64_t)-1; + retry = true; + } + } + + if (!device_flush_cache()) { + print_cache_flush_fail = true; + } + + if (print_write_fail) { + fprintf(stderr, "error: Some data failed to be uninstalled correctly.\n"); + ret = false; + } + + if (print_cache_flush_fail) { + fprintf(stderr, "error: Device cache flush failure. Uninstall may be incomplete.\n"); + ret = false; + } + + if (ret == true && !quiet && !quiet_arg) { + fprintf(stderr, "Uninstall data restored successfully.\n"); + } + + return ret; +} + +#define device_read(BUFFER, LOC, COUNT) \ + do { \ + if (!_device_read(BUFFER, LOC, COUNT)) \ + goto cleanup; \ + } while (0) + +#define device_write(BUFFER, LOC, COUNT) \ + do { \ + if (!_device_write(BUFFER, LOC, COUNT)) \ + goto cleanup; \ + } while (0) + +static void bios_install_usage(void) { + printf("usage: %s bios-install [GPT partition index]\n", program_name); + printf("\n"); + printf(" --force Force installation even if the safety checks fail\n"); + printf(" (DANGEROUS!)\n"); + printf("\n"); + printf(" --uninstall Reverse the entire install procedure\n"); + printf("\n"); + printf(" --uninstall-data-file=\n"); + printf(" Set the input (for --uninstall) or output file\n"); + printf(" name of the file which contains uninstall data\n"); + printf("\n"); + printf(" --no-gpt-to-mbr-isohybrid-conversion\n"); + printf(" Do not automatically convert a GUID partition table (GPT)\n"); + printf(" found on an ISOHYBRID image into an MBR partition table\n"); + printf(" (which is done for better hardware compatibility)\n"); + printf("\n"); + printf(" --quiet Do not print verbose diagnostic messages\n"); + printf("\n"); + printf(" --help | -h Display this help message\n"); + printf("\n"); +} + +static bool validate_or_force(uint64_t offset, bool force, bool *err) { + *err = false; + + char hintc[64]; + device_read(hintc, offset + 3, 4); + if (memcmp(hintc, "NTFS", 4) == 0) { + if (!force) { + return false; + } else { + memset(hintc, 0, 4); + device_write(hintc, offset + 3, 4); + } + } + device_read(hintc, offset + 54, 3); + if (memcmp(hintc, "FAT", 3) == 0) { + if (!force) { + return false; + } else { + memset(hintc, 0, 5); + device_write(hintc, offset + 54, 5); + } + } + device_read(hintc, offset + 82, 3); + if (memcmp(hintc, "FAT", 3) == 0) { + if (!force) { + return false; + } else { + memset(hintc, 0, 5); + device_write(hintc, offset + 82, 5); + } + } + device_read(hintc, offset + 3, 5); + if (memcmp(hintc, "FAT32", 5) == 0) { + if (!force) { + return false; + } else { + memset(hintc, 0, 5); + device_write(hintc, offset + 3, 5); + } + } + uint16_t hint16 = 0; + device_read(&hint16, offset + 1080, sizeof(uint16_t)); + hint16 = ENDSWAP(hint16); + if (hint16 == 0xef53) { + if (!force) { + return false; + } else { + hint16 = 0; + hint16 = ENDSWAP(hint16); + device_write(&hint16, offset + 1080, sizeof(uint16_t)); + } + } + + return true; + +cleanup: + *err = true; + return false; +} + +static int bios_install(int argc, char *argv[]) { + int ok = EXIT_FAILURE; + bool force = false; + bool gpt2mbr_allowed = true; + bool uninstall_mode = false; + const uint8_t *bootloader_img = binary_limine_hdd_bin_data; + size_t bootloader_file_size = sizeof(binary_limine_hdd_bin_data); + uint8_t orig_mbr[70], timestamp[6]; + const char *part_ndx = NULL; + +#ifndef __BYTE_ORDER__ + uint32_t endcheck = 0x12345678; + uint8_t endbyte = *((uint8_t *)&endcheck); + bigendian = endbyte == 0x12; +#endif + + if (argc < 2) { + bios_install_usage(); +#ifdef IS_WINDOWS + system("pause"); +#endif + return EXIT_FAILURE; + } + + for (int i = 1; i < argc; i++) { + if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) { + bios_install_usage(); + return EXIT_SUCCESS; + } else if (strcmp(argv[i], "--quiet") == 0) { + quiet = true; + } else if (strcmp(argv[i], "--force") == 0) { + if (force && !quiet) { + fprintf(stderr, "warning: --force already set.\n"); + } + force = true; + } else if (strcmp(argv[i], "--no-gpt-to-mbr-isohybrid-conversion") == 0) { + gpt2mbr_allowed = false; + } else if (strcmp(argv[i], "--uninstall") == 0) { + if (uninstall_mode && !quiet) { + fprintf(stderr, "warning: --uninstall already set.\n"); + } + uninstall_mode = true; + } else if (memcmp(argv[i], "--uninstall-data-file=", 21) == 0) { + if (uninstall_file != NULL && !quiet) { + fprintf(stderr, "warning: --uninstall-data-file already set. Overriding...\n"); + } + uninstall_file = argv[i] + 21; + if (strlen(uninstall_file) == 0) { + fprintf(stderr, "error: Uninstall data file has a zero-length name!\n"); + return EXIT_FAILURE; + } + } else { + if (device != NULL) { // [GPT partition index] + part_ndx = argv[i]; // TODO: Make this non-positional? + } else if ((device = fopen(argv[i], "r+b")) == NULL) { // + perror_wrap("error: `%s`", argv[i]); + return EXIT_FAILURE; + } + } + } + + if (device == NULL) { + fprintf(stderr, "error: No device specified\n"); + bios_install_usage(); + return EXIT_FAILURE; + } + + if (!device_init()) { + goto uninstall_mode_cleanup; + } + + if (uninstall_mode) { + if (uninstall_file == NULL) { + fprintf(stderr, "error: Uninstall mode set but no --uninstall-data-file=... passed.\n"); + goto uninstall_mode_cleanup; + } + + if (!load_uninstall_data(uninstall_file)) { + goto uninstall_mode_cleanup; + } + + if (uninstall(false) == false) { + ok = EXIT_FAILURE; + } else { + ok = EXIT_SUCCESS; + } + goto uninstall_mode_cleanup; + } + + // Probe for GPT and logical block size + int gpt = 0; + struct gpt_table_header gpt_header; + uint64_t lb_guesses[] = { 512, 4096 }; + uint64_t lb_size = 0; + for (size_t i = 0; i < SIZEOF_ARRAY(lb_guesses); i++) { + device_read(&gpt_header, lb_guesses[i], sizeof(struct gpt_table_header)); + if (!strncmp(gpt_header.signature, "EFI PART", 8)) { + lb_size = lb_guesses[i]; + gpt = 1; + if (!quiet) { + fprintf(stderr, "Installing to GPT. Logical block size of %" PRIu64 " bytes.\n", + lb_guesses[i]); + } + break; + } + } + + struct gpt_table_header secondary_gpt_header; + if (gpt) { + if (!quiet) { + fprintf(stderr, "Secondary header at LBA 0x%" PRIx64 ".\n", + ENDSWAP(gpt_header.alternate_lba)); + } + device_read(&secondary_gpt_header, lb_size * ENDSWAP(gpt_header.alternate_lba), + sizeof(struct gpt_table_header)); + if (!strncmp(secondary_gpt_header.signature, "EFI PART", 8)) { + if (!quiet) { + fprintf(stderr, "Secondary header valid.\n"); + } + } else { + fprintf(stderr, "error: Secondary header not valid, aborting.\n"); + goto cleanup; + } + } + + // Check if this is an ISO w/ a GPT, in which case try converting it + // to MBR for improved compatibility with a whole range of hardware that + // does not like booting off of GPT in BIOS or CSM mode, and other + // broken hardware. + if (gpt && gpt2mbr_allowed == true) { + char iso_signature[5]; + device_read(iso_signature, 32769, 5); + + if (strncmp(iso_signature, "CD001", 5) != 0) { + goto no_mbr_conv; + } + + if (!quiet) { + fprintf(stderr, "Detected ISOHYBRID with a GUID partition table (GPT).\n"); + fprintf(stderr, "Converting to MBR for improved compatibility...\n"); + } + + // Gather the (up to 4) GPT partition to convert. + struct { + uint64_t lba_start; + uint64_t lba_end; + uint8_t chs_start[3]; + uint8_t chs_end[3]; + uint8_t type; + } part_to_conv[4]; + size_t part_to_conv_i = 0; + + for (int64_t i = 0; i < (int64_t)ENDSWAP(gpt_header.number_of_partition_entries); i++) { + struct gpt_entry gpt_entry; + device_read(&gpt_entry, + (ENDSWAP(gpt_header.partition_entry_lba) * lb_size) + + (i * ENDSWAP(gpt_header.size_of_partition_entry)), + sizeof(struct gpt_entry)); + + if (gpt_entry.unique_partition_guid[0] == 0 && + gpt_entry.unique_partition_guid[1] == 0) { + continue; + } + + if (ENDSWAP(gpt_entry.starting_lba) > UINT32_MAX) { + if (!quiet) { + fprintf(stderr, "Starting LBA of partition %" PRIi64 " is greater than UINT32_MAX, will not convert GPT.\n", i + 1); + } + goto no_mbr_conv; + } + part_to_conv[part_to_conv_i].lba_start = ENDSWAP(gpt_entry.starting_lba); + lba2chs(part_to_conv[part_to_conv_i].chs_start, part_to_conv[part_to_conv_i].lba_start); + + if (ENDSWAP(gpt_entry.ending_lba) > UINT32_MAX) { + if (!quiet) { + fprintf(stderr, "Ending LBA of partition %" PRIi64 " is greater than UINT32_MAX, will not convert GPT.\n", i + 1); + } + goto no_mbr_conv; + } + part_to_conv[part_to_conv_i].lba_end = ENDSWAP(gpt_entry.ending_lba); + lba2chs(part_to_conv[part_to_conv_i].chs_end, part_to_conv[part_to_conv_i].lba_end); + + int type = gpt2mbr_type(ENDSWAP(gpt_entry.partition_type_guid[0]), + ENDSWAP(gpt_entry.partition_type_guid[1])); + if (type == -1) { + if (!quiet) { + fprintf(stderr, "Cannot convert partition type for partition %" PRIi64 ", will not convert GPT.\n", i + 1); + } + goto no_mbr_conv; + } + + if (part_to_conv_i == 4) { + if (!quiet) { + fprintf(stderr, "GPT contains more than 4 partitions, will not convert.\n"); + } + goto no_mbr_conv; + } + + part_to_conv[part_to_conv_i].type = type; + + part_to_conv_i++; + } + + // Nuke the GPTs. + void *empty_lba = calloc(1, lb_size); + if (empty_lba == NULL) { + perror_wrap("error: bios_install(): malloc()"); + goto cleanup; + } + + // ... nuke primary GPT + protective MBR. + for (size_t i = 0; i < 34; i++) { + device_write(empty_lba, i * lb_size, lb_size); + } + + // ... nuke secondary GPT. + for (size_t i = 0; i < 33; i++) { + device_write(empty_lba, ((ENDSWAP(gpt_header.alternate_lba) - 32) + i) * lb_size, lb_size); + } + + free(empty_lba); + + // We're no longer GPT. + gpt = 0; + + // Generate pseudorandom MBR disk ID. + srand(time(NULL)); + for (size_t i = 0; i < 4; i++) { + uint8_t r = rand(); + device_write(&r, 0x1b8 + i, 1); + } + + // Write out the partition entries. + for (size_t i = 0; i < part_to_conv_i; i++) { + device_write(&part_to_conv[i].type, 0x1be + i * 16 + 0x04, 1); + uint32_t lba_start = ENDSWAP(part_to_conv[i].lba_start); + device_write(&lba_start, 0x1be + i * 16 + 0x08, 4); + uint32_t sect_count = ENDSWAP((part_to_conv[i].lba_end - part_to_conv[i].lba_start) + 1); + device_write(§_count, 0x1be + i * 16 + 0x0c, 4); + + device_write(part_to_conv[i].chs_start, 0x1be + i * 16 + 1, 3); + device_write(part_to_conv[i].chs_end, 0x1be + i * 16 + 5, 3); + } + + if (!quiet) { + fprintf(stderr, "Conversion successful.\n"); + } + } + +no_mbr_conv:; + + int mbr = 0; + if (gpt == 0) { + // Do all sanity checks on MBR + mbr = 1; + + uint8_t hint8 = 0; + uint32_t hint32 = 0; + + bool any_active = false; + + device_read(&hint8, 446, sizeof(uint8_t)); + if (hint8 != 0x00 && hint8 != 0x80) { + if (!force) { + mbr = 0; + } else { + hint8 &= 0x80; + device_write(&hint8, 446, sizeof(uint8_t)); + } + } + any_active = any_active || (hint8 & 0x80) != 0; + device_read(&hint8, 446 + 4, sizeof(uint8_t)); + if (hint8 != 0x00) { + device_read(&hint32, 446 + 8, sizeof(uint32_t)); + hint32 = ENDSWAP(hint32); + if (hint32 < 63) { + goto part_too_low; + } + } + device_read(&hint8, 462, sizeof(uint8_t)); + if (hint8 != 0x00 && hint8 != 0x80) { + if (!force) { + mbr = 0; + } else { + hint8 &= 0x80; + device_write(&hint8, 462, sizeof(uint8_t)); + } + } + any_active = any_active || (hint8 & 0x80) != 0; + device_read(&hint8, 462 + 4, sizeof(uint8_t)); + if (hint8 != 0x00) { + device_read(&hint32, 462 + 8, sizeof(uint32_t)); + hint32 = ENDSWAP(hint32); + if (hint32 < 63) { + goto part_too_low; + } + } + device_read(&hint8, 478, sizeof(uint8_t)); + if (hint8 != 0x00 && hint8 != 0x80) { + if (!force) { + mbr = 0; + } else { + hint8 &= 0x80; + device_write(&hint8, 478, sizeof(uint8_t)); + } + } + any_active = any_active || (hint8 & 0x80) != 0; + device_read(&hint8, 478 + 4, sizeof(uint8_t)); + if (hint8 != 0x00) { + device_read(&hint32, 478 + 8, sizeof(uint32_t)); + hint32 = ENDSWAP(hint32); + if (hint32 < 63) { + goto part_too_low; + } + } + device_read(&hint8, 494, sizeof(uint8_t)); + if (hint8 != 0x00 && hint8 != 0x80) { + if (!force) { + mbr = 0; + } else { + hint8 &= 0x80; + device_write(&hint8, 494, sizeof(uint8_t)); + } + } + any_active = any_active || (hint8 & 0x80) != 0; + device_read(&hint8, 494 + 4, sizeof(uint8_t)); + if (hint8 != 0x00) { + device_read(&hint32, 494 + 8, sizeof(uint32_t)); + hint32 = ENDSWAP(hint32); + if (hint32 < 63) { + goto part_too_low; + } + } + + if (0) { +part_too_low: + fprintf(stderr, "error: A partition's start sector is less than 63, aborting.\n"); + goto cleanup; + } + + if (mbr) { + bool err; + mbr = validate_or_force(0, force, &err); + if (err) { + goto cleanup; + } + } + + if (mbr && !any_active) { + if (!quiet) { + fprintf(stderr, "No active partition found, some systems may not boot.\n"); + fprintf(stderr, "Setting partition 1 as active to work around the issue...\n"); + } + hint8 = 0x80; + device_write(&hint8, 446, sizeof(uint8_t)); + } + } + + if (gpt == 0 && mbr == 0) { + fprintf(stderr, "error: Could not determine if the device has a valid partition table.\n"); + fprintf(stderr, " Please ensure the device has a valid MBR or GPT.\n"); + fprintf(stderr, " Alternatively, pass `--force` to override these checks.\n"); + fprintf(stderr, " **ONLY DO THIS AT YOUR OWN RISK, DATA LOSS MAY OCCUR!**\n"); + goto cleanup; + } + + // Default location of stage2 for MBR (in post MBR gap) + uint64_t stage2_loc = 512; + + if (gpt) { + struct gpt_entry gpt_entry; + uint32_t partition_num; + + if (part_ndx != NULL) { + sscanf(part_ndx, "%" SCNu32, &partition_num); + partition_num--; + if (partition_num > ENDSWAP(gpt_header.number_of_partition_entries)) { + fprintf(stderr, "error: Partition number is too large.\n"); + goto cleanup; + } + + device_read(&gpt_entry, + (ENDSWAP(gpt_header.partition_entry_lba) * lb_size) + + (partition_num * ENDSWAP(gpt_header.size_of_partition_entry)), + sizeof(struct gpt_entry)); + + if (gpt_entry.unique_partition_guid[0] == 0 && + gpt_entry.unique_partition_guid[1] == 0) { + fprintf(stderr, "error: No such partition: %" PRIu32 ".\n", partition_num + 1); + goto cleanup; + } + + if (!force && memcmp("Hah!IdontNeedEFI", &gpt_entry.partition_type_guid, 16) != 0) { + fprintf(stderr, "error: Chosen partition for BIOS boot code is not of BIOS boot partition type.\n"); + fprintf(stderr, " Pass `--force` to override this check.\n"); + fprintf(stderr, " **ONLY DO THIS AT YOUR OWN RISK, DATA LOSS MAY OCCUR!**\n"); + goto cleanup; + } + } else { + // Try to autodetect the BIOS boot partition + for (partition_num = 0; partition_num < ENDSWAP(gpt_header.number_of_partition_entries); partition_num++) { + device_read(&gpt_entry, + (ENDSWAP(gpt_header.partition_entry_lba) * lb_size) + + (partition_num * ENDSWAP(gpt_header.size_of_partition_entry)), + sizeof(struct gpt_entry)); + + if (memcmp("Hah!IdontNeedEFI", &gpt_entry.partition_type_guid, 16) == 0) { + if (!quiet) { + fprintf(stderr, "Autodetected partition %" PRIu32 " as BIOS boot partition.\n", partition_num + 1); + } + goto bios_boot_autodetected; + } + } + + fprintf(stderr, "error: Installing to a GPT device, but no BIOS boot partition specified or\n"); + fprintf(stderr, " detected.\n"); + goto cleanup; + } + +bios_boot_autodetected: + if (((ENDSWAP(gpt_entry.ending_lba) - ENDSWAP(gpt_entry.starting_lba)) + 1) * lb_size < 32768) { + fprintf(stderr, "error: Partition %" PRIu32 " is smaller than 32KiB.\n", partition_num + 1); + goto cleanup; + } + + stage2_loc = ENDSWAP(gpt_entry.starting_lba) * lb_size; + + bool err; + bool valid = validate_or_force(stage2_loc, force, &err); + if (err) { + goto cleanup; + } + + if (!valid) { + fprintf(stderr, "error: The partition selected to install the BIOS boot code to contains\n"); + fprintf(stderr, " a recognised filesystem.\n"); + fprintf(stderr, " Pass `--force` to override these checks.\n"); + fprintf(stderr, " **ONLY DO THIS AT YOUR OWN RISK, DATA LOSS MAY OCCUR!**\n"); + goto cleanup; + } + + if (!quiet) { + fprintf(stderr, "Installing BIOS boot code to partition %" PRIu32 ".\n", partition_num + 1); + } + } else { + if (!quiet) { + fprintf(stderr, "Installing to MBR.\n"); + } + } + + if (!quiet) { + fprintf(stderr, "Stage 2 to be located at byte offset 0x%" PRIx64 ".\n", stage2_loc); + } + + // Save original timestamp + device_read(timestamp, 218, 6); + + // Save the original partition table of the device + device_read(orig_mbr, 440, 70); + + // Write the bootsector from the bootloader to the device + device_write(&bootloader_img[0], 0, 512); + + // Write the rest of stage 2 to the device + device_write(&bootloader_img[512], stage2_loc, bootloader_file_size - 512); + + // Hardcode in the bootsector the location of stage 2 + stage2_loc = ENDSWAP(stage2_loc); + device_write(&stage2_loc, 0x1a4, sizeof(uint64_t)); + + // Write back timestamp + device_write(timestamp, 218, 6); + + // Write back the saved partition table to the device + device_write(orig_mbr, 440, 70); + + if (!device_flush_cache()) + goto cleanup; + + if (!quiet) { + fprintf(stderr, "Reminder: Remember to copy the limine-bios.sys file in either\n" + " the root, /boot, /limine, or /boot/limine directories of\n" + " one of the partitions on the device, or boot will fail!\n"); + + fprintf(stderr, "Limine BIOS stages installed successfully.\n"); + } + + ok = EXIT_SUCCESS; + +cleanup: + reverse_uninstall_data(); + if (ok != EXIT_SUCCESS) { + // If we failed, attempt to reverse install process + fprintf(stderr, "Install failed, undoing work...\n"); + uninstall(true); + } else if (uninstall_file != NULL) { + store_uninstall_data(uninstall_file); + } +uninstall_mode_cleanup: + free_uninstall_data(); + if (cache) + free(cache); + if (device != NULL) + fclose(device); + + return ok; +} +#endif + +#define CONFIG_B2SUM_SIGNATURE "++CONFIG_B2SUM_SIGNATURE++" + +static void enroll_config_usage(void) { + printf("usage: %s enroll-config \n", program_name); + printf("\n"); + printf(" --reset Remove enrolled BLAKE2B, will not check config integrity\n"); + printf("\n"); + printf(" --quiet Do not print verbose diagnostic messages\n"); + printf("\n"); + printf(" --help | -h Display this help message\n"); + printf("\n"); +} + +static int enroll_config(int argc, char *argv[]) { + int ret = EXIT_FAILURE; + + char *bootloader = NULL; + FILE *bootloader_file = NULL; + bool quiet = false; + bool reset = false; + + for (int i = 1; i < argc; i++) { + if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) { + enroll_config_usage(); + return EXIT_SUCCESS; + } else if (strcmp(argv[i], "--quiet") == 0) { + remove_arg(&argc, argv, i); + quiet = true; + } else if (strcmp(argv[i], "--reset") == 0) { + remove_arg(&argc, argv, i); + reset = true; + } + } + + if (argc <= (reset ? 1 : 2)) { + enroll_config_usage(); +#ifdef IS_WINDOWS + system("pause"); +#endif + return EXIT_FAILURE; + } + + if (!reset && strlen(argv[2]) != 128) { + fprintf(stderr, "error: BLAKE2B specified is not 128 characters long.\n"); + goto cleanup; + } + + bootloader_file = fopen(argv[1], "r+b"); + if (bootloader_file == NULL) { + perror_wrap("error: `%s`", argv[1]); + goto cleanup; + } + + if (fseek(bootloader_file, 0, SEEK_END) != 0) { + perror_wrap("error: enroll_config(): fseek()"); + goto cleanup; + } + size_t bootloader_size = ftell(bootloader_file); + rewind(bootloader_file); + + bootloader = malloc(bootloader_size); + if (bootloader == NULL) { + perror_wrap("error: enroll_config(): malloc()"); + goto cleanup; + } + + if (fread(bootloader, bootloader_size, 1, bootloader_file) != 1) { + perror_wrap("error: enroll_config(): fread()"); + goto cleanup; + } + + char *checksum_loc = NULL; + size_t checked_count = 0; + const char *config_b2sum_sign = CONFIG_B2SUM_SIGNATURE; + for (size_t i = 0; i < bootloader_size - ((sizeof(CONFIG_B2SUM_SIGNATURE) - 1) + 128) + 1; i++) { + if (bootloader[i] != config_b2sum_sign[checked_count]) { + checked_count = 0; + continue; + } + + checked_count++; + + if (checked_count == sizeof(CONFIG_B2SUM_SIGNATURE) - 1) { + checksum_loc = &bootloader[i + 1]; + break; + } + } + + if (checksum_loc == NULL) { + fprintf(stderr, "error: Checksum location not found in provided executable.\n"); + goto cleanup; + } + + if (!reset) { + memcpy(checksum_loc, argv[2], 128); + } else { + memset(checksum_loc, '0', 128); + } + + if (fseek(bootloader_file, 0, SEEK_SET) != 0) { + perror_wrap("error: enroll_config(): fseek()"); + goto cleanup; + } + if (fwrite(bootloader, bootloader_size, 1, bootloader_file) != 1) { + perror_wrap("error: enroll_config(): fwrite()"); + goto cleanup; + } + + if (!quiet) { + fprintf(stderr, "Config file BLAKE2B successfully %s.\n", reset ? "reset" : "enrolled"); + } + ret = EXIT_SUCCESS; + +cleanup: + if (bootloader != NULL) { + free(bootloader); + } + if (bootloader_file != NULL) { + fclose(bootloader_file); + } + return ret; +} + +#define LIMINE_VERSION "10.5.0" +#define LIMINE_COPYRIGHT "Copyright (C) 2019-2025 Mintsuki and contributors." + +static void version_usage(void) { + printf("usage: %s version [options...]\n", program_name); + printf("\n"); + printf(" --version-only Only print the version number without licensing info\n"); + printf(" and other distractions\n"); + printf("\n"); + printf(" --help | -h Display this help message\n"); + printf("\n"); +} + +static int version(int argc, char *argv[]) { + if (argc >= 2) { + if (strcmp(argv[1], "--help") == 0) { + version_usage(); + return EXIT_SUCCESS; + } else if (strcmp(argv[1], "--version-only") == 0) { + puts(LIMINE_VERSION); + return EXIT_SUCCESS; + } + } + + puts("Limine " LIMINE_VERSION); + puts(LIMINE_COPYRIGHT); + puts("Limine is distributed under the terms of the BSD-2-Clause license."); + puts("There is ABSOLUTELY NO WARRANTY, to the extent permitted by law."); + return EXIT_SUCCESS; +} + +static void general_usage(void) { + printf("usage: %s \n", program_name); + printf("\n"); + printf(" --print-datadir Print the directory containing the bootloader files\n"); + printf("\n"); + printf(" --version Print the Limine version (like the `version` command)\n"); + printf("\n"); + printf(" --help | -h Display this help message\n"); + printf("\n"); + printf("Commands: `help`, `version`, `bios-install`, `enroll-config`\n"); + printf("Use `--help` after specifying the command for command-specific help.\n"); +} + +static int print_datadir(void) { +#ifdef LIMINE_DATADIR + puts(LIMINE_DATADIR); + return EXIT_SUCCESS; +#else + fprintf(stderr, "error: Cannot print datadir for `limine` built standalone.\n"); + return EXIT_FAILURE; +#endif +} + +int main(int argc, char *argv[]) { + program_name = argv[0]; + + if (argc <= 1) { + general_usage(); + return EXIT_FAILURE; + } + + if (strcmp(argv[1], "help") == 0 + || strcmp(argv[1], "--help") == 0 + || strcmp(argv[1], "-h") == 0) { + general_usage(); + return EXIT_SUCCESS; + } else if (strcmp(argv[1], "bios-install") == 0) { +#ifndef LIMINE_NO_BIOS + return bios_install(argc - 1, &argv[1]); +#else + fprintf(stderr, "error: Limine has been compiled without BIOS support.\n"); + return EXIT_FAILURE; +#endif + } else if (strcmp(argv[1], "enroll-config") == 0) { + return enroll_config(argc - 1, &argv[1]); + } else if (strcmp(argv[1], "--print-datadir") == 0) { + return print_datadir(); + } else if (strcmp(argv[1], "version") == 0 + || strcmp(argv[1], "--version") == 0) { + return version(argc - 1, &argv[1]); + } + + general_usage(); + return EXIT_FAILURE; +}