From ec56835f51246e8d90204817e02199e58199c019 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Thu, 28 Aug 2008 16:59:34 +0000 Subject: [PATCH] Patch by David Powell: * Implement color palette generation for the boot splash images in the generate_boot_screen build tool. Only 4-bit screen support is missing now. * Adopted images.h with the new results from generate_boot_screen. This should fix black boot screens for graphics cards that don't support true color modes for the native resolution. I've tried to find the ticket, #2177 almost looks like the one, but it looks more like the mode is out of range if I understand the ticket right. Thanks a lot, David, and sorry it took so very long to apply your patch! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27223 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/kernel/boot/images.h | 2103 +++++++++++++++++- src/system/boot/platform/bios_ia32/video.cpp | 114 +- src/system/kernel/boot_splash.cpp | 54 +- src/tools/Jamfile | 10 +- src/tools/generate_boot_screen.cpp | 252 ++- 5 files changed, 2468 insertions(+), 65 deletions(-) diff --git a/headers/private/kernel/boot/images.h b/headers/private/kernel/boot/images.h index 49b96588f4..09a97e295d 100644 --- a/headers/private/kernel/boot/images.h +++ b/headers/private/kernel/boot/images.h @@ -8,7 +8,7 @@ static const int32 kSplashIconsPlacementY = 50; static const uint16 kSplashLogoWidth = 372; static const uint16 kSplashLogoHeight = 96; #ifndef __BOOTSPLASH_KERNEL__ -static uint8 kSplashLogoCompressedImage[] = { +static uint8 kSplashLogo24BitCompressedImage[] = { 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 75, 0, 9, 4, 5, 0, 20, 4, 127, 0, 50, 0, 9, 4, 22, 0, 9, 4, 38, 0, 10, 4, @@ -4845,7 +4845,7 @@ static uint8 kSplashLogoCompressedImage[] = { static const uint16 kSplashIconsWidth = 308; static const uint16 kSplashIconsHeight = 80; #ifndef __BOOTSPLASH_KERNEL__ -static uint8 kSplashIconsCompressedImage[] = { +static uint8 kSplashIcons24BitCompressedImage[] = { 7, 0, 132, 21, 31, 36, 38, 22, 39, 132, 38, 36, 31, 21, 14, 0, 132, 21, 31, 36, 38, 22, 39, 132, 38, 36, 31, 21, 14, 0, 132, 21, 31, 36, 38, 22, @@ -8803,3 +8803,2102 @@ static uint8 kSplashIconsCompressedImage[] = { }; #endif +#ifndef __BOOTSPLASH_KERNEL__ +static const uint8 k8BitPalette[] = { + 0x0, 0x0, 0x0, + 0xc, 0xc, 0xc, + 0x14, 0x14, 0x14, + 0x1c, 0x15, 0x15, + 0x1b, 0x1b, 0x1b, + 0x1c, 0x2b, 0x2, + 0x12, 0x25, 0x10, + 0x15, 0x2c, 0x11, + 0x1b, 0x24, 0x14, + 0x1b, 0x21, 0x18, + 0x1e, 0x2d, 0x15, + 0x1f, 0x30, 0x0, + 0x19, 0x37, 0x14, + 0x2a, 0x1b, 0x5, + 0x24, 0x1a, 0x15, + 0x2d, 0x21, 0x5, + 0x22, 0x2e, 0x1a, + 0x24, 0x39, 0xe, + 0x24, 0x38, 0x14, + 0x35, 0x23, 0x7, + 0x35, 0x2a, 0x1e, + 0x27, 0x27, 0x27, + 0x36, 0x36, 0x36, + 0x18, 0x41, 0x16, + 0x2c, 0x44, 0x7, + 0x2a, 0x49, 0x18, + 0x24, 0x57, 0x19, + 0x32, 0x40, 0x15, + 0x35, 0x53, 0xc, + 0x34, 0x53, 0x14, + 0x34, 0x59, 0x15, + 0x38, 0x5f, 0x13, + 0x3a, 0x5c, 0x18, + 0x26, 0x6a, 0x1d, + 0x28, 0x72, 0x1e, + 0x3c, 0x69, 0x17, + 0x32, 0x76, 0x1d, + 0x29, 0x7b, 0x21, + 0x5e, 0x0, 0x0, + 0x4d, 0x31, 0x13, + 0x55, 0x38, 0x0, + 0x58, 0x34, 0x14, + 0x40, 0x3d, 0x3d, + 0x6b, 0x15, 0x15, + 0x74, 0x0, 0x0, + 0x40, 0x54, 0x1c, + 0x45, 0x68, 0x14, + 0x48, 0x7a, 0x17, + 0x50, 0x6b, 0x1c, + 0x4e, 0x66, 0x22, + 0x54, 0x6e, 0x22, + 0x59, 0x74, 0x25, + 0x6d, 0x43, 0x13, + 0x79, 0x42, 0x13, + 0x7d, 0x53, 0x0, + 0x49, 0x49, 0x49, + 0x50, 0x4e, 0x4e, + 0x59, 0x59, 0x59, + 0x42, 0x5f, 0x6a, + 0x46, 0x62, 0x6e, + 0x4c, 0x66, 0x70, + 0x54, 0x6b, 0x76, + 0x68, 0x68, 0x68, + 0x71, 0x6e, 0x6e, + 0x77, 0x76, 0x76, + 0x5a, 0x7b, 0x89, + 0x2e, 0x8c, 0x25, + 0x35, 0x8c, 0x23, + 0x35, 0x9c, 0x28, + 0x3a, 0xa3, 0x2b, + 0x4a, 0x86, 0x1a, + 0x55, 0x86, 0xc, + 0x50, 0x85, 0x16, + 0x52, 0x86, 0x1a, + 0x52, 0x8a, 0x1b, + 0x5e, 0x90, 0x7, + 0x59, 0x98, 0x1a, + 0x5f, 0xa1, 0x1a, + 0x47, 0xaa, 0x2a, + 0x43, 0xa4, 0x32, + 0x57, 0xac, 0x23, + 0x55, 0xac, 0x3d, + 0x58, 0xb5, 0x28, + 0x5f, 0xb3, 0x36, + 0x64, 0x9b, 0xc, + 0x61, 0x9d, 0x1a, + 0x6a, 0x8a, 0x2b, + 0x76, 0x9b, 0x32, + 0x63, 0xa0, 0x15, + 0x66, 0xa7, 0x18, + 0x62, 0xac, 0x1c, + 0x68, 0xad, 0x1a, + 0x69, 0xb5, 0x1e, + 0x76, 0xb8, 0xd, + 0x71, 0xb5, 0x14, + 0x75, 0xbc, 0x16, + 0x74, 0xbf, 0x1a, + 0x63, 0xbd, 0x25, + 0x5c, 0xab, 0x40, + 0x7b, 0x9f, 0x75, + 0x70, 0xa6, 0x62, + 0x79, 0xa9, 0x74, + 0x79, 0xb3, 0x6a, + 0x72, 0xc3, 0x1f, + 0x76, 0xcb, 0x1f, + 0x78, 0xc6, 0x1c, + 0x7a, 0xcd, 0x1d, + 0x7c, 0xd2, 0x1e, + 0x6a, 0xc3, 0x24, + 0x73, 0xcb, 0x22, + 0x7b, 0xd2, 0x21, + 0x6b, 0x88, 0x95, + 0x6a, 0x93, 0xa4, + 0x70, 0x97, 0xa8, + 0x7e, 0xa6, 0xb7, + 0x8b, 0x0, 0x0, + 0x8a, 0x18, 0x18, + 0x99, 0x18, 0x18, + 0x84, 0x27, 0x27, + 0xa3, 0x1c, 0x1c, + 0xaf, 0x35, 0x35, + 0xb3, 0x2b, 0x2b, + 0xb6, 0x35, 0x35, + 0x80, 0x41, 0x17, + 0x84, 0x53, 0x10, + 0x9d, 0x56, 0x12, + 0x94, 0x62, 0x0, + 0xad, 0x5c, 0x12, + 0xad, 0x66, 0xe, + 0xab, 0x70, 0x0, + 0xab, 0x76, 0x15, + 0xb3, 0x6e, 0xe, + 0xb8, 0x7a, 0x0, + 0x81, 0x7e, 0x7e, + 0x90, 0x75, 0x6a, + 0xc9, 0x3a, 0x3a, + 0xf8, 0x2b, 0x27, + 0xc1, 0x6e, 0xd, + 0xcf, 0x67, 0x10, + 0xc7, 0x7b, 0xc, + 0xdb, 0x77, 0xc, + 0xe6, 0x78, 0xa, + 0xfb, 0x7d, 0x4, + 0xdb, 0x45, 0x45, + 0xd6, 0x6b, 0x66, + 0xe0, 0x5a, 0x5a, + 0x8c, 0xb6, 0x3b, + 0x99, 0xbc, 0x2e, + 0x82, 0x8f, 0x6e, + 0x90, 0x92, 0x69, + 0x8b, 0xbc, 0x50, + 0x85, 0xa1, 0x7f, + 0x83, 0xce, 0x11, + 0x88, 0xd0, 0xa, + 0x86, 0xd5, 0x14, + 0x81, 0xd6, 0x1d, + 0x84, 0xda, 0x1e, + 0x89, 0xdf, 0x1c, + 0x90, 0xdd, 0xd, + 0x87, 0xdc, 0x26, + 0x80, 0xd2, 0x38, + 0x9f, 0xc9, 0x3b, + 0x8c, 0xe2, 0x1b, + 0x98, 0xe9, 0xe, + 0x95, 0xea, 0x15, + 0x9d, 0xf3, 0x13, + 0xa1, 0xf6, 0xf, + 0xa2, 0xf6, 0x1c, + 0x86, 0xd2, 0x4b, + 0x9d, 0xc8, 0x41, + 0x90, 0xdc, 0x4a, + 0x9f, 0xd0, 0x40, + 0x9c, 0xdd, 0x68, + 0xa7, 0xcf, 0x40, + 0xa8, 0xd4, 0x45, + 0xb2, 0xd5, 0x4e, + 0xb5, 0xd9, 0x5a, + 0xcc, 0x87, 0x0, + 0xc8, 0x8d, 0x1c, + 0xd9, 0x87, 0x6, + 0xe5, 0x89, 0x9, + 0xec, 0x90, 0x7, + 0xfe, 0x88, 0x0, + 0xfe, 0x97, 0x0, + 0xfb, 0xa5, 0x0, + 0xfc, 0xac, 0x15, + 0xff, 0xb5, 0x27, + 0xff, 0xba, 0x35, + 0xd7, 0xab, 0x55, + 0xd0, 0xa1, 0x7e, + 0xd7, 0xd6, 0x38, + 0xd7, 0xd9, 0x48, + 0xda, 0xde, 0x59, + 0xc6, 0xdc, 0x64, + 0xd8, 0xe0, 0x6e, + 0xff, 0xc0, 0x46, + 0xff, 0xca, 0x65, + 0xfe, 0xce, 0x72, + 0xff, 0xd0, 0x74, + 0xf9, 0xe1, 0x4a, + 0xe4, 0xe3, 0x6f, + 0xee, 0xe5, 0x72, + 0xf9, 0xe6, 0x67, + 0xf4, 0xe8, 0x7e, + 0x84, 0x84, 0x84, + 0x8d, 0x9a, 0x88, + 0x98, 0x98, 0x98, + 0x8e, 0xa3, 0x8a, + 0x98, 0xb5, 0x93, + 0x83, 0xaa, 0xbb, + 0xa8, 0x93, 0x85, + 0xb8, 0xa4, 0x9e, + 0xa8, 0xa8, 0xa8, + 0xaf, 0xb0, 0xad, + 0xb1, 0xab, 0xa7, + 0xb0, 0xb8, 0xaf, + 0xb7, 0xb8, 0xb7, + 0x82, 0xae, 0xc1, + 0x8f, 0xb8, 0xca, + 0x97, 0xbe, 0xcf, + 0x9b, 0xbf, 0xd0, + 0xa7, 0xd6, 0x8d, + 0xab, 0xde, 0x89, + 0xbf, 0xc0, 0xbf, + 0xb6, 0xdb, 0xa2, + 0x9b, 0xc2, 0xd3, + 0xa9, 0xcc, 0xdb, + 0xb8, 0xd8, 0xe6, + 0xc3, 0x97, 0x90, + 0xc3, 0xb4, 0xb1, + 0xea, 0x8e, 0x8e, + 0xc3, 0xc0, 0xbe, + 0xc6, 0xde, 0xba, + 0xff, 0xd4, 0x80, + 0xf7, 0xd5, 0x92, + 0xf8, 0xeb, 0x8c, + 0xff, 0xe2, 0xaa, + 0xff, 0xe7, 0xb7, + 0xc8, 0xc8, 0xc8, + 0xd6, 0xd6, 0xd6, + 0xd5, 0xe0, 0xcf, + 0xd8, 0xe3, 0xd3, + 0xdb, 0xe2, 0xd8, + 0xca, 0xe6, 0xf3, + 0xd2, 0xe5, 0xed, + 0xd5, 0xed, 0xf8, + 0xd9, 0xf2, 0xfd, + 0xe2, 0xe7, 0xdf, + 0xe4, 0xe4, 0xe4, + 0xe6, 0xe8, 0xe4, + 0xeb, 0xeb, 0xeb, + 0xf3, 0xf3, 0xf3, + 0xf1, 0xf6, 0xf8, + 0xf3, 0xf8, 0xf9, + 0xfe, 0xfe, 0xfe, + 0x2, 0xd0, 0xc0, + }; + +static uint8 kSplashLogo8BitCompressedImage[] = { + 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, + 127, 0, 127, 0, 127, 0, 127, 0, 85, 0, 11, 1, + 127, 0, 127, 0, 6, 0, 7, 1, 41, 0, 8, 1, + 23, 0, 3, 1, 24, 0, 4, 1, 26, 0, 6, 1, + 26, 0, 6, 1, 118, 0, 129, 1, 7, 0, 2, 1, + 21, 0, 2, 1, 7, 0, 129, 1, 36, 0, 129, 1, + 12, 0, 129, 1, 34, 0, 2, 1, 10, 0, 129, 1, + 18, 0, 129, 1, 4, 0, 34, 1, 3, 0, 129, 1, + 13, 0, 2, 1, 10, 0, 2, 1, 18, 0, 2, 1, + 10, 0, 2, 1, 111, 0, 129, 1, 3, 0, 8, 1, + 3, 0, 2, 1, 14, 0, 129, 1, 4, 0, 7, 1, + 3, 0, 129, 1, 30, 0, 2, 1, 2, 0, 12, 1, + 2, 0, 2, 1, 29, 0, 129, 1, 3, 0, 10, 1, + 3, 0, 129, 1, 12, 0, 2, 1, 2, 0, 41, 1, + 2, 0, 129, 1, 8, 0, 129, 1, 4, 0, 11, 1, + 3, 0, 129, 1, 13, 0, 129, 1, 3, 0, 10, 1, + 2, 0, 2, 1, 108, 0, 130, 1, 0, 14, 1, 17, + 0, 14, 1, 2, 0, 129, 1, 27, 0, 130, 1, 0, + 17, 1, 2, 0, 129, 1, 26, 0, 129, 1, 2, 0, + 16, 1, 2, 0, 129, 1, 12, 0, 42, 1, 129, 0, + 2, 1, 4, 0, 2, 1, 4, 0, 18, 1, 2, 0, + 129, 1, 9, 0, 129, 1, 2, 0, 15, 1, 2, 0, + 129, 1, 105, 0, 129, 1, 2, 0, 18, 1, 3, 0, + 129, 1, 8, 0, 17, 1, 2, 0, 129, 1, 24, 0, + 129, 1, 2, 0, 20, 1, 2, 0, 129, 1, 23, 0, + 130, 1, 0, 20, 1, 4, 0, 3, 1, 3, 0, 50, + 1, 5, 0, 23, 1, 3, 0, 129, 1, 3, 0, 129, + 1, 3, 0, 19, 1, 107, 0, 22, 1, 7, 0, 22, + 1, 130, 0, 1, 22, 0, 130, 1, 0, 24, 1, 25, + 0, 24, 1, 5, 0, 2, 1, 129, 0, 48, 1, 129, + 0, 5, 1, 129, 0, 25, 1, 5, 0, 23, 1, 103, + 0, 130, 1, 0, 22, 1, 129, 0, 30, 1, 130, 0, + 1, 20, 0, 130, 1, 0, 26, 1, 130, 0, 1, 19, + 0, 130, 1, 0, 24, 1, 129, 0, 5, 1, 129, 0, + 18, 1, 129, 2, 6, 1, 12, 2, 50, 1, 129, 0, + 23, 1, 101, 0, 130, 1, 0, 26, 1, 3, 0, 26, + 1, 130, 0, 1, 18, 0, 130, 1, 0, 9, 1, 3, + 2, 3, 1, 4, 2, 9, 1, 130, 0, 1, 19, 0, + 42, 1, 3, 2, 3, 1, 6, 2, 2, 1, 12, 2, + 2, 1, 2, 2, 72, 1, 130, 0, 1, 99, 0, 57, + 1, 130, 0, 1, 16, 0, 130, 1, 0, 8, 1, 130, + 2, 1, 5, 2, 129, 204, 4, 2, 130, 1, 2, 8, + 1, 130, 0, 1, 17, 0, 10, 1, 7, 2, 23, 1, + 2, 2, 129, 1, 30, 2, 130, 1, 2, 23, 1, 6, + 2, 26, 1, 6, 2, 10, 1, 130, 0, 1, 96, 0, + 130, 1, 0, 9, 1, 8, 2, 23, 1, 8, 2, 10, + 1, 18, 0, 7, 1, 130, 2, 1, 6, 2, 131, 56, + 253, 57, 7, 2, 7, 1, 16, 0, 130, 1, 0, 8, + 1, 2, 2, 129, 1, 5, 2, 2, 1, 129, 2, 20, + 1, 130, 2, 1, 33, 2, 129, 1, 2, 2, 19, 1, + 2, 2, 2, 1, 3, 2, 2, 1, 2, 2, 21, 1, + 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 9, 1, + 98, 0, 8, 1, 2, 2, 129, 1, 6, 2, 129, 1, + 2, 2, 19, 1, 2, 2, 129, 1, 6, 2, 129, 1, + 2, 2, 8, 1, 130, 0, 1, 15, 0, 7, 1, 9, + 2, 131, 216, 254, 223, 8, 2, 6, 1, 130, 0, 1, + 15, 0, 8, 1, 130, 2, 1, 10, 2, 130, 1, 2, + 16, 1, 130, 2, 1, 37, 2, 18, 1, 129, 2, 2, + 1, 9, 2, 129, 1, 2, 2, 17, 1, 2, 2, 129, + 1, 8, 2, 129, 1, 2, 2, 7, 1, 130, 0, 1, + 95, 0, 8, 1, 130, 2, 1, 2, 2, 7, 254, 129, + 2, 2, 1, 129, 2, 16, 1, 130, 2, 1, 2, 2, + 7, 254, 131, 2, 1, 2, 8, 1, 14, 0, 130, 1, + 0, 6, 1, 9, 2, 133, 22, 251, 254, 251, 42, 8, + 2, 6, 1, 130, 0, 1, 12, 0, 130, 1, 0, 7, + 1, 4, 2, 7, 254, 3, 2, 130, 1, 2, 14, 1, + 130, 2, 1, 4, 2, 7, 254, 12, 4, 9, 2, 129, + 212, 7, 254, 130, 251, 63, 13, 1, 130, 2, 1, 3, + 2, 7, 254, 3, 2, 130, 1, 2, 15, 1, 130, 2, + 1, 3, 2, 7, 254, 2, 2, 130, 1, 2, 7, 1, + 96, 0, 7, 1, 130, 2, 1, 3, 2, 7, 254, 3, + 2, 130, 1, 2, 13, 1, 130, 2, 1, 4, 2, 7, + 254, 4, 2, 7, 1, 130, 0, 1, 13, 0, 6, 1, + 7, 2, 3, 4, 129, 212, 3, 254, 129, 212, 2, 4, + 7, 2, 6, 1, 14, 0, 7, 1, 5, 2, 7, 254, + 7, 2, 11, 1, 7, 2, 7, 254, 19, 4, 130, 2, + 212, 7, 254, 130, 251, 63, 12, 1, 7, 2, 7, 254, + 7, 2, 11, 1, 130, 2, 1, 5, 2, 7, 254, 3, + 2, 130, 1, 2, 6, 1, 130, 0, 1, 92, 0, 8, + 1, 130, 2, 1, 4, 2, 7, 254, 4, 2, 130, 1, + 2, 11, 1, 130, 2, 1, 5, 2, 7, 254, 5, 2, + 7, 1, 13, 0, 6, 1, 6, 2, 5, 4, 129, 250, + 3, 254, 129, 250, 4, 4, 6, 2, 7, 1, 10, 0, + 130, 1, 0, 6, 1, 6, 2, 7, 254, 6, 2, 130, + 1, 2, 9, 1, 8, 2, 7, 254, 19, 4, 129, 206, + 7, 254, 132, 251, 64, 1, 2, 10, 1, 130, 2, 1, + 6, 2, 7, 254, 8, 2, 9, 1, 130, 2, 1, 6, + 2, 7, 254, 4, 2, 130, 1, 2, 6, 1, 94, 0, + 6, 1, 130, 2, 1, 5, 2, 7, 254, 5, 2, 130, + 1, 2, 9, 1, 130, 2, 1, 6, 2, 7, 254, 6, + 2, 6, 1, 130, 0, 1, 9, 0, 130, 1, 0, 5, + 1, 6, 2, 5, 4, 129, 205, 5, 254, 129, 206, 4, + 4, 6, 2, 5, 1, 130, 0, 1, 10, 0, 6, 1, + 7, 2, 7, 254, 7, 2, 130, 1, 2, 7, 1, 8, + 2, 129, 4, 7, 254, 18, 4, 129, 206, 7, 254, 133, + 251, 64, 2, 1, 2, 9, 1, 130, 2, 1, 7, 2, + 7, 254, 7, 2, 130, 1, 2, 7, 1, 130, 2, 1, + 7, 2, 7, 254, 6, 2, 6, 1, 94, 0, 6, 1, + 7, 2, 7, 254, 6, 2, 129, 1, 2, 2, 6, 1, + 130, 2, 1, 7, 2, 7, 254, 5, 2, 130, 1, 2, + 6, 1, 11, 0, 5, 1, 6, 2, 6, 4, 129, 242, + 5, 254, 129, 248, 5, 4, 4, 2, 130, 1, 2, 5, + 1, 9, 0, 130, 1, 0, 7, 1, 6, 2, 7, 254, + 8, 2, 130, 1, 2, 4, 1, 130, 2, 1, 7, 2, + 2, 4, 7, 254, 17, 4, 129, 206, 7, 254, 130, 251, + 64, 3, 2, 9, 1, 129, 2, 2, 1, 7, 2, 7, + 254, 8, 2, 130, 1, 2, 5, 1, 130, 2, 1, 8, + 2, 7, 254, 7, 2, 7, 1, 90, 0, 7, 1, 8, + 2, 7, 254, 7, 2, 2, 1, 129, 2, 3, 1, 2, + 2, 129, 1, 8, 2, 7, 254, 7, 2, 6, 1, 9, + 0, 130, 1, 0, 6, 1, 4, 2, 6, 4, 129, 64, + 7, 254, 129, 133, 5, 4, 5, 2, 7, 1, 8, 0, + 6, 1, 8, 2, 7, 254, 129, 4, 8, 2, 129, 1, + 4, 2, 2, 1, 6, 2, 3, 4, 7, 254, 16, 4, + 129, 206, 7, 254, 130, 251, 64, 4, 2, 130, 1, 2, + 7, 1, 130, 2, 1, 7, 2, 129, 4, 7, 254, 129, + 4, 8, 2, 129, 1, 5, 2, 129, 1, 8, 2, 129, + 4, 7, 254, 6, 2, 8, 1, 91, 0, 7, 1, 6, + 2, 129, 4, 7, 254, 8, 2, 2, 1, 3, 2, 2, + 1, 8, 2, 129, 4, 7, 254, 6, 2, 130, 1, 2, + 5, 1, 130, 0, 1, 8, 0, 5, 1, 5, 2, 7, + 4, 129, 238, 7, 254, 129, 239, 7, 4, 4, 2, 5, + 1, 130, 0, 1, 5, 0, 130, 1, 0, 6, 1, 6, + 2, 2, 4, 7, 254, 2, 4, 8, 2, 4, 1, 7, + 2, 4, 4, 7, 254, 15, 4, 129, 205, 7, 254, 130, + 251, 64, 5, 2, 130, 1, 2, 6, 1, 130, 2, 1, + 7, 2, 2, 4, 7, 254, 2, 4, 8, 2, 5, 1, + 8, 2, 2, 4, 7, 254, 129, 4, 7, 2, 5, 1, + 92, 0, 5, 1, 7, 2, 2, 4, 7, 254, 129, 4, + 8, 2, 5, 1, 8, 2, 2, 4, 7, 254, 129, 4, + 7, 2, 6, 1, 130, 0, 1, 6, 0, 7, 1, 4, + 2, 6, 4, 129, 57, 9, 254, 129, 57, 6, 4, 3, + 2, 7, 1, 130, 0, 1, 5, 0, 6, 1, 7, 2, + 2, 4, 7, 254, 3, 4, 8, 2, 129, 1, 8, 2, + 5, 4, 7, 254, 3, 4, 129, 21, 10, 4, 129, 204, + 7, 254, 130, 251, 64, 6, 2, 130, 1, 2, 6, 1, + 130, 2, 1, 6, 2, 3, 4, 7, 254, 3, 4, 8, + 2, 3, 1, 8, 2, 3, 4, 7, 254, 2, 4, 6, + 2, 5, 1, 92, 0, 5, 1, 7, 2, 2, 4, 7, + 254, 2, 4, 19, 2, 3, 4, 7, 254, 2, 4, 5, + 2, 7, 1, 130, 0, 1, 6, 0, 5, 1, 5, 2, + 7, 4, 129, 223, 9, 254, 129, 231, 6, 4, 5, 2, + 6, 1, 130, 0, 1, 4, 0, 6, 1, 6, 2, 3, + 4, 7, 254, 4, 4, 16, 2, 5, 4, 7, 254, 6, + 21, 129, 4, 2, 21, 4, 4, 129, 204, 7, 254, 131, + 253, 64, 4, 6, 2, 9, 1, 7, 2, 3, 4, 7, + 254, 3, 4, 18, 2, 4, 4, 7, 254, 3, 4, 4, + 2, 6, 1, 130, 0, 1, 88, 0, 130, 1, 0, 5, + 1, 6, 2, 3, 4, 7, 254, 2, 4, 19, 2, 3, + 4, 7, 254, 3, 4, 6, 2, 6, 1, 130, 0, 1, + 4, 0, 6, 1, 3, 2, 8, 4, 130, 42, 251, 9, + 254, 130, 253, 55, 6, 4, 4, 2, 6, 1, 5, 0, + 8, 1, 4, 2, 4, 4, 7, 254, 4, 4, 15, 2, + 6, 4, 7, 254, 11, 21, 131, 4, 204, 253, 6, 254, + 130, 253, 64, 2, 4, 5, 2, 130, 1, 2, 6, 1, + 130, 2, 1, 6, 2, 4, 4, 7, 254, 4, 4, 17, + 2, 4, 4, 7, 254, 3, 4, 6, 2, 6, 1, 88, + 0, 6, 1, 6, 2, 4, 4, 7, 254, 3, 4, 17, + 2, 4, 4, 7, 254, 3, 4, 6, 2, 6, 1, 5, + 0, 6, 1, 5, 2, 7, 4, 129, 212, 11, 254, 129, + 213, 6, 4, 5, 2, 7, 1, 2, 0, 7, 1, 6, + 2, 4, 4, 7, 254, 5, 4, 13, 2, 7, 4, 7, + 254, 11, 21, 130, 133, 253, 6, 254, 130, 253, 64, 3, + 4, 5, 2, 130, 1, 2, 6, 1, 130, 2, 1, 6, + 2, 4, 4, 7, 254, 5, 4, 7, 2, 129, 1, 7, + 2, 5, 4, 7, 254, 3, 4, 6, 2, 5, 1, 89, + 0, 6, 1, 6, 2, 4, 4, 7, 254, 4, 4, 15, + 2, 5, 4, 7, 254, 3, 4, 6, 2, 7, 1, 3, + 0, 7, 1, 3, 2, 9, 4, 129, 250, 11, 254, 130, + 251, 21, 7, 4, 4, 2, 15, 1, 6, 2, 4, 4, + 7, 254, 5, 4, 13, 2, 7, 4, 7, 254, 10, 21, + 130, 133, 253, 6, 254, 130, 253, 64, 3, 4, 6, 2, + 130, 1, 2, 6, 1, 130, 2, 1, 5, 2, 5, 4, + 7, 254, 5, 4, 15, 2, 5, 4, 7, 254, 4, 4, + 5, 2, 5, 1, 89, 0, 6, 1, 6, 2, 4, 4, + 7, 254, 4, 4, 15, 2, 5, 4, 7, 254, 4, 4, + 4, 2, 17, 1, 5, 2, 7, 4, 129, 206, 6, 254, + 129, 248, 6, 254, 129, 206, 6, 4, 5, 2, 8, 1, + 129, 0, 6, 1, 5, 2, 5, 4, 7, 254, 5, 4, + 12, 2, 8, 4, 7, 254, 9, 21, 130, 64, 253, 6, + 254, 130, 253, 64, 4, 4, 7, 2, 7, 1, 130, 2, + 1, 5, 2, 5, 4, 7, 254, 5, 4, 6, 2, 130, + 42, 134, 7, 2, 5, 4, 7, 254, 4, 4, 4, 2, + 6, 1, 90, 0, 5, 1, 5, 2, 5, 4, 7, 254, + 4, 4, 14, 2, 6, 4, 7, 254, 4, 4, 6, 2, + 16, 1, 3, 2, 8, 4, 129, 247, 5, 254, 131, 253, + 56, 251, 5, 254, 129, 248, 7, 4, 4, 2, 16, 1, + 4, 2, 5, 4, 7, 254, 6, 4, 11, 2, 8, 4, + 7, 254, 8, 21, 130, 64, 251, 6, 254, 130, 253, 64, + 5, 4, 5, 2, 9, 1, 130, 2, 1, 5, 2, 5, + 4, 7, 254, 5, 4, 5, 2, 131, 51, 233, 189, 7, + 2, 5, 4, 7, 254, 4, 4, 6, 2, 4, 1, 90, + 0, 5, 1, 5, 2, 5, 4, 7, 254, 5, 4, 13, + 2, 6, 4, 5, 254, 2, 253, 4, 4, 5, 2, 15, + 1, 5, 2, 7, 4, 129, 133, 6, 254, 131, 223, 21, + 216, 6, 254, 129, 204, 6, 4, 5, 2, 15, 1, 4, + 2, 5, 4, 7, 254, 6, 4, 11, 2, 7, 4, 129, + 21, 7, 254, 7, 21, 130, 63, 251, 6, 254, 130, 253, + 64, 6, 4, 6, 2, 8, 1, 6, 2, 6, 4, 7, + 254, 5, 4, 5, 2, 131, 22, 233, 189, 7, 2, 5, + 4, 7, 254, 5, 4, 5, 2, 4, 1, 90, 0, 6, + 1, 4, 2, 5, 4, 7, 254, 5, 4, 13, 2, 6, + 4, 2, 253, 4, 251, 129, 250, 4, 4, 5, 2, 16, + 1, 3, 2, 8, 4, 129, 239, 6, 254, 131, 62, 21, + 57, 6, 254, 129, 239, 7, 4, 3, 2, 14, 1, 6, + 2, 5, 4, 7, 254, 6, 4, 10, 2, 8, 4, 129, + 21, 7, 254, 6, 21, 130, 63, 251, 6, 254, 130, 253, + 133, 7, 4, 4, 2, 130, 1, 2, 8, 1, 6, 2, + 6, 4, 7, 254, 4, 4, 7, 2, 130, 188, 197, 6, + 2, 130, 4, 2, 4, 4, 7, 254, 5, 4, 5, 2, + 4, 1, 90, 0, 5, 1, 5, 2, 5, 4, 7, 254, + 5, 4, 15, 2, 4, 4, 2, 250, 131, 249, 248, 242, + 2, 240, 2, 32, 130, 29, 10, 4, 2, 15, 1, 5, + 2, 7, 4, 129, 57, 6, 254, 129, 239, 3, 21, 129, + 238, 6, 254, 129, 62, 6, 4, 5, 2, 12, 1, 5, + 2, 6, 4, 7, 254, 7, 4, 9, 2, 7, 4, 2, + 21, 7, 254, 5, 21, 130, 62, 251, 6, 254, 130, 253, + 133, 7, 4, 6, 2, 9, 1, 6, 2, 6, 4, 7, + 254, 6, 4, 5, 2, 131, 149, 233, 56, 5, 2, 6, + 4, 7, 254, 5, 4, 5, 2, 4, 1, 90, 0, 5, + 1, 5, 2, 5, 4, 7, 254, 5, 4, 13, 2, 4, + 4, 134, 16, 85, 222, 172, 170, 159, 3, 157, 4, 156, + 133, 106, 96, 89, 72, 17, 15, 1, 4, 2, 7, 4, + 129, 223, 6, 254, 129, 204, 3, 21, 129, 63, 6, 254, + 129, 238, 7, 4, 3, 2, 130, 1, 2, 11, 1, 5, + 2, 6, 4, 7, 254, 7, 4, 9, 2, 8, 4, 129, + 21, 7, 254, 4, 21, 130, 62, 251, 6, 254, 131, 253, + 133, 21, 7, 4, 4, 2, 130, 1, 2, 9, 1, 130, + 2, 1, 4, 2, 6, 4, 7, 254, 6, 4, 5, 2, + 131, 45, 198, 149, 5, 2, 6, 4, 7, 254, 5, 4, + 5, 2, 5, 1, 89, 0, 5, 1, 5, 2, 5, 4, + 7, 254, 6, 4, 12, 2, 133, 16, 73, 25, 4, 91, + 7, 156, 7, 155, 131, 156, 155, 85, 13, 1, 5, 2, + 7, 4, 130, 42, 253, 5, 254, 129, 248, 5, 21, 129, + 242, 5, 254, 130, 253, 56, 6, 4, 5, 2, 11, 1, + 5, 2, 6, 4, 7, 254, 7, 4, 9, 2, 7, 4, + 2, 21, 7, 254, 3, 21, 130, 62, 250, 6, 254, 130, + 253, 133, 2, 21, 7, 4, 4, 2, 11, 1, 130, 2, + 1, 4, 2, 6, 4, 7, 254, 6, 4, 6, 2, 2, + 188, 5, 2, 6, 4, 7, 254, 5, 4, 5, 2, 6, + 1, 88, 0, 5, 1, 4, 2, 6, 4, 7, 254, 6, + 4, 10, 2, 134, 46, 92, 155, 156, 8, 25, 5, 155, + 10, 107, 131, 106, 35, 1, 2, 2, 10, 1, 130, 2, + 1, 4, 2, 7, 4, 129, 213, 6, 254, 129, 206, 5, + 21, 129, 206, 6, 254, 129, 216, 6, 4, 6, 2, 10, + 1, 5, 2, 6, 4, 7, 254, 7, 4, 8, 2, 7, + 4, 3, 21, 7, 254, 2, 21, 130, 57, 250, 6, 254, + 130, 253, 133, 3, 21, 7, 4, 5, 2, 12, 1, 4, + 2, 6, 4, 7, 254, 6, 4, 6, 2, 131, 149, 197, + 20, 5, 2, 5, 4, 7, 254, 5, 4, 5, 2, 6, + 1, 88, 0, 4, 1, 4, 2, 7, 4, 7, 254, 6, + 4, 7, 2, 132, 18, 76, 105, 156, 2, 155, 131, 107, + 2, 47, 14, 110, 130, 104, 31, 2, 1, 129, 2, 11, + 1, 5, 2, 7, 4, 130, 21, 250, 5, 254, 130, 251, + 22, 6, 21, 129, 250, 5, 254, 130, 251, 22, 7, 4, + 4, 2, 11, 1, 4, 2, 6, 4, 7, 254, 7, 4, + 8, 2, 7, 4, 3, 21, 7, 254, 131, 21, 57, 250, + 6, 254, 130, 253, 133, 4, 21, 7, 4, 4, 2, 13, + 1, 4, 2, 6, 4, 7, 254, 5, 4, 7, 2, 131, + 52, 197, 149, 3, 2, 7, 4, 7, 254, 5, 4, 5, + 2, 6, 1, 88, 0, 4, 1, 5, 2, 6, 4, 7, + 254, 5, 4, 6, 2, 132, 29, 89, 107, 155, 2, 107, + 3, 110, 130, 18, 76, 2, 104, 11, 109, 130, 104, 47, + 3, 1, 129, 2, 10, 1, 6, 2, 7, 4, 129, 206, + 6, 254, 129, 216, 7, 21, 129, 212, 6, 254, 129, 212, + 6, 4, 6, 2, 8, 1, 130, 2, 1, 4, 2, 6, + 4, 7, 254, 8, 4, 7, 2, 7, 4, 3, 21, 7, + 254, 130, 57, 250, 6, 254, 130, 253, 133, 5, 21, 7, + 4, 3, 2, 14, 1, 4, 2, 6, 4, 7, 254, 7, + 4, 6, 2, 2, 188, 3, 2, 7, 4, 7, 254, 5, + 4, 5, 2, 6, 1, 88, 0, 4, 1, 5, 2, 6, + 4, 7, 254, 5, 4, 4, 2, 130, 30, 91, 2, 107, + 3, 110, 2, 104, 2, 109, 130, 47, 90, 11, 109, 129, + 74, 2, 47, 132, 1, 2, 1, 2, 11, 1, 5, 2, + 8, 4, 129, 248, 6, 254, 129, 56, 7, 21, 130, 42, + 253, 5, 254, 129, 249, 7, 4, 5, 2, 8, 1, 130, + 2, 1, 4, 2, 6, 4, 7, 254, 8, 4, 7, 2, + 8, 4, 2, 21, 7, 254, 129, 249, 6, 254, 130, 253, + 133, 7, 21, 6, 4, 3, 2, 14, 1, 4, 2, 6, + 4, 7, 254, 7, 4, 6, 2, 131, 124, 196, 86, 2, + 2, 7, 4, 7, 254, 5, 4, 5, 2, 6, 1, 86, + 0, 130, 1, 0, 4, 1, 5, 2, 6, 4, 7, 254, + 5, 4, 2, 2, 131, 18, 77, 106, 2, 110, 129, 104, + 6, 109, 131, 108, 92, 97, 12, 108, 130, 30, 1, 5, + 2, 130, 1, 2, 7, 1, 6, 2, 7, 4, 129, 133, + 6, 254, 129, 238, 9, 21, 129, 223, 6, 254, 129, 204, + 6, 4, 6, 2, 7, 1, 6, 2, 6, 4, 7, 254, + 8, 4, 7, 2, 7, 4, 3, 21, 14, 254, 129, 212, + 8, 21, 6, 4, 3, 2, 14, 1, 4, 2, 6, 4, + 7, 254, 7, 4, 7, 2, 2, 188, 131, 2, 4, 2, + 6, 4, 129, 253, 6, 254, 5, 4, 5, 2, 6, 1, + 86, 0, 130, 1, 0, 4, 1, 5, 2, 6, 4, 7, + 254, 4, 4, 2, 2, 132, 47, 103, 110, 104, 4, 109, + 20, 108, 129, 31, 6, 2, 130, 1, 2, 6, 1, 130, + 2, 1, 4, 2, 8, 4, 129, 239, 5, 254, 130, 250, + 144, 2, 138, 131, 127, 125, 20, 2, 4, 2, 21, 130, + 57, 253, 5, 254, 129, 239, 6, 4, 5, 2, 130, 1, + 2, 6, 1, 6, 2, 6, 4, 7, 254, 8, 4, 7, + 2, 7, 4, 3, 21, 14, 254, 130, 250, 57, 7, 21, + 6, 4, 3, 2, 14, 1, 4, 2, 6, 4, 7, 254, + 7, 4, 7, 2, 133, 125, 196, 86, 4, 2, 6, 4, + 129, 253, 6, 254, 5, 4, 5, 2, 6, 1, 86, 0, + 130, 1, 0, 4, 1, 5, 2, 6, 4, 3, 254, 2, + 253, 2, 251, 3, 4, 131, 2, 35, 91, 4, 109, 6, + 108, 16, 97, 130, 108, 70, 9, 2, 6, 1, 6, 2, + 7, 4, 129, 62, 3, 254, 131, 251, 236, 144, 7, 142, + 134, 127, 20, 21, 138, 127, 229, 3, 253, 3, 254, 129, + 63, 6, 4, 6, 2, 5, 1, 130, 2, 1, 5, 2, + 6, 4, 7, 254, 8, 4, 7, 2, 7, 4, 3, 21, + 15, 254, 130, 242, 22, 6, 21, 6, 4, 3, 2, 14, + 1, 4, 2, 6, 4, 7, 254, 6, 4, 130, 2, 4, + 7, 2, 2, 188, 129, 20, 7, 4, 129, 253, 6, 254, + 5, 4, 5, 2, 6, 1, 86, 0, 130, 1, 0, 4, + 1, 5, 2, 6, 4, 130, 254, 253, 2, 251, 135, 250, + 249, 241, 73, 74, 2, 47, 3, 109, 5, 108, 20, 97, + 129, 76, 9, 2, 129, 1, 2, 2, 2, 1, 8, 2, + 7, 4, 129, 223, 2, 254, 129, 250, 11, 142, 131, 141, + 41, 127, 2, 142, 132, 144, 236, 250, 251, 2, 253, 129, + 238, 6, 4, 5, 2, 130, 1, 2, 4, 1, 130, 2, + 1, 5, 2, 6, 4, 7, 254, 8, 4, 7, 2, 7, + 4, 3, 21, 16, 254, 129, 238, 6, 21, 6, 4, 4, + 2, 13, 1, 4, 2, 6, 4, 7, 254, 8, 4, 7, + 2, 129, 52, 2, 196, 130, 188, 86, 5, 4, 129, 253, + 6, 254, 5, 4, 5, 2, 4, 1, 130, 0, 1, 82, + 0, 129, 11, 3, 0, 130, 1, 0, 4, 1, 5, 2, + 6, 4, 139, 251, 250, 249, 232, 221, 168, 110, 104, 92, + 10, 92, 4, 108, 7, 97, 14, 82, 2, 97, 130, 80, + 10, 10, 2, 129, 1, 4, 2, 129, 1, 5, 2, 7, + 4, 131, 57, 236, 237, 2, 251, 130, 248, 145, 10, 142, + 130, 141, 125, 5, 142, 130, 234, 250, 2, 251, 129, 56, + 6, 4, 5, 2, 130, 1, 2, 2, 1, 8, 2, 6, + 4, 7, 254, 8, 4, 7, 2, 8, 4, 2, 21, 17, + 254, 129, 212, 4, 21, 7, 4, 5, 2, 12, 1, 4, + 2, 6, 4, 7, 254, 8, 4, 8, 2, 129, 188, 3, + 196, 130, 188, 134, 3, 4, 129, 251, 6, 254, 5, 4, + 5, 2, 4, 1, 130, 0, 1, 82, 0, 130, 153, 75, + 2, 0, 130, 1, 0, 4, 1, 6, 2, 5, 4, 131, + 247, 224, 168, 2, 110, 3, 109, 130, 92, 74, 2, 108, + 5, 97, 20, 82, 130, 83, 25, 3, 2, 129, 4, 7, + 2, 129, 1, 3, 2, 129, 1, 7, 2, 3, 4, 131, + 123, 138, 141, 3, 142, 132, 145, 230, 239, 234, 11, 142, + 129, 141, 6, 142, 132, 188, 237, 250, 213, 6, 4, 6, + 2, 129, 1, 3, 2, 129, 1, 6, 2, 6, 4, 7, + 254, 8, 4, 7, 2, 7, 4, 3, 21, 8, 254, 131, + 251, 206, 253, 7, 254, 129, 133, 4, 21, 6, 4, 4, + 2, 13, 1, 4, 2, 6, 4, 7, 254, 9, 4, 6, + 2, 131, 4, 188, 195, 4, 196, 133, 188, 52, 4, 251, + 253, 5, 254, 5, 4, 5, 2, 4, 1, 84, 0, 134, + 163, 166, 158, 84, 24, 0, 4, 1, 6, 2, 3, 4, + 133, 9, 76, 160, 110, 104, 3, 109, 2, 108, 6, 97, + 23, 82, 129, 205, 2, 2, 4, 4, 7, 2, 2, 1, + 8, 2, 2, 4, 130, 123, 141, 9, 142, 129, 230, 20, + 142, 131, 234, 248, 22, 4, 4, 7, 2, 5, 1, 6, + 2, 6, 4, 7, 254, 8, 4, 7, 2, 7, 4, 3, + 21, 7, 254, 132, 253, 64, 21, 206, 7, 254, 130, 251, + 57, 3, 21, 7, 4, 3, 2, 130, 1, 2, 11, 1, + 4, 2, 6, 4, 7, 254, 8, 4, 130, 2, 4, 4, + 2, 131, 4, 2, 188, 2, 195, 5, 196, 130, 51, 251, + 2, 253, 3, 254, 129, 253, 5, 4, 5, 2, 4, 1, + 84, 0, 130, 93, 163, 2, 165, 132, 164, 152, 84, 28, + 3, 1, 7, 2, 132, 32, 96, 110, 104, 2, 109, 4, + 108, 4, 97, 9, 82, 10, 78, 6, 82, 131, 151, 213, + 2, 5, 4, 17, 2, 130, 41, 138, 33, 142, 130, 230, + 206, 5, 4, 8, 2, 2, 1, 6, 2, 7, 4, 7, + 254, 8, 4, 7, 2, 7, 4, 3, 21, 7, 254, 129, + 204, 3, 21, 129, 231, 7, 254, 130, 248, 22, 2, 21, + 7, 4, 5, 2, 11, 1, 4, 2, 6, 4, 7, 254, + 9, 4, 129, 2, 3, 4, 3, 2, 4, 195, 5, 196, + 130, 247, 251, 3, 253, 130, 254, 253, 5, 4, 5, 2, + 4, 1, 85, 0, 132, 5, 71, 94, 154, 3, 164, 134, + 154, 95, 88, 72, 29, 8, 3, 2, 129, 47, 2, 104, + 2, 109, 3, 108, 4, 97, 7, 82, 17, 78, 2, 82, + 132, 98, 207, 213, 238, 7, 4, 14, 2, 130, 14, 127, + 33, 142, 3, 182, 130, 230, 20, 4, 4, 16, 2, 7, + 4, 7, 254, 8, 4, 7, 2, 8, 4, 2, 21, 7, + 254, 4, 21, 130, 22, 242, 7, 254, 129, 238, 2, 21, + 7, 4, 4, 2, 130, 1, 2, 10, 1, 4, 2, 6, + 4, 7, 254, 10, 4, 3, 2, 131, 4, 2, 4, 6, + 195, 3, 196, 130, 197, 249, 2, 251, 3, 253, 4, 4, + 6, 2, 4, 1, 89, 0, 133, 24, 71, 94, 154, 162, + 2, 157, 131, 156, 155, 106, 2, 103, 129, 104, 2, 109, + 3, 108, 4, 97, 6, 82, 21, 78, 133, 100, 212, 216, + 238, 239, 7, 4, 13, 2, 130, 123, 141, 4, 182, 26, + 142, 8, 182, 130, 188, 14, 4, 4, 15, 2, 7, 4, + 7, 254, 8, 4, 8, 2, 7, 4, 2, 21, 7, 254, + 5, 21, 130, 57, 251, 7, 254, 130, 213, 21, 8, 4, + 5, 2, 10, 1, 4, 2, 6, 4, 7, 254, 14, 4, + 131, 2, 4, 187, 6, 195, 3, 196, 130, 237, 250, 2, + 251, 130, 253, 251, 4, 4, 5, 2, 5, 1, 90, 0, + 3, 1, 134, 17, 46, 72, 85, 90, 91, 3, 92, 3, + 108, 4, 97, 5, 82, 18, 78, 130, 36, 34, 2, 36, + 135, 99, 207, 213, 223, 238, 242, 249, 7, 4, 13, 2, + 129, 140, 9, 182, 17, 142, 14, 182, 129, 137, 4, 4, + 15, 2, 7, 4, 7, 254, 8, 4, 8, 2, 8, 4, + 129, 21, 7, 254, 6, 21, 129, 133, 8, 254, 130, 204, + 21, 7, 4, 6, 2, 9, 1, 4, 2, 6, 4, 7, + 254, 129, 22, 15, 4, 2, 187, 5, 195, 2, 196, 129, + 236, 2, 237, 129, 249, 3, 251, 4, 4, 5, 2, 5, + 1, 88, 0, 130, 1, 0, 7, 1, 5, 2, 129, 35, + 3, 97, 6, 82, 9, 78, 8, 69, 4, 78, 138, 36, + 7, 2, 213, 223, 238, 239, 248, 250, 251, 7, 4, 10, + 2, 132, 53, 140, 127, 125, 38, 182, 3, 183, 129, 125, + 18, 2, 7, 4, 7, 254, 7, 4, 9, 2, 7, 4, + 2, 21, 7, 254, 7, 21, 129, 212, 7, 254, 130, 251, + 62, 7, 4, 5, 2, 130, 1, 2, 8, 1, 5, 2, + 5, 4, 7, 254, 129, 62, 15, 4, 3, 187, 5, 195, + 5, 196, 129, 236, 2, 250, 4, 4, 5, 2, 6, 1, + 87, 0, 130, 1, 0, 5, 1, 8, 2, 130, 30, 80, + 5, 82, 7, 78, 14, 69, 4, 78, 136, 25, 231, 239, + 247, 249, 250, 251, 253, 7, 4, 8, 2, 134, 41, 137, + 182, 183, 182, 181, 34, 182, 7, 183, 130, 181, 41, 3, + 4, 14, 2, 7, 4, 7, 254, 7, 4, 9, 2, 8, + 4, 129, 21, 7, 254, 8, 21, 129, 238, 7, 254, 130, + 249, 42, 7, 4, 6, 2, 6, 1, 130, 2, 1, 5, + 2, 5, 4, 129, 253, 6, 254, 129, 204, 15, 4, 129, + 178, 3, 187, 5, 195, 5, 196, 131, 197, 236, 51, 3, + 4, 4, 2, 7, 1, 87, 0, 130, 1, 0, 5, 1, + 9, 2, 130, 18, 102, 2, 82, 6, 78, 17, 69, 3, + 78, 135, 33, 2, 239, 248, 250, 251, 253, 2, 254, 7, + 4, 5, 2, 131, 3, 128, 179, 7, 183, 29, 182, 12, + 183, 129, 139, 2, 2, 129, 4, 14, 2, 7, 4, 7, + 254, 7, 4, 10, 2, 7, 4, 129, 21, 7, 254, 8, + 21, 130, 22, 248, 7, 254, 129, 239, 7, 4, 7, 2, + 5, 1, 130, 2, 1, 5, 2, 5, 4, 129, 250, 6, + 254, 129, 212, 15, 4, 129, 178, 4, 187, 5, 195, 5, + 196, 2, 197, 131, 188, 42, 4, 4, 2, 6, 1, 90, + 0, 5, 1, 5, 2, 4, 4, 132, 2, 238, 208, 81, + 4, 78, 18, 69, 2, 78, 130, 69, 26, 2, 2, 132, + 248, 250, 251, 253, 3, 254, 7, 4, 6, 2, 130, 52, + 180, 14, 183, 14, 182, 21, 183, 129, 124, 16, 2, 7, + 4, 7, 254, 7, 4, 10, 2, 8, 4, 7, 254, 9, + 21, 130, 57, 251, 7, 254, 129, 216, 7, 4, 5, 2, + 130, 1, 2, 4, 1, 130, 2, 1, 5, 2, 5, 4, + 129, 239, 6, 254, 129, 238, 15, 4, 130, 130, 186, 4, + 187, 5, 195, 4, 196, 2, 197, 131, 198, 197, 149, 5, + 2, 4, 1, 91, 0, 6, 1, 6, 2, 3, 4, 133, + 242, 239, 216, 101, 79, 9, 69, 2, 68, 130, 66, 68, + 7, 69, 131, 78, 67, 12, 2, 2, 131, 4, 250, 251, + 5, 254, 7, 4, 7, 2, 130, 14, 131, 16, 183, 129, + 188, 28, 183, 3, 184, 129, 180, 16, 2, 7, 4, 7, + 254, 7, 4, 10, 2, 8, 4, 7, 254, 10, 21, 129, + 204, 8, 254, 129, 206, 6, 4, 8, 2, 3, 1, 130, + 2, 1, 5, 2, 5, 4, 129, 216, 6, 254, 129, 251, + 15, 4, 129, 52, 2, 186, 4, 187, 4, 195, 5, 196, + 129, 197, 2, 198, 131, 233, 188, 42, 3, 2, 4, 1, + 91, 0, 6, 1, 4, 2, 5, 4, 135, 250, 248, 239, + 238, 215, 101, 79, 4, 69, 5, 68, 132, 66, 23, 33, + 66, 3, 69, 131, 68, 67, 26, 3, 2, 2, 4, 130, + 251, 253, 5, 254, 7, 4, 9, 2, 130, 39, 139, 13, + 183, 130, 188, 134, 19, 183, 129, 179, 4, 183, 8, 184, + 130, 131, 41, 14, 2, 7, 4, 7, 254, 7, 4, 11, + 2, 7, 4, 7, 254, 11, 21, 129, 213, 7, 254, 130, + 253, 63, 5, 4, 6, 2, 130, 1, 2, 3, 1, 8, + 2, 4, 4, 129, 205, 7, 254, 129, 133, 15, 4, 129, + 178, 2, 186, 3, 187, 5, 195, 4, 196, 2, 197, 129, + 198, 3, 233, 129, 134, 5, 1, 92, 0, 5, 1, 5, + 2, 5, 4, 137, 253, 251, 249, 247, 239, 238, 216, 33, + 66, 7, 68, 130, 69, 37, 3, 1, 2, 7, 2, 1, + 4, 2, 2, 4, 129, 253, 6, 254, 7, 4, 11, 2, + 131, 41, 131, 181, 9, 183, 131, 185, 210, 123, 18, 183, + 130, 124, 179, 14, 184, 130, 179, 124, 13, 2, 6, 4, + 7, 254, 6, 4, 12, 2, 7, 4, 7, 254, 12, 21, + 129, 238, 7, 254, 130, 250, 55, 5, 4, 5, 2, 129, + 1, 2, 2, 2, 1, 2, 2, 129, 1, 5, 2, 4, + 4, 130, 22, 253, 6, 254, 129, 239, 15, 4, 129, 130, + 2, 186, 4, 187, 4, 195, 5, 196, 129, 197, 2, 198, + 3, 233, 130, 188, 14, 3, 1, 130, 0, 1, 90, 0, + 5, 1, 5, 2, 5, 4, 135, 254, 253, 251, 250, 249, + 242, 239, 3, 2, 131, 23, 26, 33, 3, 34, 131, 33, + 26, 6, 4, 1, 5, 2, 3, 4, 7, 254, 6, 4, + 15, 2, 131, 124, 139, 181, 6, 183, 131, 189, 133, 131, + 10, 183, 5, 184, 132, 183, 179, 41, 39, 12, 184, 131, + 186, 131, 177, 2, 184, 130, 181, 124, 11, 2, 6, 4, + 7, 254, 6, 4, 13, 2, 6, 4, 7, 254, 12, 21, + 130, 42, 249, 7, 254, 129, 239, 5, 4, 6, 2, 130, + 1, 2, 2, 1, 2, 2, 129, 1, 6, 2, 4, 4, + 129, 239, 7, 254, 129, 57, 14, 4, 130, 14, 185, 2, + 186, 3, 187, 5, 195, 4, 196, 2, 197, 129, 198, 4, + 233, 129, 149, 3, 1, 130, 0, 1, 89, 0, 6, 1, + 6, 2, 4, 4, 3, 254, 132, 253, 251, 250, 249, 5, + 2, 130, 1, 2, 6, 1, 130, 2, 1, 6, 2, 3, + 4, 7, 254, 6, 4, 18, 2, 137, 210, 189, 188, 187, + 185, 189, 206, 57, 181, 10, 184, 133, 181, 177, 131, 124, + 39, 3, 1, 137, 39, 131, 139, 179, 181, 184, 185, 186, + 187, 2, 188, 131, 189, 211, 206, 2, 2, 130, 41, 139, + 2, 184, 130, 179, 52, 9, 2, 6, 4, 7, 254, 5, + 4, 14, 2, 6, 4, 7, 254, 9, 21, 129, 4, 3, + 21, 130, 62, 251, 7, 254, 129, 223, 4, 4, 6, 2, + 130, 1, 2, 3, 1, 130, 2, 1, 6, 2, 4, 4, + 129, 206, 7, 254, 129, 239, 15, 4, 129, 125, 3, 186, + 3, 187, 4, 195, 5, 196, 130, 197, 198, 2, 233, 130, + 197, 49, 4, 1, 91, 0, 8, 1, 4, 2, 4, 4, + 5, 254, 131, 253, 251, 4, 8, 2, 4, 1, 8, 2, + 3, 4, 7, 254, 5, 4, 18, 2, 132, 57, 216, 215, + 213, 3, 212, 131, 206, 39, 125, 2, 128, 2, 125, 3, + 124, 130, 52, 39, 10, 1, 6, 2, 129, 205, 4, 212, + 131, 213, 216, 57, 3, 2, 130, 39, 139, 2, 184, 130, + 139, 19, 8, 2, 5, 4, 7, 254, 5, 4, 14, 2, + 6, 4, 7, 254, 129, 4, 6, 21, 7, 4, 129, 204, + 8, 254, 129, 206, 3, 4, 6, 2, 130, 1, 2, 3, + 1, 2, 2, 129, 1, 5, 2, 5, 4, 129, 250, 7, + 254, 129, 205, 15, 4, 131, 178, 186, 188, 3, 187, 4, + 195, 5, 196, 129, 197, 2, 198, 132, 197, 49, 149, 194, + 2, 233, 129, 57, 91, 0, 130, 1, 0, 5, 1, 6, + 2, 3, 4, 7, 254, 129, 4, 8, 2, 2, 1, 10, + 2, 3, 4, 7, 254, 5, 4, 18, 2, 129, 212, 2, + 238, 2, 223, 131, 216, 223, 64, 5, 2, 15, 1, 7, + 2, 129, 62, 2, 213, 2, 216, 131, 223, 231, 212, 5, + 2, 133, 124, 181, 184, 181, 124, 7, 2, 5, 4, 7, + 254, 4, 4, 16, 2, 5, 4, 7, 254, 15, 4, 129, + 216, 7, 254, 130, 253, 64, 2, 4, 6, 2, 130, 1, + 2, 4, 1, 8, 2, 4, 4, 129, 212, 7, 254, 130, + 251, 133, 14, 4, 132, 39, 186, 214, 195, 2, 187, 5, + 195, 4, 196, 2, 197, 131, 198, 197, 198, 3, 233, 131, + 235, 234, 42, 92, 0, 5, 1, 7, 2, 2, 4, 7, + 254, 21, 2, 3, 4, 7, 254, 4, 4, 18, 2, 129, + 55, 2, 242, 2, 239, 3, 238, 129, 21, 6, 2, 14, + 1, 8, 2, 129, 216, 4, 238, 2, 239, 129, 57, 6, + 2, 129, 128, 2, 184, 130, 131, 3, 6, 2, 4, 4, + 7, 254, 4, 4, 17, 2, 4, 4, 7, 254, 16, 4, + 129, 239, 7, 254, 131, 251, 56, 4, 6, 2, 130, 1, + 2, 5, 1, 130, 2, 1, 6, 2, 4, 4, 129, 248, + 7, 254, 130, 253, 204, 13, 4, 132, 63, 229, 223, 189, + 3, 187, 4, 195, 5, 196, 130, 197, 198, 5, 233, 2, + 235, 130, 194, 14, 91, 0, 7, 1, 6, 2, 129, 4, + 7, 254, 129, 4, 9, 2, 4, 1, 8, 2, 2, 4, + 7, 254, 3, 4, 19, 2, 131, 213, 250, 249, 3, 248, + 130, 247, 212, 6, 2, 130, 1, 2, 12, 1, 9, 2, + 129, 206, 2, 239, 2, 242, 2, 248, 129, 213, 7, 2, + 133, 53, 181, 184, 180, 41, 7, 2, 2, 4, 7, 254, + 3, 4, 7, 2, 4, 1, 6, 2, 130, 4, 2, 3, + 4, 7, 254, 16, 4, 130, 42, 250, 7, 254, 130, 247, + 21, 6, 2, 130, 1, 2, 6, 1, 130, 2, 1, 5, + 2, 4, 4, 129, 64, 9, 254, 130, 239, 62, 9, 4, + 130, 57, 212, 2, 238, 130, 223, 229, 3, 187, 4, 195, + 5, 196, 129, 197, 2, 198, 5, 233, 2, 235, 129, 189, + 90, 0, 7, 1, 8, 2, 7, 254, 8, 2, 2, 1, + 3, 2, 2, 1, 8, 2, 129, 4, 7, 254, 2, 4, + 19, 2, 130, 22, 250, 3, 251, 2, 250, 130, 249, 56, + 7, 2, 12, 1, 10, 2, 130, 22, 247, 2, 249, 4, + 250, 129, 42, 6, 2, 131, 1, 39, 179, 2, 184, 129, + 125, 7, 2, 129, 4, 7, 254, 2, 4, 7, 2, 2, + 1, 3, 2, 2, 1, 7, 2, 2, 4, 7, 254, 17, + 4, 130, 63, 253, 7, 254, 129, 238, 5, 2, 130, 1, + 2, 8, 1, 7, 2, 4, 4, 129, 206, 10, 254, 138, + 247, 223, 206, 64, 62, 63, 204, 213, 238, 242, 2, 239, + 2, 238, 130, 223, 189, 2, 187, 4, 195, 5, 196, 129, + 197, 2, 198, 5, 233, 3, 235, 129, 134, 91, 0, 5, + 1, 130, 2, 1, 6, 2, 7, 254, 7, 2, 129, 1, + 2, 2, 4, 1, 130, 2, 1, 8, 2, 7, 254, 21, + 2, 129, 212, 2, 254, 3, 253, 130, 251, 238, 9, 2, + 10, 1, 130, 2, 1, 10, 2, 129, 216, 4, 251, 2, + 253, 129, 213, 5, 2, 2, 1, 2, 2, 129, 132, 2, + 184, 129, 132, 6, 2, 129, 4, 7, 254, 8, 2, 129, + 1, 2, 2, 3, 1, 2, 2, 129, 1, 7, 2, 129, + 4, 7, 254, 18, 4, 129, 206, 8, 254, 129, 212, 4, + 2, 130, 1, 2, 9, 1, 7, 2, 4, 4, 129, 216, + 13, 254, 2, 253, 129, 251, 2, 250, 130, 248, 242, 2, + 239, 2, 238, 131, 231, 196, 187, 4, 195, 129, 188, 4, + 196, 2, 197, 129, 198, 5, 233, 3, 235, 130, 234, 20, + 90, 0, 6, 1, 7, 2, 7, 254, 6, 2, 130, 1, + 2, 7, 1, 130, 2, 1, 7, 2, 7, 254, 21, 2, + 129, 250, 6, 254, 129, 64, 8, 2, 14, 1, 9, 2, + 129, 57, 2, 253, 4, 254, 130, 250, 21, 7, 2, 133, + 1, 2, 139, 184, 177, 7, 2, 7, 254, 7, 2, 130, + 1, 2, 7, 1, 130, 2, 1, 7, 2, 7, 254, 19, + 4, 129, 216, 8, 254, 129, 133, 3, 2, 13, 1, 6, + 2, 4, 4, 129, 213, 12, 254, 2, 253, 2, 251, 132, + 250, 249, 248, 242, 2, 239, 132, 238, 231, 216, 188, 4, + 195, 130, 52, 188, 3, 196, 2, 197, 129, 198, 5, 233, + 4, 235, 129, 189, 89, 0, 8, 1, 6, 2, 7, 254, + 5, 2, 130, 1, 2, 11, 1, 6, 2, 7, 254, 8, + 2, 6, 1, 6, 2, 129, 206, 6, 254, 129, 242, 8, + 2, 15, 1, 130, 2, 1, 8, 2, 129, 239, 6, 254, + 129, 206, 4, 2, 6, 1, 131, 177, 52, 1, 6, 2, + 7, 254, 6, 2, 130, 1, 2, 9, 1, 130, 2, 1, + 6, 2, 7, 254, 20, 4, 129, 239, 7, 254, 133, 251, + 57, 2, 1, 2, 12, 1, 7, 2, 4, 4, 130, 206, + 251, 11, 254, 2, 253, 129, 251, 2, 250, 131, 249, 248, + 242, 2, 239, 137, 216, 57, 2, 52, 178, 188, 195, 130, + 52, 3, 196, 2, 197, 129, 198, 5, 233, 5, 235, 129, + 56, 90, 0, 7, 1, 5, 2, 7, 254, 3, 2, 129, + 1, 2, 2, 12, 1, 130, 2, 1, 4, 2, 7, 254, + 6, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, + 4, 2, 129, 242, 6, 254, 129, 206, 6, 2, 18, 1, + 130, 2, 1, 7, 2, 129, 133, 6, 254, 129, 249, 3, + 2, 7, 1, 129, 19, 2, 1, 6, 2, 7, 254, 5, + 2, 130, 1, 2, 12, 1, 6, 2, 7, 254, 13, 2, + 7, 4, 130, 55, 250, 7, 254, 131, 248, 22, 2, 15, + 1, 5, 2, 5, 4, 130, 57, 239, 11, 254, 129, 253, + 2, 251, 2, 250, 2, 248, 131, 239, 206, 4, 4, 2, + 129, 1, 2, 52, 130, 1, 178, 2, 196, 2, 197, 2, + 198, 5, 233, 4, 235, 129, 189, 89, 0, 8, 1, 5, + 2, 7, 254, 2, 2, 130, 1, 2, 15, 1, 130, 2, + 1, 3, 2, 7, 254, 4, 2, 129, 1, 3, 2, 6, + 1, 2, 2, 129, 1, 2, 2, 129, 63, 6, 254, 130, + 250, 4, 7, 2, 19, 1, 8, 2, 129, 248, 6, 254, + 129, 204, 13, 1, 5, 2, 7, 254, 6, 2, 14, 1, + 130, 2, 1, 3, 2, 129, 253, 5, 254, 129, 253, 21, + 2, 130, 63, 253, 7, 254, 130, 238, 2, 14, 1, 6, + 2, 130, 4, 2, 5, 4, 131, 62, 231, 251, 8, 254, + 2, 253, 2, 251, 132, 250, 239, 206, 42, 6, 2, 5, + 1, 132, 52, 188, 196, 197, 2, 198, 4, 233, 2, 197, + 4, 235, 129, 42, 88, 0, 130, 1, 0, 8, 1, 130, + 2, 1, 8, 2, 129, 1, 2, 2, 18, 1, 130, 2, + 1, 10, 2, 129, 1, 2, 2, 11, 1, 2, 2, 129, + 1, 12, 2, 130, 1, 2, 11, 1, 129, 0, 10, 1, + 130, 2, 1, 11, 2, 129, 1, 2, 2, 14, 1, 12, + 2, 130, 1, 2, 17, 1, 40, 2, 19, 1, 7, 2, + 7, 4, 133, 64, 213, 238, 248, 251, 3, 254, 133, 251, + 248, 238, 212, 62, 2, 4, 7, 2, 7, 1, 131, 14, + 86, 149, 3, 188, 132, 197, 233, 188, 149, 4, 235, 129, + 210, 89, 0, 11, 1, 2, 2, 4, 1, 3, 2, 21, + 1, 3, 2, 2, 1, 2, 2, 2, 1, 2, 2, 16, + 1, 2, 2, 2, 1, 7, 2, 130, 1, 2, 12, 1, + 2, 0, 12, 1, 2, 2, 129, 1, 5, 2, 2, 1, + 2, 2, 21, 1, 4, 2, 2, 1, 2, 2, 20, 1, + 2, 2, 129, 1, 36, 2, 19, 1, 8, 2, 20, 4, + 7, 2, 10, 1, 7, 0, 131, 42, 49, 134, 2, 189, + 91, 0, 43, 1, 4, 2, 22, 1, 8, 2, 12, 1, + 2, 0, 129, 1, 4, 0, 11, 1, 7, 2, 22, 1, + 6, 2, 26, 1, 5, 2, 4, 1, 8, 2, 2, 1, + 13, 2, 129, 1, 2, 2, 22, 1, 8, 2, 17, 4, + 130, 2, 4, 6, 2, 8, 1, 130, 0, 1, 12, 0, + 129, 16, 90, 0, 130, 1, 0, 26, 1, 3, 0, 57, + 1, 2, 0, 129, 1, 4, 0, 129, 1, 2, 0, 90, + 1, 6, 2, 5, 1, 3, 2, 25, 1, 7, 2, 129, + 4, 2, 2, 13, 4, 9, 2, 7, 1, 130, 0, 1, + 105, 0, 130, 1, 0, 83, 1, 11, 0, 129, 1, 2, + 0, 113, 1, 6, 0, 9, 1, 9, 2, 129, 4, 2, + 2, 5, 4, 3, 2, 129, 4, 8, 2, 10, 1, 107, + 0, 130, 1, 0, 22, 1, 8, 0, 51, 1, 130, 0, + 1, 12, 0, 130, 1, 0, 52, 1, 7, 0, 2, 1, + 129, 0, 49, 1, 2, 0, 4, 1, 3, 0, 9, 1, + 130, 2, 1, 10, 2, 129, 4, 3, 2, 129, 4, 10, + 2, 9, 1, 109, 0, 129, 1, 2, 0, 17, 1, 3, + 0, 129, 1, 5, 0, 129, 1, 3, 0, 47, 1, 17, + 0, 129, 1, 2, 0, 48, 1, 3, 0, 2, 1, 2, + 0, 2, 1, 3, 0, 47, 1, 2, 0, 129, 1, 9, + 0, 10, 1, 130, 2, 1, 21, 2, 130, 1, 2, 8, + 1, 112, 0, 129, 1, 2, 0, 13, 1, 2, 0, 129, + 1, 11, 0, 129, 1, 2, 0, 17, 1, 8, 0, 18, + 1, 2, 0, 129, 1, 18, 0, 129, 1, 2, 0, 18, + 1, 8, 0, 17, 1, 3, 0, 129, 1, 9, 0, 2, + 1, 2, 0, 43, 1, 2, 0, 129, 1, 13, 0, 10, + 1, 19, 2, 130, 1, 2, 9, 1, 130, 0, 1, 112, + 0, 2, 1, 3, 0, 6, 1, 20, 0, 129, 1, 4, + 0, 8, 1, 5, 0, 2, 1, 5, 0, 129, 1, 4, + 0, 11, 1, 3, 0, 129, 1, 22, 0, 129, 1, 3, + 0, 11, 1, 4, 0, 2, 1, 4, 0, 2, 1, 4, + 0, 10, 1, 3, 0, 129, 1, 15, 0, 2, 1, 3, + 0, 38, 1, 16, 0, 129, 1, 2, 0, 11, 1, 12, + 2, 2, 1, 129, 2, 11, 1, 130, 0, 1, 116, 0, + 2, 1, 5, 0, 3, 1, 21, 0, 2, 1, 8, 0, + 3, 1, 12, 0, 2, 1, 11, 0, 2, 1, 26, 0, + 2, 1, 10, 0, 3, 1, 13, 0, 3, 1, 7, 0, + 2, 1, 21, 0, 3, 1, 9, 0, 7, 1, 6, 0, + 11, 1, 4, 0, 129, 1, 17, 0, 130, 1, 0, 15, + 1, 7, 2, 12, 1, 2, 0, 129, 1, 127, 0, 52, + 0, 4, 1, 38, 0, 129, 1, 75, 0, 4, 1, 10, + 0, 3, 1, 23, 0, 13, 1, 129, 2, 3, 1, 2, + 2, 11, 1, 2, 0, 2, 1, 127, 0, 127, 0, 51, + 0, 3, 1, 29, 0, 129, 1, 2, 0, 26, 1, 2, + 0, 2, 1, 127, 0, 127, 0, 87, 0, 2, 1, 2, + 0, 21, 1, 2, 0, 2, 1, 127, 0, 127, 0, 92, + 0, 2, 1, 2, 0, 15, 1, 2, 0, 3, 1, 127, + 0, 127, 0, 96, 0, 3, 1, 13, 0, 3, 1, 72, + 0, 4, 1, 3, 2, 6, 4, 6, 21, 5, 22, 5, + 42, 4, 55, 4, 56, 8, 57, 5, 62, 5, 63, 4, + 64, 3, 133, 7, 204, 2, 205, 8, 206, 6, 212, 4, + 213, 2, 215, 4, 216, 3, 223, 129, 231, 9, 238, 9, + 239, 4, 242, 129, 247, 6, 248, 5, 249, 8, 250, 12, + 251, 8, 253, 54, 254, 8, 253, 10, 251, 9, 250, 4, + 249, 6, 248, 5, 242, 8, 239, 7, 238, 2, 231, 3, + 223, 4, 216, 4, 213, 6, 212, 7, 206, 131, 205, 206, + 205, 6, 204, 3, 133, 4, 64, 4, 63, 5, 62, 7, + 57, 4, 56, 3, 55, 5, 42, 5, 22, 6, 21, 4, + 4, 3, 2, 5, 1, 127, 0, 127, 0, 127, 0, 127, + 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, + 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, + 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, + 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, + 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, 0, 127, + 0, 127, 0, 23, 0, 0 + }; + +static uint8 kSplashIcons8BitCompressedImage[] = { + 7, 0, 130, 2, 4, 26, 21, 130, 4, 2, 14, 0, + 130, 2, 4, 26, 21, 130, 4, 2, 14, 0, 130, 2, + 4, 26, 21, 130, 4, 2, 14, 0, 130, 2, 4, 26, + 21, 130, 4, 2, 14, 0, 130, 2, 4, 26, 21, 130, + 4, 2, 14, 0, 130, 2, 4, 26, 21, 130, 4, 2, + 14, 0, 130, 2, 4, 26, 21, 130, 4, 2, 12, 0, + 129, 1, 32, 21, 129, 1, 10, 0, 129, 1, 32, 21, + 129, 1, 10, 0, 129, 1, 32, 21, 129, 1, 10, 0, + 129, 1, 32, 21, 129, 1, 10, 0, 129, 1, 32, 21, + 129, 1, 10, 0, 129, 1, 32, 21, 129, 1, 10, 0, + 129, 1, 32, 21, 129, 1, 9, 0, 129, 2, 3, 21, + 129, 42, 26, 55, 129, 42, 3, 21, 129, 2, 8, 0, + 129, 2, 3, 21, 129, 42, 26, 55, 129, 42, 3, 21, + 129, 2, 8, 0, 129, 2, 3, 21, 129, 42, 26, 55, + 129, 42, 3, 21, 129, 2, 8, 0, 129, 2, 3, 21, + 129, 42, 26, 55, 129, 42, 3, 21, 129, 2, 8, 0, + 129, 2, 3, 21, 129, 42, 26, 55, 129, 42, 3, 21, + 129, 2, 8, 0, 129, 2, 3, 21, 129, 42, 26, 55, + 129, 42, 3, 21, 129, 2, 8, 0, 129, 2, 3, 21, + 129, 42, 26, 55, 129, 42, 3, 21, 129, 2, 7, 0, + 129, 1, 2, 21, 129, 22, 30, 55, 129, 22, 2, 21, + 129, 1, 6, 0, 129, 1, 2, 21, 129, 22, 30, 55, + 129, 22, 2, 21, 129, 1, 6, 0, 129, 1, 2, 21, + 129, 22, 30, 55, 129, 22, 2, 21, 129, 1, 6, 0, + 129, 1, 2, 21, 129, 22, 30, 55, 129, 22, 2, 21, + 129, 1, 6, 0, 129, 1, 2, 21, 129, 22, 30, 55, + 129, 22, 2, 21, 129, 1, 6, 0, 129, 1, 2, 21, + 129, 22, 30, 55, 129, 22, 2, 21, 129, 1, 6, 0, + 129, 1, 2, 21, 129, 22, 30, 55, 129, 22, 2, 21, + 129, 1, 6, 0, 2, 21, 129, 22, 32, 55, 129, 22, + 2, 21, 6, 0, 2, 21, 129, 22, 32, 55, 129, 22, + 2, 21, 6, 0, 2, 21, 129, 22, 32, 55, 129, 22, + 2, 21, 6, 0, 2, 21, 129, 22, 32, 55, 129, 22, + 2, 21, 6, 0, 2, 21, 129, 22, 32, 55, 129, 22, + 2, 21, 6, 0, 2, 21, 129, 22, 32, 55, 129, 22, + 2, 21, 6, 0, 2, 21, 129, 22, 24, 55, 134, 42, + 22, 21, 4, 2, 0, 2, 55, 129, 22, 2, 21, 5, + 0, 129, 2, 2, 21, 34, 55, 2, 21, 129, 2, 4, + 0, 129, 2, 2, 21, 13, 55, 130, 22, 42, 19, 55, + 2, 21, 129, 2, 4, 0, 129, 2, 2, 21, 34, 55, + 2, 21, 129, 2, 4, 0, 129, 2, 2, 21, 13, 55, + 130, 22, 42, 19, 55, 2, 21, 129, 2, 4, 0, 129, + 2, 2, 21, 34, 55, 2, 21, 129, 2, 4, 0, 129, + 2, 2, 21, 34, 55, 2, 21, 129, 2, 4, 0, 129, + 2, 2, 21, 22, 55, 131, 42, 21, 2, 2, 0, 132, + 42, 56, 4, 2, 3, 55, 2, 21, 129, 2, 4, 0, + 131, 4, 21, 42, 9, 55, 130, 22, 21, 4, 4, 131, + 21, 22, 42, 16, 55, 131, 42, 21, 4, 4, 0, 131, + 4, 21, 42, 12, 55, 133, 4, 205, 57, 4, 22, 17, + 55, 131, 42, 21, 4, 4, 0, 131, 4, 21, 42, 34, + 55, 131, 42, 21, 4, 4, 0, 131, 4, 21, 42, 12, + 55, 133, 4, 205, 57, 4, 22, 17, 55, 131, 42, 21, + 4, 4, 0, 131, 4, 21, 42, 34, 55, 131, 42, 21, + 4, 4, 0, 131, 4, 21, 42, 34, 55, 131, 42, 21, + 4, 4, 0, 131, 4, 21, 42, 21, 55, 129, 21, 3, + 0, 131, 22, 133, 57, 2, 0, 129, 4, 3, 55, 131, + 42, 21, 4, 4, 0, 2, 21, 8, 55, 132, 42, 4, + 21, 42, 4, 55, 130, 42, 22, 2, 21, 129, 22, 15, + 55, 2, 21, 4, 0, 2, 21, 12, 55, 137, 4, 213, + 250, 249, 238, 206, 42, 21, 42, 15, 55, 2, 21, 4, + 0, 2, 21, 36, 55, 2, 21, 4, 0, 2, 21, 12, + 55, 137, 4, 213, 250, 249, 238, 206, 42, 21, 42, 15, + 55, 2, 21, 4, 0, 2, 21, 36, 55, 2, 21, 4, + 0, 2, 21, 14, 55, 133, 4, 2, 21, 22, 42, 17, + 55, 2, 21, 4, 0, 2, 21, 20, 55, 131, 42, 14, + 115, 2, 136, 131, 228, 206, 22, 3, 0, 129, 21, 4, + 55, 2, 21, 4, 0, 2, 21, 7, 55, 131, 42, 4, + 42, 9, 55, 130, 22, 2, 2, 1, 132, 4, 21, 22, + 42, 9, 55, 2, 21, 4, 0, 2, 21, 11, 55, 130, + 4, 213, 2, 250, 129, 249, 2, 248, 131, 242, 216, 133, + 2, 21, 129, 42, 12, 55, 2, 21, 4, 0, 2, 21, + 36, 55, 2, 21, 4, 0, 2, 21, 11, 55, 130, 4, + 213, 2, 250, 129, 249, 2, 248, 131, 242, 216, 133, 2, + 21, 129, 42, 12, 55, 2, 21, 4, 0, 2, 21, 18, + 55, 2, 4, 130, 22, 42, 14, 55, 2, 21, 4, 0, + 2, 21, 9, 55, 130, 21, 22, 2, 55, 143, 42, 51, + 197, 188, 149, 86, 20, 21, 22, 42, 55, 42, 4, 2, + 21, 2, 22, 129, 42, 5, 55, 2, 21, 4, 0, 2, + 21, 19, 55, 130, 22, 38, 2, 136, 133, 145, 237, 230, + 136, 38, 3, 0, 129, 22, 4, 55, 2, 21, 4, 0, + 2, 21, 7, 55, 130, 4, 42, 7, 55, 132, 42, 21, + 2, 21, 2, 22, 135, 4, 21, 42, 22, 21, 4, 42, + 7, 55, 2, 21, 4, 0, 2, 21, 10, 55, 131, 4, + 213, 251, 2, 250, 129, 249, 2, 248, 2, 242, 135, 239, + 238, 212, 63, 2, 22, 42, 9, 55, 2, 21, 4, 0, + 2, 21, 36, 55, 2, 21, 4, 0, 2, 21, 10, 55, + 131, 4, 213, 251, 2, 250, 129, 249, 2, 248, 2, 242, + 135, 239, 238, 212, 63, 2, 22, 42, 9, 55, 2, 21, + 4, 0, 2, 21, 16, 55, 136, 42, 4, 63, 133, 62, + 56, 4, 42, 12, 55, 2, 21, 4, 0, 2, 21, 9, + 55, 131, 0, 206, 55, 2, 4, 129, 188, 4, 198, 129, + 197, 2, 188, 133, 134, 52, 134, 188, 197, 2, 188, 133, + 149, 134, 41, 2, 42, 2, 55, 2, 21, 4, 0, 2, + 21, 18, 55, 130, 42, 38, 2, 136, 131, 144, 248, 145, + 2, 136, 130, 119, 1, 2, 0, 129, 42, 4, 55, 2, + 21, 4, 0, 2, 21, 6, 55, 130, 22, 21, 6, 55, + 129, 42, 2, 21, 129, 42, 5, 55, 130, 22, 21, 2, + 55, 131, 42, 2, 42, 6, 55, 2, 21, 4, 0, 2, + 21, 9, 55, 130, 4, 216, 2, 251, 2, 250, 129, 249, + 2, 248, 2, 242, 4, 239, 133, 238, 206, 57, 4, 22, + 7, 55, 2, 21, 4, 0, 2, 21, 36, 55, 2, 21, + 4, 0, 2, 21, 9, 55, 130, 4, 216, 2, 251, 2, + 250, 129, 249, 2, 248, 2, 242, 4, 239, 133, 238, 206, + 57, 4, 22, 7, 55, 2, 21, 4, 0, 2, 21, 15, + 55, 2, 22, 130, 204, 205, 3, 204, 130, 57, 21, 2, + 42, 130, 22, 42, 8, 55, 2, 21, 4, 0, 2, 21, + 2, 55, 131, 21, 22, 42, 4, 55, 129, 0, 2, 254, + 131, 242, 213, 234, 16, 197, 130, 188, 4, 3, 55, 2, + 21, 4, 0, 2, 21, 17, 55, 130, 42, 38, 2, 136, + 131, 230, 248, 145, 2, 136, 2, 119, 131, 44, 0, 2, + 5, 55, 2, 21, 4, 0, 2, 21, 6, 55, 130, 21, + 42, 5, 55, 131, 22, 4, 42, 8, 55, 134, 42, 21, + 42, 55, 42, 4, 6, 55, 2, 21, 4, 0, 2, 21, + 8, 55, 130, 4, 216, 3, 251, 2, 250, 2, 248, 130, + 247, 242, 8, 239, 133, 223, 205, 42, 21, 42, 4, 55, + 2, 21, 4, 0, 2, 21, 36, 55, 2, 21, 4, 0, + 2, 21, 8, 55, 130, 4, 216, 3, 251, 2, 250, 2, + 248, 130, 247, 242, 8, 239, 133, 223, 205, 42, 21, 42, + 4, 55, 2, 21, 4, 0, 2, 21, 14, 55, 130, 21, + 57, 3, 205, 3, 204, 137, 133, 57, 42, 22, 57, 42, + 4, 22, 42, 5, 55, 2, 21, 4, 0, 2, 21, 2, + 55, 136, 22, 57, 56, 4, 22, 42, 55, 0, 5, 254, + 130, 248, 231, 2, 189, 12, 197, 130, 149, 22, 3, 55, + 2, 21, 4, 0, 2, 21, 17, 55, 133, 21, 119, 136, + 230, 237, 3, 136, 2, 119, 2, 115, 130, 0, 21, 5, + 55, 2, 21, 4, 0, 2, 21, 6, 55, 129, 2, 5, + 55, 130, 21, 22, 11, 55, 134, 42, 21, 42, 55, 21, + 22, 5, 55, 2, 21, 4, 0, 2, 21, 7, 55, 131, + 4, 216, 253, 2, 251, 2, 250, 129, 249, 2, 248, 2, + 242, 11, 239, 130, 212, 0, 4, 55, 2, 21, 4, 0, + 2, 21, 12, 55, 131, 4, 2, 22, 21, 55, 2, 21, + 4, 0, 2, 21, 7, 55, 131, 4, 216, 253, 2, 251, + 2, 250, 129, 249, 2, 248, 2, 242, 11, 239, 130, 212, + 0, 4, 55, 2, 21, 4, 0, 2, 21, 12, 55, 131, + 42, 4, 63, 2, 206, 2, 205, 9, 204, 132, 64, 57, + 42, 0, 4, 55, 2, 21, 4, 0, 2, 21, 2, 55, + 136, 42, 56, 236, 189, 134, 19, 2, 0, 7, 254, 132, + 253, 247, 216, 210, 2, 189, 8, 196, 129, 39, 4, 55, + 2, 21, 4, 0, 2, 21, 16, 55, 133, 42, 115, 136, + 230, 237, 3, 136, 2, 119, 3, 115, 130, 0, 42, 5, + 55, 2, 21, 4, 0, 2, 21, 6, 55, 129, 2, 3, + 55, 131, 42, 21, 42, 13, 55, 133, 42, 21, 55, 42, + 21, 5, 55, 2, 21, 4, 0, 2, 21, 6, 55, 130, + 4, 216, 2, 253, 2, 251, 2, 250, 129, 249, 2, 248, + 2, 242, 10, 239, 131, 238, 204, 0, 4, 55, 2, 21, + 4, 0, 2, 21, 10, 55, 135, 42, 5, 146, 175, 51, + 2, 22, 19, 55, 2, 21, 4, 0, 2, 21, 6, 55, + 130, 4, 216, 2, 253, 2, 251, 2, 250, 129, 249, 2, + 248, 2, 242, 10, 239, 131, 238, 204, 0, 4, 55, 2, + 21, 4, 0, 2, 21, 11, 55, 131, 22, 21, 204, 3, + 206, 2, 205, 11, 204, 130, 62, 0, 4, 55, 2, 21, + 4, 0, 2, 21, 3, 55, 130, 21, 234, 2, 236, 132, + 234, 210, 52, 251, 9, 254, 135, 253, 239, 213, 204, 210, + 189, 188, 3, 196, 130, 188, 21, 4, 55, 2, 21, 4, + 0, 2, 21, 16, 55, 133, 14, 136, 145, 237, 143, 2, + 136, 2, 119, 3, 115, 130, 38, 21, 6, 55, 2, 21, + 4, 0, 2, 21, 5, 55, 131, 21, 15, 21, 2, 42, + 130, 21, 42, 3, 55, 130, 22, 4, 2, 1, 130, 4, + 22, 6, 55, 132, 42, 21, 55, 2, 5, 55, 2, 21, + 4, 0, 2, 21, 5, 55, 131, 4, 216, 254, 2, 253, + 2, 251, 2, 250, 129, 249, 2, 248, 2, 242, 10, 239, + 131, 206, 64, 0, 4, 55, 2, 21, 4, 0, 2, 21, + 9, 55, 132, 22, 45, 174, 235, 2, 200, 132, 174, 86, + 6, 22, 17, 55, 2, 21, 4, 0, 2, 21, 5, 55, + 131, 4, 216, 254, 2, 253, 2, 251, 2, 250, 129, 249, + 2, 248, 2, 242, 10, 239, 131, 206, 64, 0, 4, 55, + 2, 21, 4, 0, 2, 21, 10, 55, 132, 21, 56, 206, + 212, 3, 206, 129, 205, 11, 204, 131, 57, 22, 0, 4, + 55, 2, 21, 4, 0, 2, 21, 3, 55, 130, 22, 149, + 5, 236, 132, 189, 228, 238, 251, 9, 253, 133, 251, 239, + 212, 64, 134, 2, 188, 130, 124, 42, 4, 55, 2, 21, + 4, 0, 2, 21, 15, 55, 133, 22, 115, 136, 236, 145, + 2, 136, 129, 119, 3, 115, 131, 44, 38, 2, 7, 55, + 2, 21, 4, 0, 2, 21, 4, 55, 135, 20, 188, 197, + 185, 126, 21, 42, 2, 55, 138, 42, 3, 118, 122, 135, + 121, 116, 38, 3, 42, 5, 55, 2, 22, 129, 2, 5, + 55, 2, 21, 4, 0, 2, 21, 4, 55, 130, 4, 216, + 2, 254, 129, 253, 3, 251, 2, 250, 2, 248, 130, 247, + 242, 10, 239, 132, 212, 63, 64, 0, 4, 55, 2, 21, + 4, 0, 2, 21, 8, 55, 141, 21, 51, 176, 235, 200, + 235, 194, 193, 194, 146, 86, 11, 22, 10, 55, 130, 21, + 42, 3, 55, 2, 21, 4, 0, 2, 21, 4, 55, 130, + 4, 216, 2, 254, 129, 253, 3, 251, 2, 250, 2, 248, + 130, 247, 242, 10, 239, 132, 212, 63, 64, 0, 4, 55, + 2, 21, 4, 0, 2, 21, 9, 55, 130, 4, 62, 3, + 212, 3, 206, 129, 205, 10, 204, 132, 57, 21, 4, 0, + 4, 55, 2, 21, 4, 0, 2, 21, 4, 55, 129, 20, + 7, 236, 133, 234, 144, 228, 238, 250, 9, 251, 130, 213, + 134, 2, 188, 129, 2, 5, 55, 2, 21, 4, 0, 2, + 21, 15, 55, 130, 38, 136, 2, 230, 129, 136, 2, 119, + 3, 115, 132, 44, 38, 1, 42, 7, 55, 2, 21, 4, + 0, 2, 21, 3, 55, 135, 42, 130, 236, 237, 186, 184, + 2, 3, 55, 130, 3, 120, 3, 143, 133, 135, 121, 117, + 44, 3, 6, 55, 130, 21, 1, 5, 55, 2, 21, 4, + 0, 2, 21, 3, 55, 130, 4, 216, 2, 254, 2, 253, + 2, 251, 2, 250, 133, 249, 248, 242, 212, 62, 2, 21, + 130, 62, 212, 5, 239, 133, 213, 63, 64, 133, 0, 4, + 55, 2, 21, 4, 0, 2, 21, 6, 55, 146, 42, 4, + 87, 193, 235, 200, 235, 194, 193, 203, 175, 192, 173, 147, + 86, 11, 21, 42, 6, 55, 131, 4, 22, 62, 3, 55, + 2, 21, 4, 0, 2, 21, 3, 55, 130, 4, 216, 2, + 254, 2, 253, 2, 251, 2, 250, 129, 249, 2, 248, 2, + 242, 9, 239, 133, 213, 63, 64, 133, 0, 4, 55, 2, + 21, 4, 0, 2, 21, 7, 55, 131, 42, 4, 204, 4, + 212, 3, 206, 129, 205, 8, 204, 135, 133, 57, 21, 22, + 133, 62, 22, 3, 55, 2, 21, 4, 0, 2, 21, 4, + 55, 130, 21, 189, 8, 236, 133, 234, 189, 120, 228, 238, + 7, 250, 133, 204, 144, 188, 130, 22, 5, 55, 2, 21, + 4, 0, 2, 21, 14, 55, 133, 21, 136, 144, 230, 136, + 2, 119, 3, 115, 132, 44, 38, 13, 22, 8, 55, 2, + 21, 4, 0, 2, 21, 3, 55, 135, 42, 132, 198, 233, + 185, 184, 20, 2, 55, 140, 22, 118, 143, 145, 230, 145, + 143, 135, 119, 115, 38, 22, 5, 55, 130, 42, 1, 5, + 55, 2, 21, 4, 0, 2, 21, 2, 55, 130, 4, 216, + 3, 254, 2, 253, 2, 251, 2, 250, 133, 249, 239, 62, + 58, 112, 2, 209, 132, 113, 59, 57, 238, 2, 239, 129, + 223, 2, 63, 131, 64, 133, 0, 4, 55, 2, 21, 4, + 0, 2, 21, 5, 55, 139, 22, 27, 146, 193, 235, 193, + 203, 200, 149, 188, 175, 2, 192, 134, 161, 191, 147, 85, + 1, 21, 5, 55, 132, 4, 213, 248, 206, 3, 55, 2, + 21, 4, 0, 2, 21, 2, 55, 130, 4, 216, 3, 254, + 2, 253, 2, 251, 2, 250, 129, 249, 2, 248, 2, 242, + 8, 239, 129, 223, 2, 63, 131, 64, 133, 0, 4, 55, + 2, 21, 4, 0, 2, 21, 6, 55, 132, 22, 42, 206, + 213, 4, 212, 3, 206, 129, 205, 7, 204, 136, 133, 56, + 21, 22, 204, 239, 223, 4, 3, 55, 2, 21, 4, 0, + 2, 21, 4, 55, 130, 42, 62, 10, 236, 135, 234, 189, + 127, 120, 228, 238, 248, 2, 249, 130, 248, 62, 2, 188, + 130, 39, 42, 5, 55, 2, 21, 4, 0, 2, 21, 13, + 55, 133, 22, 119, 143, 230, 136, 2, 119, 3, 115, 132, + 44, 38, 1, 42, 9, 55, 2, 21, 4, 0, 2, 21, + 4, 55, 129, 54, 2, 185, 131, 184, 179, 22, 2, 55, + 140, 4, 122, 143, 230, 254, 230, 143, 135, 119, 115, 116, + 4, 5, 55, 131, 42, 2, 42, 4, 55, 2, 21, 4, + 0, 2, 21, 2, 55, 131, 0, 242, 251, 2, 254, 2, + 253, 2, 251, 2, 250, 133, 248, 62, 65, 217, 218, 3, + 225, 131, 218, 65, 57, 2, 238, 2, 63, 133, 64, 133, + 204, 0, 42, 3, 55, 2, 21, 4, 0, 2, 21, 4, + 55, 158, 21, 49, 169, 194, 203, 175, 171, 173, 62, 55, + 42, 55, 188, 147, 191, 190, 147, 89, 46, 2, 22, 55, + 42, 22, 4, 213, 242, 238, 4, 42, 2, 55, 2, 21, + 4, 0, 2, 21, 2, 55, 131, 0, 242, 251, 2, 254, + 2, 253, 2, 251, 2, 250, 129, 249, 2, 248, 2, 242, + 7, 239, 129, 238, 2, 63, 133, 64, 133, 204, 0, 42, + 3, 55, 2, 21, 4, 0, 2, 21, 5, 55, 131, 21, + 57, 212, 2, 213, 4, 212, 3, 206, 129, 205, 6, 204, + 130, 133, 55, 3, 21, 132, 213, 238, 206, 1, 3, 55, + 2, 21, 4, 0, 2, 21, 5, 55, 130, 4, 234, 12, + 236, 132, 189, 144, 125, 238, 2, 247, 133, 238, 62, 178, + 130, 21, 6, 55, 2, 21, 4, 0, 2, 21, 6, 55, + 129, 22, 6, 0, 133, 115, 136, 144, 136, 119, 4, 115, + 132, 38, 13, 21, 42, 10, 55, 2, 21, 4, 0, 2, + 21, 4, 55, 133, 22, 54, 132, 129, 19, 3, 55, 140, + 1, 135, 143, 145, 230, 145, 143, 135, 119, 115, 116, 1, + 5, 55, 131, 22, 21, 22, 4, 55, 2, 21, 4, 0, + 2, 21, 2, 55, 129, 0, 3, 239, 129, 250, 2, 253, + 2, 251, 2, 250, 133, 213, 58, 218, 252, 253, 3, 227, + 141, 226, 219, 60, 206, 133, 62, 63, 64, 133, 62, 2, + 22, 42, 2, 55, 2, 21, 4, 0, 2, 21, 3, 55, + 134, 4, 86, 174, 200, 201, 174, 2, 171, 131, 149, 21, + 4, 2, 2, 132, 45, 95, 190, 173, 2, 95, 138, 93, + 88, 28, 2, 24, 21, 206, 231, 238, 62, 2, 22, 2, + 55, 2, 21, 4, 0, 2, 21, 2, 55, 129, 0, 3, + 239, 129, 250, 2, 253, 2, 251, 2, 250, 2, 248, 130, + 247, 242, 7, 239, 138, 238, 133, 62, 63, 64, 133, 62, + 2, 22, 42, 2, 55, 2, 21, 4, 0, 2, 21, 3, + 55, 131, 42, 4, 133, 4, 213, 4, 212, 3, 206, 129, + 205, 5, 204, 138, 133, 55, 4, 21, 4, 0, 2, 206, + 133, 4, 3, 55, 2, 21, 4, 0, 2, 21, 5, 55, + 130, 22, 210, 11, 236, 3, 234, 130, 127, 229, 2, 239, + 133, 213, 134, 138, 53, 22, 6, 55, 2, 21, 4, 0, + 2, 21, 5, 55, 131, 22, 43, 143, 3, 145, 134, 143, + 43, 136, 143, 136, 119, 3, 115, 132, 44, 38, 2, 42, + 12, 55, 2, 21, 4, 0, 2, 21, 5, 55, 129, 42, + 3, 21, 3, 55, 131, 1, 121, 135, 3, 143, 134, 135, + 121, 117, 115, 117, 1, 3, 55, 134, 22, 19, 40, 0, + 21, 42, 3, 55, 2, 21, 4, 0, 2, 21, 2, 55, + 135, 0, 239, 223, 205, 213, 239, 248, 3, 250, 132, 249, + 63, 112, 226, 2, 254, 129, 245, 2, 243, 134, 227, 226, + 114, 21, 62, 63, 3, 64, 129, 4, 2, 22, 3, 55, + 2, 21, 4, 0, 2, 21, 2, 55, 147, 42, 4, 50, + 169, 192, 202, 192, 173, 191, 199, 173, 86, 0, 52, 190, + 161, 173, 190, 93, 2, 147, 2, 93, 135, 75, 21, 206, + 212, 213, 204, 0, 2, 22, 2, 55, 2, 21, 4, 0, + 2, 21, 2, 55, 136, 0, 239, 223, 205, 213, 239, 248, + 239, 2, 250, 129, 249, 2, 248, 130, 247, 242, 7, 239, + 131, 204, 62, 63, 3, 64, 129, 4, 2, 22, 3, 55, + 2, 21, 4, 0, 2, 21, 2, 55, 2, 21, 129, 206, + 5, 213, 4, 212, 3, 206, 129, 205, 4, 204, 134, 133, + 42, 4, 42, 215, 216, 2, 4, 131, 63, 62, 21, 3, + 55, 2, 21, 4, 0, 2, 21, 6, 55, 130, 42, 234, + 2, 189, 3, 236, 8, 234, 130, 144, 211, 2, 238, 132, + 206, 127, 138, 1, 7, 55, 2, 21, 4, 0, 2, 21, + 4, 55, 130, 22, 43, 4, 136, 133, 121, 38, 119, 115, + 0, 4, 115, 131, 44, 13, 22, 14, 55, 2, 21, 4, + 0, 2, 21, 5, 55, 129, 22, 2, 55, 130, 4, 42, + 2, 55, 131, 4, 116, 121, 3, 135, 130, 121, 117, 2, + 115, 130, 116, 4, 2, 55, 135, 42, 54, 234, 195, 177, + 2, 42, 3, 55, 2, 21, 4, 0, 2, 21, 2, 55, + 143, 0, 239, 205, 167, 150, 134, 214, 238, 239, 248, 249, + 21, 209, 225, 244, 2, 245, 141, 246, 245, 243, 227, 219, + 2, 62, 63, 64, 133, 22, 21, 22, 4, 55, 2, 21, + 4, 0, 2, 21, 4, 55, 134, 22, 2, 50, 161, 191, + 199, 4, 190, 135, 87, 147, 190, 57, 55, 130, 147, 3, + 186, 131, 132, 22, 206, 2, 212, 130, 64, 0, 2, 22, + 129, 42, 2, 55, 2, 21, 4, 0, 2, 21, 2, 55, + 139, 0, 239, 205, 167, 150, 134, 63, 0, 212, 248, 249, + 2, 248, 2, 242, 6, 239, 129, 206, 2, 62, 134, 63, + 64, 133, 22, 21, 22, 4, 55, 2, 21, 4, 0, 2, + 21, 2, 55, 130, 0, 206, 6, 213, 4, 212, 3, 206, + 129, 205, 3, 204, 130, 64, 42, 2, 21, 136, 212, 239, + 223, 56, 4, 57, 42, 22, 3, 55, 2, 21, 4, 0, + 2, 21, 5, 55, 134, 42, 0, 62, 206, 62, 189, 9, + 234, 131, 233, 144, 211, 2, 231, 132, 64, 138, 123, 21, + 7, 55, 2, 21, 4, 0, 2, 21, 3, 55, 130, 22, + 38, 4, 136, 135, 115, 38, 120, 115, 43, 119, 0, 2, + 115, 131, 38, 4, 42, 15, 55, 2, 21, 4, 0, 2, + 21, 5, 55, 129, 22, 2, 55, 130, 42, 4, 2, 55, + 131, 22, 38, 117, 3, 119, 129, 117, 2, 115, 131, 117, + 43, 22, 2, 55, 135, 22, 178, 237, 196, 184, 40, 22, + 3, 55, 2, 21, 4, 0, 2, 21, 2, 55, 136, 0, + 239, 223, 148, 149, 136, 144, 229, 3, 238, 133, 21, 209, + 225, 227, 243, 3, 246, 133, 243, 227, 220, 2, 63, 2, + 64, 132, 56, 21, 22, 42, 4, 55, 2, 21, 4, 0, + 2, 21, 5, 55, 137, 42, 21, 2, 48, 147, 190, 199, + 190, 147, 2, 190, 130, 130, 4, 2, 2, 133, 177, 158, + 93, 132, 56, 3, 212, 130, 64, 0, 2, 22, 129, 42, + 3, 55, 2, 21, 4, 0, 2, 21, 2, 55, 141, 0, + 239, 223, 148, 149, 136, 15, 178, 19, 223, 238, 239, 247, + 2, 242, 5, 239, 132, 212, 57, 62, 63, 2, 64, 132, + 56, 21, 22, 42, 4, 55, 2, 21, 4, 0, 2, 21, + 2, 55, 132, 0, 64, 133, 206, 4, 213, 4, 212, 3, + 206, 129, 205, 2, 204, 130, 64, 42, 3, 21, 137, 55, + 216, 206, 22, 42, 4, 21, 22, 42, 2, 55, 2, 21, + 4, 0, 2, 21, 5, 55, 130, 4, 239, 2, 250, 134, + 212, 22, 234, 149, 14, 149, 6, 233, 130, 188, 210, 2, + 216, 132, 62, 138, 19, 42, 7, 55, 2, 21, 4, 0, + 2, 21, 2, 55, 129, 22, 7, 0, 133, 62, 63, 43, + 121, 38, 2, 44, 130, 13, 21, 7, 55, 8, 42, 2, + 55, 2, 21, 4, 0, 2, 21, 4, 55, 2, 42, 3, + 55, 130, 21, 22, 2, 55, 130, 3, 44, 5, 115, 131, + 117, 116, 3, 3, 55, 135, 22, 132, 187, 185, 184, 19, + 21, 3, 55, 2, 21, 4, 0, 2, 21, 2, 55, 129, + 0, 3, 239, 131, 231, 211, 228, 4, 238, 146, 57, 113, + 225, 227, 243, 245, 246, 245, 243, 227, 209, 22, 63, 64, + 62, 4, 22, 42, 5, 55, 2, 21, 4, 0, 2, 21, + 7, 55, 150, 42, 21, 2, 46, 147, 190, 186, 190, 147, + 186, 185, 126, 177, 185, 153, 71, 57, 216, 55, 216, 133, + 0, 2, 22, 129, 42, 4, 55, 2, 21, 4, 0, 2, + 21, 2, 55, 130, 0, 238, 2, 239, 135, 231, 57, 130, + 187, 178, 133, 238, 2, 223, 129, 231, 5, 239, 130, 216, + 57, 2, 62, 134, 63, 64, 62, 4, 22, 42, 5, 55, + 2, 21, 4, 0, 2, 21, 2, 55, 129, 0, 4, 64, + 131, 205, 212, 213, 4, 212, 3, 206, 140, 205, 204, 64, + 22, 2, 42, 63, 0, 21, 64, 133, 21, 7, 55, 2, + 21, 4, 0, 2, 21, 5, 55, 130, 2, 239, 2, 250, + 136, 238, 204, 42, 63, 223, 62, 188, 233, 4, 197, 135, + 188, 210, 213, 212, 120, 125, 4, 8, 55, 2, 21, 4, + 0, 2, 21, 8, 55, 135, 21, 57, 63, 43, 121, 38, + 44, 2, 38, 129, 0, 5, 55, 11, 42, 2, 55, 2, + 21, 4, 0, 2, 21, 4, 55, 129, 22, 5, 55, 134, + 4, 42, 55, 42, 3, 38, 2, 116, 133, 117, 116, 43, + 3, 42, 4, 55, 132, 13, 132, 177, 54, 2, 22, 3, + 55, 2, 21, 4, 0, 2, 21, 2, 55, 130, 0, 216, + 4, 239, 4, 238, 134, 231, 205, 59, 218, 226, 227, 3, + 243, 132, 227, 226, 61, 56, 2, 63, 129, 2, 2, 22, + 6, 55, 2, 21, 4, 0, 2, 21, 9, 55, 133, 42, + 21, 2, 46, 89, 2, 94, 130, 93, 158, 2, 185, 136, + 184, 129, 62, 223, 205, 56, 205, 0, 2, 22, 129, 42, + 5, 55, 2, 21, 4, 0, 2, 21, 2, 55, 135, 0, + 42, 55, 206, 238, 14, 186, 2, 187, 140, 14, 216, 204, + 42, 22, 213, 223, 238, 239, 231, 62, 57, 2, 62, 2, + 63, 129, 2, 2, 22, 6, 55, 2, 21, 4, 0, 2, + 21, 2, 55, 130, 1, 62, 2, 64, 3, 63, 130, 133, + 206, 3, 212, 3, 206, 140, 205, 64, 22, 2, 55, 238, + 239, 62, 4, 57, 63, 4, 7, 55, 2, 21, 4, 0, + 2, 21, 5, 55, 131, 0, 212, 250, 2, 248, 129, 239, + 3, 238, 130, 216, 22, 5, 196, 135, 188, 134, 212, 205, + 120, 53, 22, 8, 55, 2, 21, 4, 0, 2, 21, 6, + 55, 140, 42, 4, 52, 63, 41, 121, 38, 56, 42, 13, + 115, 0, 3, 55, 12, 42, 3, 55, 2, 21, 4, 0, + 2, 21, 4, 55, 129, 22, 6, 55, 130, 4, 42, 2, + 55, 130, 22, 4, 2, 1, 133, 4, 22, 42, 55, 42, + 2, 55, 130, 22, 21, 2, 22, 131, 42, 55, 22, 3, + 55, 2, 21, 4, 0, 2, 21, 2, 55, 133, 42, 4, + 64, 223, 239, 4, 238, 135, 231, 223, 216, 56, 65, 219, + 226, 3, 227, 136, 226, 111, 0, 57, 63, 22, 21, 22, + 7, 55, 2, 21, 4, 0, 2, 21, 11, 55, 133, 42, + 21, 2, 28, 84, 3, 93, 136, 177, 126, 62, 216, 223, + 206, 205, 0, 2, 22, 129, 42, 6, 55, 2, 21, 4, + 0, 2, 21, 2, 55, 135, 22, 13, 185, 130, 13, 54, + 186, 2, 187, 133, 124, 13, 149, 197, 16, 2, 212, 132, + 206, 213, 63, 57, 2, 62, 2, 63, 131, 22, 21, 22, + 7, 55, 2, 21, 4, 0, 2, 21, 2, 55, 132, 42, + 4, 42, 62, 2, 63, 2, 62, 131, 57, 62, 204, 4, + 206, 141, 64, 22, 21, 2, 206, 239, 216, 62, 21, 22, + 21, 22, 42, 6, 55, 2, 21, 4, 0, 2, 21, 2, + 55, 133, 42, 21, 0, 64, 250, 2, 248, 2, 239, 2, + 238, 2, 223, 130, 133, 149, 3, 196, 2, 195, 133, 134, + 212, 133, 127, 1, 9, 55, 2, 21, 4, 0, 2, 21, + 5, 55, 138, 21, 54, 184, 177, 41, 135, 38, 56, 42, + 13, 2, 115, 130, 0, 55, 13, 42, 4, 55, 2, 21, + 4, 0, 2, 21, 4, 55, 129, 22, 6, 55, 131, 42, + 4, 42, 5, 55, 129, 42, 6, 22, 130, 4, 42, 4, + 55, 129, 22, 3, 55, 2, 21, 4, 0, 2, 21, 4, + 55, 132, 22, 4, 133, 223, 3, 238, 2, 223, 144, 216, + 212, 56, 60, 114, 219, 220, 209, 61, 0, 42, 55, 2, + 1, 22, 42, 7, 55, 2, 21, 4, 0, 2, 21, 13, + 55, 141, 42, 21, 2, 28, 75, 84, 28, 62, 212, 213, + 216, 204, 0, 2, 22, 129, 42, 7, 55, 2, 21, 4, + 0, 2, 21, 3, 55, 138, 1, 185, 186, 178, 130, 186, + 187, 195, 178, 188, 2, 197, 130, 22, 212, 3, 206, 2, + 57, 2, 62, 133, 63, 55, 21, 22, 42, 7, 55, 2, + 21, 4, 0, 2, 21, 4, 55, 133, 42, 4, 42, 57, + 62, 3, 57, 141, 56, 55, 63, 204, 63, 21, 2, 4, + 21, 0, 205, 206, 56, 3, 42, 8, 55, 2, 21, 4, + 0, 2, 21, 2, 55, 143, 4, 223, 238, 239, 250, 248, + 204, 21, 133, 238, 223, 216, 204, 21, 188, 5, 195, 133, + 134, 206, 134, 123, 21, 9, 55, 2, 21, 4, 0, 2, + 21, 4, 55, 142, 22, 126, 184, 190, 41, 135, 38, 56, + 22, 0, 115, 119, 115, 0, 13, 42, 5, 55, 2, 21, + 4, 0, 2, 21, 4, 55, 129, 22, 3, 55, 5, 42, + 130, 4, 42, 3, 55, 129, 42, 6, 22, 129, 4, 2, + 22, 3, 55, 130, 42, 22, 3, 55, 2, 21, 4, 0, + 2, 21, 6, 55, 131, 22, 21, 204, 3, 223, 134, 216, + 215, 213, 212, 133, 22, 2, 2, 132, 21, 55, 57, 42, + 2, 133, 130, 22, 21, 8, 55, 2, 21, 4, 0, 2, + 21, 15, 55, 138, 42, 21, 2, 24, 42, 62, 204, 212, + 133, 0, 2, 22, 129, 42, 8, 55, 2, 21, 4, 0, + 2, 21, 3, 55, 130, 21, 178, 3, 186, 2, 187, 2, + 195, 133, 196, 198, 188, 62, 212, 3, 206, 129, 57, 2, + 62, 133, 63, 57, 4, 22, 42, 8, 55, 2, 21, 4, + 0, 2, 21, 6, 55, 134, 42, 4, 22, 56, 57, 56, + 2, 55, 2, 42, 137, 21, 2, 56, 223, 56, 21, 57, + 133, 42, 11, 55, 2, 21, 4, 0, 2, 21, 2, 55, + 129, 1, 3, 250, 138, 248, 213, 21, 55, 21, 206, 223, + 216, 0, 188, 2, 195, 4, 187, 133, 134, 206, 120, 40, + 22, 9, 55, 2, 21, 4, 0, 2, 21, 3, 55, 139, + 42, 40, 184, 199, 193, 43, 38, 177, 126, 4, 0, 2, + 119, 130, 115, 0, 12, 42, 6, 55, 2, 21, 4, 0, + 2, 21, 4, 55, 129, 22, 2, 55, 129, 42, 4, 22, + 132, 55, 42, 4, 22, 2, 55, 129, 42, 5, 22, 129, + 4, 3, 22, 3, 55, 130, 22, 42, 3, 55, 2, 21, + 4, 0, 2, 21, 8, 55, 131, 22, 21, 204, 2, 216, + 129, 213, 2, 212, 2, 206, 2, 64, 129, 57, 2, 62, + 130, 2, 62, 2, 64, 2, 22, 7, 55, 2, 21, 4, + 0, 2, 21, 17, 55, 135, 42, 0, 216, 62, 0, 62, + 0, 2, 22, 129, 42, 9, 55, 2, 21, 4, 0, 2, + 21, 3, 55, 130, 42, 19, 3, 187, 3, 195, 129, 196, + 2, 197, 129, 20, 4, 206, 130, 205, 57, 3, 62, 129, + 2, 2, 22, 9, 55, 2, 21, 4, 0, 2, 21, 8, + 55, 133, 42, 4, 21, 42, 55, 3, 42, 130, 2, 56, + 2, 239, 134, 206, 4, 22, 63, 4, 42, 10, 55, 2, + 21, 4, 0, 2, 21, 2, 55, 129, 1, 2, 250, 2, + 248, 137, 213, 21, 55, 21, 206, 223, 216, 0, 188, 3, + 187, 3, 186, 132, 144, 204, 125, 1, 2, 22, 2, 42, + 6, 55, 2, 21, 4, 0, 2, 21, 3, 55, 143, 21, + 132, 185, 202, 203, 193, 188, 184, 13, 42, 0, 136, 119, + 115, 0, 11, 42, 7, 55, 2, 21, 4, 0, 2, 21, + 4, 55, 130, 22, 42, 2, 55, 3, 42, 4, 55, 133, + 21, 4, 42, 55, 42, 3, 22, 129, 4, 2, 22, 129, + 42, 3, 55, 130, 42, 22, 4, 55, 2, 21, 4, 0, + 2, 21, 10, 55, 2, 22, 129, 204, 2, 212, 3, 206, + 131, 204, 64, 57, 2, 62, 2, 21, 129, 57, 2, 63, + 2, 22, 6, 55, 2, 21, 4, 0, 2, 21, 18, 55, + 133, 0, 238, 223, 57, 0, 2, 22, 129, 42, 10, 55, + 2, 21, 4, 0, 2, 21, 2, 55, 132, 4, 1, 20, + 52, 3, 195, 2, 196, 2, 197, 136, 51, 20, 1, 42, + 206, 205, 204, 57, 2, 62, 2, 21, 129, 22, 10, 55, + 2, 21, 4, 0, 2, 21, 10, 55, 132, 42, 4, 21, + 22, 2, 42, 130, 21, 42, 2, 216, 130, 64, 21, 2, + 4, 130, 22, 42, 10, 55, 2, 21, 4, 0, 2, 21, + 2, 55, 137, 4, 223, 238, 239, 244, 239, 133, 21, 64, + 2, 216, 133, 213, 64, 20, 130, 187, 3, 186, 133, 185, + 178, 134, 53, 21, 5, 22, 2, 42, 3, 55, 2, 21, + 4, 0, 2, 21, 3, 55, 131, 13, 183, 185, 2, 202, + 138, 199, 184, 126, 21, 42, 0, 136, 119, 38, 22, 9, + 42, 9, 55, 2, 21, 4, 0, 2, 21, 4, 55, 130, + 42, 22, 10, 55, 135, 42, 4, 21, 42, 55, 21, 4, + 2, 42, 4, 55, 130, 22, 21, 2, 22, 3, 55, 2, + 21, 4, 0, 2, 21, 12, 55, 131, 21, 42, 133, 3, + 206, 130, 204, 133, 2, 62, 129, 42, 2, 21, 134, 4, + 56, 57, 62, 21, 22, 5, 55, 2, 21, 4, 0, 2, + 21, 18, 55, 132, 0, 223, 55, 2, 2, 22, 129, 42, + 11, 55, 2, 21, 4, 0, 2, 21, 2, 55, 130, 42, + 51, 5, 196, 131, 197, 198, 233, 2, 235, 134, 236, 62, + 133, 206, 205, 204, 2, 62, 132, 42, 21, 22, 42, 10, + 55, 2, 21, 4, 0, 2, 21, 12, 55, 138, 42, 4, + 21, 22, 21, 0, 56, 205, 57, 22, 14, 55, 2, 21, + 4, 0, 2, 21, 2, 55, 132, 42, 21, 0, 63, 2, + 239, 2, 238, 129, 223, 2, 216, 2, 213, 132, 63, 0, + 40, 180, 3, 185, 131, 178, 134, 13, 6, 22, 129, 42, + 4, 55, 2, 21, 4, 0, 2, 21, 2, 55, 143, 42, + 54, 184, 185, 199, 185, 184, 129, 21, 55, 42, 0, 136, + 38, 22, 7, 42, 12, 55, 2, 21, 4, 0, 2, 21, + 5, 55, 130, 22, 42, 11, 55, 130, 22, 1, 2, 2, + 129, 42, 4, 55, 131, 42, 22, 21, 2, 22, 129, 42, + 3, 55, 2, 21, 4, 0, 2, 21, 13, 55, 133, 42, + 21, 42, 64, 205, 2, 204, 131, 62, 56, 4, 2, 22, + 131, 21, 4, 56, 2, 57, 130, 21, 22, 4, 55, 2, + 21, 4, 0, 2, 21, 18, 55, 134, 0, 213, 64, 1, + 22, 42, 12, 55, 2, 21, 4, 0, 2, 21, 3, 55, + 131, 22, 51, 197, 4, 233, 2, 235, 134, 236, 234, 57, + 42, 64, 205, 2, 204, 133, 62, 56, 4, 22, 42, 11, + 55, 2, 21, 4, 0, 2, 21, 14, 55, 129, 42, 2, + 0, 133, 22, 4, 133, 56, 22, 14, 55, 2, 21, 4, + 0, 2, 21, 5, 55, 132, 0, 206, 239, 238, 2, 223, + 3, 213, 134, 206, 21, 55, 42, 4, 126, 2, 185, 131, + 178, 120, 4, 5, 22, 129, 42, 5, 55, 2, 21, 4, + 0, 2, 21, 2, 55, 130, 21, 139, 2, 184, 132, 183, + 177, 54, 21, 2, 55, 132, 42, 0, 38, 22, 4, 42, + 16, 55, 2, 21, 4, 0, 2, 21, 6, 55, 130, 22, + 42, 9, 55, 131, 42, 22, 21, 2, 22, 129, 21, 2, + 2, 2, 4, 130, 21, 42, 7, 55, 2, 21, 4, 0, + 2, 21, 15, 55, 135, 42, 21, 42, 64, 204, 57, 1, + 4, 22, 134, 21, 4, 55, 57, 22, 21, 4, 55, 2, + 21, 4, 0, 2, 21, 18, 55, 133, 4, 57, 206, 0, + 42, 13, 55, 2, 21, 4, 0, 2, 21, 4, 55, 146, + 22, 4, 55, 57, 55, 235, 56, 62, 56, 4, 22, 42, + 21, 42, 64, 204, 57, 1, 2, 22, 12, 55, 2, 21, + 4, 0, 2, 21, 18, 55, 132, 4, 57, 2, 22, 14, + 55, 2, 21, 4, 0, 2, 21, 5, 55, 130, 4, 216, + 2, 238, 135, 212, 63, 21, 62, 212, 56, 22, 3, 55, + 134, 22, 19, 139, 180, 41, 21, 2, 22, 3, 42, 6, + 55, 2, 21, 4, 0, 2, 21, 2, 55, 134, 4, 179, + 177, 126, 40, 22, 5, 55, 130, 0, 22, 3, 42, 18, + 55, 2, 21, 4, 0, 131, 4, 21, 42, 6, 55, 2, + 22, 129, 42, 4, 55, 130, 42, 22, 2, 21, 129, 42, + 16, 55, 131, 42, 21, 4, 4, 0, 131, 4, 21, 42, + 16, 55, 131, 42, 4, 55, 2, 21, 2, 22, 136, 42, + 55, 42, 21, 4, 21, 4, 22, 3, 55, 131, 42, 21, + 4, 4, 0, 131, 4, 21, 42, 18, 55, 132, 42, 4, + 0, 42, 12, 55, 131, 42, 21, 4, 4, 0, 131, 4, + 21, 42, 6, 55, 133, 42, 0, 236, 0, 42, 5, 55, + 131, 42, 4, 55, 2, 21, 129, 22, 12, 55, 131, 42, + 21, 4, 4, 0, 131, 4, 21, 42, 17, 55, 130, 42, + 22, 15, 55, 131, 42, 21, 4, 4, 0, 131, 4, 21, + 42, 4, 55, 138, 0, 213, 238, 223, 204, 4, 55, 22, + 1, 22, 6, 55, 131, 21, 54, 1, 2, 22, 129, 42, + 8, 55, 131, 42, 21, 4, 4, 0, 136, 4, 21, 42, + 55, 0, 4, 22, 55, 2, 56, 5, 55, 129, 22, 3, + 42, 18, 55, 131, 42, 21, 4, 4, 0, 129, 2, 2, + 21, 7, 55, 130, 42, 22, 5, 21, 130, 22, 42, 18, + 55, 2, 21, 129, 2, 4, 0, 129, 2, 2, 21, 18, + 55, 130, 42, 21, 2, 42, 5, 55, 2, 22, 129, 42, + 4, 55, 2, 21, 129, 2, 4, 0, 129, 2, 2, 21, + 20, 55, 129, 42, 13, 55, 2, 21, 129, 2, 4, 0, + 129, 2, 2, 21, 7, 55, 3, 0, 8, 55, 130, 42, + 21, 2, 42, 12, 55, 2, 21, 129, 2, 4, 0, 129, + 2, 2, 21, 34, 55, 2, 21, 129, 2, 4, 0, 129, + 2, 2, 21, 4, 55, 134, 42, 4, 55, 64, 55, 42, + 11, 55, 130, 42, 21, 2, 42, 9, 55, 2, 21, 129, + 2, 4, 0, 129, 2, 2, 21, 12, 55, 4, 42, 18, + 55, 2, 21, 129, 2, 5, 0, 2, 21, 129, 22, 32, + 55, 129, 22, 2, 21, 6, 0, 2, 21, 129, 22, 32, + 55, 129, 22, 2, 21, 6, 0, 2, 21, 129, 22, 32, + 55, 129, 22, 2, 21, 6, 0, 2, 21, 129, 22, 32, + 55, 129, 22, 2, 21, 6, 0, 2, 21, 129, 22, 32, + 55, 129, 22, 2, 21, 6, 0, 2, 21, 129, 22, 5, + 55, 129, 42, 2, 22, 24, 55, 129, 22, 2, 21, 6, + 0, 2, 21, 129, 22, 11, 55, 3, 42, 18, 55, 129, + 22, 2, 21, 6, 0, 129, 1, 2, 21, 129, 22, 30, + 55, 129, 22, 2, 21, 129, 1, 6, 0, 129, 1, 2, + 21, 129, 22, 30, 55, 129, 22, 2, 21, 129, 1, 6, + 0, 129, 1, 2, 21, 129, 22, 30, 55, 129, 22, 2, + 21, 129, 1, 6, 0, 129, 1, 2, 21, 129, 22, 30, + 55, 129, 22, 2, 21, 129, 1, 6, 0, 129, 1, 2, + 21, 129, 22, 30, 55, 129, 22, 2, 21, 129, 1, 6, + 0, 129, 1, 2, 21, 129, 22, 30, 55, 129, 22, 2, + 21, 129, 1, 6, 0, 129, 1, 2, 21, 129, 22, 30, + 55, 129, 22, 2, 21, 129, 1, 7, 0, 129, 2, 3, + 21, 129, 42, 26, 55, 129, 42, 3, 21, 129, 2, 8, + 0, 129, 2, 3, 21, 129, 42, 26, 55, 129, 42, 3, + 21, 129, 2, 8, 0, 129, 2, 3, 21, 129, 42, 26, + 55, 129, 42, 3, 21, 129, 2, 8, 0, 129, 2, 3, + 21, 129, 42, 26, 55, 129, 42, 3, 21, 129, 2, 8, + 0, 129, 2, 3, 21, 129, 42, 26, 55, 129, 42, 3, + 21, 129, 2, 8, 0, 129, 2, 3, 21, 129, 42, 26, + 55, 129, 42, 3, 21, 129, 2, 8, 0, 129, 2, 3, + 21, 129, 42, 26, 55, 129, 42, 3, 21, 129, 2, 9, + 0, 129, 1, 32, 21, 129, 1, 10, 0, 129, 1, 32, + 21, 129, 1, 10, 0, 129, 1, 32, 21, 129, 1, 10, + 0, 129, 1, 32, 21, 129, 1, 10, 0, 129, 1, 32, + 21, 129, 1, 10, 0, 129, 1, 32, 21, 129, 1, 10, + 0, 129, 1, 32, 21, 129, 1, 12, 0, 130, 2, 4, + 26, 21, 130, 4, 2, 14, 0, 130, 2, 4, 26, 21, + 130, 4, 2, 14, 0, 130, 2, 4, 26, 21, 130, 4, + 2, 14, 0, 130, 2, 4, 26, 21, 130, 4, 2, 14, + 0, 130, 2, 4, 26, 21, 130, 4, 2, 14, 0, 130, + 2, 4, 26, 21, 130, 4, 2, 14, 0, 130, 2, 4, + 26, 21, 130, 4, 2, 14, 0, 130, 1, 2, 26, 4, + 130, 2, 1, 14, 0, 130, 1, 2, 26, 4, 130, 2, + 1, 14, 0, 130, 1, 2, 26, 4, 130, 2, 1, 14, + 0, 130, 1, 2, 26, 4, 130, 2, 1, 14, 0, 130, + 1, 2, 26, 4, 130, 2, 1, 14, 0, 130, 1, 2, + 26, 4, 130, 2, 1, 14, 0, 130, 1, 2, 26, 4, + 130, 2, 1, 12, 0, 129, 1, 32, 4, 129, 1, 10, + 0, 129, 1, 32, 4, 129, 1, 10, 0, 129, 1, 32, + 4, 129, 1, 10, 0, 129, 1, 32, 4, 129, 1, 10, + 0, 129, 1, 32, 4, 129, 1, 10, 0, 129, 1, 32, + 4, 129, 1, 10, 0, 129, 1, 32, 4, 129, 1, 9, + 0, 129, 1, 3, 4, 129, 21, 26, 22, 129, 21, 3, + 4, 129, 1, 8, 0, 129, 1, 3, 4, 129, 21, 26, + 22, 129, 21, 3, 4, 129, 1, 8, 0, 129, 1, 3, + 4, 129, 21, 26, 22, 129, 21, 3, 4, 129, 1, 8, + 0, 129, 1, 3, 4, 129, 21, 26, 22, 129, 21, 3, + 4, 129, 1, 8, 0, 129, 1, 3, 4, 129, 21, 26, + 22, 129, 21, 3, 4, 129, 1, 8, 0, 129, 1, 3, + 4, 129, 21, 26, 22, 129, 21, 3, 4, 129, 1, 8, + 0, 129, 1, 3, 4, 129, 21, 26, 22, 129, 21, 3, + 4, 129, 1, 7, 0, 129, 1, 2, 4, 129, 21, 30, + 22, 129, 21, 2, 4, 129, 1, 6, 0, 129, 1, 2, + 4, 129, 21, 30, 22, 129, 21, 2, 4, 129, 1, 6, + 0, 129, 1, 2, 4, 129, 21, 30, 22, 129, 21, 2, + 4, 129, 1, 6, 0, 129, 1, 2, 4, 129, 21, 30, + 22, 129, 21, 2, 4, 129, 1, 6, 0, 129, 1, 2, + 4, 129, 21, 30, 22, 129, 21, 2, 4, 129, 1, 6, + 0, 129, 1, 2, 4, 129, 21, 30, 22, 129, 21, 2, + 4, 129, 1, 6, 0, 129, 1, 2, 4, 129, 21, 30, + 22, 129, 21, 2, 4, 129, 1, 6, 0, 2, 4, 129, + 21, 32, 22, 129, 21, 2, 4, 6, 0, 2, 4, 129, + 21, 32, 22, 129, 21, 2, 4, 6, 0, 2, 4, 129, + 21, 32, 22, 129, 21, 2, 4, 6, 0, 2, 4, 129, + 21, 32, 22, 129, 21, 2, 4, 6, 0, 2, 4, 129, + 21, 32, 22, 129, 21, 2, 4, 6, 0, 2, 4, 129, + 21, 32, 22, 129, 21, 2, 4, 6, 0, 2, 4, 129, + 21, 24, 22, 2, 21, 2, 4, 2, 1, 2, 22, 129, + 21, 2, 4, 5, 0, 129, 1, 2, 4, 34, 22, 2, + 4, 129, 1, 4, 0, 129, 1, 2, 4, 13, 22, 129, + 21, 20, 22, 2, 4, 129, 1, 4, 0, 129, 1, 2, + 4, 34, 22, 2, 4, 129, 1, 4, 0, 129, 1, 2, + 4, 13, 22, 129, 21, 20, 22, 2, 4, 129, 1, 4, + 0, 129, 1, 2, 4, 34, 22, 2, 4, 129, 1, 4, + 0, 129, 1, 2, 4, 34, 22, 2, 4, 129, 1, 4, + 0, 129, 1, 2, 4, 23, 22, 129, 21, 3, 1, 130, + 21, 22, 2, 2, 3, 22, 2, 4, 129, 1, 4, 0, + 131, 2, 4, 21, 9, 22, 130, 21, 4, 4, 2, 130, + 4, 21, 17, 22, 131, 21, 4, 2, 4, 0, 131, 2, + 4, 21, 12, 22, 133, 4, 56, 22, 4, 21, 17, 22, + 131, 21, 4, 2, 4, 0, 131, 2, 4, 21, 34, 22, + 131, 21, 4, 2, 4, 0, 131, 2, 4, 21, 12, 22, + 133, 4, 56, 22, 4, 21, 17, 22, 131, 21, 4, 2, + 4, 0, 131, 2, 4, 21, 34, 22, 131, 21, 4, 2, + 4, 0, 131, 2, 4, 21, 34, 22, 131, 21, 4, 2, + 4, 0, 131, 2, 4, 21, 21, 22, 129, 4, 3, 1, + 131, 4, 55, 22, 2, 1, 129, 4, 3, 22, 131, 21, + 4, 2, 4, 0, 2, 4, 9, 22, 2, 4, 129, 21, + 5, 22, 129, 21, 2, 4, 129, 21, 15, 22, 2, 4, + 4, 0, 2, 4, 12, 22, 130, 4, 57, 2, 133, 133, + 63, 56, 21, 4, 21, 15, 22, 2, 4, 4, 0, 2, + 4, 36, 22, 2, 4, 4, 0, 2, 4, 12, 22, 130, + 4, 57, 2, 133, 133, 63, 56, 21, 4, 21, 15, 22, + 2, 4, 4, 0, 2, 4, 36, 22, 2, 4, 4, 0, + 2, 4, 14, 22, 2, 2, 130, 4, 21, 18, 22, 2, + 4, 4, 0, 2, 4, 20, 22, 130, 21, 2, 2, 21, + 129, 22, 2, 57, 129, 21, 3, 1, 129, 4, 4, 22, + 2, 4, 4, 0, 2, 4, 8, 22, 130, 2, 21, 9, + 22, 129, 21, 3, 1, 130, 2, 4, 2, 21, 9, 22, + 2, 4, 4, 0, 2, 4, 11, 22, 130, 4, 57, 3, + 133, 3, 64, 130, 62, 55, 2, 4, 129, 21, 12, 22, + 2, 4, 4, 0, 2, 4, 36, 22, 2, 4, 4, 0, + 2, 4, 11, 22, 130, 4, 57, 3, 133, 3, 64, 130, + 62, 55, 2, 4, 129, 21, 12, 22, 2, 4, 4, 0, + 2, 4, 18, 22, 130, 4, 2, 2, 21, 14, 22, 2, + 4, 4, 0, 2, 4, 9, 22, 130, 4, 21, 2, 22, + 134, 21, 22, 62, 57, 56, 42, 2, 4, 2, 21, 133, + 22, 21, 2, 1, 4, 3, 21, 5, 22, 2, 4, 4, + 0, 2, 4, 19, 22, 130, 21, 2, 2, 21, 133, 55, + 63, 57, 21, 2, 3, 1, 129, 21, 4, 22, 2, 4, + 4, 0, 2, 4, 7, 22, 130, 2, 21, 7, 22, 132, + 21, 4, 2, 4, 2, 21, 130, 2, 4, 2, 21, 2, + 4, 8, 22, 2, 4, 4, 0, 2, 4, 10, 22, 130, + 4, 62, 4, 133, 5, 64, 133, 63, 57, 42, 2, 21, + 10, 22, 2, 4, 4, 0, 2, 4, 36, 22, 2, 4, + 4, 0, 2, 4, 10, 22, 130, 4, 62, 4, 133, 5, + 64, 133, 63, 57, 42, 2, 21, 10, 22, 2, 4, 4, + 0, 2, 4, 16, 22, 136, 21, 2, 42, 55, 42, 21, + 2, 21, 12, 22, 2, 4, 4, 0, 2, 4, 9, 22, + 131, 1, 57, 21, 2, 2, 129, 57, 5, 63, 141, 62, + 57, 55, 21, 42, 62, 63, 62, 57, 56, 42, 21, 1, + 3, 22, 2, 4, 4, 0, 2, 4, 18, 22, 130, 21, + 2, 2, 21, 131, 57, 64, 56, 3, 21, 3, 1, 129, + 21, 4, 22, 2, 4, 4, 0, 2, 4, 6, 22, 130, + 21, 4, 7, 22, 2, 4, 129, 21, 5, 22, 130, 21, + 4, 2, 22, 130, 21, 2, 7, 22, 2, 4, 4, 0, + 2, 4, 9, 22, 130, 4, 62, 5, 133, 6, 64, 2, + 63, 133, 62, 57, 22, 4, 21, 7, 22, 2, 4, 4, + 0, 2, 4, 36, 22, 2, 4, 4, 0, 2, 4, 9, + 22, 130, 4, 62, 5, 133, 6, 64, 2, 63, 133, 62, + 57, 22, 4, 21, 7, 22, 2, 4, 4, 0, 2, 4, + 15, 22, 2, 21, 129, 55, 2, 56, 2, 55, 130, 22, + 4, 2, 22, 129, 21, 9, 22, 2, 4, 4, 0, 2, + 4, 2, 22, 130, 4, 21, 5, 22, 129, 1, 2, 204, + 131, 64, 57, 62, 16, 63, 130, 62, 2, 3, 22, 2, + 4, 4, 0, 2, 4, 18, 22, 129, 2, 2, 21, 131, + 57, 64, 56, 4, 21, 129, 4, 2, 1, 5, 22, 2, + 4, 4, 0, 2, 4, 6, 22, 130, 4, 21, 5, 22, + 131, 21, 4, 21, 8, 22, 130, 21, 4, 2, 22, 130, + 21, 2, 6, 22, 2, 4, 4, 0, 2, 4, 8, 22, + 131, 4, 62, 204, 4, 133, 7, 64, 5, 63, 133, 62, + 56, 21, 4, 21, 4, 22, 2, 4, 4, 0, 2, 4, + 36, 22, 2, 4, 4, 0, 2, 4, 8, 22, 131, 4, + 62, 204, 4, 133, 7, 64, 5, 63, 133, 62, 56, 21, + 4, 21, 4, 22, 2, 4, 4, 0, 2, 4, 14, 22, + 130, 4, 22, 4, 56, 3, 55, 129, 22, 2, 21, 132, + 22, 21, 2, 21, 6, 22, 2, 4, 4, 0, 2, 4, + 2, 22, 129, 21, 2, 22, 130, 2, 21, 2, 22, 129, + 1, 5, 204, 130, 64, 63, 2, 62, 12, 63, 130, 55, + 21, 3, 22, 2, 4, 4, 0, 2, 4, 17, 22, 129, + 4, 2, 21, 131, 57, 64, 55, 5, 21, 131, 4, 1, + 21, 5, 22, 2, 4, 4, 0, 2, 4, 6, 22, 129, + 1, 5, 22, 130, 4, 21, 12, 22, 129, 4, 2, 22, + 130, 4, 21, 5, 22, 2, 4, 4, 0, 2, 4, 7, + 22, 130, 4, 62, 2, 204, 4, 133, 7, 64, 8, 63, + 130, 57, 1, 4, 22, 2, 4, 4, 0, 2, 4, 12, + 22, 2, 2, 129, 21, 21, 22, 2, 4, 4, 0, 2, + 4, 7, 22, 130, 4, 62, 2, 204, 4, 133, 7, 64, + 8, 63, 130, 57, 1, 4, 22, 2, 4, 4, 0, 2, + 4, 13, 22, 131, 2, 42, 57, 4, 56, 9, 55, 131, + 22, 21, 1, 4, 22, 2, 4, 4, 0, 2, 4, 4, + 22, 131, 64, 62, 55, 2, 2, 129, 1, 8, 204, 130, + 64, 62, 2, 57, 9, 62, 129, 21, 4, 22, 2, 4, + 4, 0, 2, 4, 16, 22, 134, 21, 4, 21, 57, 64, + 55, 4, 21, 3, 4, 129, 1, 6, 22, 2, 4, 4, + 0, 2, 4, 6, 22, 129, 2, 4, 22, 130, 4, 21, + 14, 22, 132, 4, 22, 21, 4, 5, 22, 2, 4, 4, + 0, 2, 4, 6, 22, 130, 4, 62, 3, 204, 4, 133, + 7, 64, 8, 63, 130, 56, 1, 4, 22, 2, 4, 4, + 0, 2, 4, 10, 22, 135, 21, 4, 56, 62, 42, 2, + 21, 19, 22, 2, 4, 4, 0, 2, 4, 6, 22, 130, + 4, 62, 3, 204, 4, 133, 7, 64, 8, 63, 130, 56, + 1, 4, 22, 2, 4, 4, 0, 2, 4, 11, 22, 131, + 21, 4, 56, 2, 57, 4, 56, 10, 55, 130, 22, 1, + 4, 22, 2, 4, 4, 0, 2, 4, 3, 22, 130, 4, + 62, 2, 64, 132, 63, 57, 21, 133, 10, 204, 133, 64, + 62, 55, 56, 57, 4, 62, 130, 57, 4, 4, 22, 2, + 4, 4, 0, 2, 4, 16, 22, 133, 2, 21, 55, 64, + 55, 4, 21, 3, 4, 130, 2, 4, 6, 22, 2, 4, + 4, 0, 2, 4, 5, 22, 3, 4, 131, 21, 22, 4, + 4, 22, 130, 21, 4, 2, 1, 130, 4, 21, 6, 22, + 132, 21, 4, 22, 1, 5, 22, 2, 4, 4, 0, 2, + 4, 5, 22, 130, 4, 62, 3, 204, 5, 133, 6, 64, + 8, 63, 131, 56, 42, 1, 4, 22, 2, 4, 4, 0, + 2, 4, 9, 22, 2, 21, 129, 57, 3, 64, 132, 62, + 42, 2, 21, 17, 22, 2, 4, 4, 0, 2, 4, 5, + 22, 130, 4, 62, 3, 204, 5, 133, 6, 64, 8, 63, + 131, 56, 42, 1, 4, 22, 2, 4, 4, 0, 2, 4, + 10, 22, 130, 21, 22, 4, 57, 4, 56, 9, 55, 131, + 22, 4, 1, 4, 22, 2, 4, 4, 0, 2, 4, 3, + 22, 130, 21, 56, 5, 64, 132, 62, 57, 63, 133, 9, + 204, 133, 133, 63, 57, 42, 55, 2, 62, 130, 22, 21, + 4, 22, 2, 4, 4, 0, 2, 4, 15, 22, 2, 21, + 131, 22, 63, 56, 4, 21, 3, 4, 130, 2, 1, 7, + 22, 2, 4, 4, 0, 2, 4, 4, 22, 134, 4, 57, + 63, 57, 42, 4, 4, 22, 130, 2, 21, 3, 22, 129, + 21, 2, 2, 6, 22, 2, 21, 129, 1, 5, 22, 2, + 4, 4, 0, 2, 4, 4, 22, 130, 4, 62, 4, 204, + 4, 133, 7, 64, 7, 63, 132, 57, 42, 55, 1, 4, + 22, 2, 4, 4, 0, 2, 4, 8, 22, 131, 4, 42, + 62, 3, 64, 135, 63, 62, 63, 57, 42, 4, 21, 10, + 22, 130, 4, 21, 3, 22, 2, 4, 4, 0, 2, 4, + 4, 22, 130, 4, 62, 4, 204, 4, 133, 7, 64, 7, + 63, 132, 57, 42, 55, 1, 4, 22, 2, 4, 4, 0, + 2, 4, 9, 22, 130, 4, 42, 5, 57, 4, 56, 8, + 55, 132, 22, 4, 2, 1, 4, 22, 2, 4, 4, 0, + 2, 4, 4, 22, 129, 4, 7, 64, 132, 62, 56, 57, + 63, 10, 133, 130, 57, 55, 2, 57, 129, 1, 5, 22, + 2, 4, 4, 0, 2, 4, 15, 22, 132, 2, 21, 62, + 57, 4, 21, 3, 4, 131, 2, 1, 21, 7, 22, 2, + 4, 4, 0, 2, 4, 4, 22, 134, 55, 64, 133, 62, + 57, 2, 3, 22, 130, 2, 22, 4, 42, 132, 22, 21, + 4, 2, 6, 22, 130, 4, 1, 5, 22, 2, 4, 4, + 0, 2, 4, 3, 22, 130, 4, 62, 5, 204, 4, 133, + 2, 64, 130, 57, 42, 2, 4, 130, 42, 57, 5, 63, + 129, 62, 2, 42, 130, 55, 1, 4, 22, 2, 4, 4, + 0, 2, 4, 7, 22, 139, 2, 55, 62, 64, 63, 64, + 63, 62, 64, 62, 63, 2, 57, 129, 42, 2, 4, 7, + 22, 131, 4, 21, 42, 3, 22, 2, 4, 4, 0, 2, + 4, 3, 22, 130, 4, 62, 5, 204, 4, 133, 7, 64, + 6, 63, 129, 62, 2, 42, 130, 55, 1, 4, 22, 2, + 4, 4, 0, 2, 4, 7, 22, 131, 21, 2, 55, 6, + 57, 4, 56, 7, 55, 129, 22, 2, 4, 131, 55, 42, + 21, 3, 22, 2, 4, 4, 0, 2, 4, 4, 22, 130, + 4, 62, 8, 64, 133, 63, 57, 42, 57, 63, 7, 133, + 2, 56, 131, 57, 42, 21, 5, 22, 2, 4, 4, 0, + 2, 4, 14, 22, 130, 4, 21, 2, 57, 3, 21, 4, + 4, 131, 2, 1, 21, 8, 22, 2, 4, 4, 0, 2, + 4, 3, 22, 135, 21, 55, 63, 64, 62, 57, 4, 2, + 22, 2, 21, 138, 42, 55, 57, 55, 42, 22, 21, 4, + 2, 21, 6, 22, 129, 1, 5, 22, 2, 4, 4, 0, + 2, 4, 2, 22, 130, 4, 62, 6, 204, 4, 133, 129, + 64, 2, 22, 129, 56, 2, 57, 129, 56, 2, 22, 3, + 63, 129, 62, 2, 42, 2, 55, 129, 1, 4, 22, 2, + 4, 4, 0, 2, 4, 5, 22, 2, 21, 137, 57, 63, + 64, 62, 64, 63, 56, 57, 62, 2, 63, 134, 57, 63, + 57, 55, 1, 4, 5, 22, 132, 4, 57, 64, 57, 3, + 22, 2, 4, 4, 0, 2, 4, 2, 22, 130, 4, 62, + 6, 204, 4, 133, 7, 64, 5, 63, 129, 62, 2, 42, + 2, 55, 129, 1, 4, 22, 2, 4, 4, 0, 2, 4, + 6, 22, 2, 21, 8, 57, 4, 56, 6, 55, 135, 22, + 4, 21, 56, 64, 62, 2, 3, 22, 2, 4, 4, 0, + 2, 4, 4, 22, 130, 21, 42, 11, 64, 129, 57, 2, + 42, 131, 57, 63, 64, 2, 133, 130, 64, 22, 2, 57, + 129, 4, 6, 22, 2, 4, 4, 0, 2, 4, 13, 22, + 2, 21, 130, 55, 57, 3, 21, 4, 4, 131, 2, 1, + 21, 9, 22, 2, 4, 4, 0, 2, 4, 5, 22, 2, + 62, 131, 57, 56, 21, 2, 22, 134, 4, 22, 42, 57, + 204, 57, 2, 42, 132, 21, 4, 21, 4, 6, 22, 130, + 1, 21, 4, 22, 2, 4, 4, 0, 2, 4, 2, 22, + 131, 1, 64, 133, 4, 204, 4, 133, 131, 64, 22, 42, + 2, 57, 3, 62, 133, 57, 42, 22, 63, 62, 3, 42, + 2, 55, 130, 1, 21, 3, 22, 2, 4, 4, 0, 2, + 4, 4, 22, 134, 4, 22, 57, 63, 64, 62, 2, 57, + 129, 42, 3, 21, 2, 57, 2, 63, 134, 57, 55, 22, + 2, 21, 22, 2, 21, 133, 4, 57, 64, 63, 4, 3, + 22, 2, 4, 4, 0, 2, 4, 2, 22, 131, 1, 64, + 133, 4, 204, 5, 133, 6, 64, 5, 63, 129, 62, 3, + 42, 2, 55, 130, 1, 21, 3, 22, 2, 4, 4, 0, + 2, 4, 5, 22, 130, 4, 22, 9, 57, 4, 56, 5, + 55, 129, 21, 3, 4, 132, 57, 62, 57, 1, 3, 22, + 2, 4, 4, 0, 2, 4, 5, 22, 130, 2, 63, 12, + 64, 132, 62, 55, 22, 62, 2, 64, 133, 63, 42, 56, + 55, 4, 6, 22, 2, 4, 4, 0, 2, 4, 6, 22, + 129, 21, 6, 1, 131, 4, 22, 57, 3, 21, 3, 4, + 131, 2, 1, 4, 11, 22, 2, 4, 4, 0, 2, 4, + 4, 22, 133, 21, 22, 55, 42, 4, 3, 22, 140, 1, + 22, 42, 55, 57, 55, 42, 22, 21, 4, 21, 1, 5, + 22, 131, 21, 4, 21, 4, 22, 2, 4, 4, 0, 2, + 4, 2, 22, 129, 1, 2, 63, 130, 64, 133, 2, 204, + 4, 133, 131, 57, 22, 57, 2, 204, 3, 63, 2, 62, + 131, 22, 57, 55, 3, 42, 131, 55, 42, 2, 2, 21, + 2, 22, 2, 4, 4, 0, 2, 4, 3, 22, 131, 4, + 42, 62, 2, 64, 129, 62, 2, 57, 130, 56, 4, 3, + 2, 132, 21, 56, 63, 57, 3, 56, 131, 55, 21, 2, + 2, 4, 132, 57, 62, 63, 42, 2, 21, 2, 22, 2, + 4, 4, 0, 2, 4, 2, 22, 129, 1, 2, 63, 130, + 64, 133, 2, 204, 4, 133, 7, 64, 5, 63, 129, 55, + 3, 42, 131, 55, 42, 2, 2, 21, 2, 22, 2, 4, + 4, 0, 2, 4, 4, 22, 130, 2, 55, 10, 57, 4, + 56, 4, 55, 137, 21, 2, 4, 2, 1, 2, 56, 55, + 2, 3, 22, 2, 4, 4, 0, 2, 4, 5, 22, 130, + 21, 57, 14, 64, 130, 42, 62, 2, 64, 131, 57, 42, + 55, 2, 21, 6, 22, 2, 4, 4, 0, 2, 4, 5, + 22, 130, 21, 4, 4, 55, 129, 42, 2, 21, 130, 42, + 22, 2, 21, 3, 4, 2, 2, 129, 21, 12, 22, 2, + 4, 4, 0, 2, 4, 5, 22, 129, 21, 3, 4, 3, + 22, 130, 1, 22, 5, 42, 133, 22, 21, 4, 21, 1, + 3, 22, 133, 21, 4, 21, 1, 4, 4, 22, 2, 4, + 4, 0, 2, 4, 2, 22, 135, 1, 63, 62, 56, 57, + 63, 64, 4, 133, 131, 42, 56, 62, 2, 204, 3, 64, + 132, 63, 62, 57, 4, 3, 42, 131, 55, 42, 2, 2, + 21, 3, 22, 2, 4, 4, 0, 2, 4, 2, 22, 143, + 21, 2, 22, 57, 63, 64, 63, 62, 63, 64, 57, 42, + 1, 22, 63, 2, 57, 130, 63, 56, 2, 57, 2, 56, + 135, 42, 4, 56, 57, 62, 56, 1, 2, 21, 2, 22, + 2, 4, 4, 0, 2, 4, 2, 22, 134, 1, 63, 62, + 56, 57, 63, 2, 64, 3, 133, 7, 64, 4, 63, 129, + 56, 3, 42, 131, 55, 42, 2, 2, 21, 3, 22, 2, + 4, 4, 0, 2, 4, 2, 22, 131, 21, 4, 56, 11, + 57, 4, 56, 3, 55, 131, 21, 2, 21, 2, 62, 2, + 2, 2, 42, 129, 4, 3, 22, 2, 4, 4, 0, 2, + 4, 6, 22, 130, 21, 63, 2, 57, 11, 64, 130, 55, + 57, 2, 63, 129, 56, 2, 42, 129, 1, 7, 22, 2, + 4, 4, 0, 2, 4, 4, 22, 130, 21, 4, 4, 42, + 130, 22, 2, 2, 21, 131, 1, 4, 21, 2, 4, 131, + 2, 1, 21, 14, 22, 2, 4, 4, 0, 2, 4, 5, + 22, 129, 21, 2, 22, 129, 2, 3, 22, 130, 4, 21, + 2, 22, 129, 42, 2, 22, 129, 21, 2, 4, 130, 21, + 4, 2, 22, 135, 21, 22, 64, 62, 56, 1, 21, 3, + 22, 2, 4, 4, 0, 2, 4, 2, 22, 136, 1, 63, + 56, 62, 57, 55, 57, 63, 2, 64, 133, 133, 4, 57, + 62, 64, 4, 133, 132, 64, 63, 62, 2, 3, 42, 132, + 55, 21, 4, 21, 4, 22, 2, 4, 4, 0, 2, 4, + 4, 22, 134, 21, 2, 22, 57, 63, 64, 2, 62, 138, + 63, 62, 56, 57, 62, 22, 21, 55, 56, 63, 2, 62, + 131, 56, 21, 56, 2, 57, 130, 55, 1, 2, 21, 3, + 22, 2, 4, 4, 0, 2, 4, 2, 22, 139, 1, 63, + 56, 62, 57, 55, 42, 1, 57, 64, 133, 7, 64, 3, + 63, 130, 56, 22, 3, 42, 132, 55, 21, 4, 21, 4, + 22, 2, 4, 4, 0, 2, 4, 2, 22, 130, 1, 56, + 12, 57, 4, 56, 2, 55, 129, 21, 2, 4, 134, 57, + 64, 62, 22, 4, 22, 2, 21, 3, 22, 2, 4, 4, + 0, 2, 4, 5, 22, 134, 21, 1, 22, 57, 22, 62, + 10, 64, 130, 56, 57, 2, 62, 2, 42, 130, 22, 4, + 7, 22, 2, 4, 4, 0, 2, 4, 3, 22, 130, 21, + 2, 5, 21, 134, 2, 22, 21, 4, 21, 1, 2, 4, + 2, 2, 129, 21, 15, 22, 2, 4, 4, 0, 2, 4, + 5, 22, 129, 21, 2, 22, 130, 21, 4, 2, 22, 130, + 21, 2, 5, 21, 2, 4, 131, 21, 4, 21, 2, 22, + 133, 21, 56, 133, 63, 57, 2, 21, 3, 22, 2, 4, + 4, 0, 2, 4, 2, 22, 136, 1, 63, 62, 55, 56, + 42, 56, 62, 3, 63, 133, 4, 57, 62, 63, 64, 3, + 133, 132, 64, 63, 62, 2, 2, 42, 132, 55, 22, 4, + 21, 5, 22, 2, 4, 4, 0, 2, 4, 5, 22, 2, + 21, 135, 2, 22, 57, 62, 63, 62, 57, 2, 62, 129, + 55, 3, 2, 133, 56, 57, 56, 55, 21, 3, 57, 130, + 42, 1, 2, 21, 4, 22, 2, 4, 4, 0, 2, 4, + 2, 22, 139, 1, 63, 62, 55, 56, 21, 4, 57, 4, + 62, 63, 7, 64, 2, 63, 129, 57, 2, 22, 2, 42, + 132, 55, 22, 4, 21, 5, 22, 2, 4, 4, 0, 2, + 4, 2, 22, 131, 1, 42, 55, 10, 57, 5, 56, 130, + 55, 21, 3, 4, 131, 21, 62, 57, 2, 21, 131, 2, + 4, 21, 3, 22, 2, 4, 4, 0, 2, 4, 5, 22, + 130, 2, 63, 2, 133, 136, 57, 21, 63, 56, 2, 56, + 63, 64, 4, 63, 130, 57, 56, 2, 62, 132, 22, 42, + 4, 21, 7, 22, 2, 4, 4, 0, 2, 4, 2, 22, + 129, 21, 7, 1, 2, 42, 131, 4, 21, 2, 2, 4, + 130, 1, 21, 8, 22, 6, 21, 3, 22, 2, 4, 4, + 0, 2, 4, 4, 22, 129, 21, 4, 22, 130, 4, 21, + 2, 22, 129, 2, 6, 4, 2, 21, 129, 2, 3, 22, + 130, 21, 55, 2, 62, 131, 57, 4, 21, 3, 22, 2, + 4, 4, 0, 2, 4, 2, 22, 129, 1, 3, 63, 129, + 62, 2, 57, 129, 62, 2, 63, 134, 62, 22, 56, 62, + 63, 64, 3, 133, 132, 64, 63, 57, 4, 2, 42, 130, + 22, 2, 2, 21, 5, 22, 2, 4, 4, 0, 2, 4, + 7, 22, 2, 21, 141, 2, 22, 57, 62, 63, 62, 57, + 63, 62, 42, 56, 63, 57, 2, 22, 133, 62, 21, 62, + 55, 1, 2, 21, 5, 22, 2, 4, 4, 0, 2, 4, + 2, 22, 129, 1, 3, 63, 134, 62, 22, 55, 62, 56, + 55, 4, 62, 3, 64, 2, 63, 129, 62, 2, 22, 3, + 42, 130, 22, 2, 2, 21, 5, 22, 2, 4, 4, 0, + 2, 4, 2, 22, 129, 1, 4, 42, 129, 56, 7, 57, + 4, 56, 135, 42, 21, 2, 21, 42, 1, 4, 2, 55, + 129, 4, 7, 22, 2, 4, 4, 0, 2, 4, 5, 22, + 139, 2, 63, 133, 64, 63, 56, 21, 42, 62, 22, 57, + 5, 63, 130, 57, 56, 2, 57, 2, 22, 129, 2, 8, + 22, 2, 4, 4, 0, 2, 4, 8, 22, 135, 4, 22, + 42, 21, 22, 2, 4, 2, 2, 129, 1, 5, 22, 10, + 21, 3, 22, 2, 4, 4, 0, 2, 4, 4, 22, 129, + 21, 5, 22, 130, 2, 21, 2, 22, 2, 2, 4, 21, + 130, 4, 2, 5, 22, 132, 2, 55, 56, 22, 2, 21, + 3, 22, 2, 4, 4, 0, 2, 4, 2, 22, 130, 1, + 62, 7, 63, 2, 62, 133, 56, 22, 57, 62, 63, 3, + 64, 130, 63, 62, 2, 22, 2, 42, 129, 2, 2, 21, + 6, 22, 2, 4, 4, 0, 2, 4, 9, 22, 2, 21, + 131, 2, 22, 55, 3, 56, 129, 57, 2, 63, 136, 57, + 55, 42, 62, 56, 21, 56, 1, 2, 21, 6, 22, 2, + 4, 4, 0, 2, 4, 2, 22, 129, 1, 2, 21, 131, + 56, 62, 4, 3, 62, 131, 4, 62, 55, 2, 21, 130, + 57, 62, 2, 63, 129, 62, 3, 22, 3, 42, 129, 2, + 2, 21, 6, 22, 2, 4, 4, 0, 2, 4, 2, 22, + 129, 1, 6, 42, 129, 55, 5, 57, 3, 56, 132, 42, + 21, 2, 21, 2, 63, 133, 22, 2, 22, 42, 2, 7, + 22, 2, 4, 4, 0, 2, 4, 5, 22, 131, 1, 57, + 133, 3, 64, 129, 63, 2, 62, 131, 57, 4, 62, 4, + 63, 133, 62, 55, 57, 56, 22, 2, 21, 8, 22, 2, + 4, 4, 0, 2, 4, 6, 22, 135, 21, 4, 21, 42, + 21, 22, 2, 2, 21, 131, 1, 4, 1, 3, 22, 12, + 21, 3, 22, 2, 4, 4, 0, 2, 4, 4, 22, 129, + 21, 6, 22, 130, 2, 21, 2, 22, 130, 21, 4, 2, + 1, 130, 4, 21, 5, 22, 130, 21, 4, 3, 21, 130, + 22, 21, 3, 22, 2, 4, 4, 0, 2, 4, 2, 22, + 132, 21, 2, 55, 62, 4, 63, 4, 62, 130, 22, 42, + 2, 62, 3, 63, 133, 62, 55, 1, 22, 42, 2, 4, + 129, 21, 7, 22, 2, 4, 4, 0, 2, 4, 11, 22, + 2, 21, 131, 2, 21, 55, 3, 56, 129, 57, 2, 42, + 2, 62, 131, 57, 56, 1, 2, 21, 7, 22, 2, 4, + 4, 0, 2, 4, 2, 22, 134, 21, 2, 57, 55, 2, + 22, 3, 62, 133, 22, 2, 56, 63, 4, 4, 57, 129, + 42, 2, 22, 3, 42, 2, 4, 129, 21, 7, 22, 2, + 4, 4, 0, 2, 4, 2, 22, 132, 21, 2, 21, 22, + 3, 42, 3, 22, 129, 55, 2, 57, 2, 56, 137, 42, + 21, 4, 2, 56, 63, 62, 42, 21, 2, 4, 2, 21, + 6, 22, 2, 4, 4, 0, 2, 4, 2, 22, 133, 21, + 4, 1, 55, 133, 3, 64, 2, 63, 3, 62, 130, 55, + 56, 5, 62, 133, 55, 57, 55, 22, 1, 9, 22, 2, + 4, 4, 0, 2, 4, 5, 22, 2, 21, 2, 57, 131, + 21, 22, 2, 2, 21, 132, 1, 4, 21, 1, 2, 22, + 12, 21, 4, 22, 2, 4, 4, 0, 2, 4, 4, 22, + 129, 21, 7, 22, 130, 2, 21, 5, 22, 7, 21, 129, + 2, 5, 22, 129, 21, 3, 22, 2, 4, 4, 0, 2, + 4, 4, 22, 132, 21, 2, 55, 62, 2, 63, 4, 62, + 132, 57, 21, 22, 57, 2, 62, 131, 57, 22, 1, 2, + 21, 131, 2, 1, 21, 8, 22, 2, 4, 4, 0, 2, + 4, 13, 22, 2, 21, 134, 2, 21, 42, 55, 21, 42, + 2, 57, 131, 62, 56, 1, 2, 21, 8, 22, 2, 4, + 4, 0, 2, 4, 3, 22, 133, 1, 57, 62, 57, 55, + 3, 62, 130, 56, 57, 2, 63, 129, 4, 3, 57, 129, + 56, 3, 22, 2, 42, 131, 21, 4, 21, 8, 22, 2, + 4, 4, 0, 2, 4, 4, 22, 131, 21, 2, 21, 5, + 22, 2, 21, 132, 42, 56, 42, 4, 2, 2, 130, 4, + 1, 2, 56, 129, 22, 2, 21, 9, 22, 2, 4, 4, + 0, 2, 4, 2, 22, 129, 4, 2, 62, 3, 64, 131, + 55, 4, 55, 3, 62, 131, 55, 4, 57, 5, 62, 133, + 55, 57, 42, 21, 4, 9, 22, 2, 4, 4, 0, 2, + 4, 4, 22, 135, 21, 22, 62, 57, 21, 42, 2, 2, + 21, 130, 1, 4, 2, 21, 130, 1, 22, 12, 21, 5, + 22, 2, 4, 4, 0, 2, 4, 4, 22, 129, 21, 3, + 22, 3, 21, 2, 22, 130, 2, 21, 3, 22, 7, 21, + 129, 2, 2, 21, 4, 22, 129, 21, 3, 22, 2, 4, + 4, 0, 2, 4, 6, 22, 131, 21, 4, 55, 5, 62, + 2, 57, 130, 55, 21, 2, 2, 132, 4, 21, 22, 21, + 2, 55, 2, 4, 8, 22, 2, 4, 4, 0, 2, 4, + 15, 22, 2, 21, 129, 2, 2, 21, 133, 42, 56, 57, + 55, 1, 2, 21, 9, 22, 2, 4, 4, 0, 2, 4, + 3, 22, 130, 4, 56, 7, 62, 132, 63, 64, 57, 42, + 2, 57, 2, 56, 2, 22, 2, 42, 130, 22, 2, 2, + 21, 8, 22, 2, 4, 4, 0, 2, 4, 6, 22, 131, + 21, 2, 4, 3, 22, 4, 21, 137, 4, 2, 22, 62, + 22, 4, 22, 55, 21, 11, 22, 2, 4, 4, 0, 2, + 4, 2, 22, 129, 1, 3, 133, 134, 64, 57, 4, 22, + 4, 57, 2, 62, 130, 1, 57, 6, 62, 133, 55, 56, + 22, 4, 21, 9, 22, 2, 4, 4, 0, 2, 4, 4, + 22, 138, 4, 57, 64, 62, 4, 2, 57, 22, 2, 1, + 3, 21, 129, 1, 12, 21, 6, 22, 2, 4, 4, 0, + 2, 4, 4, 22, 129, 21, 2, 22, 5, 21, 2, 22, + 130, 2, 21, 2, 22, 6, 21, 129, 2, 3, 21, 3, + 22, 129, 21, 4, 22, 2, 4, 4, 0, 2, 4, 8, + 22, 131, 21, 4, 55, 2, 62, 4, 57, 129, 56, 2, + 42, 2, 22, 133, 42, 2, 22, 42, 55, 2, 21, 7, + 22, 2, 4, 4, 0, 2, 4, 17, 22, 135, 21, 1, + 62, 42, 1, 42, 1, 2, 21, 10, 22, 2, 4, 4, + 0, 2, 4, 4, 22, 130, 4, 57, 4, 62, 3, 63, + 131, 62, 4, 56, 2, 57, 2, 56, 2, 22, 131, 42, + 22, 2, 2, 21, 9, 22, 2, 4, 4, 0, 2, 4, + 8, 22, 131, 21, 2, 4, 5, 21, 137, 2, 21, 64, + 63, 56, 2, 21, 42, 2, 11, 22, 2, 4, 4, 0, + 2, 4, 2, 22, 129, 1, 2, 133, 2, 64, 137, 57, + 4, 22, 4, 56, 62, 57, 1, 57, 6, 62, 2, 56, + 130, 22, 1, 3, 21, 7, 22, 2, 4, 4, 0, 2, + 4, 3, 22, 131, 21, 55, 62, 2, 133, 3, 62, 131, + 2, 21, 1, 2, 21, 130, 4, 1, 10, 21, 8, 22, + 2, 4, 4, 0, 2, 4, 4, 22, 129, 21, 10, 22, + 2, 4, 2, 22, 4, 21, 129, 2, 3, 21, 3, 22, + 2, 21, 4, 22, 2, 4, 4, 0, 2, 4, 10, 22, + 2, 21, 129, 55, 4, 57, 132, 56, 55, 42, 22, 2, + 42, 2, 4, 129, 22, 2, 42, 130, 4, 21, 6, 22, + 2, 4, 4, 0, 2, 4, 18, 22, 129, 1, 2, 62, + 130, 22, 1, 2, 21, 11, 22, 2, 4, 4, 0, 2, + 4, 2, 22, 2, 2, 131, 4, 22, 62, 6, 63, 132, + 22, 4, 2, 21, 3, 56, 129, 22, 2, 42, 2, 4, + 129, 21, 10, 22, 2, 4, 4, 0, 2, 4, 10, 22, + 131, 21, 2, 4, 3, 21, 130, 4, 21, 2, 62, 130, + 42, 21, 2, 2, 2, 21, 10, 22, 2, 4, 4, 0, + 2, 4, 2, 22, 129, 4, 2, 62, 134, 63, 64, 63, + 55, 4, 42, 2, 62, 132, 57, 42, 4, 55, 5, 57, + 132, 56, 55, 21, 4, 6, 21, 4, 22, 2, 4, 4, + 0, 2, 4, 3, 22, 131, 2, 57, 63, 2, 133, 134, + 64, 62, 22, 21, 22, 1, 2, 21, 131, 2, 21, 22, + 7, 21, 10, 22, 2, 4, 4, 0, 2, 4, 5, 22, + 129, 21, 10, 22, 131, 21, 2, 4, 2, 22, 131, 4, + 2, 21, 5, 22, 130, 21, 4, 2, 21, 3, 22, 2, + 4, 4, 0, 2, 4, 12, 22, 132, 4, 21, 55, 57, + 3, 56, 132, 55, 22, 42, 21, 2, 4, 129, 2, 2, + 22, 131, 42, 4, 21, 5, 22, 2, 4, 4, 0, 2, + 4, 18, 22, 132, 1, 62, 21, 1, 2, 21, 12, 22, + 2, 4, 4, 0, 2, 4, 2, 22, 130, 21, 22, 6, + 63, 5, 64, 130, 42, 55, 3, 56, 133, 22, 42, 21, + 4, 21, 11, 22, 2, 4, 4, 0, 2, 4, 12, 22, + 138, 21, 2, 4, 21, 4, 1, 22, 56, 22, 21, 14, + 22, 2, 4, 4, 0, 2, 4, 2, 22, 133, 21, 4, + 1, 42, 64, 2, 63, 3, 62, 3, 57, 131, 42, 1, + 21, 5, 57, 130, 55, 1, 7, 21, 4, 22, 2, 4, + 4, 0, 2, 4, 2, 22, 137, 21, 22, 62, 63, 64, + 63, 62, 42, 4, 2, 22, 132, 1, 21, 2, 21, 2, + 22, 4, 21, 13, 22, 2, 4, 4, 0, 2, 4, 5, + 22, 129, 21, 12, 22, 133, 21, 1, 2, 1, 21, 5, + 22, 130, 21, 4, 3, 21, 3, 22, 2, 4, 4, 0, + 2, 4, 14, 22, 131, 4, 21, 55, 3, 56, 2, 22, + 129, 2, 2, 21, 131, 4, 2, 21, 2, 22, 130, 4, + 21, 4, 22, 2, 4, 4, 0, 2, 4, 18, 22, 133, + 1, 62, 55, 1, 21, 13, 22, 2, 4, 4, 0, 2, + 4, 3, 22, 131, 21, 22, 62, 6, 64, 133, 133, 63, + 22, 21, 55, 3, 56, 2, 22, 129, 2, 2, 21, 11, + 22, 2, 4, 4, 0, 2, 4, 14, 22, 129, 21, 2, + 1, 131, 21, 2, 55, 2, 21, 14, 22, 2, 4, 4, + 0, 2, 4, 5, 22, 131, 1, 56, 63, 3, 62, 4, + 57, 133, 4, 22, 21, 2, 22, 3, 57, 130, 42, 2, + 6, 21, 5, 22, 2, 4, 4, 0, 2, 4, 2, 22, + 130, 21, 55, 2, 62, 132, 57, 55, 21, 4, 3, 22, + 131, 1, 2, 21, 20, 22, 2, 4, 4, 0, 2, 4, + 6, 22, 129, 21, 11, 22, 130, 21, 4, 2, 21, 130, + 4, 1, 3, 2, 130, 4, 21, 7, 22, 2, 4, 4, + 0, 2, 4, 16, 22, 134, 4, 21, 42, 55, 22, 1, + 4, 21, 132, 4, 2, 21, 22, 2, 4, 4, 22, 2, + 4, 4, 0, 2, 4, 18, 22, 132, 2, 22, 56, 1, + 14, 22, 2, 4, 4, 0, 2, 4, 4, 22, 146, 21, + 2, 22, 42, 22, 64, 22, 42, 22, 2, 21, 22, 4, + 21, 42, 55, 22, 1, 2, 21, 12, 22, 2, 4, 4, + 0, 2, 4, 18, 22, 132, 2, 22, 1, 21, 14, 22, + 2, 4, 4, 0, 2, 4, 5, 22, 137, 2, 62, 63, + 62, 57, 42, 4, 22, 57, 2, 21, 3, 22, 134, 21, + 4, 55, 57, 21, 4, 3, 21, 8, 22, 2, 4, 4, + 0, 2, 4, 2, 22, 134, 2, 56, 55, 22, 4, 21, + 5, 22, 130, 1, 21, 21, 22, 2, 4, 4, 0, 131, + 2, 4, 21, 6, 22, 2, 21, 6, 22, 129, 21, 2, + 4, 129, 21, 16, 22, 131, 21, 4, 2, 4, 0, 131, + 2, 4, 21, 16, 22, 132, 21, 4, 21, 4, 3, 21, + 2, 22, 134, 21, 4, 2, 4, 2, 21, 3, 22, 131, + 21, 4, 2, 4, 0, 131, 2, 4, 21, 18, 22, 132, + 21, 2, 1, 21, 12, 22, 131, 21, 4, 2, 4, 0, + 131, 2, 4, 21, 7, 22, 131, 1, 133, 1, 6, 22, + 132, 21, 4, 21, 4, 2, 21, 12, 22, 131, 21, 4, + 2, 4, 0, 131, 2, 4, 21, 18, 22, 129, 21, 15, + 22, 131, 21, 4, 2, 4, 0, 131, 2, 4, 21, 4, + 22, 130, 1, 57, 2, 62, 134, 55, 2, 22, 21, 1, + 21, 6, 22, 131, 4, 21, 1, 3, 21, 8, 22, 131, + 21, 4, 2, 4, 0, 135, 2, 4, 21, 22, 1, 2, + 21, 8, 22, 129, 21, 21, 22, 131, 21, 4, 2, 4, + 0, 129, 1, 2, 4, 7, 22, 2, 21, 5, 4, 129, + 21, 19, 22, 2, 4, 129, 1, 4, 0, 129, 1, 2, + 4, 18, 22, 2, 21, 7, 22, 2, 21, 5, 22, 2, + 4, 129, 1, 4, 0, 129, 1, 2, 4, 20, 22, 129, + 21, 13, 22, 2, 4, 129, 1, 4, 0, 129, 1, 2, + 4, 7, 22, 3, 1, 8, 22, 2, 21, 14, 22, 2, + 4, 129, 1, 4, 0, 129, 1, 2, 4, 34, 22, 2, + 4, 129, 1, 4, 0, 129, 1, 2, 4, 4, 22, 132, + 21, 4, 21, 42, 2, 21, 11, 22, 130, 21, 4, 11, + 22, 2, 4, 129, 1, 4, 0, 129, 1, 2, 4, 34, + 22, 2, 4, 129, 1, 5, 0, 2, 4, 129, 21, 32, + 22, 129, 21, 2, 4, 6, 0, 2, 4, 129, 21, 32, + 22, 129, 21, 2, 4, 6, 0, 2, 4, 129, 21, 32, + 22, 129, 21, 2, 4, 6, 0, 2, 4, 129, 21, 32, + 22, 129, 21, 2, 4, 6, 0, 2, 4, 129, 21, 32, + 22, 129, 21, 2, 4, 6, 0, 2, 4, 129, 21, 6, + 22, 2, 21, 24, 22, 129, 21, 2, 4, 6, 0, 2, + 4, 129, 21, 32, 22, 129, 21, 2, 4, 6, 0, 129, + 1, 2, 4, 129, 21, 30, 22, 129, 21, 2, 4, 129, + 1, 6, 0, 129, 1, 2, 4, 129, 21, 30, 22, 129, + 21, 2, 4, 129, 1, 6, 0, 129, 1, 2, 4, 129, + 21, 30, 22, 129, 21, 2, 4, 129, 1, 6, 0, 129, + 1, 2, 4, 129, 21, 30, 22, 129, 21, 2, 4, 129, + 1, 6, 0, 129, 1, 2, 4, 129, 21, 30, 22, 129, + 21, 2, 4, 129, 1, 6, 0, 129, 1, 2, 4, 129, + 21, 30, 22, 129, 21, 2, 4, 129, 1, 6, 0, 129, + 1, 2, 4, 129, 21, 30, 22, 129, 21, 2, 4, 129, + 1, 7, 0, 129, 1, 3, 4, 129, 21, 26, 22, 129, + 21, 3, 4, 129, 1, 8, 0, 129, 1, 3, 4, 129, + 21, 26, 22, 129, 21, 3, 4, 129, 1, 8, 0, 129, + 1, 3, 4, 129, 21, 26, 22, 129, 21, 3, 4, 129, + 1, 8, 0, 129, 1, 3, 4, 129, 21, 26, 22, 129, + 21, 3, 4, 129, 1, 8, 0, 129, 1, 3, 4, 129, + 21, 26, 22, 129, 21, 3, 4, 129, 1, 8, 0, 129, + 1, 3, 4, 129, 21, 26, 22, 129, 21, 3, 4, 129, + 1, 8, 0, 129, 1, 3, 4, 129, 21, 26, 22, 129, + 21, 3, 4, 129, 1, 9, 0, 129, 1, 32, 4, 129, + 1, 10, 0, 129, 1, 32, 4, 129, 1, 10, 0, 129, + 1, 32, 4, 129, 1, 10, 0, 129, 1, 32, 4, 129, + 1, 10, 0, 129, 1, 32, 4, 129, 1, 10, 0, 129, + 1, 32, 4, 129, 1, 10, 0, 129, 1, 32, 4, 129, + 1, 12, 0, 130, 1, 2, 26, 4, 130, 2, 1, 14, + 0, 130, 1, 2, 26, 4, 130, 2, 1, 14, 0, 130, + 1, 2, 26, 4, 130, 2, 1, 14, 0, 130, 1, 2, + 26, 4, 130, 2, 1, 14, 0, 130, 1, 2, 26, 4, + 130, 2, 1, 14, 0, 130, 1, 2, 26, 4, 130, 2, + 1, 14, 0, 130, 1, 2, 26, 4, 130, 2, 1, 7, 0, + 0 + }; + +#endif + diff --git a/src/system/boot/platform/bios_ia32/video.cpp b/src/system/boot/platform/bios_ia32/video.cpp index 9524e6f984..c159543a3d 100644 --- a/src/system/boot/platform/bios_ia32/video.cpp +++ b/src/system/boot/platform/bios_ia32/video.cpp @@ -781,16 +781,15 @@ blit4(const uint8 *data, uint16 width, uint16 height, uint16 imageWidth, static void -blit_image(const uint8 *data, const uint8* indexedData, uint16 width, - uint16 height, uint16 imageWidth, const uint8 *palette, uint16 left, - uint16 top) +blit_image(const uint8 *data, uint16 width, uint16 height, uint16 imageWidth, + const uint8 *palette, uint16 left, uint16 top) { switch (gKernelArgs.frame_buffer.depth) { case 4: - return blit4(indexedData, width, height, imageWidth, palette, + return blit4(data, width, height, imageWidth, palette, left, top); case 8: - return blit8(indexedData, width, height, imageWidth, palette, + return blit8(data, width, height, imageWidth, palette, left, top); case 15: return blit15(data, width, height, imageWidth, left, top); @@ -805,7 +804,7 @@ blit_image(const uint8 *data, const uint8* indexedData, uint16 width, static void -uncompress_RLE(const uint8 compressed[], uint8 *uncompressed) +uncompress_24bit_RLE(const uint8 compressed[], uint8 *uncompressed) { uint32 cursorUncompressed = 0; uint32 cursorCompressed = 0; @@ -842,6 +841,39 @@ uncompress_RLE(const uint8 compressed[], uint8 *uncompressed) } } +static void +uncompress_8Bit_RLE(const uint8 compressed[], uint8 *uncompressed) +{ + uint32 cursorUncompressed = 0; + uint32 cursorCompressed = 0; + uint8 count = 0; + uint8 item = 0; + int i = 0; + + while (compressed[cursorCompressed]) { + // at the end of the channel there is a terminating 0, + // so the loop will end... (ref: generate_boot_screen.cpp) + count = compressed[cursorCompressed++]; + if (count < 128) { + // regular run, repeat "item" "count" times... + item = compressed[cursorCompressed++]; + for (i = count - 1; i >= 0; --i) { + uncompressed[cursorUncompressed] = item; + cursorUncompressed++; + } + } else { + // enumeration, just write the next "count" items as is... + count = count - 128; + for (i = count - 1; i >= 0; --i) { + uncompressed[cursorUncompressed] + = compressed[cursorCompressed++]; + cursorUncompressed++; + } + } + } +} + + // #pragma mark - extern "C" void @@ -916,13 +948,27 @@ fallback: memset((void *)sFrameBuffer, 0, gKernelArgs.frame_buffer.physical_buffer.size); - uint8 *uncompressedLogo = (uint8 *)kernel_args_malloc(kSplashLogoWidth - * kSplashLogoHeight * 3); - if (uncompressedLogo == NULL) - return; - uncompress_RLE(kSplashLogoCompressedImage, uncompressedLogo); + uint8 *uncompressedLogo = NULL; + switch (gKernelArgs.frame_buffer.depth) { + case 8: + uncompressedLogo = (uint8 *)kernel_args_malloc(kSplashLogoWidth + * kSplashLogoHeight); + if (uncompressedLogo == NULL) + return; + uncompress_8Bit_RLE(kSplashLogo8BitCompressedImage, + uncompressedLogo); + break; + default: + uncompressedLogo = (uint8 *)kernel_args_malloc(kSplashLogoWidth + * kSplashLogoHeight * 3); + if (uncompressedLogo == NULL) + return; + uncompress_24bit_RLE(kSplashLogo24BitCompressedImage, + uncompressedLogo); + break; + } - // TODO: support indexed versions of the images! + // TODO: support 4-bit indexed version of the images! // render splash logo uint16 iconsHalfHeight = kSplashIconsHeight / 2; @@ -937,16 +983,39 @@ fallback: int y = (gKernelArgs.frame_buffer.height - height) * placementY / 100; height = min_c(kSplashLogoHeight, gKernelArgs.frame_buffer.height); - blit_image(uncompressedLogo, NULL, width, height, kSplashLogoWidth, - NULL, x, y); + blit_image(uncompressedLogo, width, height, kSplashLogoWidth, + k8BitPalette, x, y); kernel_args_free(uncompressedLogo); - gKernelArgs.boot_splash = (uint8 *)kernel_args_malloc(kSplashIconsWidth - * kSplashIconsHeight * 3); - if (gKernelArgs.boot_splash == NULL) - return; - uncompress_RLE(kSplashIconsCompressedImage, gKernelArgs.boot_splash ); + const uint8* lowerHalfIconImage; + + switch (gKernelArgs.frame_buffer.depth) { + case 8: + // pointer into the lower half of the icons image data + gKernelArgs.boot_splash + = (uint8 *)kernel_args_malloc(kSplashIconsWidth + * kSplashIconsHeight); + if (gKernelArgs.boot_splash == NULL) + return; + uncompress_8Bit_RLE(kSplashIcons8BitCompressedImage, + gKernelArgs.boot_splash ); + lowerHalfIconImage = gKernelArgs.boot_splash + + (kSplashIconsWidth * iconsHalfHeight); + break; + default: + // pointer into the lower half of the icons image data + gKernelArgs.boot_splash + = (uint8 *)kernel_args_malloc(kSplashIconsWidth + * kSplashIconsHeight * 3); + if (gKernelArgs.boot_splash == NULL) + return; + uncompress_24bit_RLE(kSplashIcons24BitCompressedImage, + gKernelArgs.boot_splash ); + lowerHalfIconImage = gKernelArgs.boot_splash + + (kSplashIconsWidth * iconsHalfHeight) * 3; + break; + } // render initial (grayed out) icons // the grayed out version is the lower half of the icons image @@ -961,12 +1030,9 @@ fallback: y = kSplashLogoHeight + (gKernelArgs.frame_buffer.height - height) * placementY / 100; - // pointer into the lower half of the icons image data - const uint8* lowerHalfIconImage = gKernelArgs.boot_splash - + (kSplashIconsWidth * iconsHalfHeight) * 3; height = min_c(iconsHalfHeight, gKernelArgs.frame_buffer.height); - blit_image(lowerHalfIconImage, NULL, width, height, - kSplashIconsWidth, NULL, x, y); + blit_image(lowerHalfIconImage, width, height, kSplashIconsWidth, + k8BitPalette, x, y); } diff --git a/src/system/kernel/boot_splash.cpp b/src/system/kernel/boot_splash.cpp index 1e57f7856f..9805c712af 100644 --- a/src/system/kernel/boot_splash.cpp +++ b/src/system/kernel/boot_splash.cpp @@ -36,10 +36,34 @@ static struct frame_buffer_boot_info *sInfo; static uint8 *sUncompressedIcons; +static void +blit8_cropped(const uint8 *data, uint16 imageLeft, uint16 imageTop, + uint16 imageRight, uint16 imageBottom, uint16 imageWidth, + uint16 left, uint16 top) +{ + data += (imageWidth * imageTop + imageLeft); + uint8* start = (uint8*)(sInfo->frame_buffer + + sInfo->bytes_per_row * (top + imageTop) + 1 * (left + imageLeft)); + + for (int32 y = imageTop; y < imageBottom; y++) { + const uint8* src = data; + uint8* dst = start; + for (int32 x = imageLeft; x < imageRight; x++) { + dst[0] = src[0]; + dst++; + src++; + } + + data += imageWidth; + start = (uint8*)((addr_t)start + sInfo->bytes_per_row); + } +} + + static void blit15_cropped(const uint8 *data, uint16 imageLeft, uint16 imageTop, uint16 imageRight, uint16 imageBottom, uint16 imageWidth, - const uint8 *palette, uint16 left, uint16 top) + uint16 left, uint16 top) { data += (imageWidth * imageTop + imageLeft) * 3; uint16* start = (uint16*)(sInfo->frame_buffer @@ -67,7 +91,7 @@ blit15_cropped(const uint8 *data, uint16 imageLeft, uint16 imageTop, static void blit16_cropped(const uint8 *data, uint16 imageLeft, uint16 imageTop, uint16 imageRight, uint16 imageBottom, uint16 imageWidth, - const uint8 *palette, uint16 left, uint16 top) + uint16 left, uint16 top) { data += (imageWidth * imageTop + imageLeft) * 3; uint16* start = (uint16*)(sInfo->frame_buffer @@ -94,7 +118,7 @@ blit16_cropped(const uint8 *data, uint16 imageLeft, uint16 imageTop, static void blit24_cropped(const uint8 *data, uint16 imageLeft, uint16 imageTop, uint16 imageRight, uint16 imageBottom, uint16 imageWidth, - const uint8 *palette, uint16 left, uint16 top) + uint16 left, uint16 top) { data += (imageWidth * imageTop + imageLeft) * 3; uint8* start = (uint8*)(sInfo->frame_buffer @@ -120,7 +144,7 @@ blit24_cropped(const uint8 *data, uint16 imageLeft, uint16 imageTop, static void blit32_cropped(const uint8 *data, uint16 imageLeft, uint16 imageTop, uint16 imageRight, uint16 imageBottom, uint16 imageWidth, - const uint8 *palette, uint16 left, uint16 top) + uint16 left, uint16 top) { data += (imageWidth * imageTop + imageLeft) * 3; uint32* start = (uint32*)(sInfo->frame_buffer @@ -142,26 +166,30 @@ blit32_cropped(const uint8 *data, uint16 imageLeft, uint16 imageTop, static void -blit_cropped(const uint8* data, const uint8* indexedData, - uint16 imageLeft, uint16 imageTop, uint16 imageRight, uint16 imageBottom, - uint16 imageWidth, const uint8 *palette, uint16 left, uint16 top) +blit_cropped(const uint8* data, uint16 imageLeft, uint16 imageTop, + uint16 imageRight, uint16 imageBottom, uint16 imageWidth, + uint16 left, uint16 top) { switch (sInfo->depth) { + case 8: + blit8_cropped(data, imageLeft, imageTop, imageRight, imageBottom, + imageWidth, left, top); + return; case 15: blit15_cropped(data, imageLeft, imageTop, imageRight, imageBottom, - imageWidth, palette, left, top); + imageWidth, left, top); return; case 16: blit16_cropped(data, imageLeft, imageTop, imageRight, imageBottom, - imageWidth, palette, left, top); + imageWidth, left, top); return; case 24: blit24_cropped(data, imageLeft, imageTop, imageRight, imageBottom, - imageWidth, palette, left, top); + imageWidth, left, top); return; case 32: blit32_cropped(data, imageLeft, imageTop, imageRight, imageBottom, - imageWidth, palette, left, top); + imageWidth, left, top); return; } } @@ -213,7 +241,7 @@ boot_splash_set_stage(int stage) int stageRightEdge = width * (stage + 1) / BOOT_SPLASH_STAGE_MAX; height = min_c(iconsHalfHeight, sInfo->height); - blit_cropped(sUncompressedIcons, NULL, stageLeftEdge, 0, stageRightEdge, - height, kSplashIconsWidth, NULL, x, y); + blit_cropped(sUncompressedIcons, stageLeftEdge, 0, stageRightEdge, + height, kSplashIconsWidth, x, y); } diff --git a/src/tools/Jamfile b/src/tools/Jamfile index 3736e612df..fc45d51de7 100644 --- a/src/tools/Jamfile +++ b/src/tools/Jamfile @@ -39,7 +39,11 @@ BuildPlatformMain copyattr : copyattr.cpp BuildPlatformMain data_to_source : data_to_source.cpp : $(HOST_LIBSUPC++) ; -BuildPlatformMain generate_boot_screen : generate_boot_screen.cpp +UsePrivateObjectHeaders generate_boot_screen.cpp : shared : : true ; +UsePrivateObjectHeaders ColorQuantizer.cpp : shared : : true ; +BuildPlatformMain generate_boot_screen : + generate_boot_screen.cpp + ColorQuantizer.cpp : $(HOST_LIBSUPC++) $(HOST_LIBSTDC++) png z ; BuildPlatformMain listattr : listattr.cpp : $(HOST_LIBBE) ; @@ -88,6 +92,10 @@ SEARCH on [ FGristFiles UpdateMimeInfoThread.cpp MimeUpdateThread.cpp database_support.cpp ] = [ FDirName $(HAIKU_TOP) src build libbe storage mime ] ; +SEARCH on [ FGristFiles + ColorQuantizer.cpp + ] = [ FDirName $(HAIKU_TOP) src kits shared ] ; + SubInclude HAIKU_TOP src tools addattr ; SubInclude HAIKU_TOP src tools bfs_shell ; SubInclude HAIKU_TOP src tools copy_to_bfs_image ; diff --git a/src/tools/generate_boot_screen.cpp b/src/tools/generate_boot_screen.cpp index eeaccb224c..acc08c2c01 100644 --- a/src/tools/generate_boot_screen.cpp +++ b/src/tools/generate_boot_screen.cpp @@ -6,6 +6,7 @@ * Artur Wyszynski * Stephan Aßmus * Philippe Saint-Pierre + * David Powell */ //! Haiku boot splash image generator/converter @@ -16,10 +17,12 @@ #include #include -// TODO: Generate the single optimal palette for all three images, -// store palette versions of these images as well, so that they are -// ready to be used during boot in case we need to run in palette -// VGA mode. +#include + +// TODO: Create 4 bit palette version of these +// images as well, so that they are ready to be +// used during boot in case we need to run in +// palette 4 bit VGA mode. FILE* sOutput = NULL; @@ -131,7 +134,7 @@ new_line_if_required() static void -write_image(const char* baseName, int width, int height, png_bytep* rowPtrs) +write_24bit_image(const char* baseName, int width, int height, png_bytep* rowPtrs) { fprintf(sOutput, "static const uint16 %sWidth = %d;\n", baseName, width); fprintf(sOutput, "static const uint16 %sHeight = %d;\n", baseName, height); @@ -140,7 +143,7 @@ write_image(const char* baseName, int width, int height, png_bytep* rowPtrs) int buffer[128]; // buffer[0] stores count, buffer[1..127] holds the actual values - fprintf(sOutput, "static uint8 %sCompressedImage[] = {\n\t", + fprintf(sOutput, "static uint8 %s24BitCompressedImage[] = {\n\t", baseName); for (int c = 0; c < 3; c++) { @@ -164,12 +167,12 @@ write_image(const char* baseName, int width, int height, png_bytep* rowPtrs) bufferActive = false; count = 2; if (buffer[0] > 1) { - fprintf (sOutput, "%d, ", + fprintf(sOutput, "%d, ", 128 + buffer[0] - 1); new_line_if_required(); for (int i = 1; i < buffer[0] ; i++) { - fprintf( sOutput, "%d, ", - buffer[i] ); + fprintf(sOutput, "%d, ", + buffer[i]); new_line_if_required(); } } @@ -241,21 +244,222 @@ write_image(const char* baseName, int width, int height, png_bytep* rowPtrs) static void -parse_image(const char* filename, const char* baseName) -{ - int width; - int height; - png_bytep* rowPtrs = NULL; - png_structp pngPtr; - png_infop infoPtr; - read_png(filename, width, height, rowPtrs, pngPtr, infoPtr); - write_image(baseName, width, height, rowPtrs); +write_8bit_image(const char* baseName, int width, int height, unsigned char** rowPtrs) +{ + int buffer[128]; + // buffer[0] stores count, buffer[1..127] holds the actual values + fprintf(sOutput, "static uint8 %s8BitCompressedImage[] = {\n\t", + baseName); + + // NOTE: I don't care much about performance at this step, + // decoding however... + unsigned char currentValue = rowPtrs[0][0]; + int count = 0; + + // When bufferActive == true, we store the number rather than writing + // them directly; we use this to store numbers until we find a pair.. + bool bufferActive = false; + + sOffset = 0; + for (int y = 0; y < height; y++) { + unsigned char* row = rowPtrs[y]; + for (int x = 0; x < width; x++) { + if (row[x] == currentValue) { + if (bufferActive) { + bufferActive = false; + count = 2; + if (buffer[0] > 1) { + fprintf(sOutput, "%d, ", + 128 + buffer[0] - 1); + new_line_if_required(); + for (int i = 1; i < buffer[0] ; i++) { + fprintf(sOutput, "%d, ", + buffer[i]); + new_line_if_required(); + } + } + } else { + count++; + if (count == 127) { + fprintf(sOutput, "127, "); + new_line_if_required(); + fprintf(sOutput, "%d, ", currentValue); + new_line_if_required(); + count = 0; + } + } + } else { + if (bufferActive) { + if (buffer[0] == 127) { + // we don't have enough room, + // flush the buffer + fprintf(sOutput, "%d, ", + 128 + buffer[0] - 1); + new_line_if_required(); + for (int i = 1; i < buffer[0]; i++) { + fprintf(sOutput, "%d, ", buffer[i]); + new_line_if_required(); + } + buffer[0] = 0; + } + buffer[0]++; + buffer[buffer[0]] = row[x]; + } else if (count > 0) { + buffer[0] = 1; + buffer[1] = row[x]; + bufferActive = true; + if (count > 1) { + fprintf(sOutput, "%d, ", count); + new_line_if_required(); + fprintf(sOutput, "%d, ", currentValue); + new_line_if_required(); + } + } + currentValue = row[x]; + } + } + } + if (bufferActive) { + // I could have written 127 + buffer[0], + // but I think this is more readable... + fprintf(sOutput, "%d, ", 128 + buffer[0] - 1); + new_line_if_required(); + for (int i = 1; i < buffer[0] ; i++) { + fprintf(sOutput, "%d, ", buffer[i]); + new_line_if_required(); + } + } else { + fprintf(sOutput, "%d, %d, ", count, currentValue); + new_line_if_required(); + } + // we put a terminating zero for the next byte that indicates + // a "count", to indicate the end + fprintf(sOutput, "0"); + + fprintf(sOutput, "\n\t"); + fprintf(sOutput, "};\n\n"); +} + + +unsigned char +nearest_color(unsigned char* color, RGBA palette[256]) +{ + int i, dist, minDist, index = 0; + minDist = 255 * 255 + 255 * 255 + 255 * 255 + 1; + for (i = 0; i < 256; i++) { + int dr = ((int)color[2]) - palette[i].r; + int dg = ((int)color[1]) - palette[i].g; + int db = ((int)color[0]) - palette[i].b; + dist = dr * dr + dg * dg + db * db; + if (dist < minDist) { + minDist = dist; + index = i; + } + } + return index; +} + + +static void +create_8bit_images(const char* logoBaseName, int logoWidth, int logoHeight, + png_bytep* logoRowPtrs, const char* iconsBaseName, int iconsWidth, + int iconsHeight, png_bytep* iconsRowPtrs) +{ + // Generate 8-bit palette + BColorQuantizer quantizer(256, 8); + quantizer.ProcessImage(logoRowPtrs, logoWidth, logoHeight); + quantizer.ProcessImage(iconsRowPtrs, iconsWidth, iconsHeight); + + RGBA palette[256]; + quantizer.GetColorTable(palette); + + // convert 24-bit logo image to 8-bit indexed color + uint8* logoIndexedImageRows[logoHeight]; + for (int y = 0; y < logoHeight; y++) { + logoIndexedImageRows[y] = new uint8[logoWidth]; + for (int x = 0; x < logoWidth; x++) { + logoIndexedImageRows[y][x] = nearest_color(&logoRowPtrs[y][x*3], + palette); + } + } + + // convert 24-bit icons image to 8-bit indexed color + uint8* iconsIndexedImageRows[iconsHeight]; + for (int y = 0; y < iconsHeight; y++) { + iconsIndexedImageRows[y] = new uint8[iconsWidth]; + for (int x = 0; x < iconsWidth; x++) { + iconsIndexedImageRows[y][x] = nearest_color(&iconsRowPtrs[y][x*3], + palette); + } + } + + + fprintf(sOutput, "#ifndef __BOOTSPLASH_KERNEL__\n"); + + // write the 8-bit color palette + fprintf(sOutput, "static const uint8 k8BitPalette[] = {\n"); + for (int c = 0; c < 256; c++) { + fprintf(sOutput, "\t0x%x, 0x%x, 0x%x,\n", + palette[c].r, palette[c].g, palette[c].b); + } + fprintf(sOutput, "\t};\n\n"); + + // write the 8-bit images + write_8bit_image(logoBaseName, logoWidth, logoHeight, logoIndexedImageRows); + write_8bit_image(iconsBaseName, iconsWidth, iconsHeight, + iconsIndexedImageRows); + + fprintf(sOutput, "#endif\n\n"); + + // free memory + for (int y = 0; y < logoHeight; y++) + delete[] logoIndexedImageRows[y]; + + for (int y = 0; y < iconsHeight; y++) + delete[] iconsIndexedImageRows[y]; +} + + +static void +parse_images(const char* logoFilename, const char* logoBaseName, + const char* iconsFilename, const char* iconsBaseName) +{ + int logoWidth; + int logoHeight; + png_bytep* logoRowPtrs = NULL; + png_structp logoPngPtr; + png_infop logoInfoPtr; + + int iconsWidth; + int iconsHeight; + png_bytep* iconsRowPtrs = NULL; + png_structp iconsPngPtr; + png_infop iconsInfoPtr; + + read_png(logoFilename, logoWidth, logoHeight, logoRowPtrs, logoPngPtr, + logoInfoPtr); + read_png(iconsFilename, iconsWidth, iconsHeight, iconsRowPtrs, iconsPngPtr, + iconsInfoPtr); + + // write 24-bit images + write_24bit_image(logoBaseName, logoWidth, logoHeight, logoRowPtrs); + write_24bit_image(iconsBaseName, iconsWidth, iconsHeight, iconsRowPtrs); + + // write 8-bit index color images + create_8bit_images(logoBaseName, logoWidth, logoHeight, logoRowPtrs, + iconsBaseName, iconsWidth, iconsHeight, iconsRowPtrs); + // free resources - png_destroy_read_struct(&pngPtr, &infoPtr, NULL); - for (int y = 0; y < height; y++) - free(rowPtrs[y]); - free(rowPtrs); + png_destroy_read_struct(&logoPngPtr, &logoInfoPtr, NULL); + for (int y = 0; y < logoHeight; y++) + free(logoRowPtrs[y]); + free(logoRowPtrs); + + png_destroy_read_struct(&iconsPngPtr, &iconsInfoPtr, NULL); + for (int y = 0; y < iconsHeight; y++) + free(iconsRowPtrs[y]); + free(iconsRowPtrs); } @@ -308,10 +512,8 @@ main(int argc, char* argv[]) fprintf(sOutput, "static const int32 kSplashIconsPlacementY = %d;\n\n", iconPlacementY); - parse_image(argv[1], "kSplashLogo"); - parse_image(argv[4], "kSplashIcons"); + parse_images(argv[1], "kSplashLogo", argv[4], "kSplashIcons"); fclose(sOutput); return 0; } -