diff --git a/keywords.txt b/keywords.txt index 557e01d..93669aa 100644 --- a/keywords.txt +++ b/keywords.txt @@ -10,23 +10,27 @@ # Methods and Functions (KEYWORD2) ####################################### -GFX4d KEYWORD1 +GFX4d KEYWORD1 +strWidth KEYWORD2 +charWidth KEYWORD2 +charHeight KEYWORD2 +imageGetWord KEYWORD2 GradientShape KEYWORD2 ButtonXstyle KEYWORD2 GetSliderValue KEYWORD2 DecodeKeypad KEYWORD2 -ResetKeypad KEYWORD2 +ResetKeypad KEYWORD2 KeypadStatus KEYWORD2 SpriteEnable KEYWORD2 SpriteSetPalette KEYWORD2 SpriteGetPalette KEYWORD2 SpriteTouched KEYWORD2 -SpriteInit KEYWORD2 -SpriteAdd KEYWORD2 +SpriteInit KEYWORD2 +SpriteAdd KEYWORD2 SpriteAreaSet KEYWORD2 GetSpriteImageNum KEYWORD2 -SetSprite KEYWORD2 -GetSprite KEYWORD2 +SetSprite KEYWORD2 +GetSprite KEYWORD2 GetSpritesAt KEYWORD2 SpriteGetPixel KEYWORD2 UpdateSprites KEYWORD2 @@ -151,6 +155,10 @@ getFontData KEYWORD2 # Constants (LITERAL1) ####################################### +IMAGE_XPOS LITERAL1 +IMAGE_YPOS LITERAL1 +IMAGE_WIDTH LITERAL1 +IMAGE_HEIGHT LITERAL1 GFX4d_RED LITERAL1 GFX4d_GREEN LITERAL1 GFX4d_BLUE LITERAL1 diff --git a/library.properties b/library.properties index 9f0e947..520aa93 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=GFX4d -version=1.0.7 +version=1.0.8 author=4D Systems Pty Ltd maintainer=4D Systems Pty Ltd sentence=Graphics Library for the gen4-IoD by 4D Systems diff --git a/src/Examples/IoD16kSpectrumEmulator/Basic.h b/src/Examples/IoD16kSpectrumEmulator/Basic.h new file mode 100644 index 0000000..81510d9 --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/Basic.h @@ -0,0 +1,427 @@ +/* + ld HL, 0 + ld bc,1 +inizio: + nop + nop + nop + ld (16384), HL + add hl,bc + jp inizio + + 0x21,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x22,0x00,0x58,0x09,0xc3,0x06,0x00, +*/ + +/*original zx spectrum rom*/ + + + 0xF3, 0xAF, 0x11, 0xFF, 0xFF, 0xC3, 0xCB, 0x11, 0x2A, 0x5D, 0x5C, 0x22, 0x5F, 0x5C, 0x18, 0x43, 0xC3, 0xF2, 0x15, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2A, 0x5D, 0x5C, 0x7E, 0xCD, 0x7D, 0x00, 0xD0, 0xCD, 0x74, 0x00, 0x18, 0xF7, 0xFF, 0xFF, 0xFF, + 0xC3, 0x5B, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC5, 0x2A, 0x61, 0x5C, 0xE5, 0xC3, 0x9E, 0x16, 0xF5, 0xE5, 0x2A, 0x78, 0x5C, 0x23, 0x22, 0x78, 0x5C, 0x7C, 0xB5, 0x20, 0x03, 0xFD, 0x34, 0x40, 0xC5, 0xD5, 0xCD, 0xBF, 0x02, 0xD1, 0xC1, 0xE1, + 0xF1, 0xFB, 0xC9, 0xE1, 0x6E, 0xFD, 0x75, 0x00, 0xED, 0x7B, 0x3D, 0x5C, 0xC3, 0xC5, 0x16, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF5, 0xE5, 0x2A, 0xB0, 0x5C, 0x7C, 0xB5, 0x20, 0x01, 0xE9, 0xE1, 0xF1, 0xED, 0x45, 0x2A, 0x5D, 0x5C, 0x23, + 0x22, 0x5D, 0x5C, 0x7E, 0xC9, 0xFE, 0x21, 0xD0, 0xFE, 0x0D, 0xC8, 0xFE, 0x10, 0xD8, 0xFE, 0x18, 0x3F, 0xD8, 0x23, 0xFE, 0x16, 0x38, 0x01, 0x23, 0x37, 0x22, 0x5D, 0x5C, 0xC9, 0xBF, 0x52, 0x4E, 0xC4, 0x49, 0x4E, 0x4B, 0x45, 0x59, 0xA4, 0x50, + 0xC9, 0x46, 0xCE, 0x50, 0x4F, 0x49, 0x4E, 0xD4, 0x53, 0x43, 0x52, 0x45, 0x45, 0x4E, 0xA4, 0x41, 0x54, 0x54, 0xD2, 0x41, 0xD4, 0x54, 0x41, 0xC2, 0x56, 0x41, 0x4C, 0xA4, 0x43, 0x4F, 0x44, 0xC5, 0x56, 0x41, 0xCC, 0x4C, 0x45, 0xCE, 0x53, 0x49, + 0xCE, 0x43, 0x4F, 0xD3, 0x54, 0x41, 0xCE, 0x41, 0x53, 0xCE, 0x41, 0x43, 0xD3, 0x41, 0x54, 0xCE, 0x4C, 0xCE, 0x45, 0x58, 0xD0, 0x49, 0x4E, 0xD4, 0x53, 0x51, 0xD2, 0x53, 0x47, 0xCE, 0x41, 0x42, 0xD3, 0x50, 0x45, 0x45, 0xCB, 0x49, 0xCE, 0x55, + 0x53, 0xD2, 0x53, 0x54, 0x52, 0xA4, 0x43, 0x48, 0x52, 0xA4, 0x4E, 0x4F, 0xD4, 0x42, 0x49, 0xCE, 0x4F, 0xD2, 0x41, 0x4E, 0xC4, 0x3C, 0xBD, 0x3E, 0xBD, 0x3C, 0xBE, 0x4C, 0x49, 0x4E, 0xC5, 0x54, 0x48, 0x45, 0xCE, 0x54, 0xCF, 0x53, 0x54, 0x45, + 0xD0, 0x44, 0x45, 0x46, 0x20, 0x46, 0xCE, 0x43, 0x41, 0xD4, 0x46, 0x4F, 0x52, 0x4D, 0x41, 0xD4, 0x4D, 0x4F, 0x56, 0xC5, 0x45, 0x52, 0x41, 0x53, 0xC5, 0x4F, 0x50, 0x45, 0x4E, 0x20, 0xA3, 0x43, 0x4C, 0x4F, 0x53, 0x45, 0x20, 0xA3, 0x4D, 0x45, + 0x52, 0x47, 0xC5, 0x56, 0x45, 0x52, 0x49, 0x46, 0xD9, 0x42, 0x45, 0x45, 0xD0, 0x43, 0x49, 0x52, 0x43, 0x4C, 0xC5, 0x49, 0x4E, 0xCB, 0x50, 0x41, 0x50, 0x45, 0xD2, 0x46, 0x4C, 0x41, 0x53, 0xC8, 0x42, 0x52, 0x49, 0x47, 0x48, 0xD4, 0x49, 0x4E, + 0x56, 0x45, 0x52, 0x53, 0xC5, 0x4F, 0x56, 0x45, 0xD2, 0x4F, 0x55, 0xD4, 0x4C, 0x50, 0x52, 0x49, 0x4E, 0xD4, 0x4C, 0x4C, 0x49, 0x53, 0xD4, 0x53, 0x54, 0x4F, 0xD0, 0x52, 0x45, 0x41, 0xC4, 0x44, 0x41, 0x54, 0xC1, 0x52, 0x45, 0x53, 0x54, 0x4F, + 0x52, 0xC5, 0x4E, 0x45, 0xD7, 0x42, 0x4F, 0x52, 0x44, 0x45, 0xD2, 0x43, 0x4F, 0x4E, 0x54, 0x49, 0x4E, 0x55, 0xC5, 0x44, 0x49, 0xCD, 0x52, 0x45, 0xCD, 0x46, 0x4F, 0xD2, 0x47, 0x4F, 0x20, 0x54, 0xCF, 0x47, 0x4F, 0x20, 0x53, 0x55, 0xC2, 0x49, + 0x4E, 0x50, 0x55, 0xD4, 0x4C, 0x4F, 0x41, 0xC4, 0x4C, 0x49, 0x53, 0xD4, 0x4C, 0x45, 0xD4, 0x50, 0x41, 0x55, 0x53, 0xC5, 0x4E, 0x45, 0x58, 0xD4, 0x50, 0x4F, 0x4B, 0xC5, 0x50, 0x52, 0x49, 0x4E, 0xD4, 0x50, 0x4C, 0x4F, 0xD4, 0x52, 0x55, 0xCE, + 0x53, 0x41, 0x56, 0xC5, 0x52, 0x41, 0x4E, 0x44, 0x4F, 0x4D, 0x49, 0x5A, 0xC5, 0x49, 0xC6, 0x43, 0x4C, 0xD3, 0x44, 0x52, 0x41, 0xD7, 0x43, 0x4C, 0x45, 0x41, 0xD2, 0x52, 0x45, 0x54, 0x55, 0x52, 0xCE, 0x43, 0x4F, 0x50, 0xD9, 0x42, 0x48, 0x59, + 0x36, 0x35, 0x54, 0x47, 0x56, 0x4E, 0x4A, 0x55, 0x37, 0x34, 0x52, 0x46, 0x43, 0x4D, 0x4B, 0x49, 0x38, 0x33, 0x45, 0x44, 0x58, 0x0E, 0x4C, 0x4F, 0x39, 0x32, 0x57, 0x53, 0x5A, 0x20, 0x0D, 0x50, 0x30, 0x31, 0x51, 0x41, 0xE3, 0xC4, 0xE0, 0xE4, + 0xB4, 0xBC, 0xBD, 0xBB, 0xAF, 0xB0, 0xB1, 0xC0, 0xA7, 0xA6, 0xBE, 0xAD, 0xB2, 0xBA, 0xE5, 0xA5, 0xC2, 0xE1, 0xB3, 0xB9, 0xC1, 0xB8, 0x7E, 0xDC, 0xDA, 0x5C, 0xB7, 0x7B, 0x7D, 0xD8, 0xBF, 0xAE, 0xAA, 0xAB, 0xDD, 0xDE, 0xDF, 0x7F, 0xB5, 0xD6, + 0x7C, 0xD5, 0x5D, 0xDB, 0xB6, 0xD9, 0x5B, 0xD7, 0x0C, 0x07, 0x06, 0x04, 0x05, 0x08, 0x0A, 0x0B, 0x09, 0x0F, 0xE2, 0x2A, 0x3F, 0xCD, 0xC8, 0xCC, 0xCB, 0x5E, 0xAC, 0x2D, 0x2B, 0x3D, 0x2E, 0x2C, 0x3B, 0x22, 0xC7, 0x3C, 0xC3, 0x3E, 0xC5, 0x2F, + 0xC9, 0x60, 0xC6, 0x3A, 0xD0, 0xCE, 0xA8, 0xCA, 0xD3, 0xD4, 0xD1, 0xD2, 0xA9, 0xCF, 0x2E, 0x2F, 0x11, 0xFF, 0xFF, 0x01, 0xFE, 0xFE, 0xED, 0x78, 0x2F, 0xE6, 0x1F, 0x28, 0x0E, 0x67, 0x7D, 0x14, 0xC0, 0xD6, 0x08, 0xCB, 0x3C, 0x30, 0xFA, 0x53, + 0x5F, 0x20, 0xF4, 0x2D, 0xCB, 0x00, 0x38, 0xE6, 0x7A, 0x3C, 0xC8, 0xFE, 0x28, 0xC8, 0xFE, 0x19, 0xC8, 0x7B, 0x5A, 0x57, 0xFE, 0x18, 0xC9, 0xCD, 0x8E, 0x02, 0xC0, 0x21, 0x00, 0x5C, 0xCB, 0x7E, 0x20, 0x07, 0x23, 0x35, 0x2B, 0x20, 0x02, 0x36, + 0xFF, 0x7D, 0x21, 0x04, 0x5C, 0xBD, 0x20, 0xEE, 0xCD, 0x1E, 0x03, 0xD0, 0x21, 0x00, 0x5C, 0xBE, 0x28, 0x2E, 0xEB, 0x21, 0x04, 0x5C, 0xBE, 0x28, 0x27, 0xCB, 0x7E, 0x20, 0x04, 0xEB, 0xCB, 0x7E, 0xC8, 0x5F, 0x77, 0x23, 0x36, 0x05, 0x23, 0x3A, + 0x09, 0x5C, 0x77, 0x23, 0xFD, 0x4E, 0x07, 0xFD, 0x56, 0x01, 0xE5, 0xCD, 0x33, 0x03, 0xE1, 0x77, 0x32, 0x08, 0x5C, 0xFD, 0xCB, 0x01, 0xEE, 0xC9, 0x23, 0x36, 0x05, 0x23, 0x35, 0xC0, 0x3A, 0x0A, 0x5C, 0x77, 0x23, 0x7E, 0x18, 0xEA, 0x42, 0x16, + 0x00, 0x7B, 0xFE, 0x27, 0xD0, 0xFE, 0x18, 0x20, 0x03, 0xCB, 0x78, 0xC0, 0x21, 0x05, 0x02, 0x19, 0x7E, 0x37, 0xC9, 0x7B, 0xFE, 0x3A, 0x38, 0x2F, 0x0D, 0xFA, 0x4F, 0x03, 0x28, 0x03, 0xC6, 0x4F, 0xC9, 0x21, 0xEB, 0x01, 0x04, 0x28, 0x03, 0x21, + 0x05, 0x02, 0x16, 0x00, 0x19, 0x7E, 0xC9, 0x21, 0x29, 0x02, 0xCB, 0x40, 0x28, 0xF4, 0xCB, 0x5A, 0x28, 0x0A, 0xFD, 0xCB, 0x30, 0x5E, 0xC0, 0x04, 0xC0, 0xC6, 0x20, 0xC9, 0xC6, 0xA5, 0xC9, 0xFE, 0x30, 0xD8, 0x0D, 0xFA, 0x9D, 0x03, 0x20, 0x19, + 0x21, 0x54, 0x02, 0xCB, 0x68, 0x28, 0xD3, 0xFE, 0x38, 0x30, 0x07, 0xD6, 0x20, 0x04, 0xC8, 0xC6, 0x08, 0xC9, 0xD6, 0x36, 0x04, 0xC8, 0xC6, 0xFE, 0xC9, 0x21, 0x30, 0x02, 0xFE, 0x39, 0x28, 0xBA, 0xFE, 0x30, 0x28, 0xB6, 0xE6, 0x07, 0xC6, 0x80, + 0x04, 0xC8, 0xEE, 0x0F, 0xC9, 0x04, 0xC8, 0xCB, 0x68, 0x21, 0x30, 0x02, 0x20, 0xA4, 0xD6, 0x10, 0xFE, 0x22, 0x28, 0x06, 0xFE, 0x20, 0xC0, 0x3E, 0x5F, 0xC9, 0x3E, 0x40, 0xC9, 0xF3, 0x7D, 0xCB, 0x3D, 0xCB, 0x3D, 0x2F, 0xE6, 0x03, 0x4F, 0x06, + 0x00, 0xDD, 0x21, 0xD1, 0x03, 0xDD, 0x09, 0x3A, 0x48, 0x5C, 0xE6, 0x38, 0x0F, 0x0F, 0x0F, 0xF6, 0x08, 0x00, 0x00, 0x00, 0x04, 0x0C, 0x0D, 0x20, 0xFD, 0x0E, 0x3F, 0x05, 0xC2, 0xD6, 0x03, 0xEE, 0x10, 0xD3, 0xFE, 0x44, 0x4F, 0xCB, 0x67, 0x20, + 0x09, 0x7A, 0xB3, 0x28, 0x09, 0x79, 0x4D, 0x1B, 0xDD, 0xE9, 0x4D, 0x0C, 0xDD, 0xE9, 0xFB, 0xC9, 0xEF, 0x31, 0x27, 0xC0, 0x03, 0x34, 0xEC, 0x6C, 0x98, 0x1F, 0xF5, 0x04, 0xA1, 0x0F, 0x38, 0x21, 0x92, 0x5C, 0x7E, 0xA7, 0x20, 0x5E, 0x23, 0x4E, + 0x23, 0x46, 0x78, 0x17, 0x9F, 0xB9, 0x20, 0x54, 0x23, 0xBE, 0x20, 0x50, 0x78, 0xC6, 0x3C, 0xF2, 0x25, 0x04, 0xE2, 0x6C, 0x04, 0x06, 0xFA, 0x04, 0xD6, 0x0C, 0x30, 0xFB, 0xC6, 0x0C, 0xC5, 0x21, 0x6E, 0x04, 0xCD, 0x06, 0x34, 0xCD, 0xB4, 0x33, + 0xEF, 0x04, 0x38, 0xF1, 0x86, 0x77, 0xEF, 0xC0, 0x02, 0x31, 0x38, 0xCD, 0x94, 0x1E, 0xFE, 0x0B, 0x30, 0x22, 0xEF, 0xE0, 0x04, 0xE0, 0x34, 0x80, 0x43, 0x55, 0x9F, 0x80, 0x01, 0x05, 0x34, 0x35, 0x71, 0x03, 0x38, 0xCD, 0x99, 0x1E, 0xC5, 0xCD, + 0x99, 0x1E, 0xE1, 0x50, 0x59, 0x7A, 0xB3, 0xC8, 0x1B, 0xC3, 0xB5, 0x03, 0xCF, 0x0A, 0x89, 0x02, 0xD0, 0x12, 0x86, 0x89, 0x0A, 0x97, 0x60, 0x75, 0x89, 0x12, 0xD5, 0x17, 0x1F, 0x89, 0x1B, 0x90, 0x41, 0x02, 0x89, 0x24, 0xD0, 0x53, 0xCA, 0x89, + 0x2E, 0x9D, 0x36, 0xB1, 0x89, 0x38, 0xFF, 0x49, 0x3E, 0x89, 0x43, 0xFF, 0x6A, 0x73, 0x89, 0x4F, 0xA7, 0x00, 0x54, 0x89, 0x5C, 0x00, 0x00, 0x00, 0x89, 0x69, 0x14, 0xF6, 0x24, 0x89, 0x76, 0xF1, 0x10, 0x05, 0xCD, 0xFB, 0x24, 0x3A, 0x3B, 0x5C, + 0x87, 0xFA, 0x8A, 0x1C, 0xE1, 0xD0, 0xE5, 0xCD, 0xF1, 0x2B, 0x62, 0x6B, 0x0D, 0xF8, 0x09, 0xCB, 0xFE, 0xC9, 0x21, 0x3F, 0x05, 0xE5, 0x21, 0x80, 0x1F, 0xCB, 0x7F, 0x28, 0x03, 0x21, 0x98, 0x0C, 0x08, 0x13, 0xDD, 0x2B, 0xF3, 0x3E, 0x02, 0x47, + 0x10, 0xFE, 0xD3, 0xFE, 0xEE, 0x0F, 0x06, 0xA4, 0x2D, 0x20, 0xF5, 0x05, 0x25, 0xF2, 0xD8, 0x04, 0x06, 0x2F, 0x10, 0xFE, 0xD3, 0xFE, 0x3E, 0x0D, 0x06, 0x37, 0x10, 0xFE, 0xD3, 0xFE, 0x01, 0x0E, 0x3B, 0x08, 0x6F, 0xC3, 0x07, 0x05, 0x7A, 0xB3, + 0x28, 0x0C, 0xDD, 0x6E, 0x00, 0x7C, 0xAD, 0x67, 0x3E, 0x01, 0x37, 0xC3, 0x25, 0x05, 0x6C, 0x18, 0xF4, 0x79, 0xCB, 0x78, 0x10, 0xFE, 0x30, 0x04, 0x06, 0x42, 0x10, 0xFE, 0xD3, 0xFE, 0x06, 0x3E, 0x20, 0xEF, 0x05, 0xAF, 0x3C, 0xCB, 0x15, 0xC2, + 0x14, 0x05, 0x1B, 0xDD, 0x23, 0x06, 0x31, 0x3E, 0x7F, 0xDB, 0xFE, 0x1F, 0xD0, 0x7A, 0x3C, 0xC2, 0xFE, 0x04, 0x06, 0x3B, 0x10, 0xFE, 0xC9, 0xF5, 0x3A, 0x48, 0x5C, 0xE6, 0x38, 0x0F, 0x0F, 0x0F, 0xD3, 0xFE, 0x3E, 0x7F, 0xDB, 0xFE, 0x1F, 0xFB, + 0x38, 0x02, 0xCF, 0x0C, 0xF1, 0xC9, 0x14, 0x08, 0x15, 0xF3, 0x3E, 0x0F, 0xD3, 0xFE, 0x21, 0x3F, 0x05, 0xE5, 0xDB, 0xFE, 0x1F, 0xE6, 0x20, 0xF6, 0x02, 0x4F, 0xBF, 0xC0, 0xCD, 0xE7, 0x05, 0x30, 0xFA, 0x21, 0x15, 0x04, 0x10, 0xFE, 0x2B, 0x7C, + 0xB5, 0x20, 0xF9, 0xCD, 0xE3, 0x05, 0x30, 0xEB, 0x06, 0x9C, 0xCD, 0xE3, 0x05, 0x30, 0xE4, 0x3E, 0xC6, 0xB8, 0x30, 0xE0, 0x24, 0x20, 0xF1, 0x06, 0xC9, 0xCD, 0xE7, 0x05, 0x30, 0xD5, 0x78, 0xFE, 0xD4, 0x30, 0xF4, 0xCD, 0xE7, 0x05, 0xD0, 0x79, + 0xEE, 0x03, 0x4F, 0x26, 0x00, 0x06, 0xB0, 0x18, 0x1F, 0x08, 0x20, 0x07, 0x30, 0x0F, 0xDD, 0x75, 0x00, 0x18, 0x0F, 0xCB, 0x11, 0xAD, 0xC0, 0x79, 0x1F, 0x4F, 0x13, 0x18, 0x07, 0xDD, 0x7E, 0x00, 0xAD, 0xC0, 0xDD, 0x23, 0x1B, 0x08, 0x06, 0xB2, + 0x2E, 0x01, 0xCD, 0xE3, 0x05, 0xD0, 0x3E, 0xCB, 0xB8, 0xCB, 0x15, 0x06, 0xB0, 0xD2, 0xCA, 0x05, 0x7C, 0xAD, 0x67, 0x7A, 0xB3, 0x20, 0xCA, 0x7C, 0xFE, 0x01, 0xC9, 0xCD, 0xE7, 0x05, 0xD0, 0x3E, 0x16, 0x3D, 0x20, 0xFD, 0xA7, 0x04, 0xC8, 0x3E, + 0x7F, 0xDB, 0xFE, 0x1F, 0xD0, 0xA9, 0xE6, 0x20, 0x28, 0xF3, 0x79, 0x2F, 0x4F, 0xE6, 0x07, 0xF6, 0x08, 0xD3, 0xFE, 0x37, 0xC9, 0xF1, 0x3A, 0x74, 0x5C, 0xD6, 0xE0, 0x32, 0x74, 0x5C, 0xCD, 0x8C, 0x1C, 0xCD, 0x30, 0x25, 0x28, 0x3C, 0x01, 0x11, + 0x00, 0x3A, 0x74, 0x5C, 0xA7, 0x28, 0x02, 0x0E, 0x22, 0xF7, 0xD5, 0xDD, 0xE1, 0x06, 0x0B, 0x3E, 0x20, 0x12, 0x13, 0x10, 0xFC, 0xDD, 0x36, 0x01, 0xFF, 0xCD, 0xF1, 0x2B, 0x21, 0xF6, 0xFF, 0x0B, 0x09, 0x03, 0x30, 0x0F, 0x3A, 0x74, 0x5C, 0xA7, + 0x20, 0x02, 0xCF, 0x0E, 0x78, 0xB1, 0x28, 0x0A, 0x01, 0x0A, 0x00, 0xDD, 0xE5, 0xE1, 0x23, 0xEB, 0xED, 0xB0, 0xDF, 0xFE, 0xE4, 0x20, 0x49, 0x3A, 0x74, 0x5C, 0xFE, 0x03, 0xCA, 0x8A, 0x1C, 0xE7, 0xCD, 0xB2, 0x28, 0xCB, 0xF9, 0x30, 0x0B, 0x21, + 0x00, 0x00, 0x3A, 0x74, 0x5C, 0x3D, 0x28, 0x15, 0xCF, 0x01, 0xC2, 0x8A, 0x1C, 0xCD, 0x30, 0x25, 0x28, 0x18, 0x23, 0x7E, 0xDD, 0x77, 0x0B, 0x23, 0x7E, 0xDD, 0x77, 0x0C, 0x23, 0xDD, 0x71, 0x0E, 0x3E, 0x01, 0xCB, 0x71, 0x28, 0x01, 0x3C, 0xDD, + 0x77, 0x00, 0xEB, 0xE7, 0xFE, 0x29, 0x20, 0xDA, 0xE7, 0xCD, 0xEE, 0x1B, 0xEB, 0xC3, 0x5A, 0x07, 0xFE, 0xAA, 0x20, 0x1F, 0x3A, 0x74, 0x5C, 0xFE, 0x03, 0xCA, 0x8A, 0x1C, 0xE7, 0xCD, 0xEE, 0x1B, 0xDD, 0x36, 0x0B, 0x00, 0xDD, 0x36, 0x0C, 0x1B, + 0x21, 0x00, 0x40, 0xDD, 0x75, 0x0D, 0xDD, 0x74, 0x0E, 0x18, 0x4D, 0xFE, 0xAF, 0x20, 0x4F, 0x3A, 0x74, 0x5C, 0xFE, 0x03, 0xCA, 0x8A, 0x1C, 0xE7, 0xCD, 0x48, 0x20, 0x20, 0x0C, 0x3A, 0x74, 0x5C, 0xA7, 0xCA, 0x8A, 0x1C, 0xCD, 0xE6, 0x1C, 0x18, + 0x0F, 0xCD, 0x82, 0x1C, 0xDF, 0xFE, 0x2C, 0x28, 0x0C, 0x3A, 0x74, 0x5C, 0xA7, 0xCA, 0x8A, 0x1C, 0xCD, 0xE6, 0x1C, 0x18, 0x04, 0xE7, 0xCD, 0x82, 0x1C, 0xCD, 0xEE, 0x1B, 0xCD, 0x99, 0x1E, 0xDD, 0x71, 0x0B, 0xDD, 0x70, 0x0C, 0xCD, 0x99, 0x1E, + 0xDD, 0x71, 0x0D, 0xDD, 0x70, 0x0E, 0x60, 0x69, 0xDD, 0x36, 0x00, 0x03, 0x18, 0x44, 0xFE, 0xCA, 0x28, 0x09, 0xCD, 0xEE, 0x1B, 0xDD, 0x36, 0x0E, 0x80, 0x18, 0x17, 0x3A, 0x74, 0x5C, 0xA7, 0xC2, 0x8A, 0x1C, 0xE7, 0xCD, 0x82, 0x1C, 0xCD, 0xEE, + 0x1B, 0xCD, 0x99, 0x1E, 0xDD, 0x71, 0x0D, 0xDD, 0x70, 0x0E, 0xDD, 0x36, 0x00, 0x00, 0x2A, 0x59, 0x5C, 0xED, 0x5B, 0x53, 0x5C, 0x37, 0xED, 0x52, 0xDD, 0x75, 0x0B, 0xDD, 0x74, 0x0C, 0x2A, 0x4B, 0x5C, 0xED, 0x52, 0xDD, 0x75, 0x0F, 0xDD, 0x74, + 0x10, 0xEB, 0x3A, 0x74, 0x5C, 0xA7, 0xCA, 0x70, 0x09, 0xE5, 0x01, 0x11, 0x00, 0xDD, 0x09, 0xDD, 0xE5, 0x11, 0x11, 0x00, 0xAF, 0x37, 0xCD, 0x56, 0x05, 0xDD, 0xE1, 0x30, 0xF2, 0x3E, 0xFE, 0xCD, 0x01, 0x16, 0xFD, 0x36, 0x52, 0x03, 0x0E, 0x80, + 0xDD, 0x7E, 0x00, 0xDD, 0xBE, 0xEF, 0x20, 0x02, 0x0E, 0xF6, 0xFE, 0x04, 0x30, 0xD9, 0x11, 0xC0, 0x09, 0xC5, 0xCD, 0x0A, 0x0C, 0xC1, 0xDD, 0xE5, 0xD1, 0x21, 0xF0, 0xFF, 0x19, 0x06, 0x0A, 0x7E, 0x3C, 0x20, 0x03, 0x79, 0x80, 0x4F, 0x13, 0x1A, + 0xBE, 0x23, 0x20, 0x01, 0x0C, 0xD7, 0x10, 0xF6, 0xCB, 0x79, 0x20, 0xB3, 0x3E, 0x0D, 0xD7, 0xE1, 0xDD, 0x7E, 0x00, 0xFE, 0x03, 0x28, 0x0C, 0x3A, 0x74, 0x5C, 0x3D, 0xCA, 0x08, 0x08, 0xFE, 0x02, 0xCA, 0xB6, 0x08, 0xE5, 0xDD, 0x6E, 0xFA, 0xDD, + 0x66, 0xFB, 0xDD, 0x5E, 0x0B, 0xDD, 0x56, 0x0C, 0x7C, 0xB5, 0x28, 0x0D, 0xED, 0x52, 0x38, 0x26, 0x28, 0x07, 0xDD, 0x7E, 0x00, 0xFE, 0x03, 0x20, 0x1D, 0xE1, 0x7C, 0xB5, 0x20, 0x06, 0xDD, 0x6E, 0x0D, 0xDD, 0x66, 0x0E, 0xE5, 0xDD, 0xE1, 0x3A, + 0x74, 0x5C, 0xFE, 0x02, 0x37, 0x20, 0x01, 0xA7, 0x3E, 0xFF, 0xCD, 0x56, 0x05, 0xD8, 0xCF, 0x1A, 0xDD, 0x5E, 0x0B, 0xDD, 0x56, 0x0C, 0xE5, 0x7C, 0xB5, 0x20, 0x06, 0x13, 0x13, 0x13, 0xEB, 0x18, 0x0C, 0xDD, 0x6E, 0xFA, 0xDD, 0x66, 0xFB, 0xEB, + 0x37, 0xED, 0x52, 0x38, 0x09, 0x11, 0x05, 0x00, 0x19, 0x44, 0x4D, 0xCD, 0x05, 0x1F, 0xE1, 0xDD, 0x7E, 0x00, 0xA7, 0x28, 0x3E, 0x7C, 0xB5, 0x28, 0x13, 0x2B, 0x46, 0x2B, 0x4E, 0x2B, 0x03, 0x03, 0x03, 0xDD, 0x22, 0x5F, 0x5C, 0xCD, 0xE8, 0x19, + 0xDD, 0x2A, 0x5F, 0x5C, 0x2A, 0x59, 0x5C, 0x2B, 0xDD, 0x4E, 0x0B, 0xDD, 0x46, 0x0C, 0xC5, 0x03, 0x03, 0x03, 0xDD, 0x7E, 0xFD, 0xF5, 0xCD, 0x55, 0x16, 0x23, 0xF1, 0x77, 0xD1, 0x23, 0x73, 0x23, 0x72, 0x23, 0xE5, 0xDD, 0xE1, 0x37, 0x3E, 0xFF, + 0xC3, 0x02, 0x08, 0xEB, 0x2A, 0x59, 0x5C, 0x2B, 0xDD, 0x22, 0x5F, 0x5C, 0xDD, 0x4E, 0x0B, 0xDD, 0x46, 0x0C, 0xC5, 0xCD, 0xE5, 0x19, 0xC1, 0xE5, 0xC5, 0xCD, 0x55, 0x16, 0xDD, 0x2A, 0x5F, 0x5C, 0x23, 0xDD, 0x4E, 0x0F, 0xDD, 0x46, 0x10, 0x09, + 0x22, 0x4B, 0x5C, 0xDD, 0x66, 0x0E, 0x7C, 0xE6, 0xC0, 0x20, 0x0A, 0xDD, 0x6E, 0x0D, 0x22, 0x42, 0x5C, 0xFD, 0x36, 0x0A, 0x00, 0xD1, 0xDD, 0xE1, 0x37, 0x3E, 0xFF, 0xC3, 0x02, 0x08, 0xDD, 0x4E, 0x0B, 0xDD, 0x46, 0x0C, 0xC5, 0x03, 0xF7, 0x36, + 0x80, 0xEB, 0xD1, 0xE5, 0xE5, 0xDD, 0xE1, 0x37, 0x3E, 0xFF, 0xCD, 0x02, 0x08, 0xE1, 0xED, 0x5B, 0x53, 0x5C, 0x7E, 0xE6, 0xC0, 0x20, 0x19, 0x1A, 0x13, 0xBE, 0x23, 0x20, 0x02, 0x1A, 0xBE, 0x1B, 0x2B, 0x30, 0x08, 0xE5, 0xEB, 0xCD, 0xB8, 0x19, + 0xE1, 0x18, 0xEC, 0xCD, 0x2C, 0x09, 0x18, 0xE2, 0x7E, 0x4F, 0xFE, 0x80, 0xC8, 0xE5, 0x2A, 0x4B, 0x5C, 0x7E, 0xFE, 0x80, 0x28, 0x25, 0xB9, 0x28, 0x08, 0xC5, 0xCD, 0xB8, 0x19, 0xC1, 0xEB, 0x18, 0xF0, 0xE6, 0xE0, 0xFE, 0xA0, 0x20, 0x12, 0xD1, + 0xD5, 0xE5, 0x23, 0x13, 0x1A, 0xBE, 0x20, 0x06, 0x17, 0x30, 0xF7, 0xE1, 0x18, 0x03, 0xE1, 0x18, 0xE0, 0x3E, 0xFF, 0xD1, 0xEB, 0x3C, 0x37, 0xCD, 0x2C, 0x09, 0x18, 0xC4, 0x20, 0x10, 0x08, 0x22, 0x5F, 0x5C, 0xEB, 0xCD, 0xB8, 0x19, 0xCD, 0xE8, + 0x19, 0xEB, 0x2A, 0x5F, 0x5C, 0x08, 0x08, 0xD5, 0xCD, 0xB8, 0x19, 0x22, 0x5F, 0x5C, 0x2A, 0x53, 0x5C, 0xE3, 0xC5, 0x08, 0x38, 0x07, 0x2B, 0xCD, 0x55, 0x16, 0x23, 0x18, 0x03, 0xCD, 0x55, 0x16, 0x23, 0xC1, 0xD1, 0xED, 0x53, 0x53, 0x5C, 0xED, + 0x5B, 0x5F, 0x5C, 0xC5, 0xD5, 0xEB, 0xED, 0xB0, 0xE1, 0xC1, 0xD5, 0xCD, 0xE8, 0x19, 0xD1, 0xC9, 0xE5, 0x3E, 0xFD, 0xCD, 0x01, 0x16, 0xAF, 0x11, 0xA1, 0x09, 0xCD, 0x0A, 0x0C, 0xFD, 0xCB, 0x02, 0xEE, 0xCD, 0xD4, 0x15, 0xDD, 0xE5, 0x11, 0x11, + 0x00, 0xAF, 0xCD, 0xC2, 0x04, 0xDD, 0xE1, 0x06, 0x32, 0x76, 0x10, 0xFD, 0xDD, 0x5E, 0x0B, 0xDD, 0x56, 0x0C, 0x3E, 0xFF, 0xDD, 0xE1, 0xC3, 0xC2, 0x04, 0x80, 0x53, 0x74, 0x61, 0x72, 0x74, 0x20, 0x74, 0x61, 0x70, 0x65, 0x2C, 0x20, 0x74, 0x68, + 0x65, 0x6E, 0x20, 0x70, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6E, 0x79, 0x20, 0x6B, 0x65, 0x79, 0xAE, 0x0D, 0x50, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x3A, 0xA0, 0x0D, 0x4E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, + 0x3A, 0xA0, 0x0D, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x61, 0x72, 0x72, 0x61, 0x79, 0x3A, 0xA0, 0x0D, 0x42, 0x79, 0x74, 0x65, 0x73, 0x3A, 0xA0, 0xCD, 0x03, 0x0B, 0xFE, 0x20, 0xD2, 0xD9, 0x0A, 0xFE, 0x06, 0x38, 0x69, + 0xFE, 0x18, 0x30, 0x65, 0x21, 0x0B, 0x0A, 0x5F, 0x16, 0x00, 0x19, 0x5E, 0x19, 0xE5, 0xC3, 0x03, 0x0B, 0x4E, 0x57, 0x10, 0x29, 0x54, 0x53, 0x52, 0x37, 0x50, 0x4F, 0x5F, 0x5E, 0x5D, 0x5C, 0x5B, 0x5A, 0x54, 0x53, 0x0C, 0x3E, 0x22, 0xB9, 0x20, + 0x11, 0xFD, 0xCB, 0x01, 0x4E, 0x20, 0x09, 0x04, 0x0E, 0x02, 0x3E, 0x18, 0xB8, 0x20, 0x03, 0x05, 0x0E, 0x21, 0xC3, 0xD9, 0x0D, 0x3A, 0x91, 0x5C, 0xF5, 0xFD, 0x36, 0x57, 0x01, 0x3E, 0x20, 0xCD, 0x65, 0x0B, 0xF1, 0x32, 0x91, 0x5C, 0xC9, 0xFD, + 0xCB, 0x01, 0x4E, 0xC2, 0xCD, 0x0E, 0x0E, 0x21, 0xCD, 0x55, 0x0C, 0x05, 0xC3, 0xD9, 0x0D, 0xCD, 0x03, 0x0B, 0x79, 0x3D, 0x3D, 0xE6, 0x10, 0x18, 0x5A, 0x3E, 0x3F, 0x18, 0x6C, 0x11, 0x87, 0x0A, 0x32, 0x0F, 0x5C, 0x18, 0x0B, 0x11, 0x6D, 0x0A, + 0x18, 0x03, 0x11, 0x87, 0x0A, 0x32, 0x0E, 0x5C, 0x2A, 0x51, 0x5C, 0x73, 0x23, 0x72, 0xC9, 0x11, 0xF4, 0x09, 0xCD, 0x80, 0x0A, 0x2A, 0x0E, 0x5C, 0x57, 0x7D, 0xFE, 0x16, 0xDA, 0x11, 0x22, 0x20, 0x29, 0x44, 0x4A, 0x3E, 0x1F, 0x91, 0x38, 0x0C, + 0xC6, 0x02, 0x4F, 0xFD, 0xCB, 0x01, 0x4E, 0x20, 0x16, 0x3E, 0x16, 0x90, 0xDA, 0x9F, 0x1E, 0x3C, 0x47, 0x04, 0xFD, 0xCB, 0x02, 0x46, 0xC2, 0x55, 0x0C, 0xFD, 0xBE, 0x31, 0xDA, 0x86, 0x0C, 0xC3, 0xD9, 0x0D, 0x7C, 0xCD, 0x03, 0x0B, 0x81, 0x3D, + 0xE6, 0x1F, 0xC8, 0x57, 0xFD, 0xCB, 0x01, 0xC6, 0x3E, 0x20, 0xCD, 0x3B, 0x0C, 0x15, 0x20, 0xF8, 0xC9, 0xCD, 0x24, 0x0B, 0xFD, 0xCB, 0x01, 0x4E, 0x20, 0x1A, 0xFD, 0xCB, 0x02, 0x46, 0x20, 0x08, 0xED, 0x43, 0x88, 0x5C, 0x22, 0x84, 0x5C, 0xC9, + 0xED, 0x43, 0x8A, 0x5C, 0xED, 0x43, 0x82, 0x5C, 0x22, 0x86, 0x5C, 0xC9, 0xFD, 0x71, 0x45, 0x22, 0x80, 0x5C, 0xC9, 0xFD, 0xCB, 0x01, 0x4E, 0x20, 0x14, 0xED, 0x4B, 0x88, 0x5C, 0x2A, 0x84, 0x5C, 0xFD, 0xCB, 0x02, 0x46, 0xC8, 0xED, 0x4B, 0x8A, + 0x5C, 0x2A, 0x86, 0x5C, 0xC9, 0xFD, 0x4E, 0x45, 0x2A, 0x80, 0x5C, 0xC9, 0xFE, 0x80, 0x38, 0x3D, 0xFE, 0x90, 0x30, 0x26, 0x47, 0xCD, 0x38, 0x0B, 0xCD, 0x03, 0x0B, 0x11, 0x92, 0x5C, 0x18, 0x47, 0x21, 0x92, 0x5C, 0xCD, 0x3E, 0x0B, 0xCB, 0x18, + 0x9F, 0xE6, 0x0F, 0x4F, 0xCB, 0x18, 0x9F, 0xE6, 0xF0, 0xB1, 0x0E, 0x04, 0x77, 0x23, 0x0D, 0x20, 0xFB, 0xC9, 0xD6, 0xA5, 0x30, 0x09, 0xC6, 0x15, 0xC5, 0xED, 0x4B, 0x7B, 0x5C, 0x18, 0x0B, 0xCD, 0x10, 0x0C, 0xC3, 0x03, 0x0B, 0xC5, 0xED, 0x4B, + 0x36, 0x5C, 0xEB, 0x21, 0x3B, 0x5C, 0xCB, 0x86, 0xFE, 0x20, 0x20, 0x02, 0xCB, 0xC6, 0x26, 0x00, 0x6F, 0x29, 0x29, 0x29, 0x09, 0xC1, 0xEB, 0x79, 0x3D, 0x3E, 0x21, 0x20, 0x0E, 0x05, 0x4F, 0xFD, 0xCB, 0x01, 0x4E, 0x28, 0x06, 0xD5, 0xCD, 0xCD, + 0x0E, 0xD1, 0x79, 0xB9, 0xD5, 0xCC, 0x55, 0x0C, 0xD1, 0xC5, 0xE5, 0x3A, 0x91, 0x5C, 0x06, 0xFF, 0x1F, 0x38, 0x01, 0x04, 0x1F, 0x1F, 0x9F, 0x4F, 0x3E, 0x08, 0xA7, 0xFD, 0xCB, 0x01, 0x4E, 0x28, 0x05, 0xFD, 0xCB, 0x30, 0xCE, 0x37, 0xEB, 0x08, + 0x1A, 0xA0, 0xAE, 0xA9, 0x12, 0x08, 0x38, 0x13, 0x14, 0x23, 0x3D, 0x20, 0xF2, 0xEB, 0x25, 0xFD, 0xCB, 0x01, 0x4E, 0xCC, 0xDB, 0x0B, 0xE1, 0xC1, 0x0D, 0x23, 0xC9, 0x08, 0x3E, 0x20, 0x83, 0x5F, 0x08, 0x18, 0xE6, 0x7C, 0x0F, 0x0F, 0x0F, 0xE6, + 0x03, 0xF6, 0x58, 0x67, 0xED, 0x5B, 0x8F, 0x5C, 0x7E, 0xAB, 0xA2, 0xAB, 0xFD, 0xCB, 0x57, 0x76, 0x28, 0x08, 0xE6, 0xC7, 0xCB, 0x57, 0x20, 0x02, 0xEE, 0x38, 0xFD, 0xCB, 0x57, 0x66, 0x28, 0x08, 0xE6, 0xF8, 0xCB, 0x6F, 0x20, 0x02, 0xEE, 0x07, + 0x77, 0xC9, 0xE5, 0x26, 0x00, 0xE3, 0x18, 0x04, 0x11, 0x95, 0x00, 0xF5, 0xCD, 0x41, 0x0C, 0x38, 0x09, 0x3E, 0x20, 0xFD, 0xCB, 0x01, 0x46, 0xCC, 0x3B, 0x0C, 0x1A, 0xE6, 0x7F, 0xCD, 0x3B, 0x0C, 0x1A, 0x13, 0x87, 0x30, 0xF5, 0xD1, 0xFE, 0x48, + 0x28, 0x03, 0xFE, 0x82, 0xD8, 0x7A, 0xFE, 0x03, 0xD8, 0x3E, 0x20, 0xD5, 0xD9, 0xD7, 0xD9, 0xD1, 0xC9, 0xF5, 0xEB, 0x3C, 0xCB, 0x7E, 0x23, 0x28, 0xFB, 0x3D, 0x20, 0xF8, 0xEB, 0xF1, 0xFE, 0x20, 0xD8, 0x1A, 0xD6, 0x41, 0xC9, 0xFD, 0xCB, 0x01, + 0x4E, 0xC0, 0x11, 0xD9, 0x0D, 0xD5, 0x78, 0xFD, 0xCB, 0x02, 0x46, 0xC2, 0x02, 0x0D, 0xFD, 0xBE, 0x31, 0x38, 0x1B, 0xC0, 0xFD, 0xCB, 0x02, 0x66, 0x28, 0x16, 0xFD, 0x5E, 0x2D, 0x1D, 0x28, 0x5A, 0x3E, 0x00, 0xCD, 0x01, 0x16, 0xED, 0x7B, 0x3F, + 0x5C, 0xFD, 0xCB, 0x02, 0xA6, 0xC9, 0xCF, 0x04, 0xFD, 0x35, 0x52, 0x20, 0x45, 0x3E, 0x18, 0x90, 0x32, 0x8C, 0x5C, 0x2A, 0x8F, 0x5C, 0xE5, 0x3A, 0x91, 0x5C, 0xF5, 0x3E, 0xFD, 0xCD, 0x01, 0x16, 0xAF, 0x11, 0xF8, 0x0C, 0xCD, 0x0A, 0x0C, 0xFD, + 0xCB, 0x02, 0xEE, 0x21, 0x3B, 0x5C, 0xCB, 0xDE, 0xCB, 0xAE, 0xD9, 0xCD, 0xD4, 0x15, 0xD9, 0xFE, 0x20, 0x28, 0x45, 0xFE, 0xE2, 0x28, 0x41, 0xF6, 0x20, 0xFE, 0x6E, 0x28, 0x3B, 0x3E, 0xFE, 0xCD, 0x01, 0x16, 0xF1, 0x32, 0x91, 0x5C, 0xE1, 0x22, + 0x8F, 0x5C, 0xCD, 0xFE, 0x0D, 0xFD, 0x46, 0x31, 0x04, 0x0E, 0x21, 0xC5, 0xCD, 0x9B, 0x0E, 0x7C, 0x0F, 0x0F, 0x0F, 0xE6, 0x03, 0xF6, 0x58, 0x67, 0x11, 0xE0, 0x5A, 0x1A, 0x4E, 0x06, 0x20, 0xEB, 0x12, 0x71, 0x13, 0x23, 0x10, 0xFA, 0xC1, 0xC9, + 0x80, 0x73, 0x63, 0x72, 0x6F, 0x6C, 0x6C, 0xBF, 0xCF, 0x0C, 0xFE, 0x02, 0x38, 0x80, 0xFD, 0x86, 0x31, 0xD6, 0x19, 0xD0, 0xED, 0x44, 0xC5, 0x47, 0x2A, 0x8F, 0x5C, 0xE5, 0x2A, 0x91, 0x5C, 0xE5, 0xCD, 0x4D, 0x0D, 0x78, 0xF5, 0x21, 0x6B, 0x5C, + 0x46, 0x78, 0x3C, 0x77, 0x21, 0x89, 0x5C, 0xBE, 0x38, 0x03, 0x34, 0x06, 0x18, 0xCD, 0x00, 0x0E, 0xF1, 0x3D, 0x20, 0xE8, 0xE1, 0xFD, 0x75, 0x57, 0xE1, 0x22, 0x8F, 0x5C, 0xED, 0x4B, 0x88, 0x5C, 0xFD, 0xCB, 0x02, 0x86, 0xCD, 0xD9, 0x0D, 0xFD, + 0xCB, 0x02, 0xC6, 0xC1, 0xC9, 0xAF, 0x2A, 0x8D, 0x5C, 0xFD, 0xCB, 0x02, 0x46, 0x28, 0x04, 0x67, 0xFD, 0x6E, 0x0E, 0x22, 0x8F, 0x5C, 0x21, 0x91, 0x5C, 0x20, 0x02, 0x7E, 0x0F, 0xAE, 0xE6, 0x55, 0xAE, 0x77, 0xC9, 0xCD, 0xAF, 0x0D, 0x21, 0x3C, + 0x5C, 0xCB, 0xAE, 0xCB, 0xC6, 0xCD, 0x4D, 0x0D, 0xFD, 0x46, 0x31, 0xCD, 0x44, 0x0E, 0x21, 0xC0, 0x5A, 0x3A, 0x8D, 0x5C, 0x05, 0x18, 0x07, 0x0E, 0x20, 0x2B, 0x77, 0x0D, 0x20, 0xFB, 0x10, 0xF7, 0xFD, 0x36, 0x31, 0x02, 0x3E, 0xFD, 0xCD, 0x01, + 0x16, 0x2A, 0x51, 0x5C, 0x11, 0xF4, 0x09, 0xA7, 0x73, 0x23, 0x72, 0x23, 0x11, 0xA8, 0x10, 0x3F, 0x38, 0xF6, 0x01, 0x21, 0x17, 0x18, 0x2A, 0x21, 0x00, 0x00, 0x22, 0x7D, 0x5C, 0xFD, 0xCB, 0x30, 0x86, 0xCD, 0x94, 0x0D, 0x3E, 0xFE, 0xCD, 0x01, + 0x16, 0xCD, 0x4D, 0x0D, 0x06, 0x18, 0xCD, 0x44, 0x0E, 0x2A, 0x51, 0x5C, 0x11, 0xF4, 0x09, 0x73, 0x23, 0x72, 0xFD, 0x36, 0x52, 0x01, 0x01, 0x21, 0x18, 0x21, 0x00, 0x5B, 0xFD, 0xCB, 0x01, 0x4E, 0x20, 0x12, 0x78, 0xFD, 0xCB, 0x02, 0x46, 0x28, + 0x05, 0xFD, 0x86, 0x31, 0xD6, 0x18, 0xC5, 0x47, 0xCD, 0x9B, 0x0E, 0xC1, 0x3E, 0x21, 0x91, 0x5F, 0x16, 0x00, 0x19, 0xC3, 0xDC, 0x0A, 0x06, 0x17, 0xCD, 0x9B, 0x0E, 0x0E, 0x08, 0xC5, 0xE5, 0x78, 0xE6, 0x07, 0x78, 0x20, 0x0C, 0xEB, 0x21, 0xE0, + 0xF8, 0x19, 0xEB, 0x01, 0x20, 0x00, 0x3D, 0xED, 0xB0, 0xEB, 0x21, 0xE0, 0xFF, 0x19, 0xEB, 0x47, 0xE6, 0x07, 0x0F, 0x0F, 0x0F, 0x4F, 0x78, 0x06, 0x00, 0xED, 0xB0, 0x06, 0x07, 0x09, 0xE6, 0xF8, 0x20, 0xDB, 0xE1, 0x24, 0xC1, 0x0D, 0x20, 0xCD, + 0xCD, 0x88, 0x0E, 0x21, 0xE0, 0xFF, 0x19, 0xEB, 0xED, 0xB0, 0x06, 0x01, 0xC5, 0xCD, 0x9B, 0x0E, 0x0E, 0x08, 0xC5, 0xE5, 0x78, 0xE6, 0x07, 0x0F, 0x0F, 0x0F, 0x4F, 0x78, 0x06, 0x00, 0x0D, 0x54, 0x5D, 0x36, 0x00, 0x13, 0xED, 0xB0, 0x11, 0x01, + 0x07, 0x19, 0x3D, 0xE6, 0xF8, 0x47, 0x20, 0xE5, 0xE1, 0x24, 0xC1, 0x0D, 0x20, 0xDC, 0xCD, 0x88, 0x0E, 0x62, 0x6B, 0x13, 0x3A, 0x8D, 0x5C, 0xFD, 0xCB, 0x02, 0x46, 0x28, 0x03, 0x3A, 0x48, 0x5C, 0x77, 0x0B, 0xED, 0xB0, 0xC1, 0x0E, 0x21, 0xC9, + 0x7C, 0x0F, 0x0F, 0x0F, 0x3D, 0xF6, 0x50, 0x67, 0xEB, 0x61, 0x68, 0x29, 0x29, 0x29, 0x29, 0x29, 0x44, 0x4D, 0xC9, 0x3E, 0x18, 0x90, 0x57, 0x0F, 0x0F, 0x0F, 0xE6, 0xE0, 0x6F, 0x7A, 0xE6, 0x18, 0xF6, 0x40, 0x67, 0xC9, 0xF3, 0x06, 0xB0, 0x21, + 0x00, 0x40, 0xE5, 0xC5, 0xCD, 0xF4, 0x0E, 0xC1, 0xE1, 0x24, 0x7C, 0xE6, 0x07, 0x20, 0x0A, 0x7D, 0xC6, 0x20, 0x6F, 0x3F, 0x9F, 0xE6, 0xF8, 0x84, 0x67, 0x10, 0xE7, 0x18, 0x0D, 0xF3, 0x21, 0x00, 0x5B, 0x06, 0x08, 0xC5, 0xCD, 0xF4, 0x0E, 0xC1, + 0x10, 0xF9, 0x3E, 0x04, 0xD3, 0xFB, 0xFB, 0x21, 0x00, 0x5B, 0xFD, 0x75, 0x46, 0xAF, 0x47, 0x77, 0x23, 0x10, 0xFC, 0xFD, 0xCB, 0x30, 0x8E, 0x0E, 0x21, 0xC3, 0xD9, 0x0D, 0x78, 0xFE, 0x03, 0x9F, 0xE6, 0x02, 0xD3, 0xFB, 0x57, 0xCD, 0x54, 0x1F, + 0x38, 0x0A, 0x3E, 0x04, 0xD3, 0xFB, 0xFB, 0xCD, 0xDF, 0x0E, 0xCF, 0x0C, 0xDB, 0xFB, 0x87, 0xF8, 0x30, 0xEB, 0x0E, 0x20, 0x5E, 0x23, 0x06, 0x08, 0xCB, 0x12, 0xCB, 0x13, 0xCB, 0x1A, 0xDB, 0xFB, 0x1F, 0x30, 0xFB, 0x7A, 0xD3, 0xFB, 0x10, 0xF0, + 0x0D, 0x20, 0xE9, 0xC9, 0x2A, 0x3D, 0x5C, 0xE5, 0x21, 0x7F, 0x10, 0xE5, 0xED, 0x73, 0x3D, 0x5C, 0xCD, 0xD4, 0x15, 0xF5, 0x16, 0x00, 0xFD, 0x5E, 0xFF, 0x21, 0xC8, 0x00, 0xCD, 0xB5, 0x03, 0xF1, 0x21, 0x38, 0x0F, 0xE5, 0xFE, 0x18, 0x30, 0x31, + 0xFE, 0x07, 0x38, 0x2D, 0xFE, 0x10, 0x38, 0x3A, 0x01, 0x02, 0x00, 0x57, 0xFE, 0x16, 0x38, 0x0C, 0x03, 0xFD, 0xCB, 0x37, 0x7E, 0xCA, 0x1E, 0x10, 0xCD, 0xD4, 0x15, 0x5F, 0xCD, 0xD4, 0x15, 0xD5, 0x2A, 0x5B, 0x5C, 0xFD, 0xCB, 0x07, 0x86, 0xCD, + 0x55, 0x16, 0xC1, 0x23, 0x70, 0x23, 0x71, 0x18, 0x0A, 0xFD, 0xCB, 0x07, 0x86, 0x2A, 0x5B, 0x5C, 0xCD, 0x52, 0x16, 0x12, 0x13, 0xED, 0x53, 0x5B, 0x5C, 0xC9, 0x5F, 0x16, 0x00, 0x21, 0x99, 0x0F, 0x19, 0x5E, 0x19, 0xE5, 0x2A, 0x5B, 0x5C, 0xC9, + 0x09, 0x66, 0x6A, 0x50, 0xB5, 0x70, 0x7E, 0xCF, 0xD4, 0x2A, 0x49, 0x5C, 0xFD, 0xCB, 0x37, 0x6E, 0xC2, 0x97, 0x10, 0xCD, 0x6E, 0x19, 0xCD, 0x95, 0x16, 0x7A, 0xB3, 0xCA, 0x97, 0x10, 0xE5, 0x23, 0x4E, 0x23, 0x46, 0x21, 0x0A, 0x00, 0x09, 0x44, + 0x4D, 0xCD, 0x05, 0x1F, 0xCD, 0x97, 0x10, 0x2A, 0x51, 0x5C, 0xE3, 0xE5, 0x3E, 0xFF, 0xCD, 0x01, 0x16, 0xE1, 0x2B, 0xFD, 0x35, 0x0F, 0xCD, 0x55, 0x18, 0xFD, 0x34, 0x0F, 0x2A, 0x59, 0x5C, 0x23, 0x23, 0x23, 0x23, 0x22, 0x5B, 0x5C, 0xE1, 0xCD, + 0x15, 0x16, 0xC9, 0xFD, 0xCB, 0x37, 0x6E, 0x20, 0x08, 0x21, 0x49, 0x5C, 0xCD, 0x0F, 0x19, 0x18, 0x6D, 0xFD, 0x36, 0x00, 0x10, 0x18, 0x1D, 0xCD, 0x31, 0x10, 0x18, 0x05, 0x7E, 0xFE, 0x0D, 0xC8, 0x23, 0x22, 0x5B, 0x5C, 0xC9, 0xCD, 0x31, 0x10, + 0x01, 0x01, 0x00, 0xC3, 0xE8, 0x19, 0xCD, 0xD4, 0x15, 0xCD, 0xD4, 0x15, 0xE1, 0xE1, 0xE1, 0x22, 0x3D, 0x5C, 0xFD, 0xCB, 0x00, 0x7E, 0xC0, 0xF9, 0xC9, 0x37, 0xCD, 0x95, 0x11, 0xED, 0x52, 0x19, 0x23, 0xC1, 0xD8, 0xC5, 0x44, 0x4D, 0x62, 0x6B, + 0x23, 0x1A, 0xE6, 0xF0, 0xFE, 0x10, 0x20, 0x09, 0x23, 0x1A, 0xD6, 0x17, 0xCE, 0x00, 0x20, 0x01, 0x23, 0xA7, 0xED, 0x42, 0x09, 0xEB, 0x38, 0xE6, 0xC9, 0xFD, 0xCB, 0x37, 0x6E, 0xC0, 0x2A, 0x49, 0x5C, 0xCD, 0x6E, 0x19, 0xEB, 0xCD, 0x95, 0x16, + 0x21, 0x4A, 0x5C, 0xCD, 0x1C, 0x19, 0xCD, 0x95, 0x17, 0x3E, 0x00, 0xC3, 0x01, 0x16, 0xFD, 0xCB, 0x37, 0x7E, 0x28, 0xA8, 0xC3, 0x81, 0x0F, 0xFD, 0xCB, 0x30, 0x66, 0x28, 0xA1, 0xFD, 0x36, 0x00, 0xFF, 0x16, 0x00, 0xFD, 0x5E, 0xFE, 0x21, 0x90, + 0x1A, 0xCD, 0xB5, 0x03, 0xC3, 0x30, 0x0F, 0xE5, 0xCD, 0x90, 0x11, 0x2B, 0xCD, 0xE5, 0x19, 0x22, 0x5B, 0x5C, 0xFD, 0x36, 0x07, 0x00, 0xE1, 0xC9, 0xFD, 0xCB, 0x02, 0x5E, 0xC4, 0x1D, 0x11, 0xA7, 0xFD, 0xCB, 0x01, 0x6E, 0xC8, 0x3A, 0x08, 0x5C, + 0xFD, 0xCB, 0x01, 0xAE, 0xF5, 0xFD, 0xCB, 0x02, 0x6E, 0xC4, 0x6E, 0x0D, 0xF1, 0xFE, 0x20, 0x30, 0x52, 0xFE, 0x10, 0x30, 0x2D, 0xFE, 0x06, 0x30, 0x0A, 0x47, 0xE6, 0x01, 0x4F, 0x78, 0x1F, 0xC6, 0x12, 0x18, 0x2A, 0x20, 0x09, 0x21, 0x6A, 0x5C, + 0x3E, 0x08, 0xAE, 0x77, 0x18, 0x0E, 0xFE, 0x0E, 0xD8, 0xD6, 0x0D, 0x21, 0x41, 0x5C, 0xBE, 0x77, 0x20, 0x02, 0x36, 0x00, 0xFD, 0xCB, 0x02, 0xDE, 0xBF, 0xC9, 0x47, 0xE6, 0x07, 0x4F, 0x3E, 0x10, 0xCB, 0x58, 0x20, 0x01, 0x3C, 0xFD, 0x71, 0xD3, + 0x11, 0x0D, 0x11, 0x18, 0x06, 0x3A, 0x0D, 0x5C, 0x11, 0xA8, 0x10, 0x2A, 0x4F, 0x5C, 0x23, 0x23, 0x73, 0x23, 0x72, 0x37, 0xC9, 0xCD, 0x4D, 0x0D, 0xFD, 0xCB, 0x02, 0x9E, 0xFD, 0xCB, 0x02, 0xAE, 0x2A, 0x8A, 0x5C, 0xE5, 0x2A, 0x3D, 0x5C, 0xE5, + 0x21, 0x67, 0x11, 0xE5, 0xED, 0x73, 0x3D, 0x5C, 0x2A, 0x82, 0x5C, 0xE5, 0x37, 0xCD, 0x95, 0x11, 0xEB, 0xCD, 0x7D, 0x18, 0xEB, 0xCD, 0xE1, 0x18, 0x2A, 0x8A, 0x5C, 0xE3, 0xEB, 0xCD, 0x4D, 0x0D, 0x3A, 0x8B, 0x5C, 0x92, 0x38, 0x26, 0x20, 0x06, + 0x7B, 0xFD, 0x96, 0x50, 0x30, 0x1E, 0x3E, 0x20, 0xD5, 0xCD, 0xF4, 0x09, 0xD1, 0x18, 0xE9, 0x16, 0x00, 0xFD, 0x5E, 0xFE, 0x21, 0x90, 0x1A, 0xCD, 0xB5, 0x03, 0xFD, 0x36, 0x00, 0xFF, 0xED, 0x5B, 0x8A, 0x5C, 0x18, 0x02, 0xD1, 0xE1, 0xE1, 0x22, + 0x3D, 0x5C, 0xC1, 0xD5, 0xCD, 0xD9, 0x0D, 0xE1, 0x22, 0x82, 0x5C, 0xFD, 0x36, 0x26, 0x00, 0xC9, 0x2A, 0x61, 0x5C, 0x2B, 0xA7, 0xED, 0x5B, 0x59, 0x5C, 0xFD, 0xCB, 0x37, 0x6E, 0xC8, 0xED, 0x5B, 0x61, 0x5C, 0xD8, 0x2A, 0x63, 0x5C, 0xC9, 0x7E, + 0xFE, 0x0E, 0x01, 0x06, 0x00, 0xCC, 0xE8, 0x19, 0x7E, 0x23, 0xFE, 0x0D, 0x20, 0xF1, 0xC9, 0xF3, 0x3E, 0xFF, 0xED, 0x5B, 0xB2, 0x5C, 0xD9, 0xED, 0x4B, 0xB4, 0x5C, 0xED, 0x5B, 0x38, 0x5C, 0x2A, 0x7B, 0x5C, 0xD9, 0x47, 0x3E, 0x07, 0xD3, 0xFE, + 0x3E, 0x3F, 0xED, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6B, 0x36, 0x02, 0x2B, 0xBC, 0x20, 0xFA, 0xA7, 0xED, 0x52, 0x19, 0x23, 0x30, 0x06, 0x35, 0x28, 0x03, 0x35, 0x28, 0xF3, 0x2B, 0xD9, 0xED, 0x43, 0xB4, 0x5C, 0xED, 0x53, 0x38, + 0x5C, 0x22, 0x7B, 0x5C, 0xD9, 0x04, 0x28, 0x19, 0x22, 0xB4, 0x5C, 0x11, 0xAF, 0x3E, 0x01, 0xA8, 0x00, 0xEB, 0xED, 0xB8, 0xEB, 0x23, 0x22, 0x7B, 0x5C, 0x2B, 0x01, 0x40, 0x00, 0xED, 0x43, 0x38, 0x5C, 0x22, 0xB2, 0x5C, 0x21, 0x00, 0x3C, 0x22, + 0x36, 0x5C, 0x2A, 0xB2, 0x5C, 0x36, 0x3E, 0x2B, 0xF9, 0x2B, 0x2B, 0x22, 0x3D, 0x5C, 0xED, 0x56, 0xFD, 0x21, 0x3A, 0x5C, 0xFB, 0x21, 0xB6, 0x5C, 0x22, 0x4F, 0x5C, 0x11, 0xAF, 0x15, 0x01, 0x15, 0x00, 0xEB, 0xED, 0xB0, 0xEB, 0x2B, 0x22, 0x57, + 0x5C, 0x23, 0x22, 0x53, 0x5C, 0x22, 0x4B, 0x5C, 0x36, 0x80, 0x23, 0x22, 0x59, 0x5C, 0x36, 0x0D, 0x23, 0x36, 0x80, 0x23, 0x22, 0x61, 0x5C, 0x22, 0x63, 0x5C, 0x22, 0x65, 0x5C, 0x3E, 0x38, 0x32, 0x8D, 0x5C, 0x32, 0x8F, 0x5C, 0x32, 0x48, 0x5C, + 0x21, 0x23, 0x05, 0x22, 0x09, 0x5C, 0xFD, 0x35, 0xC6, 0xFD, 0x35, 0xCA, 0x21, 0xC6, 0x15, 0x11, 0x10, 0x5C, 0x01, 0x0E, 0x00, 0xED, 0xB0, 0xFD, 0xCB, 0x01, 0xCE, 0xCD, 0xDF, 0x0E, 0xFD, 0x36, 0x31, 0x02, 0xCD, 0x6B, 0x0D, 0xAF, 0x11, 0x38, + 0x15, 0xCD, 0x0A, 0x0C, 0xFD, 0xCB, 0x02, 0xEE, 0x18, 0x07, 0xFD, 0x36, 0x31, 0x02, 0xCD, 0x95, 0x17, 0xCD, 0xB0, 0x16, 0x3E, 0x00, 0xCD, 0x01, 0x16, 0xCD, 0x2C, 0x0F, 0xCD, 0x17, 0x1B, 0xFD, 0xCB, 0x00, 0x7E, 0x20, 0x12, 0xFD, 0xCB, 0x30, + 0x66, 0x28, 0x40, 0x2A, 0x59, 0x5C, 0xCD, 0xA7, 0x11, 0xFD, 0x36, 0x00, 0xFF, 0x18, 0xDD, 0x2A, 0x59, 0x5C, 0x22, 0x5D, 0x5C, 0xCD, 0xFB, 0x19, 0x78, 0xB1, 0xC2, 0x5D, 0x15, 0xDF, 0xFE, 0x0D, 0x28, 0xC0, 0xFD, 0xCB, 0x30, 0x46, 0xC4, 0xAF, + 0x0D, 0xCD, 0x6E, 0x0D, 0x3E, 0x19, 0xFD, 0x96, 0x4F, 0x32, 0x8C, 0x5C, 0xFD, 0xCB, 0x01, 0xFE, 0xFD, 0x36, 0x00, 0xFF, 0xFD, 0x36, 0x0A, 0x01, 0xCD, 0x8A, 0x1B, 0x76, 0xFD, 0xCB, 0x01, 0xAE, 0xFD, 0xCB, 0x30, 0x4E, 0xC4, 0xCD, 0x0E, 0x3A, + 0x3A, 0x5C, 0x3C, 0xF5, 0x21, 0x00, 0x00, 0xFD, 0x74, 0x37, 0xFD, 0x74, 0x26, 0x22, 0x0B, 0x5C, 0x21, 0x01, 0x00, 0x22, 0x16, 0x5C, 0xCD, 0xB0, 0x16, 0xFD, 0xCB, 0x37, 0xAE, 0xCD, 0x6E, 0x0D, 0xFD, 0xCB, 0x02, 0xEE, 0xF1, 0x47, 0xFE, 0x0A, + 0x38, 0x02, 0xC6, 0x07, 0xCD, 0xEF, 0x15, 0x3E, 0x20, 0xD7, 0x78, 0x11, 0x91, 0x13, 0xCD, 0x0A, 0x0C, 0xAF, 0x11, 0x36, 0x15, 0xCD, 0x0A, 0x0C, 0xED, 0x4B, 0x45, 0x5C, 0xCD, 0x1B, 0x1A, 0x3E, 0x3A, 0xD7, 0xFD, 0x4E, 0x0D, 0x06, 0x00, 0xCD, + 0x1B, 0x1A, 0xCD, 0x97, 0x10, 0x3A, 0x3A, 0x5C, 0x3C, 0x28, 0x1B, 0xFE, 0x09, 0x28, 0x04, 0xFE, 0x15, 0x20, 0x03, 0xFD, 0x34, 0x0D, 0x01, 0x03, 0x00, 0x11, 0x70, 0x5C, 0x21, 0x44, 0x5C, 0xCB, 0x7E, 0x28, 0x01, 0x09, 0xED, 0xB8, 0xFD, 0x36, + 0x0A, 0xFF, 0xFD, 0xCB, 0x01, 0x9E, 0xC3, 0xAC, 0x12, 0x80, 0x4F, 0xCB, 0x4E, 0x45, 0x58, 0x54, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6F, 0x75, 0x74, 0x20, 0x46, 0x4F, 0xD2, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6C, 0x65, 0x20, 0x6E, 0x6F, 0x74, + 0x20, 0x66, 0x6F, 0x75, 0x6E, 0xE4, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x20, 0x77, 0x72, 0x6F, 0x6E, 0xE7, 0x4F, 0x75, 0x74, 0x20, 0x6F, 0x66, 0x20, 0x6D, 0x65, 0x6D, 0x6F, 0x72, 0xF9, 0x4F, 0x75, 0x74, 0x20, 0x6F, 0x66, + 0x20, 0x73, 0x63, 0x72, 0x65, 0x65, 0xEE, 0x4E, 0x75, 0x6D, 0x62, 0x65, 0x72, 0x20, 0x74, 0x6F, 0x6F, 0x20, 0x62, 0x69, 0xE7, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4E, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6F, 0x75, 0x74, 0x20, 0x47, 0x4F, 0x53, 0x55, + 0xC2, 0x45, 0x6E, 0x64, 0x20, 0x6F, 0x66, 0x20, 0x66, 0x69, 0x6C, 0xE5, 0x53, 0x54, 0x4F, 0x50, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6D, 0x65, 0x6E, 0xF4, 0x49, 0x6E, 0x76, 0x61, 0x6C, 0x69, 0x64, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6D, 0x65, + 0x6E, 0xF4, 0x49, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x6F, 0x75, 0x74, 0x20, 0x6F, 0x66, 0x20, 0x72, 0x61, 0x6E, 0x67, 0xE5, 0x4E, 0x6F, 0x6E, 0x73, 0x65, 0x6E, 0x73, 0x65, 0x20, 0x69, 0x6E, 0x20, 0x42, 0x41, 0x53, 0x49, 0xC3, 0x42, + 0x52, 0x45, 0x41, 0x4B, 0x20, 0x2D, 0x20, 0x43, 0x4F, 0x4E, 0x54, 0x20, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0xF3, 0x4F, 0x75, 0x74, 0x20, 0x6F, 0x66, 0x20, 0x44, 0x41, 0x54, 0xC1, 0x49, 0x6E, 0x76, 0x61, 0x6C, 0x69, 0x64, 0x20, 0x66, 0x69, + 0x6C, 0x65, 0x20, 0x6E, 0x61, 0x6D, 0xE5, 0x4E, 0x6F, 0x20, 0x72, 0x6F, 0x6F, 0x6D, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x6C, 0x69, 0x6E, 0xE5, 0x53, 0x54, 0x4F, 0x50, 0x20, 0x69, 0x6E, 0x20, 0x49, 0x4E, 0x50, 0x55, 0xD4, 0x46, 0x4F, 0x52, 0x20, + 0x77, 0x69, 0x74, 0x68, 0x6F, 0x75, 0x74, 0x20, 0x4E, 0x45, 0x58, 0xD4, 0x49, 0x6E, 0x76, 0x61, 0x6C, 0x69, 0x64, 0x20, 0x49, 0x2F, 0x4F, 0x20, 0x64, 0x65, 0x76, 0x69, 0x63, 0xE5, 0x49, 0x6E, 0x76, 0x61, 0x6C, 0x69, 0x64, 0x20, 0x63, 0x6F, + 0x6C, 0x6F, 0x75, 0xF2, 0x42, 0x52, 0x45, 0x41, 0x4B, 0x20, 0x69, 0x6E, 0x74, 0x6F, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, 0x61, 0xED, 0x52, 0x41, 0x4D, 0x54, 0x4F, 0x50, 0x20, 0x6E, 0x6F, 0x20, 0x67, 0x6F, 0x6F, 0xE4, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x20, 0x6C, 0x6F, 0x73, 0xF4, 0x49, 0x6E, 0x76, 0x61, 0x6C, 0x69, 0x64, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61, 0xED, 0x46, 0x4E, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6F, 0x75, 0x74, 0x20, 0x44, 0x45, 0xC6, 0x50, 0x61, + 0x72, 0x61, 0x6D, 0x65, 0x74, 0x65, 0x72, 0x20, 0x65, 0x72, 0x72, 0x6F, 0xF2, 0x54, 0x61, 0x70, 0x65, 0x20, 0x6C, 0x6F, 0x61, 0x64, 0x69, 0x6E, 0x67, 0x20, 0x65, 0x72, 0x72, 0x6F, 0xF2, 0x2C, 0xA0, 0x7F, 0x20, 0x31, 0x39, 0x38, 0x32, 0x20, + 0x53, 0x69, 0x6E, 0x63, 0x6C, 0x61, 0x69, 0x72, 0x20, 0x52, 0x65, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x20, 0x4C, 0x74, 0xE4, 0x3E, 0x10, 0x01, 0x00, 0x00, 0xC3, 0x13, 0x13, 0xED, 0x43, 0x49, 0x5C, 0x2A, 0x5D, 0x5C, 0xEB, 0x21, 0x55, 0x15, + 0xE5, 0x2A, 0x61, 0x5C, 0x37, 0xED, 0x52, 0xE5, 0x60, 0x69, 0xCD, 0x6E, 0x19, 0x20, 0x06, 0xCD, 0xB8, 0x19, 0xCD, 0xE8, 0x19, 0xC1, 0x79, 0x3D, 0xB0, 0x28, 0x28, 0xC5, 0x03, 0x03, 0x03, 0x03, 0x2B, 0xED, 0x5B, 0x53, 0x5C, 0xD5, 0xCD, 0x55, + 0x16, 0xE1, 0x22, 0x53, 0x5C, 0xC1, 0xC5, 0x13, 0x2A, 0x61, 0x5C, 0x2B, 0x2B, 0xED, 0xB8, 0x2A, 0x49, 0x5C, 0xEB, 0xC1, 0x70, 0x2B, 0x71, 0x2B, 0x73, 0x2B, 0x72, 0xF1, 0xC3, 0xA2, 0x12, 0xF4, 0x09, 0xA8, 0x10, 0x4B, 0xF4, 0x09, 0xC4, 0x15, + 0x53, 0x81, 0x0F, 0xC4, 0x15, 0x52, 0xF4, 0x09, 0xC4, 0x15, 0x50, 0x80, 0xCF, 0x12, 0x01, 0x00, 0x06, 0x00, 0x0B, 0x00, 0x01, 0x00, 0x01, 0x00, 0x06, 0x00, 0x10, 0x00, 0xFD, 0xCB, 0x02, 0x6E, 0x20, 0x04, 0xFD, 0xCB, 0x02, 0xDE, 0xCD, 0xE6, + 0x15, 0xD8, 0x28, 0xFA, 0xCF, 0x07, 0xD9, 0xE5, 0x2A, 0x51, 0x5C, 0x23, 0x23, 0x18, 0x08, 0x1E, 0x30, 0x83, 0xD9, 0xE5, 0x2A, 0x51, 0x5C, 0x5E, 0x23, 0x56, 0xEB, 0xCD, 0x2C, 0x16, 0xE1, 0xD9, 0xC9, 0x87, 0xC6, 0x16, 0x6F, 0x26, 0x5C, 0x5E, + 0x23, 0x56, 0x7A, 0xB3, 0x20, 0x02, 0xCF, 0x17, 0x1B, 0x2A, 0x4F, 0x5C, 0x19, 0x22, 0x51, 0x5C, 0xFD, 0xCB, 0x30, 0xA6, 0x23, 0x23, 0x23, 0x23, 0x4E, 0x21, 0x2D, 0x16, 0xCD, 0xDC, 0x16, 0xD0, 0x16, 0x00, 0x5E, 0x19, 0xE9, 0x4B, 0x06, 0x53, + 0x12, 0x50, 0x1B, 0x00, 0xFD, 0xCB, 0x02, 0xC6, 0xFD, 0xCB, 0x01, 0xAE, 0xFD, 0xCB, 0x30, 0xE6, 0x18, 0x04, 0xFD, 0xCB, 0x02, 0x86, 0xFD, 0xCB, 0x01, 0x8E, 0xC3, 0x4D, 0x0D, 0xFD, 0xCB, 0x01, 0xCE, 0xC9, 0x01, 0x01, 0x00, 0xE5, 0xCD, 0x05, + 0x1F, 0xE1, 0xCD, 0x64, 0x16, 0x2A, 0x65, 0x5C, 0xEB, 0xED, 0xB8, 0xC9, 0xF5, 0xE5, 0x21, 0x4B, 0x5C, 0x3E, 0x0E, 0x5E, 0x23, 0x56, 0xE3, 0xA7, 0xED, 0x52, 0x19, 0xE3, 0x30, 0x09, 0xD5, 0xEB, 0x09, 0xEB, 0x72, 0x2B, 0x73, 0x23, 0xD1, 0x23, + 0x3D, 0x20, 0xE8, 0xEB, 0xD1, 0xF1, 0xA7, 0xED, 0x52, 0x44, 0x4D, 0x03, 0x19, 0xEB, 0xC9, 0x00, 0x00, 0xEB, 0x11, 0x8F, 0x16, 0x7E, 0xE6, 0xC0, 0x20, 0xF7, 0x56, 0x23, 0x5E, 0xC9, 0x2A, 0x63, 0x5C, 0x2B, 0xCD, 0x55, 0x16, 0x23, 0x23, 0xC1, + 0xED, 0x43, 0x61, 0x5C, 0xC1, 0xEB, 0x23, 0xC9, 0x2A, 0x59, 0x5C, 0x36, 0x0D, 0x22, 0x5B, 0x5C, 0x23, 0x36, 0x80, 0x23, 0x22, 0x61, 0x5C, 0x2A, 0x61, 0x5C, 0x22, 0x63, 0x5C, 0x2A, 0x63, 0x5C, 0x22, 0x65, 0x5C, 0xE5, 0x21, 0x92, 0x5C, 0x22, + 0x68, 0x5C, 0xE1, 0xC9, 0xED, 0x5B, 0x59, 0x5C, 0xC3, 0xE5, 0x19, 0x23, 0x7E, 0xA7, 0xC8, 0xB9, 0x23, 0x20, 0xF8, 0x37, 0xC9, 0xCD, 0x1E, 0x17, 0xCD, 0x01, 0x17, 0x01, 0x00, 0x00, 0x11, 0xE2, 0xA3, 0xEB, 0x19, 0x38, 0x07, 0x01, 0xD4, 0x15, + 0x09, 0x4E, 0x23, 0x46, 0xEB, 0x71, 0x23, 0x70, 0xC9, 0xE5, 0x2A, 0x4F, 0x5C, 0x09, 0x23, 0x23, 0x23, 0x4E, 0xEB, 0x21, 0x16, 0x17, 0xCD, 0xDC, 0x16, 0x4E, 0x06, 0x00, 0x09, 0xE9, 0x4B, 0x05, 0x53, 0x03, 0x50, 0x01, 0xE1, 0xC9, 0xCD, 0x94, + 0x1E, 0xFE, 0x10, 0x38, 0x02, 0xCF, 0x17, 0xC6, 0x03, 0x07, 0x21, 0x10, 0x5C, 0x4F, 0x06, 0x00, 0x09, 0x4E, 0x23, 0x46, 0x2B, 0xC9, 0xEF, 0x01, 0x38, 0xCD, 0x1E, 0x17, 0x78, 0xB1, 0x28, 0x16, 0xEB, 0x2A, 0x4F, 0x5C, 0x09, 0x23, 0x23, 0x23, + 0x7E, 0xEB, 0xFE, 0x4B, 0x28, 0x08, 0xFE, 0x53, 0x28, 0x04, 0xFE, 0x50, 0x20, 0xCF, 0xCD, 0x5D, 0x17, 0x73, 0x23, 0x72, 0xC9, 0xE5, 0xCD, 0xF1, 0x2B, 0x78, 0xB1, 0x20, 0x02, 0xCF, 0x0E, 0xC5, 0x1A, 0xE6, 0xDF, 0x4F, 0x21, 0x7A, 0x17, 0xCD, + 0xDC, 0x16, 0x30, 0xF1, 0x4E, 0x06, 0x00, 0x09, 0xC1, 0xE9, 0x4B, 0x06, 0x53, 0x08, 0x50, 0x0A, 0x00, 0x1E, 0x01, 0x18, 0x06, 0x1E, 0x06, 0x18, 0x02, 0x1E, 0x10, 0x0B, 0x78, 0xB1, 0x20, 0xD5, 0x57, 0xE1, 0xC9, 0x18, 0x90, 0xED, 0x73, 0x3F, + 0x5C, 0xFD, 0x36, 0x02, 0x10, 0xCD, 0xAF, 0x0D, 0xFD, 0xCB, 0x02, 0xC6, 0xFD, 0x46, 0x31, 0xCD, 0x44, 0x0E, 0xFD, 0xCB, 0x02, 0x86, 0xFD, 0xCB, 0x30, 0xC6, 0x2A, 0x49, 0x5C, 0xED, 0x5B, 0x6C, 0x5C, 0xA7, 0xED, 0x52, 0x19, 0x38, 0x22, 0xD5, + 0xCD, 0x6E, 0x19, 0x11, 0xC0, 0x02, 0xEB, 0xED, 0x52, 0xE3, 0xCD, 0x6E, 0x19, 0xC1, 0xC5, 0xCD, 0xB8, 0x19, 0xC1, 0x09, 0x38, 0x0E, 0xEB, 0x56, 0x23, 0x5E, 0x2B, 0xED, 0x53, 0x6C, 0x5C, 0x18, 0xED, 0x22, 0x6C, 0x5C, 0x2A, 0x6C, 0x5C, 0xCD, + 0x6E, 0x19, 0x28, 0x01, 0xEB, 0xCD, 0x33, 0x18, 0xFD, 0xCB, 0x02, 0xA6, 0xC9, 0x3E, 0x03, 0x18, 0x02, 0x3E, 0x02, 0xFD, 0x36, 0x02, 0x00, 0xCD, 0x30, 0x25, 0xC4, 0x01, 0x16, 0xDF, 0xCD, 0x70, 0x20, 0x38, 0x14, 0xDF, 0xFE, 0x3B, 0x28, 0x04, + 0xFE, 0x2C, 0x20, 0x06, 0xE7, 0xCD, 0x82, 0x1C, 0x18, 0x08, 0xCD, 0xE6, 0x1C, 0x18, 0x03, 0xCD, 0xDE, 0x1C, 0xCD, 0xEE, 0x1B, 0xCD, 0x99, 0x1E, 0x78, 0xE6, 0x3F, 0x67, 0x69, 0x22, 0x49, 0x5C, 0xCD, 0x6E, 0x19, 0x1E, 0x01, 0xCD, 0x55, 0x18, + 0xD7, 0xFD, 0xCB, 0x02, 0x66, 0x28, 0xF6, 0x3A, 0x6B, 0x5C, 0xFD, 0x96, 0x4F, 0x20, 0xEE, 0xAB, 0xC8, 0xE5, 0xD5, 0x21, 0x6C, 0x5C, 0xCD, 0x0F, 0x19, 0xD1, 0xE1, 0x18, 0xE0, 0xED, 0x4B, 0x49, 0x5C, 0xCD, 0x80, 0x19, 0x16, 0x3E, 0x28, 0x05, + 0x11, 0x00, 0x00, 0xCB, 0x13, 0xFD, 0x73, 0x2D, 0x7E, 0xFE, 0x40, 0xC1, 0xD0, 0xC5, 0xCD, 0x28, 0x1A, 0x23, 0x23, 0x23, 0xFD, 0xCB, 0x01, 0x86, 0x7A, 0xA7, 0x28, 0x05, 0xD7, 0xFD, 0xCB, 0x01, 0xC6, 0xD5, 0xEB, 0xFD, 0xCB, 0x30, 0x96, 0x21, + 0x3B, 0x5C, 0xCB, 0x96, 0xFD, 0xCB, 0x37, 0x6E, 0x28, 0x02, 0xCB, 0xD6, 0x2A, 0x5F, 0x5C, 0xA7, 0xED, 0x52, 0x20, 0x05, 0x3E, 0x3F, 0xCD, 0xC1, 0x18, 0xCD, 0xE1, 0x18, 0xEB, 0x7E, 0xCD, 0xB6, 0x18, 0x23, 0xFE, 0x0D, 0x28, 0x06, 0xEB, 0xCD, + 0x37, 0x19, 0x18, 0xE0, 0xD1, 0xC9, 0xFE, 0x0E, 0xC0, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x7E, 0xC9, 0xD9, 0x2A, 0x8F, 0x5C, 0xE5, 0xCB, 0xBC, 0xCB, 0xFD, 0x22, 0x8F, 0x5C, 0x21, 0x91, 0x5C, 0x56, 0xD5, 0x36, 0x00, 0xCD, 0xF4, 0x09, 0xE1, + 0xFD, 0x74, 0x57, 0xE1, 0x22, 0x8F, 0x5C, 0xD9, 0xC9, 0x2A, 0x5B, 0x5C, 0xA7, 0xED, 0x52, 0xC0, 0x3A, 0x41, 0x5C, 0xCB, 0x07, 0x28, 0x04, 0xC6, 0x43, 0x18, 0x16, 0x21, 0x3B, 0x5C, 0xCB, 0x9E, 0x3E, 0x4B, 0xCB, 0x56, 0x28, 0x0B, 0xCB, 0xDE, + 0x3C, 0xFD, 0xCB, 0x30, 0x5E, 0x28, 0x02, 0x3E, 0x43, 0xD5, 0xCD, 0xC1, 0x18, 0xD1, 0xC9, 0x5E, 0x23, 0x56, 0xE5, 0xEB, 0x23, 0xCD, 0x6E, 0x19, 0xCD, 0x95, 0x16, 0xE1, 0xFD, 0xCB, 0x37, 0x6E, 0xC0, 0x72, 0x2B, 0x73, 0xC9, 0x7B, 0xA7, 0xF8, + 0x18, 0x0D, 0xAF, 0x09, 0x3C, 0x38, 0xFC, 0xED, 0x42, 0x3D, 0x28, 0xF1, 0xC3, 0xEF, 0x15, 0xCD, 0x1B, 0x2D, 0x30, 0x30, 0xFE, 0x21, 0x38, 0x2C, 0xFD, 0xCB, 0x01, 0x96, 0xFE, 0xCB, 0x28, 0x24, 0xFE, 0x3A, 0x20, 0x0E, 0xFD, 0xCB, 0x37, 0x6E, + 0x20, 0x16, 0xFD, 0xCB, 0x30, 0x56, 0x28, 0x14, 0x18, 0x0E, 0xFE, 0x22, 0x20, 0x0A, 0xF5, 0x3A, 0x6A, 0x5C, 0xEE, 0x04, 0x32, 0x6A, 0x5C, 0xF1, 0xFD, 0xCB, 0x01, 0xD6, 0xD7, 0xC9, 0xE5, 0x2A, 0x53, 0x5C, 0x54, 0x5D, 0xC1, 0xCD, 0x80, 0x19, + 0xD0, 0xC5, 0xCD, 0xB8, 0x19, 0xEB, 0x18, 0xF4, 0x7E, 0xB8, 0xC0, 0x23, 0x7E, 0x2B, 0xB9, 0xC9, 0x23, 0x23, 0x23, 0x22, 0x5D, 0x5C, 0x0E, 0x00, 0x15, 0xC8, 0xE7, 0xBB, 0x20, 0x04, 0xA7, 0xC9, 0x23, 0x7E, 0xCD, 0xB6, 0x18, 0x22, 0x5D, 0x5C, + 0xFE, 0x22, 0x20, 0x01, 0x0D, 0xFE, 0x3A, 0x28, 0x04, 0xFE, 0xCB, 0x20, 0x04, 0xCB, 0x41, 0x28, 0xDF, 0xFE, 0x0D, 0x20, 0xE3, 0x15, 0x37, 0xC9, 0xE5, 0x7E, 0xFE, 0x40, 0x38, 0x17, 0xCB, 0x6F, 0x28, 0x14, 0x87, 0xFA, 0xC7, 0x19, 0x3F, 0x01, + 0x05, 0x00, 0x30, 0x02, 0x0E, 0x12, 0x17, 0x23, 0x7E, 0x30, 0xFB, 0x18, 0x06, 0x23, 0x23, 0x4E, 0x23, 0x46, 0x23, 0x09, 0xD1, 0xA7, 0xED, 0x52, 0x44, 0x4D, 0x19, 0xEB, 0xC9, 0xCD, 0xDD, 0x19, 0xC5, 0x78, 0x2F, 0x47, 0x79, 0x2F, 0x4F, 0x03, + 0xCD, 0x64, 0x16, 0xEB, 0xE1, 0x19, 0xD5, 0xED, 0xB0, 0xE1, 0xC9, 0x2A, 0x59, 0x5C, 0x2B, 0x22, 0x5D, 0x5C, 0xE7, 0x21, 0x92, 0x5C, 0x22, 0x65, 0x5C, 0xCD, 0x3B, 0x2D, 0xCD, 0xA2, 0x2D, 0x38, 0x04, 0x21, 0xF0, 0xD8, 0x09, 0xDA, 0x8A, 0x1C, + 0xC3, 0xC5, 0x16, 0xD5, 0xE5, 0xAF, 0xCB, 0x78, 0x20, 0x20, 0x60, 0x69, 0x1E, 0xFF, 0x18, 0x08, 0xD5, 0x56, 0x23, 0x5E, 0xE5, 0xEB, 0x1E, 0x20, 0x01, 0x18, 0xFC, 0xCD, 0x2A, 0x19, 0x01, 0x9C, 0xFF, 0xCD, 0x2A, 0x19, 0x0E, 0xF6, 0xCD, 0x2A, + 0x19, 0x7D, 0xCD, 0xEF, 0x15, 0xE1, 0xD1, 0xC9, 0xB1, 0xCB, 0xBC, 0xBF, 0xC4, 0xAF, 0xB4, 0x93, 0x91, 0x92, 0x95, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x7F, 0x81, 0x2E, 0x6C, 0x6E, 0x70, 0x48, 0x94, 0x56, 0x3F, 0x41, 0x2B, 0x17, 0x1F, + 0x37, 0x77, 0x44, 0x0F, 0x59, 0x2B, 0x43, 0x2D, 0x51, 0x3A, 0x6D, 0x42, 0x0D, 0x49, 0x5C, 0x44, 0x15, 0x5D, 0x01, 0x3D, 0x02, 0x06, 0x00, 0x67, 0x1E, 0x06, 0xCB, 0x05, 0xF0, 0x1C, 0x06, 0x00, 0xED, 0x1E, 0x00, 0xEE, 0x1C, 0x00, 0x23, 0x1F, + 0x04, 0x3D, 0x06, 0xCC, 0x06, 0x05, 0x03, 0x1D, 0x04, 0x00, 0xAB, 0x1D, 0x05, 0xCD, 0x1F, 0x05, 0x89, 0x20, 0x05, 0x02, 0x2C, 0x05, 0xB2, 0x1B, 0x00, 0xB7, 0x11, 0x03, 0xA1, 0x1E, 0x05, 0xF9, 0x17, 0x08, 0x00, 0x80, 0x1E, 0x03, 0x4F, 0x1E, + 0x00, 0x5F, 0x1E, 0x03, 0xAC, 0x1E, 0x00, 0x6B, 0x0D, 0x09, 0x00, 0xDC, 0x22, 0x06, 0x00, 0x3A, 0x1F, 0x05, 0xED, 0x1D, 0x05, 0x27, 0x1E, 0x03, 0x42, 0x1E, 0x09, 0x05, 0x82, 0x23, 0x00, 0xAC, 0x0E, 0x05, 0xC9, 0x1F, 0x05, 0xF5, 0x17, 0x0B, + 0x0B, 0x0B, 0x0B, 0x08, 0x00, 0xF8, 0x03, 0x09, 0x05, 0x20, 0x23, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x00, 0x7A, 0x1E, 0x06, 0x00, 0x94, 0x22, 0x05, 0x60, 0x1F, 0x06, 0x2C, 0x0A, 0x00, 0x36, 0x17, 0x06, 0x00, 0xE5, 0x16, 0x0A, 0x00, + 0x93, 0x17, 0x0A, 0x2C, 0x0A, 0x00, 0x93, 0x17, 0x0A, 0x00, 0x93, 0x17, 0x00, 0x93, 0x17, 0xFD, 0xCB, 0x01, 0xBE, 0xCD, 0xFB, 0x19, 0xAF, 0x32, 0x47, 0x5C, 0x3D, 0x32, 0x3A, 0x5C, 0x18, 0x01, 0xE7, 0xCD, 0xBF, 0x16, 0xFD, 0x34, 0x0D, 0xFA, + 0x8A, 0x1C, 0xDF, 0x06, 0x00, 0xFE, 0x0D, 0x28, 0x7A, 0xFE, 0x3A, 0x28, 0xEB, 0x21, 0x76, 0x1B, 0xE5, 0x4F, 0xE7, 0x79, 0xD6, 0xCE, 0xDA, 0x8A, 0x1C, 0x4F, 0x21, 0x48, 0x1A, 0x09, 0x4E, 0x09, 0x18, 0x03, 0x2A, 0x74, 0x5C, 0x7E, 0x23, 0x22, + 0x74, 0x5C, 0x01, 0x52, 0x1B, 0xC5, 0x4F, 0xFE, 0x20, 0x30, 0x0C, 0x21, 0x01, 0x1C, 0x06, 0x00, 0x09, 0x4E, 0x09, 0xE5, 0xDF, 0x05, 0xC9, 0xDF, 0xB9, 0xC2, 0x8A, 0x1C, 0xE7, 0xC9, 0xCD, 0x54, 0x1F, 0x38, 0x02, 0xCF, 0x14, 0xFD, 0xCB, 0x0A, + 0x7E, 0x20, 0x71, 0x2A, 0x42, 0x5C, 0xCB, 0x7C, 0x28, 0x14, 0x21, 0xFE, 0xFF, 0x22, 0x45, 0x5C, 0x2A, 0x61, 0x5C, 0x2B, 0xED, 0x5B, 0x59, 0x5C, 0x1B, 0x3A, 0x44, 0x5C, 0x18, 0x33, 0xCD, 0x6E, 0x19, 0x3A, 0x44, 0x5C, 0x28, 0x19, 0xA7, 0x20, + 0x43, 0x47, 0x7E, 0xE6, 0xC0, 0x78, 0x28, 0x0F, 0xCF, 0xFF, 0xC1, 0xCD, 0x30, 0x25, 0xC8, 0x2A, 0x55, 0x5C, 0x3E, 0xC0, 0xA6, 0xC0, 0xAF, 0xFE, 0x01, 0xCE, 0x00, 0x56, 0x23, 0x5E, 0xED, 0x53, 0x45, 0x5C, 0x23, 0x5E, 0x23, 0x56, 0xEB, 0x19, + 0x23, 0x22, 0x55, 0x5C, 0xEB, 0x22, 0x5D, 0x5C, 0x57, 0x1E, 0x00, 0xFD, 0x36, 0x0A, 0xFF, 0x15, 0xFD, 0x72, 0x0D, 0xCA, 0x28, 0x1B, 0x14, 0xCD, 0x8B, 0x19, 0x28, 0x08, 0xCF, 0x16, 0xCD, 0x30, 0x25, 0xC0, 0xC1, 0xC1, 0xDF, 0xFE, 0x0D, 0x28, + 0xBA, 0xFE, 0x3A, 0xCA, 0x28, 0x1B, 0xC3, 0x8A, 0x1C, 0x0F, 0x1D, 0x4B, 0x09, 0x67, 0x0B, 0x7B, 0x8E, 0x71, 0xB4, 0x81, 0xCF, 0xCD, 0xDE, 0x1C, 0xBF, 0xC1, 0xCC, 0xEE, 0x1B, 0xEB, 0x2A, 0x74, 0x5C, 0x4E, 0x23, 0x46, 0xEB, 0xC5, 0xC9, 0xCD, + 0xB2, 0x28, 0xFD, 0x36, 0x37, 0x00, 0x30, 0x08, 0xFD, 0xCB, 0x37, 0xCE, 0x20, 0x18, 0xCF, 0x01, 0xCC, 0x96, 0x29, 0xFD, 0xCB, 0x01, 0x76, 0x20, 0x0D, 0xAF, 0xCD, 0x30, 0x25, 0xC4, 0xF1, 0x2B, 0x21, 0x71, 0x5C, 0xB6, 0x77, 0xEB, 0xED, 0x43, + 0x72, 0x5C, 0x22, 0x4D, 0x5C, 0xC9, 0xC1, 0xCD, 0x56, 0x1C, 0xCD, 0xEE, 0x1B, 0xC9, 0x3A, 0x3B, 0x5C, 0xF5, 0xCD, 0xFB, 0x24, 0xF1, 0xFD, 0x56, 0x01, 0xAA, 0xE6, 0x40, 0x20, 0x24, 0xCB, 0x7A, 0xC2, 0xFF, 0x2A, 0xC9, 0xCD, 0xB2, 0x28, 0xF5, + 0x79, 0xF6, 0x9F, 0x3C, 0x20, 0x14, 0xF1, 0x18, 0xA9, 0xE7, 0xCD, 0x82, 0x1C, 0xFE, 0x2C, 0x20, 0x09, 0xE7, 0xCD, 0xFB, 0x24, 0xFD, 0xCB, 0x01, 0x76, 0xC0, 0xCF, 0x0B, 0xCD, 0xFB, 0x24, 0xFD, 0xCB, 0x01, 0x76, 0xC8, 0x18, 0xF4, 0xFD, 0xCB, + 0x01, 0x7E, 0xFD, 0xCB, 0x02, 0x86, 0xC4, 0x4D, 0x0D, 0xF1, 0x3A, 0x74, 0x5C, 0xD6, 0x13, 0xCD, 0xFC, 0x21, 0xCD, 0xEE, 0x1B, 0x2A, 0x8F, 0x5C, 0x22, 0x8D, 0x5C, 0x21, 0x91, 0x5C, 0x7E, 0x07, 0xAE, 0xE6, 0xAA, 0xAE, 0x77, 0xC9, 0xCD, 0x30, + 0x25, 0x28, 0x13, 0xFD, 0xCB, 0x02, 0x86, 0xCD, 0x4D, 0x0D, 0x21, 0x90, 0x5C, 0x7E, 0xF6, 0xF8, 0x77, 0xFD, 0xCB, 0x57, 0xB6, 0xDF, 0xCD, 0xE2, 0x21, 0x18, 0x9F, 0xC3, 0x05, 0x06, 0xFE, 0x0D, 0x28, 0x04, 0xFE, 0x3A, 0x20, 0x9C, 0xCD, 0x30, + 0x25, 0xC8, 0xEF, 0xA0, 0x38, 0xC9, 0xCF, 0x08, 0xC1, 0xCD, 0x30, 0x25, 0x28, 0x0A, 0xEF, 0x02, 0x38, 0xEB, 0xCD, 0xE9, 0x34, 0xDA, 0xB3, 0x1B, 0xC3, 0x29, 0x1B, 0xFE, 0xCD, 0x20, 0x09, 0xE7, 0xCD, 0x82, 0x1C, 0xCD, 0xEE, 0x1B, 0x18, 0x06, + 0xCD, 0xEE, 0x1B, 0xEF, 0xA1, 0x38, 0xEF, 0xC0, 0x02, 0x01, 0xE0, 0x01, 0x38, 0xCD, 0xFF, 0x2A, 0x22, 0x68, 0x5C, 0x2B, 0x7E, 0xCB, 0xFE, 0x01, 0x06, 0x00, 0x09, 0x07, 0x38, 0x06, 0x0E, 0x0D, 0xCD, 0x55, 0x16, 0x23, 0xE5, 0xEF, 0x02, 0x02, + 0x38, 0xE1, 0xEB, 0x0E, 0x0A, 0xED, 0xB0, 0x2A, 0x45, 0x5C, 0xEB, 0x73, 0x23, 0x72, 0xFD, 0x56, 0x0D, 0x14, 0x23, 0x72, 0xCD, 0xDA, 0x1D, 0xD0, 0xFD, 0x46, 0x38, 0x2A, 0x45, 0x5C, 0x22, 0x42, 0x5C, 0x3A, 0x47, 0x5C, 0xED, 0x44, 0x57, 0x2A, + 0x5D, 0x5C, 0x1E, 0xF3, 0xC5, 0xED, 0x4B, 0x55, 0x5C, 0xCD, 0x86, 0x1D, 0xED, 0x43, 0x55, 0x5C, 0xC1, 0x38, 0x11, 0xE7, 0xF6, 0x20, 0xB8, 0x28, 0x03, 0xE7, 0x18, 0xE8, 0xE7, 0x3E, 0x01, 0x92, 0x32, 0x44, 0x5C, 0xC9, 0xCF, 0x11, 0x7E, 0xFE, + 0x3A, 0x28, 0x18, 0x23, 0x7E, 0xE6, 0xC0, 0x37, 0xC0, 0x46, 0x23, 0x4E, 0xED, 0x43, 0x42, 0x5C, 0x23, 0x4E, 0x23, 0x46, 0xE5, 0x09, 0x44, 0x4D, 0xE1, 0x16, 0x00, 0xC5, 0xCD, 0x8B, 0x19, 0xC1, 0xD0, 0x18, 0xE0, 0xFD, 0xCB, 0x37, 0x4E, 0xC2, + 0x2E, 0x1C, 0x2A, 0x4D, 0x5C, 0xCB, 0x7E, 0x28, 0x1F, 0x23, 0x22, 0x68, 0x5C, 0xEF, 0xE0, 0xE2, 0x0F, 0xC0, 0x02, 0x38, 0xCD, 0xDA, 0x1D, 0xD8, 0x2A, 0x68, 0x5C, 0x11, 0x0F, 0x00, 0x19, 0x5E, 0x23, 0x56, 0x23, 0x66, 0xEB, 0xC3, 0x73, 0x1E, + 0xCF, 0x00, 0xEF, 0xE1, 0xE0, 0xE2, 0x36, 0x00, 0x02, 0x01, 0x03, 0x37, 0x00, 0x04, 0x38, 0xA7, 0xC9, 0x38, 0x37, 0xC9, 0xE7, 0xCD, 0x1F, 0x1C, 0xCD, 0x30, 0x25, 0x28, 0x29, 0xDF, 0x22, 0x5F, 0x5C, 0x2A, 0x57, 0x5C, 0x7E, 0xFE, 0x2C, 0x28, + 0x09, 0x1E, 0xE4, 0xCD, 0x86, 0x1D, 0x30, 0x02, 0xCF, 0x0D, 0xCD, 0x77, 0x00, 0xCD, 0x56, 0x1C, 0xDF, 0x22, 0x57, 0x5C, 0x2A, 0x5F, 0x5C, 0xFD, 0x36, 0x26, 0x00, 0xCD, 0x78, 0x00, 0xDF, 0xFE, 0x2C, 0x28, 0xC9, 0xCD, 0xEE, 0x1B, 0xC9, 0xCD, + 0x30, 0x25, 0x20, 0x0B, 0xCD, 0xFB, 0x24, 0xFE, 0x2C, 0xC4, 0xEE, 0x1B, 0xE7, 0x18, 0xF5, 0x3E, 0xE4, 0x47, 0xED, 0xB9, 0x11, 0x00, 0x02, 0xC3, 0x8B, 0x19, 0xCD, 0x99, 0x1E, 0x60, 0x69, 0xCD, 0x6E, 0x19, 0x2B, 0x22, 0x57, 0x5C, 0xC9, 0xCD, + 0x99, 0x1E, 0x78, 0xB1, 0x20, 0x04, 0xED, 0x4B, 0x78, 0x5C, 0xED, 0x43, 0x76, 0x5C, 0xC9, 0x2A, 0x6E, 0x5C, 0xFD, 0x56, 0x36, 0x18, 0x0C, 0xCD, 0x99, 0x1E, 0x60, 0x69, 0x16, 0x00, 0x7C, 0xFE, 0xF0, 0x30, 0x2C, 0x22, 0x42, 0x5C, 0xFD, 0x72, + 0x0A, 0xC9, 0xCD, 0x85, 0x1E, 0xED, 0x79, 0xC9, 0xCD, 0x85, 0x1E, 0x02, 0xC9, 0xCD, 0xD5, 0x2D, 0x38, 0x15, 0x28, 0x02, 0xED, 0x44, 0xF5, 0xCD, 0x99, 0x1E, 0xF1, 0xC9, 0xCD, 0xD5, 0x2D, 0x18, 0x03, 0xCD, 0xA2, 0x2D, 0x38, 0x01, 0xC8, 0xCF, + 0x0A, 0xCD, 0x67, 0x1E, 0x01, 0x00, 0x00, 0xCD, 0x45, 0x1E, 0x18, 0x03, 0xCD, 0x99, 0x1E, 0x78, 0xB1, 0x20, 0x04, 0xED, 0x4B, 0xB2, 0x5C, 0xC5, 0xED, 0x5B, 0x4B, 0x5C, 0x2A, 0x59, 0x5C, 0x2B, 0xCD, 0xE5, 0x19, 0xCD, 0x6B, 0x0D, 0x2A, 0x65, + 0x5C, 0x11, 0x32, 0x00, 0x19, 0xD1, 0xED, 0x52, 0x30, 0x08, 0x2A, 0xB4, 0x5C, 0xA7, 0xED, 0x52, 0x30, 0x02, 0xCF, 0x15, 0xEB, 0x22, 0xB2, 0x5C, 0xD1, 0xC1, 0x36, 0x3E, 0x2B, 0xF9, 0xC5, 0xED, 0x73, 0x3D, 0x5C, 0xEB, 0xE9, 0xD1, 0xFD, 0x66, + 0x0D, 0x24, 0xE3, 0x33, 0xED, 0x4B, 0x45, 0x5C, 0xC5, 0xE5, 0xED, 0x73, 0x3D, 0x5C, 0xD5, 0xCD, 0x67, 0x1E, 0x01, 0x14, 0x00, 0x2A, 0x65, 0x5C, 0x09, 0x38, 0x0A, 0xEB, 0x21, 0x50, 0x00, 0x19, 0x38, 0x03, 0xED, 0x72, 0xD8, 0x2E, 0x03, 0xC3, + 0x55, 0x00, 0x01, 0x00, 0x00, 0xCD, 0x05, 0x1F, 0x44, 0x4D, 0xC9, 0xC1, 0xE1, 0xD1, 0x7A, 0xFE, 0x3E, 0x28, 0x0B, 0x3B, 0xE3, 0xEB, 0xED, 0x73, 0x3D, 0x5C, 0xC5, 0xC3, 0x73, 0x1E, 0xD5, 0xE5, 0xCF, 0x06, 0xCD, 0x99, 0x1E, 0x76, 0x0B, 0x78, + 0xB1, 0x28, 0x0C, 0x78, 0xA1, 0x3C, 0x20, 0x01, 0x03, 0xFD, 0xCB, 0x01, 0x6E, 0x28, 0xEE, 0xFD, 0xCB, 0x01, 0xAE, 0xC9, 0x3E, 0x7F, 0xDB, 0xFE, 0x1F, 0xD8, 0x3E, 0xFE, 0xDB, 0xFE, 0x1F, 0xC9, 0xCD, 0x30, 0x25, 0x28, 0x05, 0x3E, 0xCE, 0xC3, + 0x39, 0x1E, 0xFD, 0xCB, 0x01, 0xF6, 0xCD, 0x8D, 0x2C, 0x30, 0x16, 0xE7, 0xFE, 0x24, 0x20, 0x05, 0xFD, 0xCB, 0x01, 0xB6, 0xE7, 0xFE, 0x28, 0x20, 0x3C, 0xE7, 0xFE, 0x29, 0x28, 0x20, 0xCD, 0x8D, 0x2C, 0xD2, 0x8A, 0x1C, 0xEB, 0xE7, 0xFE, 0x24, + 0x20, 0x02, 0xEB, 0xE7, 0xEB, 0x01, 0x06, 0x00, 0xCD, 0x55, 0x16, 0x23, 0x23, 0x36, 0x0E, 0xFE, 0x2C, 0x20, 0x03, 0xE7, 0x18, 0xE0, 0xFE, 0x29, 0x20, 0x13, 0xE7, 0xFE, 0x3D, 0x20, 0x0E, 0xE7, 0x3A, 0x3B, 0x5C, 0xF5, 0xCD, 0xFB, 0x24, 0xF1, + 0xFD, 0xAE, 0x01, 0xE6, 0x40, 0xC2, 0x8A, 0x1C, 0xCD, 0xEE, 0x1B, 0xCD, 0x30, 0x25, 0xE1, 0xC8, 0xE9, 0x3E, 0x03, 0x18, 0x02, 0x3E, 0x02, 0xCD, 0x30, 0x25, 0xC4, 0x01, 0x16, 0xCD, 0x4D, 0x0D, 0xCD, 0xDF, 0x1F, 0xCD, 0xEE, 0x1B, 0xC9, 0xDF, + 0xCD, 0x45, 0x20, 0x28, 0x0D, 0xCD, 0x4E, 0x20, 0x28, 0xFB, 0xCD, 0xFC, 0x1F, 0xCD, 0x4E, 0x20, 0x28, 0xF3, 0xFE, 0x29, 0xC8, 0xCD, 0xC3, 0x1F, 0x3E, 0x0D, 0xD7, 0xC9, 0xDF, 0xFE, 0xAC, 0x20, 0x0D, 0xCD, 0x79, 0x1C, 0xCD, 0xC3, 0x1F, 0xCD, + 0x07, 0x23, 0x3E, 0x16, 0x18, 0x10, 0xFE, 0xAD, 0x20, 0x12, 0xE7, 0xCD, 0x82, 0x1C, 0xCD, 0xC3, 0x1F, 0xCD, 0x99, 0x1E, 0x3E, 0x17, 0xD7, 0x79, 0xD7, 0x78, 0xD7, 0xC9, 0xCD, 0xF2, 0x21, 0xD0, 0xCD, 0x70, 0x20, 0xD0, 0xCD, 0xFB, 0x24, 0xCD, + 0xC3, 0x1F, 0xFD, 0xCB, 0x01, 0x76, 0xCC, 0xF1, 0x2B, 0xC2, 0xE3, 0x2D, 0x78, 0xB1, 0x0B, 0xC8, 0x1A, 0x13, 0xD7, 0x18, 0xF7, 0xFE, 0x29, 0xC8, 0xFE, 0x0D, 0xC8, 0xFE, 0x3A, 0xC9, 0xDF, 0xFE, 0x3B, 0x28, 0x14, 0xFE, 0x2C, 0x20, 0x0A, 0xCD, + 0x30, 0x25, 0x28, 0x0B, 0x3E, 0x06, 0xD7, 0x18, 0x06, 0xFE, 0x27, 0xC0, 0xCD, 0xF5, 0x1F, 0xE7, 0xCD, 0x45, 0x20, 0x20, 0x01, 0xC1, 0xBF, 0xC9, 0xFE, 0x23, 0x37, 0xC0, 0xE7, 0xCD, 0x82, 0x1C, 0xA7, 0xCD, 0xC3, 0x1F, 0xCD, 0x94, 0x1E, 0xFE, + 0x10, 0xD2, 0x0E, 0x16, 0xCD, 0x01, 0x16, 0xA7, 0xC9, 0xCD, 0x30, 0x25, 0x28, 0x08, 0x3E, 0x01, 0xCD, 0x01, 0x16, 0xCD, 0x6E, 0x0D, 0xFD, 0x36, 0x02, 0x01, 0xCD, 0xC1, 0x20, 0xCD, 0xEE, 0x1B, 0xED, 0x4B, 0x88, 0x5C, 0x3A, 0x6B, 0x5C, 0xB8, + 0x38, 0x03, 0x0E, 0x21, 0x47, 0xED, 0x43, 0x88, 0x5C, 0x3E, 0x19, 0x90, 0x32, 0x8C, 0x5C, 0xFD, 0xCB, 0x02, 0x86, 0xCD, 0xD9, 0x0D, 0xC3, 0x6E, 0x0D, 0xCD, 0x4E, 0x20, 0x28, 0xFB, 0xFE, 0x28, 0x20, 0x0E, 0xE7, 0xCD, 0xDF, 0x1F, 0xDF, 0xFE, + 0x29, 0xC2, 0x8A, 0x1C, 0xE7, 0xC3, 0xB2, 0x21, 0xFE, 0xCA, 0x20, 0x11, 0xE7, 0xCD, 0x1F, 0x1C, 0xFD, 0xCB, 0x37, 0xFE, 0xFD, 0xCB, 0x01, 0x76, 0xC2, 0x8A, 0x1C, 0x18, 0x0D, 0xCD, 0x8D, 0x2C, 0xD2, 0xAF, 0x21, 0xCD, 0x1F, 0x1C, 0xFD, 0xCB, + 0x37, 0xBE, 0xCD, 0x30, 0x25, 0xCA, 0xB2, 0x21, 0xCD, 0xBF, 0x16, 0x21, 0x71, 0x5C, 0xCB, 0xB6, 0xCB, 0xEE, 0x01, 0x01, 0x00, 0xCB, 0x7E, 0x20, 0x0B, 0x3A, 0x3B, 0x5C, 0xE6, 0x40, 0x20, 0x02, 0x0E, 0x03, 0xB6, 0x77, 0xF7, 0x36, 0x0D, 0x79, + 0x0F, 0x0F, 0x30, 0x05, 0x3E, 0x22, 0x12, 0x2B, 0x77, 0x22, 0x5B, 0x5C, 0xFD, 0xCB, 0x37, 0x7E, 0x20, 0x2C, 0x2A, 0x5D, 0x5C, 0xE5, 0x2A, 0x3D, 0x5C, 0xE5, 0x21, 0x3A, 0x21, 0xE5, 0xFD, 0xCB, 0x30, 0x66, 0x28, 0x04, 0xED, 0x73, 0x3D, 0x5C, + 0x2A, 0x61, 0x5C, 0xCD, 0xA7, 0x11, 0xFD, 0x36, 0x00, 0xFF, 0xCD, 0x2C, 0x0F, 0xFD, 0xCB, 0x01, 0xBE, 0xCD, 0xB9, 0x21, 0x18, 0x03, 0xCD, 0x2C, 0x0F, 0xFD, 0x36, 0x22, 0x00, 0xCD, 0xD6, 0x21, 0x20, 0x0A, 0xCD, 0x1D, 0x11, 0xED, 0x4B, 0x82, + 0x5C, 0xCD, 0xD9, 0x0D, 0x21, 0x71, 0x5C, 0xCB, 0xAE, 0xCB, 0x7E, 0xCB, 0xBE, 0x20, 0x1C, 0xE1, 0xE1, 0x22, 0x3D, 0x5C, 0xE1, 0x22, 0x5F, 0x5C, 0xFD, 0xCB, 0x01, 0xFE, 0xCD, 0xB9, 0x21, 0x2A, 0x5F, 0x5C, 0xFD, 0x36, 0x26, 0x00, 0x22, 0x5D, + 0x5C, 0x18, 0x17, 0x2A, 0x63, 0x5C, 0xED, 0x5B, 0x61, 0x5C, 0x37, 0xED, 0x52, 0x44, 0x4D, 0xCD, 0xB2, 0x2A, 0xCD, 0xFF, 0x2A, 0x18, 0x03, 0xCD, 0xFC, 0x1F, 0xCD, 0x4E, 0x20, 0xCA, 0xC1, 0x20, 0xC9, 0x2A, 0x61, 0x5C, 0x22, 0x5D, 0x5C, 0xDF, + 0xFE, 0xE2, 0x28, 0x0C, 0x3A, 0x71, 0x5C, 0xCD, 0x59, 0x1C, 0xDF, 0xFE, 0x0D, 0xC8, 0xCF, 0x0B, 0xCD, 0x30, 0x25, 0xC8, 0xCF, 0x10, 0x2A, 0x51, 0x5C, 0x23, 0x23, 0x23, 0x23, 0x7E, 0xFE, 0x4B, 0xC9, 0xE7, 0xCD, 0xF2, 0x21, 0xD8, 0xDF, 0xFE, + 0x2C, 0x28, 0xF6, 0xFE, 0x3B, 0x28, 0xF2, 0xC3, 0x8A, 0x1C, 0xFE, 0xD9, 0xD8, 0xFE, 0xDF, 0x3F, 0xD8, 0xF5, 0xE7, 0xF1, 0xD6, 0xC9, 0xF5, 0xCD, 0x82, 0x1C, 0xF1, 0xA7, 0xCD, 0xC3, 0x1F, 0xF5, 0xCD, 0x94, 0x1E, 0x57, 0xF1, 0xD7, 0x7A, 0xD7, + 0xC9, 0xD6, 0x11, 0xCE, 0x00, 0x28, 0x1D, 0xD6, 0x02, 0xCE, 0x00, 0x28, 0x56, 0xFE, 0x01, 0x7A, 0x06, 0x01, 0x20, 0x04, 0x07, 0x07, 0x06, 0x04, 0x4F, 0x7A, 0xFE, 0x02, 0x30, 0x16, 0x79, 0x21, 0x91, 0x5C, 0x18, 0x38, 0x7A, 0x06, 0x07, 0x38, + 0x05, 0x07, 0x07, 0x07, 0x06, 0x38, 0x4F, 0x7A, 0xFE, 0x0A, 0x38, 0x02, 0xCF, 0x13, 0x21, 0x8F, 0x5C, 0xFE, 0x08, 0x38, 0x0B, 0x7E, 0x28, 0x07, 0xB0, 0x2F, 0xE6, 0x24, 0x28, 0x01, 0x78, 0x4F, 0x79, 0xCD, 0x6C, 0x22, 0x3E, 0x07, 0xBA, 0x9F, + 0xCD, 0x6C, 0x22, 0x07, 0x07, 0xE6, 0x50, 0x47, 0x3E, 0x08, 0xBA, 0x9F, 0xAE, 0xA0, 0xAE, 0x77, 0x23, 0x78, 0xC9, 0x9F, 0x7A, 0x0F, 0x06, 0x80, 0x20, 0x03, 0x0F, 0x06, 0x40, 0x4F, 0x7A, 0xFE, 0x08, 0x28, 0x04, 0xFE, 0x02, 0x30, 0xBD, 0x79, + 0x21, 0x8F, 0x5C, 0xCD, 0x6C, 0x22, 0x79, 0x0F, 0x0F, 0x0F, 0x18, 0xD8, 0xCD, 0x94, 0x1E, 0xFE, 0x08, 0x30, 0xA9, 0xD3, 0xFE, 0x07, 0x07, 0x07, 0xCB, 0x6F, 0x20, 0x02, 0xEE, 0x07, 0x32, 0x48, 0x5C, 0xC9, 0x3E, 0xAF, 0x90, 0xDA, 0xF9, 0x24, + 0x47, 0xA7, 0x1F, 0x37, 0x1F, 0xA7, 0x1F, 0xA8, 0xE6, 0xF8, 0xA8, 0x67, 0x79, 0x07, 0x07, 0x07, 0xA8, 0xE6, 0xC7, 0xA8, 0x07, 0x07, 0x6F, 0x79, 0xE6, 0x07, 0xC9, 0xCD, 0x07, 0x23, 0xCD, 0xAA, 0x22, 0x47, 0x04, 0x7E, 0x07, 0x10, 0xFD, 0xE6, + 0x01, 0xC3, 0x28, 0x2D, 0xCD, 0x07, 0x23, 0xCD, 0xE5, 0x22, 0xC3, 0x4D, 0x0D, 0xED, 0x43, 0x7D, 0x5C, 0xCD, 0xAA, 0x22, 0x47, 0x04, 0x3E, 0xFE, 0x0F, 0x10, 0xFD, 0x47, 0x7E, 0xFD, 0x4E, 0x57, 0xCB, 0x41, 0x20, 0x01, 0xA0, 0xCB, 0x51, 0x20, + 0x02, 0xA8, 0x2F, 0x77, 0xC3, 0xDB, 0x0B, 0xCD, 0x14, 0x23, 0x47, 0xC5, 0xCD, 0x14, 0x23, 0x59, 0xC1, 0x51, 0x4F, 0xC9, 0xCD, 0xD5, 0x2D, 0xDA, 0xF9, 0x24, 0x0E, 0x01, 0xC8, 0x0E, 0xFF, 0xC9, 0xDF, 0xFE, 0x2C, 0xC2, 0x8A, 0x1C, 0xE7, 0xCD, + 0x82, 0x1C, 0xCD, 0xEE, 0x1B, 0xEF, 0x2A, 0x3D, 0x38, 0x7E, 0xFE, 0x81, 0x30, 0x05, 0xEF, 0x02, 0x38, 0x18, 0xA1, 0xEF, 0xA3, 0x38, 0x36, 0x83, 0xEF, 0xC5, 0x02, 0x38, 0xCD, 0x7D, 0x24, 0xC5, 0xEF, 0x31, 0xE1, 0x04, 0x38, 0x7E, 0xFE, 0x80, + 0x30, 0x08, 0xEF, 0x02, 0x02, 0x38, 0xC1, 0xC3, 0xDC, 0x22, 0xEF, 0xC2, 0x01, 0xC0, 0x02, 0x03, 0x01, 0xE0, 0x0F, 0xC0, 0x01, 0x31, 0xE0, 0x01, 0x31, 0xE0, 0xA0, 0xC1, 0x02, 0x38, 0xFD, 0x34, 0x62, 0xCD, 0x94, 0x1E, 0x6F, 0xE5, 0xCD, 0x94, + 0x1E, 0xE1, 0x67, 0x22, 0x7D, 0x5C, 0xC1, 0xC3, 0x20, 0x24, 0xDF, 0xFE, 0x2C, 0x28, 0x06, 0xCD, 0xEE, 0x1B, 0xC3, 0x77, 0x24, 0xE7, 0xCD, 0x82, 0x1C, 0xCD, 0xEE, 0x1B, 0xEF, 0xC5, 0xA2, 0x04, 0x1F, 0x31, 0x30, 0x30, 0x00, 0x06, 0x02, 0x38, + 0xC3, 0x77, 0x24, 0xC0, 0x02, 0xC1, 0x02, 0x31, 0x2A, 0xE1, 0x01, 0xE1, 0x2A, 0x0F, 0xE0, 0x05, 0x2A, 0xE0, 0x01, 0x3D, 0x38, 0x7E, 0xFE, 0x81, 0x30, 0x07, 0xEF, 0x02, 0x02, 0x38, 0xC3, 0x77, 0x24, 0xCD, 0x7D, 0x24, 0xC5, 0xEF, 0x02, 0xE1, + 0x01, 0x05, 0xC1, 0x02, 0x01, 0x31, 0xE1, 0x04, 0xC2, 0x02, 0x01, 0x31, 0xE1, 0x04, 0xE2, 0xE5, 0xE0, 0x03, 0xA2, 0x04, 0x31, 0x1F, 0xC5, 0x02, 0x20, 0xC0, 0x02, 0xC2, 0x02, 0xC1, 0xE5, 0x04, 0xE0, 0xE2, 0x04, 0x0F, 0xE1, 0x01, 0xC1, 0x02, + 0xE0, 0x04, 0xE2, 0xE5, 0x04, 0x03, 0xC2, 0x2A, 0xE1, 0x2A, 0x0F, 0x02, 0x38, 0x1A, 0xFE, 0x81, 0xC1, 0xDA, 0x77, 0x24, 0xC5, 0xEF, 0x01, 0x38, 0x3A, 0x7D, 0x5C, 0xCD, 0x28, 0x2D, 0xEF, 0xC0, 0x0F, 0x01, 0x38, 0x3A, 0x7E, 0x5C, 0xCD, 0x28, + 0x2D, 0xEF, 0xC5, 0x0F, 0xE0, 0xE5, 0x38, 0xC1, 0x05, 0x28, 0x3C, 0x18, 0x14, 0xEF, 0xE1, 0x31, 0xE3, 0x04, 0xE2, 0xE4, 0x04, 0x03, 0xC1, 0x02, 0xE4, 0x04, 0xE2, 0xE3, 0x04, 0x0F, 0xC2, 0x02, 0x38, 0xC5, 0xEF, 0xC0, 0x02, 0xE1, 0x0F, 0x31, + 0x38, 0x3A, 0x7D, 0x5C, 0xCD, 0x28, 0x2D, 0xEF, 0x03, 0xE0, 0xE2, 0x0F, 0xC0, 0x01, 0xE0, 0x38, 0x3A, 0x7E, 0x5C, 0xCD, 0x28, 0x2D, 0xEF, 0x03, 0x38, 0xCD, 0xB7, 0x24, 0xC1, 0x10, 0xC6, 0xEF, 0x02, 0x02, 0x01, 0x38, 0x3A, 0x7D, 0x5C, 0xCD, + 0x28, 0x2D, 0xEF, 0x03, 0x01, 0x38, 0x3A, 0x7E, 0x5C, 0xCD, 0x28, 0x2D, 0xEF, 0x03, 0x38, 0xCD, 0xB7, 0x24, 0xC3, 0x4D, 0x0D, 0xEF, 0x31, 0x28, 0x34, 0x32, 0x00, 0x01, 0x05, 0xE5, 0x01, 0x05, 0x2A, 0x38, 0xCD, 0xD5, 0x2D, 0x38, 0x06, 0xE6, + 0xFC, 0xC6, 0x04, 0x30, 0x02, 0x3E, 0xFC, 0xF5, 0xCD, 0x28, 0x2D, 0xEF, 0xE5, 0x01, 0x05, 0x31, 0x1F, 0xC4, 0x02, 0x31, 0xA2, 0x04, 0x1F, 0xC1, 0x01, 0xC0, 0x02, 0x31, 0x04, 0x31, 0x0F, 0xA1, 0x03, 0x1B, 0xC3, 0x02, 0x38, 0xC1, 0xC9, 0xCD, + 0x07, 0x23, 0x79, 0xB8, 0x30, 0x06, 0x69, 0xD5, 0xAF, 0x5F, 0x18, 0x07, 0xB1, 0xC8, 0x68, 0x41, 0xD5, 0x16, 0x00, 0x60, 0x78, 0x1F, 0x85, 0x38, 0x03, 0xBC, 0x38, 0x07, 0x94, 0x4F, 0xD9, 0xC1, 0xC5, 0x18, 0x04, 0x4F, 0xD5, 0xD9, 0xC1, 0x2A, + 0x7D, 0x5C, 0x78, 0x84, 0x47, 0x79, 0x3C, 0x85, 0x38, 0x0D, 0x28, 0x0D, 0x3D, 0x4F, 0xCD, 0xE5, 0x22, 0xD9, 0x79, 0x10, 0xD9, 0xD1, 0xC9, 0x28, 0xF3, 0xCF, 0x0A, 0xDF, 0x06, 0x00, 0xC5, 0x4F, 0x21, 0x96, 0x25, 0xCD, 0xDC, 0x16, 0x79, 0xD2, + 0x84, 0x26, 0x06, 0x00, 0x4E, 0x09, 0xE9, 0xCD, 0x74, 0x00, 0x03, 0xFE, 0x0D, 0xCA, 0x8A, 0x1C, 0xFE, 0x22, 0x20, 0xF3, 0xCD, 0x74, 0x00, 0xFE, 0x22, 0xC9, 0xE7, 0xFE, 0x28, 0x20, 0x06, 0xCD, 0x79, 0x1C, 0xDF, 0xFE, 0x29, 0xC2, 0x8A, 0x1C, + 0xFD, 0xCB, 0x01, 0x7E, 0xC9, 0xCD, 0x07, 0x23, 0x2A, 0x36, 0x5C, 0x11, 0x00, 0x01, 0x19, 0x79, 0x0F, 0x0F, 0x0F, 0xE6, 0xE0, 0xA8, 0x5F, 0x79, 0xE6, 0x18, 0xEE, 0x40, 0x57, 0x06, 0x60, 0xC5, 0xD5, 0xE5, 0x1A, 0xAE, 0x28, 0x04, 0x3C, 0x20, + 0x1A, 0x3D, 0x4F, 0x06, 0x07, 0x14, 0x23, 0x1A, 0xAE, 0xA9, 0x20, 0x0F, 0x10, 0xF7, 0xC1, 0xC1, 0xC1, 0x3E, 0x80, 0x90, 0x01, 0x01, 0x00, 0xF7, 0x12, 0x18, 0x0A, 0xE1, 0x11, 0x08, 0x00, 0x19, 0xD1, 0xC1, 0x10, 0xD3, 0x48, 0xC3, 0xB2, 0x2A, + 0xCD, 0x07, 0x23, 0x79, 0x0F, 0x0F, 0x0F, 0x4F, 0xE6, 0xE0, 0xA8, 0x6F, 0x79, 0xE6, 0x03, 0xEE, 0x58, 0x67, 0x7E, 0xC3, 0x28, 0x2D, 0x22, 0x1C, 0x28, 0x4F, 0x2E, 0xF2, 0x2B, 0x12, 0xA8, 0x56, 0xA5, 0x57, 0xA7, 0x84, 0xA6, 0x8F, 0xC4, 0xE6, + 0xAA, 0xBF, 0xAB, 0xC7, 0xA9, 0xCE, 0x00, 0xE7, 0xC3, 0xFF, 0x24, 0xDF, 0x23, 0xE5, 0x01, 0x00, 0x00, 0xCD, 0x0F, 0x25, 0x20, 0x1B, 0xCD, 0x0F, 0x25, 0x28, 0xFB, 0xCD, 0x30, 0x25, 0x28, 0x11, 0xF7, 0xE1, 0xD5, 0x7E, 0x23, 0x12, 0x13, 0xFE, + 0x22, 0x20, 0xF8, 0x7E, 0x23, 0xFE, 0x22, 0x28, 0xF2, 0x0B, 0xD1, 0x21, 0x3B, 0x5C, 0xCB, 0xB6, 0xCB, 0x7E, 0xC4, 0xB2, 0x2A, 0xC3, 0x12, 0x27, 0xE7, 0xCD, 0xFB, 0x24, 0xFE, 0x29, 0xC2, 0x8A, 0x1C, 0xE7, 0xC3, 0x12, 0x27, 0xC3, 0xBD, 0x27, + 0xCD, 0x30, 0x25, 0x28, 0x28, 0xED, 0x4B, 0x76, 0x5C, 0xCD, 0x2B, 0x2D, 0xEF, 0xA1, 0x0F, 0x34, 0x37, 0x16, 0x04, 0x34, 0x80, 0x41, 0x00, 0x00, 0x80, 0x32, 0x02, 0xA1, 0x03, 0x31, 0x38, 0xCD, 0xA2, 0x2D, 0xED, 0x43, 0x76, 0x5C, 0x7E, 0xA7, + 0x28, 0x03, 0xD6, 0x10, 0x77, 0x18, 0x09, 0xCD, 0x30, 0x25, 0x28, 0x04, 0xEF, 0xA3, 0x38, 0x34, 0xE7, 0xC3, 0xC3, 0x26, 0x01, 0x5A, 0x10, 0xE7, 0xFE, 0x23, 0xCA, 0x0D, 0x27, 0x21, 0x3B, 0x5C, 0xCB, 0xB6, 0xCB, 0x7E, 0x28, 0x1F, 0xCD, 0x8E, + 0x02, 0x0E, 0x00, 0x20, 0x13, 0xCD, 0x1E, 0x03, 0x30, 0x0E, 0x15, 0x5F, 0xCD, 0x33, 0x03, 0xF5, 0x01, 0x01, 0x00, 0xF7, 0xF1, 0x12, 0x0E, 0x01, 0x06, 0x00, 0xCD, 0xB2, 0x2A, 0xC3, 0x12, 0x27, 0xCD, 0x22, 0x25, 0xC4, 0x35, 0x25, 0xE7, 0xC3, + 0xDB, 0x25, 0xCD, 0x22, 0x25, 0xC4, 0x80, 0x25, 0xE7, 0x18, 0x48, 0xCD, 0x22, 0x25, 0xC4, 0xCB, 0x22, 0xE7, 0x18, 0x3F, 0xCD, 0x88, 0x2C, 0x30, 0x56, 0xFE, 0x41, 0x30, 0x3C, 0xCD, 0x30, 0x25, 0x20, 0x23, 0xCD, 0x9B, 0x2C, 0xDF, 0x01, 0x06, + 0x00, 0xCD, 0x55, 0x16, 0x23, 0x36, 0x0E, 0x23, 0xEB, 0x2A, 0x65, 0x5C, 0x0E, 0x05, 0xA7, 0xED, 0x42, 0x22, 0x65, 0x5C, 0xED, 0xB0, 0xEB, 0x2B, 0xCD, 0x77, 0x00, 0x18, 0x0E, 0xDF, 0x23, 0x7E, 0xFE, 0x0E, 0x20, 0xFA, 0x23, 0xCD, 0xB4, 0x33, + 0x22, 0x5D, 0x5C, 0xFD, 0xCB, 0x01, 0xF6, 0x18, 0x14, 0xCD, 0xB2, 0x28, 0xDA, 0x2E, 0x1C, 0xCC, 0x96, 0x29, 0x3A, 0x3B, 0x5C, 0xFE, 0xC0, 0x38, 0x04, 0x23, 0xCD, 0xB4, 0x33, 0x18, 0x33, 0x01, 0xDB, 0x09, 0xFE, 0x2D, 0x28, 0x27, 0x01, 0x18, + 0x10, 0xFE, 0xAE, 0x28, 0x20, 0xD6, 0xAF, 0xDA, 0x8A, 0x1C, 0x01, 0xF0, 0x04, 0xFE, 0x14, 0x28, 0x14, 0xD2, 0x8A, 0x1C, 0x06, 0x10, 0xC6, 0xDC, 0x4F, 0xFE, 0xDF, 0x30, 0x02, 0xCB, 0xB1, 0xFE, 0xEE, 0x38, 0x02, 0xCB, 0xB9, 0xC5, 0xE7, 0xC3, + 0xFF, 0x24, 0xDF, 0xFE, 0x28, 0x20, 0x0C, 0xFD, 0xCB, 0x01, 0x76, 0x20, 0x17, 0xCD, 0x52, 0x2A, 0xE7, 0x18, 0xF0, 0x06, 0x00, 0x4F, 0x21, 0x95, 0x27, 0xCD, 0xDC, 0x16, 0x30, 0x06, 0x4E, 0x21, 0xED, 0x26, 0x09, 0x46, 0xD1, 0x7A, 0xB8, 0x38, + 0x3A, 0xA7, 0xCA, 0x18, 0x00, 0xC5, 0x21, 0x3B, 0x5C, 0x7B, 0xFE, 0xED, 0x20, 0x06, 0xCB, 0x76, 0x20, 0x02, 0x1E, 0x99, 0xD5, 0xCD, 0x30, 0x25, 0x28, 0x09, 0x7B, 0xE6, 0x3F, 0x47, 0xEF, 0x3B, 0x38, 0x18, 0x09, 0x7B, 0xFD, 0xAE, 0x01, 0xE6, + 0x40, 0xC2, 0x8A, 0x1C, 0xD1, 0x21, 0x3B, 0x5C, 0xCB, 0xF6, 0xCB, 0x7B, 0x20, 0x02, 0xCB, 0xB6, 0xC1, 0x18, 0xC1, 0xD5, 0x79, 0xFD, 0xCB, 0x01, 0x76, 0x20, 0x15, 0xE6, 0x3F, 0xC6, 0x08, 0x4F, 0xFE, 0x10, 0x20, 0x04, 0xCB, 0xF1, 0x18, 0x08, + 0x38, 0xD7, 0xFE, 0x17, 0x28, 0x02, 0xCB, 0xF9, 0xC5, 0xE7, 0xC3, 0xFF, 0x24, 0x2B, 0xCF, 0x2D, 0xC3, 0x2A, 0xC4, 0x2F, 0xC5, 0x5E, 0xC6, 0x3D, 0xCE, 0x3E, 0xCC, 0x3C, 0xCD, 0xC7, 0xC9, 0xC8, 0xCA, 0xC9, 0xCB, 0xC5, 0xC7, 0xC6, 0xC8, 0x00, + 0x06, 0x08, 0x08, 0x0A, 0x02, 0x03, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0xCD, 0x30, 0x25, 0x20, 0x35, 0xE7, 0xCD, 0x8D, 0x2C, 0xD2, 0x8A, 0x1C, 0xE7, 0xFE, 0x24, 0xF5, 0x20, 0x01, 0xE7, 0xFE, 0x28, 0x20, 0x12, 0xE7, 0xFE, 0x29, 0x28, + 0x10, 0xCD, 0xFB, 0x24, 0xDF, 0xFE, 0x2C, 0x20, 0x03, 0xE7, 0x18, 0xF5, 0xFE, 0x29, 0xC2, 0x8A, 0x1C, 0xE7, 0x21, 0x3B, 0x5C, 0xCB, 0xB6, 0xF1, 0x28, 0x02, 0xCB, 0xF6, 0xC3, 0x12, 0x27, 0xE7, 0xE6, 0xDF, 0x47, 0xE7, 0xD6, 0x24, 0x4F, 0x20, + 0x01, 0xE7, 0xE7, 0xE5, 0x2A, 0x53, 0x5C, 0x2B, 0x11, 0xCE, 0x00, 0xC5, 0xCD, 0x86, 0x1D, 0xC1, 0x30, 0x02, 0xCF, 0x18, 0xE5, 0xCD, 0xAB, 0x28, 0xE6, 0xDF, 0xB8, 0x20, 0x08, 0xCD, 0xAB, 0x28, 0xD6, 0x24, 0xB9, 0x28, 0x0C, 0xE1, 0x2B, 0x11, + 0x00, 0x02, 0xC5, 0xCD, 0x8B, 0x19, 0xC1, 0x18, 0xD7, 0xA7, 0xCC, 0xAB, 0x28, 0xD1, 0xD1, 0xED, 0x53, 0x5D, 0x5C, 0xCD, 0xAB, 0x28, 0xE5, 0xFE, 0x29, 0x28, 0x42, 0x23, 0x7E, 0xFE, 0x0E, 0x16, 0x40, 0x28, 0x07, 0x2B, 0xCD, 0xAB, 0x28, 0x23, + 0x16, 0x00, 0x23, 0xE5, 0xD5, 0xCD, 0xFB, 0x24, 0xF1, 0xFD, 0xAE, 0x01, 0xE6, 0x40, 0x20, 0x2B, 0xE1, 0xEB, 0x2A, 0x65, 0x5C, 0x01, 0x05, 0x00, 0xED, 0x42, 0x22, 0x65, 0x5C, 0xED, 0xB0, 0xEB, 0x2B, 0xCD, 0xAB, 0x28, 0xFE, 0x29, 0x28, 0x0D, + 0xE5, 0xDF, 0xFE, 0x2C, 0x20, 0x0D, 0xE7, 0xE1, 0xCD, 0xAB, 0x28, 0x18, 0xBE, 0xE5, 0xDF, 0xFE, 0x29, 0x28, 0x02, 0xCF, 0x19, 0xD1, 0xEB, 0x22, 0x5D, 0x5C, 0x2A, 0x0B, 0x5C, 0xE3, 0x22, 0x0B, 0x5C, 0xD5, 0xE7, 0xE7, 0xCD, 0xFB, 0x24, 0xE1, + 0x22, 0x5D, 0x5C, 0xE1, 0x22, 0x0B, 0x5C, 0xE7, 0xC3, 0x12, 0x27, 0x23, 0x7E, 0xFE, 0x21, 0x38, 0xFA, 0xC9, 0xFD, 0xCB, 0x01, 0xF6, 0xDF, 0xCD, 0x8D, 0x2C, 0xD2, 0x8A, 0x1C, 0xE5, 0xE6, 0x1F, 0x4F, 0xE7, 0xE5, 0xFE, 0x28, 0x28, 0x28, 0xCB, + 0xF1, 0xFE, 0x24, 0x28, 0x11, 0xCB, 0xE9, 0xCD, 0x88, 0x2C, 0x30, 0x0F, 0xCD, 0x88, 0x2C, 0x30, 0x16, 0xCB, 0xB1, 0xE7, 0x18, 0xF6, 0xE7, 0xFD, 0xCB, 0x01, 0xB6, 0x3A, 0x0C, 0x5C, 0xA7, 0x28, 0x06, 0xCD, 0x30, 0x25, 0xC2, 0x51, 0x29, 0x41, + 0xCD, 0x30, 0x25, 0x20, 0x08, 0x79, 0xE6, 0xE0, 0xCB, 0xFF, 0x4F, 0x18, 0x37, 0x2A, 0x4B, 0x5C, 0x7E, 0xE6, 0x7F, 0x28, 0x2D, 0xB9, 0x20, 0x22, 0x17, 0x87, 0xF2, 0x3F, 0x29, 0x38, 0x30, 0xD1, 0xD5, 0xE5, 0x23, 0x1A, 0x13, 0xFE, 0x20, 0x28, + 0xFA, 0xF6, 0x20, 0xBE, 0x28, 0xF4, 0xF6, 0x80, 0xBE, 0x20, 0x06, 0x1A, 0xCD, 0x88, 0x2C, 0x30, 0x15, 0xE1, 0xC5, 0xCD, 0xB8, 0x19, 0xEB, 0xC1, 0x18, 0xCE, 0xCB, 0xF8, 0xD1, 0xDF, 0xFE, 0x28, 0x28, 0x09, 0xCB, 0xE8, 0x18, 0x0D, 0xD1, 0xD1, + 0xD1, 0xE5, 0xDF, 0xCD, 0x88, 0x2C, 0x30, 0x03, 0xE7, 0x18, 0xF8, 0xE1, 0xCB, 0x10, 0xCB, 0x70, 0xC9, 0x2A, 0x0B, 0x5C, 0x7E, 0xFE, 0x29, 0xCA, 0xEF, 0x28, 0x7E, 0xF6, 0x60, 0x47, 0x23, 0x7E, 0xFE, 0x0E, 0x28, 0x07, 0x2B, 0xCD, 0xAB, 0x28, + 0x23, 0xCB, 0xA8, 0x78, 0xB9, 0x28, 0x12, 0x23, 0x23, 0x23, 0x23, 0x23, 0xCD, 0xAB, 0x28, 0xFE, 0x29, 0xCA, 0xEF, 0x28, 0xCD, 0xAB, 0x28, 0x18, 0xD9, 0xCB, 0x69, 0x20, 0x0C, 0x23, 0xED, 0x5B, 0x65, 0x5C, 0xCD, 0xC0, 0x33, 0xEB, 0x22, 0x65, + 0x5C, 0xD1, 0xD1, 0xAF, 0x3C, 0xC9, 0xAF, 0x47, 0xCB, 0x79, 0x20, 0x4B, 0xCB, 0x7E, 0x20, 0x0E, 0x3C, 0x23, 0x4E, 0x23, 0x46, 0x23, 0xEB, 0xCD, 0xB2, 0x2A, 0xDF, 0xC3, 0x49, 0x2A, 0x23, 0x23, 0x23, 0x46, 0xCB, 0x71, 0x28, 0x0A, 0x05, 0x28, + 0xE8, 0xEB, 0xDF, 0xFE, 0x28, 0x20, 0x61, 0xEB, 0xEB, 0x18, 0x24, 0xE5, 0xDF, 0xE1, 0xFE, 0x2C, 0x28, 0x20, 0xCB, 0x79, 0x28, 0x52, 0xCB, 0x71, 0x20, 0x06, 0xFE, 0x29, 0x20, 0x3C, 0xE7, 0xC9, 0xFE, 0x29, 0x28, 0x6C, 0xFE, 0xCC, 0x20, 0x32, + 0xDF, 0x2B, 0x22, 0x5D, 0x5C, 0x18, 0x5E, 0x21, 0x00, 0x00, 0xE5, 0xE7, 0xE1, 0x79, 0xFE, 0xC0, 0x20, 0x09, 0xDF, 0xFE, 0x29, 0x28, 0x51, 0xFE, 0xCC, 0x28, 0xE5, 0xC5, 0xE5, 0xCD, 0xEE, 0x2A, 0xE3, 0xEB, 0xCD, 0xCC, 0x2A, 0x38, 0x19, 0x0B, + 0xCD, 0xF4, 0x2A, 0x09, 0xD1, 0xC1, 0x10, 0xB3, 0xCB, 0x79, 0x20, 0x66, 0xE5, 0xCB, 0x71, 0x20, 0x13, 0x42, 0x4B, 0xDF, 0xFE, 0x29, 0x28, 0x02, 0xCF, 0x02, 0xE7, 0xE1, 0x11, 0x05, 0x00, 0xCD, 0xF4, 0x2A, 0x09, 0xC9, 0xCD, 0xEE, 0x2A, 0xE3, + 0xCD, 0xF4, 0x2A, 0xC1, 0x09, 0x23, 0x42, 0x4B, 0xEB, 0xCD, 0xB1, 0x2A, 0xDF, 0xFE, 0x29, 0x28, 0x07, 0xFE, 0x2C, 0x20, 0xDB, 0xCD, 0x52, 0x2A, 0xE7, 0xFE, 0x28, 0x28, 0xF8, 0xFD, 0xCB, 0x01, 0xB6, 0xC9, 0xCD, 0x30, 0x25, 0xC4, 0xF1, 0x2B, + 0xE7, 0xFE, 0x29, 0x28, 0x50, 0xD5, 0xAF, 0xF5, 0xC5, 0x11, 0x01, 0x00, 0xDF, 0xE1, 0xFE, 0xCC, 0x28, 0x17, 0xF1, 0xCD, 0xCD, 0x2A, 0xF5, 0x50, 0x59, 0xE5, 0xDF, 0xE1, 0xFE, 0xCC, 0x28, 0x09, 0xFE, 0x29, 0xC2, 0x8A, 0x1C, 0x62, 0x6B, 0x18, + 0x13, 0xE5, 0xE7, 0xE1, 0xFE, 0x29, 0x28, 0x0C, 0xF1, 0xCD, 0xCD, 0x2A, 0xF5, 0xDF, 0x60, 0x69, 0xFE, 0x29, 0x20, 0xE6, 0xF1, 0xE3, 0x19, 0x2B, 0xE3, 0xA7, 0xED, 0x52, 0x01, 0x00, 0x00, 0x38, 0x07, 0x23, 0xA7, 0xFA, 0x20, 0x2A, 0x44, 0x4D, + 0xD1, 0xFD, 0xCB, 0x01, 0xB6, 0xCD, 0x30, 0x25, 0xC8, 0xAF, 0xFD, 0xCB, 0x01, 0xB6, 0xC5, 0xCD, 0xA9, 0x33, 0xC1, 0x2A, 0x65, 0x5C, 0x77, 0x23, 0x73, 0x23, 0x72, 0x23, 0x71, 0x23, 0x70, 0x23, 0x22, 0x65, 0x5C, 0xC9, 0xAF, 0xD5, 0xE5, 0xF5, + 0xCD, 0x82, 0x1C, 0xF1, 0xCD, 0x30, 0x25, 0x28, 0x12, 0xF5, 0xCD, 0x99, 0x1E, 0xD1, 0x78, 0xB1, 0x37, 0x28, 0x05, 0xE1, 0xE5, 0xA7, 0xED, 0x42, 0x7A, 0xDE, 0x00, 0xE1, 0xD1, 0xC9, 0xEB, 0x23, 0x5E, 0x23, 0x56, 0xC9, 0xCD, 0x30, 0x25, 0xC8, + 0xCD, 0xA9, 0x30, 0xDA, 0x15, 0x1F, 0xC9, 0x2A, 0x4D, 0x5C, 0xFD, 0xCB, 0x37, 0x4E, 0x28, 0x5E, 0x01, 0x05, 0x00, 0x03, 0x23, 0x7E, 0xFE, 0x20, 0x28, 0xFA, 0x30, 0x0B, 0xFE, 0x10, 0x38, 0x11, 0xFE, 0x16, 0x30, 0x0D, 0x23, 0x18, 0xED, 0xCD, + 0x88, 0x2C, 0x38, 0xE7, 0xFE, 0x24, 0xCA, 0xC0, 0x2B, 0x79, 0x2A, 0x59, 0x5C, 0x2B, 0xCD, 0x55, 0x16, 0x23, 0x23, 0xEB, 0xD5, 0x2A, 0x4D, 0x5C, 0x1B, 0xD6, 0x06, 0x47, 0x28, 0x11, 0x23, 0x7E, 0xFE, 0x21, 0x38, 0xFA, 0xF6, 0x20, 0x13, 0x12, + 0x10, 0xF4, 0xF6, 0x80, 0x12, 0x3E, 0xC0, 0x2A, 0x4D, 0x5C, 0xAE, 0xF6, 0x20, 0xE1, 0xCD, 0xEA, 0x2B, 0xE5, 0xEF, 0x02, 0x38, 0xE1, 0x01, 0x05, 0x00, 0xA7, 0xED, 0x42, 0x18, 0x40, 0xFD, 0xCB, 0x01, 0x76, 0x28, 0x06, 0x11, 0x06, 0x00, 0x19, + 0x18, 0xE7, 0x2A, 0x4D, 0x5C, 0xED, 0x4B, 0x72, 0x5C, 0xFD, 0xCB, 0x37, 0x46, 0x20, 0x30, 0x78, 0xB1, 0xC8, 0xE5, 0xF7, 0xD5, 0xC5, 0x54, 0x5D, 0x23, 0x36, 0x20, 0xED, 0xB8, 0xE5, 0xCD, 0xF1, 0x2B, 0xE1, 0xE3, 0xA7, 0xED, 0x42, 0x09, 0x30, + 0x02, 0x44, 0x4D, 0xE3, 0xEB, 0x78, 0xB1, 0x28, 0x02, 0xED, 0xB0, 0xC1, 0xD1, 0xE1, 0xEB, 0x78, 0xB1, 0xC8, 0xD5, 0xED, 0xB0, 0xE1, 0xC9, 0x2B, 0x2B, 0x2B, 0x7E, 0xE5, 0xC5, 0xCD, 0xC6, 0x2B, 0xC1, 0xE1, 0x03, 0x03, 0x03, 0xC3, 0xE8, 0x19, + 0x3E, 0xDF, 0x2A, 0x4D, 0x5C, 0xA6, 0xF5, 0xCD, 0xF1, 0x2B, 0xEB, 0x09, 0xC5, 0x2B, 0x22, 0x4D, 0x5C, 0x03, 0x03, 0x03, 0x2A, 0x59, 0x5C, 0x2B, 0xCD, 0x55, 0x16, 0x2A, 0x4D, 0x5C, 0xC1, 0xC5, 0x03, 0xED, 0xB8, 0xEB, 0x23, 0xC1, 0x70, 0x2B, + 0x71, 0xF1, 0x2B, 0x77, 0x2A, 0x59, 0x5C, 0x2B, 0xC9, 0x2A, 0x65, 0x5C, 0x2B, 0x46, 0x2B, 0x4E, 0x2B, 0x56, 0x2B, 0x5E, 0x2B, 0x7E, 0x22, 0x65, 0x5C, 0xC9, 0xCD, 0xB2, 0x28, 0xC2, 0x8A, 0x1C, 0xCD, 0x30, 0x25, 0x20, 0x08, 0xCB, 0xB1, 0xCD, + 0x96, 0x29, 0xCD, 0xEE, 0x1B, 0x38, 0x08, 0xC5, 0xCD, 0xB8, 0x19, 0xCD, 0xE8, 0x19, 0xC1, 0xCB, 0xF9, 0x06, 0x00, 0xC5, 0x21, 0x01, 0x00, 0xCB, 0x71, 0x20, 0x02, 0x2E, 0x05, 0xEB, 0xE7, 0x26, 0xFF, 0xCD, 0xCC, 0x2A, 0xDA, 0x20, 0x2A, 0xE1, + 0xC5, 0x24, 0xE5, 0x60, 0x69, 0xCD, 0xF4, 0x2A, 0xEB, 0xDF, 0xFE, 0x2C, 0x28, 0xE8, 0xFE, 0x29, 0x20, 0xBB, 0xE7, 0xC1, 0x79, 0x68, 0x26, 0x00, 0x23, 0x23, 0x29, 0x19, 0xDA, 0x15, 0x1F, 0xD5, 0xC5, 0xE5, 0x44, 0x4D, 0x2A, 0x59, 0x5C, 0x2B, + 0xCD, 0x55, 0x16, 0x23, 0x77, 0xC1, 0x0B, 0x0B, 0x0B, 0x23, 0x71, 0x23, 0x70, 0xC1, 0x78, 0x23, 0x77, 0x62, 0x6B, 0x1B, 0x36, 0x00, 0xCB, 0x71, 0x28, 0x02, 0x36, 0x20, 0xC1, 0xED, 0xB8, 0xC1, 0x70, 0x2B, 0x71, 0x2B, 0x3D, 0x20, 0xF8, 0xC9, + 0xCD, 0x1B, 0x2D, 0x3F, 0xD8, 0xFE, 0x41, 0x3F, 0xD0, 0xFE, 0x5B, 0xD8, 0xFE, 0x61, 0x3F, 0xD0, 0xFE, 0x7B, 0xC9, 0xFE, 0xC4, 0x20, 0x19, 0x11, 0x00, 0x00, 0xE7, 0xD6, 0x31, 0xCE, 0x00, 0x20, 0x0A, 0xEB, 0x3F, 0xED, 0x6A, 0xDA, 0xAD, 0x31, + 0xEB, 0x18, 0xEF, 0x42, 0x4B, 0xC3, 0x2B, 0x2D, 0xFE, 0x2E, 0x28, 0x0F, 0xCD, 0x3B, 0x2D, 0xFE, 0x2E, 0x20, 0x28, 0xE7, 0xCD, 0x1B, 0x2D, 0x38, 0x22, 0x18, 0x0A, 0xE7, 0xCD, 0x1B, 0x2D, 0xDA, 0x8A, 0x1C, 0xEF, 0xA0, 0x38, 0xEF, 0xA1, 0xC0, + 0x02, 0x38, 0xDF, 0xCD, 0x22, 0x2D, 0x38, 0x0B, 0xEF, 0xE0, 0xA4, 0x05, 0xC0, 0x04, 0x0F, 0x38, 0xE7, 0x18, 0xEF, 0xFE, 0x45, 0x28, 0x03, 0xFE, 0x65, 0xC0, 0x06, 0xFF, 0xE7, 0xFE, 0x2B, 0x28, 0x05, 0xFE, 0x2D, 0x20, 0x02, 0x04, 0xE7, 0xCD, + 0x1B, 0x2D, 0x38, 0xCB, 0xC5, 0xCD, 0x3B, 0x2D, 0xCD, 0xD5, 0x2D, 0xC1, 0xDA, 0xAD, 0x31, 0xA7, 0xFA, 0xAD, 0x31, 0x04, 0x28, 0x02, 0xED, 0x44, 0xC3, 0x4F, 0x2D, 0xFE, 0x30, 0xD8, 0xFE, 0x3A, 0x3F, 0xC9, 0xCD, 0x1B, 0x2D, 0xD8, 0xD6, 0x30, + 0x4F, 0x06, 0x00, 0xFD, 0x21, 0x3A, 0x5C, 0xAF, 0x5F, 0x51, 0x48, 0x47, 0xCD, 0xB6, 0x2A, 0xEF, 0x38, 0xA7, 0xC9, 0xF5, 0xEF, 0xA0, 0x38, 0xF1, 0xCD, 0x22, 0x2D, 0xD8, 0xEF, 0x01, 0xA4, 0x04, 0x0F, 0x38, 0xCD, 0x74, 0x00, 0x18, 0xF1, 0x07, + 0x0F, 0x30, 0x02, 0x2F, 0x3C, 0xF5, 0x21, 0x92, 0x5C, 0xCD, 0x0B, 0x35, 0xEF, 0xA4, 0x38, 0xF1, 0xCB, 0x3F, 0x30, 0x0D, 0xF5, 0xEF, 0xC1, 0xE0, 0x00, 0x04, 0x04, 0x33, 0x02, 0x05, 0xE1, 0x38, 0xF1, 0x28, 0x08, 0xF5, 0xEF, 0x31, 0x04, 0x38, + 0xF1, 0x18, 0xE5, 0xEF, 0x02, 0x38, 0xC9, 0x23, 0x4E, 0x23, 0x7E, 0xA9, 0x91, 0x5F, 0x23, 0x7E, 0x89, 0xA9, 0x57, 0xC9, 0x0E, 0x00, 0xE5, 0x36, 0x00, 0x23, 0x71, 0x23, 0x7B, 0xA9, 0x91, 0x77, 0x23, 0x7A, 0x89, 0xA9, 0x77, 0x23, 0x36, 0x00, + 0xE1, 0xC9, 0xEF, 0x38, 0x7E, 0xA7, 0x28, 0x05, 0xEF, 0xA2, 0x0F, 0x27, 0x38, 0xEF, 0x02, 0x38, 0xE5, 0xD5, 0xEB, 0x46, 0xCD, 0x7F, 0x2D, 0xAF, 0x90, 0xCB, 0x79, 0x42, 0x4B, 0x7B, 0xD1, 0xE1, 0xC9, 0x57, 0x17, 0x9F, 0x5F, 0x4F, 0xAF, 0x47, + 0xCD, 0xB6, 0x2A, 0xEF, 0x34, 0xEF, 0x1A, 0x20, 0x9A, 0x85, 0x04, 0x27, 0x38, 0xCD, 0xA2, 0x2D, 0xD8, 0xF5, 0x05, 0x04, 0x28, 0x03, 0xF1, 0x37, 0xC9, 0xF1, 0xC9, 0xEF, 0x31, 0x36, 0x00, 0x0B, 0x31, 0x37, 0x00, 0x0D, 0x02, 0x38, 0x3E, 0x30, + 0xD7, 0xC9, 0x2A, 0x38, 0x3E, 0x2D, 0xD7, 0xEF, 0xA0, 0xC3, 0xC4, 0xC5, 0x02, 0x38, 0xD9, 0xE5, 0xD9, 0xEF, 0x31, 0x27, 0xC2, 0x03, 0xE2, 0x01, 0xC2, 0x02, 0x38, 0x7E, 0xA7, 0x20, 0x47, 0xCD, 0x7F, 0x2D, 0x06, 0x10, 0x7A, 0xA7, 0x20, 0x06, + 0xB3, 0x28, 0x09, 0x53, 0x06, 0x08, 0xD5, 0xD9, 0xD1, 0xD9, 0x18, 0x57, 0xEF, 0xE2, 0x38, 0x7E, 0xD6, 0x7E, 0xCD, 0xC1, 0x2D, 0x57, 0x3A, 0xAC, 0x5C, 0x92, 0x32, 0xAC, 0x5C, 0x7A, 0xCD, 0x4F, 0x2D, 0xEF, 0x31, 0x27, 0xC1, 0x03, 0xE1, 0x38, + 0xCD, 0xD5, 0x2D, 0xE5, 0x32, 0xA1, 0x5C, 0x3D, 0x17, 0x9F, 0x3C, 0x21, 0xAB, 0x5C, 0x77, 0x23, 0x86, 0x77, 0xE1, 0xC3, 0xCF, 0x2E, 0xD6, 0x80, 0xFE, 0x1C, 0x38, 0x13, 0xCD, 0xC1, 0x2D, 0xD6, 0x07, 0x47, 0x21, 0xAC, 0x5C, 0x86, 0x77, 0x78, + 0xED, 0x44, 0xCD, 0x4F, 0x2D, 0x18, 0x92, 0xEB, 0xCD, 0xBA, 0x2F, 0xD9, 0xCB, 0xFA, 0x7D, 0xD9, 0xD6, 0x80, 0x47, 0xCB, 0x23, 0xCB, 0x12, 0xD9, 0xCB, 0x13, 0xCB, 0x12, 0xD9, 0x21, 0xAA, 0x5C, 0x0E, 0x05, 0x7E, 0x8F, 0x27, 0x77, 0x2B, 0x0D, + 0x20, 0xF8, 0x10, 0xE7, 0xAF, 0x21, 0xA6, 0x5C, 0x11, 0xA1, 0x5C, 0x06, 0x09, 0xED, 0x6F, 0x0E, 0xFF, 0xED, 0x6F, 0x20, 0x04, 0x0D, 0x0C, 0x20, 0x0A, 0x12, 0x13, 0xFD, 0x34, 0x71, 0xFD, 0x34, 0x72, 0x0E, 0x00, 0xCB, 0x40, 0x28, 0x01, 0x23, + 0x10, 0xE7, 0x3A, 0xAB, 0x5C, 0xD6, 0x09, 0x38, 0x0A, 0xFD, 0x35, 0x71, 0x3E, 0x04, 0xFD, 0xBE, 0x6F, 0x18, 0x41, 0xEF, 0x02, 0xE2, 0x38, 0xEB, 0xCD, 0xBA, 0x2F, 0xD9, 0x3E, 0x80, 0x95, 0x2E, 0x00, 0xCB, 0xFA, 0xD9, 0xCD, 0xDD, 0x2F, 0xFD, + 0x7E, 0x71, 0xFE, 0x08, 0x38, 0x06, 0xD9, 0xCB, 0x12, 0xD9, 0x18, 0x20, 0x01, 0x00, 0x02, 0x7B, 0xCD, 0x8B, 0x2F, 0x5F, 0x7A, 0xCD, 0x8B, 0x2F, 0x57, 0xC5, 0xD9, 0xC1, 0x10, 0xF1, 0x21, 0xA1, 0x5C, 0x79, 0xFD, 0x4E, 0x71, 0x09, 0x77, 0xFD, + 0x34, 0x71, 0x18, 0xD3, 0xF5, 0x21, 0xA1, 0x5C, 0xFD, 0x4E, 0x71, 0x06, 0x00, 0x09, 0x41, 0xF1, 0x2B, 0x7E, 0xCE, 0x00, 0x77, 0xA7, 0x28, 0x05, 0xFE, 0x0A, 0x3F, 0x30, 0x08, 0x10, 0xF1, 0x36, 0x01, 0x04, 0xFD, 0x34, 0x72, 0xFD, 0x70, 0x71, + 0xEF, 0x02, 0x38, 0xD9, 0xE1, 0xD9, 0xED, 0x4B, 0xAB, 0x5C, 0x21, 0xA1, 0x5C, 0x78, 0xFE, 0x09, 0x38, 0x04, 0xFE, 0xFC, 0x38, 0x26, 0xA7, 0xCC, 0xEF, 0x15, 0xAF, 0x90, 0xFA, 0x52, 0x2F, 0x47, 0x18, 0x0C, 0x79, 0xA7, 0x28, 0x03, 0x7E, 0x23, + 0x0D, 0xCD, 0xEF, 0x15, 0x10, 0xF4, 0x79, 0xA7, 0xC8, 0x04, 0x3E, 0x2E, 0xD7, 0x3E, 0x30, 0x10, 0xFB, 0x41, 0x18, 0xE6, 0x50, 0x15, 0x06, 0x01, 0xCD, 0x4A, 0x2F, 0x3E, 0x45, 0xD7, 0x4A, 0x79, 0xA7, 0xF2, 0x83, 0x2F, 0xED, 0x44, 0x4F, 0x3E, + 0x2D, 0x18, 0x02, 0x3E, 0x2B, 0xD7, 0x06, 0x00, 0xC3, 0x1B, 0x1A, 0xD5, 0x6F, 0x26, 0x00, 0x5D, 0x54, 0x29, 0x29, 0x19, 0x29, 0x59, 0x19, 0x4C, 0x7D, 0xD1, 0xC9, 0x7E, 0x36, 0x00, 0xA7, 0xC8, 0x23, 0xCB, 0x7E, 0xCB, 0xFE, 0x2B, 0xC8, 0xC5, + 0x01, 0x05, 0x00, 0x09, 0x41, 0x4F, 0x37, 0x2B, 0x7E, 0x2F, 0xCE, 0x00, 0x77, 0x10, 0xF8, 0x79, 0xC1, 0xC9, 0xE5, 0xF5, 0x4E, 0x23, 0x46, 0x77, 0x23, 0x79, 0x4E, 0xC5, 0x23, 0x4E, 0x23, 0x46, 0xEB, 0x57, 0x5E, 0xD5, 0x23, 0x56, 0x23, 0x5E, + 0xD5, 0xD9, 0xD1, 0xE1, 0xC1, 0xD9, 0x23, 0x56, 0x23, 0x5E, 0xF1, 0xE1, 0xC9, 0xA7, 0xC8, 0xFE, 0x21, 0x30, 0x16, 0xC5, 0x47, 0xD9, 0xCB, 0x2D, 0xCB, 0x1A, 0xCB, 0x1B, 0xD9, 0xCB, 0x1A, 0xCB, 0x1B, 0x10, 0xF2, 0xC1, 0xD0, 0xCD, 0x04, 0x30, + 0xC0, 0xD9, 0xAF, 0x2E, 0x00, 0x57, 0x5D, 0xD9, 0x11, 0x00, 0x00, 0xC9, 0x1C, 0xC0, 0x14, 0xC0, 0xD9, 0x1C, 0x20, 0x01, 0x14, 0xD9, 0xC9, 0xEB, 0xCD, 0x6E, 0x34, 0xEB, 0x1A, 0xB6, 0x20, 0x26, 0xD5, 0x23, 0xE5, 0x23, 0x5E, 0x23, 0x56, 0x23, + 0x23, 0x23, 0x7E, 0x23, 0x4E, 0x23, 0x46, 0xE1, 0xEB, 0x09, 0xEB, 0x8E, 0x0F, 0xCE, 0x00, 0x20, 0x0B, 0x9F, 0x77, 0x23, 0x73, 0x23, 0x72, 0x2B, 0x2B, 0x2B, 0xD1, 0xC9, 0x2B, 0xD1, 0xCD, 0x93, 0x32, 0xD9, 0xE5, 0xD9, 0xD5, 0xE5, 0xCD, 0x9B, + 0x2F, 0x47, 0xEB, 0xCD, 0x9B, 0x2F, 0x4F, 0xB8, 0x30, 0x03, 0x78, 0x41, 0xEB, 0xF5, 0x90, 0xCD, 0xBA, 0x2F, 0xCD, 0xDD, 0x2F, 0xF1, 0xE1, 0x77, 0xE5, 0x68, 0x61, 0x19, 0xD9, 0xEB, 0xED, 0x4A, 0xEB, 0x7C, 0x8D, 0x6F, 0x1F, 0xAD, 0xD9, 0xEB, + 0xE1, 0x1F, 0x30, 0x08, 0x3E, 0x01, 0xCD, 0xDD, 0x2F, 0x34, 0x28, 0x23, 0xD9, 0x7D, 0xE6, 0x80, 0xD9, 0x23, 0x77, 0x2B, 0x28, 0x1F, 0x7B, 0xED, 0x44, 0x3F, 0x5F, 0x7A, 0x2F, 0xCE, 0x00, 0x57, 0xD9, 0x7B, 0x2F, 0xCE, 0x00, 0x5F, 0x7A, 0x2F, + 0xCE, 0x00, 0x30, 0x07, 0x1F, 0xD9, 0x34, 0xCA, 0xAD, 0x31, 0xD9, 0x57, 0xD9, 0xAF, 0xC3, 0x55, 0x31, 0xC5, 0x06, 0x10, 0x7C, 0x4D, 0x21, 0x00, 0x00, 0x29, 0x38, 0x0A, 0xCB, 0x11, 0x17, 0x30, 0x03, 0x19, 0x38, 0x02, 0x10, 0xF3, 0xC1, 0xC9, + 0xCD, 0xE9, 0x34, 0xD8, 0x23, 0xAE, 0xCB, 0xFE, 0x2B, 0xC9, 0x1A, 0xB6, 0x20, 0x22, 0xD5, 0xE5, 0xD5, 0xCD, 0x7F, 0x2D, 0xEB, 0xE3, 0x41, 0xCD, 0x7F, 0x2D, 0x78, 0xA9, 0x4F, 0xE1, 0xCD, 0xA9, 0x30, 0xEB, 0xE1, 0x38, 0x0A, 0x7A, 0xB3, 0x20, + 0x01, 0x4F, 0xCD, 0x8E, 0x2D, 0xD1, 0xC9, 0xD1, 0xCD, 0x93, 0x32, 0xAF, 0xCD, 0xC0, 0x30, 0xD8, 0xD9, 0xE5, 0xD9, 0xD5, 0xEB, 0xCD, 0xC0, 0x30, 0xEB, 0x38, 0x5A, 0xE5, 0xCD, 0xBA, 0x2F, 0x78, 0xA7, 0xED, 0x62, 0xD9, 0xE5, 0xED, 0x62, 0xD9, + 0x06, 0x21, 0x18, 0x11, 0x30, 0x05, 0x19, 0xD9, 0xED, 0x5A, 0xD9, 0xD9, 0xCB, 0x1C, 0xCB, 0x1D, 0xD9, 0xCB, 0x1C, 0xCB, 0x1D, 0xD9, 0xCB, 0x18, 0xCB, 0x19, 0xD9, 0xCB, 0x19, 0x1F, 0x10, 0xE4, 0xEB, 0xD9, 0xEB, 0xD9, 0xC1, 0xE1, 0x78, 0x81, + 0x20, 0x01, 0xA7, 0x3D, 0x3F, 0x17, 0x3F, 0x1F, 0xF2, 0x46, 0x31, 0x30, 0x68, 0xA7, 0x3C, 0x20, 0x08, 0x38, 0x06, 0xD9, 0xCB, 0x7A, 0xD9, 0x20, 0x5C, 0x77, 0xD9, 0x78, 0xD9, 0x30, 0x15, 0x7E, 0xA7, 0x3E, 0x80, 0x28, 0x01, 0xAF, 0xD9, 0xA2, + 0xCD, 0xFB, 0x2F, 0x07, 0x77, 0x38, 0x2E, 0x23, 0x77, 0x2B, 0x18, 0x29, 0x06, 0x20, 0xD9, 0xCB, 0x7A, 0xD9, 0x20, 0x12, 0x07, 0xCB, 0x13, 0xCB, 0x12, 0xD9, 0xCB, 0x13, 0xCB, 0x12, 0xD9, 0x35, 0x28, 0xD7, 0x10, 0xEA, 0x18, 0xD7, 0x17, 0x30, + 0x0C, 0xCD, 0x04, 0x30, 0x20, 0x07, 0xD9, 0x16, 0x80, 0xD9, 0x34, 0x28, 0x18, 0xE5, 0x23, 0xD9, 0xD5, 0xD9, 0xC1, 0x78, 0x17, 0xCB, 0x16, 0x1F, 0x77, 0x23, 0x71, 0x23, 0x72, 0x23, 0x73, 0xE1, 0xD1, 0xD9, 0xE1, 0xD9, 0xC9, 0xCF, 0x05, 0xCD, + 0x93, 0x32, 0xEB, 0xAF, 0xCD, 0xC0, 0x30, 0x38, 0xF4, 0xEB, 0xCD, 0xC0, 0x30, 0xD8, 0xD9, 0xE5, 0xD9, 0xD5, 0xE5, 0xCD, 0xBA, 0x2F, 0xD9, 0xE5, 0x60, 0x69, 0xD9, 0x61, 0x68, 0xAF, 0x06, 0xDF, 0x18, 0x10, 0x17, 0xCB, 0x11, 0xD9, 0xCB, 0x11, + 0xCB, 0x10, 0xD9, 0x29, 0xD9, 0xED, 0x6A, 0xD9, 0x38, 0x10, 0xED, 0x52, 0xD9, 0xED, 0x52, 0xD9, 0x30, 0x0F, 0x19, 0xD9, 0xED, 0x5A, 0xD9, 0xA7, 0x18, 0x08, 0xA7, 0xED, 0x52, 0xD9, 0xED, 0x52, 0xD9, 0x37, 0x04, 0xFA, 0xD2, 0x31, 0xF5, 0x28, + 0xE1, 0x5F, 0x51, 0xD9, 0x59, 0x50, 0xF1, 0xCB, 0x18, 0xF1, 0xCB, 0x18, 0xD9, 0xC1, 0xE1, 0x78, 0x91, 0xC3, 0x3D, 0x31, 0x7E, 0xA7, 0xC8, 0xFE, 0x81, 0x30, 0x06, 0x36, 0x00, 0x3E, 0x20, 0x18, 0x51, 0xFE, 0x91, 0x20, 0x1A, 0x23, 0x23, 0x23, + 0x3E, 0x80, 0xA6, 0x2B, 0xB6, 0x2B, 0x20, 0x03, 0x3E, 0x80, 0xAE, 0x2B, 0x20, 0x36, 0x77, 0x23, 0x36, 0xFF, 0x2B, 0x3E, 0x18, 0x18, 0x33, 0x30, 0x2C, 0xD5, 0x2F, 0xC6, 0x91, 0x23, 0x56, 0x23, 0x5E, 0x2B, 0x2B, 0x0E, 0x00, 0xCB, 0x7A, 0x28, + 0x01, 0x0D, 0xCB, 0xFA, 0x06, 0x08, 0x90, 0x80, 0x38, 0x04, 0x5A, 0x16, 0x00, 0x90, 0x28, 0x07, 0x47, 0xCB, 0x3A, 0xCB, 0x1B, 0x10, 0xFA, 0xCD, 0x8E, 0x2D, 0xD1, 0xC9, 0x7E, 0xD6, 0xA0, 0xF0, 0xED, 0x44, 0xD5, 0xEB, 0x2B, 0x47, 0xCB, 0x38, + 0xCB, 0x38, 0xCB, 0x38, 0x28, 0x05, 0x36, 0x00, 0x2B, 0x10, 0xFB, 0xE6, 0x07, 0x28, 0x09, 0x47, 0x3E, 0xFF, 0xCB, 0x27, 0x10, 0xFC, 0xA6, 0x77, 0xEB, 0xD1, 0xC9, 0xCD, 0x96, 0x32, 0xEB, 0x7E, 0xA7, 0xC0, 0xD5, 0xCD, 0x7F, 0x2D, 0xAF, 0x23, + 0x77, 0x2B, 0x77, 0x06, 0x91, 0x7A, 0xA7, 0x20, 0x08, 0xB3, 0x42, 0x28, 0x10, 0x53, 0x58, 0x06, 0x89, 0xEB, 0x05, 0x29, 0x30, 0xFC, 0xCB, 0x09, 0xCB, 0x1C, 0xCB, 0x1D, 0xEB, 0x2B, 0x73, 0x2B, 0x72, 0x2B, 0x70, 0xD1, 0xC9, 0x00, 0xB0, 0x00, + 0x40, 0xB0, 0x00, 0x01, 0x30, 0x00, 0xF1, 0x49, 0x0F, 0xDA, 0xA2, 0x40, 0xB0, 0x00, 0x0A, 0x8F, 0x36, 0x3C, 0x34, 0xA1, 0x33, 0x0F, 0x30, 0xCA, 0x30, 0xAF, 0x31, 0x51, 0x38, 0x1B, 0x35, 0x24, 0x35, 0x3B, 0x35, 0x3B, 0x35, 0x3B, 0x35, 0x3B, + 0x35, 0x3B, 0x35, 0x3B, 0x35, 0x14, 0x30, 0x2D, 0x35, 0x3B, 0x35, 0x3B, 0x35, 0x3B, 0x35, 0x3B, 0x35, 0x3B, 0x35, 0x3B, 0x35, 0x9C, 0x35, 0xDE, 0x35, 0xBC, 0x34, 0x45, 0x36, 0x6E, 0x34, 0x69, 0x36, 0xDE, 0x35, 0x74, 0x36, 0xB5, 0x37, 0xAA, + 0x37, 0xDA, 0x37, 0x33, 0x38, 0x43, 0x38, 0xE2, 0x37, 0x13, 0x37, 0xC4, 0x36, 0xAF, 0x36, 0x4A, 0x38, 0x92, 0x34, 0x6A, 0x34, 0xAC, 0x34, 0xA5, 0x34, 0xB3, 0x34, 0x1F, 0x36, 0xC9, 0x35, 0x01, 0x35, 0xC0, 0x33, 0xA0, 0x36, 0x86, 0x36, 0xC6, + 0x33, 0x7A, 0x36, 0x06, 0x35, 0xF9, 0x34, 0x9B, 0x36, 0x83, 0x37, 0x14, 0x32, 0xA2, 0x33, 0x4F, 0x2D, 0x97, 0x32, 0x49, 0x34, 0x1B, 0x34, 0x2D, 0x34, 0x0F, 0x34, 0xCD, 0xBF, 0x35, 0x78, 0x32, 0x67, 0x5C, 0xD9, 0xE3, 0xD9, 0xED, 0x53, 0x65, + 0x5C, 0xD9, 0x7E, 0x23, 0xE5, 0xA7, 0xF2, 0x80, 0x33, 0x57, 0xE6, 0x60, 0x0F, 0x0F, 0x0F, 0x0F, 0xC6, 0x7C, 0x6F, 0x7A, 0xE6, 0x1F, 0x18, 0x0E, 0xFE, 0x18, 0x30, 0x08, 0xD9, 0x01, 0xFB, 0xFF, 0x54, 0x5D, 0x09, 0xD9, 0x07, 0x6F, 0x11, 0xD7, + 0x32, 0x26, 0x00, 0x19, 0x5E, 0x23, 0x56, 0x21, 0x65, 0x33, 0xE3, 0xD5, 0xD9, 0xED, 0x4B, 0x66, 0x5C, 0xC9, 0xF1, 0x3A, 0x67, 0x5C, 0xD9, 0x18, 0xC3, 0xD5, 0xE5, 0x01, 0x05, 0x00, 0xCD, 0x05, 0x1F, 0xE1, 0xD1, 0xC9, 0xED, 0x5B, 0x65, 0x5C, + 0xCD, 0xC0, 0x33, 0xED, 0x53, 0x65, 0x5C, 0xC9, 0xCD, 0xA9, 0x33, 0xED, 0xB0, 0xC9, 0x62, 0x6B, 0xCD, 0xA9, 0x33, 0xD9, 0xE5, 0xD9, 0xE3, 0xC5, 0x7E, 0xE6, 0xC0, 0x07, 0x07, 0x4F, 0x0C, 0x7E, 0xE6, 0x3F, 0x20, 0x02, 0x23, 0x7E, 0xC6, 0x50, + 0x12, 0x3E, 0x05, 0x91, 0x23, 0x13, 0x06, 0x00, 0xED, 0xB0, 0xC1, 0xE3, 0xD9, 0xE1, 0xD9, 0x47, 0xAF, 0x05, 0xC8, 0x12, 0x13, 0x18, 0xFA, 0xA7, 0xC8, 0xF5, 0xD5, 0x11, 0x00, 0x00, 0xCD, 0xC8, 0x33, 0xD1, 0xF1, 0x3D, 0x18, 0xF2, 0x4F, 0x07, + 0x07, 0x81, 0x4F, 0x06, 0x00, 0x09, 0xC9, 0xD5, 0x2A, 0x68, 0x5C, 0xCD, 0x06, 0x34, 0xCD, 0xC0, 0x33, 0xE1, 0xC9, 0x62, 0x6B, 0xD9, 0xE5, 0x21, 0xC5, 0x32, 0xD9, 0xCD, 0xF7, 0x33, 0xCD, 0xC8, 0x33, 0xD9, 0xE1, 0xD9, 0xC9, 0xE5, 0xEB, 0x2A, + 0x68, 0x5C, 0xCD, 0x06, 0x34, 0xEB, 0xCD, 0xC0, 0x33, 0xEB, 0xE1, 0xC9, 0x06, 0x05, 0x1A, 0x4E, 0xEB, 0x12, 0x71, 0x23, 0x13, 0x10, 0xF7, 0xEB, 0xC9, 0x47, 0xCD, 0x5E, 0x33, 0x31, 0x0F, 0xC0, 0x02, 0xA0, 0xC2, 0x31, 0xE0, 0x04, 0xE2, 0xC1, + 0x03, 0x38, 0xCD, 0xC6, 0x33, 0xCD, 0x62, 0x33, 0x0F, 0x01, 0xC2, 0x02, 0x35, 0xEE, 0xE1, 0x03, 0x38, 0xC9, 0x06, 0xFF, 0x18, 0x06, 0xCD, 0xE9, 0x34, 0xD8, 0x06, 0x00, 0x7E, 0xA7, 0x28, 0x0B, 0x23, 0x78, 0xE6, 0x80, 0xB6, 0x17, 0x3F, 0x1F, + 0x77, 0x2B, 0xC9, 0xD5, 0xE5, 0xCD, 0x7F, 0x2D, 0xE1, 0x78, 0xB1, 0x2F, 0x4F, 0xCD, 0x8E, 0x2D, 0xD1, 0xC9, 0xCD, 0xE9, 0x34, 0xD8, 0xD5, 0x11, 0x01, 0x00, 0x23, 0xCB, 0x16, 0x2B, 0x9F, 0x4F, 0xCD, 0x8E, 0x2D, 0xD1, 0xC9, 0xCD, 0x99, 0x1E, + 0xED, 0x78, 0x18, 0x04, 0xCD, 0x99, 0x1E, 0x0A, 0xC3, 0x28, 0x2D, 0xCD, 0x99, 0x1E, 0x21, 0x2B, 0x2D, 0xE5, 0xC5, 0xC9, 0xCD, 0xF1, 0x2B, 0x0B, 0x78, 0xB1, 0x20, 0x23, 0x1A, 0xCD, 0x8D, 0x2C, 0x38, 0x09, 0xD6, 0x90, 0x38, 0x19, 0xFE, 0x15, + 0x30, 0x15, 0x3C, 0x3D, 0x87, 0x87, 0x87, 0xFE, 0xA8, 0x30, 0x0C, 0xED, 0x4B, 0x7B, 0x5C, 0x81, 0x4F, 0x30, 0x01, 0x04, 0xC3, 0x2B, 0x2D, 0xCF, 0x09, 0xE5, 0xC5, 0x47, 0x7E, 0x23, 0xB6, 0x23, 0xB6, 0x23, 0xB6, 0x78, 0xC1, 0xE1, 0xC0, 0x37, + 0xC9, 0xCD, 0xE9, 0x34, 0xD8, 0x3E, 0xFF, 0x18, 0x06, 0xCD, 0xE9, 0x34, 0x18, 0x05, 0xAF, 0x23, 0xAE, 0x2B, 0x07, 0xE5, 0x3E, 0x00, 0x77, 0x23, 0x77, 0x23, 0x17, 0x77, 0x1F, 0x23, 0x77, 0x23, 0x77, 0xE1, 0xC9, 0xEB, 0xCD, 0xE9, 0x34, 0xEB, + 0xD8, 0x37, 0x18, 0xE7, 0xEB, 0xCD, 0xE9, 0x34, 0xEB, 0xD0, 0xA7, 0x18, 0xDE, 0xEB, 0xCD, 0xE9, 0x34, 0xEB, 0xD0, 0xD5, 0x1B, 0xAF, 0x12, 0x1B, 0x12, 0xD1, 0xC9, 0x78, 0xD6, 0x08, 0xCB, 0x57, 0x20, 0x01, 0x3D, 0x0F, 0x30, 0x08, 0xF5, 0xE5, + 0xCD, 0x3C, 0x34, 0xD1, 0xEB, 0xF1, 0xCB, 0x57, 0x20, 0x07, 0x0F, 0xF5, 0xCD, 0x0F, 0x30, 0x18, 0x33, 0x0F, 0xF5, 0xCD, 0xF1, 0x2B, 0xD5, 0xC5, 0xCD, 0xF1, 0x2B, 0xE1, 0x7C, 0xB5, 0xE3, 0x78, 0x20, 0x0B, 0xB1, 0xC1, 0x28, 0x04, 0xF1, 0x3F, + 0x18, 0x16, 0xF1, 0x18, 0x13, 0xB1, 0x28, 0x0D, 0x1A, 0x96, 0x38, 0x09, 0x20, 0xED, 0x0B, 0x13, 0x23, 0xE3, 0x2B, 0x18, 0xDF, 0xC1, 0xF1, 0xA7, 0xF5, 0xEF, 0xA0, 0x38, 0xF1, 0xF5, 0xDC, 0x01, 0x35, 0xF1, 0xF5, 0xD4, 0xF9, 0x34, 0xF1, 0x0F, + 0xD4, 0x01, 0x35, 0xC9, 0xCD, 0xF1, 0x2B, 0xD5, 0xC5, 0xCD, 0xF1, 0x2B, 0xE1, 0xE5, 0xD5, 0xC5, 0x09, 0x44, 0x4D, 0xF7, 0xCD, 0xB2, 0x2A, 0xC1, 0xE1, 0x78, 0xB1, 0x28, 0x02, 0xED, 0xB0, 0xC1, 0xE1, 0x78, 0xB1, 0x28, 0x02, 0xED, 0xB0, 0x2A, + 0x65, 0x5C, 0x11, 0xFB, 0xFF, 0xE5, 0x19, 0xD1, 0xC9, 0xCD, 0xD5, 0x2D, 0x38, 0x0E, 0x20, 0x0C, 0xF5, 0x01, 0x01, 0x00, 0xF7, 0xF1, 0x12, 0xCD, 0xB2, 0x2A, 0xEB, 0xC9, 0xCF, 0x0A, 0x2A, 0x5D, 0x5C, 0xE5, 0x78, 0xC6, 0xE3, 0x9F, 0xF5, 0xCD, + 0xF1, 0x2B, 0xD5, 0x03, 0xF7, 0xE1, 0xED, 0x53, 0x5D, 0x5C, 0xD5, 0xED, 0xB0, 0xEB, 0x2B, 0x36, 0x0D, 0xFD, 0xCB, 0x01, 0xBE, 0xCD, 0xFB, 0x24, 0xDF, 0xFE, 0x0D, 0x20, 0x07, 0xE1, 0xF1, 0xFD, 0xAE, 0x01, 0xE6, 0x40, 0xC2, 0x8A, 0x1C, 0x22, + 0x5D, 0x5C, 0xFD, 0xCB, 0x01, 0xFE, 0xCD, 0xFB, 0x24, 0xE1, 0x22, 0x5D, 0x5C, 0x18, 0xA0, 0x01, 0x01, 0x00, 0xF7, 0x22, 0x5B, 0x5C, 0xE5, 0x2A, 0x51, 0x5C, 0xE5, 0x3E, 0xFF, 0xCD, 0x01, 0x16, 0xCD, 0xE3, 0x2D, 0xE1, 0xCD, 0x15, 0x16, 0xD1, + 0x2A, 0x5B, 0x5C, 0xA7, 0xED, 0x52, 0x44, 0x4D, 0xCD, 0xB2, 0x2A, 0xEB, 0xC9, 0xCD, 0x94, 0x1E, 0xFE, 0x10, 0xD2, 0x9F, 0x1E, 0x2A, 0x51, 0x5C, 0xE5, 0xCD, 0x01, 0x16, 0xCD, 0xE6, 0x15, 0x01, 0x00, 0x00, 0x30, 0x03, 0x0C, 0xF7, 0x12, 0xCD, + 0xB2, 0x2A, 0xE1, 0xCD, 0x15, 0x16, 0xC3, 0xBF, 0x35, 0xCD, 0xF1, 0x2B, 0x78, 0xB1, 0x28, 0x01, 0x1A, 0xC3, 0x28, 0x2D, 0xCD, 0xF1, 0x2B, 0xC3, 0x2B, 0x2D, 0xD9, 0xE5, 0x21, 0x67, 0x5C, 0x35, 0xE1, 0x20, 0x04, 0x23, 0xD9, 0xC9, 0xD9, 0x5E, + 0x7B, 0x17, 0x9F, 0x57, 0x19, 0xD9, 0xC9, 0x13, 0x13, 0x1A, 0x1B, 0x1B, 0xA7, 0x20, 0xEF, 0xD9, 0x23, 0xD9, 0xC9, 0xF1, 0xD9, 0xE3, 0xD9, 0xC9, 0xEF, 0xC0, 0x02, 0x31, 0xE0, 0x05, 0x27, 0xE0, 0x01, 0xC0, 0x04, 0x03, 0xE0, 0x38, 0xC9, 0xEF, + 0x31, 0x36, 0x00, 0x04, 0x3A, 0x38, 0xC9, 0x31, 0x3A, 0xC0, 0x03, 0xE0, 0x01, 0x30, 0x00, 0x03, 0xA1, 0x03, 0x38, 0xC9, 0xEF, 0x3D, 0x34, 0xF1, 0x38, 0xAA, 0x3B, 0x29, 0x04, 0x31, 0x27, 0xC3, 0x03, 0x31, 0x0F, 0xA1, 0x03, 0x88, 0x13, 0x36, + 0x58, 0x65, 0x66, 0x9D, 0x78, 0x65, 0x40, 0xA2, 0x60, 0x32, 0xC9, 0xE7, 0x21, 0xF7, 0xAF, 0x24, 0xEB, 0x2F, 0xB0, 0xB0, 0x14, 0xEE, 0x7E, 0xBB, 0x94, 0x58, 0xF1, 0x3A, 0x7E, 0xF8, 0xCF, 0xE3, 0x38, 0xCD, 0xD5, 0x2D, 0x20, 0x07, 0x38, 0x03, + 0x86, 0x30, 0x09, 0xCF, 0x05, 0x38, 0x07, 0x96, 0x30, 0x04, 0xED, 0x44, 0x77, 0xC9, 0xEF, 0x02, 0xA0, 0x38, 0xC9, 0xEF, 0x3D, 0x31, 0x37, 0x00, 0x04, 0x38, 0xCF, 0x09, 0xA0, 0x02, 0x38, 0x7E, 0x36, 0x80, 0xCD, 0x28, 0x2D, 0xEF, 0x34, 0x38, + 0x00, 0x03, 0x01, 0x31, 0x34, 0xF0, 0x4C, 0xCC, 0xCC, 0xCD, 0x03, 0x37, 0x00, 0x08, 0x01, 0xA1, 0x03, 0x01, 0x38, 0x34, 0xEF, 0x01, 0x34, 0xF0, 0x31, 0x72, 0x17, 0xF8, 0x04, 0x01, 0xA2, 0x03, 0xA2, 0x03, 0x31, 0x34, 0x32, 0x20, 0x04, 0xA2, + 0x03, 0x8C, 0x11, 0xAC, 0x14, 0x09, 0x56, 0xDA, 0xA5, 0x59, 0x30, 0xC5, 0x5C, 0x90, 0xAA, 0x9E, 0x70, 0x6F, 0x61, 0xA1, 0xCB, 0xDA, 0x96, 0xA4, 0x31, 0x9F, 0xB4, 0xE7, 0xA0, 0xFE, 0x5C, 0xFC, 0xEA, 0x1B, 0x43, 0xCA, 0x36, 0xED, 0xA7, 0x9C, + 0x7E, 0x5E, 0xF0, 0x6E, 0x23, 0x80, 0x93, 0x04, 0x0F, 0x38, 0xC9, 0xEF, 0x3D, 0x34, 0xEE, 0x22, 0xF9, 0x83, 0x6E, 0x04, 0x31, 0xA2, 0x0F, 0x27, 0x03, 0x31, 0x0F, 0x31, 0x0F, 0x31, 0x2A, 0xA1, 0x03, 0x31, 0x37, 0xC0, 0x00, 0x04, 0x02, 0x38, + 0xC9, 0xA1, 0x03, 0x01, 0x36, 0x00, 0x02, 0x1B, 0x38, 0xC9, 0xEF, 0x39, 0x2A, 0xA1, 0x03, 0xE0, 0x00, 0x06, 0x1B, 0x33, 0x03, 0xEF, 0x39, 0x31, 0x31, 0x04, 0x31, 0x0F, 0xA1, 0x03, 0x86, 0x14, 0xE6, 0x5C, 0x1F, 0x0B, 0xA3, 0x8F, 0x38, 0xEE, + 0xE9, 0x15, 0x63, 0xBB, 0x23, 0xEE, 0x92, 0x0D, 0xCD, 0xED, 0xF1, 0x23, 0x5D, 0x1B, 0xEA, 0x04, 0x38, 0xC9, 0xEF, 0x31, 0x1F, 0x01, 0x20, 0x05, 0x38, 0xC9, 0xCD, 0x97, 0x32, 0x7E, 0xFE, 0x81, 0x38, 0x0E, 0xEF, 0xA1, 0x1B, 0x01, 0x05, 0x31, + 0x36, 0xA3, 0x01, 0x00, 0x06, 0x1B, 0x33, 0x03, 0xEF, 0xA0, 0x01, 0x31, 0x31, 0x04, 0x31, 0x0F, 0xA1, 0x03, 0x8C, 0x10, 0xB2, 0x13, 0x0E, 0x55, 0xE4, 0x8D, 0x58, 0x39, 0xBC, 0x5B, 0x98, 0xFD, 0x9E, 0x00, 0x36, 0x75, 0xA0, 0xDB, 0xE8, 0xB4, + 0x63, 0x42, 0xC4, 0xE6, 0xB5, 0x09, 0x36, 0xBE, 0xE9, 0x36, 0x73, 0x1B, 0x5D, 0xEC, 0xD8, 0xDE, 0x63, 0xBE, 0xF0, 0x61, 0xA1, 0xB3, 0x0C, 0x04, 0x0F, 0x38, 0xC9, 0xEF, 0x31, 0x31, 0x04, 0xA1, 0x03, 0x1B, 0x28, 0xA1, 0x0F, 0x05, 0x24, 0x31, + 0x0F, 0x38, 0xC9, 0xEF, 0x22, 0xA3, 0x03, 0x1B, 0x38, 0xC9, 0xEF, 0x31, 0x30, 0x00, 0x1E, 0xA2, 0x38, 0xEF, 0x01, 0x31, 0x30, 0x00, 0x07, 0x25, 0x04, 0x38, 0xC3, 0xC4, 0x36, 0x02, 0x31, 0x30, 0x00, 0x09, 0xA0, 0x01, 0x37, 0x00, 0x06, 0xA1, + 0x01, 0x05, 0x02, 0xA1, 0x38, 0xC9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x24, 0x7E, 0x24, 0x24, 0x7E, 0x24, 0x00, 0x00, 0x08, 0x3E, 0x28, 0x3E, 0x0A, 0x3E, 0x08, 0x00, 0x62, 0x64, 0x08, 0x10, 0x26, 0x46, 0x00, 0x00, 0x10, 0x28, 0x10, 0x2A, 0x44, 0x3A, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x00, 0x00, 0x20, 0x10, 0x10, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14, 0x00, 0x00, 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x3C, 0x46, 0x4A, 0x52, 0x62, 0x3C, 0x00, 0x00, 0x18, 0x28, 0x08, 0x08, 0x08, 0x3E, 0x00, + 0x00, 0x3C, 0x42, 0x02, 0x3C, 0x40, 0x7E, 0x00, 0x00, 0x3C, 0x42, 0x0C, 0x02, 0x42, 0x3C, 0x00, 0x00, 0x08, 0x18, 0x28, 0x48, 0x7E, 0x08, 0x00, 0x00, 0x7E, 0x40, 0x7C, 0x02, 0x42, 0x3C, 0x00, 0x00, 0x3C, 0x40, 0x7C, 0x42, 0x42, 0x3C, 0x00, + 0x00, 0x7E, 0x02, 0x04, 0x08, 0x10, 0x10, 0x00, 0x00, 0x3C, 0x42, 0x3C, 0x42, 0x42, 0x3C, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x3E, 0x02, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x10, 0x20, + 0x00, 0x00, 0x04, 0x08, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x04, 0x08, 0x10, 0x00, 0x00, 0x3C, 0x42, 0x04, 0x08, 0x00, 0x08, 0x00, 0x00, 0x3C, 0x4A, 0x56, 0x5E, 0x40, 0x3C, 0x00, + 0x00, 0x3C, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x00, 0x00, 0x7C, 0x42, 0x7C, 0x42, 0x42, 0x7C, 0x00, 0x00, 0x3C, 0x42, 0x40, 0x40, 0x42, 0x3C, 0x00, 0x00, 0x78, 0x44, 0x42, 0x42, 0x44, 0x78, 0x00, 0x00, 0x7E, 0x40, 0x7C, 0x40, 0x40, 0x7E, 0x00, + 0x00, 0x7E, 0x40, 0x7C, 0x40, 0x40, 0x40, 0x00, 0x00, 0x3C, 0x42, 0x40, 0x4E, 0x42, 0x3C, 0x00, 0x00, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42, 0x00, 0x00, 0x3E, 0x08, 0x08, 0x08, 0x08, 0x3E, 0x00, 0x00, 0x02, 0x02, 0x02, 0x42, 0x42, 0x3C, 0x00, + 0x00, 0x44, 0x48, 0x70, 0x48, 0x44, 0x42, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7E, 0x00, 0x00, 0x42, 0x66, 0x5A, 0x42, 0x42, 0x42, 0x00, 0x00, 0x42, 0x62, 0x52, 0x4A, 0x46, 0x42, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, + 0x00, 0x7C, 0x42, 0x42, 0x7C, 0x40, 0x40, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x52, 0x4A, 0x3C, 0x00, 0x00, 0x7C, 0x42, 0x42, 0x7C, 0x44, 0x42, 0x00, 0x00, 0x3C, 0x40, 0x3C, 0x02, 0x42, 0x3C, 0x00, 0x00, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, + 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x5A, 0x24, 0x00, 0x00, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x00, 0x00, 0x82, 0x44, 0x28, 0x10, 0x10, 0x10, 0x00, + 0x00, 0x7E, 0x04, 0x08, 0x10, 0x20, 0x7E, 0x00, 0x00, 0x0E, 0x08, 0x08, 0x08, 0x08, 0x0E, 0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x70, 0x10, 0x10, 0x10, 0x10, 0x70, 0x00, 0x00, 0x10, 0x38, 0x54, 0x10, 0x10, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x1C, 0x22, 0x78, 0x20, 0x20, 0x7E, 0x00, 0x00, 0x00, 0x38, 0x04, 0x3C, 0x44, 0x3C, 0x00, 0x00, 0x20, 0x20, 0x3C, 0x22, 0x22, 0x3C, 0x00, 0x00, 0x00, 0x1C, 0x20, 0x20, 0x20, 0x1C, 0x00, + 0x00, 0x04, 0x04, 0x3C, 0x44, 0x44, 0x3C, 0x00, 0x00, 0x00, 0x38, 0x44, 0x78, 0x40, 0x3C, 0x00, 0x00, 0x0C, 0x10, 0x18, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x3C, 0x44, 0x44, 0x3C, 0x04, 0x38, 0x00, 0x40, 0x40, 0x78, 0x44, 0x44, 0x44, 0x00, + 0x00, 0x10, 0x00, 0x30, 0x10, 0x10, 0x38, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x04, 0x24, 0x18, 0x00, 0x20, 0x28, 0x30, 0x30, 0x28, 0x24, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0C, 0x00, 0x00, 0x00, 0x68, 0x54, 0x54, 0x54, 0x54, 0x00, + 0x00, 0x00, 0x78, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x78, 0x44, 0x44, 0x78, 0x40, 0x40, 0x00, 0x00, 0x3C, 0x44, 0x44, 0x3C, 0x04, 0x06, 0x00, 0x00, 0x1C, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x00, 0x00, 0x38, 0x40, 0x38, 0x04, 0x78, 0x00, 0x00, 0x10, 0x38, 0x10, 0x10, 0x10, 0x0C, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x44, 0x44, 0x28, 0x28, 0x10, 0x00, 0x00, 0x00, 0x44, 0x54, 0x54, 0x54, 0x28, 0x00, + 0x00, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x3C, 0x04, 0x38, 0x00, 0x00, 0x7C, 0x08, 0x10, 0x20, 0x7C, 0x00, 0x00, 0x0E, 0x08, 0x30, 0x08, 0x08, 0x0E, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, + 0x00, 0x70, 0x10, 0x0C, 0x10, 0x10, 0x70, 0x00, 0x00, 0x14, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x42, 0x99, 0xA1, 0xA1, 0x99, 0x42, 0x3C diff --git a/src/Examples/IoD16kSpectrumEmulator/Emulator.h b/src/Examples/IoD16kSpectrumEmulator/Emulator.h new file mode 100644 index 0000000..de57b9a --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/Emulator.h @@ -0,0 +1,382 @@ +#define ROMSIZE 16384 //49152 +#define RAMSIZE 16384 + +#define EXECZ80 +#define LSB_FIRST + +#define AQUARIUS 0 +#define ZX81 1 +#define ZXSPECTRUM 2 + +#define INT_RST00 0x00C7 /* RST 00h */ +#define INT_RST08 0x00CF /* RST 08h */ +#define INT_RST10 0x00D7 /* RST 10h */ +#define INT_RST18 0x00DF /* RST 18h */ +#define INT_RST20 0x00E7 /* RST 20h */ +#define INT_RST28 0x00EF /* RST 28h */ +#define INT_RST30 0x00F7 /* RST 30h */ +#define INT_RST38 0x00FF /* RST 38h */ +#define INT_IRQ INT_RST38 /* Default IRQ opcode is FFh */ +#define INT_NMI 0xFFFD /* Non-maskable interrupt */ +#define INT_NONE 0xFFFF /* No interrupt required */ +#define INT_QUIT 0xFFFE /* Exit the emulation */ + +/* Bits in Z80 F register: */ +#define S_FLAG 0x80 /* 1: Result negative */ +#define Z_FLAG 0x40 /* 1: Result is zero */ +#define H_FLAG 0x10 /* 1: Halfcarry/Halfborrow */ +#define P_FLAG 0x04 /* 1: Result is even */ +#define V_FLAG 0x04 /* 1: Overflow occured */ +#define N_FLAG 0x02 /* 1: Subtraction occured */ +#define C_FLAG 0x01 /* 1: Carry/Borrow occured */ + +/* Bits in IFF flip-flops: */ +#define IFF_1 0x01 /* IFF1 flip-flop */ +#define IFF_IM1 0x02 /* 1: IM1 mode */ +#define IFF_IM2 0x04 /* 1: IM2 mode */ +#define IFF_2 0x08 /* IFF2 flip-flop */ +#define IFF_EI 0x20 /* 1: EI pending */ +#define IFF_HALT 0x80 /* 1: CPU HALTed */ + +/** Simple Datatypes *****************************************/ +/** NOTICE: sizeof(byte)=1 and sizeof(word16)=2 **/ +/*************************************************************/ +#ifndef BYTE_TYPE_DEFINED +#define BYTE_TYPE_DEFINED +typedef uint8_t byte; +#endif +#ifndef WORD_TYPE_DEFINED +#define WORD_TYPE_DEFINED +typedef uint16_t word16; +#endif +typedef int8_t offset; + +/** Structured Datatypes *************************************/ +/** NOTICE: #define LSB_FIRST for machines where least **/ +/** signifcant byte goes first. **/ +/*************************************************************/ +typedef union +{ +#ifdef LSB_FIRST + struct { + byte l, h; + } B; +#else + struct { + byte h, l; + } B; +#endif + word16 W; +} pair; + +typedef struct +{ + pair AF, BC, DE, HL, IX, IY, PC, SP; /* Main registers */ + pair AF1, BC1, DE1, HL1; /* Shadow registers */ + byte IFF, I; /* Interrupt registers */ + byte R; /* Refresh register */ + + int IPeriod, ICount; /* Set IPeriod to number of CPU cycles */ + /* between calls to LoopZ80() */ + int IBackup; /* Private, don't touch */ + word16 IRequest; /* Set to address of pending IRQ */ + byte IAutoReset; /* Set to 1 to autom. reset IRequest */ + byte TrapBadOps; /* Set to 1 to warn of illegal opcodes */ + word16 Trap; /* Set Trap to address to trace from */ + byte Trace; /* Set Trace=1 to start tracing */ + void *User; /* Arbitrary user data (ID,RAM*,etc.) */ + + +} Z80; + + +word16 test2; +word16 SStemp; + +#ifndef JUMPZ80 +#define JumpZ80(PC) +#else +void JumpZ80(word16 PC); +#endif +#include "Tables.h" + +#ifdef __C99__ +#define INLINE static inline +#else +#define INLINE static __inline +#endif + +#define RdZ80 RDZ80 +#define WrZ80 WRZ80 + +#ifndef FAST_RDOP +#define OpZ80(A) RdZ80(A) +#endif + +#define S(Fl) R->AF.B.l|=Fl +#define R(Fl) R->AF.B.l&=~(Fl) +#define FLAGS(Rg,Fl) R->AF.B.l=Fl|ZSTable[Rg] + +#ifdef REAL_REG_R +#define INCR(N) R->R=((R->R+(N))&0x7F)|(R->R&0x80) +#else +#define INCR(N) +#endif + +#define M_RLC(Rg) \ + R->AF.B.l=Rg>>7;Rg=(Rg<<1)|R->AF.B.l;R->AF.B.l|=PZSTable[Rg] +#define M_RRC(Rg) \ + R->AF.B.l=Rg&0x01;Rg=(Rg>>1)|(R->AF.B.l<<7);R->AF.B.l|=PZSTable[Rg] +#define M_RL(Rg) \ + if(Rg&0x80) \ + { \ + Rg=(Rg<<1)|(R->AF.B.l&C_FLAG); \ + R->AF.B.l=PZSTable[Rg]|C_FLAG; \ + } \ + else \ + { \ + Rg=(Rg<<1)|(R->AF.B.l&C_FLAG); \ + R->AF.B.l=PZSTable[Rg]; \ + } +#define M_RR(Rg) \ + if(Rg&0x01) \ + { \ + Rg=(Rg>>1)|(R->AF.B.l<<7); \ + R->AF.B.l=PZSTable[Rg]|C_FLAG; \ + } \ + else \ + { \ + Rg=(Rg>>1)|(R->AF.B.l<<7); \ + R->AF.B.l=PZSTable[Rg]; \ + } + +#define M_SLA(Rg) \ + R->AF.B.l=Rg>>7;Rg<<=1;R->AF.B.l|=PZSTable[Rg] +#define M_SRA(Rg) \ + R->AF.B.l=Rg&C_FLAG;Rg=(Rg>>1)|(Rg&0x80);R->AF.B.l|=PZSTable[Rg] + +#define M_SLL(Rg) \ + R->AF.B.l=Rg>>7;Rg=(Rg<<1)|0x01;R->AF.B.l|=PZSTable[Rg] +#define M_SRL(Rg) \ + R->AF.B.l=Rg&0x01;Rg>>=1;R->AF.B.l|=PZSTable[Rg] + +#define M_BIT(Bit,Rg) \ + R->AF.B.l=(R->AF.B.l&C_FLAG)|H_FLAG|PZSTable[Rg&(1<Rg.B.l=OpZ80(R->SP.W++);R->Rg.B.h=OpZ80(R->SP.W++) +#define M_PUSH(Rg) \ + WrZ80(--R->SP.W,R->Rg.B.h);WrZ80(--R->SP.W,R->Rg.B.l) + +#define M_CALL \ + J.B.l=OpZ80(R->PC.W++);J.B.h=OpZ80(R->PC.W++); \ + WrZ80(--R->SP.W,R->PC.B.h);WrZ80(--R->SP.W,R->PC.B.l); \ + R->PC.W=J.W; \ + JumpZ80(J.W) + +#define M_JP J.B.l=OpZ80(R->PC.W++);J.B.h=OpZ80(R->PC.W);R->PC.W=J.W;JumpZ80(J.W) +#define M_JR R->PC.W+=(offset)OpZ80(R->PC.W)+1;JumpZ80(R->PC.W) +#define M_RET R->PC.B.l=OpZ80(R->SP.W++);R->PC.B.h=OpZ80(R->SP.W++);JumpZ80(R->PC.W) + +#define M_RST(Ad) \ + WrZ80(--R->SP.W,R->PC.B.h);WrZ80(--R->SP.W,R->PC.B.l);R->PC.W=Ad;JumpZ80(Ad) + +#define M_LDWORD(Rg) \ + R->Rg.B.l=OpZ80(R->PC.W++);R->Rg.B.h=OpZ80(R->PC.W++) + +#define M_ADD(Rg) \ + J.W=R->AF.B.h+Rg; \ + R->AF.B.l= \ + (~(R->AF.B.h^Rg)&(Rg^J.B.l)&0x80? V_FLAG:0)| \ + J.B.h|ZSTable[J.B.l]| \ + ((R->AF.B.h^Rg^J.B.l)&H_FLAG); \ + R->AF.B.h=J.B.l + +#define M_SUB(Rg) \ + J.W=R->AF.B.h-Rg; \ + R->AF.B.l= \ + ((R->AF.B.h^Rg)&(R->AF.B.h^J.B.l)&0x80? V_FLAG:0)| \ + N_FLAG|-J.B.h|ZSTable[J.B.l]| \ + ((R->AF.B.h^Rg^J.B.l)&H_FLAG); \ + R->AF.B.h=J.B.l + +#define M_ADC(Rg) \ + J.W=R->AF.B.h+Rg+(R->AF.B.l&C_FLAG); \ + R->AF.B.l= \ + (~(R->AF.B.h^Rg)&(Rg^J.B.l)&0x80? V_FLAG:0)| \ + J.B.h|ZSTable[J.B.l]| \ + ((R->AF.B.h^Rg^J.B.l)&H_FLAG); \ + R->AF.B.h=J.B.l + +#define M_SBC(Rg) \ + J.W=R->AF.B.h-Rg-(R->AF.B.l&C_FLAG); \ + R->AF.B.l= \ + ((R->AF.B.h^Rg)&(R->AF.B.h^J.B.l)&0x80? V_FLAG:0)| \ + N_FLAG|-J.B.h|ZSTable[J.B.l]| \ + ((R->AF.B.h^Rg^J.B.l)&H_FLAG); \ + R->AF.B.h=J.B.l + +#define M_CP(Rg) \ + J.W=R->AF.B.h-Rg; \ + R->AF.B.l= \ + ((R->AF.B.h^Rg)&(R->AF.B.h^J.B.l)&0x80? V_FLAG:0)| \ + N_FLAG|-J.B.h|ZSTable[J.B.l]| \ + ((R->AF.B.h^Rg^J.B.l)&H_FLAG) + +#define M_AND(Rg) R->AF.B.h&=Rg;R->AF.B.l=H_FLAG|PZSTable[R->AF.B.h] +#define M_OR(Rg) R->AF.B.h|=Rg;R->AF.B.l=PZSTable[R->AF.B.h] +#define M_XOR(Rg) R->AF.B.h^=Rg;R->AF.B.l=PZSTable[R->AF.B.h] + +#define M_IN(Rg) \ + Rg=InZ80(R->BC.W); \ + R->AF.B.l=PZSTable[Rg]|(R->AF.B.l&C_FLAG) + +#define M_INC(Rg) \ + Rg++; \ + R->AF.B.l= \ + (R->AF.B.l&C_FLAG)|ZSTable[Rg]| \ + (Rg==0x80? V_FLAG:0)|(Rg&0x0F? 0:H_FLAG) + +#define M_DEC(Rg) \ + Rg--; \ + R->AF.B.l= \ + N_FLAG|(R->AF.B.l&C_FLAG)|ZSTable[Rg]| \ + (Rg==0x7F? V_FLAG:0)|((Rg&0x0F)==0x0F? H_FLAG:0) + +#define M_ADDW(Rg1,Rg2) \ + J.W=(R->Rg1.W+R->Rg2.W)&0xFFFF; \ + R->AF.B.l= \ + (R->AF.B.l&~(H_FLAG|N_FLAG|C_FLAG))| \ + ((R->Rg1.W^R->Rg2.W^J.W)&0x1000? H_FLAG:0)| \ + (((long)R->Rg1.W+(long)R->Rg2.W)&0x10000? C_FLAG:0); \ + R->Rg1.W=J.W + +#define M_ADCW(Rg) \ + I=R->AF.B.l&C_FLAG;J.W=(R->HL.W+R->Rg.W+I)&0xFFFF; \ + R->AF.B.l= \ + (((long)R->HL.W+(long)R->Rg.W+(long)I)&0x10000? C_FLAG:0)| \ + (~(R->HL.W^R->Rg.W)&(R->Rg.W^J.W)&0x8000? V_FLAG:0)| \ + ((R->HL.W^R->Rg.W^J.W)&0x1000? H_FLAG:0)| \ + (J.W? 0:Z_FLAG)|(J.B.h&S_FLAG); \ + R->HL.W=J.W + +#define M_SBCW(Rg) \ + I=R->AF.B.l&C_FLAG;J.W=(R->HL.W-R->Rg.W-I)&0xFFFF; \ + R->AF.B.l= \ + N_FLAG| \ + (((long)R->HL.W-(long)R->Rg.W-(long)I)&0x10000? C_FLAG:0)| \ + ((R->HL.W^R->Rg.W)&(R->HL.W^J.W)&0x8000? V_FLAG:0)| \ + ((R->HL.W^R->Rg.W^J.W)&0x1000? H_FLAG:0)| \ + (J.W? 0:Z_FLAG)|(J.B.h&S_FLAG); \ + R->HL.W=J.W + +enum Codes +{ + NOP, LD_BC_WORD, LD_xBC_A, INC_BC, INC_B, DEC_B, LD_B_BYTE, RLCA, + EX_AF_AF, ADD_HL_BC, LD_A_xBC, DEC_BC, INC_C, DEC_C, LD_C_BYTE, RRCA, + DJNZ, LD_DE_WORD, LD_xDE_A, INC_DE, INC_D, DEC_D, LD_D_BYTE, RLA, + JR, ADD_HL_DE, LD_A_xDE, DEC_DE, INC_E, DEC_E, LD_E_BYTE, RRA, + JR_NZ, LD_HL_WORD, LD_xWORD_HL, INC_HL, INC_H, DEC_H, LD_H_BYTE, DAA, + JR_Z, ADD_HL_HL, LD_HL_xWORD, DEC_HL, INC_L, DEC_L, LD_L_BYTE, CPL, + JR_NC, LD_SP_WORD, LD_xWORD_A, INC_SP, INC_xHL, DEC_xHL, LD_xHL_BYTE, SCF, + JR_C, ADD_HL_SP, LD_A_xWORD, DEC_SP, INC_A, DEC_A, LD_A_BYTE, CCF, + LD_B_B, LD_B_C, LD_B_D, LD_B_E, LD_B_H, LD_B_L, LD_B_xHL, LD_B_A, + LD_C_B, LD_C_C, LD_C_D, LD_C_E, LD_C_H, LD_C_L, LD_C_xHL, LD_C_A, + LD_D_B, LD_D_C, LD_D_D, LD_D_E, LD_D_H, LD_D_L, LD_D_xHL, LD_D_A, + LD_E_B, LD_E_C, LD_E_D, LD_E_E, LD_E_H, LD_E_L, LD_E_xHL, LD_E_A, + LD_H_B, LD_H_C, LD_H_D, LD_H_E, LD_H_H, LD_H_L, LD_H_xHL, LD_H_A, + LD_L_B, LD_L_C, LD_L_D, LD_L_E, LD_L_H, LD_L_L, LD_L_xHL, LD_L_A, + LD_xHL_B, LD_xHL_C, LD_xHL_D, LD_xHL_E, LD_xHL_H, LD_xHL_L, HALT, LD_xHL_A, + LD_A_B, LD_A_C, LD_A_D, LD_A_E, LD_A_H, LD_A_L, LD_A_xHL, LD_A_A, + ADD_B, ADD_C, ADD_D, ADD_E, ADD_H, ADD_L, ADD_xHL, ADD_A, + ADC_B, ADC_C, ADC_D, ADC_E, ADC_H, ADC_L, ADC_xHL, ADC_A, + SUB_B, SUB_C, SUB_D, SUB_E, SUB_H, SUB_L, SUB_xHL, SUB_A, + SBC_B, SBC_C, SBC_D, SBC_E, SBC_H, SBC_L, SBC_xHL, SBC_A, + AND_B, AND_C, AND_D, AND_E, AND_H, AND_L, AND_xHL, AND_A, + XOR_B, XOR_C, XOR_D, XOR_E, XOR_H, XOR_L, XOR_xHL, XOR_A, + OR_B, OR_C, OR_D, OR_E, OR_H, OR_L, OR_xHL, OR_A, + CP_B, CP_C, CP_D, CP_E, CP_H, CP_L, CP_xHL, CP_A, + RET_NZ, POP_BC, JP_NZ, JP, CALL_NZ, PUSH_BC, ADD_BYTE, RST00, + RET_Z, RET, JP_Z, PFX_CB, CALL_Z, CALL, ADC_BYTE, RST08, + RET_NC, POP_DE, JP_NC, OUTA, CALL_NC, PUSH_DE, SUB_BYTE, RST10, + RET_C, EXX, JP_C, INA, CALL_C, PFX_DD, SBC_BYTE, RST18, + RET_PO, POP_HL, JP_PO, EX_HL_xSP, CALL_PO, PUSH_HL, AND_BYTE, RST20, + RET_PE, LD_PC_HL, JP_PE, EX_DE_HL, CALL_PE, PFX_ED, XOR_BYTE, RST28, + RET_P, POP_AF, JP_P, DI, CALL_P, PUSH_AF, OR_BYTE, RST30, + RET_M, LD_SP_HL, JP_M, EI, CALL_M, PFX_FD, CP_BYTE, RST38 +}; + +enum CodesCB +{ + RLC_B, RLC_C, RLC_D, RLC_E, RLC_H, RLC_L, RLC_xHL, RLC_A, + RRC_B, RRC_C, RRC_D, RRC_E, RRC_H, RRC_L, RRC_xHL, RRC_A, + RL_B, RL_C, RL_D, RL_E, RL_H, RL_L, RL_xHL, RL_A, + RR_B, RR_C, RR_D, RR_E, RR_H, RR_L, RR_xHL, RR_A, + SLA_B, SLA_C, SLA_D, SLA_E, SLA_H, SLA_L, SLA_xHL, SLA_A, + SRA_B, SRA_C, SRA_D, SRA_E, SRA_H, SRA_L, SRA_xHL, SRA_A, + SLL_B, SLL_C, SLL_D, SLL_E, SLL_H, SLL_L, SLL_xHL, SLL_A, + SRL_B, SRL_C, SRL_D, SRL_E, SRL_H, SRL_L, SRL_xHL, SRL_A, + BIT0_B, BIT0_C, BIT0_D, BIT0_E, BIT0_H, BIT0_L, BIT0_xHL, BIT0_A, + BIT1_B, BIT1_C, BIT1_D, BIT1_E, BIT1_H, BIT1_L, BIT1_xHL, BIT1_A, + BIT2_B, BIT2_C, BIT2_D, BIT2_E, BIT2_H, BIT2_L, BIT2_xHL, BIT2_A, + BIT3_B, BIT3_C, BIT3_D, BIT3_E, BIT3_H, BIT3_L, BIT3_xHL, BIT3_A, + BIT4_B, BIT4_C, BIT4_D, BIT4_E, BIT4_H, BIT4_L, BIT4_xHL, BIT4_A, + BIT5_B, BIT5_C, BIT5_D, BIT5_E, BIT5_H, BIT5_L, BIT5_xHL, BIT5_A, + BIT6_B, BIT6_C, BIT6_D, BIT6_E, BIT6_H, BIT6_L, BIT6_xHL, BIT6_A, + BIT7_B, BIT7_C, BIT7_D, BIT7_E, BIT7_H, BIT7_L, BIT7_xHL, BIT7_A, + RES0_B, RES0_C, RES0_D, RES0_E, RES0_H, RES0_L, RES0_xHL, RES0_A, + RES1_B, RES1_C, RES1_D, RES1_E, RES1_H, RES1_L, RES1_xHL, RES1_A, + RES2_B, RES2_C, RES2_D, RES2_E, RES2_H, RES2_L, RES2_xHL, RES2_A, + RES3_B, RES3_C, RES3_D, RES3_E, RES3_H, RES3_L, RES3_xHL, RES3_A, + RES4_B, RES4_C, RES4_D, RES4_E, RES4_H, RES4_L, RES4_xHL, RES4_A, + RES5_B, RES5_C, RES5_D, RES5_E, RES5_H, RES5_L, RES5_xHL, RES5_A, + RES6_B, RES6_C, RES6_D, RES6_E, RES6_H, RES6_L, RES6_xHL, RES6_A, + RES7_B, RES7_C, RES7_D, RES7_E, RES7_H, RES7_L, RES7_xHL, RES7_A, + SET0_B, SET0_C, SET0_D, SET0_E, SET0_H, SET0_L, SET0_xHL, SET0_A, + SET1_B, SET1_C, SET1_D, SET1_E, SET1_H, SET1_L, SET1_xHL, SET1_A, + SET2_B, SET2_C, SET2_D, SET2_E, SET2_H, SET2_L, SET2_xHL, SET2_A, + SET3_B, SET3_C, SET3_D, SET3_E, SET3_H, SET3_L, SET3_xHL, SET3_A, + SET4_B, SET4_C, SET4_D, SET4_E, SET4_H, SET4_L, SET4_xHL, SET4_A, + SET5_B, SET5_C, SET5_D, SET5_E, SET5_H, SET5_L, SET5_xHL, SET5_A, + SET6_B, SET6_C, SET6_D, SET6_E, SET6_H, SET6_L, SET6_xHL, SET6_A, + SET7_B, SET7_C, SET7_D, SET7_E, SET7_H, SET7_L, SET7_xHL, SET7_A +}; + +enum CodesED +{ + DB_00, DB_01, DB_02, DB_03, DB_04, DB_05, DB_06, DB_07, + DB_08, DB_09, DB_0A, DB_0B, DB_0C, DB_0D, DB_0E, DB_0F, + DB_10, DB_11, DB_12, DB_13, DB_14, DB_15, DB_16, DB_17, + DB_18, DB_19, DB_1A, DB_1B, DB_1C, DB_1D, DB_1E, DB_1F, + DB_20, DB_21, DB_22, DB_23, DB_24, DB_25, DB_26, DB_27, + DB_28, DB_29, DB_2A, DB_2B, DB_2C, DB_2D, DB_2E, DB_2F, + DB_30, DB_31, DB_32, DB_33, DB_34, DB_35, DB_36, DB_37, + DB_38, DB_39, DB_3A, DB_3B, DB_3C, DB_3D, DB_3E, DB_3F, + IN_B_xC, OUT_xC_B, SBC_HL_BC, LD_xWORDe_BC, NEG, RETN, IM_0, LD_I_A, + IN_C_xC, OUT_xC_C, ADC_HL_BC, LD_BC_xWORDe, DB_4C, RETI, DB_, LD_R_A, + IN_D_xC, OUT_xC_D, SBC_HL_DE, LD_xWORDe_DE, DB_54, DB_55, IM_1, LD_A_I, + IN_E_xC, OUT_xC_E, ADC_HL_DE, LD_DE_xWORDe, DB_5C, DB_5D, IM_2, LD_A_R, + IN_H_xC, OUT_xC_H, SBC_HL_HL, LD_xWORDe_HL, DB_64, DB_65, DB_66, RRD, + IN_L_xC, OUT_xC_L, ADC_HL_HL, LD_HL_xWORDe, DB_6C, DB_6D, DB_6E, RLD, + IN_F_xC, DB_71, SBC_HL_SP, LD_xWORDe_SP, DB_74, DB_75, DB_76, DB_77, + IN_A_xC, OUT_xC_A, ADC_HL_SP, LD_SP_xWORDe, DB_7C, DB_7D, DB_7E, DB_7F, + DB_80, DB_81, DB_82, DB_83, DB_84, DB_85, DB_86, DB_87, + DB_88, DB_89, DB_8A, DB_8B, DB_8C, DB_8D, DB_8E, DB_8F, + DB_90, DB_91, DB_92, DB_93, DB_94, DB_95, DB_96, DB_97, + DB_98, DB_99, DB_9A, DB_9B, DB_9C, DB_9D, DB_9E, DB_9F, + LDI, CPI, INI, OUTI, DB_A4, DB_A5, DB_A6, DB_A7, + LDD, CPD, IND, OUTD, DB_AC, DB_AD, DB_AE, DB_AF, + LDIR, CPIR, INIR, OTIR, DB_B4, DB_B5, DB_B6, DB_B7, + LDDR, CPDR, INDR, OTDR, DB_BC, DB_BD, DB_BE, DB_BF, + DB_C0, DB_C1, DB_C2, DB_C3, DB_C4, DB_C5, DB_C6, DB_C7, + DB_C8, DB_C9, DB_CA, DB_CB, DB_CC, DB_CD, DB_CE, DB_CF, + DB_D0, DB_D1, DB_D2, DB_D3, DB_D4, DB_D5, DB_D6, DB_D7, + DB_D8, DB_D9, DB_DA, DB_DB, DB_DC, DB_DD, DB_DE, DB_DF, + DB_E0, DB_E1, DB_E2, DB_E3, DB_E4, DB_E5, DB_E6, DB_E7, + DB_E8, DB_E9, DB_EA, DB_EB, DB_EC, DB_ED, DB_EE, DB_EF, + DB_F0, DB_F1, DB_F2, DB_F3, DB_F4, DB_F5, DB_F6, DB_F7, + DB_F8, DB_F9, DB_FA, DB_FB, DB_FC, DB_FD, DB_FE, DB_FF +}; diff --git a/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Application Files/Emulator Keyboard App_1_0_0_6/EMuKEYbapp.ico.deploy b/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Application Files/Emulator Keyboard App_1_0_0_6/EMuKEYbapp.ico.deploy new file mode 100644 index 0000000..4f004ef Binary files /dev/null and b/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Application Files/Emulator Keyboard App_1_0_0_6/EMuKEYbapp.ico.deploy differ diff --git a/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Application Files/Emulator Keyboard App_1_0_0_6/Emulator Keyboard App.application b/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Application Files/Emulator Keyboard App_1_0_0_6/Emulator Keyboard App.application new file mode 100644 index 0000000..02079fa --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Application Files/Emulator Keyboard App_1_0_0_6/Emulator Keyboard App.application @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + Btpiv6Oa8fzq4gfbz3+ccKYVo9KCvqZ+s+Zp5SWJIv8= + + + +U7E3X0twtW9w9VlQCWw75wz1X3UCdsmunlgh0onfA04=VtoPExl3Zlsckn0UAo6iXZVE3XxLmRz8o7NUdrvk9FNAC5KGB7M0YmiFT3oOUrOruJD4zOK1jmK6MjbW0HJVwiCMEg/roKW/+zkRBbRP6Hplmkyyaq8yvBkSyMFg54tRgCyz+pFOt7vuTNsqWke4j3uFc0gR+QQ/6qH0wexqDfA=0cI8A+JaD6NLMH68en3xvuprWBXlM0fnkSvxAkNjlyOu9DvJnE/r9SgB2pL7NgZ70WqevWH0a3LODKd2xgc0/co33sOrhhqMO7PSgA2onhMpMUs7DB2le1OJRwea+YYfAhyklSBhNrBYNOL/6dKKKmcS2MdwmugF0u0t2G+hyoE=AQABCN=DESKTOP-1ILBHQ1\paulcxMO4YEqMzvOUXHSkFfB0U3suGVzRwKjvpb2wAcV9r1s=KC05S8m7mOCxA95KxMQhSpZ/NllpQEJrJQG+OmiuOrIGR40p8MbrmWRVdChsSRRkcBgjdBz30P/6vTGf5RD7nNzHZJo8g77iZEe//yoLLFRs5zKmFtUk0RoKxmqiiefcWCH3YcXVg6trPxQejLeYCRW795CZ55XjD1G6gizMOJs=0cI8A+JaD6NLMH68en3xvuprWBXlM0fnkSvxAkNjlyOu9DvJnE/r9SgB2pL7NgZ70WqevWH0a3LODKd2xgc0/co33sOrhhqMO7PSgA2onhMpMUs7DB2le1OJRwea+YYfAhyklSBhNrBYNOL/6dKKKmcS2MdwmugF0u0t2G+hyoE=AQABMIIB7TCCAVagAwIBAgIQS9EMABG5651CQd6tNyBubTANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDHioARABFAFMASwBUAE8AUAAtADEASQBMAEIASABRADEAXABwAGEAdQBsAGMwHhcNMjIxMDI0MTU0NDI0WhcNMjMxMDI0MjE0NDI0WjA1MTMwMQYDVQQDHioARABFAFMASwBUAE8AUAAtADEASQBMAEIASABRADEAXABwAGEAdQBsAGMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANHCPAPiWg+jSzB+vHp98b7qa1gV5TNH55Er8QJDY5cjrvQ7yZxP6/UoAdqS+zYGe9Fqnr1h9GtyzgyndsYHNP3KN97Dq4YajDuz0oANqJ4TKTFLOwwdpXtTiUcHmvmGHwIcpJUgYTawWDTi/+nSiipnEtjHcJroBdLtLdhvocqBAgMBAAEwDQYJKoZIhvcNAQELBQADgYEAYIqZuZlJCnp5/NC8vgGibZC8MpvsGn8hf1+lo+JG8fnNnKtPcyEpGjJnBcvZlS1UVg+whaPz/TFJ1hKrYyAsKN0bBZnkIX0ber1YwrKD+FIdzrCBNnBG5TaxUoxlg4mZwH37F/haVxQBy9LDdakEnU4D2UYyX1v4XcrGsV8LopY= \ No newline at end of file diff --git a/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Application Files/Emulator Keyboard App_1_0_0_6/Emulator Keyboard App.exe.config.deploy b/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Application Files/Emulator Keyboard App_1_0_0_6/Emulator Keyboard App.exe.config.deploy new file mode 100644 index 0000000..ffaf540 --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Application Files/Emulator Keyboard App_1_0_0_6/Emulator Keyboard App.exe.config.deploy @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Application Files/Emulator Keyboard App_1_0_0_6/Emulator Keyboard App.exe.deploy b/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Application Files/Emulator Keyboard App_1_0_0_6/Emulator Keyboard App.exe.deploy new file mode 100644 index 0000000..b43f1d8 Binary files /dev/null and b/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Application Files/Emulator Keyboard App_1_0_0_6/Emulator Keyboard App.exe.deploy differ diff --git a/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Application Files/Emulator Keyboard App_1_0_0_6/Emulator Keyboard App.exe.manifest b/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Application Files/Emulator Keyboard App_1_0_0_6/Emulator Keyboard App.exe.manifest new file mode 100644 index 0000000..0b805dd --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Application Files/Emulator Keyboard App_1_0_0_6/Emulator Keyboard App.exe.manifest @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Agn+2hrxs0pbgkTrV1ONOQKkZUFdnpZDa67Kj5mlMBA= + + + + + + + + + + nF32vbxnIHKf+UV/oqPTFW22q09Hbf9ZmtQxp2twP04= + + + + + + + + + VDy5/VrQni+RSOb/6uEMWMc6bGQEaa2e2UdeWG+KK1I= + + +SJN7weslGUsGYnv2i9jfqVtiCmxFKkKrcdKhIfLx+Us=QNrW3JhvARiwd0R6hz2rHbvbG64XGhsgk6QsVX+qlTmGCB9Q94cP4kOqlxYbHWW/+UdYVv5zzfUzKF6Z032cCgeyc+yVPsxCb8OZsEUNDuco73zbwtW5jpTUtYisni0F7GYTqCm/KtMjwd7Qd3ctqg0NzzyIRgINP50LozPEBl4=0cI8A+JaD6NLMH68en3xvuprWBXlM0fnkSvxAkNjlyOu9DvJnE/r9SgB2pL7NgZ70WqevWH0a3LODKd2xgc0/co33sOrhhqMO7PSgA2onhMpMUs7DB2le1OJRwea+YYfAhyklSBhNrBYNOL/6dKKKmcS2MdwmugF0u0t2G+hyoE=AQABCN=DESKTOP-1ILBHQ1\paulcu2r1QBTYSFrGl3GxKZnG7QUgK8gfk4cGJQP6U8RrQWo=S80n2LEQlvT2q5To6J2B7XmUvoRJVc41poGWB5hHVps6sFsf3k4/YCf1MSpKzM5IKuqx0QpBFg6hZv3R0iCIYek93/0rDVddBQZ97+TmxtaQfeZmEYZ8bwx8A/QHa03PjlvaDP9PQvHgHGTb5ByA50LY3trQeGIBIVLkn+0q18M=0cI8A+JaD6NLMH68en3xvuprWBXlM0fnkSvxAkNjlyOu9DvJnE/r9SgB2pL7NgZ70WqevWH0a3LODKd2xgc0/co33sOrhhqMO7PSgA2onhMpMUs7DB2le1OJRwea+YYfAhyklSBhNrBYNOL/6dKKKmcS2MdwmugF0u0t2G+hyoE=AQABMIIB7TCCAVagAwIBAgIQS9EMABG5651CQd6tNyBubTANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDHioARABFAFMASwBUAE8AUAAtADEASQBMAEIASABRADEAXABwAGEAdQBsAGMwHhcNMjIxMDI0MTU0NDI0WhcNMjMxMDI0MjE0NDI0WjA1MTMwMQYDVQQDHioARABFAFMASwBUAE8AUAAtADEASQBMAEIASABRADEAXABwAGEAdQBsAGMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANHCPAPiWg+jSzB+vHp98b7qa1gV5TNH55Er8QJDY5cjrvQ7yZxP6/UoAdqS+zYGe9Fqnr1h9GtyzgyndsYHNP3KN97Dq4YajDuz0oANqJ4TKTFLOwwdpXtTiUcHmvmGHwIcpJUgYTawWDTi/+nSiipnEtjHcJroBdLtLdhvocqBAgMBAAEwDQYJKoZIhvcNAQELBQADgYEAYIqZuZlJCnp5/NC8vgGibZC8MpvsGn8hf1+lo+JG8fnNnKtPcyEpGjJnBcvZlS1UVg+whaPz/TFJ1hKrYyAsKN0bBZnkIX0ber1YwrKD+FIdzrCBNnBG5TaxUoxlg4mZwH37F/haVxQBy9LDdakEnU4D2UYyX1v4XcrGsV8LopY= \ No newline at end of file diff --git a/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Emulator Keyboard App.application b/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Emulator Keyboard App.application new file mode 100644 index 0000000..02079fa --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/Emulator Keyboard App.application @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + Btpiv6Oa8fzq4gfbz3+ccKYVo9KCvqZ+s+Zp5SWJIv8= + + + +U7E3X0twtW9w9VlQCWw75wz1X3UCdsmunlgh0onfA04=VtoPExl3Zlsckn0UAo6iXZVE3XxLmRz8o7NUdrvk9FNAC5KGB7M0YmiFT3oOUrOruJD4zOK1jmK6MjbW0HJVwiCMEg/roKW/+zkRBbRP6Hplmkyyaq8yvBkSyMFg54tRgCyz+pFOt7vuTNsqWke4j3uFc0gR+QQ/6qH0wexqDfA=0cI8A+JaD6NLMH68en3xvuprWBXlM0fnkSvxAkNjlyOu9DvJnE/r9SgB2pL7NgZ70WqevWH0a3LODKd2xgc0/co33sOrhhqMO7PSgA2onhMpMUs7DB2le1OJRwea+YYfAhyklSBhNrBYNOL/6dKKKmcS2MdwmugF0u0t2G+hyoE=AQABCN=DESKTOP-1ILBHQ1\paulcxMO4YEqMzvOUXHSkFfB0U3suGVzRwKjvpb2wAcV9r1s=KC05S8m7mOCxA95KxMQhSpZ/NllpQEJrJQG+OmiuOrIGR40p8MbrmWRVdChsSRRkcBgjdBz30P/6vTGf5RD7nNzHZJo8g77iZEe//yoLLFRs5zKmFtUk0RoKxmqiiefcWCH3YcXVg6trPxQejLeYCRW795CZ55XjD1G6gizMOJs=0cI8A+JaD6NLMH68en3xvuprWBXlM0fnkSvxAkNjlyOu9DvJnE/r9SgB2pL7NgZ70WqevWH0a3LODKd2xgc0/co33sOrhhqMO7PSgA2onhMpMUs7DB2le1OJRwea+YYfAhyklSBhNrBYNOL/6dKKKmcS2MdwmugF0u0t2G+hyoE=AQABMIIB7TCCAVagAwIBAgIQS9EMABG5651CQd6tNyBubTANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDHioARABFAFMASwBUAE8AUAAtADEASQBMAEIASABRADEAXABwAGEAdQBsAGMwHhcNMjIxMDI0MTU0NDI0WhcNMjMxMDI0MjE0NDI0WjA1MTMwMQYDVQQDHioARABFAFMASwBUAE8AUAAtADEASQBMAEIASABRADEAXABwAGEAdQBsAGMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANHCPAPiWg+jSzB+vHp98b7qa1gV5TNH55Er8QJDY5cjrvQ7yZxP6/UoAdqS+zYGe9Fqnr1h9GtyzgyndsYHNP3KN97Dq4YajDuz0oANqJ4TKTFLOwwdpXtTiUcHmvmGHwIcpJUgYTawWDTi/+nSiipnEtjHcJroBdLtLdhvocqBAgMBAAEwDQYJKoZIhvcNAQELBQADgYEAYIqZuZlJCnp5/NC8vgGibZC8MpvsGn8hf1+lo+JG8fnNnKtPcyEpGjJnBcvZlS1UVg+whaPz/TFJ1hKrYyAsKN0bBZnkIX0ber1YwrKD+FIdzrCBNnBG5TaxUoxlg4mZwH37F/haVxQBy9LDdakEnU4D2UYyX1v4XcrGsV8LopY= \ No newline at end of file diff --git a/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/setup.exe b/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/setup.exe new file mode 100644 index 0000000..b092356 Binary files /dev/null and b/src/Examples/IoD16kSpectrumEmulator/Extra/EmulatorKeyboardApp/setup.exe differ diff --git a/src/Examples/IoD16kSpectrumEmulator/Extra/ReadMe.txt b/src/Examples/IoD16kSpectrumEmulator/Extra/ReadMe.txt new file mode 100644 index 0000000..673b138 --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/Extra/ReadMe.txt @@ -0,0 +1,25 @@ +16k ZX Spectrum Emulator for IoD. + +A simple emulator for the the gen4-IoD range of displays using GFX4d. The IoD remains connected to the PC and uses the PC keyboard to input using the supplied app. + +Cartridge ROMs can be added into flash by following the commented out method at the top of the sketch. HXD is a good tool to create a .h file from a binary. + +.TAP files can be simply copied to the uSD card. + +In the Extra folder there is a utility to give keyboard control from a PC which communicates keyboard matrix commands to the IoD via the UPA. Simply double click Setup to install the Emulator Keyboard App. + +F1 key launches the ROM menu, F2 launches the .TAP menu. Use the Comms tab to set up the Port of the IoD and then click on Connect. + +The .TAP menu can also be launched by typing LOAD "" into the emulator followed by ENTER. + +Select the .TAP file with the on-screen UP & DOWN buttons on the IoD display or on the PC keyboard 6 & 7 or cursor keys followed by Enter and the .TAP file will start to load. + +Only .TAP files for the 16k Spectrum will function correctly. JETPAC and PHEENIX play very well on the emulator. + +Saving to .TAP is also supported. + +Beep tones are sent to GPIO16 of the IoD and a small amplifier / speaker is all that is needed if sound is required. + +The IoD will make a good basis for a handheld ZX Spectrum project or other emulated machines + + \ No newline at end of file diff --git a/src/Examples/IoD16kSpectrumEmulator/IoD16kSpectrumEmulator.ino b/src/Examples/IoD16kSpectrumEmulator/IoD16kSpectrumEmulator.ino new file mode 100644 index 0000000..8a3ef9e --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/IoD16kSpectrumEmulator.ino @@ -0,0 +1,1452 @@ + +#include "GFX4d.h" +#include +#include "Emulator.h" + +#define ZX_EMU_TAPE 0 +#define ZX_EMU_ROM 1 + +#define ZX_LOAD_ANIM 0 // 0 - off, 8 - slow, 16 - medium, 32 - fast etc ... + +byte chkKeyb; + +uint8_t * RAM; + +uint8_t SCREENCACHE[6145]; +uint16_t screenline[256]; +unsigned char CACHE[1024]; + +uint8_t CACHETEST[32] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0 + }; + +uint8_t linepos[192] = {0, 8, 16, 24, 32, 40, 48, 56, + 1, 9, 17, 25, 33, 41, 49, 57, + 2, 10, 18, 26, 34, 42, 50, 58, + 3, 11, 19, 27, 35, 43, 51, 59, + 4, 12, 20, 28, 36, 44, 52, 60, + 5, 13, 21, 29, 37, 45, 53, 61, + 6, 14, 22, 30, 38, 46, 54, 62, + 7, 15, 23, 31, 39, 47, 55, 63, + 64, 72, 80, 88, 96, 104, 112, 120, + 65, 73, 81, 89, 97, 105, 113, 121, + 66, 74, 82, 90, 98, 106, 114, 122, + 67, 75, 83, 91, 99, 107, 115, 123, + 68, 76, 84, 92, 100, 108, 116, 124, + 69, 77, 85, 93, 101, 109, 117, 125, + 70, 78, 86, 94, 102, 110, 118, 126, + 71, 79, 87, 95, 103, 111, 119, 127, + 128, 136, 144, 152, 160, 168, 176, 184, + 129, 137, 145, 153, 161, 169, 177, 185, + 130, 138, 146, 154, 162, 170, 178, 186, + 131, 139, 147, 155, 163, 171, 179, 187, + 132, 140, 148, 156, 164, 172, 180, 188, + 133, 141, 149, 157, 165, 173, 181, 189, + 134, 142, 150, 158, 166, 174, 182, 190, + 135, 143, 151, 159, 167, 175, 183, 191 + }; + +const char ROMcartridges[200] PROGMEM = {'1', '6', 'k', '/', '4', '8', 'k', ' ', 'B', 'a', 's', 'i', 'c', ' ', 'R', 'O', 'M', 0, + // 'P', 'l', 'a', 'n', 'e', 't', 'o', 'i', 'd', 's', 0, + // 'S', 'p', 'a', 'c', 'e', ' ', 'R', 'a', 'i', 'd', 'e', 'r', 's', 0, + // 'H', 'o', 'r', 'a', 'c', 'e', ' ', 'a', 'n', 'd', ' ', 't', 'h', 'e', ' ', 'S', 'p', 'i', 'd', 'e', 'r', 's', 0, + // 'H', 'o', 'r', 'a', 'c', 'e', 0, + // 'P', 'i', 'n', 'b', 'a', 'l', 'l', 0, + // 'D', 'e', 'a', 'h', 'c', 'h', 'a', 's', 'e', 0, + // 'D', 'i', 'a', 'g', 'n', 'o', 's', 't', 'i', 'c', 's', 0, + // 'H', 'i', 'g', 'h', 'w', 'a', 'y', ' ', 'E', 'n', 'c', 'o', 'u', 'n', 't', 'e', 'r', 0, + // 'V', 'e', 'c', 't', 'o', 'r', ' ', 'B', 'a', 'l', 'l', 0, + // 'S', 't', 'a', 'r', ' ', 'W', 'a', 'r', 's', 0, + // 'Q', 'B', 'e', 'r', 't', 0, + // 'G', 'y', 'r', 'u', 's', 's', 0, + // 'F', 'l', 'i', 'g', 'h', 't', ' ', 'S', 'i', 'm', 'u', 'l', 'a', 't', 'i', 'o', 'n', 0, + 255 // 255 is end marker + }; +byte romnum = 1; // total ROMs in flash including BASIC +// Example roms added. Roms must be added the same way as the Basic.h and named GAME1, GAME2 .... +// Also need to modify the switch/case routine in the RdZ80(word16 A) function +// ROMs +const unsigned char ROM[16384] PROGMEM = { +#include "Basic.h" //ZX Spectrum rom +}; +/* +const unsigned char GAME1[16384] PROGMEM = { +#include "Planetoid.h" //ZX Spectrum rom +}; +const unsigned char GAME2[16384] PROGMEM = { +#include "SpaceRaiders.h" +}; +const unsigned char GAME3[16384] PROGMEM = { +#include "HoraceAndTheSpiders.h" +}; +const unsigned char GAME4[16384] PROGMEM = { +#include "Horace.h" +}; +const unsigned char GAME5[16384] PROGMEM = { +#include "Pinball.h" +}; +const unsigned char GAME6[16384] PROGMEM = { +#include "DeathChase.h" +}; +const unsigned char GAME7[16384] PROGMEM = { +#include "Diagnostic.h" +}; +const unsigned char GAME8[16384] PROGMEM = { +#include "HighwayEncounter.h" +}; +const unsigned char GAME9[16384] PROGMEM = { +#include "VectorBall.h" +}; +const unsigned char GAME10[16384] PROGMEM = { +#include "StarWars.h" +}; +const unsigned char GAME11[16384] PROGMEM = { +#include "QBert.h" +}; +const unsigned char GAME12[16384] PROGMEM = { +#include "Gyruss.h" +}; +const unsigned char GAME13[16384] PROGMEM = { +#include "FlightSimulation.h" +}; +*/ + +// Graphics for ROM/TAPE menus +const unsigned char ZXrainbow[] PROGMEM = { +#include "ZXrainbow.h" +}; +const unsigned char ZXenter[] PROGMEM = { +#include "ZXenter.h" +}; +const unsigned char ZXx[] PROGMEM = { +#include "ZXx.h" +}; +const unsigned char ZX6and7[] PROGMEM = { +#include "ZX6and7.h" +}; + +Z80 state; +GFX4d gfx = GFX4d(); + +uint16_t pal1[] = {0x0000, 0xC003, 0x05E0, 0xCDC1, 0x0036, 0xB81A, 0x0634, 0xFFFF, + 0xBDF7, 0x4532, 0x8152, 0x006D, 0xBD8A, 0x3CC5, 0x78C5, 0x0000 + }; +uint16_t pal2[] = {0x0000, 0x006D, 0x78C5, 0x8152, 0x3CC5, 0x4532, 0xBD8A, 0xBDF7, + 0x0000, 0x0036, 0xC003, 0xB81A, 0x05E0, 0x0634, 0xCDC1, 0xFFFF + }; + +String kbfile = "####################"; +#ifdef ESP32 +String files[256]; +#else +String files[128]; +#endif +String tfile; + +char rdname[7] = {'0', '0', '.', 'r', 'd', 'b', 0}; +char tempchar[32]; + +File specfile; +File rdisk; +File cfg; + +uint16_t tempcol; +uint16_t tfval2[64]; +uint16_t bccol; +uint16_t tccol; +uint16_t col; +uint16_t fnSTpos; +uint16_t colbyteaddr; +uint16_t coly; + +uint8_t tfval1[128]; + +int keyrepeat; +int BasicStart; +int LineNum; +int yieldc; +int keydown; +int rowcalc; +int len; +int xpos; +int xcount; +int chr; +int cassSel; +int oldcassSel; +int romSel; +int oldromSel; +int x; +int y; +int pos; +int rpos; +int n; +int chstart; +int chlen; +int xr; +int lastc; +int sposf; +int strtl; +int endl; + +int32_t rCycles = 70000; + +uint32_t tnow; + +boolean Theader; + +byte flash; +byte rom; +byte flashCount; +byte bordcol; +byte oldbordcol; +byte keyval; +byte UpdateS; +byte filnum; +byte ActiveScreen = 0; +byte initial = 0; +byte initialR = 0; +byte sel = 1; +byte oldsel; +byte rect; +byte ret_byte; +byte enInt; +byte NMItog; +byte colbyte; +byte c; +byte flsh; +byte fl; +byte bright; +byte bAnim[6]; +byte fr; +byte udate; +byte trow; +byte fnEntered; +byte breakOut; +byte ButtonTouched; +byte lastButtonTouched; +uint16_t rSector; +uint16_t lastrSector; +byte ReadOrWrite; +byte rdFirst; +byte lastkeydown; +byte exitload; +byte loadSDdirInitial = 1; +byte prevSel; + +char kUpdate[12]; + +void setup() { + // put your setup code here, to run once: +#ifdef ESP8266 + pinMode(16, OUTPUT); + RAM = (uint8_t *)malloc(0x4000); +#else + RAM = (uint8_t *)malloc(0xC000); +#endif + gfx.begin(); + gfx.BacklightOn(true); + gfx.Orientation(LANDSCAPE); + gfx.TextColor(BLACK, WHITE); gfx.Font(1); gfx.TextSize(1); +#ifndef ESP32 + gfx.touch_Set(TOUCH_ENABLE); +#endif + Serial.begin(115200); + gfx.Cls(pal2[7]); + for (int s = 0; s < 12; s++) { + kUpdate[s] = 0xff; + } + kbfile = ""; + initEMU(ZXSPECTRUM); +#ifdef USE_RAM_DISK + RAMdiskInit(8192); +#endif +} + +void loop() { + // put your main code here, to run repeatedly: + flashCount ++; + if (flashCount > 20) { + flashCount = 0; + UpdateS = 1; + if (flash == 1) { + flash = 0; + } else { + flash = 1; + } + } + if (ActiveScreen == 0) { + tnow = millis(); + ExecZ80(&state, rCycles); + if (enInt) IntZ80(&state, INT_IRQ); + pos = 0; + if (UpdateS) { + updateSpectrumScreen(); + UpdateS = 0; + } + if ((millis() - tnow) < 14) delay(14 - (millis() - tnow)); + } + if (ActiveScreen == 2) { + cassScreen(); + if (Serial.available() > 0) checkKeyboard(); + } + if (ActiveScreen == 1) { + romScreen(); + if (Serial.available() > 0) checkKeyboard(); + } + if (kUpdate[11] == 0xc1) { + kUpdate[11] = 0xc3; + initial = 1; + ActiveScreen = 2; +#ifdef ESP8266 + flushTouch(); +#endif + } + if (kUpdate[11] == 0xc2) { + kUpdate[11] = 0xc3; + initialR = 1; + ActiveScreen = 1; +#ifdef ESP8266 + flushTouch(); +#endif + } + yieldc ++; + if (yieldc > 50) { +#ifdef ESP8266 + yield(); +#endif + yieldc = 0; + } +} + +#ifdef ESP8266 +byte getButtonTouched() { + if (gfx.touch_Update()) { + ButtonTouched = 0; + int x, y; + x = gfx.touch_GetX(); + y = gfx.touch_GetY(); + if (y > 190 && y < 232) { + if (x > 100 & x < 154) ButtonTouched = 1; + if (x > 170 & x < 225) ButtonTouched = 2; + if (x > 18 & x < 74) ButtonTouched = 3; + if (x > 248 & x < 304) ButtonTouched = 4; + } + } + return ButtonTouched; +} +#endif + +void drawa64Char2(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size) { + if ((x >= 320) || (y >= 240) || (x < 0) || (y < 0)) { + return; + } + if (c == 32) { + gfx.RectangleFilled(x, y, x + 7, y + 7, bg); + return; + } + uint8_t stp; + gfx.setGRAM(x, y, x + 7, y + 7); + uint8_t trow = 0x80; + uint8_t chb; + byte tcount = 0; + uint32_t tfval; + c -= 32; + uint16_t c2pos = c * 8; + for (uint8_t j = 0; j < 8; j++ ) { + chb = pgm_read_byte_near(ROM + 0x3d00 + c2pos + j); + for (uint8_t i = 0; i < 4; i++) { + if (chb & trow) { + tfval1[tcount] = color >> 8; + tcount ++; + tfval1[tcount] = color & 0xff; + tcount ++; + } else { + tfval1[tcount] = bg >> 8; + tcount ++; + tfval1[tcount] = bg & 0xff; + tcount ++; + } + chb <<= 1; + if (chb & trow) { + tfval1[tcount] = color >> 8; + tcount ++; + tfval1[tcount] = color & 0xff; + tcount ++; + } else { + tfval1[tcount] = bg >> 8; + tcount ++; + tfval1[tcount] = bg & 0xff; + tcount ++; + } + chb <<= 1; + trow = 0x80; + } + } + gfx.WriteBytes(tfval1, 128); +} + +byte RdZ80(word16 A) { + ret_byte = 0xff; + if (A >= 0x04c2 && A <= 0x099e && romSel == 0) { + if (A == 0x0556) { + if (!(specfile)) { + ActiveScreen = 2; + lastkeydown = 0; + initial = 1; + breakOut = 1; + exitload = 1; + } + } + if (A == 0x0557) { + while (specfile.read() != 0x13); + specfile.read(); + } + if (A == 0x05ca) return 0x2e; + if (A == 0x05cb) { + fr = specfile.read(); + if (ZX_LOAD_ANIM) borderAnim(fr); + return fr; + } + + if (A == 0x0650) { + fnSTpos = getDE(&state); + fnEntered = 1; + } + if (A == 0x0767) { + if (!(gfx.CheckSD())) { + tapeError(); + return 0; + } + int nl; + kbfile = ""; + for (nl = 0; nl < 10; nl++) { + kbfile = kbfile + (char)RAM[(fnSTpos - 0x4000) + nl]; + } + kbfile.trim(); + if (fnEntered) { +#ifdef ESP32 + kbfile = "/" + kbfile + ".tap"; +#else + kbfile = kbfile + ".tap"; +#endif + if (specfile) { + if ((specfile.position() + 10) > specfile.size()) { + if (RAM[0x5C74 - 0x4000] > 0) specfile.close(); + } + } + if (!(specfile)) { + if (SD.exists(kbfile)) { + if (RAM[0x5C74 - 0x4000] > 0) specfile = SD.open(kbfile, FILE_READ); + } else { + + } + } + + } else { + + } + fnEntered = 0; + } + if (A > 0x05cb && A < 0x05db) return 0x00; + if (A > 0x056a && A < 0x059f) return 0x00; + if (A == 0x098a) { + Theader = true; + specfile.close(); + int nl; + kbfile = ""; + for (nl = 0; nl < 10; nl++) { + kbfile = kbfile + (char)RAM[(fnSTpos - 0x4000) + nl]; + } + kbfile.trim(); + if (kbfile != "") { +#ifdef ESP32 + kbfile = "/" + kbfile + ".tap"; +#else + kbfile = kbfile + ".tap"; +#endif + if (RAM[0x5C74 - 0x4000] < 1) { + if (SD.exists(kbfile)) { + SD.remove(kbfile); + } + loadSDdirInitial = 1; + specfile = SD.open(kbfile, FILE_WRITE); + specfile.write(0x13); specfile.write(0x00); + } + } + } + if (A == 0x099e) { + Theader = false; + } + if (A >= 0x04c2 && A <= 0x053e) { + if (A == 0x0505) { + specfile.write(getL(&state)); + if (ZX_LOAD_ANIM) borderAnim(getL(&state)); + } + if (A == 0x04fb) { + specfile.write(getL(&state)); + if (ZX_LOAD_ANIM) borderAnim(getL(&state)); + } + if (A == 0x04c2) { + if (Theader == false) { + uint16_t tempSDE; + tempSDE = getDE(&state) + 2; + specfile.write(tempSDE & 0xff); + specfile.write(tempSDE >> 8); + } + } + if ((A == 0x053e && Theader == false)) { + specfile.close(); + border(bordcol); + } + if (A == 0x04d8 || A == 0x04db) return 0x00; + if (A == 0x04ea || A == 0x04ed) return 0x00; + if (A == 0x04f2 || A == 0x04f5) return 0x00; + if (A == 0x051c || A == 0x051d) return 0x00; + } + if (A == 0x0802) { + uint16_t DEtemp, IXtemp, Ltemp, bl; + DEtemp = getDE(&state); + Ltemp = (specfile.read() + (specfile.read() << 8)) - 2; + specfile.read(); + IXtemp = getIX(&state); + for (bl = 0; bl < Ltemp; bl++) { + fr = specfile.read(); + if (ZX_LOAD_ANIM) { + if (!(bl % ZX_LOAD_ANIM)) { + borderAnim(fr); + updateSpectrumScreen(); + } + } + if ((IXtemp + bl) >= 0x5800 && (IXtemp + bl) < 0x5b00) { + CACHE[(IXtemp + bl) - 0x5800] = 8; + } + WrZ80(IXtemp + bl, fr); + //RAM[(IXtemp - 0x4000) + bl] = fr; + } + specfile.read(); + setDE(&state, 0); + setIX(&state, IXtemp + DEtemp); +#ifdef ESP8266 + yield(); +#endif + border(bordcol); + return 0xc9; + } + } +#ifdef ESP32 + if (A >= 0x4000 && A <= 0xffff) return RAM[A - 0x4000]; +#else + if (A >= 0x4000 && A <= 0x7fff) return RAM[A - 0x4000]; +#ifdef USE_RAM_DISK + if (A >= 0x8000 && A <= 0xff00) return RAMdisk(RAMDISK_READ, A - 0x8000, 0);//ramDiskRead(A - 0x8000); + if (A >= 0xff00 && A <= 0xffff) return topRam[A - 0xff00]; +#endif +#endif + if (A < 0x4000) { + switch (romSel) { + case 0: + ret_byte = pgm_read_byte(ROM + A); + break; + /* + case 1: + ret_byte = pgm_read_byte(GAME1 + A); + break; + case 2: + ret_byte = pgm_read_byte(GAME2 + A); + break; + case 3: + ret_byte = pgm_read_byte(GAME3 + A); + break; + case 4: + ret_byte = pgm_read_byte(GAME4 + A); + break; + case 5: + ret_byte = pgm_read_byte(GAME5 + A); + break; + case 6: + ret_byte = pgm_read_byte(GAME6 + A); + break; + case 7: + ret_byte = pgm_read_byte(GAME7 + A); + break; + case 8: + ret_byte = pgm_read_byte(GAME8 + A); + break; + case 9: + ret_byte = pgm_read_byte(GAME9 + A); + break; + case 10: + ret_byte = pgm_read_byte(GAME10 + A); + break; + case 11: + ret_byte = pgm_read_byte(GAME11 + A); + break; + case 12: + ret_byte = pgm_read_byte(GAME12 + A); + break; + case 13: + ret_byte = pgm_read_byte(GAME13 + A); + break; + */ + } + } + return ret_byte; +} + +void WrZ80(word16 A, byte V) { +#ifdef ESP32 + if (A >= 0x4000 && A <= 0xffff) { +#else +#ifdef USE_RAM_DISK + if (A >= 0x8000 && A <= 0xff00) RAMdisk(RAMDISK_WRITE, A - 0x8000, V); //ramDiskWrite(A - 0x8000, V); + if (A >= 0xff00 && A <= 0xffff) topRam[A - 0xff00] = V; +#endif + if (A >= 0x4000 && A <= 0x7fff) { +#endif + if (A >= 0x5800 && A < 0x5b00) { + if (RAM[A - 0x4000] != V) CACHE[A - 0x5800] = 8; + } + RAM[A - 0x4000] = V; + if (A >= 0x4000 && A <= 0x5aff) { + UpdateS = 1; + } + } +} + +void OutZ80(register word16 Port, register byte Value) +{ + if ((Port & 0xFF) == 0xFE) { + if ((Value & 0x07) != bordcol) { + border(Value & 0x07); + } else { + if ((Value & 0x10) == 0x10) { +#ifdef ESP32 + dacWrite(25, 10); +#else + digitalWrite(16, 1); +#endif + } + if ( (Value & 0x10) == 0x00) { +#ifdef ESP32 + dacWrite(25, 0); +#else + digitalWrite(16, 0); +#endif + } + } + } +} + +byte InZ80(register word16 Port) +{ + byte ret_wert; + ret_wert = 0xff; + byte kDown; + if ((Port & 0xFF) == 0xFE) { + if (Serial.available() > 0) checkKeyboard(); + chkKeyb = 1; + ret_wert = 0x00; + kDown = ~(Port >> 8); + if (kDown & 0x01) { + ret_wert |= ~(kUpdate[2] & 0x1f); + } + if (kDown & 0x02) { + ret_wert |= ~(kUpdate[3] & 0x1f); + } + if (kDown & 0x04) { + ret_wert |= ~(kUpdate[4] & 0x1f); + } + if (kDown & 0x08) { + ret_wert |= ~(kUpdate[5] & 0x1f); + } + if (kDown & 0x10) { + ret_wert |= ~(kUpdate[6] & 0x1f); + } + if (kDown & 0x20) { + ret_wert |= ~(kUpdate[7] & 0x1f); + } + if (kDown & 0x40) { + ret_wert |= ~(kUpdate[8] & 0x1f); + } + if (kDown & 0x80) { + ret_wert |= ~(kUpdate[9] & 0x1f); + } + ret_wert = 0xE0 | (~(ret_wert)); + } + if (ret_wert != 0xff) lastkeydown = ret_wert; + return (ret_wert); +} + +static void CodesCB(register Z80 * R) +{ + register byte I; + + I = OpZ80(R->PC.W++); + R->ICount -= CyclesCB[I]; + switch (I) + { +#include "CodesCB.h" + } +} + +static void CodesDDCB(register Z80 * R) +{ + register pair J; + register byte I; + +#define XX IX + J.W = R->XX.W + (offset)OpZ80(R->PC.W++); + I = OpZ80(R->PC.W++); + R->ICount -= CyclesXXCB[I]; + switch (I) + { +#include "CodesXCB.h" + } +#undef XX +} + +static void CodesFDCB(register Z80 * R) +{ + register pair J; + register byte I; + +#define XX IY + J.W = R->XX.W + (offset)OpZ80(R->PC.W++); + I = OpZ80(R->PC.W++); + R->ICount -= CyclesXXCB[I]; + switch (I) + { +#include "CodesXCB.h" + } +#undef XX +} + +static void CodesED(register Z80 * R) +{ + register byte I; + register pair J; + + I = OpZ80(R->PC.W++); + R->ICount -= CyclesED[I]; + switch (I) + { +#include "CodesED.h" + case PFX_ED: + R->PC.W--; break; + } +} + +static void CodesDD(register Z80 * R) +{ + register byte I; + register pair J; + +#define XX IX + I = OpZ80(R->PC.W++); + R->ICount -= CyclesXX[I]; + switch (I) + { +#include "CodesXX.h" + case PFX_FD: + case PFX_DD: + R->PC.W--; break; + case PFX_CB: + CodesDDCB(R); break; + } +#undef XX +} + +static void CodesFD(register Z80 * R) +{ + register byte I; + register pair J; + +#define XX IY + I = OpZ80(R->PC.W++); + R->ICount -= CyclesXX[I]; + switch (I) + { +#include "CodesXX.h" + case PFX_FD: + case PFX_DD: + R->PC.W--; break; + case PFX_CB: + CodesFDCB(R); break; + } +#undef XX +} + +void ResetZ80(Z80 * R) +{ + R->PC.W = 0x0000; + R->SP.W = 0xF000; + R->AF.W = 0x0000; + R->BC.W = 0x0000; + R->DE.W = 0x0000; + R->HL.W = 0x0000; + R->AF1.W = 0x0000; + R->BC1.W = 0x0000; + R->DE1.W = 0x0000; + R->HL1.W = 0x0000; + R->IX.W = 0x0000; + R->IY.W = 0x0000; + R->I = 0x00; + R->R = 0x00; + R->IFF = 0x00; + R->ICount = R->IPeriod; + R->IRequest = INT_NONE; + R->IBackup = 0; + + JumpZ80(R->PC.W); +} + +byte getL(Z80 * R) { + return R->HL.B.l; +} + +byte GetB(Z80 * R) { + return R->AF.W >> 8; +} + +uint16_t getHL(register Z80 * R) { + return R->HL.W; +} + +void setCFlag(register Z80 * R) { + R->AF.B.l |= C_FLAG; +} + +void setDE(register Z80 * R, uint16_t v) { + R->DE.W = v; +} + +void setIX(register Z80 * R, uint16_t v) { + R->IX.W = v; +} + +uint16_t getDE(register Z80 * R) { + return R->DE.W; +} + +uint16_t getIX(register Z80 * R) { + return R->IX.W; +} + +void setPC(register Z80 * R, uint16_t addr) { + R->PC.W = addr; +} + +int ExecZ80(register Z80 * R, register int RunCycles) +{ + register byte I; + register pair J; + for (R->ICount = RunCycles;;) + { + while (R->ICount > 0) + { + if (breakOut) { + breakOut = 0; + return (R->ICount); + } + I = OpZ80(R->PC.W++); + R->ICount -= Cycles[I]; + INCR(1); + switch (I) + { +#include "Codes.h" + case PFX_CB: CodesCB(R); break; + case PFX_ED: CodesED(R); break; + case PFX_FD: CodesFD(R); break; + case PFX_DD: CodesDD(R); break; + } + } + if (!(R->IFF & IFF_EI)) return (R->ICount); + else + { + R->IFF = (R->IFF & ~IFF_EI) | IFF_1; + R->ICount += R->IBackup - 1; + if ((R->IRequest != INT_NONE) && (R->IRequest != INT_QUIT)) IntZ80(R, R->IRequest); + } + } +} + +void IntZ80(Z80 * R, word Vector) +{ + if (R->IFF & IFF_HALT) { + R->PC.W++; + R->IFF &= ~IFF_HALT; + } + + if ((R->IFF & IFF_1) || (Vector == INT_NMI)) + { + M_PUSH(PC); + if (R->IAutoReset && (Vector == R->IRequest)) R->IRequest = INT_NONE; + if (Vector == INT_NMI) + { + R->IFF &= ~(IFF_1 | IFF_EI); + R->PC.W = 0x0066; + JumpZ80(0x0066); + return; + } + R->IFF &= ~(IFF_1 | IFF_2 | IFF_EI); + enInt = 0; + if (R->IFF & IFF_IM2) + { + Vector = (Vector & 0xFF) | ((word)(R->I) << 8); + R->PC.B.l = RdZ80(Vector++); + R->PC.B.h = RdZ80(Vector); + JumpZ80(R->PC.W); + return; + } + if (R->IFF & IFF_IM1) { + R->PC.W = 0x0038; + JumpZ80(0x0038); + return; + } + switch (Vector) + { + case INT_RST00: R->PC.W = 0x0000; JumpZ80(0x0000); break; + case INT_RST08: R->PC.W = 0x0008; JumpZ80(0x0008); break; + case INT_RST10: R->PC.W = 0x0010; JumpZ80(0x0010); break; + case INT_RST18: R->PC.W = 0x0018; JumpZ80(0x0018); break; + case INT_RST20: R->PC.W = 0x0020; JumpZ80(0x0020); break; + case INT_RST28: R->PC.W = 0x0028; JumpZ80(0x0028); break; + case INT_RST30: R->PC.W = 0x0030; JumpZ80(0x0030); break; + case INT_RST38: R->PC.W = 0x0038; JumpZ80(0x0038); break; + } + } +} + +void checkKeyboard() { + + if (Serial.available() > 11) { + byte bc; + bc = 0; + Serial.read(kUpdate, 12); + if (kUpdate[0] != 1 && (kUpdate[1] != 2 || kUpdate[1] != 3)) { // out odf sync + for (int q = 0; q < 12; q++) { + if (kUpdate[q] == 1) { + bc = 1; + for (int r = 0; r < 12; r++) { + if (r < q) { + kUpdate[r] = kUpdate[r + q]; + } else { + kUpdate[r] = Serial.read(); + } + } + break; + } + if (bc) break; + } + } + } +} + +void initEMU(byte EMU) { + rCycles = 70000; + bordcol = 0xff; + ResetZ80(&state); + ActiveScreen = 0; +} + +void borderAnim(byte b1) { + byte n, o, i, io, ty; + for (n = 0; n < 5; n++) { + i = 1; + for (o = 0; o < 8; o++) { + if (bAnim[n] & i) { + io = 6; + } else { + io = 1; + } + ty = (48 * n) + (o * 6); + if (ty < 24 || ty >= 216) { + gfx.RectangleFilled(0, ty, 319, ty + 5, pal2[io]); + } else { + gfx.RectangleFilled(0, ty, 31, ty + 5, pal2[io]); + gfx.RectangleFilled(288, ty, 319, ty + 5, pal2[io]); + } + i <<= 1; + } + } + for (n = 0; n < 4; n ++) { + bAnim[n] = bAnim[n + 1]; + } + bAnim[4] = b1; +#ifdef ESP8266 + yield(); +#endif +} + +void border(int v) { + gfx.RectangleFilled(0, 0, 320, 23, pal2[v]); + gfx.RectangleFilled(0, 0, 31, 239, pal2[v]); + gfx.RectangleFilled(288, 0, 319, 239, pal2[v]); + gfx.RectangleFilled(0, 216, 319, 239, pal2[v]); + bordcol = v & 0x07; +} + +void updateSpectrumScreen() { + pos = 0; + for (y = 0; y < 192; y++) { + rect = 0; + len = 0; + xpos = -1; + xcount = 0; + rowcalc = y << 5; + coly = 6144 + ((linepos[y] >> 3) << 5); + fl = 0; + for (n = 0; n < 32; n++) { + if (RAM[coly + n] & 0x80) fl = 1; + } + if (fl == 0 && memcmp(RAM + rowcalc, SCREENCACHE + rowcalc, 32) == 0 && (memcmp(/*RAM + coly*/CACHE + coly - 6144, /*CACHE + coly - 5376*/CACHETEST, 32) == 0)) { + pos += 32; + + } else { + rpos = 0; + chstart = -1; chlen = 0; + for (x = 0; x < 32; x++) { + colbyteaddr = coly + x; + colbyte = RAM[colbyteaddr]; + bright = (colbyte >> 3) & 0x08; + tccol = pal2[(colbyte & 0x07) + bright]; + bccol = pal2[((colbyte >> 3) & 0x07) + bright]; + flsh = colbyte >> 7; + c = RAM[pos + x]; + trow = 0x80; + for (n = 0; n < 8; n++) { + if (c & trow) { + if (flsh) { + if (flash) { + screenline[rpos] = bccol; + } else { + screenline[rpos] = tccol; + } + } else { + screenline[rpos] = tccol; + } + } else { + if (flsh) { + if (flash) { + screenline[rpos] = tccol; + } else { + screenline[rpos] = bccol; + } + } else { + screenline[rpos] = bccol; + } + } + c <<= 1; + rpos ++; + } + if ((SCREENCACHE[rowcalc + x] != RAM[rowcalc + x]) || CACHE[colbyteaddr - 6144] != 0 || flsh) { + if (CACHE[colbyteaddr - 6144] != 0) CACHE[colbyteaddr - 6144] --; + if (chstart == -1) { + chstart = x; + chlen = 1; + } else { + chlen ++; + } + } else { + if (chstart != -1) { + gfx.setGRAM(32 + (chstart << 3), linepos[y] + 24, 32 + (chstart << 3) + (chlen << 3) - 1, linepos[y] + 24); +#ifndef ESP32 + gfx.WrGRAMs16232(screenline + (chstart << 3), chlen << 3); +#else + gfx.WritePixels(screenline + (chstart << 3), chlen << 4); +#endif + chstart = -1; + chlen = 0; + } + } + SCREENCACHE[rowcalc + x] = RAM[rowcalc + x]; + } + if (chstart != -1) { + gfx.setGRAM(32 + (chstart << 3), linepos[y] + 24, 32 + (chstart << 3) + (chlen << 3) - 1, linepos[y] + 24); +#ifndef ESP32 + gfx.WrGRAMs16232(screenline + (chstart << 3), chlen << 3); +#else + gfx.WritePixels(screenline + (chstart << 3), chlen << 4); +#endif + } + pos += 32; + } + } +} + +void tapeError() { + setPC(&state, 0x0644); +} + +void flushTouch() { + for (byte o = 0; o < 10; o++) { + gfx.touch_Update(); + } +} + +void updateCFG() { +#ifdef ESP32 + if (SD.exists("/ZXIOD.cfg")) SD.remove("/ZXIOD.cfg"); + cfg = SD.open("/ZXIOD.cfg", FILE_WRITE); + cfg.write(cassSel); + cfg.close(); +#else + if (SD.exists("ZXIOD.cfg"))SD.remove("ZXIOD.cfg"); + cfg = SD.open("ZXIOD.cfg", FILE_WRITE); + cfg.write(cassSel); + cfg.close(); +#endif +} + +void getCFG() { +#ifdef ESP32 + if (SD.exists("/ZXIOD.cfg")) { + cfg = SD.open("/ZXIOD.cfg", FILE_READ); + cassSel = cfg.read(); + cfg.close(); + } +#else + if (SD.exists("ZXIOD.cfg")) { + cfg = SD.open("ZXIOD.cfg", FILE_READ); + cassSel = cfg.read(); + cfg.close(); + } +#endif +} + +void drawFrame() { + int n, nl; + uint32_t pix2; + int16_t pix1; + gfx.Cls(BLACK); + gfx.setGRAM(287, 105, 319, 194); + nl = 0; + gfx.WrGRAMstart(); + for (n = 0; n < 1484; n++) { + pix2 = pgm_read_byte_near(ZXrainbow + nl++) << 24; + pix2 += (pgm_read_byte_near(ZXrainbow + nl++) << 16); + pix2 += (pgm_read_byte_near(ZXrainbow + nl++) << 8); + pix2 += pgm_read_byte_near(ZXrainbow + nl++); + DISP_SPI_WRITE32(pix2); + } + pix1 += (pgm_read_byte_near(ZXrainbow + nl++) << 8); + pix1 += pgm_read_byte_near(ZXrainbow + nl++); + DISP_SPI_WRITE16(pix1); + gfx.WrGRAMend(); + gfx.setGRAM(247, 191, 319, 239); + nl = 0; + gfx.WrGRAMstart(); + for (n = 0; n < 1788; n++) { + pix2 = pgm_read_byte_near(ZXenter + nl++) << 24; + pix2 += (pgm_read_byte_near(ZXenter + nl++) << 16); + pix2 += (pgm_read_byte_near(ZXenter + nl++) << 8); + pix2 += pgm_read_byte_near(ZXenter + nl++); + DISP_SPI_WRITE32(pix2); + } + pix1 += (pgm_read_byte_near(ZXenter + nl++) << 8); + pix1 += pgm_read_byte_near(ZXenter + nl++); + DISP_SPI_WRITE16(pix1); + gfx.WrGRAMend(); + gfx.setGRAM(16, 190, 73, 231); + nl = 0; + gfx.WrGRAMstart(); + for (n = 0; n < 1218; n++) { + pix2 = pgm_read_byte_near(ZXx + nl++) << 24; + pix2 += (pgm_read_byte_near(ZXx + nl++) << 16); + pix2 += (pgm_read_byte_near(ZXx + nl++) << 8); + pix2 += pgm_read_byte_near(ZXx + nl++); + DISP_SPI_WRITE32(pix2); + } + gfx.WrGRAMend(); + gfx.setGRAM(100, 179, 224, 232); + nl = 0; + gfx.WrGRAMstart(); + for (n = 0; n < 3375; n++) { + pix2 = pgm_read_byte_near(ZX6and7 + nl++) << 24; + pix2 += (pgm_read_byte_near(ZX6and7 + nl++) << 16); + pix2 += (pgm_read_byte_near(ZX6and7 + nl++) << 8); + pix2 += pgm_read_byte_near(ZX6and7 + nl++); + DISP_SPI_WRITE32(pix2); + } + gfx.WrGRAMend(); +} + +void romScreen() { + if (initialR) { + drawFrame(); + printString(2, 0, " ROM Select - list of ROM files ", 6, 0, 0); + kUpdate[8] = 255; + if (prevSel != romSel) romSel = prevSel; + if (romnum < 21) { + strtl = 0; + } else { + strtl = romSel; + } + printFileName(romSel, 1, ZX_EMU_ROM); + kbfile = ""; + } +#ifdef ESP8266 + ButtonTouched = getButtonTouched(); +#endif + if (kUpdate[6] == 215 || (ButtonTouched == 2 && ButtonTouched != lastButtonTouched)) { + romSel --; + kUpdate[6] = 255; + if (romSel < 0) romSel = 0; + if (romSel != oldromSel) { + printFileName(romSel, 1, ZX_EMU_ROM); + oldromSel = romSel; + } + } else if (kUpdate[6] == 207 || (ButtonTouched == 1 && ButtonTouched != lastButtonTouched)) { + romSel ++; + kUpdate[6] = 255; + if (romSel > romnum - 1) romSel = romnum - 1; + if (romSel != oldromSel) { + printFileName(romSel, 1, ZX_EMU_ROM); + oldromSel = romSel; + } + } else { + if (ButtonTouched == 2 || ButtonTouched == 1) { + keyrepeat ++; + } else { + keyrepeat = 0; + } + } + if (kUpdate[2] == 219 || (ButtonTouched == 3 && ButtonTouched != lastButtonTouched)) { + kUpdate[2] = 255; + yield(); + resetScreen(); + ActiveScreen = 0; + prevSel = romSel; + romSel = 0; + if (ButtonTouched == 3) flushTouch(); + } + if (kUpdate[8] == 222 || (ButtonTouched == 4 && ButtonTouched != lastButtonTouched)) { + kUpdate[2] = 255; kUpdate[3] = 255; kUpdate[4] = 255; kUpdate[5] = 255; kUpdate[6] = 255; kUpdate[7] = 255; kUpdate[8] = 255; kUpdate[9] = 255; + //lastkeydown = 222; + ActiveScreen = 0; + resetScreen(); + ResetZ80(&state); + specfile.close(); + if (romnum > 0) { + } + kbfile = ""; + breakOut = 1; + } + initialR = 0; + lastButtonTouched = ButtonTouched; +} + +void cassScreen() { + if (initial) { + drawFrame(); + printString(2, 0, " TAPE Select - list of *.tap files ", 6, 0, 0); + kUpdate[8] = 255; +#ifdef ESP32 + if (loadSDdirInitial) { + File root = SD.open("/"); + File file = root.openNextFile(); + filnum = 0; + while (file) { + tfile = file.name(); + if (tfile.indexOf(".TAP") > -1 || tfile.indexOf(".tap") > -1) { + files[filnum] = tfile; + filnum ++; + } + file = root.openNextFile(); + } + root.close(); + file.close(); + getCFG(); + loadSDdirInitial = 0; + if (cassSel < 0) cassSel = 0; + if (cassSel > filnum) cassSel = filnum; + } +#else + if (loadSDdirInitial) { + pinMode(16, INPUT); + yield(); + File dir = SD.open("/"); + File Entry; + filnum = 0; + while (true) { + Entry = dir.openNextFile(); + if (!(Entry)) { + break; + } + tfile = Entry.name(); + if (tfile.indexOf(".TAP") > -1 || tfile.indexOf(".tap") > -1) { + files[filnum] = tfile; + filnum ++; + } + Entry.close(); + yield(); + } + dir.close(); + pinMode(16, OUTPUT); + getCFG(); + if (cassSel < 0) cassSel = 0; + if (cassSel > filnum) cassSel = filnum; + loadSDdirInitial = 0; + } +#endif + yield(); + if (filnum < 21) { + strtl = 0; + } else { + strtl = cassSel; + } + printFileName(cassSel, 1, ZX_EMU_TAPE); + kbfile = ""; + } +#ifdef ESP8266 + ButtonTouched = getButtonTouched(); +#endif + if (kUpdate[6] == 215 || (ButtonTouched == 2 && ButtonTouched != lastButtonTouched)) { + cassSel --; + kUpdate[6] = 255; + if (cassSel < 0) cassSel = 0; + if (cassSel != oldcassSel) { + printFileName(cassSel, 1, ZX_EMU_TAPE); + oldcassSel = cassSel; + } + } else if (kUpdate[6] == 207 || (ButtonTouched == 1 && ButtonTouched != lastButtonTouched)) { + cassSel ++; + kUpdate[6] = 255; + if (cassSel > filnum - 1) cassSel = filnum - 1; + if (cassSel != oldcassSel) { + printFileName(cassSel, 1, ZX_EMU_TAPE); + oldcassSel = cassSel; + } + } else { + if (ButtonTouched == 2 || ButtonTouched == 1) { + keyrepeat ++; + } else { + keyrepeat = 0; + } + } + if (kUpdate[2] == 219 || (ButtonTouched == 3 && ButtonTouched != lastButtonTouched)) { + kUpdate[2] = 255; + yield(); + if (ButtonTouched == 3) flushTouch(); + updateCFG(); + resetScreen(); + ActiveScreen = 0; + ButtonTouched = 0; + if (exitload == 1) { + ResetZ80(&state); + gfx.Cls(pal2[7]); + } + exitload = 0; + } + if (kUpdate[8] == 222 || (ButtonTouched == 4 && ButtonTouched != lastButtonTouched)) { + kUpdate[2] = 255; kUpdate[3] = 255; kUpdate[4] = 255; kUpdate[5] = 255; kUpdate[6] = 255; kUpdate[7] = 255; kUpdate[8] = 255; kUpdate[9] = 255; + ActiveScreen = 0; + resetScreen(); + specfile.close(); + if (filnum > 0) { + updateCFG(); +#ifdef ESP8266 + kbfile = files[cassSel]; +#else + kbfile = "/" + files[cassSel]; +#endif + if (SD.exists(kbfile)) specfile = SD.open(kbfile, FILE_READ); + } + kbfile = ""; + breakOut = 1; + } + initial = 0; + lastButtonTouched = ButtonTouched; +} + +void printFileName(byte sel, byte sd, byte ftype) { + int n, c, fcount, tlength, filcount, rname, rnpos; + char getchr, endrom; + if (ftype == ZX_EMU_TAPE) { + filcount = filnum; + } else { + filcount = romnum; + rname = 0; + endrom = 0; + } + c = sel; + if (filcount > 20) fcount = 20; + sposf = c; + if (sposf > (strtl + 19)) strtl++; + if (sposf < strtl) strtl--; + endl = strtl + 20; + if (endl > filcount) { + endl = filcount; + } + for (n = 0; n < fcount; n ++) { + if (ftype == ZX_EMU_TAPE) { + tfile = files[strtl + n]; + tlength = tfile.length(); + if (tlength > 32) { + byte strs; + tfile = ""; + for (strs = 0; strs < 32; strs ++) { + tfile = tfile + files[strtl + n].charAt(strs); + } + tlength = 32; + } + } else { + tfile = ""; + tlength = 0; + if (endrom == 0) { + while (1) { + getchr = pgm_read_byte_near(ROMcartridges + rname); + rname++; + tlength ++; + if (getchr != 0) tfile = tfile + (char)getchr; + if (getchr == 0) { + tlength -= 1; + break; + } + } + if (pgm_read_byte_near(ROMcartridges + rname + 1) == 255) { + endrom = 1; + tfile = ""; + tlength = 0; + } + } + } + if (tlength < 32) gfx.RectangleFilled((tlength + 4) << 3 , (2 + n) << 3, 289, ((2 + n) << 3) + 7, BLACK); + if (strtl + n < filcount) { + if (c == (strtl + n)) { + tfile = ">" + tfile + "<"; + printString(2, 2 + n, tfile, 7, 0, 0); + } else { + tfile = " " + tfile + " "; + printString(2, 2 + n, tfile, 6, 0, 0); + } + } + } + lastc = c; +} + +void resetScreen() { + int n; + border(bordcol); + for (n = 0; n < 6144; n++) { + SCREENCACHE[n] = ~(SCREENCACHE[n]); + } + //ActiveScreen = 0; + border(bordcol); +} + +void printString(int x, int y, String cstr, int fcol, int bcol, byte slcted) { + int s; + for (s = 0; s < cstr.length(); s++) { + if (slcted) { + drawa64Char2(((x + s) << 3), (y << 3), cstr.charAt(s), pal1[bcol], pal1[fcol], 1); + } else { + drawa64Char2(((x + s) << 3), (y << 3), cstr.charAt(s), pal1[fcol], pal1[bcol], 1); + } + } +#ifdef ESP8266 + yield(); +#endif +} diff --git a/src/Examples/IoD16kSpectrumEmulator/ReadMe.txt b/src/Examples/IoD16kSpectrumEmulator/ReadMe.txt new file mode 100644 index 0000000..673b138 --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/ReadMe.txt @@ -0,0 +1,25 @@ +16k ZX Spectrum Emulator for IoD. + +A simple emulator for the the gen4-IoD range of displays using GFX4d. The IoD remains connected to the PC and uses the PC keyboard to input using the supplied app. + +Cartridge ROMs can be added into flash by following the commented out method at the top of the sketch. HXD is a good tool to create a .h file from a binary. + +.TAP files can be simply copied to the uSD card. + +In the Extra folder there is a utility to give keyboard control from a PC which communicates keyboard matrix commands to the IoD via the UPA. Simply double click Setup to install the Emulator Keyboard App. + +F1 key launches the ROM menu, F2 launches the .TAP menu. Use the Comms tab to set up the Port of the IoD and then click on Connect. + +The .TAP menu can also be launched by typing LOAD "" into the emulator followed by ENTER. + +Select the .TAP file with the on-screen UP & DOWN buttons on the IoD display or on the PC keyboard 6 & 7 or cursor keys followed by Enter and the .TAP file will start to load. + +Only .TAP files for the 16k Spectrum will function correctly. JETPAC and PHEENIX play very well on the emulator. + +Saving to .TAP is also supported. + +Beep tones are sent to GPIO16 of the IoD and a small amplifier / speaker is all that is needed if sound is required. + +The IoD will make a good basis for a handheld ZX Spectrum project or other emulated machines + + \ No newline at end of file diff --git a/src/Examples/IoD16kSpectrumEmulator/ZX6and7.h b/src/Examples/IoD16kSpectrumEmulator/ZX6and7.h new file mode 100644 index 0000000..5712345 --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/ZX6and7.h @@ -0,0 +1,1126 @@ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x6B, 0x4D, + 0x9C, 0xD3, 0x94, 0x92, 0x94, 0xB2, 0x94, 0x92, 0x94, 0xB2, 0x8C, 0x71, + 0x29, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0xAD, 0x55, 0xC6, 0x18, + 0x18, 0xC3, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x41, 0xD6, 0x9A, 0xE7, 0x1C, + 0xAD, 0x55, 0xB5, 0xB6, 0xB5, 0x96, 0xB5, 0xB6, 0xFF, 0xFF, 0x5A, 0xCB, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x21, 0x24, 0xD6, 0xBA, 0xCE, 0x79, 0xB5, 0xB6, 0xFF, 0xDF, + 0x4A, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x41, 0xCE, 0x59, 0x5A, 0xEB, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xDB, 0x5A, 0xCB, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x0C, + 0xFF, 0xFF, 0xA5, 0x34, 0x00, 0x20, 0x00, 0x00, 0x84, 0x10, 0xFF, 0xFF, + 0x84, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xCE, 0x59, 0x73, 0x8E, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x08, 0x61, 0xE7, 0x1C, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x51, 0xEF, 0x5D, 0x63, 0x0C, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x39, 0xC7, 0xDE, 0xFB, + 0xB5, 0xB6, 0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x29, 0x65, 0x18, 0xE3, + 0x21, 0x24, 0xD6, 0xBA, 0x6B, 0x6D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x61, 0xE7, 0x1C, 0x73, 0x8E, 0x10, 0x82, 0x21, 0x24, 0x29, 0x65, + 0x08, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x31, 0x86, 0xC6, 0x38, 0xFF, 0xFF, 0xB5, 0x96, 0x39, 0xC7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x45, 0x94, 0x92, 0xFF, 0xFF, + 0xE7, 0x1C, 0x42, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x39, 0xE7, 0xD6, 0xBA, 0xEF, 0x7D, 0xDE, 0xDB, + 0xFF, 0xDF, 0x63, 0x2C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x61, + 0xD6, 0xBA, 0xEF, 0x5D, 0xE7, 0x1C, 0xF7, 0x9E, 0x94, 0x92, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xC3, 0xA5, 0x14, + 0xC6, 0x38, 0xAD, 0x55, 0xEF, 0x7D, 0xCE, 0x59, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9C, 0xD3, 0xFF, 0xDF, 0xAD, 0x55, 0xBD, 0xF7, + 0xB5, 0xB6, 0x29, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x21, 0x24, 0xCE, 0x59, 0xFF, 0xFF, 0x63, 0x2C, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x21, 0x04, + 0xC6, 0x18, 0xFF, 0xFF, 0x6B, 0x6D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x41, 0x08, 0x61, 0x00, 0x20, + 0x00, 0x00, 0x84, 0x10, 0xC6, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x94, 0xB2, 0xA5, 0x14, 0x00, 0x00, 0x00, 0x20, 0x08, 0x41, + 0x08, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x94, 0xB2, 0xEF, 0x7D, 0x5A, 0xEB, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xC3, 0xBD, 0xF7, 0xE7, 0x3C, + 0x39, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, + 0x84, 0x10, 0xC6, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9C, 0xD3, 0xA5, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xEB, 0xFF, 0xDF, 0xA5, 0x34, + 0x00, 0x20, 0x42, 0x28, 0xEF, 0x5D, 0xBD, 0xF7, 0x10, 0xA2, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x84, 0x10, + 0xC6, 0x18, 0x00, 0x00, 0x08, 0x61, 0x08, 0x61, 0x00, 0x00, 0x94, 0xB2, + 0xA5, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x31, 0x86, 0xE7, 0x1C, 0xE7, 0x1C, + 0xF7, 0xBE, 0x84, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x7B, 0xCF, 0xFF, 0xFF, + 0xEF, 0x5D, 0xEF, 0x7D, 0xEF, 0x7D, 0xE7, 0x3C, 0xFF, 0xFF, 0xA5, 0x34, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08, 0x41, 0x9C, 0xF3, 0x5A, 0xCB, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x52, 0x8A, 0x52, 0x8A, + 0x52, 0x8A, 0x52, 0x8A, 0x52, 0x8A, 0x52, 0x8A, 0x29, 0x65, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x20, 0x08, 0x20, 0x08, 0x20, 0x08, 0x20, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x20, 0x08, 0x40, 0x08, 0x40, 0x08, 0x40, 0x08, 0x40, + 0x08, 0x40, 0x08, 0x40, 0x08, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x82, 0x52, 0x8A, 0x6B, 0x6E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, + 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, + 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, + 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, + 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, + 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, + 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, + 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x73, 0x8E, 0x6B, 0x6D, + 0x52, 0x8A, 0x10, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x41, 0x4A, 0x49, 0x6B, 0x6E, + 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, + 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, + 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, + 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, + 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, + 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, + 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, 0x6B, 0x8E, + 0x6B, 0x8E, 0x73, 0x8E, 0x6B, 0x6E, 0x5A, 0xAB, 0x20, 0xE3, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x61, 0x6B, 0x4D, + 0x9D, 0x97, 0x9D, 0xF9, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x8D, 0x36, 0x74, 0x52, + 0x6B, 0x6D, 0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x62, 0xEB, 0x95, 0x56, 0x9E, 0x19, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x8D, 0x57, 0x74, 0x52, 0x73, 0xAF, 0x20, 0xE3, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xC7, 0x84, 0x93, 0x8D, 0x77, + 0x9D, 0xF9, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB7, 0x95, 0xB8, 0x85, 0x36, 0x5B, 0xF1, 0x6B, 0xD0, + 0x4A, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x31, 0x65, 0x7C, 0x52, 0x8D, 0x57, 0x9D, 0xF9, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, + 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB8, 0x95, 0xB7, 0x95, 0xB8, + 0x8D, 0x56, 0x64, 0x11, 0x63, 0xD0, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x52, 0x69, 0x74, 0x52, 0x74, 0x73, 0x84, 0xF5, + 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, + 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, + 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, + 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, + 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, + 0x7C, 0xF5, 0x84, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x84, 0xF5, + 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, + 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xB4, 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x07, + 0x74, 0x32, 0x74, 0x73, 0x84, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, + 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, + 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, + 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, + 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, + 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, + 0x7C, 0xF5, 0x7C, 0xF5, 0x84, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, + 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xF5, 0x7C, 0xD4, + 0x63, 0xF0, 0x53, 0x6E, 0x62, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0x94, + 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, + 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, + 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, + 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, + 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, + 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x73, + 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, + 0x74, 0x94, 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, + 0x6C, 0x53, 0x7C, 0xB4, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, + 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, + 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, + 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, + 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x6C, 0x73, 0x6C, 0x53, 0x6C, 0x53, + 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, + 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x73, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, + 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x93, 0x63, 0xD0, + 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xD4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x94, 0x7C, 0xD4, 0xAE, 0x19, + 0xBE, 0x7A, 0xBE, 0x7A, 0xBE, 0x7A, 0xBE, 0x7A, 0xBE, 0x59, 0xB6, 0x19, + 0xB6, 0x39, 0xB6, 0x19, 0xB6, 0x19, 0xB6, 0x39, 0xA5, 0xB8, 0x74, 0x94, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, 0x6C, 0x53, + 0x7C, 0xD4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0xB4, 0xAD, 0xF8, 0xBE, 0x5A, 0xBE, 0x7A, 0xBE, 0x7A, + 0xBE, 0x7A, 0xBE, 0x7A, 0xBE, 0x7A, 0xBE, 0x7A, 0xBE, 0x7A, 0xBE, 0x7A, + 0xBE, 0x59, 0xAD, 0xF8, 0x7C, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, + 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, + 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x93, 0x84, 0xF5, 0xFF, 0xDF, 0xC6, 0xBB, + 0xB6, 0x39, 0xBE, 0x7A, 0xB6, 0x39, 0xE7, 0x5D, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x3C, 0x74, 0x93, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, + 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0xF7, 0xDF, 0xD6, 0xFC, 0xB6, 0x39, 0xBE, 0x5A, 0xB6, 0x5A, + 0xB6, 0x5A, 0xB6, 0x5A, 0xB6, 0x5A, 0xB6, 0x5A, 0xB6, 0x39, 0xF7, 0xBE, + 0xFF, 0xDF, 0x74, 0x94, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, + 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x7C, 0xB4, 0x74, 0x93, 0x84, 0xF5, 0xEF, 0x9E, 0x8D, 0x76, 0x74, 0xB4, + 0x7C, 0xF5, 0x6C, 0x94, 0xBE, 0x7A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xD6, 0xFC, 0x74, 0x93, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, + 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, + 0xF7, 0xBE, 0xA5, 0xD8, 0x6C, 0x94, 0x7C, 0xF5, 0x74, 0xD5, 0x74, 0xD5, + 0x74, 0xD5, 0x74, 0xD5, 0x7C, 0xF5, 0x6C, 0xB4, 0xD7, 0x1C, 0xF7, 0xBE, + 0x74, 0x94, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0x74, 0x93, 0x84, 0xF5, 0xEF, 0x9E, 0x9D, 0xB8, 0x85, 0x15, 0x8D, 0x56, + 0x7D, 0x15, 0xC6, 0xBB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xD6, 0xFC, 0x74, 0x93, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, + 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0xF7, 0xBE, + 0xAE, 0x39, 0x7D, 0x15, 0x8D, 0x56, 0x85, 0x36, 0x85, 0x36, 0x85, 0x36, + 0x85, 0x36, 0x85, 0x36, 0x7C, 0xF5, 0xDF, 0x3D, 0xF7, 0xBE, 0x74, 0x94, + 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x93, + 0x84, 0xF5, 0xEF, 0x9E, 0x95, 0x97, 0x7C, 0xF5, 0x85, 0x36, 0x74, 0xD5, + 0xC6, 0xBB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xD6, 0xFC, 0x74, 0x93, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, + 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0xF7, 0xBE, 0xAE, 0x19, + 0x74, 0xD5, 0x85, 0x36, 0x85, 0x15, 0x85, 0x15, 0x85, 0x36, 0x85, 0x36, + 0x85, 0x36, 0x7C, 0xF5, 0xDF, 0x3D, 0xF7, 0xBE, 0x74, 0x94, 0x74, 0x94, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, + 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0x94, + 0x74, 0x73, 0x74, 0x73, 0x74, 0x94, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x93, 0x84, 0xF5, + 0xEF, 0x9E, 0x9D, 0xB8, 0x85, 0x36, 0x8D, 0x56, 0x85, 0x16, 0xC6, 0x9B, + 0xDF, 0x1C, 0xD6, 0xFC, 0xD7, 0x1C, 0xD6, 0xFC, 0xFF, 0xFF, 0xD7, 0x1C, + 0x74, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, + 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x94, 0x74, 0x73, + 0x74, 0x73, 0x74, 0x73, 0x74, 0x73, 0x74, 0x73, 0x74, 0x73, 0x74, 0x73, + 0x74, 0x73, 0x74, 0x73, 0x74, 0x93, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0xF7, 0xBE, 0xB6, 0x39, 0x85, 0x15, + 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x85, 0x36, 0x85, 0x36, 0x85, 0x36, + 0x7C, 0xF5, 0xDF, 0x3D, 0xF7, 0xBE, 0x74, 0x94, 0x74, 0x94, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, + 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x94, 0x6C, 0x73, 0x84, 0xF5, 0x95, 0x56, + 0x95, 0x56, 0x84, 0xF5, 0x74, 0x73, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x93, 0x84, 0xF5, 0xF7, 0xBE, + 0xF7, 0xBE, 0xEF, 0x9E, 0xEF, 0x9E, 0xF7, 0xBE, 0xE7, 0x5D, 0x7C, 0xF5, + 0x7C, 0xF5, 0x7C, 0xF5, 0x74, 0xD5, 0xEF, 0x9E, 0xDF, 0x1C, 0x74, 0x73, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x7C, 0xD4, 0x95, 0x56, 0x95, 0x56, + 0x95, 0x56, 0x95, 0x56, 0x95, 0x56, 0x95, 0x56, 0x95, 0x56, 0x95, 0x56, + 0x95, 0x56, 0x8D, 0x15, 0x74, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0xB4, 0xEF, 0x7E, 0xF7, 0xDF, 0xEF, 0x9E, 0xEF, 0x9E, + 0xEF, 0x9E, 0xE7, 0x7D, 0x8D, 0x56, 0x85, 0x15, 0x85, 0x36, 0x7C, 0xF5, + 0xDF, 0x3D, 0xF7, 0xBE, 0x74, 0x94, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, + 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, + 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0x74, 0x94, 0x7C, 0xB4, 0xC6, 0x7A, 0xF7, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF7, 0xDF, 0xC6, 0x9A, 0x7C, 0xB4, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x93, 0x84, 0xF5, 0xF7, 0xBE, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x9E, 0x85, 0x36, 0x85, 0x36, + 0x85, 0x36, 0x85, 0x15, 0xEF, 0x9E, 0xDF, 0x1C, 0x74, 0x73, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, + 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, + 0x7C, 0xB4, 0x6C, 0x73, 0x9D, 0xB7, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xD6, 0xFC, 0x74, 0x93, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x7C, 0xB4, 0xEF, 0x7D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF7, 0xDF, 0x8D, 0x56, 0x85, 0x16, 0x85, 0x36, 0x7C, 0xF5, 0xDF, 0x3D, + 0xF7, 0xBE, 0x74, 0x94, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, + 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x94, 0x7C, 0xB4, + 0xDF, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xC6, 0x9A, 0x74, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x7C, 0xB4, 0x74, 0x93, 0x84, 0xF5, 0xF7, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x7E, 0x7D, 0x15, 0x85, 0x15, 0x85, 0x15, + 0x7C, 0xF5, 0xEF, 0x9E, 0xDF, 0x1C, 0x74, 0x73, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, + 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, 0x7C, 0xB4, + 0x6C, 0x73, 0xA5, 0xB8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD6, 0xFC, + 0x74, 0x93, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0xEF, 0x7D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, + 0x8D, 0x56, 0x85, 0x16, 0x85, 0x36, 0x7C, 0xF5, 0xDF, 0x3D, 0xF7, 0xBE, + 0x74, 0x94, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, + 0x7C, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x6C, 0x73, 0xBE, 0x5A, 0xFF, 0xFF, + 0xFF, 0xFF, 0xE7, 0x5D, 0x9D, 0x97, 0xA5, 0xD8, 0xFF, 0xDF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x95, 0x56, 0x74, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0x74, 0x93, 0x84, 0xF5, 0xF7, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xEF, 0x9E, 0x8D, 0x56, 0x8D, 0x77, 0x8D, 0x77, 0x8D, 0x56, + 0xEF, 0x9E, 0xDF, 0x1C, 0x74, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, + 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0x93, + 0x8D, 0x36, 0xC6, 0x9B, 0xC6, 0x9A, 0xC6, 0x9A, 0xC6, 0x9A, 0xC6, 0x7A, + 0xC6, 0x9A, 0xF7, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xA5, 0xD8, 0x74, 0x73, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0xEF, 0x7E, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0x85, 0x36, + 0x7C, 0xF5, 0x7D, 0x15, 0x74, 0xB4, 0xDF, 0x1C, 0xF7, 0xBE, 0x74, 0x94, + 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0x94, 0x7C, 0xD4, 0xEF, 0x9E, 0xFF, 0xFF, 0xFF, 0xDF, + 0x95, 0x56, 0x64, 0x32, 0x6C, 0x53, 0xB6, 0x19, 0xDF, 0x1C, 0xCE, 0xDB, + 0x95, 0x56, 0x74, 0x93, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x93, + 0x84, 0xF5, 0xF7, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, + 0xDF, 0x1C, 0x74, 0x93, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, + 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x94, + 0x6C, 0x53, 0x6C, 0x73, 0x6C, 0x73, 0x6C, 0x73, 0x64, 0x32, 0xA5, 0xD8, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBE, 0x7A, 0x6C, 0x53, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0xEF, 0x7E, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0x1C, 0xD6, 0xFC, + 0xD7, 0x1C, 0xD6, 0xFC, 0xF7, 0xDF, 0xEF, 0x9E, 0x74, 0xB4, 0x74, 0x94, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, + 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xB4, 0x7C, 0xB4, + 0x74, 0x73, 0x95, 0x56, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x3D, 0x74, 0x73, + 0x84, 0xF5, 0x8D, 0x15, 0x7C, 0xB4, 0x6C, 0x53, 0x6C, 0x73, 0x74, 0x94, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x7C, 0xB4, + 0x8D, 0x36, 0x8D, 0x36, 0x8D, 0x36, 0x8D, 0x36, 0x8D, 0x36, 0x8D, 0x36, + 0x95, 0x36, 0x95, 0x36, 0x95, 0x36, 0x95, 0x36, 0x95, 0x36, 0x8D, 0x15, + 0x74, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, + 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x7C, 0xD4, 0x74, 0x94, 0x8D, 0x36, 0xFF, 0xDF, 0xFF, 0xFF, + 0xE7, 0x3D, 0x74, 0x94, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x8D, 0x36, 0x8D, 0x36, 0x8D, 0x36, + 0x8D, 0x36, 0x8D, 0x36, 0x8D, 0x36, 0x95, 0x76, 0x95, 0x77, 0x95, 0x77, + 0x9D, 0x77, 0x95, 0x56, 0x8D, 0x15, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, + 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xB4, 0x7C, 0xB4, 0x6C, 0x73, + 0xA5, 0xD8, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x1C, 0xBE, 0x7A, 0xFF, 0xDF, + 0xFF, 0xDF, 0xEF, 0x9E, 0xB6, 0x39, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, + 0x74, 0x73, 0x74, 0x73, 0x74, 0x73, 0x74, 0x73, 0x74, 0x73, 0x74, 0x73, + 0x74, 0x73, 0x74, 0x73, 0x74, 0x73, 0x74, 0x73, 0x74, 0x93, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x7C, 0xB4, 0x74, 0x73, 0xCE, 0xBB, 0xFF, 0xFF, 0xFF, 0xFF, 0x9D, 0x77, + 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x74, 0x73, 0x74, 0x93, 0x74, 0x73, + 0x74, 0x73, 0x74, 0x73, 0x6C, 0x73, 0x6C, 0x73, 0x6C, 0x73, 0x6C, 0x73, + 0x74, 0x73, 0x74, 0x93, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, + 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, + 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xB4, 0x7C, 0xB4, 0x6C, 0x73, 0xAD, 0xD8, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xC6, 0x9A, 0x74, 0x93, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, + 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x73, + 0x95, 0x56, 0xFF, 0xDF, 0xFF, 0xFF, 0xD6, 0xDC, 0x74, 0x73, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, + 0x6C, 0x73, 0x7C, 0xB4, 0x7C, 0xB4, 0x6C, 0x73, 0xAD, 0xD8, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x5D, 0xA5, 0xB8, 0xBE, 0x39, 0xFF, 0xDF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x9D, 0x77, 0x74, 0x73, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, + 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x6C, 0x73, 0xC6, 0x9B, + 0xFF, 0xFF, 0xFF, 0xFF, 0x9D, 0x77, 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, + 0x7C, 0xB4, 0x7C, 0xB4, 0x6C, 0x73, 0xAD, 0xD8, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xDF, 0x8D, 0x36, 0x6C, 0x53, 0x6C, 0x53, 0xB6, 0x39, 0xFF, 0xFF, + 0xFF, 0xFF, 0xC6, 0x9B, 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x7C, 0x94, + 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, + 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x94, 0x84, 0xF5, 0xF7, 0xBE, 0xFF, 0xFF, + 0xE7, 0x5D, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xB4, + 0x7C, 0xB4, 0x6C, 0x73, 0xA5, 0xB8, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x7D, + 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0x93, 0x9D, 0x77, 0xFF, 0xFF, 0xFF, 0xFF, + 0xD6, 0xDC, 0x74, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x93, + 0x7C, 0x94, 0x74, 0xD4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, + 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x7C, 0xB4, 0x6C, 0x73, 0xA5, 0xD8, 0xFF, 0xFF, 0xFF, 0xFF, 0xBE, 0x5A, + 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x7C, 0x94, 0x7C, 0x93, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, + 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xB4, 0x7C, 0xB4, + 0x74, 0x93, 0x8D, 0x36, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x9E, 0x7C, 0xD4, + 0x74, 0x94, 0x74, 0x73, 0x9D, 0x77, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xDB, + 0x74, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x93, 0xAA, 0xEB, 0xC1, 0xC6, 0xC1, 0xE7, + 0x9B, 0x6E, 0x74, 0xB4, 0x7C, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, + 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0x6C, 0x73, 0xCE, 0xBB, 0xFF, 0xFF, 0xFF, 0xFF, 0x95, 0x77, 0x74, 0x73, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0xC1, 0xE7, + 0xAA, 0xEB, 0x74, 0xD5, 0x7C, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, + 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xD4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x94, 0xE7, 0x5D, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x39, 0x6C, 0x73, + 0x6C, 0x73, 0xC6, 0x9A, 0xFF, 0xFF, 0xFF, 0xFF, 0xB6, 0x39, 0x6C, 0x73, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, + 0x74, 0xD5, 0x9B, 0x6E, 0xD1, 0x44, 0x9B, 0x6E, 0xA3, 0x2D, 0xD1, 0x85, + 0x84, 0x32, 0x74, 0xD4, 0x7C, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x94, 0x74, 0xB4, + 0xE7, 0x5D, 0xFF, 0xFF, 0xF7, 0x9E, 0x84, 0xF5, 0x74, 0x94, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xD4, 0xAA, 0xAA, 0xB2, 0xAA, + 0x74, 0xD5, 0x7C, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, + 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, + 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xD4, 0x74, 0xB4, 0x7C, 0xB4, 0x6C, 0x73, + 0xA5, 0xD8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD6, 0xDB, 0xD6, 0xFC, + 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0x84, 0xF5, 0x74, 0x94, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, 0x74, 0xD5, + 0x8B, 0xD0, 0xC9, 0x85, 0x9B, 0x4D, 0xA3, 0x0C, 0xC9, 0xA5, 0x84, 0x52, + 0x74, 0xB4, 0x7C, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, + 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x93, 0x84, 0xF5, 0xEF, 0x9E, + 0xFF, 0xFF, 0xDF, 0x1C, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0x94, 0x74, 0xB4, 0xAA, 0xCB, 0xA3, 0x2D, 0x74, 0xD5, + 0x7C, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, + 0x6C, 0x73, 0x7C, 0xD4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x93, + 0xBE, 0x5A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF7, 0xDF, 0x9D, 0x97, 0x74, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, 0x74, 0xB4, 0x7C, 0x94, + 0xBA, 0x28, 0xD1, 0x64, 0xC9, 0xC6, 0x8B, 0xD0, 0x6C, 0xF5, 0x74, 0xB4, + 0x74, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, + 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x73, 0x95, 0x77, 0xFF, 0xFF, 0xFF, 0xFF, + 0xD6, 0xFC, 0x74, 0x93, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0x93, 0x9B, 0x6E, 0x7C, 0x73, 0x74, 0xB4, 0x74, 0x94, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, + 0x7C, 0xD4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x73, + 0x9D, 0x97, 0xD6, 0xDB, 0xDF, 0x1C, 0xDF, 0x1C, 0xC6, 0x7A, 0x8D, 0x15, + 0x74, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, 0xB2, 0x89, 0xC1, 0xC6, + 0xBA, 0x28, 0xC9, 0xA6, 0x8B, 0xF0, 0x9B, 0x4E, 0x8B, 0xD0, 0x74, 0xD4, + 0x7C, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, + 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x7C, 0xB4, 0x74, 0x93, 0x8D, 0x36, 0xDF, 0x1C, 0xE7, 0x5D, 0xBE, 0x5A, + 0x74, 0x93, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xD5, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xD4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x73, + 0x6C, 0x73, 0x74, 0x93, 0x74, 0x73, 0x6C, 0x73, 0x74, 0x93, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x7C, 0x94, 0x74, 0xD5, 0x93, 0xAF, 0xD1, 0x64, 0x93, 0xAF, 0x7C, 0x93, + 0xC2, 0x07, 0xC9, 0xC6, 0xC9, 0x85, 0x93, 0x8F, 0x74, 0xD5, 0x7C, 0x94, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, + 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x94, 0x74, 0x73, 0x74, 0x73, 0x74, 0x93, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x7C, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, + 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xD4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, + 0x74, 0xD5, 0x93, 0xAF, 0xD1, 0x64, 0x9B, 0x6E, 0x6C, 0xF5, 0x9B, 0x4D, + 0xD1, 0x64, 0xC9, 0xC6, 0x8B, 0xD0, 0x74, 0xB4, 0x7C, 0x94, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, + 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, + 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xD4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x7C, 0x94, 0xAA, 0xAA, 0xC9, 0xA5, 0xC1, 0xE7, 0xC9, 0xA6, 0xB2, 0x89, + 0xC2, 0x07, 0xBA, 0x28, 0x7C, 0x93, 0x74, 0xB4, 0x7C, 0x94, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, + 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, + 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xD4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x74, 0xB4, + 0x74, 0xB4, 0x8B, 0xF0, 0x93, 0xAF, 0x8B, 0xF0, 0x74, 0xB4, 0x7C, 0x73, + 0x84, 0x52, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, + 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, + 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x74, 0xB4, + 0x74, 0xD5, 0x74, 0xD5, 0x74, 0xD5, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x7C, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, + 0x5B, 0x6E, 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, + 0x7C, 0xD4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, + 0x7C, 0x94, 0x7C, 0x94, 0x74, 0xB4, 0x7C, 0x94, 0x7C, 0x94, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, + 0x52, 0x8A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x42, 0x08, 0x74, 0x31, 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x94, 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x52, 0x8A, 0x74, 0x52, 0x6C, 0x73, 0x7C, 0xD4, + 0x74, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x94, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x5B, 0x6E, 0x52, 0xAA, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x08, + 0x74, 0x32, 0x6C, 0x53, 0x7C, 0xD4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, + 0x63, 0xD0, 0x53, 0x4E, 0x63, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x4A, 0x49, 0x6C, 0x11, 0x63, 0xF1, 0x6C, 0x52, 0x74, 0x72, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x72, 0x6C, 0x52, 0x53, 0x6E, 0x5B, 0x4E, 0x52, 0x69, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xC7, 0x73, 0xF0, + 0x5B, 0xD0, 0x6C, 0x52, 0x74, 0x72, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x72, 0x74, 0x52, 0x5B, 0x8F, + 0x53, 0x2D, 0x5A, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x24, 0x73, 0xCF, 0x53, 0x6E, 0x5B, 0xAF, 0x63, 0xF0, 0x63, 0xD0, + 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, + 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, + 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, + 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, + 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, + 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, + 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, + 0x63, 0xF0, 0x5B, 0x6E, 0x6B, 0x8E, 0x29, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x73, 0x8E, 0x5B, 0x6F, + 0x5B, 0x8F, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, + 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, + 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, + 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, + 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, + 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, + 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, + 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x6B, 0xF0, 0x5B, 0x6E, 0x6B, 0x8E, + 0x31, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x39, 0xE7, 0x6B, 0x6E, 0x6B, 0xAF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0x8E, 0x39, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x85, 0x6B, 0x6D, 0x6B, 0xAF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xAE, 0x4A, 0x28, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0xA2, 0x29, 0x45, 0x29, 0x65, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, + 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, + 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, + 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, + 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, + 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, + 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, + 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x18, 0xA2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 0x29, 0x24, 0x29, 0x45, + 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, + 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, + 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, + 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, + 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, + 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, + 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, 0x29, 0x45, + 0x29, 0x45, 0x29, 0x45, 0x18, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 diff --git a/src/Examples/IoD16kSpectrumEmulator/ZXenter.h b/src/Examples/IoD16kSpectrumEmulator/ZXenter.h new file mode 100644 index 0000000..60f07ee --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/ZXenter.h @@ -0,0 +1,598 @@ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x40, 0xC9, 0xA5, 0xD1, 0xC5, 0xC9, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x65, 0xD3, 0x65, 0xDD, 0xA5, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, + 0xCD, 0x65, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x26, 0x5D, 0x44, 0x34, 0xAE, 0x04, 0x1A, 0x04, 0x38, + 0x04, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x50, 0xC2, 0xD9, 0xE6, 0xC9, 0xC5, 0xC9, 0xC5, 0xC9, 0xC5, + 0xC9, 0xC5, 0xC9, 0xC5, 0xC9, 0xC5, 0xC9, 0xA5, 0xD4, 0xA5, 0xDD, 0x85, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xE5, 0x65, 0xA5, 0x45, 0x4D, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x14, 0x74, 0x04, 0x19, + 0x04, 0x38, 0x04, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA1, 0x23, 0xE1, 0xC5, 0xD1, 0xA5, 0xD9, 0xA5, + 0xD9, 0xA5, 0xD9, 0xA5, 0xD9, 0xA5, 0xD1, 0x65, 0xDA, 0x85, 0xE5, 0xA5, + 0xE5, 0xA5, 0xE5, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0x75, 0x25, 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x5D, 0x24, 0x44, 0xE9, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x31, 0x45, 0x31, 0x65, + 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, + 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, + 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, + 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, + 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, + 0x31, 0x65, 0x29, 0x65, 0x39, 0x65, 0xA2, 0x48, 0xAA, 0x68, 0xAA, 0x48, + 0xAA, 0x48, 0xAA, 0x48, 0xAA, 0x48, 0xAA, 0x68, 0xAA, 0x28, 0xAB, 0x48, + 0xB4, 0xA8, 0xB4, 0x88, 0xCD, 0x07, 0xE5, 0x85, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xE5, 0x65, 0xC5, 0x65, 0x5D, 0x25, 0x55, 0x25, 0x5D, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x5D, 0x24, 0x2C, 0xAF, + 0x04, 0x1A, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x41, 0x5A, 0xCB, 0x8C, 0xB3, 0x8C, 0xF4, + 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, + 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, + 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, + 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, + 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, + 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x7C, 0xD4, 0x7C, 0xD4, + 0x7C, 0xD4, 0x7C, 0xD4, 0x7C, 0xD4, 0x7C, 0xD4, 0x7C, 0xD4, 0x7C, 0xD4, + 0x7C, 0xB4, 0x7C, 0x94, 0x74, 0x53, 0x73, 0xAF, 0xA4, 0x6A, 0xE5, 0x85, + 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0x9D, 0x45, 0x4D, 0x25, 0x5D, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x14, 0x55, 0x04, 0x39, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x49, 0x8C, 0xF4, 0xA6, 0x3A, + 0x9D, 0xF9, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, + 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, + 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, + 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, + 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, + 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x9D, 0xD8, + 0x9D, 0xD8, 0x9D, 0xD8, 0x9D, 0xD8, 0x9D, 0xD8, 0x9D, 0xD8, 0x9D, 0xD8, + 0x9D, 0xD8, 0x9D, 0xD8, 0x9D, 0xF9, 0x8D, 0x56, 0x64, 0x12, 0x63, 0x6F, + 0xBC, 0xC8, 0xE5, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0x75, 0x25, 0x55, 0x25, + 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x5D, 0x24, + 0x44, 0xEA, 0x04, 0x39, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x61, 0x6B, 0x6E, 0x74, 0xB4, + 0x8D, 0x36, 0x8D, 0x77, 0x8D, 0x56, 0x8D, 0x76, 0x8D, 0x56, 0x8D, 0x56, + 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, + 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, + 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, + 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, + 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, + 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, + 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x76, 0x84, 0xF5, 0x63, 0xF0, + 0x53, 0x4F, 0x94, 0x0B, 0xE5, 0x85, 0xE5, 0x65, 0xC5, 0x65, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x26, + 0x5D, 0x24, 0x2C, 0x90, 0x04, 0x1A, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x6B, 0xAE, + 0x6C, 0x32, 0x74, 0x93, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, + 0x5B, 0xB0, 0x4B, 0x0E, 0x8C, 0x0B, 0xDD, 0x85, 0xE5, 0x65, 0x95, 0x45, + 0x4D, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x5D, 0x25, 0x55, 0x26, 0x0C, 0x56, 0x04, 0x39, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, + 0x6B, 0xAE, 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x93, 0x5B, 0xB0, 0x4B, 0x0E, 0x8C, 0x0B, 0xE5, 0x85, 0xDD, 0x65, + 0x6D, 0x25, 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x26, 0x5D, 0x24, 0x3C, 0xCB, 0x04, 0x39, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0xA2, 0x6B, 0xAE, 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x4B, 0x0E, 0x8C, 0x0B, 0xED, 0x85, + 0xBD, 0x45, 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x5D, 0x24, 0x24, 0x91, 0x04, 0x1A, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x4B, 0x0E, 0x8C, 0x0B, + 0xED, 0x85, 0x8D, 0x45, 0x4D, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x5D, 0x25, 0x55, 0x06, 0x0C, 0x57, 0x04, 0x39, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, 0x74, 0x94, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x4B, 0x0E, + 0x94, 0x0B, 0xDD, 0x85, 0x65, 0x25, 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x26, 0x5D, 0x24, 0x3C, 0xCC, 0x04, 0x19, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, + 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x63, 0xB0, + 0x4B, 0x0E, 0x94, 0x0B, 0xBD, 0x65, 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x5D, 0x24, 0x24, 0x92, + 0x04, 0x1A, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x18, + 0x04, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, + 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, + 0x63, 0xB0, 0x4B, 0x0E, 0x9C, 0x0B, 0x8D, 0x65, 0x4D, 0x25, 0x5D, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x5D, 0x25, 0x4D, 0x07, + 0x0C, 0x37, 0x04, 0x39, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x18, 0x04, 0x7A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, + 0x73, 0xAE, 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x93, 0x5B, 0xB0, 0x53, 0x0E, 0x84, 0x0B, 0x6D, 0x45, 0x55, 0x25, + 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x26, 0x5D, 0x24, + 0x34, 0xCD, 0x04, 0x19, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x53, 0x2E, 0x6B, 0xEB, 0x55, 0x45, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x5D, 0x25, 0x1C, 0x73, 0x04, 0x19, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x59, 0x03, 0x74, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x53, 0x2E, 0x6B, 0xEB, + 0x55, 0x45, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x5D, 0x25, 0x4D, 0x08, 0x04, 0x38, 0x04, 0x39, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x18, 0x04, 0x7A, 0x02, 0x2D, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, 0x74, 0x94, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, + 0x6C, 0x73, 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x73, + 0x74, 0xB4, 0x74, 0x73, 0x6C, 0x53, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, + 0x6C, 0x73, 0x6C, 0x73, 0x74, 0xB4, 0x6C, 0x73, 0x6C, 0x53, 0x6C, 0x53, + 0x6C, 0x73, 0x6C, 0x53, 0x6C, 0x53, 0x74, 0x73, 0x6C, 0x73, 0x6C, 0x53, + 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x73, 0x74, 0x94, 0x6C, 0x73, + 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x73, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x53, 0x2E, + 0x6B, 0xEB, 0x55, 0x45, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x26, 0x5D, 0x24, 0x34, 0xAE, 0x04, 0x1A, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x00, 0xC5, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, + 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x94, + 0x7C, 0xD4, 0xB6, 0x19, 0xB6, 0x39, 0xB6, 0x39, 0xB6, 0x39, 0xB6, 0x39, + 0xB6, 0x19, 0x7C, 0xB4, 0xA5, 0xD8, 0xB6, 0x39, 0x7C, 0xD4, 0x74, 0x94, + 0x7C, 0xB4, 0xB6, 0x19, 0xA5, 0xB8, 0x74, 0x94, 0xAE, 0x19, 0xB6, 0x39, + 0xB6, 0x39, 0xB6, 0x39, 0xB6, 0x39, 0xB6, 0x39, 0x9D, 0x77, 0xAD, 0xF8, + 0xB6, 0x39, 0xB6, 0x39, 0xB6, 0x39, 0xB6, 0x39, 0xAE, 0x19, 0x7C, 0xD4, + 0xA5, 0xD8, 0xBE, 0x39, 0xB6, 0x39, 0xB6, 0x39, 0xB6, 0x39, 0x9D, 0xB7, + 0x74, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, + 0x53, 0x2E, 0x6B, 0xEB, 0x55, 0x45, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x5D, 0x25, 0x1C, 0x74, 0x04, 0x19, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x18, 0x04, 0x7A, 0x03, 0x53, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, + 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0x74, 0x93, 0x84, 0xF5, 0xF7, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xF7, 0xDF, 0x84, 0xF5, 0xDF, 0x1C, 0xFF, 0xFF, 0xBE, 0x7A, + 0x6C, 0x53, 0x7C, 0xB4, 0xF7, 0xBF, 0xDF, 0x3D, 0x74, 0x93, 0xF7, 0xBE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC6, 0x7A, + 0xF7, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, + 0x84, 0xF5, 0xDF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xAD, 0xF9, 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0x93, + 0x5B, 0xB0, 0x53, 0x2E, 0x6B, 0xEB, 0x55, 0x45, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x5D, 0x24, 0x4D, 0x09, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x18, 0x04, 0x7A, + 0x01, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, + 0x73, 0xAE, 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x7C, 0xB4, 0x74, 0x93, 0x84, 0xF5, 0xF7, 0xBE, 0xD6, 0xFC, 0x7C, 0xB4, + 0x7C, 0xD5, 0x7C, 0xD4, 0x7C, 0xD4, 0x74, 0xB4, 0xDF, 0x1C, 0xFF, 0xFF, + 0xFF, 0xFF, 0x95, 0x56, 0x74, 0x73, 0xEF, 0x9E, 0xD6, 0xFC, 0x6C, 0x73, + 0x8D, 0x15, 0x84, 0xF5, 0xCE, 0xBB, 0xFF, 0xDF, 0x95, 0x76, 0x84, 0xF5, + 0x85, 0x15, 0xFF, 0xFF, 0xD6, 0xFC, 0x7C, 0xB4, 0x7C, 0xD5, 0x7C, 0xD4, + 0x84, 0xD5, 0x74, 0x94, 0xDF, 0x1C, 0xEF, 0x9E, 0x84, 0xF5, 0x7C, 0xB4, + 0x95, 0x56, 0xFF, 0xDF, 0xDF, 0x3D, 0x74, 0x94, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x93, 0x5B, 0xB0, 0x53, 0x2E, 0x6B, 0xEB, 0x55, 0x45, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x26, 0x5D, 0x24, 0x2C, 0xAF, 0x04, 0x1A, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x39, + 0x04, 0x18, 0x00, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x93, 0x84, 0xF5, 0xF7, 0xBF, 0xDF, 0x3D, + 0x9D, 0x77, 0x9D, 0x97, 0xA5, 0xB7, 0x95, 0x56, 0x74, 0x93, 0xDF, 0x3D, + 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x3C, 0x74, 0x94, 0xEF, 0x9E, 0xDF, 0x1C, + 0x6C, 0x53, 0x74, 0xB4, 0x6C, 0x53, 0xC6, 0x7A, 0xFF, 0xDF, 0x84, 0xF5, + 0x6C, 0x53, 0x84, 0xD5, 0xFF, 0xFF, 0xE7, 0x3D, 0x9D, 0x77, 0x9D, 0x97, + 0xA5, 0xB7, 0x95, 0x56, 0x74, 0x93, 0xDF, 0x3D, 0xF7, 0xBE, 0xA5, 0xB7, + 0x9D, 0x77, 0xB6, 0x19, 0xFF, 0xFF, 0xD6, 0xDC, 0x74, 0x73, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x53, 0x2E, 0x6B, 0xEB, 0x55, 0x45, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x14, 0x55, + 0x04, 0x39, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x18, + 0x04, 0x7A, 0x03, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x93, 0x84, 0xF5, 0xF7, 0x9E, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x3D, 0x6C, 0x73, + 0xE7, 0x5D, 0xEF, 0x7E, 0xB6, 0x39, 0xFF, 0xFF, 0xAD, 0xF8, 0xE7, 0x5D, + 0xDF, 0x1C, 0x6C, 0x73, 0x7C, 0xD4, 0x74, 0x73, 0xC6, 0x9A, 0xFF, 0xDF, + 0x8D, 0x15, 0x74, 0x73, 0x84, 0xF5, 0xF7, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x5D, 0x6C, 0x73, 0xDF, 0x3C, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x1C, 0x8D, 0x36, 0x74, 0x93, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x53, 0x2E, 0x6B, 0xEB, + 0x55, 0x45, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x5D, 0x24, 0x44, 0xE9, + 0x04, 0x39, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x18, 0x04, 0x7A, 0x01, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, 0x74, 0x94, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x93, 0x84, 0xF5, + 0xF7, 0xBF, 0xDF, 0x1C, 0x8D, 0x15, 0x8D, 0x36, 0x8D, 0x36, 0x84, 0xF5, + 0x74, 0x93, 0xE7, 0x5D, 0xF7, 0xBE, 0x74, 0x94, 0xE7, 0x5D, 0xFF, 0xDF, + 0xFF, 0xFF, 0xD6, 0xFC, 0x6C, 0x73, 0x7C, 0xB4, 0x6C, 0x73, 0xC6, 0x7A, + 0xFF, 0xDF, 0x8D, 0x15, 0x6C, 0x73, 0x84, 0xF5, 0xFF, 0xFF, 0xDF, 0x1C, + 0x8D, 0x15, 0x8D, 0x36, 0x8D, 0x36, 0x85, 0x15, 0x74, 0x93, 0xDF, 0x3D, + 0xF7, 0x9E, 0x95, 0x77, 0xD6, 0xFC, 0xFF, 0xFF, 0xAD, 0xD8, 0x6C, 0x53, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x53, 0x2E, + 0x6B, 0xEB, 0x55, 0x45, 0x55, 0x25, 0x55, 0x25, 0x55, 0x26, 0x5D, 0x44, + 0x2C, 0xAF, 0x04, 0x1A, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x39, 0x03, 0xF7, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, + 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x93, + 0x84, 0xF5, 0xF7, 0xBE, 0xD6, 0xFC, 0x84, 0xF5, 0x8D, 0x15, 0x8D, 0x15, + 0x8D, 0x15, 0x7C, 0xB4, 0xDF, 0x3D, 0xF7, 0xBF, 0x74, 0x93, 0x95, 0x56, + 0xFF, 0xFF, 0xFF, 0xFF, 0xD6, 0xDC, 0x6C, 0x73, 0x7C, 0xB4, 0x6C, 0x73, + 0xC6, 0x7A, 0xF7, 0xDF, 0x85, 0x15, 0x6C, 0x73, 0x84, 0xF5, 0xFF, 0xFF, + 0xD6, 0xFC, 0x84, 0xF5, 0x8D, 0x15, 0x8D, 0x15, 0x8D, 0x15, 0x7C, 0xB4, + 0xDF, 0x1C, 0xEF, 0x7E, 0x6C, 0x73, 0x74, 0xB4, 0xE7, 0x7D, 0xFF, 0xFF, + 0x95, 0x56, 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, + 0x53, 0x2E, 0x6B, 0xEB, 0x55, 0x45, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x26, 0x14, 0x55, 0x04, 0x39, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x18, 0x04, 0x7A, 0x02, 0xF1, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, + 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0x74, 0x93, 0x84, 0xF5, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x8D, 0x15, 0xDF, 0x3D, 0xFF, 0xDF, 0x7C, 0xB4, + 0x6C, 0x73, 0xC6, 0x7A, 0xFF, 0xFF, 0xDF, 0x1C, 0x6C, 0x73, 0x7C, 0xB4, + 0x6C, 0x73, 0xCE, 0xBB, 0xFF, 0xFF, 0x8D, 0x15, 0x6C, 0x73, 0x84, 0xF5, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x8D, 0x36, 0xDF, 0x3D, 0xF7, 0xBF, 0x7C, 0xD4, 0x6C, 0x73, 0x95, 0x56, + 0xFF, 0xFF, 0xEF, 0x9E, 0x7C, 0xD5, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0x93, + 0x5B, 0xB0, 0x53, 0x2E, 0x6B, 0xEB, 0x55, 0x45, 0x55, 0x25, 0x55, 0x26, + 0x5D, 0x24, 0x44, 0xEA, 0x04, 0x39, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x18, 0x04, 0x7A, 0x01, 0x89, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, + 0x73, 0xAE, 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x94, 0x7C, 0xB4, 0xAD, 0xD8, 0xAD, 0xF8, 0xAD, 0xF8, + 0xAD, 0xF8, 0xAD, 0xF8, 0xAD, 0xF8, 0x7C, 0xD4, 0x9D, 0x97, 0xAD, 0xD8, + 0x7C, 0xB4, 0x74, 0x94, 0x7C, 0xD5, 0xB6, 0x19, 0x9D, 0x97, 0x74, 0x93, + 0x7C, 0xB4, 0x74, 0x93, 0x95, 0x76, 0xAD, 0xF8, 0x7C, 0xD4, 0x74, 0x94, + 0x7C, 0xD4, 0xAD, 0xF8, 0xAD, 0xF8, 0xAD, 0xF8, 0xAD, 0xF8, 0xAD, 0xF8, + 0xAD, 0xF8, 0x7C, 0xD4, 0x9D, 0x97, 0xAD, 0xD8, 0x74, 0x94, 0x7C, 0xB4, + 0x74, 0x94, 0x9D, 0x97, 0xB6, 0x39, 0x8D, 0x15, 0x74, 0x94, 0x7C, 0xB4, + 0x74, 0x93, 0x5B, 0xB0, 0x53, 0x2E, 0x6B, 0xEB, 0x55, 0x45, 0x55, 0x25, + 0x55, 0x25, 0x5D, 0x24, 0x24, 0x90, 0x04, 0x1A, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x59, 0x03, 0xD6, 0x00, 0x83, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x6C, 0x73, 0x6C, 0x53, + 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, 0x74, 0x94, 0x6C, 0x73, + 0x6C, 0x73, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x94, 0x6C, 0x53, 0x74, 0x73, + 0x7C, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x73, 0x6C, 0x73, 0x74, 0x94, + 0x7C, 0xB4, 0x74, 0x94, 0x6C, 0x73, 0x6C, 0x53, 0x6C, 0x53, 0x6C, 0x53, + 0x6C, 0x53, 0x6C, 0x73, 0x74, 0x94, 0x6C, 0x73, 0x6C, 0x73, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0xB4, 0x6C, 0x73, 0x6C, 0x53, 0x74, 0x94, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x53, 0x2E, 0x6B, 0xEB, 0x55, 0x45, + 0x55, 0x25, 0x5D, 0x25, 0x55, 0x26, 0x0C, 0x56, 0x04, 0x39, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x18, 0x04, 0x7A, 0x02, 0xB0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x53, 0x2E, 0x6B, 0xEB, + 0x55, 0x45, 0x55, 0x26, 0x5D, 0x24, 0x3C, 0xCB, 0x04, 0x39, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x59, + 0x01, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, 0x74, 0x94, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x53, 0x2E, + 0x6B, 0xEB, 0x55, 0x45, 0x55, 0x25, 0x5D, 0x24, 0x24, 0x91, 0x04, 0x1A, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x59, + 0x03, 0xB6, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, + 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, + 0x53, 0x2E, 0x6B, 0xEB, 0x55, 0x45, 0x5D, 0x25, 0x55, 0x07, 0x0C, 0x57, + 0x04, 0x39, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x18, + 0x04, 0x7A, 0x02, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, + 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, + 0x5B, 0xB0, 0x53, 0x2E, 0x6B, 0xEB, 0x55, 0x25, 0x5D, 0x24, 0x3C, 0xCC, + 0x04, 0x19, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x59, 0x01, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, + 0x73, 0xAE, 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x93, 0x5B, 0xB0, 0x53, 0x2E, 0x6B, 0xEB, 0x55, 0x45, 0x5D, 0x24, + 0x1C, 0x72, 0x04, 0x19, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x18, 0x04, 0x59, 0x03, 0x95, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x53, 0x2E, 0x6B, 0xEC, 0x5D, 0x44, + 0x4D, 0x07, 0x0C, 0x37, 0x04, 0x39, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x18, 0x04, 0x7A, 0x02, 0x4E, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, 0x74, 0x94, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x53, 0x2E, 0x6B, 0xEC, + 0x5D, 0x43, 0x34, 0xCD, 0x04, 0x1A, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x39, 0x01, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x6B, 0xAE, 0x6C, 0x32, 0x74, 0x93, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, 0x53, 0x2E, + 0x6B, 0xEB, 0x5D, 0x44, 0x1C, 0x73, 0x04, 0x19, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x59, 0x03, 0x74, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x73, 0xAE, 0x6C, 0x52, + 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x93, 0x5B, 0xB0, + 0x53, 0x2E, 0x6B, 0xEB, 0x4D, 0x08, 0x04, 0x38, 0x04, 0x39, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x18, 0x04, 0x7A, 0x02, 0x2C, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xA2, 0x6B, 0x8E, + 0x6C, 0x32, 0x74, 0x73, 0x74, 0x94, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, + 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, + 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, + 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, + 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, + 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, + 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, + 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x93, 0x74, 0x73, + 0x5B, 0xAF, 0x53, 0x0E, 0x74, 0x0A, 0x34, 0xCD, 0x04, 0x1A, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x00, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, + 0x63, 0x2C, 0x63, 0xD0, 0x5B, 0xAF, 0x6C, 0x11, 0x6C, 0x31, 0x6C, 0x31, + 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, + 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, + 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, + 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, + 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, + 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, + 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, 0x6C, 0x31, + 0x6C, 0x31, 0x53, 0x6E, 0x5A, 0xEE, 0x6C, 0x4A, 0x14, 0x74, 0x04, 0x19, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x18, 0x04, 0x7A, + 0x03, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x31, 0x86, 0x73, 0xAF, 0x5B, 0x8F, 0x63, 0xD0, 0x6B, 0xD0, + 0x6B, 0xD0, 0x6B, 0xD0, 0x6B, 0xD0, 0x6B, 0xD0, 0x6B, 0xD0, 0x6B, 0xD0, + 0x6B, 0xD0, 0x6B, 0xD0, 0x6B, 0xD0, 0x6B, 0xD0, 0x6B, 0xD0, 0x6B, 0xD0, + 0x6B, 0xD0, 0x6B, 0xD0, 0x6B, 0xD0, 0x6B, 0xD0, 0x6B, 0xD0, 0x6B, 0xD0, + 0x6B, 0xD0, 0x6B, 0xD0, 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, + 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xB0, 0x63, 0xB0, + 0x63, 0xB0, 0x63, 0xB0, 0x63, 0xB0, 0x63, 0xB0, 0x63, 0xB0, 0x63, 0xB0, + 0x63, 0xB0, 0x63, 0xB0, 0x63, 0xB0, 0x63, 0xB0, 0x63, 0xB0, 0x63, 0xB0, + 0x63, 0xB0, 0x6B, 0xD0, 0x63, 0x4F, 0x73, 0x8C, 0x4C, 0xCA, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x18, + 0x04, 0x7A, 0x01, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x45, 0x5A, 0xAB, 0x63, 0x0C, + 0x63, 0x0C, 0x63, 0x0C, 0x63, 0x0C, 0x63, 0x0C, 0x63, 0x0C, 0x63, 0x0C, + 0x63, 0x0C, 0x63, 0x0C, 0x63, 0x0C, 0x63, 0x0C, 0x63, 0x0C, 0x63, 0x0C, + 0x63, 0x0C, 0x63, 0x0C, 0x63, 0x0C, 0x63, 0x0C, 0x63, 0x0C, 0x63, 0x0C, + 0x63, 0x0C, 0x63, 0x0C, 0x6B, 0x2C, 0x7B, 0x4D, 0x7B, 0x4D, 0x7B, 0x4D, + 0x7B, 0x4D, 0x7B, 0x4D, 0x7B, 0x4D, 0x7B, 0x4D, 0x7B, 0x4D, 0x7B, 0x8D, + 0x7B, 0xAD, 0x7B, 0xAD, 0x7B, 0xAD, 0x7B, 0xAD, 0x7B, 0xAD, 0x7B, 0xAD, + 0x7B, 0xAD, 0x7B, 0xAD, 0x7B, 0xAD, 0x6B, 0xAD, 0x6B, 0xAD, 0x6B, 0xAD, + 0x6B, 0xAD, 0x6B, 0xAD, 0x6B, 0xAD, 0x6C, 0x0B, 0x65, 0x05, 0x2C, 0xAE, + 0x04, 0x1A, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x39, 0x04, 0x18, 0x00, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x41, 0x08, 0x41, 0x08, 0x41, 0x08, 0x41, 0x08, 0x41, 0x08, 0x41, + 0x08, 0x41, 0x08, 0x41, 0x08, 0x41, 0x08, 0x41, 0x08, 0x41, 0x08, 0x41, + 0x08, 0x41, 0x08, 0x41, 0x08, 0x41, 0x08, 0x41, 0x08, 0x41, 0x08, 0x41, + 0x08, 0x41, 0x08, 0x41, 0x00, 0x41, 0x60, 0xE2, 0xD9, 0xE6, 0xC9, 0xC5, + 0xC9, 0xC5, 0xC9, 0xC5, 0xC9, 0xC5, 0xC9, 0xC5, 0xC9, 0xC5, 0xC9, 0xC5, + 0xDC, 0xA5, 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0xA5, 0x45, 0x55, 0x25, 0x5D, 0x25, + 0x5D, 0x25, 0x5D, 0x25, 0x5D, 0x25, 0x5D, 0x26, 0x55, 0x45, 0x55, 0x25, + 0x14, 0x55, 0x04, 0x19, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x18, 0x04, 0x7A, 0x03, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x44, 0xD9, 0xC5, + 0xC9, 0xA5, 0xD1, 0xA5, 0xD1, 0xA5, 0xD1, 0xA5, 0xD1, 0xC5, 0xD1, 0x85, + 0xD2, 0x85, 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0x75, 0x25, 0x4D, 0x25, + 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x5D, 0x24, + 0x44, 0xEA, 0x04, 0x39, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x18, 0x04, 0x7A, 0x01, 0xAA, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x61, 0xD1, 0xC5, + 0xD1, 0xC5, 0xC9, 0xC5, 0xC9, 0xC5, 0xC9, 0xC5, 0xC9, 0xC5, 0xD1, 0xC5, + 0xC9, 0x85, 0xD3, 0xC5, 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0xC5, 0x65, 0x55, 0x25, + 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x26, + 0x5D, 0x24, 0x2C, 0xB0, 0x04, 0x1A, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x39, 0x03, 0xF7, 0x00, 0x62, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE2, + 0xD9, 0xE6, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xA5, 0xD1, 0xC5, 0xDC, 0xE5, 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0x9D, 0x45, + 0x4D, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x5D, 0x25, 0x55, 0x26, 0x14, 0x56, 0x04, 0x39, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x18, 0x04, 0x7A, 0x02, 0xD1, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0xA9, 0x64, 0xD9, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xC9, 0x85, 0xD2, 0xA5, 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0x6D, 0x25, 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x26, 0x5D, 0x24, 0x44, 0xEA, 0x04, 0x39, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x7A, 0x01, 0x88, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x61, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, 0xD3, 0xE5, 0xDD, 0xA5, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, + 0xBD, 0x65, 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x5D, 0x24, 0x24, 0x91, 0x04, 0x1A, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x59, 0x03, 0xD6, + 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x70, 0xE3, 0xD9, 0xE6, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xA5, 0xD1, 0xE5, 0xDD, 0x05, 0xDD, 0x85, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xE5, 0x65, 0x95, 0x45, 0x4D, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x5D, 0x25, 0x55, 0x06, 0x0C, 0x56, 0x04, 0x39, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x18, 0x04, 0x7A, + 0x02, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x00, 0xB1, 0x84, 0xD1, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, 0xD2, 0xE5, 0xDD, 0x85, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0x6D, 0x25, 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x5D, 0x24, 0x3C, 0xCB, 0x04, 0x19, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x04, 0x59, 0x01, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 diff --git a/src/Examples/IoD16kSpectrumEmulator/ZXrainbow.h b/src/Examples/IoD16kSpectrumEmulator/ZXrainbow.h new file mode 100644 index 0000000..63b30d2 --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/ZXrainbow.h @@ -0,0 +1,496 @@ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x81, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x81, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0xB9, 0x85, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x82, 0xD9, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x23, 0xD9, 0xE6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x20, 0xC1, 0xA5, 0xD1, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xA2, 0xD9, 0xC5, 0xC9, 0xA5, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x91, 0x44, 0xD9, 0xC6, 0xC9, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x40, 0xC1, 0xA5, 0xD1, 0xC5, 0xC9, 0xC5, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0xC2, + 0xD9, 0xE6, 0xC9, 0xA5, 0xD1, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x99, 0x44, 0xD9, 0xC6, 0xC9, 0xA5, 0xD1, 0xC5, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x41, 0xC9, 0xA5, + 0xD1, 0xC5, 0xC9, 0xC5, 0xD1, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x60, 0xC2, 0xD9, 0xE6, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x64, 0xD9, 0xC5, + 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x28, 0x61, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE3, 0xD9, 0xE6, 0xC9, 0xA5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0xA9, 0x64, 0xD9, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x61, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x03, + 0xD9, 0xE6, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x00, 0xB1, 0x84, 0xD1, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x81, 0xD9, 0xC5, + 0xC9, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x81, 0x03, 0xD9, 0xE6, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0xB9, 0x85, 0xD1, 0xC5, + 0xC9, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0xA2, 0xD9, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x23, 0xD9, 0xE6, 0xC9, 0xA5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xA5, 0xD2, 0x25, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x20, + 0xC1, 0xA5, 0xD1, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xC9, 0x85, 0xD3, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x50, 0xA2, 0xD9, 0xC6, 0xC9, 0xA5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xA5, 0xDC, 0x85, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x44, + 0xD9, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xC9, 0x85, 0xD2, 0x65, 0xDD, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x18, 0x40, 0xC9, 0xA5, 0xD1, 0xC5, 0xC9, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x65, 0xD3, 0x85, 0xDD, 0xA5, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0xC2, 0xD9, 0xC6, + 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xA5, 0xDC, 0xA5, 0xDD, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x99, 0x44, 0xD9, 0xC6, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0x85, 0xD2, 0x85, 0xDD, 0x65, 0xDD, 0x65, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x41, 0xC9, 0xA5, 0xD1, 0xC5, + 0xC9, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, + 0xD3, 0xA5, 0xDD, 0xA5, 0xDD, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0xC2, 0xD9, 0xE6, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xA5, 0xD1, 0xC5, 0xDC, 0xC5, 0xDD, 0x85, 0xDD, 0x65, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0x64, 0xD9, 0xC5, 0xC9, 0xA5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, 0xD2, 0xA5, + 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x61, + 0xD1, 0xC5, 0xC9, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xC9, 0x85, 0xD3, 0xE5, 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x70, 0xE3, 0xD9, 0xC6, 0xC9, 0xA5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xA5, 0xD1, 0xE5, 0xDC, 0xE5, + 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0xA9, 0x64, + 0xD9, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xC9, 0x85, 0xD2, 0xC5, 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x61, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, 0xDC, 0x05, 0xDD, 0xA5, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x03, 0xD9, 0xE6, + 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xA5, + 0xD2, 0x05, 0xDD, 0x25, 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x20, 0xB1, 0x85, 0xD1, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, 0xD3, 0x05, 0xDD, 0xA5, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0xD9, 0xC5, 0xC9, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0x85, + 0xDC, 0x45, 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x81, 0x23, 0xD9, 0xC6, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xC9, 0xA5, 0xD2, 0x25, 0xDD, 0x25, 0xDD, 0x85, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0xB9, 0x85, 0xD1, 0xC5, 0xC9, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, 0xD3, 0x25, + 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xA2, + 0xD9, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xC9, 0xA5, 0xDC, 0x65, 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x89, 0x23, 0xD9, 0xC6, 0xC9, 0xA5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xA5, 0xD2, 0x45, 0xDD, 0x45, + 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x20, 0xC1, 0xA5, + 0xD1, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xC9, 0x85, 0xD3, 0x65, 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x50, 0xA2, 0xD9, 0xE6, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xA5, 0xDC, 0x85, 0xDD, 0xA5, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x44, 0xD9, 0xC6, + 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, + 0xD2, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x41, 0xC9, 0xA5, 0xD1, 0xC5, 0xC9, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, 0xD3, 0x85, 0xDD, 0xA5, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0xC2, 0xD9, 0xC6, 0xC9, 0xA5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xDC, 0xA5, 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x99, 0x44, 0xD9, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xC9, 0x85, 0xD2, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x28, 0x41, 0xC9, 0xA5, 0xD1, 0xC5, 0xC9, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, 0xD3, 0xC5, + 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xE5, 0x65, 0xC5, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xC2, + 0xD9, 0xE6, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xA5, 0xD1, 0xC5, 0xDC, 0xE5, 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0x9D, 0x45, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA9, 0x64, 0xD9, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, 0xD2, 0xA5, 0xDD, 0x85, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0x6D, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x61, 0xD1, 0xC5, + 0xC9, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xC9, 0x85, 0xD3, 0xE5, 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0xBD, 0x65, 0x55, 0x25, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x70, 0xE3, 0xD9, 0xE6, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xA5, 0xD1, 0xE5, 0xDD, 0x05, 0xDD, 0x85, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xE5, 0x65, 0x95, 0x45, 0x4D, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0xB1, 0x64, 0xD9, 0xC5, + 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, + 0xD2, 0xE5, 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0x6D, 0x25, 0x55, 0x25, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x81, 0xD1, 0xC5, 0xC9, 0xC5, 0xC9, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, 0xDC, 0x05, 0xDD, 0xA5, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, + 0xBD, 0x45, 0x55, 0x25, 0x5D, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x03, 0xD9, 0xE6, 0xC9, 0xA5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xA5, 0xD2, 0x05, + 0xDD, 0x25, 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0x8D, 0x45, 0x4D, 0x25, 0x5D, 0x25, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0xB9, 0x85, 0xD1, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xC9, 0x85, 0xD3, 0x05, 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xD5, 0x65, + 0x65, 0x25, 0x55, 0x25, 0x5D, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0xD9, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0x85, 0xDC, 0x45, + 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xE5, 0x65, 0xB5, 0x45, 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x23, + 0xD9, 0xE6, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xA5, 0xD2, 0x25, 0xDD, 0x45, 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0x85, 0x45, + 0x4D, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x20, 0xB9, 0x85, 0xD1, 0xC5, 0xC9, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, 0xD3, 0x45, 0xDD, 0xA5, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xD5, 0x65, 0x65, 0x25, 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xA2, 0xD9, 0xC6, + 0xC9, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xC9, 0xA5, 0xDC, 0x65, 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0xAD, 0x45, 0x4D, 0x25, + 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x89, 0x23, 0xD9, 0xE6, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xA5, 0xD2, 0x45, 0xDD, 0x45, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xE5, 0x65, 0x7D, 0x45, 0x4D, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x20, 0xC1, 0xA5, 0xD1, 0xC5, + 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x65, + 0xD3, 0x65, 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0xCD, 0x65, 0x5D, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x50, 0xA2, 0xD9, 0xE6, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xA5, 0xDC, 0xA5, 0xDD, 0xA5, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, + 0xA5, 0x45, 0x4D, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x44, 0xD9, 0xC5, 0xC9, 0xA5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, 0xD2, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0x7D, 0x45, 0x55, 0x25, 0x5D, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x41, + 0xC9, 0xA5, 0xD1, 0xC5, 0xC9, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xC9, 0x85, 0xD3, 0xA5, 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0xC5, 0x65, + 0x5D, 0x25, 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0xC2, 0xD9, 0xE6, 0xC9, 0xA5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xA5, 0xD1, 0xC5, 0xDC, 0xC5, + 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xE5, 0x65, 0x9D, 0x45, 0x4D, 0x25, 0x5D, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x64, + 0xD9, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xC9, 0x85, 0xD2, 0x85, 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0x75, 0x25, + 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x28, 0x61, 0xC9, 0xC5, 0xD1, 0xC5, 0xC9, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, 0xD3, 0xC5, 0xDD, 0xA5, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xE5, 0x65, 0xC5, 0x65, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xE2, 0xD9, 0xE6, + 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xA5, + 0xD1, 0xC5, 0xDC, 0xE5, 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0x95, 0x45, 0x4D, 0x25, + 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x5D, 0x25, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xA9, 0x64, 0xD9, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, 0xD2, 0xC5, 0xDD, 0x85, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0x6D, 0x25, 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x5D, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x61, 0xD1, 0xC5, 0xC9, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, + 0xD4, 0x05, 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0xBD, 0x65, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x5D, 0x24, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x71, 0x03, 0xD9, 0xE6, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xA5, 0xD1, 0xE5, 0xDD, 0x05, 0xDD, 0x85, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, + 0x95, 0x45, 0x4D, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x5D, 0x25, 0x55, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0xB1, 0x84, 0xD9, 0xC5, 0xC9, 0xA5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, 0xD2, 0xE5, + 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xD5, 0x65, 0x6D, 0x25, 0x55, 0x25, 0x5D, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x26, 0x5D, 0x24, 0x3C, 0xCB, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x81, + 0xD1, 0xC5, 0xC9, 0xC5, 0xC9, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xC9, 0x85, 0xDC, 0x25, 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0xB5, 0x45, + 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x5D, 0x24, 0x24, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x79, 0x03, 0xD9, 0xE6, 0xC9, 0xA5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xA5, 0xD2, 0x05, 0xDD, 0x25, + 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xE5, 0x65, 0x8D, 0x45, 0x4D, 0x25, 0x5D, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x5D, 0x25, 0x4D, 0x07, 0x0C, 0x37, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0xB9, 0x85, + 0xD1, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xC9, 0x85, 0xD3, 0x05, 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xD5, 0x65, 0x65, 0x25, + 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x26, + 0x5D, 0x24, 0x3C, 0xCC, 0x04, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x81, 0xD9, 0xC5, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0x85, 0xDC, 0x45, 0xDD, 0xA5, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xE5, 0x65, 0xB5, 0x45, 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x5D, 0x24, 0x1C, 0x73, 0x04, 0x19, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x23, 0xD9, 0xE5, + 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xA5, + 0xD2, 0x25, 0xDD, 0x45, 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0x85, 0x45, 0x4D, 0x25, + 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x5D, 0x25, + 0x4D, 0x08, 0x0C, 0x38, 0x04, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x20, 0xC1, 0xA5, 0xD1, 0xC5, 0xC9, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x85, 0xD3, 0x45, 0xDD, 0xA5, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, + 0xD5, 0x65, 0x65, 0x25, 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x26, 0x5D, 0x44, 0x34, 0xAD, 0x04, 0x1A, 0x04, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xA2, 0xD9, 0xC5, 0xC9, 0xA5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xA5, + 0xDC, 0x85, 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0xAD, 0x45, 0x4D, 0x25, 0x5D, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x5D, 0x25, + 0x1C, 0x74, 0x04, 0x19, 0x04, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x91, 0x24, 0xD9, 0xC6, 0xC9, 0xA5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, + 0xD1, 0xC5, 0xD1, 0xA5, 0xD2, 0x45, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, + 0x7D, 0x45, 0x4D, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x5D, 0x24, 0x4D, 0x08, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x40, 0xC9, 0xA5, 0xD1, 0xC5, 0xC9, 0xC5, + 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xD1, 0xC5, 0xC9, 0x65, 0xD3, 0x65, + 0xDD, 0xA5, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xE5, 0x65, 0xCD, 0x65, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x26, 0x5D, 0x44, 0x34, 0xAE, + 0x04, 0x1A, 0x04, 0x38, 0x04, 0x38, 0x00, 0x00, 0x00, 0x00, 0x50, 0xC2, + 0xD9, 0xE6, 0xC9, 0xC5, 0xC9, 0xC5, 0xC9, 0xC5, 0xC9, 0xC5, 0xC9, 0xC5, + 0xC9, 0xC5, 0xC9, 0xA5, 0xD4, 0xA5, 0xDD, 0x85, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0xA5, 0x45, + 0x4D, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x14, 0x74, 0x04, 0x19, 0x04, 0x38, 0x04, 0x38, + 0x00, 0x00, 0x00, 0x00, 0xA1, 0x23, 0xE1, 0xC5, 0xD1, 0xA5, 0xD9, 0xA5, + 0xD9, 0xA5, 0xD9, 0xA5, 0xD9, 0xA5, 0xD1, 0x65, 0xDA, 0x85, 0xE5, 0xA5, + 0xE5, 0xA5, 0xE5, 0x85, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, + 0xDD, 0x65, 0xDD, 0x65, 0x75, 0x25, 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, + 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x5D, 0x24, 0x44, 0xE9, 0x04, 0x38, + 0x04, 0x38, 0x04, 0x38, 0x04, 0x38, 0x29, 0x65, 0x39, 0x65, 0xA2, 0x48, + 0xAA, 0x68, 0xAA, 0x48, 0xAA, 0x48, 0xAA, 0x48, 0xAA, 0x48, 0xAA, 0x68, + 0xAA, 0x28, 0xAB, 0x48, 0xB4, 0xA8, 0xB4, 0x88, 0xCD, 0x07, 0xE5, 0x85, + 0xDD, 0x65, 0xDD, 0x65, 0xDD, 0x65, 0xE5, 0x65, 0xC5, 0x65, 0x5D, 0x25, + 0x55, 0x25, 0x5D, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, 0x55, 0x25, + 0x5D, 0x24, 0x2C, 0xAF, 0x04, 0x1A, 0x04, 0x38, 0x04, 0x38, 0x04, 0x38 diff --git a/src/Examples/IoD16kSpectrumEmulator/ZXx.h b/src/Examples/IoD16kSpectrumEmulator/ZXx.h new file mode 100644 index 0000000..69dda5a --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/ZXx.h @@ -0,0 +1,407 @@ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, + 0x08, 0x80, 0x00, 0x40, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x60, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x41, 0x29, 0x24, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, + 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, + 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, + 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, + 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, + 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, + 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, + 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x31, 0x65, 0x29, 0x45, + 0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xC3, 0x6B, 0x4D, 0x8C, 0xF4, + 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, + 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, + 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, + 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, + 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, + 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, + 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, + 0x8C, 0xF4, 0x8C, 0xF4, 0x8C, 0xF4, 0x84, 0x72, 0x73, 0x8E, 0x29, 0x45, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x20, 0x63, 0x0C, 0x95, 0x56, 0xA6, 0x3A, 0x9D, 0xD9, 0x95, 0xD8, + 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, + 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, + 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, + 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, + 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, + 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, + 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, 0x95, 0xD8, + 0x95, 0xD8, 0x7C, 0xF5, 0x6C, 0x11, 0x73, 0x8E, 0x18, 0xA2, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xC3, 0x73, 0xF0, + 0x74, 0xB4, 0x8D, 0x57, 0x8D, 0x77, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, + 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, + 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, + 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, + 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, + 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, + 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, + 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x56, 0x8D, 0x76, 0x7C, 0xB4, + 0x5B, 0xAF, 0x6B, 0xAF, 0x39, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, 0x6C, 0x32, 0x7C, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x73, 0x53, 0x6F, 0x63, 0x8E, + 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x04, 0x74, 0x10, 0x6C, 0x52, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0x73, + 0x74, 0x73, 0x74, 0x73, 0x74, 0x93, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x93, 0x74, 0x73, 0x74, 0x73, 0x74, 0x93, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x73, 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, + 0x6C, 0x52, 0x7C, 0xB4, 0x7C, 0xB4, 0x8D, 0x36, 0x8D, 0x36, 0x95, 0x36, + 0x84, 0xF5, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x94, + 0x8D, 0x15, 0x8D, 0x36, 0x8D, 0x36, 0x8D, 0x36, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, 0x7C, 0x94, 0x7C, 0x94, 0x7C, 0x94, + 0x7C, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x73, + 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, 0x6C, 0x32, 0x7C, 0xB4, + 0x74, 0x93, 0xCE, 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBE, 0x84, 0xF5, + 0x74, 0x93, 0x7C, 0xB4, 0x74, 0x73, 0x8D, 0x36, 0xF7, 0xDF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xBE, 0x7A, 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, + 0x74, 0xB4, 0x74, 0xF5, 0x6C, 0xF5, 0x74, 0xF5, 0x74, 0xB4, 0x7C, 0x94, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x73, 0x53, 0x6F, 0x63, 0x8E, + 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x04, 0x74, 0x10, 0x6C, 0x32, 0x7C, 0xB4, 0x74, 0x94, 0x84, 0xF5, + 0xEF, 0x9E, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xDB, 0x74, 0x73, 0x7C, 0xB4, + 0x74, 0x94, 0xDF, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x5D, 0x74, 0xB4, + 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, 0x74, 0xD4, 0x84, 0x52, 0xA3, 0x0C, + 0xAA, 0xAB, 0xA3, 0x2D, 0x7C, 0x73, 0x74, 0xD4, 0x7C, 0x94, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x73, 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, + 0x6C, 0x32, 0x7C, 0xB4, 0x7C, 0xB4, 0x6C, 0x73, 0xA5, 0xD8, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xAD, 0xD8, 0x64, 0x32, 0xB6, 0x19, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x95, 0x56, 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, + 0x74, 0xB4, 0x84, 0x11, 0xC1, 0xC6, 0xBA, 0x28, 0xA3, 0x0C, 0xC2, 0x07, + 0xC1, 0xE7, 0x84, 0x52, 0x74, 0xB4, 0x7C, 0x94, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x73, + 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, 0x6C, 0x32, 0x7C, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0x73, 0xD6, 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, + 0xEF, 0x7E, 0x9D, 0x77, 0xF7, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBE, 0x7A, + 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, 0x74, 0xD5, 0xB2, 0x8A, + 0xC2, 0x07, 0x74, 0xD4, 0x6C, 0xF6, 0x7C, 0x94, 0xC1, 0xE6, 0xA3, 0x2D, + 0x74, 0xF5, 0x7C, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x73, 0x53, 0x6F, 0x63, 0x8E, + 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x04, 0x74, 0x10, 0x6C, 0x32, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x74, 0x93, 0x84, 0xF5, 0xF7, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x7D, 0x7C, 0xB4, 0x74, 0x94, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0x94, 0x74, 0xD5, 0xB2, 0x49, 0xB2, 0x8A, 0x74, 0xF5, + 0x7C, 0x93, 0x74, 0xB4, 0x84, 0x52, 0x7C, 0x73, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x73, 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, + 0x6C, 0x32, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x6C, 0x73, + 0xAD, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x9D, 0x77, 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, + 0x74, 0xF5, 0xAA, 0xCB, 0xC2, 0x07, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x73, + 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, 0x6C, 0x32, 0x7C, 0xB4, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x93, 0xD6, 0xFC, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC6, 0x7A, 0x6C, 0x73, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, 0x74, 0xD5, 0x9B, 0x6E, 0xC9, 0xA6, + 0xC9, 0xC6, 0xBA, 0x28, 0xC2, 0x07, 0x84, 0x11, 0x74, 0xB4, 0x7C, 0x94, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x73, 0x53, 0x6F, 0x63, 0x8E, + 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x04, 0x74, 0x10, 0x6C, 0x32, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x93, 0xD6, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xC6, 0x7A, 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x7C, 0x94, 0x74, 0xB4, 0x84, 0x52, 0x93, 0x8E, 0xC9, 0xC6, 0xAA, 0xEB, + 0x8B, 0xF0, 0x7C, 0x73, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x73, 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, + 0x6C, 0x32, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x6C, 0x73, + 0xAD, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x9D, 0x97, 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, + 0x74, 0xD5, 0x7C, 0x94, 0xC9, 0xA6, 0x93, 0xAF, 0x6D, 0x16, 0x7C, 0x94, + 0x7C, 0x94, 0x7C, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x73, + 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, 0x6C, 0x32, 0x7C, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0x93, 0x85, 0x15, 0xF7, 0xBF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x7E, 0x7C, 0xD4, + 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, 0x6C, 0xF5, 0x93, 0x8F, + 0xBA, 0x28, 0x74, 0xD4, 0x74, 0xD5, 0x74, 0xD5, 0x74, 0xD5, 0x74, 0xD5, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x73, 0x53, 0x6F, 0x63, 0x8E, + 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x04, 0x74, 0x10, 0x6C, 0x32, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x74, 0x73, 0xD6, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x7E, 0x9D, 0x97, + 0xF7, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC6, 0x7A, 0x6C, 0x73, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x7C, 0x94, 0x74, 0xD4, 0x8B, 0xF0, 0xC9, 0xA6, 0xBA, 0x48, 0xA3, 0x0C, + 0x9B, 0x4D, 0x8B, 0xF0, 0x8B, 0xD0, 0x93, 0xAF, 0x74, 0xB4, 0x7C, 0x94, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x73, 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, + 0x6C, 0x32, 0x7C, 0xB4, 0x7C, 0xD4, 0x6C, 0x73, 0xAD, 0xD8, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xA5, 0xD8, 0x64, 0x32, 0xBE, 0x5A, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x9D, 0x77, 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, 0x74, 0xD5, + 0x9B, 0x6E, 0xBA, 0x28, 0xAA, 0xEB, 0xAA, 0xAB, 0xBA, 0x49, 0xC1, 0xE7, + 0xC9, 0xA6, 0xAA, 0xCB, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x73, + 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, 0x6C, 0x32, 0x7C, 0xB4, + 0x74, 0x93, 0x84, 0xF5, 0xF7, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xD6, 0xDB, + 0x74, 0x73, 0x7C, 0xB4, 0x74, 0xB4, 0xE7, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, + 0xE7, 0x5D, 0x7C, 0xB4, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xD5, 0x6C, 0xF5, 0x74, 0xB4, 0x7C, 0x73, 0x7C, 0x73, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x73, 0x53, 0x6F, 0x63, 0x8E, + 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x04, 0x74, 0x10, 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, 0xDF, 0x1C, + 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xBF, 0x84, 0xF5, 0x74, 0x93, 0x7C, 0xB4, + 0x6C, 0x73, 0x95, 0x56, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC6, 0x9A, + 0x74, 0x93, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, 0x7C, 0x94, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x73, 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, + 0x6C, 0x52, 0x74, 0x93, 0x9D, 0x77, 0xE7, 0x5D, 0xD7, 0x1C, 0xE7, 0x3D, + 0xA5, 0xB8, 0x6C, 0x73, 0x7C, 0xB4, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0x73, + 0xB6, 0x19, 0xDF, 0x3D, 0xDF, 0x1C, 0xDF, 0x1C, 0x8D, 0x15, 0x74, 0x93, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0x94, + 0x7C, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x73, + 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, 0x6C, 0x52, 0x7C, 0xB4, + 0x7C, 0xB4, 0x74, 0x93, 0x74, 0x94, 0x74, 0x93, 0x74, 0x93, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x93, 0x74, 0x94, + 0x74, 0x94, 0x74, 0x94, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x73, 0x53, 0x6F, 0x63, 0x8E, + 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x04, 0x74, 0x10, 0x6C, 0x52, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x94, 0x74, 0x94, 0x74, 0x93, + 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x74, 0x94, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x74, 0x93, 0x74, 0x94, + 0x74, 0x94, 0x74, 0x94, 0x74, 0x93, 0x74, 0x94, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x94, 0x74, 0x93, 0x74, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x93, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x73, 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, + 0x6C, 0x32, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0x74, 0x73, 0x7C, 0xB4, 0x84, 0xF5, 0x84, 0xF5, 0x74, 0x94, 0x74, 0x94, + 0x74, 0xB4, 0x84, 0xF5, 0x84, 0xF5, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x94, 0x7C, 0xD4, 0x84, 0xF5, 0x84, 0xF5, 0x84, 0xF5, 0x84, 0xF5, + 0x84, 0xF5, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x7C, 0xD4, 0x85, 0x15, + 0x7C, 0xD4, 0x74, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x84, 0xF5, 0x84, 0xF5, + 0x84, 0xF5, 0x84, 0xF5, 0x84, 0xF5, 0x74, 0x94, 0x74, 0x94, 0x74, 0x73, + 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, 0x6C, 0x32, 0x7C, 0xB4, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x93, 0x9D, 0x97, 0xEF, 0x7D, + 0xFF, 0xFF, 0xFF, 0xFF, 0xD6, 0xFC, 0x84, 0xF5, 0x6C, 0x73, 0xDF, 0x3D, + 0xE7, 0x5D, 0x7C, 0xB4, 0x74, 0x94, 0x7C, 0xB4, 0x6C, 0x73, 0xAD, 0xF8, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xA5, 0xB7, + 0x6C, 0x73, 0x74, 0x93, 0xC6, 0x9B, 0xFF, 0xFF, 0xCE, 0xDB, 0x74, 0x93, + 0x74, 0xB4, 0x7C, 0xB4, 0xE7, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xCE, 0xDB, 0x7C, 0xB4, 0x6C, 0x73, 0x53, 0x6F, 0x63, 0x8E, + 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x04, 0x74, 0x10, 0x6C, 0x32, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0x74, 0x93, 0x8D, 0x36, 0xFF, 0xFF, 0xFF, 0xDF, 0xBE, 0x5A, 0xD6, 0xDB, + 0xFF, 0xFF, 0xD6, 0xFC, 0x6C, 0x73, 0xE7, 0x3D, 0xE7, 0x7D, 0x7C, 0xB4, + 0x74, 0x94, 0x7C, 0xB4, 0x6C, 0x73, 0xAD, 0xF8, 0xFF, 0xFF, 0xCE, 0xBB, + 0xB6, 0x39, 0xBE, 0x5A, 0xBE, 0x5A, 0x8D, 0x36, 0x6C, 0x73, 0x84, 0xF5, + 0xEF, 0x9E, 0xFF, 0xFF, 0xF7, 0xDF, 0x8D, 0x15, 0x74, 0x93, 0x7C, 0xB4, + 0xE7, 0x5D, 0xF7, 0x9E, 0xBE, 0x39, 0xB6, 0x39, 0xD6, 0xFC, 0xFF, 0xFF, + 0xAD, 0xF8, 0x64, 0x32, 0x5B, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, + 0x6C, 0x32, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x6C, 0x73, 0xC6, 0x9A, + 0xFF, 0xFF, 0x95, 0x77, 0x64, 0x32, 0x74, 0x73, 0xBE, 0x5A, 0xBE, 0x59, + 0x74, 0x73, 0xDF, 0x3D, 0xE7, 0x5D, 0x7C, 0xB4, 0x74, 0x94, 0x7C, 0xB4, + 0x6C, 0x73, 0xAD, 0xF8, 0xFF, 0xFF, 0x95, 0x56, 0x64, 0x32, 0x74, 0x73, + 0x6C, 0x73, 0x74, 0x94, 0x6C, 0x73, 0xA5, 0xD8, 0xFF, 0xFF, 0xBE, 0x39, + 0xFF, 0xFF, 0xB6, 0x19, 0x6C, 0x73, 0x7C, 0xB4, 0xE7, 0x7D, 0xDF, 0x1C, + 0x6C, 0x53, 0x6C, 0x53, 0xA5, 0xD8, 0xFF, 0xFF, 0xB6, 0x39, 0x64, 0x32, + 0x5B, 0x8F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, 0x6C, 0x32, 0x7C, 0xB4, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0xB4, 0x6C, 0x73, 0xDF, 0x1C, 0xF7, 0xBE, 0x84, 0xD5, + 0x74, 0xB4, 0x7C, 0xB4, 0x6C, 0x53, 0x6C, 0x53, 0x74, 0x94, 0xDF, 0x3D, + 0xE7, 0x5D, 0x7C, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x6C, 0x73, 0xAD, 0xF8, + 0xFF, 0xFF, 0xF7, 0xBE, 0xEF, 0x9E, 0xF7, 0xBE, 0xEF, 0x7E, 0x8D, 0x15, + 0x6C, 0x53, 0xD6, 0xFC, 0xEF, 0x7D, 0x6C, 0x53, 0xDF, 0x1C, 0xEF, 0x7D, + 0x74, 0x94, 0x7C, 0xB4, 0xE7, 0x5D, 0xFF, 0xFF, 0xEF, 0x9E, 0xEF, 0x7E, + 0xFF, 0xFF, 0xF7, 0xBE, 0x8D, 0x15, 0x6C, 0x52, 0x53, 0x6F, 0x63, 0x8E, + 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x04, 0x74, 0x10, 0x6C, 0x32, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0x6C, 0x73, 0xD7, 0x1C, 0xF7, 0xDF, 0x7C, 0xD4, 0x74, 0x93, 0x74, 0x93, + 0x95, 0x56, 0x95, 0x76, 0x74, 0x93, 0xDF, 0x3D, 0xE7, 0x5D, 0x7C, 0xB4, + 0x74, 0xB4, 0x7C, 0xB4, 0x6C, 0x73, 0xAD, 0xF8, 0xFF, 0xFF, 0xDF, 0x1C, + 0xCE, 0xDB, 0xD6, 0xFC, 0xCE, 0xDB, 0x84, 0xD5, 0x7C, 0xD4, 0xFF, 0xFF, + 0xE7, 0x5D, 0x9D, 0x97, 0xDF, 0x1C, 0xFF, 0xFF, 0x95, 0x56, 0x74, 0x93, + 0xE7, 0x7D, 0xF7, 0xBE, 0xD6, 0xFC, 0xFF, 0xFF, 0xF7, 0x9E, 0x8D, 0x15, + 0x74, 0x93, 0x74, 0x73, 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, + 0x6C, 0x32, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x6C, 0x73, 0xBE, 0x5A, + 0xFF, 0xFF, 0xAE, 0x19, 0x6C, 0x53, 0x84, 0xD5, 0xF7, 0xBE, 0xEF, 0x9E, + 0x74, 0x93, 0xDF, 0x3C, 0xE7, 0x5D, 0x74, 0x73, 0x6C, 0x73, 0x74, 0x93, + 0x6C, 0x53, 0xAD, 0xF8, 0xFF, 0xFF, 0x8D, 0x36, 0x5B, 0xF2, 0x64, 0x52, + 0x6C, 0x53, 0x64, 0x52, 0xAD, 0xD8, 0xFF, 0xFF, 0xE7, 0x5D, 0xE7, 0x3D, + 0xE7, 0x5D, 0xFF, 0xFF, 0xC6, 0x7A, 0x6C, 0x53, 0xEF, 0x7E, 0xDF, 0x1C, + 0x64, 0x32, 0xB6, 0x39, 0xFF, 0xFF, 0xBE, 0x7A, 0x6C, 0x73, 0x74, 0x73, + 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, 0x6C, 0x32, 0x7C, 0xB4, + 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x94, 0x7C, 0xD4, 0xEF, 0x7D, 0xFF, 0xFF, + 0xEF, 0x7D, 0xF7, 0xDF, 0xFF, 0xFF, 0xAD, 0xF9, 0x6C, 0x73, 0xE7, 0x5D, + 0xFF, 0xFF, 0xE7, 0x5D, 0xE7, 0x5D, 0xEF, 0x9E, 0xC6, 0x7A, 0xAD, 0xF8, + 0xFF, 0xFF, 0xEF, 0x9E, 0xE7, 0x7D, 0xEF, 0x7D, 0xEF, 0x9E, 0xB6, 0x19, + 0xDF, 0x1C, 0xFF, 0xDF, 0x7C, 0xD4, 0x74, 0x73, 0x74, 0x94, 0xEF, 0x7E, + 0xF7, 0xBF, 0x7C, 0xD4, 0xEF, 0x7E, 0xE7, 0x5D, 0x74, 0x94, 0x74, 0x73, + 0xD6, 0xFC, 0xFF, 0xFF, 0xA5, 0xB8, 0x6C, 0x32, 0x53, 0x6F, 0x63, 0x8E, + 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x04, 0x74, 0x10, 0x6C, 0x32, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x7C, 0xB4, 0x74, 0x93, 0x84, 0xF5, 0xCE, 0xBB, 0xE7, 0x7D, 0xE7, 0x5D, + 0xAD, 0xF8, 0x74, 0x93, 0x74, 0x94, 0xC6, 0x9A, 0xE7, 0x5D, 0xE7, 0x5D, + 0xE7, 0x5D, 0xEF, 0x9E, 0xC6, 0x9A, 0x9D, 0x97, 0xE7, 0x5D, 0xE7, 0x5D, + 0xE7, 0x5D, 0xE7, 0x5D, 0xEF, 0x7E, 0xC6, 0x7A, 0xD6, 0xFC, 0xC6, 0x7A, + 0x74, 0x73, 0x7C, 0xB4, 0x6C, 0x73, 0xAD, 0xD8, 0xE7, 0x5D, 0x95, 0x56, + 0xCE, 0xBB, 0xC6, 0x9B, 0x74, 0x94, 0x74, 0x93, 0x85, 0x15, 0xE7, 0x3D, + 0xCE, 0xBB, 0x6C, 0x73, 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x04, 0x74, 0x10, + 0x6C, 0x32, 0x7C, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, + 0x74, 0x93, 0x6C, 0x73, 0x74, 0x93, 0x74, 0x73, 0x6C, 0x73, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0x94, 0x74, 0x93, 0x74, 0x73, 0x74, 0x73, 0x74, 0x73, + 0x74, 0x93, 0x74, 0x94, 0x74, 0x93, 0x74, 0x93, 0x74, 0x73, 0x74, 0x73, + 0x74, 0x73, 0x74, 0x94, 0x74, 0x94, 0x74, 0x93, 0x7C, 0xB4, 0x7C, 0xB4, + 0x7C, 0xB4, 0x74, 0x94, 0x74, 0x93, 0x74, 0xB4, 0x74, 0x94, 0x74, 0x94, + 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0x94, 0x74, 0x73, 0x74, 0xB4, 0x74, 0x73, + 0x53, 0x6F, 0x63, 0x8E, 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x29, 0x24, 0x74, 0x10, 0x6C, 0x52, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0x94, 0x74, 0xB4, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, + 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x74, 0x94, 0x7C, 0xB4, 0x7C, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x7C, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, + 0x74, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, 0x74, 0xB4, 0x74, 0xB4, + 0x74, 0x94, 0x74, 0x94, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x74, 0x94, + 0x74, 0xB4, 0x74, 0xB4, 0x74, 0xB4, 0x6C, 0x73, 0x53, 0x6F, 0x63, 0x8E, + 0x41, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0xE3, 0x73, 0xCF, 0x5B, 0xD0, 0x64, 0x11, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, 0x74, 0x52, + 0x74, 0x52, 0x6C, 0x11, 0x4B, 0x2D, 0x63, 0x6E, 0x39, 0xA6, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x5A, 0xCB, + 0x63, 0xAF, 0x53, 0x6F, 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, + 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, + 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, + 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xD0, + 0x63, 0xD0, 0x63, 0xD0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, + 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, + 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, + 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xF0, 0x63, 0xD0, + 0x63, 0x6E, 0x6B, 0x2D, 0x10, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x82, 0x5A, 0xAB, 0x6B, 0x8E, + 0x73, 0xAF, 0x73, 0xAF, 0x73, 0xAF, 0x73, 0xAF, 0x73, 0xAF, 0x73, 0xAF, + 0x73, 0xAF, 0x73, 0xAF, 0x73, 0xAF, 0x73, 0xAF, 0x73, 0xAF, 0x73, 0xAF, + 0x73, 0xAF, 0x73, 0xAF, 0x73, 0xAF, 0x73, 0xAF, 0x73, 0xAF, 0x73, 0xAF, + 0x73, 0xAF, 0x73, 0xAF, 0x73, 0xAF, 0x73, 0xAF, 0x73, 0xAF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, 0x73, 0xCF, + 0x73, 0xCF, 0x73, 0xAF, 0x73, 0xCF, 0x73, 0xAF, 0x63, 0x2C, 0x21, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x18, 0xC3, 0x21, 0x04, 0x21, 0x04, + 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, + 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, + 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, + 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, + 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, + 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, + 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, + 0x21, 0x04, 0x20, 0xE3, 0x08, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 diff --git a/src/Examples/IoD16kSpectrumEmulator/codes.h b/src/Examples/IoD16kSpectrumEmulator/codes.h new file mode 100644 index 0000000..c4b7240 --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/codes.h @@ -0,0 +1,387 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** Codes.h **/ +/** **/ +/** This file contains implementation for the main table of **/ +/** Z80 commands. It is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-2007 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +case JR_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W++; else { R->ICount-=5;M_JR; } break; +case JR_NC: if(R->AF.B.l&C_FLAG) R->PC.W++; else { R->ICount-=5;M_JR; } break; +case JR_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=5;M_JR; } else R->PC.W++; break; +case JR_C: if(R->AF.B.l&C_FLAG) { R->ICount-=5;M_JR; } else R->PC.W++; break; + +case JP_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_NC: if(R->AF.B.l&C_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_PO: if(R->AF.B.l&P_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_P: if(R->AF.B.l&S_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_Z: if(R->AF.B.l&Z_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_C: if(R->AF.B.l&C_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_PE: if(R->AF.B.l&P_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_M: if(R->AF.B.l&S_FLAG) { M_JP; } else R->PC.W+=2; break; + +case RET_NZ: if(!(R->AF.B.l&Z_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_NC: if(!(R->AF.B.l&C_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_PO: if(!(R->AF.B.l&P_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_P: if(!(R->AF.B.l&S_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=6;M_RET; } break; +case RET_C: if(R->AF.B.l&C_FLAG) { R->ICount-=6;M_RET; } break; +case RET_PE: if(R->AF.B.l&P_FLAG) { R->ICount-=6;M_RET; } break; +case RET_M: if(R->AF.B.l&S_FLAG) { R->ICount-=6;M_RET; } break; + +case CALL_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_NC: if(R->AF.B.l&C_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_PO: if(R->AF.B.l&P_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_P: if(R->AF.B.l&S_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; +case CALL_C: if(R->AF.B.l&C_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; +case CALL_PE: if(R->AF.B.l&P_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; +case CALL_M: if(R->AF.B.l&S_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; + +case ADD_B: M_ADD(R->BC.B.h);break; +case ADD_C: M_ADD(R->BC.B.l);break; +case ADD_D: M_ADD(R->DE.B.h);break; +case ADD_E: M_ADD(R->DE.B.l);break; +case ADD_H: M_ADD(R->HL.B.h);break; +case ADD_L: M_ADD(R->HL.B.l);break; +case ADD_A: M_ADD(R->AF.B.h);break; +case ADD_xHL: I=RdZ80(R->HL.W);M_ADD(I);break; +case ADD_BYTE: I=OpZ80(R->PC.W++);M_ADD(I);break; + +case SUB_B: M_SUB(R->BC.B.h);break; +case SUB_C: M_SUB(R->BC.B.l);break; +case SUB_D: M_SUB(R->DE.B.h);break; +case SUB_E: M_SUB(R->DE.B.l);break; +case SUB_H: M_SUB(R->HL.B.h);break; +case SUB_L: M_SUB(R->HL.B.l);break; +case SUB_A: R->AF.B.h=0;R->AF.B.l=N_FLAG|Z_FLAG;break; +case SUB_xHL: I=RdZ80(R->HL.W);M_SUB(I);break; +case SUB_BYTE: I=OpZ80(R->PC.W++);M_SUB(I);break; + +case AND_B: M_AND(R->BC.B.h);break; +case AND_C: M_AND(R->BC.B.l);break; +case AND_D: M_AND(R->DE.B.h);break; +case AND_E: M_AND(R->DE.B.l);break; +case AND_H: M_AND(R->HL.B.h);break; +case AND_L: M_AND(R->HL.B.l);break; +case AND_A: M_AND(R->AF.B.h);break; +case AND_xHL: I=RdZ80(R->HL.W);M_AND(I);break; +case AND_BYTE: I=OpZ80(R->PC.W++);M_AND(I);break; + +case OR_B: M_OR(R->BC.B.h);break; +case OR_C: M_OR(R->BC.B.l);break; +case OR_D: M_OR(R->DE.B.h);break; +case OR_E: M_OR(R->DE.B.l);break; +case OR_H: M_OR(R->HL.B.h);break; +case OR_L: M_OR(R->HL.B.l);break; +case OR_A: M_OR(R->AF.B.h);break; +case OR_xHL: I=RdZ80(R->HL.W);M_OR(I);break; +case OR_BYTE: I=OpZ80(R->PC.W++);M_OR(I);break; + +case ADC_B: M_ADC(R->BC.B.h);break; +case ADC_C: M_ADC(R->BC.B.l);break; +case ADC_D: M_ADC(R->DE.B.h);break; +case ADC_E: M_ADC(R->DE.B.l);break; +case ADC_H: M_ADC(R->HL.B.h);break; +case ADC_L: M_ADC(R->HL.B.l);break; +case ADC_A: M_ADC(R->AF.B.h);break; +case ADC_xHL: I=RdZ80(R->HL.W);M_ADC(I);break; +case ADC_BYTE: I=OpZ80(R->PC.W++);M_ADC(I);break; + +case SBC_B: M_SBC(R->BC.B.h);break; +case SBC_C: M_SBC(R->BC.B.l);break; +case SBC_D: M_SBC(R->DE.B.h);break; +case SBC_E: M_SBC(R->DE.B.l);break; +case SBC_H: M_SBC(R->HL.B.h);break; +case SBC_L: M_SBC(R->HL.B.l);break; +case SBC_A: M_SBC(R->AF.B.h);break; +case SBC_xHL: I=RdZ80(R->HL.W);M_SBC(I);break; +case SBC_BYTE: I=OpZ80(R->PC.W++);M_SBC(I);break; + +case XOR_B: M_XOR(R->BC.B.h);break; +case XOR_C: M_XOR(R->BC.B.l);break; +case XOR_D: M_XOR(R->DE.B.h);break; +case XOR_E: M_XOR(R->DE.B.l);break; +case XOR_H: M_XOR(R->HL.B.h);break; +case XOR_L: M_XOR(R->HL.B.l);break; +case XOR_A: R->AF.B.h=0;R->AF.B.l=P_FLAG|Z_FLAG;break; +case XOR_xHL: I=RdZ80(R->HL.W);M_XOR(I);break; +case XOR_BYTE: I=OpZ80(R->PC.W++);M_XOR(I);break; + +case CP_B: M_CP(R->BC.B.h);break; +case CP_C: M_CP(R->BC.B.l);break; +case CP_D: M_CP(R->DE.B.h);break; +case CP_E: M_CP(R->DE.B.l);break; +case CP_H: M_CP(R->HL.B.h);break; +case CP_L: M_CP(R->HL.B.l);break; +case CP_A: R->AF.B.l=N_FLAG|Z_FLAG;break; +case CP_xHL: I=RdZ80(R->HL.W);M_CP(I);break; +case CP_BYTE: I=OpZ80(R->PC.W++);M_CP(I);break; + +case LD_BC_WORD: M_LDWORD(BC);break; +case LD_DE_WORD: M_LDWORD(DE);break; +case LD_HL_WORD: M_LDWORD(HL);break; +case LD_SP_WORD: M_LDWORD(SP);break; + +case LD_PC_HL: R->PC.W=R->HL.W;JumpZ80(R->PC.W);break; +case LD_SP_HL: R->SP.W=R->HL.W;break; +case LD_A_xBC: R->AF.B.h=RdZ80(R->BC.W);break; +case LD_A_xDE: R->AF.B.h=RdZ80(R->DE.W);break; + +case ADD_HL_BC: M_ADDW(HL,BC);break; +case ADD_HL_DE: M_ADDW(HL,DE);break; +case ADD_HL_HL: M_ADDW(HL,HL);break; +case ADD_HL_SP: M_ADDW(HL,SP);break; + +case DEC_BC: R->BC.W--;break; +case DEC_DE: R->DE.W--;break; +case DEC_HL: R->HL.W--;break; +case DEC_SP: R->SP.W--;break; + +case INC_BC: R->BC.W++;break; +case INC_DE: R->DE.W++;break; +case INC_HL: R->HL.W++;break; +case INC_SP: R->SP.W++;break; + +case DEC_B: M_DEC(R->BC.B.h);break; +case DEC_C: M_DEC(R->BC.B.l);break; +case DEC_D: M_DEC(R->DE.B.h);break; +case DEC_E: M_DEC(R->DE.B.l);break; +case DEC_H: M_DEC(R->HL.B.h);break; +case DEC_L: M_DEC(R->HL.B.l);break; +case DEC_A: M_DEC(R->AF.B.h);break; +case DEC_xHL: I=RdZ80(R->HL.W);M_DEC(I);WrZ80(R->HL.W,I);break; + +case INC_B: M_INC(R->BC.B.h);break; +case INC_C: M_INC(R->BC.B.l);break; +case INC_D: M_INC(R->DE.B.h);break; +case INC_E: M_INC(R->DE.B.l);break; +case INC_H: M_INC(R->HL.B.h);break; +case INC_L: M_INC(R->HL.B.l);break; +case INC_A: M_INC(R->AF.B.h);break; +case INC_xHL: I=RdZ80(R->HL.W);M_INC(I);WrZ80(R->HL.W,I);break; + +case RLCA: + I=R->AF.B.h&0x80? C_FLAG:0; + R->AF.B.h=(R->AF.B.h<<1)|I; + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RLA: + I=R->AF.B.h&0x80? C_FLAG:0; + R->AF.B.h=(R->AF.B.h<<1)|(R->AF.B.l&C_FLAG); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RRCA: + I=R->AF.B.h&0x01; + R->AF.B.h=(R->AF.B.h>>1)|(I? 0x80:0); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RRA: + I=R->AF.B.h&0x01; + R->AF.B.h=(R->AF.B.h>>1)|(R->AF.B.l&C_FLAG? 0x80:0); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; + +case RST00: M_RST(0x0000);break; +case RST08: M_RST(0x0008);break; +case RST10: M_RST(0x0010);break; +case RST18: M_RST(0x0018);break; +case RST20: M_RST(0x0020);break; +case RST28: M_RST(0x0028);break; +case RST30: M_RST(0x0030);break; +case RST38: M_RST(0x0038);break; + +case PUSH_BC: M_PUSH(BC);break; +case PUSH_DE: M_PUSH(DE);break; +case PUSH_HL: M_PUSH(HL);break; +case PUSH_AF: M_PUSH(AF);break; + +case POP_BC: M_POP(BC);break; +case POP_DE: M_POP(DE);break; +case POP_HL: M_POP(HL);break; +case POP_AF: M_POP(AF);break; + +case DJNZ: if(--R->BC.B.h) { R->ICount-=5;M_JR; } else R->PC.W++;break; +case JP: M_JP;break; +case JR: M_JR;break; +case CALL: M_CALL;break; +case RET: M_RET;break; +case SCF: S(C_FLAG);R(N_FLAG|H_FLAG);break; +case CPL: R->AF.B.h=~R->AF.B.h;S(N_FLAG|H_FLAG);break; +case NOP: break; +case OUTA: I=OpZ80(R->PC.W++);OutZ80(I|(R->AF.W&0xFF00),R->AF.B.h);break; +case INA: I=OpZ80(R->PC.W++);R->AF.B.h=InZ80(I|(R->AF.W&0xFF00));break; + +case HALT: + R->PC.W--; + R->IFF|=IFF_HALT; + R->IBackup=0; + R->ICount=0; + break; + +case DI: + if(R->IFF&IFF_EI) R->ICount+=R->IBackup-1; + R->IFF&=~(IFF_1|IFF_2|IFF_EI); + enInt = 0; + break; + +case EI: + if(!(R->IFF&(IFF_1|IFF_EI))) + { + R->IFF|=IFF_2|IFF_EI; + R->IBackup=R->ICount; + R->ICount=1; + enInt = 1; + } + break; + +case CCF: + R->AF.B.l^=C_FLAG;R(N_FLAG|H_FLAG); + R->AF.B.l|=R->AF.B.l&C_FLAG? 0:H_FLAG; + break; + +case EXX: + J.W=R->BC.W;R->BC.W=R->BC1.W;R->BC1.W=J.W; + J.W=R->DE.W;R->DE.W=R->DE1.W;R->DE1.W=J.W; + J.W=R->HL.W;R->HL.W=R->HL1.W;R->HL1.W=J.W; + break; + +case EX_DE_HL: J.W=R->DE.W;R->DE.W=R->HL.W;R->HL.W=J.W;break; +case EX_AF_AF: J.W=R->AF.W;R->AF.W=R->AF1.W;R->AF1.W=J.W;break; + +case LD_B_B: R->BC.B.h=R->BC.B.h;break; +case LD_C_B: R->BC.B.l=R->BC.B.h;break; +case LD_D_B: R->DE.B.h=R->BC.B.h;break; +case LD_E_B: R->DE.B.l=R->BC.B.h;break; +case LD_H_B: R->HL.B.h=R->BC.B.h;break; +case LD_L_B: R->HL.B.l=R->BC.B.h;break; +case LD_A_B: R->AF.B.h=R->BC.B.h;break; +case LD_xHL_B: WrZ80(R->HL.W,R->BC.B.h);break; + +case LD_B_C: R->BC.B.h=R->BC.B.l;break; +case LD_C_C: R->BC.B.l=R->BC.B.l;break; +case LD_D_C: R->DE.B.h=R->BC.B.l;break; +case LD_E_C: R->DE.B.l=R->BC.B.l;break; +case LD_H_C: R->HL.B.h=R->BC.B.l;break; +case LD_L_C: R->HL.B.l=R->BC.B.l;break; +case LD_A_C: R->AF.B.h=R->BC.B.l;break; +case LD_xHL_C: WrZ80(R->HL.W,R->BC.B.l);break; + +case LD_B_D: R->BC.B.h=R->DE.B.h;break; +case LD_C_D: R->BC.B.l=R->DE.B.h;break; +case LD_D_D: R->DE.B.h=R->DE.B.h;break; +case LD_E_D: R->DE.B.l=R->DE.B.h;break; +case LD_H_D: R->HL.B.h=R->DE.B.h;break; +case LD_L_D: R->HL.B.l=R->DE.B.h;break; +case LD_A_D: R->AF.B.h=R->DE.B.h;break; +case LD_xHL_D: WrZ80(R->HL.W,R->DE.B.h);break; + +case LD_B_E: R->BC.B.h=R->DE.B.l;break; +case LD_C_E: R->BC.B.l=R->DE.B.l;break; +case LD_D_E: R->DE.B.h=R->DE.B.l;break; +case LD_E_E: R->DE.B.l=R->DE.B.l;break; +case LD_H_E: R->HL.B.h=R->DE.B.l;break; +case LD_L_E: R->HL.B.l=R->DE.B.l;break; +case LD_A_E: R->AF.B.h=R->DE.B.l;break; +case LD_xHL_E: WrZ80(R->HL.W,R->DE.B.l);break; + +case LD_B_H: R->BC.B.h=R->HL.B.h;break; +case LD_C_H: R->BC.B.l=R->HL.B.h;break; +case LD_D_H: R->DE.B.h=R->HL.B.h;break; +case LD_E_H: R->DE.B.l=R->HL.B.h;break; +case LD_H_H: R->HL.B.h=R->HL.B.h;break; +case LD_L_H: R->HL.B.l=R->HL.B.h;break; +case LD_A_H: R->AF.B.h=R->HL.B.h;break; +case LD_xHL_H: WrZ80(R->HL.W,R->HL.B.h);break; + +case LD_B_L: R->BC.B.h=R->HL.B.l;break; +case LD_C_L: R->BC.B.l=R->HL.B.l;break; +case LD_D_L: R->DE.B.h=R->HL.B.l;break; +case LD_E_L: R->DE.B.l=R->HL.B.l;break; +case LD_H_L: R->HL.B.h=R->HL.B.l;break; +case LD_L_L: R->HL.B.l=R->HL.B.l;break; +case LD_A_L: R->AF.B.h=R->HL.B.l;break; +case LD_xHL_L: WrZ80(R->HL.W,R->HL.B.l);break; + +case LD_B_A: R->BC.B.h=R->AF.B.h;break; +case LD_C_A: R->BC.B.l=R->AF.B.h;break; +case LD_D_A: R->DE.B.h=R->AF.B.h;break; +case LD_E_A: R->DE.B.l=R->AF.B.h;break; +case LD_H_A: R->HL.B.h=R->AF.B.h;break; +case LD_L_A: R->HL.B.l=R->AF.B.h;break; +case LD_A_A: R->AF.B.h=R->AF.B.h;break; +case LD_xHL_A: WrZ80(R->HL.W,R->AF.B.h);break; + +case LD_xBC_A: WrZ80(R->BC.W,R->AF.B.h);break; +case LD_xDE_A: WrZ80(R->DE.W,R->AF.B.h);break; + +case LD_B_xHL: R->BC.B.h=RdZ80(R->HL.W);break; +case LD_C_xHL: R->BC.B.l=RdZ80(R->HL.W);break; +case LD_D_xHL: R->DE.B.h=RdZ80(R->HL.W);break; +case LD_E_xHL: R->DE.B.l=RdZ80(R->HL.W);break; +case LD_H_xHL: R->HL.B.h=RdZ80(R->HL.W);break; +case LD_L_xHL: R->HL.B.l=RdZ80(R->HL.W);break; +case LD_A_xHL: R->AF.B.h=RdZ80(R->HL.W);break; + +case LD_B_BYTE: R->BC.B.h=OpZ80(R->PC.W++);break; +case LD_C_BYTE: R->BC.B.l=OpZ80(R->PC.W++);break; +case LD_D_BYTE: R->DE.B.h=OpZ80(R->PC.W++);break; +case LD_E_BYTE: R->DE.B.l=OpZ80(R->PC.W++);break; +case LD_H_BYTE: R->HL.B.h=OpZ80(R->PC.W++);break; +case LD_L_BYTE: R->HL.B.l=OpZ80(R->PC.W++);break; +case LD_A_BYTE: R->AF.B.h=OpZ80(R->PC.W++);break; +case LD_xHL_BYTE: WrZ80(R->HL.W,OpZ80(R->PC.W++));break; + +case LD_xWORD_HL: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + WrZ80(J.W++,R->HL.B.l); + WrZ80(J.W,R->HL.B.h); + break; + +case LD_HL_xWORD: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + R->HL.B.l=RdZ80(J.W++); + R->HL.B.h=RdZ80(J.W); + break; + +case LD_A_xWORD: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + R->AF.B.h=RdZ80(J.W); + break; + +case LD_xWORD_A: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + WrZ80(J.W,R->AF.B.h); + break; + +case EX_HL_xSP: + J.B.l=RdZ80(R->SP.W);WrZ80(R->SP.W++,R->HL.B.l); + J.B.h=RdZ80(R->SP.W);WrZ80(R->SP.W--,R->HL.B.h); + R->HL.W=J.W; + break; + +case DAA: + J.W=R->AF.B.h; + if(R->AF.B.l&C_FLAG) J.W|=256; + if(R->AF.B.l&H_FLAG) J.W|=512; + if(R->AF.B.l&N_FLAG) J.W|=1024; + R->AF.W=DAATable[J.W]; + break; + +default: + if(R->TrapBadOps) + printf + ( + "[Z80 %lX] Unrecognized instruction: %02X at PC=%04X\n", + (long)R->User,OpZ80(R->PC.W-1),R->PC.W-1 + ); + break; diff --git a/src/Examples/IoD16kSpectrumEmulator/codesCB.h b/src/Examples/IoD16kSpectrumEmulator/codesCB.h new file mode 100644 index 0000000..dd904d4 --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/codesCB.h @@ -0,0 +1,204 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** CodesCB.h **/ +/** **/ +/** This file contains implementation for the CB table of **/ +/** Z80 commands. It is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-2007 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +case RLC_B: M_RLC(R->BC.B.h);break; case RLC_C: M_RLC(R->BC.B.l);break; +case RLC_D: M_RLC(R->DE.B.h);break; case RLC_E: M_RLC(R->DE.B.l);break; +case RLC_H: M_RLC(R->HL.B.h);break; case RLC_L: M_RLC(R->HL.B.l);break; +case RLC_xHL: I=RdZ80(R->HL.W);M_RLC(I);WrZ80(R->HL.W,I);break; +case RLC_A: M_RLC(R->AF.B.h);break; + +case RRC_B: M_RRC(R->BC.B.h);break; case RRC_C: M_RRC(R->BC.B.l);break; +case RRC_D: M_RRC(R->DE.B.h);break; case RRC_E: M_RRC(R->DE.B.l);break; +case RRC_H: M_RRC(R->HL.B.h);break; case RRC_L: M_RRC(R->HL.B.l);break; +case RRC_xHL: I=RdZ80(R->HL.W);M_RRC(I);WrZ80(R->HL.W,I);break; +case RRC_A: M_RRC(R->AF.B.h);break; + +case RL_B: M_RL(R->BC.B.h);break; case RL_C: M_RL(R->BC.B.l);break; +case RL_D: M_RL(R->DE.B.h);break; case RL_E: M_RL(R->DE.B.l);break; +case RL_H: M_RL(R->HL.B.h);break; case RL_L: M_RL(R->HL.B.l);break; +case RL_xHL: I=RdZ80(R->HL.W);M_RL(I);WrZ80(R->HL.W,I);break; +case RL_A: M_RL(R->AF.B.h);break; + +case RR_B: M_RR(R->BC.B.h);break; case RR_C: M_RR(R->BC.B.l);break; +case RR_D: M_RR(R->DE.B.h);break; case RR_E: M_RR(R->DE.B.l);break; +case RR_H: M_RR(R->HL.B.h);break; case RR_L: M_RR(R->HL.B.l);break; +case RR_xHL: I=RdZ80(R->HL.W);M_RR(I);WrZ80(R->HL.W,I);break; +case RR_A: M_RR(R->AF.B.h);break; + +case SLA_B: M_SLA(R->BC.B.h);break; case SLA_C: M_SLA(R->BC.B.l);break; +case SLA_D: M_SLA(R->DE.B.h);break; case SLA_E: M_SLA(R->DE.B.l);break; +case SLA_H: M_SLA(R->HL.B.h);break; case SLA_L: M_SLA(R->HL.B.l);break; +case SLA_xHL: I=RdZ80(R->HL.W);M_SLA(I);WrZ80(R->HL.W,I);break; +case SLA_A: M_SLA(R->AF.B.h);break; + +case SRA_B: M_SRA(R->BC.B.h);break; case SRA_C: M_SRA(R->BC.B.l);break; +case SRA_D: M_SRA(R->DE.B.h);break; case SRA_E: M_SRA(R->DE.B.l);break; +case SRA_H: M_SRA(R->HL.B.h);break; case SRA_L: M_SRA(R->HL.B.l);break; +case SRA_xHL: I=RdZ80(R->HL.W);M_SRA(I);WrZ80(R->HL.W,I);break; +case SRA_A: M_SRA(R->AF.B.h);break; + +case SLL_B: M_SLL(R->BC.B.h);break; case SLL_C: M_SLL(R->BC.B.l);break; +case SLL_D: M_SLL(R->DE.B.h);break; case SLL_E: M_SLL(R->DE.B.l);break; +case SLL_H: M_SLL(R->HL.B.h);break; case SLL_L: M_SLL(R->HL.B.l);break; +case SLL_xHL: I=RdZ80(R->HL.W);M_SLL(I);WrZ80(R->HL.W,I);break; +case SLL_A: M_SLL(R->AF.B.h);break; + +case SRL_B: M_SRL(R->BC.B.h);break; case SRL_C: M_SRL(R->BC.B.l);break; +case SRL_D: M_SRL(R->DE.B.h);break; case SRL_E: M_SRL(R->DE.B.l);break; +case SRL_H: M_SRL(R->HL.B.h);break; case SRL_L: M_SRL(R->HL.B.l);break; +case SRL_xHL: I=RdZ80(R->HL.W);M_SRL(I);WrZ80(R->HL.W,I);break; +case SRL_A: M_SRL(R->AF.B.h);break; + +case BIT0_B: M_BIT(0,R->BC.B.h);break; case BIT0_C: M_BIT(0,R->BC.B.l);break; +case BIT0_D: M_BIT(0,R->DE.B.h);break; case BIT0_E: M_BIT(0,R->DE.B.l);break; +case BIT0_H: M_BIT(0,R->HL.B.h);break; case BIT0_L: M_BIT(0,R->HL.B.l);break; +case BIT0_xHL: I=RdZ80(R->HL.W);M_BIT(0,I);break; +case BIT0_A: M_BIT(0,R->AF.B.h);break; + +case BIT1_B: M_BIT(1,R->BC.B.h);break; case BIT1_C: M_BIT(1,R->BC.B.l);break; +case BIT1_D: M_BIT(1,R->DE.B.h);break; case BIT1_E: M_BIT(1,R->DE.B.l);break; +case BIT1_H: M_BIT(1,R->HL.B.h);break; case BIT1_L: M_BIT(1,R->HL.B.l);break; +case BIT1_xHL: I=RdZ80(R->HL.W);M_BIT(1,I);break; +case BIT1_A: M_BIT(1,R->AF.B.h);break; + +case BIT2_B: M_BIT(2,R->BC.B.h);break; case BIT2_C: M_BIT(2,R->BC.B.l);break; +case BIT2_D: M_BIT(2,R->DE.B.h);break; case BIT2_E: M_BIT(2,R->DE.B.l);break; +case BIT2_H: M_BIT(2,R->HL.B.h);break; case BIT2_L: M_BIT(2,R->HL.B.l);break; +case BIT2_xHL: I=RdZ80(R->HL.W);M_BIT(2,I);break; +case BIT2_A: M_BIT(2,R->AF.B.h);break; + +case BIT3_B: M_BIT(3,R->BC.B.h);break; case BIT3_C: M_BIT(3,R->BC.B.l);break; +case BIT3_D: M_BIT(3,R->DE.B.h);break; case BIT3_E: M_BIT(3,R->DE.B.l);break; +case BIT3_H: M_BIT(3,R->HL.B.h);break; case BIT3_L: M_BIT(3,R->HL.B.l);break; +case BIT3_xHL: I=RdZ80(R->HL.W);M_BIT(3,I);break; +case BIT3_A: M_BIT(3,R->AF.B.h);break; + +case BIT4_B: M_BIT(4,R->BC.B.h);break; case BIT4_C: M_BIT(4,R->BC.B.l);break; +case BIT4_D: M_BIT(4,R->DE.B.h);break; case BIT4_E: M_BIT(4,R->DE.B.l);break; +case BIT4_H: M_BIT(4,R->HL.B.h);break; case BIT4_L: M_BIT(4,R->HL.B.l);break; +case BIT4_xHL: I=RdZ80(R->HL.W);M_BIT(4,I);break; +case BIT4_A: M_BIT(4,R->AF.B.h);break; + +case BIT5_B: M_BIT(5,R->BC.B.h);break; case BIT5_C: M_BIT(5,R->BC.B.l);break; +case BIT5_D: M_BIT(5,R->DE.B.h);break; case BIT5_E: M_BIT(5,R->DE.B.l);break; +case BIT5_H: M_BIT(5,R->HL.B.h);break; case BIT5_L: M_BIT(5,R->HL.B.l);break; +case BIT5_xHL: I=RdZ80(R->HL.W);M_BIT(5,I);break; +case BIT5_A: M_BIT(5,R->AF.B.h);break; + +case BIT6_B: M_BIT(6,R->BC.B.h);break; case BIT6_C: M_BIT(6,R->BC.B.l);break; +case BIT6_D: M_BIT(6,R->DE.B.h);break; case BIT6_E: M_BIT(6,R->DE.B.l);break; +case BIT6_H: M_BIT(6,R->HL.B.h);break; case BIT6_L: M_BIT(6,R->HL.B.l);break; +case BIT6_xHL: I=RdZ80(R->HL.W);M_BIT(6,I);break; +case BIT6_A: M_BIT(6,R->AF.B.h);break; + +case BIT7_B: M_BIT(7,R->BC.B.h);break; case BIT7_C: M_BIT(7,R->BC.B.l);break; +case BIT7_D: M_BIT(7,R->DE.B.h);break; case BIT7_E: M_BIT(7,R->DE.B.l);break; +case BIT7_H: M_BIT(7,R->HL.B.h);break; case BIT7_L: M_BIT(7,R->HL.B.l);break; +case BIT7_xHL: I=RdZ80(R->HL.W);M_BIT(7,I);break; +case BIT7_A: M_BIT(7,R->AF.B.h);break; + +case RES0_B: M_RES(0,R->BC.B.h);break; case RES0_C: M_RES(0,R->BC.B.l);break; +case RES0_D: M_RES(0,R->DE.B.h);break; case RES0_E: M_RES(0,R->DE.B.l);break; +case RES0_H: M_RES(0,R->HL.B.h);break; case RES0_L: M_RES(0,R->HL.B.l);break; +case RES0_xHL: I=RdZ80(R->HL.W);M_RES(0,I);WrZ80(R->HL.W,I);break; +case RES0_A: M_RES(0,R->AF.B.h);break; + +case RES1_B: M_RES(1,R->BC.B.h);break; case RES1_C: M_RES(1,R->BC.B.l);break; +case RES1_D: M_RES(1,R->DE.B.h);break; case RES1_E: M_RES(1,R->DE.B.l);break; +case RES1_H: M_RES(1,R->HL.B.h);break; case RES1_L: M_RES(1,R->HL.B.l);break; +case RES1_xHL: I=RdZ80(R->HL.W);M_RES(1,I);WrZ80(R->HL.W,I);break; +case RES1_A: M_RES(1,R->AF.B.h);break; + +case RES2_B: M_RES(2,R->BC.B.h);break; case RES2_C: M_RES(2,R->BC.B.l);break; +case RES2_D: M_RES(2,R->DE.B.h);break; case RES2_E: M_RES(2,R->DE.B.l);break; +case RES2_H: M_RES(2,R->HL.B.h);break; case RES2_L: M_RES(2,R->HL.B.l);break; +case RES2_xHL: I=RdZ80(R->HL.W);M_RES(2,I);WrZ80(R->HL.W,I);break; +case RES2_A: M_RES(2,R->AF.B.h);break; + +case RES3_B: M_RES(3,R->BC.B.h);break; case RES3_C: M_RES(3,R->BC.B.l);break; +case RES3_D: M_RES(3,R->DE.B.h);break; case RES3_E: M_RES(3,R->DE.B.l);break; +case RES3_H: M_RES(3,R->HL.B.h);break; case RES3_L: M_RES(3,R->HL.B.l);break; +case RES3_xHL: I=RdZ80(R->HL.W);M_RES(3,I);WrZ80(R->HL.W,I);break; +case RES3_A: M_RES(3,R->AF.B.h);break; + +case RES4_B: M_RES(4,R->BC.B.h);break; case RES4_C: M_RES(4,R->BC.B.l);break; +case RES4_D: M_RES(4,R->DE.B.h);break; case RES4_E: M_RES(4,R->DE.B.l);break; +case RES4_H: M_RES(4,R->HL.B.h);break; case RES4_L: M_RES(4,R->HL.B.l);break; +case RES4_xHL: I=RdZ80(R->HL.W);M_RES(4,I);WrZ80(R->HL.W,I);break; +case RES4_A: M_RES(4,R->AF.B.h);break; + +case RES5_B: M_RES(5,R->BC.B.h);break; case RES5_C: M_RES(5,R->BC.B.l);break; +case RES5_D: M_RES(5,R->DE.B.h);break; case RES5_E: M_RES(5,R->DE.B.l);break; +case RES5_H: M_RES(5,R->HL.B.h);break; case RES5_L: M_RES(5,R->HL.B.l);break; +case RES5_xHL: I=RdZ80(R->HL.W);M_RES(5,I);WrZ80(R->HL.W,I);break; +case RES5_A: M_RES(5,R->AF.B.h);break; + +case RES6_B: M_RES(6,R->BC.B.h);break; case RES6_C: M_RES(6,R->BC.B.l);break; +case RES6_D: M_RES(6,R->DE.B.h);break; case RES6_E: M_RES(6,R->DE.B.l);break; +case RES6_H: M_RES(6,R->HL.B.h);break; case RES6_L: M_RES(6,R->HL.B.l);break; +case RES6_xHL: I=RdZ80(R->HL.W);M_RES(6,I);WrZ80(R->HL.W,I);break; +case RES6_A: M_RES(6,R->AF.B.h);break; + +case RES7_B: M_RES(7,R->BC.B.h);break; case RES7_C: M_RES(7,R->BC.B.l);break; +case RES7_D: M_RES(7,R->DE.B.h);break; case RES7_E: M_RES(7,R->DE.B.l);break; +case RES7_H: M_RES(7,R->HL.B.h);break; case RES7_L: M_RES(7,R->HL.B.l);break; +case RES7_xHL: I=RdZ80(R->HL.W);M_RES(7,I);WrZ80(R->HL.W,I);break; +case RES7_A: M_RES(7,R->AF.B.h);break; + +case SET0_B: M_SET(0,R->BC.B.h);break; case SET0_C: M_SET(0,R->BC.B.l);break; +case SET0_D: M_SET(0,R->DE.B.h);break; case SET0_E: M_SET(0,R->DE.B.l);break; +case SET0_H: M_SET(0,R->HL.B.h);break; case SET0_L: M_SET(0,R->HL.B.l);break; +case SET0_xHL: I=RdZ80(R->HL.W);M_SET(0,I);WrZ80(R->HL.W,I);break; +case SET0_A: M_SET(0,R->AF.B.h);break; + +case SET1_B: M_SET(1,R->BC.B.h);break; case SET1_C: M_SET(1,R->BC.B.l);break; +case SET1_D: M_SET(1,R->DE.B.h);break; case SET1_E: M_SET(1,R->DE.B.l);break; +case SET1_H: M_SET(1,R->HL.B.h);break; case SET1_L: M_SET(1,R->HL.B.l);break; +case SET1_xHL: I=RdZ80(R->HL.W);M_SET(1,I);WrZ80(R->HL.W,I);break; +case SET1_A: M_SET(1,R->AF.B.h);break; + +case SET2_B: M_SET(2,R->BC.B.h);break; case SET2_C: M_SET(2,R->BC.B.l);break; +case SET2_D: M_SET(2,R->DE.B.h);break; case SET2_E: M_SET(2,R->DE.B.l);break; +case SET2_H: M_SET(2,R->HL.B.h);break; case SET2_L: M_SET(2,R->HL.B.l);break; +case SET2_xHL: I=RdZ80(R->HL.W);M_SET(2,I);WrZ80(R->HL.W,I);break; +case SET2_A: M_SET(2,R->AF.B.h);break; + +case SET3_B: M_SET(3,R->BC.B.h);break; case SET3_C: M_SET(3,R->BC.B.l);break; +case SET3_D: M_SET(3,R->DE.B.h);break; case SET3_E: M_SET(3,R->DE.B.l);break; +case SET3_H: M_SET(3,R->HL.B.h);break; case SET3_L: M_SET(3,R->HL.B.l);break; +case SET3_xHL: I=RdZ80(R->HL.W);M_SET(3,I);WrZ80(R->HL.W,I);break; +case SET3_A: M_SET(3,R->AF.B.h);break; + +case SET4_B: M_SET(4,R->BC.B.h);break; case SET4_C: M_SET(4,R->BC.B.l);break; +case SET4_D: M_SET(4,R->DE.B.h);break; case SET4_E: M_SET(4,R->DE.B.l);break; +case SET4_H: M_SET(4,R->HL.B.h);break; case SET4_L: M_SET(4,R->HL.B.l);break; +case SET4_xHL: I=RdZ80(R->HL.W);M_SET(4,I);WrZ80(R->HL.W,I);break; +case SET4_A: M_SET(4,R->AF.B.h);break; + +case SET5_B: M_SET(5,R->BC.B.h);break; case SET5_C: M_SET(5,R->BC.B.l);break; +case SET5_D: M_SET(5,R->DE.B.h);break; case SET5_E: M_SET(5,R->DE.B.l);break; +case SET5_H: M_SET(5,R->HL.B.h);break; case SET5_L: M_SET(5,R->HL.B.l);break; +case SET5_xHL: I=RdZ80(R->HL.W);M_SET(5,I);WrZ80(R->HL.W,I);break; +case SET5_A: M_SET(5,R->AF.B.h);break; + +case SET6_B: M_SET(6,R->BC.B.h);break; case SET6_C: M_SET(6,R->BC.B.l);break; +case SET6_D: M_SET(6,R->DE.B.h);break; case SET6_E: M_SET(6,R->DE.B.l);break; +case SET6_H: M_SET(6,R->HL.B.h);break; case SET6_L: M_SET(6,R->HL.B.l);break; +case SET6_xHL: I=RdZ80(R->HL.W);M_SET(6,I);WrZ80(R->HL.W,I);break; +case SET6_A: M_SET(6,R->AF.B.h);break; + +case SET7_B: M_SET(7,R->BC.B.h);break; case SET7_C: M_SET(7,R->BC.B.l);break; +case SET7_D: M_SET(7,R->DE.B.h);break; case SET7_E: M_SET(7,R->DE.B.l);break; +case SET7_H: M_SET(7,R->HL.B.h);break; case SET7_L: M_SET(7,R->HL.B.l);break; +case SET7_xHL: I=RdZ80(R->HL.W);M_SET(7,I);WrZ80(R->HL.W,I);break; +case SET7_A: M_SET(7,R->AF.B.h);break; diff --git a/src/Examples/IoD16kSpectrumEmulator/codesED.h b/src/Examples/IoD16kSpectrumEmulator/codesED.h new file mode 100644 index 0000000..e463b64 --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/codesED.h @@ -0,0 +1,304 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** CodesED.h **/ +/** **/ +/** This file contains implementation for the ED table of **/ +/** Z80 commands. It is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-2007 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +/** This is a special patch for emulating BIOS calls: ********/ +//case DB_FE: PatchZ80(R);break; +/*************************************************************/ + +case ADC_HL_BC: M_ADCW(BC);break; +case ADC_HL_DE: M_ADCW(DE);break; +case ADC_HL_HL: M_ADCW(HL);break; +case ADC_HL_SP: M_ADCW(SP);break; + +case SBC_HL_BC: M_SBCW(BC);break; +case SBC_HL_DE: M_SBCW(DE);break; +case SBC_HL_HL: M_SBCW(HL);break; +case SBC_HL_SP: M_SBCW(SP);break; + +case LD_xWORDe_HL: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + WrZ80(J.W++,R->HL.B.l); + WrZ80(J.W,R->HL.B.h); + break; +case LD_xWORDe_DE: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + WrZ80(J.W++,R->DE.B.l); + WrZ80(J.W,R->DE.B.h); + break; +case LD_xWORDe_BC: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + WrZ80(J.W++,R->BC.B.l); + WrZ80(J.W,R->BC.B.h); + break; +case LD_xWORDe_SP: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + WrZ80(J.W++,R->SP.B.l); + WrZ80(J.W,R->SP.B.h); + break; + +case LD_HL_xWORDe: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + R->HL.B.l=RdZ80(J.W++); + R->HL.B.h=RdZ80(J.W); + break; +case LD_DE_xWORDe: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + R->DE.B.l=RdZ80(J.W++); + R->DE.B.h=RdZ80(J.W); + break; +case LD_BC_xWORDe: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + R->BC.B.l=RdZ80(J.W++); + R->BC.B.h=RdZ80(J.W); + break; +case LD_SP_xWORDe: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + R->SP.B.l=RdZ80(J.W++); + R->SP.B.h=RdZ80(J.W); + break; + +case RRD: + I=RdZ80(R->HL.W); + J.B.l=(I>>4)|(R->AF.B.h<<4); + WrZ80(R->HL.W,J.B.l); + R->AF.B.h=(I&0x0F)|(R->AF.B.h&0xF0); + R->AF.B.l=PZSTable[R->AF.B.h]|(R->AF.B.l&C_FLAG); + break; +case RLD: + I=RdZ80(R->HL.W); + J.B.l=(I<<4)|(R->AF.B.h&0x0F); + WrZ80(R->HL.W,J.B.l); + R->AF.B.h=(I>>4)|(R->AF.B.h&0xF0); + R->AF.B.l=PZSTable[R->AF.B.h]|(R->AF.B.l&C_FLAG); + break; + +case LD_A_I: + R->AF.B.h=R->I; + R->AF.B.l=(R->AF.B.l&C_FLAG)|(R->IFF&IFF_2? P_FLAG:0)|ZSTable[R->AF.B.h]; + break; + +case LD_A_R: + R->R++; + R->AF.B.h=(byte)(R->R-R->ICount); + R->AF.B.l=(R->AF.B.l&C_FLAG)|(R->IFF&IFF_2? P_FLAG:0)|ZSTable[R->AF.B.h]; + break; + +case LD_I_A: R->I=R->AF.B.h;break; +case LD_R_A: break; + +case IM_0: R->IFF&=~(IFF_IM1|IFF_IM2);break; +case IM_1: R->IFF=(R->IFF&~IFF_IM2)|IFF_IM1;break; +case IM_2: R->IFF=(R->IFF&~IFF_IM1)|IFF_IM2;break; + +case RETI: +case RETN: if(R->IFF&IFF_2) R->IFF|=IFF_1; else R->IFF&=~IFF_1; + M_RET;break; + +case NEG: I=R->AF.B.h;R->AF.B.h=0;M_SUB(I);break; + +case IN_B_xC: M_IN(R->BC.B.h);break; +case IN_C_xC: M_IN(R->BC.B.l);break; +case IN_D_xC: M_IN(R->DE.B.h);break; +case IN_E_xC: M_IN(R->DE.B.l);break; +case IN_H_xC: M_IN(R->HL.B.h);break; +case IN_L_xC: M_IN(R->HL.B.l);break; +case IN_A_xC: M_IN(R->AF.B.h);break; +case IN_F_xC: M_IN(J.B.l);break; + +case OUT_xC_B: OutZ80(R->BC.W,R->BC.B.h);break; +case OUT_xC_C: OutZ80(R->BC.W,R->BC.B.l);break; +case OUT_xC_D: OutZ80(R->BC.W,R->DE.B.h);break; +case OUT_xC_E: OutZ80(R->BC.W,R->DE.B.l);break; +case OUT_xC_H: OutZ80(R->BC.W,R->HL.B.h);break; +case OUT_xC_L: OutZ80(R->BC.W,R->HL.B.l);break; +case OUT_xC_A: OutZ80(R->BC.W,R->AF.B.h);break; + +case INI: + WrZ80(R->HL.W++,InZ80(R->BC.W)); + --R->BC.B.h; + R->AF.B.l=N_FLAG|(R->BC.B.h? 0:Z_FLAG); + break; + +case INIR: + do + { + WrZ80(R->HL.W++,InZ80(R->BC.W)); + --R->BC.B.h;R->ICount-=21; + } + while(R->BC.B.h&&(R->ICount>0)); + if(R->BC.B.h) { R->AF.B.l=N_FLAG;R->PC.W-=2; } + else { R->AF.B.l=Z_FLAG|N_FLAG;R->ICount+=5; } + break; + +case IND: + WrZ80(R->HL.W--,InZ80(R->BC.W)); + --R->BC.B.h; + R->AF.B.l=N_FLAG|(R->BC.B.h? 0:Z_FLAG); + break; + +case INDR: + do + { + WrZ80(R->HL.W--,InZ80(R->BC.W)); + --R->BC.B.h;R->ICount-=21; + } + while(R->BC.B.h&&(R->ICount>0)); + if(R->BC.B.h) { R->AF.B.l=N_FLAG;R->PC.W-=2; } + else { R->AF.B.l=Z_FLAG|N_FLAG;R->ICount+=5; } + break; + +case OUTI: + --R->BC.B.h; + I=RdZ80(R->HL.W++); + OutZ80(R->BC.W,I); + R->AF.B.l=N_FLAG|(R->BC.B.h? 0:Z_FLAG)|(R->HL.B.l+I>255? (C_FLAG|H_FLAG):0); + break; + +case OTIR: + do + { + --R->BC.B.h; + I=RdZ80(R->HL.W++); + OutZ80(R->BC.W,I); + R->ICount-=21; + } + while(R->BC.B.h&&(R->ICount>0)); + if(R->BC.B.h) + { + R->AF.B.l=N_FLAG|(R->HL.B.l+I>255? (C_FLAG|H_FLAG):0); + R->PC.W-=2; + } + else + { + R->AF.B.l=Z_FLAG|N_FLAG|(R->HL.B.l+I>255? (C_FLAG|H_FLAG):0); + R->ICount+=5; + } + break; + +case OUTD: + --R->BC.B.h; + I=RdZ80(R->HL.W--); + OutZ80(R->BC.W,I); + R->AF.B.l=N_FLAG|(R->BC.B.h? 0:Z_FLAG)|(R->HL.B.l+I>255? (C_FLAG|H_FLAG):0); + break; + +case OTDR: + do + { + --R->BC.B.h; + I=RdZ80(R->HL.W--); + OutZ80(R->BC.W,I); + R->ICount-=21; + } + while(R->BC.B.h&&(R->ICount>0)); + if(R->BC.B.h) + { + R->AF.B.l=N_FLAG|(R->HL.B.l+I>255? (C_FLAG|H_FLAG):0); + R->PC.W-=2; + } + else + { + R->AF.B.l=Z_FLAG|N_FLAG|(R->HL.B.l+I>255? (C_FLAG|H_FLAG):0); + R->ICount+=5; + } + break; + +case LDI: + WrZ80(R->DE.W++,RdZ80(R->HL.W++)); + --R->BC.W; + R->AF.B.l=(R->AF.B.l&~(N_FLAG|H_FLAG|P_FLAG))|(R->BC.W? P_FLAG:0); + break; + +case LDIR: + do + { + WrZ80(R->DE.W++,RdZ80(R->HL.W++)); + --R->BC.W;R->ICount-=21; + } + while(R->BC.W&&(R->ICount>0)); + R->AF.B.l&=~(N_FLAG|H_FLAG|P_FLAG); + if(R->BC.W) { R->AF.B.l|=N_FLAG;R->PC.W-=2; } + else R->ICount+=5; + break; + +case LDD: + WrZ80(R->DE.W--,RdZ80(R->HL.W--)); + --R->BC.W; + R->AF.B.l=(R->AF.B.l&~(N_FLAG|H_FLAG|P_FLAG))|(R->BC.W? P_FLAG:0); + break; + +case LDDR: + do + { + WrZ80(R->DE.W--,RdZ80(R->HL.W--)); + --R->BC.W;R->ICount-=21; + } + while(R->BC.W&&(R->ICount>0)); + R->AF.B.l&=~(N_FLAG|H_FLAG|P_FLAG); + if(R->BC.W) { R->AF.B.l|=N_FLAG;R->PC.W-=2; } + else R->ICount+=5; + break; + +case CPI: + I=RdZ80(R->HL.W++); + J.B.l=R->AF.B.h-I; + --R->BC.W; + R->AF.B.l = + N_FLAG|(R->AF.B.l&C_FLAG)|ZSTable[J.B.l]| + ((R->AF.B.h^I^J.B.l)&H_FLAG)|(R->BC.W? P_FLAG:0); + break; + +case CPIR: + do + { + I=RdZ80(R->HL.W++); + J.B.l=R->AF.B.h-I; + --R->BC.W;R->ICount-=21; + } + while(R->BC.W&&J.B.l&&(R->ICount>0)); + R->AF.B.l = + N_FLAG|(R->AF.B.l&C_FLAG)|ZSTable[J.B.l]| + ((R->AF.B.h^I^J.B.l)&H_FLAG)|(R->BC.W? P_FLAG:0); + if(R->BC.W&&J.B.l) R->PC.W-=2; else R->ICount+=5; + break; + +case CPD: + I=RdZ80(R->HL.W--); + J.B.l=R->AF.B.h-I; + --R->BC.W; + R->AF.B.l = + N_FLAG|(R->AF.B.l&C_FLAG)|ZSTable[J.B.l]| + ((R->AF.B.h^I^J.B.l)&H_FLAG)|(R->BC.W? P_FLAG:0); + break; + +case CPDR: + do + { + I=RdZ80(R->HL.W--); + J.B.l=R->AF.B.h-I; + --R->BC.W;R->ICount-=21; + } + while(R->BC.W&&J.B.l); + R->AF.B.l = + N_FLAG|(R->AF.B.l&C_FLAG)|ZSTable[J.B.l]| + ((R->AF.B.h^I^J.B.l)&H_FLAG)|(R->BC.W? P_FLAG:0); + if(R->BC.W&&J.B.l) R->PC.W-=2; else R->ICount+=5; + break; diff --git a/src/Examples/IoD16kSpectrumEmulator/codesXCB.h b/src/Examples/IoD16kSpectrumEmulator/codesXCB.h new file mode 100644 index 0000000..9a89306 --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/codesXCB.h @@ -0,0 +1,64 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** CodesXCB.h **/ +/** **/ +/** This file contains implementation for FD/DD-CB tables **/ +/** of Z80 commands. It is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-2007 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +case RLC_xHL: I=RdZ80(J.W);M_RLC(I);WrZ80(J.W,I);break; +case RRC_xHL: I=RdZ80(J.W);M_RRC(I);WrZ80(J.W,I);break; +case RL_xHL: I=RdZ80(J.W);M_RL(I);WrZ80(J.W,I);break; +case RR_xHL: I=RdZ80(J.W);M_RR(I);WrZ80(J.W,I);break; +case SLA_xHL: I=RdZ80(J.W);M_SLA(I);WrZ80(J.W,I);break; +case SRA_xHL: I=RdZ80(J.W);M_SRA(I);WrZ80(J.W,I);break; +case SLL_xHL: I=RdZ80(J.W);M_SLL(I);WrZ80(J.W,I);break; +case SRL_xHL: I=RdZ80(J.W);M_SRL(I);WrZ80(J.W,I);break; + +case BIT0_B: case BIT0_C: case BIT0_D: case BIT0_E: +case BIT0_H: case BIT0_L: case BIT0_A: +case BIT0_xHL: I=RdZ80(J.W);M_BIT(0,I);break; +case BIT1_B: case BIT1_C: case BIT1_D: case BIT1_E: +case BIT1_H: case BIT1_L: case BIT1_A: +case BIT1_xHL: I=RdZ80(J.W);M_BIT(1,I);break; +case BIT2_B: case BIT2_C: case BIT2_D: case BIT2_E: +case BIT2_H: case BIT2_L: case BIT2_A: +case BIT2_xHL: I=RdZ80(J.W);M_BIT(2,I);break; +case BIT3_B: case BIT3_C: case BIT3_D: case BIT3_E: +case BIT3_H: case BIT3_L: case BIT3_A: +case BIT3_xHL: I=RdZ80(J.W);M_BIT(3,I);break; +case BIT4_B: case BIT4_C: case BIT4_D: case BIT4_E: +case BIT4_H: case BIT4_L: case BIT4_A: +case BIT4_xHL: I=RdZ80(J.W);M_BIT(4,I);break; +case BIT5_B: case BIT5_C: case BIT5_D: case BIT5_E: +case BIT5_H: case BIT5_L: case BIT5_A: +case BIT5_xHL: I=RdZ80(J.W);M_BIT(5,I);break; +case BIT6_B: case BIT6_C: case BIT6_D: case BIT6_E: +case BIT6_H: case BIT6_L: case BIT6_A: +case BIT6_xHL: I=RdZ80(J.W);M_BIT(6,I);break; +case BIT7_B: case BIT7_C: case BIT7_D: case BIT7_E: +case BIT7_H: case BIT7_L: case BIT7_A: +case BIT7_xHL: I=RdZ80(J.W);M_BIT(7,I);break; + +case RES0_xHL: I=RdZ80(J.W);M_RES(0,I);WrZ80(J.W,I);break; +case RES1_xHL: I=RdZ80(J.W);M_RES(1,I);WrZ80(J.W,I);break; +case RES2_xHL: I=RdZ80(J.W);M_RES(2,I);WrZ80(J.W,I);break; +case RES3_xHL: I=RdZ80(J.W);M_RES(3,I);WrZ80(J.W,I);break; +case RES4_xHL: I=RdZ80(J.W);M_RES(4,I);WrZ80(J.W,I);break; +case RES5_xHL: I=RdZ80(J.W);M_RES(5,I);WrZ80(J.W,I);break; +case RES6_xHL: I=RdZ80(J.W);M_RES(6,I);WrZ80(J.W,I);break; +case RES7_xHL: I=RdZ80(J.W);M_RES(7,I);WrZ80(J.W,I);break; + +case SET0_xHL: I=RdZ80(J.W);M_SET(0,I);WrZ80(J.W,I);break; +case SET1_xHL: I=RdZ80(J.W);M_SET(1,I);WrZ80(J.W,I);break; +case SET2_xHL: I=RdZ80(J.W);M_SET(2,I);WrZ80(J.W,I);break; +case SET3_xHL: I=RdZ80(J.W);M_SET(3,I);WrZ80(J.W,I);break; +case SET4_xHL: I=RdZ80(J.W);M_SET(4,I);WrZ80(J.W,I);break; +case SET5_xHL: I=RdZ80(J.W);M_SET(5,I);WrZ80(J.W,I);break; +case SET6_xHL: I=RdZ80(J.W);M_SET(6,I);WrZ80(J.W,I);break; +case SET7_xHL: I=RdZ80(J.W);M_SET(7,I);WrZ80(J.W,I);break; diff --git a/src/Examples/IoD16kSpectrumEmulator/codesXX.h b/src/Examples/IoD16kSpectrumEmulator/codesXX.h new file mode 100644 index 0000000..ad84f45 --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/codesXX.h @@ -0,0 +1,396 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** CodesXX.h **/ +/** **/ +/** This file contains implementation for FD/DD tables of **/ +/** Z80 commands. It is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-2007 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +case JR_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W++; else { R->ICount-=5;M_JR; } break; +case JR_NC: if(R->AF.B.l&C_FLAG) R->PC.W++; else { R->ICount-=5;M_JR; } break; +case JR_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=5;M_JR; } else R->PC.W++; break; +case JR_C: if(R->AF.B.l&C_FLAG) { R->ICount-=5;M_JR; } else R->PC.W++; break; + +case JP_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_NC: if(R->AF.B.l&C_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_PO: if(R->AF.B.l&P_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_P: if(R->AF.B.l&S_FLAG) R->PC.W+=2; else { M_JP; } break; +case JP_Z: if(R->AF.B.l&Z_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_C: if(R->AF.B.l&C_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_PE: if(R->AF.B.l&P_FLAG) { M_JP; } else R->PC.W+=2; break; +case JP_M: if(R->AF.B.l&S_FLAG) { M_JP; } else R->PC.W+=2; break; + +case RET_NZ: if(!(R->AF.B.l&Z_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_NC: if(!(R->AF.B.l&C_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_PO: if(!(R->AF.B.l&P_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_P: if(!(R->AF.B.l&S_FLAG)) { R->ICount-=6;M_RET; } break; +case RET_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=6;M_RET; } break; +case RET_C: if(R->AF.B.l&C_FLAG) { R->ICount-=6;M_RET; } break; +case RET_PE: if(R->AF.B.l&P_FLAG) { R->ICount-=6;M_RET; } break; +case RET_M: if(R->AF.B.l&S_FLAG) { R->ICount-=6;M_RET; } break; + +case CALL_NZ: if(R->AF.B.l&Z_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_NC: if(R->AF.B.l&C_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_PO: if(R->AF.B.l&P_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_P: if(R->AF.B.l&S_FLAG) R->PC.W+=2; else { R->ICount-=7;M_CALL; } break; +case CALL_Z: if(R->AF.B.l&Z_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; +case CALL_C: if(R->AF.B.l&C_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; +case CALL_PE: if(R->AF.B.l&P_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; +case CALL_M: if(R->AF.B.l&S_FLAG) { R->ICount-=7;M_CALL; } else R->PC.W+=2; break; + +case ADD_B: M_ADD(R->BC.B.h);break; +case ADD_C: M_ADD(R->BC.B.l);break; +case ADD_D: M_ADD(R->DE.B.h);break; +case ADD_E: M_ADD(R->DE.B.l);break; +case ADD_H: M_ADD(R->XX.B.h);break; +case ADD_L: M_ADD(R->XX.B.l);break; +case ADD_A: M_ADD(R->AF.B.h);break; +case ADD_xHL: I=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++)); + M_ADD(I);break; +case ADD_BYTE: I=OpZ80(R->PC.W++);M_ADD(I);break; + +case SUB_B: M_SUB(R->BC.B.h);break; +case SUB_C: M_SUB(R->BC.B.l);break; +case SUB_D: M_SUB(R->DE.B.h);break; +case SUB_E: M_SUB(R->DE.B.l);break; +case SUB_H: M_SUB(R->XX.B.h);break; +case SUB_L: M_SUB(R->XX.B.l);break; +case SUB_A: R->AF.B.h=0;R->AF.B.l=N_FLAG|Z_FLAG;break; +case SUB_xHL: I=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++)); + M_SUB(I);break; +case SUB_BYTE: I=OpZ80(R->PC.W++);M_SUB(I);break; + +case AND_B: M_AND(R->BC.B.h);break; +case AND_C: M_AND(R->BC.B.l);break; +case AND_D: M_AND(R->DE.B.h);break; +case AND_E: M_AND(R->DE.B.l);break; +case AND_H: M_AND(R->XX.B.h);break; +case AND_L: M_AND(R->XX.B.l);break; +case AND_A: M_AND(R->AF.B.h);break; +case AND_xHL: I=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++)); + M_AND(I);break; +case AND_BYTE: I=OpZ80(R->PC.W++);M_AND(I);break; + +case OR_B: M_OR(R->BC.B.h);break; +case OR_C: M_OR(R->BC.B.l);break; +case OR_D: M_OR(R->DE.B.h);break; +case OR_E: M_OR(R->DE.B.l);break; +case OR_H: M_OR(R->XX.B.h);break; +case OR_L: M_OR(R->XX.B.l);break; +case OR_A: M_OR(R->AF.B.h);break; +case OR_xHL: I=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++)); + M_OR(I);break; +case OR_BYTE: I=OpZ80(R->PC.W++);M_OR(I);break; + +case ADC_B: M_ADC(R->BC.B.h);break; +case ADC_C: M_ADC(R->BC.B.l);break; +case ADC_D: M_ADC(R->DE.B.h);break; +case ADC_E: M_ADC(R->DE.B.l);break; +case ADC_H: M_ADC(R->XX.B.h);break; +case ADC_L: M_ADC(R->XX.B.l);break; +case ADC_A: M_ADC(R->AF.B.h);break; +case ADC_xHL: I=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++)); + M_ADC(I);break; +case ADC_BYTE: I=OpZ80(R->PC.W++);M_ADC(I);break; + +case SBC_B: M_SBC(R->BC.B.h);break; +case SBC_C: M_SBC(R->BC.B.l);break; +case SBC_D: M_SBC(R->DE.B.h);break; +case SBC_E: M_SBC(R->DE.B.l);break; +case SBC_H: M_SBC(R->XX.B.h);break; +case SBC_L: M_SBC(R->XX.B.l);break; +case SBC_A: M_SBC(R->AF.B.h);break; +case SBC_xHL: I=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++)); + M_SBC(I);break; +case SBC_BYTE: I=OpZ80(R->PC.W++);M_SBC(I);break; + +case XOR_B: M_XOR(R->BC.B.h);break; +case XOR_C: M_XOR(R->BC.B.l);break; +case XOR_D: M_XOR(R->DE.B.h);break; +case XOR_E: M_XOR(R->DE.B.l);break; +case XOR_H: M_XOR(R->XX.B.h);break; +case XOR_L: M_XOR(R->XX.B.l);break; +case XOR_A: R->AF.B.h=0;R->AF.B.l=P_FLAG|Z_FLAG;break; +case XOR_xHL: I=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++)); + M_XOR(I);break; +case XOR_BYTE: I=OpZ80(R->PC.W++);M_XOR(I);break; + +case CP_B: M_CP(R->BC.B.h);break; +case CP_C: M_CP(R->BC.B.l);break; +case CP_D: M_CP(R->DE.B.h);break; +case CP_E: M_CP(R->DE.B.l);break; +case CP_H: M_CP(R->XX.B.h);break; +case CP_L: M_CP(R->XX.B.l);break; +case CP_A: R->AF.B.l=N_FLAG|Z_FLAG;break; +case CP_xHL: I=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++)); + M_CP(I);break; +case CP_BYTE: I=OpZ80(R->PC.W++);M_CP(I);break; + +case LD_BC_WORD: M_LDWORD(BC);break; +case LD_DE_WORD: M_LDWORD(DE);break; +case LD_HL_WORD: M_LDWORD(XX);break; +case LD_SP_WORD: M_LDWORD(SP);break; + +case LD_PC_HL: R->PC.W=R->XX.W;JumpZ80(R->PC.W);break; +case LD_SP_HL: R->SP.W=R->XX.W;break; +case LD_A_xBC: R->AF.B.h=RdZ80(R->BC.W);break; +case LD_A_xDE: R->AF.B.h=RdZ80(R->DE.W);break; + +case ADD_HL_BC: M_ADDW(XX,BC);break; +case ADD_HL_DE: M_ADDW(XX,DE);break; +case ADD_HL_HL: M_ADDW(XX,XX);break; +case ADD_HL_SP: M_ADDW(XX,SP);break; + +case DEC_BC: R->BC.W--;break; +case DEC_DE: R->DE.W--;break; +case DEC_HL: R->XX.W--;break; +case DEC_SP: R->SP.W--;break; + +case INC_BC: R->BC.W++;break; +case INC_DE: R->DE.W++;break; +case INC_HL: R->XX.W++;break; +case INC_SP: R->SP.W++;break; + +case DEC_B: M_DEC(R->BC.B.h);break; +case DEC_C: M_DEC(R->BC.B.l);break; +case DEC_D: M_DEC(R->DE.B.h);break; +case DEC_E: M_DEC(R->DE.B.l);break; +case DEC_H: M_DEC(R->XX.B.h);break; +case DEC_L: M_DEC(R->XX.B.l);break; +case DEC_A: M_DEC(R->AF.B.h);break; +case DEC_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W));M_DEC(I); + WrZ80(R->XX.W+(offset)OpZ80(R->PC.W++),I); + break; + +case INC_B: M_INC(R->BC.B.h);break; +case INC_C: M_INC(R->BC.B.l);break; +case INC_D: M_INC(R->DE.B.h);break; +case INC_E: M_INC(R->DE.B.l);break; +case INC_H: M_INC(R->XX.B.h);break; +case INC_L: M_INC(R->XX.B.l);break; +case INC_A: M_INC(R->AF.B.h);break; +case INC_xHL: I=RdZ80(R->XX.W+(offset)RdZ80(R->PC.W));M_INC(I); + WrZ80(R->XX.W+(offset)OpZ80(R->PC.W++),I); + break; + +case RLCA: + I=(R->AF.B.h&0x80? C_FLAG:0); + R->AF.B.h=(R->AF.B.h<<1)|I; + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RLA: + I=(R->AF.B.h&0x80? C_FLAG:0); + R->AF.B.h=(R->AF.B.h<<1)|(R->AF.B.l&C_FLAG); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RRCA: + I=R->AF.B.h&0x01; + R->AF.B.h=(R->AF.B.h>>1)|(I? 0x80:0); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; +case RRA: + I=R->AF.B.h&0x01; + R->AF.B.h=(R->AF.B.h>>1)|(R->AF.B.l&C_FLAG? 0x80:0); + R->AF.B.l=(R->AF.B.l&~(C_FLAG|N_FLAG|H_FLAG))|I; + break; + +case RST00: M_RST(0x0000);break; +case RST08: M_RST(0x0008);break; +case RST10: M_RST(0x0010);break; +case RST18: M_RST(0x0018);break; +case RST20: M_RST(0x0020);break; +case RST28: M_RST(0x0028);break; +case RST30: M_RST(0x0030);break; +case RST38: M_RST(0x0038);break; + +case PUSH_BC: M_PUSH(BC);break; +case PUSH_DE: M_PUSH(DE);break; +case PUSH_HL: M_PUSH(XX);break; +case PUSH_AF: M_PUSH(AF);break; + +case POP_BC: M_POP(BC);break; +case POP_DE: M_POP(DE);break; +case POP_HL: M_POP(XX);break; +case POP_AF: M_POP(AF);break; + +case DJNZ: if(--R->BC.B.h) { R->ICount-=5;M_JR; } else R->PC.W++;break; +case JP: M_JP;break; +case JR: M_JR;break; +case CALL: M_CALL;break; +case RET: M_RET;break; +case SCF: S(C_FLAG);R(N_FLAG|H_FLAG);break; +case CPL: R->AF.B.h=~R->AF.B.h;S(N_FLAG|H_FLAG);break; +case NOP: break; +case OUTA: I=OpZ80(R->PC.W++);OutZ80(I|(R->AF.W&0xFF00),R->AF.B.h);break; +case INA: I=OpZ80(R->PC.W++);R->AF.B.h=InZ80(I|(R->AF.W&0xFF00));break; + +case HALT: + R->PC.W--; + R->IFF|=IFF_HALT; + R->IBackup=0; + R->ICount=0; + break; + +case DI: + if(R->IFF&IFF_EI) R->ICount+=R->IBackup-1; + R->IFF&=~(IFF_1|IFF_2|IFF_EI); + break; + +case EI: + if(!(R->IFF&(IFF_1|IFF_EI))) + { + R->IFF|=IFF_2|IFF_EI; + R->IBackup=R->ICount; + R->ICount=1; + } + break; + +case CCF: + R->AF.B.l^=C_FLAG;R(N_FLAG|H_FLAG); + R->AF.B.l|=R->AF.B.l&C_FLAG? 0:H_FLAG; + break; + +case EXX: + J.W=R->BC.W;R->BC.W=R->BC1.W;R->BC1.W=J.W; + J.W=R->DE.W;R->DE.W=R->DE1.W;R->DE1.W=J.W; + J.W=R->HL.W;R->HL.W=R->HL1.W;R->HL1.W=J.W; + break; + +case EX_DE_HL: J.W=R->DE.W;R->DE.W=R->HL.W;R->HL.W=J.W;break; +case EX_AF_AF: J.W=R->AF.W;R->AF.W=R->AF1.W;R->AF1.W=J.W;break; + +case LD_B_B: R->BC.B.h=R->BC.B.h;break; +case LD_C_B: R->BC.B.l=R->BC.B.h;break; +case LD_D_B: R->DE.B.h=R->BC.B.h;break; +case LD_E_B: R->DE.B.l=R->BC.B.h;break; +case LD_H_B: R->XX.B.h=R->BC.B.h;break; +case LD_L_B: R->XX.B.l=R->BC.B.h;break; +case LD_A_B: R->AF.B.h=R->BC.B.h;break; +case LD_xHL_B: J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + WrZ80(J.W,R->BC.B.h);break; + +case LD_B_C: R->BC.B.h=R->BC.B.l;break; +case LD_C_C: R->BC.B.l=R->BC.B.l;break; +case LD_D_C: R->DE.B.h=R->BC.B.l;break; +case LD_E_C: R->DE.B.l=R->BC.B.l;break; +case LD_H_C: R->XX.B.h=R->BC.B.l;break; +case LD_L_C: R->XX.B.l=R->BC.B.l;break; +case LD_A_C: R->AF.B.h=R->BC.B.l;break; +case LD_xHL_C: J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + WrZ80(J.W,R->BC.B.l);break; + +case LD_B_D: R->BC.B.h=R->DE.B.h;break; +case LD_C_D: R->BC.B.l=R->DE.B.h;break; +case LD_D_D: R->DE.B.h=R->DE.B.h;break; +case LD_E_D: R->DE.B.l=R->DE.B.h;break; +case LD_H_D: R->XX.B.h=R->DE.B.h;break; +case LD_L_D: R->XX.B.l=R->DE.B.h;break; +case LD_A_D: R->AF.B.h=R->DE.B.h;break; +case LD_xHL_D: J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + WrZ80(J.W,R->DE.B.h);break; + +case LD_B_E: R->BC.B.h=R->DE.B.l;break; +case LD_C_E: R->BC.B.l=R->DE.B.l;break; +case LD_D_E: R->DE.B.h=R->DE.B.l;break; +case LD_E_E: R->DE.B.l=R->DE.B.l;break; +case LD_H_E: R->XX.B.h=R->DE.B.l;break; +case LD_L_E: R->XX.B.l=R->DE.B.l;break; +case LD_A_E: R->AF.B.h=R->DE.B.l;break; +case LD_xHL_E: J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + WrZ80(J.W,R->DE.B.l);break; + +case LD_B_H: R->BC.B.h=R->XX.B.h;break; +case LD_C_H: R->BC.B.l=R->XX.B.h;break; +case LD_D_H: R->DE.B.h=R->XX.B.h;break; +case LD_E_H: R->DE.B.l=R->XX.B.h;break; +case LD_H_H: R->XX.B.h=R->XX.B.h;break; +case LD_L_H: R->XX.B.l=R->XX.B.h;break; +case LD_A_H: R->AF.B.h=R->XX.B.h;break; +case LD_xHL_H: J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + WrZ80(J.W,R->HL.B.h);break; + +case LD_B_L: R->BC.B.h=R->XX.B.l;break; +case LD_C_L: R->BC.B.l=R->XX.B.l;break; +case LD_D_L: R->DE.B.h=R->XX.B.l;break; +case LD_E_L: R->DE.B.l=R->XX.B.l;break; +case LD_H_L: R->XX.B.h=R->XX.B.l;break; +case LD_L_L: R->XX.B.l=R->XX.B.l;break; +case LD_A_L: R->AF.B.h=R->XX.B.l;break; +case LD_xHL_L: J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + WrZ80(J.W,R->HL.B.l);break; + +case LD_B_A: R->BC.B.h=R->AF.B.h;break; +case LD_C_A: R->BC.B.l=R->AF.B.h;break; +case LD_D_A: R->DE.B.h=R->AF.B.h;break; +case LD_E_A: R->DE.B.l=R->AF.B.h;break; +case LD_H_A: R->XX.B.h=R->AF.B.h;break; +case LD_L_A: R->XX.B.l=R->AF.B.h;break; +case LD_A_A: R->AF.B.h=R->AF.B.h;break; +case LD_xHL_A: J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + WrZ80(J.W,R->AF.B.h);break; + +case LD_xBC_A: WrZ80(R->BC.W,R->AF.B.h);break; +case LD_xDE_A: WrZ80(R->DE.W,R->AF.B.h);break; + +case LD_B_xHL: R->BC.B.h=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break; +case LD_C_xHL: R->BC.B.l=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break; +case LD_D_xHL: R->DE.B.h=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break; +case LD_E_xHL: R->DE.B.l=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break; +case LD_H_xHL: R->HL.B.h=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break; +case LD_L_xHL: R->HL.B.l=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break; +case LD_A_xHL: R->AF.B.h=RdZ80(R->XX.W+(offset)OpZ80(R->PC.W++));break; + +case LD_B_BYTE: R->BC.B.h=OpZ80(R->PC.W++);break; +case LD_C_BYTE: R->BC.B.l=OpZ80(R->PC.W++);break; +case LD_D_BYTE: R->DE.B.h=OpZ80(R->PC.W++);break; +case LD_E_BYTE: R->DE.B.l=OpZ80(R->PC.W++);break; +case LD_H_BYTE: R->XX.B.h=OpZ80(R->PC.W++);break; +case LD_L_BYTE: R->XX.B.l=OpZ80(R->PC.W++);break; +case LD_A_BYTE: R->AF.B.h=OpZ80(R->PC.W++);break; +case LD_xHL_BYTE: J.W=R->XX.W+(offset)OpZ80(R->PC.W++); + WrZ80(J.W,OpZ80(R->PC.W++));break; + +case LD_xWORD_HL: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + WrZ80(J.W++,R->XX.B.l); + WrZ80(J.W,R->XX.B.h); + break; + +case LD_HL_xWORD: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + R->XX.B.l=RdZ80(J.W++); + R->XX.B.h=RdZ80(J.W); + break; + +case LD_A_xWORD: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + R->AF.B.h=RdZ80(J.W); + break; + +case LD_xWORD_A: + J.B.l=OpZ80(R->PC.W++); + J.B.h=OpZ80(R->PC.W++); + WrZ80(J.W,R->AF.B.h); + break; + +case EX_HL_xSP: + J.B.l=RdZ80(R->SP.W);WrZ80(R->SP.W++,R->XX.B.l); + J.B.h=RdZ80(R->SP.W);WrZ80(R->SP.W--,R->XX.B.h); + R->XX.W=J.W; + break; + +case DAA: + J.W=R->AF.B.h; + if(R->AF.B.l&C_FLAG) J.W|=256; + if(R->AF.B.l&H_FLAG) J.W|=512; + if(R->AF.B.l&N_FLAG) J.W|=1024; + R->AF.W=DAATable[J.W]; + break; diff --git a/src/Examples/IoD16kSpectrumEmulator/tables.h b/src/Examples/IoD16kSpectrumEmulator/tables.h new file mode 100644 index 0000000..dbb299a --- /dev/null +++ b/src/Examples/IoD16kSpectrumEmulator/tables.h @@ -0,0 +1,447 @@ +/** Z80: portable Z80 emulator *******************************/ +/** **/ +/** Tables.h **/ +/** **/ +/** This file contains tables of used by Z80 emulation to **/ +/** compute SIGN,ZERO, PARITY flags, and decimal correction **/ +/** There are also timing tables for Z80 opcodes. This file **/ +/** is included from Z80.c. **/ +/** **/ +/** Copyright (C) Marat Fayzullin 1994-2007 **/ +/** You are not allowed to distribute this software **/ +/** commercially. Please, notify me, if you make any **/ +/** changes to this file. **/ +/*************************************************************/ + +static const byte Cycles[256] = +{ + 4,10, 7, 6, 4, 4, 7, 4, 4,11, 7, 6, 4, 4, 7, 4, + 8,10, 7, 6, 4, 4, 7, 4,12,11, 7, 6, 4, 4, 7, 4, + 7,10,16, 6, 4, 4, 7, 4, 7,11,16, 6, 4, 4, 7, 4, + 7,10,13, 6,11,11,10, 4, 7,11,13, 6, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 7, 7, 7, 7, 7, 7, 4, 7, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4, + 5,10,10,10,10,11, 7,11, 5,10,10, 0,10,17, 7,11, + 5,10,10,11,10,11, 7,11, 5, 4,10,11,10, 0, 7,11, + 5,10,10,19,10,11, 7,11, 5, 4,10, 4,10, 0, 7,11, + 5,10,10, 4,10,11, 7,11, 5, 6,10, 4,10, 0, 7,11 +}; + +static const byte CyclesCB[256] = +{ + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8, + 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8, + 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8, + 8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8, + 8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8 +}; + +static const byte CyclesED[256] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 12,12,15,20, 8,14, 8, 9,12,12,15,20, 0,14, 0, 9, + 12,12,15,20, 0, 0, 8, 9,12,12,15,20, 0, 0, 8, 9, + 12,12,15,20, 0, 0, 0,18,12,12,15,20, 0, 0, 0,18, + 12, 0,15,20, 0, 0, 0, 0,12,12,15,20, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16,16,16,16, 0, 0, 0, 0,16,16,16,16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +static const byte CyclesXX[256] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,15, 0, 0, 0, 0, 0, 0, + 0,14,20,10, 9, 9, 9, 0, 0,15,20,10, 9, 9, 9, 0, + 0, 0, 0, 0,23,23,19, 0, 0,15, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 9, 9, 9, 9, 9, 9,19, 9, 9, 9, 9, 9, 9, 9,19, 9, + 19,19,19,19,19,19,19,19, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 9, 9,19, 0, 0, 0, 0, 0, 9, 9,19, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0,14, 0,23, 0,15, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0 +}; + +static const byte CyclesXXCB[256] = +{ + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0, + 0, 0, 0, 0, 0, 0,23, 0, 0, 0, 0, 0, 0, 0,23, 0 +}; + +static const byte ZSTable[256] = +{ + Z_FLAG,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG, + S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG,S_FLAG +}; + +static const byte PZSTable[256] = +{ + Z_FLAG|P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0, + 0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG, + 0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG,P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0, + 0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG,P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0, + P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0,0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG, + 0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG,P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0, + P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0,0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG, + P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0,0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG, + 0,P_FLAG,P_FLAG,0,P_FLAG,0,0,P_FLAG,P_FLAG,0,0,P_FLAG,0,P_FLAG,P_FLAG,0, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG,S_FLAG|P_FLAG,S_FLAG|P_FLAG,S_FLAG, + S_FLAG|P_FLAG,S_FLAG,S_FLAG,S_FLAG|P_FLAG +}; + +static const word DAATable[2048] = +{ + 0x0044,0x0100,0x0200,0x0304,0x0400,0x0504,0x0604,0x0700, + 0x0808,0x090C,0x1010,0x1114,0x1214,0x1310,0x1414,0x1510, + 0x1000,0x1104,0x1204,0x1300,0x1404,0x1500,0x1600,0x1704, + 0x180C,0x1908,0x2030,0x2134,0x2234,0x2330,0x2434,0x2530, + 0x2020,0x2124,0x2224,0x2320,0x2424,0x2520,0x2620,0x2724, + 0x282C,0x2928,0x3034,0x3130,0x3230,0x3334,0x3430,0x3534, + 0x3024,0x3120,0x3220,0x3324,0x3420,0x3524,0x3624,0x3720, + 0x3828,0x392C,0x4010,0x4114,0x4214,0x4310,0x4414,0x4510, + 0x4000,0x4104,0x4204,0x4300,0x4404,0x4500,0x4600,0x4704, + 0x480C,0x4908,0x5014,0x5110,0x5210,0x5314,0x5410,0x5514, + 0x5004,0x5100,0x5200,0x5304,0x5400,0x5504,0x5604,0x5700, + 0x5808,0x590C,0x6034,0x6130,0x6230,0x6334,0x6430,0x6534, + 0x6024,0x6120,0x6220,0x6324,0x6420,0x6524,0x6624,0x6720, + 0x6828,0x692C,0x7030,0x7134,0x7234,0x7330,0x7434,0x7530, + 0x7020,0x7124,0x7224,0x7320,0x7424,0x7520,0x7620,0x7724, + 0x782C,0x7928,0x8090,0x8194,0x8294,0x8390,0x8494,0x8590, + 0x8080,0x8184,0x8284,0x8380,0x8484,0x8580,0x8680,0x8784, + 0x888C,0x8988,0x9094,0x9190,0x9290,0x9394,0x9490,0x9594, + 0x9084,0x9180,0x9280,0x9384,0x9480,0x9584,0x9684,0x9780, + 0x9888,0x998C,0x0055,0x0111,0x0211,0x0315,0x0411,0x0515, + 0x0045,0x0101,0x0201,0x0305,0x0401,0x0505,0x0605,0x0701, + 0x0809,0x090D,0x1011,0x1115,0x1215,0x1311,0x1415,0x1511, + 0x1001,0x1105,0x1205,0x1301,0x1405,0x1501,0x1601,0x1705, + 0x180D,0x1909,0x2031,0x2135,0x2235,0x2331,0x2435,0x2531, + 0x2021,0x2125,0x2225,0x2321,0x2425,0x2521,0x2621,0x2725, + 0x282D,0x2929,0x3035,0x3131,0x3231,0x3335,0x3431,0x3535, + 0x3025,0x3121,0x3221,0x3325,0x3421,0x3525,0x3625,0x3721, + 0x3829,0x392D,0x4011,0x4115,0x4215,0x4311,0x4415,0x4511, + 0x4001,0x4105,0x4205,0x4301,0x4405,0x4501,0x4601,0x4705, + 0x480D,0x4909,0x5015,0x5111,0x5211,0x5315,0x5411,0x5515, + 0x5005,0x5101,0x5201,0x5305,0x5401,0x5505,0x5605,0x5701, + 0x5809,0x590D,0x6035,0x6131,0x6231,0x6335,0x6431,0x6535, + 0x6025,0x6121,0x6221,0x6325,0x6421,0x6525,0x6625,0x6721, + 0x6829,0x692D,0x7031,0x7135,0x7235,0x7331,0x7435,0x7531, + 0x7021,0x7125,0x7225,0x7321,0x7425,0x7521,0x7621,0x7725, + 0x782D,0x7929,0x8091,0x8195,0x8295,0x8391,0x8495,0x8591, + 0x8081,0x8185,0x8285,0x8381,0x8485,0x8581,0x8681,0x8785, + 0x888D,0x8989,0x9095,0x9191,0x9291,0x9395,0x9491,0x9595, + 0x9085,0x9181,0x9281,0x9385,0x9481,0x9585,0x9685,0x9781, + 0x9889,0x998D,0xA0B5,0xA1B1,0xA2B1,0xA3B5,0xA4B1,0xA5B5, + 0xA0A5,0xA1A1,0xA2A1,0xA3A5,0xA4A1,0xA5A5,0xA6A5,0xA7A1, + 0xA8A9,0xA9AD,0xB0B1,0xB1B5,0xB2B5,0xB3B1,0xB4B5,0xB5B1, + 0xB0A1,0xB1A5,0xB2A5,0xB3A1,0xB4A5,0xB5A1,0xB6A1,0xB7A5, + 0xB8AD,0xB9A9,0xC095,0xC191,0xC291,0xC395,0xC491,0xC595, + 0xC085,0xC181,0xC281,0xC385,0xC481,0xC585,0xC685,0xC781, + 0xC889,0xC98D,0xD091,0xD195,0xD295,0xD391,0xD495,0xD591, + 0xD081,0xD185,0xD285,0xD381,0xD485,0xD581,0xD681,0xD785, + 0xD88D,0xD989,0xE0B1,0xE1B5,0xE2B5,0xE3B1,0xE4B5,0xE5B1, + 0xE0A1,0xE1A5,0xE2A5,0xE3A1,0xE4A5,0xE5A1,0xE6A1,0xE7A5, + 0xE8AD,0xE9A9,0xF0B5,0xF1B1,0xF2B1,0xF3B5,0xF4B1,0xF5B5, + 0xF0A5,0xF1A1,0xF2A1,0xF3A5,0xF4A1,0xF5A5,0xF6A5,0xF7A1, + 0xF8A9,0xF9AD,0x0055,0x0111,0x0211,0x0315,0x0411,0x0515, + 0x0045,0x0101,0x0201,0x0305,0x0401,0x0505,0x0605,0x0701, + 0x0809,0x090D,0x1011,0x1115,0x1215,0x1311,0x1415,0x1511, + 0x1001,0x1105,0x1205,0x1301,0x1405,0x1501,0x1601,0x1705, + 0x180D,0x1909,0x2031,0x2135,0x2235,0x2331,0x2435,0x2531, + 0x2021,0x2125,0x2225,0x2321,0x2425,0x2521,0x2621,0x2725, + 0x282D,0x2929,0x3035,0x3131,0x3231,0x3335,0x3431,0x3535, + 0x3025,0x3121,0x3221,0x3325,0x3421,0x3525,0x3625,0x3721, + 0x3829,0x392D,0x4011,0x4115,0x4215,0x4311,0x4415,0x4511, + 0x4001,0x4105,0x4205,0x4301,0x4405,0x4501,0x4601,0x4705, + 0x480D,0x4909,0x5015,0x5111,0x5211,0x5315,0x5411,0x5515, + 0x5005,0x5101,0x5201,0x5305,0x5401,0x5505,0x5605,0x5701, + 0x5809,0x590D,0x6035,0x6131,0x6231,0x6335,0x6431,0x6535, + 0x0604,0x0700,0x0808,0x090C,0x0A0C,0x0B08,0x0C0C,0x0D08, + 0x0E08,0x0F0C,0x1010,0x1114,0x1214,0x1310,0x1414,0x1510, + 0x1600,0x1704,0x180C,0x1908,0x1A08,0x1B0C,0x1C08,0x1D0C, + 0x1E0C,0x1F08,0x2030,0x2134,0x2234,0x2330,0x2434,0x2530, + 0x2620,0x2724,0x282C,0x2928,0x2A28,0x2B2C,0x2C28,0x2D2C, + 0x2E2C,0x2F28,0x3034,0x3130,0x3230,0x3334,0x3430,0x3534, + 0x3624,0x3720,0x3828,0x392C,0x3A2C,0x3B28,0x3C2C,0x3D28, + 0x3E28,0x3F2C,0x4010,0x4114,0x4214,0x4310,0x4414,0x4510, + 0x4600,0x4704,0x480C,0x4908,0x4A08,0x4B0C,0x4C08,0x4D0C, + 0x4E0C,0x4F08,0x5014,0x5110,0x5210,0x5314,0x5410,0x5514, + 0x5604,0x5700,0x5808,0x590C,0x5A0C,0x5B08,0x5C0C,0x5D08, + 0x5E08,0x5F0C,0x6034,0x6130,0x6230,0x6334,0x6430,0x6534, + 0x6624,0x6720,0x6828,0x692C,0x6A2C,0x6B28,0x6C2C,0x6D28, + 0x6E28,0x6F2C,0x7030,0x7134,0x7234,0x7330,0x7434,0x7530, + 0x7620,0x7724,0x782C,0x7928,0x7A28,0x7B2C,0x7C28,0x7D2C, + 0x7E2C,0x7F28,0x8090,0x8194,0x8294,0x8390,0x8494,0x8590, + 0x8680,0x8784,0x888C,0x8988,0x8A88,0x8B8C,0x8C88,0x8D8C, + 0x8E8C,0x8F88,0x9094,0x9190,0x9290,0x9394,0x9490,0x9594, + 0x9684,0x9780,0x9888,0x998C,0x9A8C,0x9B88,0x9C8C,0x9D88, + 0x9E88,0x9F8C,0x0055,0x0111,0x0211,0x0315,0x0411,0x0515, + 0x0605,0x0701,0x0809,0x090D,0x0A0D,0x0B09,0x0C0D,0x0D09, + 0x0E09,0x0F0D,0x1011,0x1115,0x1215,0x1311,0x1415,0x1511, + 0x1601,0x1705,0x180D,0x1909,0x1A09,0x1B0D,0x1C09,0x1D0D, + 0x1E0D,0x1F09,0x2031,0x2135,0x2235,0x2331,0x2435,0x2531, + 0x2621,0x2725,0x282D,0x2929,0x2A29,0x2B2D,0x2C29,0x2D2D, + 0x2E2D,0x2F29,0x3035,0x3131,0x3231,0x3335,0x3431,0x3535, + 0x3625,0x3721,0x3829,0x392D,0x3A2D,0x3B29,0x3C2D,0x3D29, + 0x3E29,0x3F2D,0x4011,0x4115,0x4215,0x4311,0x4415,0x4511, + 0x4601,0x4705,0x480D,0x4909,0x4A09,0x4B0D,0x4C09,0x4D0D, + 0x4E0D,0x4F09,0x5015,0x5111,0x5211,0x5315,0x5411,0x5515, + 0x5605,0x5701,0x5809,0x590D,0x5A0D,0x5B09,0x5C0D,0x5D09, + 0x5E09,0x5F0D,0x6035,0x6131,0x6231,0x6335,0x6431,0x6535, + 0x6625,0x6721,0x6829,0x692D,0x6A2D,0x6B29,0x6C2D,0x6D29, + 0x6E29,0x6F2D,0x7031,0x7135,0x7235,0x7331,0x7435,0x7531, + 0x7621,0x7725,0x782D,0x7929,0x7A29,0x7B2D,0x7C29,0x7D2D, + 0x7E2D,0x7F29,0x8091,0x8195,0x8295,0x8391,0x8495,0x8591, + 0x8681,0x8785,0x888D,0x8989,0x8A89,0x8B8D,0x8C89,0x8D8D, + 0x8E8D,0x8F89,0x9095,0x9191,0x9291,0x9395,0x9491,0x9595, + 0x9685,0x9781,0x9889,0x998D,0x9A8D,0x9B89,0x9C8D,0x9D89, + 0x9E89,0x9F8D,0xA0B5,0xA1B1,0xA2B1,0xA3B5,0xA4B1,0xA5B5, + 0xA6A5,0xA7A1,0xA8A9,0xA9AD,0xAAAD,0xABA9,0xACAD,0xADA9, + 0xAEA9,0xAFAD,0xB0B1,0xB1B5,0xB2B5,0xB3B1,0xB4B5,0xB5B1, + 0xB6A1,0xB7A5,0xB8AD,0xB9A9,0xBAA9,0xBBAD,0xBCA9,0xBDAD, + 0xBEAD,0xBFA9,0xC095,0xC191,0xC291,0xC395,0xC491,0xC595, + 0xC685,0xC781,0xC889,0xC98D,0xCA8D,0xCB89,0xCC8D,0xCD89, + 0xCE89,0xCF8D,0xD091,0xD195,0xD295,0xD391,0xD495,0xD591, + 0xD681,0xD785,0xD88D,0xD989,0xDA89,0xDB8D,0xDC89,0xDD8D, + 0xDE8D,0xDF89,0xE0B1,0xE1B5,0xE2B5,0xE3B1,0xE4B5,0xE5B1, + 0xE6A1,0xE7A5,0xE8AD,0xE9A9,0xEAA9,0xEBAD,0xECA9,0xEDAD, + 0xEEAD,0xEFA9,0xF0B5,0xF1B1,0xF2B1,0xF3B5,0xF4B1,0xF5B5, + 0xF6A5,0xF7A1,0xF8A9,0xF9AD,0xFAAD,0xFBA9,0xFCAD,0xFDA9, + 0xFEA9,0xFFAD,0x0055,0x0111,0x0211,0x0315,0x0411,0x0515, + 0x0605,0x0701,0x0809,0x090D,0x0A0D,0x0B09,0x0C0D,0x0D09, + 0x0E09,0x0F0D,0x1011,0x1115,0x1215,0x1311,0x1415,0x1511, + 0x1601,0x1705,0x180D,0x1909,0x1A09,0x1B0D,0x1C09,0x1D0D, + 0x1E0D,0x1F09,0x2031,0x2135,0x2235,0x2331,0x2435,0x2531, + 0x2621,0x2725,0x282D,0x2929,0x2A29,0x2B2D,0x2C29,0x2D2D, + 0x2E2D,0x2F29,0x3035,0x3131,0x3231,0x3335,0x3431,0x3535, + 0x3625,0x3721,0x3829,0x392D,0x3A2D,0x3B29,0x3C2D,0x3D29, + 0x3E29,0x3F2D,0x4011,0x4115,0x4215,0x4311,0x4415,0x4511, + 0x4601,0x4705,0x480D,0x4909,0x4A09,0x4B0D,0x4C09,0x4D0D, + 0x4E0D,0x4F09,0x5015,0x5111,0x5211,0x5315,0x5411,0x5515, + 0x5605,0x5701,0x5809,0x590D,0x5A0D,0x5B09,0x5C0D,0x5D09, + 0x5E09,0x5F0D,0x6035,0x6131,0x6231,0x6335,0x6431,0x6535, + 0x0046,0x0102,0x0202,0x0306,0x0402,0x0506,0x0606,0x0702, + 0x080A,0x090E,0x0402,0x0506,0x0606,0x0702,0x080A,0x090E, + 0x1002,0x1106,0x1206,0x1302,0x1406,0x1502,0x1602,0x1706, + 0x180E,0x190A,0x1406,0x1502,0x1602,0x1706,0x180E,0x190A, + 0x2022,0x2126,0x2226,0x2322,0x2426,0x2522,0x2622,0x2726, + 0x282E,0x292A,0x2426,0x2522,0x2622,0x2726,0x282E,0x292A, + 0x3026,0x3122,0x3222,0x3326,0x3422,0x3526,0x3626,0x3722, + 0x382A,0x392E,0x3422,0x3526,0x3626,0x3722,0x382A,0x392E, + 0x4002,0x4106,0x4206,0x4302,0x4406,0x4502,0x4602,0x4706, + 0x480E,0x490A,0x4406,0x4502,0x4602,0x4706,0x480E,0x490A, + 0x5006,0x5102,0x5202,0x5306,0x5402,0x5506,0x5606,0x5702, + 0x580A,0x590E,0x5402,0x5506,0x5606,0x5702,0x580A,0x590E, + 0x6026,0x6122,0x6222,0x6326,0x6422,0x6526,0x6626,0x6722, + 0x682A,0x692E,0x6422,0x6526,0x6626,0x6722,0x682A,0x692E, + 0x7022,0x7126,0x7226,0x7322,0x7426,0x7522,0x7622,0x7726, + 0x782E,0x792A,0x7426,0x7522,0x7622,0x7726,0x782E,0x792A, + 0x8082,0x8186,0x8286,0x8382,0x8486,0x8582,0x8682,0x8786, + 0x888E,0x898A,0x8486,0x8582,0x8682,0x8786,0x888E,0x898A, + 0x9086,0x9182,0x9282,0x9386,0x9482,0x9586,0x9686,0x9782, + 0x988A,0x998E,0x3423,0x3527,0x3627,0x3723,0x382B,0x392F, + 0x4003,0x4107,0x4207,0x4303,0x4407,0x4503,0x4603,0x4707, + 0x480F,0x490B,0x4407,0x4503,0x4603,0x4707,0x480F,0x490B, + 0x5007,0x5103,0x5203,0x5307,0x5403,0x5507,0x5607,0x5703, + 0x580B,0x590F,0x5403,0x5507,0x5607,0x5703,0x580B,0x590F, + 0x6027,0x6123,0x6223,0x6327,0x6423,0x6527,0x6627,0x6723, + 0x682B,0x692F,0x6423,0x6527,0x6627,0x6723,0x682B,0x692F, + 0x7023,0x7127,0x7227,0x7323,0x7427,0x7523,0x7623,0x7727, + 0x782F,0x792B,0x7427,0x7523,0x7623,0x7727,0x782F,0x792B, + 0x8083,0x8187,0x8287,0x8383,0x8487,0x8583,0x8683,0x8787, + 0x888F,0x898B,0x8487,0x8583,0x8683,0x8787,0x888F,0x898B, + 0x9087,0x9183,0x9283,0x9387,0x9483,0x9587,0x9687,0x9783, + 0x988B,0x998F,0x9483,0x9587,0x9687,0x9783,0x988B,0x998F, + 0xA0A7,0xA1A3,0xA2A3,0xA3A7,0xA4A3,0xA5A7,0xA6A7,0xA7A3, + 0xA8AB,0xA9AF,0xA4A3,0xA5A7,0xA6A7,0xA7A3,0xA8AB,0xA9AF, + 0xB0A3,0xB1A7,0xB2A7,0xB3A3,0xB4A7,0xB5A3,0xB6A3,0xB7A7, + 0xB8AF,0xB9AB,0xB4A7,0xB5A3,0xB6A3,0xB7A7,0xB8AF,0xB9AB, + 0xC087,0xC183,0xC283,0xC387,0xC483,0xC587,0xC687,0xC783, + 0xC88B,0xC98F,0xC483,0xC587,0xC687,0xC783,0xC88B,0xC98F, + 0xD083,0xD187,0xD287,0xD383,0xD487,0xD583,0xD683,0xD787, + 0xD88F,0xD98B,0xD487,0xD583,0xD683,0xD787,0xD88F,0xD98B, + 0xE0A3,0xE1A7,0xE2A7,0xE3A3,0xE4A7,0xE5A3,0xE6A3,0xE7A7, + 0xE8AF,0xE9AB,0xE4A7,0xE5A3,0xE6A3,0xE7A7,0xE8AF,0xE9AB, + 0xF0A7,0xF1A3,0xF2A3,0xF3A7,0xF4A3,0xF5A7,0xF6A7,0xF7A3, + 0xF8AB,0xF9AF,0xF4A3,0xF5A7,0xF6A7,0xF7A3,0xF8AB,0xF9AF, + 0x0047,0x0103,0x0203,0x0307,0x0403,0x0507,0x0607,0x0703, + 0x080B,0x090F,0x0403,0x0507,0x0607,0x0703,0x080B,0x090F, + 0x1003,0x1107,0x1207,0x1303,0x1407,0x1503,0x1603,0x1707, + 0x180F,0x190B,0x1407,0x1503,0x1603,0x1707,0x180F,0x190B, + 0x2023,0x2127,0x2227,0x2323,0x2427,0x2523,0x2623,0x2727, + 0x282F,0x292B,0x2427,0x2523,0x2623,0x2727,0x282F,0x292B, + 0x3027,0x3123,0x3223,0x3327,0x3423,0x3527,0x3627,0x3723, + 0x382B,0x392F,0x3423,0x3527,0x3627,0x3723,0x382B,0x392F, + 0x4003,0x4107,0x4207,0x4303,0x4407,0x4503,0x4603,0x4707, + 0x480F,0x490B,0x4407,0x4503,0x4603,0x4707,0x480F,0x490B, + 0x5007,0x5103,0x5203,0x5307,0x5403,0x5507,0x5607,0x5703, + 0x580B,0x590F,0x5403,0x5507,0x5607,0x5703,0x580B,0x590F, + 0x6027,0x6123,0x6223,0x6327,0x6423,0x6527,0x6627,0x6723, + 0x682B,0x692F,0x6423,0x6527,0x6627,0x6723,0x682B,0x692F, + 0x7023,0x7127,0x7227,0x7323,0x7427,0x7523,0x7623,0x7727, + 0x782F,0x792B,0x7427,0x7523,0x7623,0x7727,0x782F,0x792B, + 0x8083,0x8187,0x8287,0x8383,0x8487,0x8583,0x8683,0x8787, + 0x888F,0x898B,0x8487,0x8583,0x8683,0x8787,0x888F,0x898B, + 0x9087,0x9183,0x9283,0x9387,0x9483,0x9587,0x9687,0x9783, + 0x988B,0x998F,0x9483,0x9587,0x9687,0x9783,0x988B,0x998F, + 0xFABE,0xFBBA,0xFCBE,0xFDBA,0xFEBA,0xFFBE,0x0046,0x0102, + 0x0202,0x0306,0x0402,0x0506,0x0606,0x0702,0x080A,0x090E, + 0x0A1E,0x0B1A,0x0C1E,0x0D1A,0x0E1A,0x0F1E,0x1002,0x1106, + 0x1206,0x1302,0x1406,0x1502,0x1602,0x1706,0x180E,0x190A, + 0x1A1A,0x1B1E,0x1C1A,0x1D1E,0x1E1E,0x1F1A,0x2022,0x2126, + 0x2226,0x2322,0x2426,0x2522,0x2622,0x2726,0x282E,0x292A, + 0x2A3A,0x2B3E,0x2C3A,0x2D3E,0x2E3E,0x2F3A,0x3026,0x3122, + 0x3222,0x3326,0x3422,0x3526,0x3626,0x3722,0x382A,0x392E, + 0x3A3E,0x3B3A,0x3C3E,0x3D3A,0x3E3A,0x3F3E,0x4002,0x4106, + 0x4206,0x4302,0x4406,0x4502,0x4602,0x4706,0x480E,0x490A, + 0x4A1A,0x4B1E,0x4C1A,0x4D1E,0x4E1E,0x4F1A,0x5006,0x5102, + 0x5202,0x5306,0x5402,0x5506,0x5606,0x5702,0x580A,0x590E, + 0x5A1E,0x5B1A,0x5C1E,0x5D1A,0x5E1A,0x5F1E,0x6026,0x6122, + 0x6222,0x6326,0x6422,0x6526,0x6626,0x6722,0x682A,0x692E, + 0x6A3E,0x6B3A,0x6C3E,0x6D3A,0x6E3A,0x6F3E,0x7022,0x7126, + 0x7226,0x7322,0x7426,0x7522,0x7622,0x7726,0x782E,0x792A, + 0x7A3A,0x7B3E,0x7C3A,0x7D3E,0x7E3E,0x7F3A,0x8082,0x8186, + 0x8286,0x8382,0x8486,0x8582,0x8682,0x8786,0x888E,0x898A, + 0x8A9A,0x8B9E,0x8C9A,0x8D9E,0x8E9E,0x8F9A,0x9086,0x9182, + 0x9282,0x9386,0x3423,0x3527,0x3627,0x3723,0x382B,0x392F, + 0x3A3F,0x3B3B,0x3C3F,0x3D3B,0x3E3B,0x3F3F,0x4003,0x4107, + 0x4207,0x4303,0x4407,0x4503,0x4603,0x4707,0x480F,0x490B, + 0x4A1B,0x4B1F,0x4C1B,0x4D1F,0x4E1F,0x4F1B,0x5007,0x5103, + 0x5203,0x5307,0x5403,0x5507,0x5607,0x5703,0x580B,0x590F, + 0x5A1F,0x5B1B,0x5C1F,0x5D1B,0x5E1B,0x5F1F,0x6027,0x6123, + 0x6223,0x6327,0x6423,0x6527,0x6627,0x6723,0x682B,0x692F, + 0x6A3F,0x6B3B,0x6C3F,0x6D3B,0x6E3B,0x6F3F,0x7023,0x7127, + 0x7227,0x7323,0x7427,0x7523,0x7623,0x7727,0x782F,0x792B, + 0x7A3B,0x7B3F,0x7C3B,0x7D3F,0x7E3F,0x7F3B,0x8083,0x8187, + 0x8287,0x8383,0x8487,0x8583,0x8683,0x8787,0x888F,0x898B, + 0x8A9B,0x8B9F,0x8C9B,0x8D9F,0x8E9F,0x8F9B,0x9087,0x9183, + 0x9283,0x9387,0x9483,0x9587,0x9687,0x9783,0x988B,0x998F, + 0x9A9F,0x9B9B,0x9C9F,0x9D9B,0x9E9B,0x9F9F,0xA0A7,0xA1A3, + 0xA2A3,0xA3A7,0xA4A3,0xA5A7,0xA6A7,0xA7A3,0xA8AB,0xA9AF, + 0xAABF,0xABBB,0xACBF,0xADBB,0xAEBB,0xAFBF,0xB0A3,0xB1A7, + 0xB2A7,0xB3A3,0xB4A7,0xB5A3,0xB6A3,0xB7A7,0xB8AF,0xB9AB, + 0xBABB,0xBBBF,0xBCBB,0xBDBF,0xBEBF,0xBFBB,0xC087,0xC183, + 0xC283,0xC387,0xC483,0xC587,0xC687,0xC783,0xC88B,0xC98F, + 0xCA9F,0xCB9B,0xCC9F,0xCD9B,0xCE9B,0xCF9F,0xD083,0xD187, + 0xD287,0xD383,0xD487,0xD583,0xD683,0xD787,0xD88F,0xD98B, + 0xDA9B,0xDB9F,0xDC9B,0xDD9F,0xDE9F,0xDF9B,0xE0A3,0xE1A7, + 0xE2A7,0xE3A3,0xE4A7,0xE5A3,0xE6A3,0xE7A7,0xE8AF,0xE9AB, + 0xEABB,0xEBBF,0xECBB,0xEDBF,0xEEBF,0xEFBB,0xF0A7,0xF1A3, + 0xF2A3,0xF3A7,0xF4A3,0xF5A7,0xF6A7,0xF7A3,0xF8AB,0xF9AF, + 0xFABF,0xFBBB,0xFCBF,0xFDBB,0xFEBB,0xFFBF,0x0047,0x0103, + 0x0203,0x0307,0x0403,0x0507,0x0607,0x0703,0x080B,0x090F, + 0x0A1F,0x0B1B,0x0C1F,0x0D1B,0x0E1B,0x0F1F,0x1003,0x1107, + 0x1207,0x1303,0x1407,0x1503,0x1603,0x1707,0x180F,0x190B, + 0x1A1B,0x1B1F,0x1C1B,0x1D1F,0x1E1F,0x1F1B,0x2023,0x2127, + 0x2227,0x2323,0x2427,0x2523,0x2623,0x2727,0x282F,0x292B, + 0x2A3B,0x2B3F,0x2C3B,0x2D3F,0x2E3F,0x2F3B,0x3027,0x3123, + 0x3223,0x3327,0x3423,0x3527,0x3627,0x3723,0x382B,0x392F, + 0x3A3F,0x3B3B,0x3C3F,0x3D3B,0x3E3B,0x3F3F,0x4003,0x4107, + 0x4207,0x4303,0x4407,0x4503,0x4603,0x4707,0x480F,0x490B, + 0x4A1B,0x4B1F,0x4C1B,0x4D1F,0x4E1F,0x4F1B,0x5007,0x5103, + 0x5203,0x5307,0x5403,0x5507,0x5607,0x5703,0x580B,0x590F, + 0x5A1F,0x5B1B,0x5C1F,0x5D1B,0x5E1B,0x5F1F,0x6027,0x6123, + 0x6223,0x6327,0x6423,0x6527,0x6627,0x6723,0x682B,0x692F, + 0x6A3F,0x6B3B,0x6C3F,0x6D3B,0x6E3B,0x6F3F,0x7023,0x7127, + 0x7227,0x7323,0x7427,0x7523,0x7623,0x7727,0x782F,0x792B, + 0x7A3B,0x7B3F,0x7C3B,0x7D3F,0x7E3F,0x7F3B,0x8083,0x8187, + 0x8287,0x8383,0x8487,0x8583,0x8683,0x8787,0x888F,0x898B, + 0x8A9B,0x8B9F,0x8C9B,0x8D9F,0x8E9F,0x8F9B,0x9087,0x9183, + 0x9283,0x9387,0x9483,0x9587,0x9687,0x9783,0x988B,0x998F +}; diff --git a/src/GFX4d.cpp b/src/GFX4d.cpp index f278aa7..e7eea7b 100644 --- a/src/GFX4d.cpp +++ b/src/GFX4d.cpp @@ -2,7 +2,7 @@ * * * 4D Systems GFX4d Library * * * -* Date: 6th October 2021 * +* Date: 13th Nov 2022 * * * * Description: Provides Graphics, Touch Control and SD Card functions * * for 4D Systems Gen4 IoD range of intelligent displays. * @@ -48,130 +48,130 @@ * and utility programs needed for reproducing the Combined Work from the * * Application, but excluding the System Libraries of the Combined Work. * * * - 1. Exception to Section 3 of the GNU GPL. +* 1. Exception to Section 3 of the GNU GPL. * * * - You may convey a covered work under sections 3 and 4 of this License - without being bound by section 3 of the GNU GPL. +* You may convey a covered work under sections 3 and 4 of this License * +* without being bound by section 3 of the GNU GPL. * * * - 2. Conveying Modified Versions. +* 2. Conveying Modified Versions. * * * - If you modify a copy of the Library, and, in your modifications, a - facility refers to a function or data to be supplied by an Application - that uses the facility (other than as an argument passed when the - facility is invoked), then you may convey a copy of the modified - version: +* If you modify a copy of the Library, and, in your modifications, a * +* facility refers to a function or data to be supplied by an Application * +* that uses the facility (other than as an argument passed when the * +* facility is invoked), then you may convey a copy of the modified * +* version: * * * - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or +* a) under this License, provided that you make a good faith effort to * +* ensure that, in the event an Application does not supply the * +* function or data, the facility still operates, and performs * +* whatever part of its purpose remains meaningful, or * * * - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. +* b) under the GNU GPL, with none of the additional permissions of * +* this License applicable to that copy. * * * - 3. Object Code Incorporating Material from Library Header Files. +* 3. Object Code Incorporating Material from Library Header Files. * * * - The object code form of an Application may incorporate material from - a header file that is part of the Library. You may convey such object - code under terms of your choice, provided that, if the incorporated - material is not limited to numerical parameters, data structure - layouts and accessors, or small macros, inline functions and templates - (ten or fewer lines in length), you do both of the following: +* The object code form of an Application may incorporate material from * +* a header file that is part of the Library. You may convey such object * +* code under terms of your choice, provided that, if the incorporated * +* material is not limited to numerical parameters, data structure * +* layouts and accessors, or small macros, inline functions and templates * +* (ten or fewer lines in length), you do both of the following: * * * - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. +* a) Give prominent notice with each copy of the object code that the * +* Library is used in it and that the Library and its use are * +* covered by this License. * * * - b) Accompany the object code with a copy of the GNU GPL and this - license document. +* b) Accompany the object code with a copy of the GNU GPL and this * +* license document. * * * - 4. Combined Works. +* 4. Combined Works. * * * - You may convey a Combined Work under terms of your choice that, - taken together, effectively do not restrict modification of the - portions of the Library contained in the Combined Work and reverse - engineering for debugging such modifications, if you also do each of - the following: +* You may convey a Combined Work under terms of your choice that, * +* taken together, effectively do not restrict modification of the * +* portions of the Library contained in the Combined Work and reverse * +* engineering for debugging such modifications, if you also do each of * +* the following: * * * - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. +* a) Give prominent notice with each copy of the Combined Work that * +* the Library is used in it and that the Library and its use are * +* covered by this License. * * * - b) Accompany the Combined Work with a copy of the GNU GPL and this - license document. +* b) Accompany the Combined Work with a copy of the GNU GPL and this * +* license document. * * * - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. +* c) For a Combined Work that displays copyright notices during * +* execution, include the copyright notice for the Library among * +* these notices, as well as a reference directing the user to the * +* copies of the GNU GPL and this license document. * * * - d) Do one of the following: +* d) Do one of the following: * * * - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. +* 0) Convey the Minimal Corresponding Source under the terms of this * +* License, and the Corresponding Application Code in a form * +* suitable for, and under terms that permit, the user to * +* recombine or relink the Application with a modified version of * +* the Linked Version to produce a modified Combined Work, in the * +* manner specified by section 6 of the GNU GPL for conveying * +* Corresponding Source. * * * - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. +* 1) Use a suitable shared library mechanism for linking with the * +* Library. A suitable mechanism is one that (a) uses at run time * +* a copy of the Library already present on the user's computer * +* system, and (b) will operate properly with a modified version * +* of the Library that is interface-compatible with the Linked * +* Version. * * * - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) +* e) Provide Installation Information, but only if you would otherwise * +* be required to provide such information under section 6 of the * +* GNU GPL, and only to the extent that such information is * +* necessary to install and execute a modified version of the * +* Combined Work produced by recombining or relinking the * +* Application with a modified version of the Linked Version. (If * +* you use option 4d0, the Installation Information must accompany * +* the Minimal Corresponding Source and Corresponding Application * +* Code. If you use option 4d1, you must provide the Installation * +* Information in the manner specified by section 6 of the GNU GPL * +* for conveying Corresponding Source.) * * * - 5. Combined Libraries. +* 5. Combined Libraries. * * * - You may place library facilities that are a work based on the - Library side by side in a single library together with other library - facilities that are not Applications and are not covered by this - License, and convey such a combined library under terms of your - choice, if you do both of the following: +* You may place library facilities that are a work based on the * +* Library side by side in a single library together with other library * +* facilities that are not Applications and are not covered by this * +* License, and convey such a combined library under terms of your * +* choice, if you do both of the following: * * * - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. +* a) Accompany the combined library with a copy of the same work based * +* on the Library, uncombined with any other library facilities, * +* conveyed under the terms of this License. * * * - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. +* b) Give prominent notice with the combined library that part of it * +* is a work based on the Library, and explaining where to find the * +* accompanying uncombined form of the same work. * * * - 6. Revised Versions of the GNU Lesser General Public License. +* 6. Revised Versions of the GNU Lesser General Public License. * * * - The Free Software Foundation may publish revised and/or new versions - of the GNU Lesser General Public License from time to time. Such new - versions will be similar in spirit to the present version, but may - differ in detail to address new problems or concerns. +* The Free Software Foundation may publish revised and/or new versions * +* of the GNU Lesser General Public License from time to time. Such new * +* versions will be similar in spirit to the present version, but may * +* differ in detail to address new problems or concerns. * * * - Each version is given a distinguishing version number. If the - Library as you received it specifies that a certain numbered version - of the GNU Lesser General Public License "or any later version" - applies to it, you have the option of following the terms and - conditions either of that published version or of any later version - published by the Free Software Foundation. If the Library as you - received it does not specify a version number of the GNU Lesser - General Public License, you may choose any version of the GNU Lesser - General Public License ever published by the Free Software Foundation. +* Each version is given a distinguishing version number. If the * +* Library as you received it specifies that a certain numbered version * +* of the GNU Lesser General Public License "or any later version" * +* applies to it, you have the option of following the terms and * +* conditions either of that published version or of any later version * +* published by the Free Software Foundation. If the Library as you * +* received it does not specify a version number of the GNU Lesser * +* General Public License, you may choose any version of the GNU Lesser * +* General Public License ever published by the Free Software Foundation. * * * - If the Library as you received it specifies that a proxy can decide - whether future versions of the GNU Lesser General Public License shall - apply, that proxy's public statement of acceptance of any version is - permanent authorization for you to choose that version for the - Library. +* If the Library as you received it specifies that a proxy can decide * +* whether future versions of the GNU Lesser General Public License shall * +* apply, that proxy's public statement of acceptance of any version is * +* permanent authorization for you to choose that version for the * +* Library. * * * ***************************************************************************/ @@ -179,39 +179,38 @@ #include #include "pins_arduino.h" #include "wiring_private.h" -#include -#ifndef ESP32 - -#include -#include -#include +#ifndef ESP32 + #include + #include + #include #else -#include -#include -#include -#if ARDUINO_ESP8266_GIT_VER > 0x2843a5ac - #include -#endif + #include + #include + #include + #include + #if ARDUINO_ESP8266_GIT_VER > 0x2843a5ac + #include + #endif #endif - #define hwSPI true #define swap(a, b) { int16_t tab = a; a = b; b = tab; } #ifndef ESP8266 -#define analogWrite(a, b) { ledcWrite(a + 1, b); } + #define analogWrite(a, b) { ledcWrite(a + 1, b); } #endif #ifdef USE_FS -#include "LittleFS.h" + #include "LittleFS.h" +#else + #include #endif GFX4d::GFX4d() { - #ifndef ESP32 _dc = 4; _cs = 15; @@ -220,15 +219,15 @@ GFX4d::GFX4d() _sd = 5; #else _dc = 27; - _cs = 14; - _sRes = 33; + _cs = 33; + _sRes = 26; _disp = 32; _tcs = 9; - _sd = 4; + _sd = 22; #endif scrollOffset = 0; - width = 240; - height = 320; + width = GFX4d_TFTWIDTH; + height = GFX4d_TFTHEIGHT; rotation = 0; cursor_y = cursor_x = 0; textsize = 1; @@ -245,7 +244,6 @@ GFX4d::GFX4d() twcolnum = 13; tchen = true; twcurson = true; - } SPISettings spiSettings = SPISettings(79000000, MSBFIRST, SPI_MODE0); @@ -261,15 +259,25 @@ void GFX4d::begin(byte dtds) { if (dtds & 0x01) IPSDisplay = true; if (dtds & 0x02) ST7789 = true; + if (dtds & 0x04) { + _colstart = 0; + _rowstart = 80; + _nlh = 240; + } + if (dtds & 0x08){ + ILI9488 = true; + _nlh = 320; + } begin(); } void GFX4d::begin(void) { - + #ifndef ESP32 pinMode(_sclk, OUTPUT); pinMode(_mosi, OUTPUT); pinMode(_miso, INPUT); + #endif pinMode(_dc, OUTPUT); pinMode(_cs, OUTPUT); pinMode(_disp, OUTPUT); @@ -278,9 +286,9 @@ void GFX4d::begin(void) #ifdef ESP32 pinMode(_sRes, OUTPUT); digitalWrite(_sRes, LOW); - delay(150); + delay(250); digitalWrite(_sRes, HIGH); - delay(100); + delay(250); #endif #ifndef ESP8266 ledcSetup(1, 1000, 10); @@ -289,72 +297,95 @@ void GFX4d::begin(void) digitalWrite(_sd, HIGH); digitalWrite(_tcs, HIGH); SPI.begin(); - SPI.beginTransaction(spiSettingsR); + + int regcount; for(regcount = 0; regcount < 4; regcount ++){ - dispID[regcount] = ReadCommand(0xD3, regcount); + if(!(ILI9488)) dispID[regcount] = ReadCommand(0xD3, regcount); } - SPI.endTransaction(); - if(dispID[2] == 147 && dispID[3] == 65){ - ST7789 = false; - } else { - ST7789 = true; + if(ILI9488 == false){ + if(dispID[2] == 147 && dispID[3] == 65){ + ST7789 = false; + } else { + ST7789 = true; + } } - SPI.beginTransaction(spiSettingsD); + + DISP_SPI_BEGINT; if(!(ST7789)){ - SetCommand(0xEF); SetData(0x01); SetData(0x01); SetData(0x00); - SetCommand(0xCF); SetData(0x00); SetData(0xC1); SetData(0x30); - SetCommand(0xED); SetData(0x64); SetData(0x03); SetData(0x12); SetData(0x81); - SetCommand(0xE8); SetData(0x85); SetData(0x00); SetData(0x7a); - SetCommand(0xCB); SetData(0x39); SetData(0x2C); SetData(0x00); SetData(0x34); SetData(0x02); - SetCommand(0xF7); SetData(0x20); - SetCommand(0xEA); SetData(0x00); SetData(0x00); - if (!(IPSDisplay)) - { - SetCommand(GFX4d_PWCTR1); SetData(0x26); - } - else - { - SetCommand(GFX4d_PWCTR1); SetData(0x12); SetData(0x12); - } - SetCommand(GFX4d_PWCTR2); SetData(0x11); - SetCommand(GFX4d_VMCTR1); SetData(0x39); SetData(0x27); - SetCommand(GFX4d_VMCTR2); SetData(0xa6); - SetCommand(GFX4d_MADCTL); SetData(0x48); - SetCommand(GFX4d_PIXFMT); SetData(0x55); - SetCommand(GFX4d_FRMCTR1); SetData(0x00); SetData(0x1b); - SetCommand(GFX4d_DFUNCTR); SetData(0x08); SetData(0x82); SetData(0x27); - SetCommand(0xF2); SetData(0x00); - SetCommand(GFX4d_GAMMASET); SetData(0x01); - if (!(IPSDisplay)) - { - SetCommand(GFX4d_GMCTRP1); SetData(0x0F); SetData(0x2d); SetData(0x0e); SetData(0x08); - SetData(0x12); SetData(0x0a); SetData(0x3d); SetData(0x95); - SetData(0x31); SetData(0x04); SetData(0x10); SetData(0x09); - SetData(0x09); SetData(0x0d); SetData(0x00); - SetCommand(GFX4d_GMCTRN1); SetData(0x00); SetData(0x12); SetData(0x17); SetData(0x03); - SetData(0x0d); SetData(0x05); SetData(0x2c); SetData(0x44); - SetData(0x41); SetData(0x05); SetData(0x0F); SetData(0x0a); - SetData(0x30); SetData(0x32); SetData(0x0F); - } - else - { - SetCommand(GFX4d_GMCTRP1); SetData(0x0F); SetData(0x31); SetData(0x2b); SetData(0x0c); - SetData(0x0e); SetData(0x08); SetData(0x4e); SetData(0xf1); - SetData(0x37); SetData(0x07); SetData(0x10); SetData(0x03); - SetData(0x0e); SetData(0x09); SetData(0x00); - SetCommand(GFX4d_GMCTRN1); SetData(0x00); SetData(0x0e); SetData(0x14); SetData(0x03); - SetData(0x11); SetData(0x07); SetData(0x31); SetData(0xc1); - SetData(0x48); SetData(0x08); SetData(0x0f); SetData(0x0c); - SetData(0x31); SetData(0x36); SetData(0x0F); - } - SetCommand(GFX4d_SLPOUT); - SPI.endTransaction(); + if(!(ILI9488)){ + SetCommand(0xEF); SetData(0x01); SetData(0x01); SetData(0x00); + SetCommand(0xCF); SetData(0x00); SetData(0xC1); SetData(0x30); + SetCommand(0xED); SetData(0x64); SetData(0x03); SetData(0x12); SetData(0x81); + SetCommand(0xE8); SetData(0x85); SetData(0x00); SetData(0x7a); + SetCommand(0xCB); SetData(0x39); SetData(0x2C); SetData(0x00); SetData(0x34); SetData(0x02); + SetCommand(0xF7); SetData(0x20); + SetCommand(0xEA); SetData(0x00); SetData(0x00); + if (!(IPSDisplay)) + { + SetCommand(GFX4d_PWCTR1); SetData(0x26); + } else { + SetCommand(GFX4d_PWCTR1); SetData(0x12); SetData(0x12); + } + SetCommand(GFX4d_PWCTR2); SetData(0x11); + SetCommand(GFX4d_VMCTR1); SetData(0x39); SetData(0x27); + SetCommand(GFX4d_VMCTR2); SetData(0xa6); + SetCommand(GFX4d_MADCTL); SetData(0x48); + SetCommand(GFX4d_PIXFMT); SetData(0x55); + SetCommand(GFX4d_FRMCTR1); SetData(0x00); SetData(0x1b); + SetCommand(GFX4d_DFUNCTR); SetData(0x08); SetData(0x82); SetData(0x27); + SetCommand(0xF2); SetData(0x00); + SetCommand(GFX4d_GAMMASET); SetData(0x01); + if (!(IPSDisplay)) + { + SetCommand(GFX4d_GMCTRP1); SetData(0x0F); SetData(0x2d); SetData(0x0e); SetData(0x08); + SetData(0x12); SetData(0x0a); SetData(0x3d); SetData(0x95); + SetData(0x31); SetData(0x04); SetData(0x10); SetData(0x09); + SetData(0x09); SetData(0x0d); SetData(0x00); + SetCommand(GFX4d_GMCTRN1); SetData(0x00); SetData(0x12); SetData(0x17); SetData(0x03); + SetData(0x0d); SetData(0x05); SetData(0x2c); SetData(0x44); + SetData(0x41); SetData(0x05); SetData(0x0F); SetData(0x0a); + SetData(0x30); SetData(0x32); SetData(0x0F); + } else { + SetCommand(GFX4d_GMCTRP1); SetData(0x0F); SetData(0x31); SetData(0x2b); SetData(0x0c); + SetData(0x0e); SetData(0x08); SetData(0x4e); SetData(0xf1); + SetData(0x37); SetData(0x07); SetData(0x10); SetData(0x03); + SetData(0x0e); SetData(0x09); SetData(0x00); + SetCommand(GFX4d_GMCTRN1); SetData(0x00); SetData(0x0e); SetData(0x14); SetData(0x03); + SetData(0x11); SetData(0x07); SetData(0x31); SetData(0xc1); + SetData(0x48); SetData(0x08); SetData(0x0f); SetData(0x0c); + SetData(0x31); SetData(0x36); SetData(0x0F); + } + } else { + SetCommand(0xE0); SetData(0x00); SetData(0x13); SetData(0x18); SetData(0x04); //P-Gamma + SetData(0x0F); SetData(0x06); SetData(0x3A); SetData(0x56); SetData(0x4D); + SetData(0x03); SetData(0x0A); SetData(0x06); SetData(0x30); SetData(0x3E); + SetData(0x0F); + SetCommand(0XE1); SetData(0x00); SetData(0x13); SetData(0x18); SetData(0x01); //N-Gamma + SetData(0x11); SetData(0x06); SetData(0x38); SetData(0x34); SetData(0x4D); + SetData(0x06); SetData(0x0D); SetData(0x0B); SetData(0x31); SetData(0x37); + SetData(0x0F); + SetCommand(0xC0); SetData(0x18); SetData(0x16); + SetCommand(0xC1); SetData(0x45); + SetCommand(0xC5); SetData(0x00); SetData(0x63); SetData(0x01); //VCOM + SetCommand(0x36); SetData(0x48); + SetCommand(0x3A); SetData(0x55); //Interface Mode Control + SetCommand(0xB0); SetData(0x00); //Interface Mode Control + SetCommand(0xB1); SetData(0xB0); //Frame rate 70HZ + SetCommand(0xB4); SetData(0x02); + SetCommand(0xB6); SetData(0x02); //RGB/MCU Interface Control //WriteData(0x22); + SetCommand(0xE9); SetData(0x00); + SetCommand(0xF7); SetData(0xA9); SetData(0x51); SetData(0x2C); SetData(0x82); + GFX4d_TFTWIDTH = 320; + GFX4d_TFTWIDTH = 319; + GFX4d_TFTHEIGHT = 480; + } + SetCommand(GFX4d_SLPOUT); + DISP_SPI_ENDT; delay(120); - SPI.beginTransaction(spiSettingsD); + DISP_SPI_BEGINT; SetCommand(GFX4d_DISPON); - SPI.endTransaction(); - setScrollArea(0, 0); + DISP_SPI_ENDT; } else { SetCommand(GFX4DST_SLPOUT); // Sleep out delay(120); @@ -381,29 +412,28 @@ void GFX4d::begin(void) SetData(0x1c); SetData(0x17); SetData(0x1b); SetData(0x1e); SetCommand(GFX4DST_INVON); SetCommand(GFX4DST_CASET); SetData(0x00); SetData(0x00); SetData(0x00); SetData(0xE5); // 239 - SetCommand(GFX4DST_RASET); SetData(0x00); SetData(0x00); SetData(0x01); SetData(0x3F); // 319 + SetCommand(GFX4DST_RASET); SetData(0x00); SetData(0x00); SetData((_nlh - 1) >> 8); SetData((_nlh - 1) & 0x00ff); // 319 delay(120); SetCommand(GFX4DST_DISPON); //Display on delay(120); - SPI.endTransaction(); + DISP_SPI_ENDT; } if (IPSDisplay) Invert(false); + if(_nlh == 240){ + setScrollArea(0, 80); + } else { + setScrollArea(0, 0); + } Cls(0); #ifndef USE_FS - #if ARDUINO_ESP8266_GIT_VER > 0x2843a5ac - if (SD.begin(5, SD_SCK_MHZ(79))) - #else - if (SD.begin(_sd, spiSettings)) - #endif + if(SD_BEGIN) { #else if (LittleFS.begin()) { #endif sdok = true; - } - else - { + } else { sdok = false; } #ifndef ESP32 @@ -426,15 +456,15 @@ void GFX4d::Contrast(int ctrst) void GFX4d::setScrollArea(uint16_t tfa, uint16_t bfa) { SetCommand(GFX4d_VSCRDEF); SetData(tfa >> 8); SetData(tfa); - SetData((320 - tfa - bfa) >> 8); SetData(320 - tfa - bfa); - SetData(tfa >> 8); SetData(bfa); + SetData((_nlh - tfa - bfa) >> 8); SetData(_nlh - tfa - bfa); + SetData(bfa >> 8); SetData(bfa); } void GFX4d::Scroll(uint16_t vsp) { - if (vsp > height - 1) + if (vsp > _nlh - 1) { - vsp = vsp - height; + vsp = vsp - _nlh; } if (sEnable) { @@ -454,9 +484,7 @@ void GFX4d::MoveTo(int16_t x, int16_t y) { cursor_y = cursor_y - height; } - } - else - { + } else { cursor_y = y; if (cursor_y > (height - 1)) cursor_y = (height - 1); } @@ -607,9 +635,7 @@ void GFX4d::TriangleFilled ( int16_t x0, int16_t y0, int16_t x1, int16_t y1, int if (y1 == y2) { last = y1; - } - else - { + } else { last = y1 - 1; } for (y = y0; y <= last; y++) @@ -662,9 +688,7 @@ void GFX4d::Line(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color) if (y0 < y1) { incy = 1; - } - else - { + } else { incy = -1; } for (; x0 <= x1; x0++) @@ -672,9 +696,7 @@ void GFX4d::Line(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color) if (angH) { PutPixel(y0, x0, color); - } - else - { + } else { PutPixel(x0, y0, color); } edx = edx - yy; @@ -854,9 +876,7 @@ void GFX4d::PrintImage(uint16_t ui) if (userImag) { String resultFO = "Success. "; - } - else - { + } else { return; } uint16_t iwidth = tuiw[ui]; @@ -887,9 +907,7 @@ void GFX4d::PrintImage(uint16_t ui) if ((cursor_y - 1) < 0) { setGRAM(cursor_x, cursor_y + height - 1 , cursor_x + cuiw - 1 , cursor_y + height - 1); - } - else - { + } else { setGRAM(cursor_x, cursor_y - 1 , cursor_x + cuiw - 1 , cursor_y - 1); } if (off) @@ -898,9 +916,7 @@ void GFX4d::PrintImage(uint16_t ui) WrGRAMs8(buf, cuiw << (mul - 1), mul); pos = pos + (iwidth << (mul - 1)); userImag.seek(pos); - } - else - { + } else { userImag.read(buf, ichunk); WrGRAMs8(buf, ichunk, mul); } @@ -973,45 +989,20 @@ void GFX4d::DrawWidget(uint32_t Index, int16_t uix, int16_t uiy, int16_t uiw, in bufsize = cuiw << (mul - 1); steps = isize2 / bufsize; rem = 0; - } - else - { + } else { pos = (isize * frame); userImag.seek(Index + ofst + pos); if (isize > bufsize) steps = isize / bufsize; rem = isize - (steps * bufsize); } - uint8_t buf[bufsize]; -#ifndef ESP8266 - uint16_t pc = 0; -#endif + uint8_t buf[bufsize]; if (steps > 0) + { for (int n = 0; n < steps; n++) { -#ifndef ESP32 userImag.read(buf, bufsize); - WrGRAMs8(buf, bufsize, mul); -#else - userImag.read(buf, bufsize); - if (mul == 2) - { - for (int b = 0; b < bufsize; b += 2) - { - buf16[pc] = (buf[b] << 8) | buf[b + 1]; - pc ++; - if (pc == 12000) - { - WrGRAMs16(buf16, pc << 1); - pc = 0; - } - } - } - else - { - WrGRAMs8(buf, bufsize, mul); - } -#endif + WrGRAMs8(buf, bufsize, mul); if (off == true) { pos = pos + (uiw << (mul - 1)); @@ -1022,33 +1013,45 @@ void GFX4d::DrawWidget(uint32_t Index, int16_t uix, int16_t uiy, int16_t uiw, in if (rem > 0) { userImag.read(buf, rem); -#ifndef ESP32 WrGRAMs8(buf, rem, mul); -#else - if (mul == 2) - { - for (int b = 0; b < rem; b += 2) - { - buf16[pc] = (buf[b] << 8) | buf[b + 1]; - pc ++; - WrGRAMs16(buf16, pc << 1); - pc = 0; - } - } - else - { - WrGRAMs8(buf, rem, mul); - } -#endif - } -#ifndef ESP8266 - if (pc > 0 && mul == 2) - { - WrGRAMs16(buf16, pc << 1); } +#ifdef ESP8266 +yield(); #endif } +int GFX4d::charWidth(char ch){ + return (fsw + 1) * textsize; +} + +int GFX4d::charHeight(char ch){ + return fsh * textsize; +} + +int GFX4d::strWidth(String ts){ + return ts.length() * ((fsw + 1) * textsize); +} + +int GFX4d::imageGetWord(uint16_t img, byte controlIndex) +{ + int retval = -1; + switch(controlIndex){ + case 1: + retval = tuix[img]; + break; + case 2: + retval = tuiy[img]; + break; + case 4: + retval = tuiw[img]; + break; + case 8: + retval = tuih[img]; + break; + } + return retval; +} + void GFX4d::UserImage(uint16_t ui) { UserImage(ui, 0x7fff, 0x7fff); @@ -1065,43 +1068,20 @@ void GFX4d::UserImage(uint16_t ui, int altx, int alty) if (altx == 0x7fff && alty == 0x7fff) { DrawWidget(tuiIndex[ui], tuix[ui], tuiy[ui], tuiw[ui], tuih[ui], 0, 0, false, cdv[ui]); - } - else - { + } else { DrawWidget(tuiIndex[ui], altx, alty, tuiw[ui], tuih[ui], 0, 0, false, cdv[ui]); } ScrollEnable(setemp); } -/* -void GFX4d::LedDigitsDisplaySigned(int16_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks) -{ - LedDigitsDisplaySigned((int64_t)newval, index, Digits, MinDigits, WidthDigit, LeadingBlanks, 0x7fff , 0x7fff); -} -void GFX4d::LedDigitsDisplaySigned(int32_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks) -{ - LedDigitsDisplaySigned((int64_t)newval, index, Digits, MinDigits, WidthDigit, LeadingBlanks, 0x7fff , 0x7fff); -} -*/ void GFX4d::LedDigitsDisplaySigned(int64_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks) { LedDigitsDisplaySigned(newval, index, Digits, MinDigits, WidthDigit, LeadingBlanks, 0x7fff , 0x7fff); } -/* -void GFX4d::LedDigitsDisplaySigned(int16_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks, int16_t altx, int16_t alty) -{ - LedDigitsDisplaySigned((int64_t) newval, index, Digits, MinDigits, WidthDigit, LeadingBlanks, altx, alty); -} -void GFX4d::LedDigitsDisplaySigned(int32_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks, int16_t altx, int16_t alty) -{ - LedDigitsDisplaySigned((int64_t) newval, index, Digits, MinDigits, WidthDigit, LeadingBlanks, altx, alty); -} -*/ void GFX4d::LedDigitsDisplaySigned(int64_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks, int16_t altx, int16_t alty) { - int16_t i, lstb, digita[21]; - int64_t m, nv; + int16_t i, m, lstb, nv, digita[7]; int leftpos = 0; nv = newval ; lstb = 1 ; @@ -1128,44 +1108,22 @@ void GFX4d::LedDigitsDisplaySigned(int64_t newval, uint16_t index, int16_t Digit if (altx == 0x7fff && alty == 0x7fff) { UserImages(index, digita[i], leftpos); - } - else - { + } else { UserImages(index, digita[i], leftpos, altx, alty); } leftpos += WidthDigit ; } } -/* -void GFX4d::LedDigitsDisplay(uint16_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks) -{ - LedDigitsDisplay((uint64_t)newval, index, Digits, MinDigits, WidthDigit, LeadingBlanks, 0x7fff , 0x7fff); -} -void GFX4d::LedDigitsDisplay(uint32_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks) -{ - LedDigitsDisplay((uint64_t)newval, index, Digits, MinDigits, WidthDigit, LeadingBlanks, 0x7fff , 0x7fff); -} -*/ -void GFX4d::LedDigitsDisplay(uint64_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks) +void GFX4d::LedDigitsDisplay(int64_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks) { LedDigitsDisplay(newval, index, Digits, MinDigits, WidthDigit, LeadingBlanks, 0x7fff , 0x7fff); } -/* -void GFX4d::LedDigitsDisplay(uint16_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks, int16_t altx, int16_t alty) -{ - LedDigitsDisplay((uint64_t) newval, index, Digits, MinDigits, WidthDigit, LeadingBlanks, altx, alty); -} -void GFX4d::LedDigitsDisplay(uint32_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks, int16_t altx, int16_t alty) -{ - LedDigitsDisplay((uint64_t) newval, index, Digits, MinDigits, WidthDigit, LeadingBlanks, altx, alty); -} -*/ -void GFX4d::LedDigitsDisplay(uint64_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks, int16_t altx, int16_t alty) +void GFX4d::LedDigitsDisplay(int64_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks, int16_t altx, int16_t alty) { - int16_t i, lb; - uint64_t l, k; + int16_t i, k, lb; + int64_t l; l = 1; for (i = 1; i < Digits; i++) l *= 10; @@ -1185,9 +1143,7 @@ void GFX4d::LedDigitsDisplay(uint64_t newval, uint16_t index, int16_t Digits, in if (altx == 0x7fff && alty == 0x7fff) { UserImages(index, k , i * WidthDigit); - } - else - { + } else { UserImages(index, k , i * WidthDigit, altx, alty); } } @@ -1200,9 +1156,7 @@ void GFX4d::UserImages(uint16_t uisnb, int16_t framenb) if (framenb > (gciobjframes[uisnb] - 1) || framenb < 0) { outofrange(tuix[uisnb], tuiy[uisnb], tuiw[uisnb], tuih[uisnb]); - } - else - { + } else { DrawWidget(tuiIndex[uisnb], tuix[uisnb], tuiy[uisnb], tuiw[uisnb], tuih[uisnb], framenb, 0, true, cdv[uisnb]); } ScrollEnable(setemp); @@ -1215,9 +1169,7 @@ void GFX4d::UserImages(uint16_t uis, int16_t frame, int offset, int16_t altx, in if (frame > (gciobjframes[uis] - 1) || frame < 0) { outofrange(altx, alty, tuiw[uis], tuih[uis]); - } - else - { + } else { DrawWidget(tuiIndex[uis], altx, alty, tuiw[uis], tuih[uis], frame, offset, true, cdv[uis]); } ScrollEnable(setemp); @@ -1257,9 +1209,7 @@ void GFX4d::UserImages(uint16_t uisnb, int16_t framenb, int16_t newx, int16_t ne if (framenb > (gciobjframes[uisnb] - 1) || framenb < 0) { outofrange(tuix[uisnb], tuiy[uisnb], tuiw[uisnb], tuih[uisnb]); - } - else - { + } else { DrawWidget(tuiIndex[uisnb], newx, newy, tuiw[uisnb], tuih[uisnb], framenb, 0, true, cdv[uisnb]); } ScrollEnable(setemp); @@ -1272,9 +1222,7 @@ void GFX4d::UserImages(uint16_t uis, int16_t frame, int offset) if (frame > (gciobjframes[uis] - 1) || frame < 0) { outofrange(tuix[uis], tuiy[uis], tuiw[uis], tuih[uis]); - } - else - { + } else { DrawWidget(tuiIndex[uis], tuix[uis], tuiy[uis], tuiw[uis], tuih[uis], frame, offset, true, cdv[uis]); } ScrollEnable(setemp); @@ -1285,9 +1233,7 @@ void GFX4d::ScrollEnable(boolean se) if (se) { sEnable = true; - } - else - { + } else { sEnable = false; } } @@ -1342,9 +1288,7 @@ void GFX4d::PrintImageFile(String ifile) if ((cursor_y - 1) < 0) { setGRAM(cursor_x, cursor_y + height - 1 , cursor_x + cuiw - 1 , cursor_y + height - 1); - } - else - { + } else { setGRAM(cursor_x, cursor_y - 1 , cursor_x + cuiw - 1 , cursor_y - 1); } if (off) @@ -1353,9 +1297,7 @@ void GFX4d::PrintImageFile(String ifile) WrGRAMs8(buf, cuiw << (mul - 1), mul); pos = pos + (iwidth << (mul - 1)); dataFile.seek(pos); - } - else - { + } else { dataFile.read(buf, ichunk); WrGRAMs8(buf, ichunk, mul); } @@ -1409,9 +1351,7 @@ void GFX4d::ImageWifi(boolean local, String Address, uint16_t port, String hfile #else if (!http.begin(Address, port, hfile)) return; #endif - } - else - { + } else { #ifndef ESP32 #if ARDUINO_ESP8266_GIT_VER > 0x2843a5ac std::unique_ptrclient(new BearSSL::WiFiClientSecure); @@ -1426,9 +1366,7 @@ void GFX4d::ImageWifi(boolean local, String Address, uint16_t port, String hfile #endif #endif } - } - else - { + } else { if (sha1 == "") { #if ARDUINO_ESP8266_GIT_VER > 0x2843a5ac @@ -1436,9 +1374,7 @@ void GFX4d::ImageWifi(boolean local, String Address, uint16_t port, String hfile #else if (!http.begin(Address)) return; #endif - } - else - { + } else { #ifndef ESP32 #if ARDUINO_ESP8266_GIT_VER > 0x2843a5ac std::unique_ptrclient(new BearSSL::WiFiClientSecure); @@ -1505,9 +1441,7 @@ void GFX4d::ImageWifi(boolean local, String Address, uint16_t port, String hfile if ((cursor_y - 1) < 0) { setGRAM(cursor_x, cursor_y + height - 1 , cursor_x + cuiw - 1 , cursor_y + height - 1); - } - else - { + } else { setGRAM(cursor_x, cursor_y - 1 , cursor_x + cuiw - 1 , cursor_y - 1); } if (off) @@ -1515,9 +1449,7 @@ void GFX4d::ImageWifi(boolean local, String Address, uint16_t port, String hfile c = stream->readBytes(buf, bufsize); c = stream->readBytes(tbuf, tbufsize); WrGRAMs8(buf, bufsize, mul); - } - else - { + } else { c = stream->readBytes(buf, bufsize); WrGRAMs8(buf, bufsize, mul); } @@ -1529,19 +1461,58 @@ void GFX4d::ImageWifi(boolean local, String Address, uint16_t port, String hfile } } -void GFX4d::Open4dGFX(String file4d) +void GFX4d::Open4dGFX(String file4d){ + Open4dGFX(file4d, false); +} + +void GFX4d::SetMaxWidgets(int mw){ + MAX_WIDGETS = mw; +} + +void GFX4d::Open4dGFX(String file4d, bool allocMAX){ + if(allocMAX){ + _Open4dGFX(file4d, true); + gciobjtouchenable = (bool *)malloc(gciobjnum); + cdv = (uint8_t *)malloc(gciobjnum); + gciobjframes = (uint16_t *)malloc(gciobjnum << 1); + tuix = (int16_t *)malloc(gciobjnum << 1); + tuiy = (int16_t *)malloc(gciobjnum << 1); + tuiw = (int16_t *)malloc(gciobjnum << 1); + tuih = (int16_t *)malloc(gciobjnum << 1); + tuiIndex = (uint32_t *)malloc(gciobjnum << 2); + MAX_WIDGETS = gciobjnum + 1; + _Open4dGFX(file4d, false); + } else { + gciobjtouchenable = (bool *)malloc(MAX_WIDGETS); + cdv = (uint8_t *)malloc(MAX_WIDGETS); + gciobjframes = (uint16_t *)malloc(MAX_WIDGETS << 1); + tuix = (int16_t *)malloc(MAX_WIDGETS << 1); + tuiy = (int16_t *)malloc(MAX_WIDGETS << 1); + tuiw = (int16_t *)malloc(MAX_WIDGETS << 1); + tuih = (int16_t *)malloc(MAX_WIDGETS << 1); + tuiIndex = (uint32_t *)malloc(MAX_WIDGETS << 2); + _Open4dGFX(file4d, false); + } + opgfx = 1; +} + +void GFX4d::_Open4dGFX(String file4d, bool scan) { if (userImag) Close4dGFX(); uint8_t strpos = 0; uint8_t gotchar = 0; uint8_t ofset = 0; gciobjnum = 0; - imageTouchEnable(-1, false); + if(!(scan)) imageTouchEnable(-1, false); String inputString; dat4d = file4d + ".dat"; gci4d = file4d + ".gci"; +#ifdef ESP32 + dat4d = "/" + dat4d; + gci4d = "/" + gci4d; +#endif #ifndef USE_FS - userDat = SD.open(dat4d); + userDat = SD.open(dat4d, FILE_READ); #else userDat = LittleFS.open((char*)dat4d.c_str(), "r"); #endif @@ -1571,11 +1542,11 @@ void GFX4d::Open4dGFX(String file4d) strpos = 0; String tempis = inputString; uint32_t tuindex = getIndexfromString(tempis, (2 + ofset)); - tuiIndex[gciobjnum] = tuindex; + if(!(scan)) tuiIndex[gciobjnum] = tuindex; uint32_t tuiPos; tuiPos = getCoordfromString(tempis, (12 + ofset)); - tuix[gciobjnum] = xic; - tuiy[gciobjnum] = yic; + if(!(scan)) tuix[gciobjnum] = xic; + if(!(scan)) tuiy[gciobjnum] = yic; inputString = ""; gciobjnum ++; } @@ -1583,6 +1554,7 @@ void GFX4d::Open4dGFX(String file4d) } } userDat.close(); + if(scan) return; #ifndef USE_FS userImag = SD.open(gci4d); #else @@ -1594,17 +1566,21 @@ void GFX4d::Open4dGFX(String file4d) { tIndex = tuiIndex[n]; userImag.seek(tIndex); - tuiw[n] = (userImag.read() << 8) + userImag.read(); - tuih[n] = (userImag.read() << 8) + userImag.read(); - cdv[n] = userImag.read(); + if(!(scan)) tuiw[n] = (userImag.read() << 8) + userImag.read(); + if(!(scan)) tuih[n] = (userImag.read() << 8) + userImag.read(); + if(!(scan)) cdv[n] = userImag.read(); coldepth = userImag.read(); - gciobjframes[n] = (userImag.read() << 8) + userImag.read(); + if(!(scan)) gciobjframes[n] = (userImag.read() << 8) + userImag.read(); } } uint16_t GFX4d::getWidgetNumFrames(int widget) { - return gciobjframes[widget]; + if(opgfx){ + return gciobjframes[widget]; + } else { + return 0; + } } uint32_t GFX4d::getIndexfromString(String strval, uint8_t indx) @@ -1682,7 +1658,7 @@ void GFX4d::newLine(int8_t f1, int8_t ts, uint16_t ux) if (rotation != 2 && rotation != 3) { cursor_y += remspc; - if (cursor_y > 239) cursor_y = 239; + if (cursor_y > GFX4d_SCRWIDTH) cursor_y = GFX4d_SCRWIDTH; cursor_x = ux; return; } @@ -1691,7 +1667,7 @@ void GFX4d::newLine(int8_t f1, int8_t ts, uint16_t ux) uint16_t offset = 0; if (scrolled == false) { - if ((cursor_y + remspc ) < 320) + if ((cursor_y + remspc ) < _nlh) { cursor_y += textsizeht * fsh1; cursor_x = ux; @@ -1708,36 +1684,30 @@ void GFX4d::newLine(int8_t f1, int8_t ts, uint16_t ux) if (rotation == 3) { - tcy2 = 320 - scrollOffset; - } - else - { + tcy2 = _nlh - scrollOffset; + } else { tcy2 = scrollOffset; } int tcy21 = tcy2 - 1; if (tcy21 < 0) { - tcy21 = tcy21 + 320; + tcy21 = tcy21 + _nlh; } if (textbgcolor != textcolor) { - Hline(0, tcy2, 240, textbgcolor); - Hline(0, tcy21, 240, textbgcolor); - } - else - { - Hline(0, tcy2, 240, BLACK); - Hline(0, tcy21, 240, BLACK); + Hline(0, tcy2, GFX4d_TFTWIDTH, textbgcolor); + Hline(0, tcy21, GFX4d_TFTWIDTH, textbgcolor); + } else { + Hline(0, tcy2, GFX4d_TFTWIDTH, BLACK); + Hline(0, tcy21, GFX4d_TFTWIDTH, BLACK); } if (rotation == 2) { - if ((tempy + sn) > 319) - { - Scroll(tempy + sn - 320); - } - else + if ((tempy + sn) > (_nlh - 1)) { + Scroll(tempy + sn - _nlh); + } else { Scroll(tempy + sn); } } @@ -1745,10 +1715,8 @@ void GFX4d::newLine(int8_t f1, int8_t ts, uint16_t ux) { if ((tempy - sn) < 0) { - Scroll(320 - tempy - sn); - } - else - { + Scroll(_nlh - tempy - sn); + } else { Scroll(tempy - sn); } } @@ -1757,26 +1725,30 @@ void GFX4d::newLine(int8_t f1, int8_t ts, uint16_t ux) if (rotation == 2) { cursor_y = tempy; - if (cursor_y > 319) + if (cursor_y > (_nlh -1)) { - cursor_y = cursor_y - 320; + cursor_y = cursor_y - _nlh; } } if (rotation == 3) { - cursor_y = 320 - tempy; - if (cursor_y > 319) + cursor_y = _nlh - tempy; + if (cursor_y > (_nlh - 1)) { - cursor_y = cursor_y - 320; + cursor_y = cursor_y - _nlh; } } cursor_x = ux; } if (scrolled == false) { - if ((cursor_y + remspc) > 319) + if ((cursor_y + remspc) > (_nlh - 1)) { - setScrollArea(0, 0); + if(_nlh == 240){ + setScrollArea(0, 80); + } else { + setScrollArea(0, 0); + } int16_t diff = remspc; int16_t tempy = scrollOffset; for (int16_t sn = 0; sn < diff + 1; sn++) @@ -1785,36 +1757,30 @@ void GFX4d::newLine(int8_t f1, int8_t ts, uint16_t ux) if (rotation == 3) { - tcy2 = 320 - scrollOffset; - } - else - { + tcy2 = _nlh - scrollOffset; + } else { tcy2 = scrollOffset; } int tcy21 = tcy2 - 1; if (tcy21 < 0) { - tcy21 = tcy21 + 320; + tcy21 = tcy21 + _nlh; } if (textbgcolor != textcolor) { - Hline(0, tcy2, 240, textbgcolor); - Hline(0, tcy21, 240, textbgcolor); - } - else - { - Hline(0, tcy2, 240, BLACK); - Hline(0, tcy21, 240, BLACK); + Hline(0, tcy2, GFX4d_TFTWIDTH, textbgcolor); + Hline(0, tcy21, GFX4d_TFTWIDTH, textbgcolor); + } else { + Hline(0, tcy2, GFX4d_TFTWIDTH, BLACK); + Hline(0, tcy21, GFX4d_TFTWIDTH, BLACK); } if (rotation == 2) { - if ((tempy + sn) > 319) - { - Scroll(tempy + sn - 320); - } - else + if ((tempy + sn) > (_nlh - 1)) { + Scroll(tempy + sn - _nlh); + } else { Scroll(tempy + sn); } } @@ -1822,10 +1788,8 @@ void GFX4d::newLine(int8_t f1, int8_t ts, uint16_t ux) { if ((tempy - sn) < 0) { - Scroll(320 - tempy - sn); - } - else - { + Scroll(_nlh - tempy - sn); + } else { Scroll(tempy - sn); } } @@ -1837,11 +1801,11 @@ void GFX4d::newLine(int8_t f1, int8_t ts, uint16_t ux) } if (rotation == 3) { - cursor_y = 319 - tempy + 1; + cursor_y = (_nlh - 1) - tempy + 1; } - if (cursor_y > 319) + if (cursor_y > (_nlh - 1)) { - cursor_y = cursor_y - 320; + cursor_y = cursor_y - _nlh; } cursor_x = ux; } @@ -1906,35 +1870,25 @@ void GFX4d::drawChar2(int16_t x, int16_t y, unsigned char c, uint16_t color, uin { if (sizew == 1 && sizeht == 1) { - if (y + j > 319 && (rotation == 3 || rotation == 2)) - { - PutPixel(x + i, y + j - 320, color); - } - else + if (y + j > (_nlh - 1) && (rotation == 3 || rotation == 2)) { + PutPixel(x + i, y + j - _nlh, color); + } else { PutPixel(x + i, y + j, color); } - } - else - { + } else { RectangleFilled(x + (i * sizew), y + (j * sizeht), (sizew + x) + (i * sizew) - 1, (sizeht + y) + (j * sizeht) - 1, color); } - } - else if (bg != color) - { + } else if (bg != color){ if (sizew == 1 && sizeht == 1) { - if (y + j > 319 && (rotation == 3 || rotation == 2)) - { - PutPixel(x + i, y + j - 320, bg); - } - else + if (y + j > (_nlh - 1) && (rotation == 3 || rotation == 2)) { + PutPixel(x + i, y + j - _nlh, bg); + } else { PutPixel(x + i, y + j, bg); } - } - else - { + } else { RectangleFilled(x + (i * sizew), y + (j * sizeht), (sizew + x) + (i * sizew) - 1, (sizeht + y) + (j * sizeht) - 1, bg); } } @@ -1967,9 +1921,7 @@ void GFX4d::drawChar2tw(int16_t x, int16_t y, unsigned char c, uint16_t color, u if (chb & trow) { temppix[pc] = color; - } - else - { + } else { temppix[pc] = bg; } chb <<= 1; @@ -2009,9 +1961,7 @@ void GFX4d::drawChar1tw(int16_t x, int16_t y, unsigned char c, uint16_t color, u if (chb1 & trow) { temppix[pc] = color; - } - else - { + } else { temppix[pc] = bg; } pc ++; @@ -2068,9 +2018,7 @@ boolean GFX4d::TWMoveTo(uint8_t twcrx, uint8_t twcry) twxpos = twcrx; twypos = twcry; return true; - } - else - { + } else { return false; } } @@ -2088,9 +2036,7 @@ void GFX4d::TWwrite(const char txtinput) if (TWimgSet) { if (twcurson && twen)drawChar2TWimage(0, TWimage, 0, twcurx, twcury, txtf); - } - else - { + } else { if (twcurson && twen)drawChar2tw(twcurx, twcury, 0, txtf, txtb, 1); } boolean skip2 = false; @@ -2100,9 +2046,7 @@ void GFX4d::TWwrite(const char txtinput) if (TWimgSet) { if (twen)drawChar2TWimage(txtinput - 32, TWimage, 0, twcurx, twcury, twcolnum); - } - else - { + } else { if (twen)drawChar2tw(twcurx, twcury, txtinput - 32, twcolnum, txtb, 1); } txtbuf[(chracc * twypos) + twxpos] = txtinput; @@ -2173,9 +2117,7 @@ void GFX4d::TWwrite(const char txtinput) if (TWimgSet) { if (twen)drawChar2TWimage(0, TWimage, 0, twcurx, twcury, twcolnum); - } - else - { + } else { if (twen)drawChar2tw(twcurx, twcury, 0, twcolnum, txtb, 1); } txtbuf[(chracc * twypos) + twxpos] = txtinput; @@ -2188,9 +2130,7 @@ void GFX4d::TWwrite(const char txtinput) if (TWimgSet) { if (twen)drawChar2TWimage(0, TWimage, 0, twcurx, twcury, twcolnum); - } - else - { + } else { if (twen)drawChar2tw(twcurx, twcury, 0, twcolnum, txtb, 1); } txtbuf[(chracc * twypos) + twxpos] = txtinput; @@ -2226,9 +2166,7 @@ void GFX4d::TWwrite(const char txtinput) if ((tempc < 33) && (tempp < 33)) { drawspc1 = false; - } - else - { + } else { drawspc1 = true; } if (tempc < 32) tempc = 32; @@ -2238,9 +2176,7 @@ void GFX4d::TWwrite(const char txtinput) if (TWimgSet) { if (twen)drawChar2TWimage(tempc - 32, TWimage, 0, txtx + (9 * o), txty + (16 * n), temptwcol); - } - else - { + } else { if (twen)drawChar2tw(txtx + (9 * o), txty + (16 * n), tempc - 32, temptwcol, txtb, 1); } } @@ -2251,9 +2187,7 @@ void GFX4d::TWwrite(const char txtinput) if (TWimgSet) { if (twen)UserImagesDR(TWimage, 0, twcurx - tuix[TWimage], twcury - tuiy[TWimage], txtw - 1, 16); - } - else - { + } else { if (twen)RectangleFilled(twcurx, twcury, twcurx + (txtw - 1) - 1, twcury + 16, txtb); } } @@ -2262,9 +2196,7 @@ void GFX4d::TWwrite(const char txtinput) if (TWimgSet) { if (twen)drawChar2TWimage(63, TWimage, 0, twcurx, twcury, txtf); - } - else - { + } else { if (twen)drawChar2tw(twcurx, twcury, 63, txtf, txtb, 1); } } @@ -2280,9 +2212,7 @@ void GFX4d::TWcls() if (TWimgSet) { UserImages(TWimage, 0); - } - else - { + } else { RectangleFilled(txtx - 3, txty - 3, (txtx - 3) + (txtw + 2) - 1, (txty - 3) + (txth + 2) - 1, txtb); } twcurx = txtx; @@ -2321,6 +2251,11 @@ void GFX4d::TextWindowImage(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t void GFX4d::TextWindow(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t txtcolor, uint16_t txbcolor, uint16_t frcolor) { + if(TWInitial){ + txfcol = (uint16_t *)malloc(1200); + txtbuf = (uint8_t *)malloc(600); + TWInitial = false; + } twen = true; for (int n = 0; n < 600; n ++) { @@ -2370,16 +2305,12 @@ void GFX4d::TextWindowRestore() if (TWimgSet) { UserImages(TWimage, 0); - } - else - { + } else { if (twframe) { PanelRecessed(txtx - 6, txty - 6, txtw + 8 , txth + 8, twframecol); RectangleFilled(txtx - 3, txty - 3, (txtx - 3) + (txtw + 2) - 1, (txty - 3) + (txth + 2) - 1, txtb); - } - else - { + } else { RectangleFilled(txtx - 3, txty - 3, (txtx - 3) + (txtw + 2) - 1, (txty - 3) + (txth + 2) - 1, txtb); } } @@ -2399,9 +2330,7 @@ void GFX4d::TextWindowRestore() if (TWimgSet) { drawChar2TWimage(tempc - 32, TWimage, 0, txtx + ((fsw + 1) * o), txty + (fsh * n), tcoltw); - } - else - { + } else { drawChar2tw(txtx + ((fsw + 1) * o), txty + (fsh * n), tempc - 32, tcoltw, txtb, 1); } } @@ -2412,6 +2341,11 @@ void GFX4d::TextWindow(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t txtc { twen = true; if (!(TWimgSet)) TWimage = -1; + if(TWInitial){ + txfcol = (uint16_t *)malloc(1200); + txtbuf = (uint8_t *)malloc(600); + TWInitial = false; + } for (int n = 0; n < 600; n ++) { txtbuf[n] = 0; @@ -2461,9 +2395,7 @@ void GFX4d::drawChar1(int16_t x, int16_t y, unsigned char c, uint16_t color, uin if (i == (fsw)) { tcol = 0x0; - } - else - { + } else { tcol = font1[(c * 5) + i]; } for (int8_t j = 0; j < 8; j++) @@ -2473,17 +2405,13 @@ void GFX4d::drawChar1(int16_t x, int16_t y, unsigned char c, uint16_t color, uin { if (sizew == 1 && sizeht == 1) { - if (y + j > 319 && (rotation == 3 || rotation == 2)) - { - PutPixel(x + i, y + j - 320, color); - } - else + if (y + j > (_nlh -1) && (rotation == 3 || rotation == 2)) { + PutPixel(x + i, y + j - _nlh, color); + } else { PutPixel(x + i, y + j, color); } - } - else - { + } else { if (fstyle == 0)RectangleFilled(x + (i * sizew), y + (j * sizeht), (sizew + x) + (i * sizew) - 1, (sizeht + y) + (j * sizeht) - 1, color); if (fstyle == 2)Circle(x + (i * sizew) + crad, y + (j * sizeht) + crad, crad, color); if (fstyle == 1)CircleFilled(x + (i * sizew) + crad, y + (j * sizeht) + crad, crad, color); @@ -2506,22 +2434,16 @@ void GFX4d::drawChar1(int16_t x, int16_t y, unsigned char c, uint16_t color, uin } } } - } - else if (bg != color) - { + } else if (bg != color){ if (sizew == 1 && sizeht == 1) { - if (y + j > 319 && (rotation == 3 || rotation == 2)) - { - PutPixel(x + i, y + j - 320, bg); - } - else + if (y + j > (_nlh - 1) && (rotation == 3 || rotation == 2)) { + PutPixel(x + i, y + j - _nlh, bg); + } else { PutPixel(x + i, y + j, bg); } - } - else - { + } else { RectangleFilled(x + i * sizew, y + j * sizeht, (sizew + x) + i * sizew - 1, (sizeht + y) + j * sizeht - 1, bg); } } @@ -2577,21 +2499,23 @@ void GFX4d::setGRAM(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) sgy = y0; sgw = x1 - x0 + 1; sgh = y1 - y0 + 1; - digitalWrite(_cs, LOW); + x1 += _xstart; + y1 += _ystart; + DISP_CS_LO; uint32_t casCoord = (x0 << 16) + x1; uint32_t pasCoord = (y0 << 16) + y1; - digitalWrite(_dc, LOW); - SPI.write(GFX4d_CASET); - digitalWrite(_dc, HIGH); - SPI.write32(casCoord); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_PASET); - digitalWrite(_dc, HIGH); - SPI.write32(pasCoord); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_RAMWR); - digitalWrite(_dc, HIGH); - digitalWrite(_cs, HIGH); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_CASET); + DISP_DC_HI; + DISP_SPI_WRITE32(casCoord); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_PASET); + DISP_DC_HI; + DISP_SPI_WRITE32(pasCoord); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_RAMWR); + DISP_DC_HI; + DISP_CS_HI; } void GFX4d::setGRAM_(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) @@ -2600,94 +2524,103 @@ void GFX4d::setGRAM_(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) sgy = y0; sgw = x1 - x0 + 1; sgh = y1 - y0 + 1; + x1 += _xstart; + y1 += _ystart; uint32_t casCoord = (x0 << 16) + x1; uint32_t pasCoord = (y0 << 16) + y1; - digitalWrite(_dc, LOW); - SPI.write(GFX4d_CASET); - digitalWrite(_dc, HIGH); - SPI.write32(casCoord); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_PASET); - digitalWrite(_dc, HIGH); - SPI.write32(pasCoord); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_RAMWR); - digitalWrite(_dc, HIGH); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_CASET); + DISP_DC_HI; + DISP_SPI_WRITE32(casCoord); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_PASET); + DISP_DC_HI; + DISP_SPI_WRITE32(pasCoord); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_RAMWR); + DISP_DC_HI; } void GFX4d::WrGRAM(uint32_t color) { - SPI.beginTransaction(spiSettingsD); - digitalWrite(_dc, HIGH); - digitalWrite(_cs, LOW); -#ifndef ESP32 - SPI.write32(color, true); -#else - SPI.write32(color); -#endif - digitalWrite(_cs, HIGH); - SPI.endTransaction(); + DISP_SPI_BEGINT; + DISP_DC_HI; + DISP_CS_LO; + DISP_SPI_WRITE32(color); + DISP_CS_HI; + DISP_SPI_ENDT; } void GFX4d::WrGRAM16(uint16_t color) { - SPI.beginTransaction(spiSettingsD); - digitalWrite(_dc, HIGH); - digitalWrite(_cs, LOW); + DISP_SPI_BEGINT; + DISP_DC_HI; + DISP_CS_LO; + DISP_SPI_WRITE16(color); + DISP_CS_HI; + DISP_SPI_ENDT; +} + +void GFX4d::WrGRAMs16(uint16_t *data, uint16_t l) +{ + uint32_t tdw; + DISP_SPI_BEGINT; + DISP_DC_HI; + DISP_CS_LO; #ifndef ESP32 - SPI.write16(color, true); + while (l--) + { + tdw = *data++; + + DISP_SPI_WRITE16(tdw); + } #else - SPI.write16(color); + SPI.writePixels(data, l); #endif - digitalWrite(_cs, HIGH); - SPI.endTransaction(); + DISP_CS_HI; + DISP_SPI_ENDT; } -void GFX4d::WrGRAMs16(uint16_t *data, uint16_t l) +void GFX4d::WrGRAMs16NT(uint16_t *data, uint16_t l) { uint32_t tdw; - SPI.beginTransaction(spiSettingsD); - digitalWrite(_dc, HIGH); - digitalWrite(_cs, LOW); #ifndef ESP32 while (l--) { tdw = *data++; - SPI.write16(tdw, true); + DISP_SPI_WRITE16(tdw); } #else SPI.writePixels(data, l); #endif - digitalWrite(_cs, HIGH); - SPI.endTransaction(); } uint16_t GFX4d::ReadPixel(uint16_t xrp, uint16_t yrp) { + xrp += _xstart; + yrp += _ystart; uint32_t casCoord = (xrp << 16) | xrp; uint32_t pasCoord = (yrp << 16) | yrp; - digitalWrite(_cs, LOW); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_CASET); - digitalWrite(_dc, HIGH); - SPI.write32(casCoord); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_PASET); - digitalWrite(_dc, HIGH); - SPI.write32(pasCoord); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_RAMRD); - digitalWrite(_dc, HIGH); - SPI.beginTransaction(spiSettingsD); - digitalWrite(_dc, HIGH); - digitalWrite(_cs, LOW); + DISP_CS_LO; + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_CASET); + DISP_DC_HI; + DISP_SPI_WRITE32(casCoord); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_PASET); + DISP_DC_HI; + DISP_SPI_WRITE32(pasCoord); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_RAMRD); + DISP_DC_HI; + DISP_SPI_BEGINT; uint16_t dcol; - dcol = SPI.transfer(0); - uint16_t tcol = (SPI.transfer(0) & 0xF8) << 8; - tcol = tcol | ((SPI.transfer(0) & 0xFC) << 3); - tcol = tcol | (SPI.transfer(0) >> 3); - digitalWrite(_cs, HIGH); - SPI.endTransaction(); + dcol = DISP_SPI_TRANSFER(0); + uint16_t tcol = (DISP_SPI_TRANSFER(0) & 0xF8) << 8; + tcol = tcol | ((DISP_SPI_TRANSFER(0) & 0xFC) << 3); + tcol = tcol | (DISP_SPI_TRANSFER(0) >> 3); + DISP_CS_HI; + DISP_SPI_ENDT; return tcol; } @@ -2698,11 +2631,9 @@ void GFX4d::ChangeColor(uint16_t oCol, uint16_t nCol) int r, c; if (Orientation() < 2) { - wcc = 320 ; hcc = 240; - } - else - { - hcc = 320; wcc = 240; + wcc = _nlh ; hcc = GFX4d_TFTWIDTH; + } else { + hcc = _nlh; wcc = GFX4d_TFTWIDTH; } r = hcc; c = wcc / 40; @@ -2713,44 +2644,41 @@ void GFX4d::ChangeColor(uint16_t oCol, uint16_t nCol) yield(); for (int c1 = 0; c1 < c; c1 ++) { - c1sum = c1 * 40; - uint32_t casCoord = (c1sum << 16) | (c1sum + 39); + c1sum = (c1 * 40) + _xstart; + r1 += _ystart; + uint32_t casCoord = (c1sum << 16) | (c1sum + 39); uint32_t pasCoord = (r1 << 16) | r1; - digitalWrite(_cs, LOW); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_CASET); - digitalWrite(_dc, HIGH); - SPI.write32(casCoord); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_PASET); - digitalWrite(_dc, HIGH); - SPI.write32(pasCoord); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_RAMRD); - digitalWrite(_dc, HIGH); - SPI.beginTransaction(spiSettingsD); - digitalWrite(_dc, HIGH); - digitalWrite(_cs, LOW); - uint16_t dcol = SPI.transfer(0); + DISP_CS_LO; + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_CASET); + DISP_DC_HI; + DISP_SPI_WRITE32(casCoord); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_PASET); + DISP_DC_HI; + DISP_SPI_WRITE32(pasCoord); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_RAMRD); + DISP_DC_HI; + DISP_SPI_BEGINT; + uint16_t dcol = DISP_SPI_TRANSFER(0); changed = 0; for (int n = 0; n < 40; n += 1) { - tcol = (SPI.transfer(0) & 0xF8) << 8; - dcol = SPI.transfer16(0); + tcol = (DISP_SPI_TRANSFER(0) & 0xF8) << 8; + dcol = DISP_SPI_TRANSFER16(0); tcol = tcol | ((dcol & 0xFC00) >> 5); tcol = tcol | ((dcol & 0xFC) >> 3); if (tcol != oCol) { pixToChange[n] = tcol; - } - else - { + } else { changed = 1; pixToChange[n] = nCol; } } - digitalWrite(_cs, HIGH); - SPI.endTransaction(); + DISP_CS_HI; + DISP_SPI_ENDT; if (changed) { setGRAM(c1 * 40, r1, (c1 * 40) + 39, r1); @@ -2764,9 +2692,9 @@ void GFX4d::WrGRAMs8(uint8_t *data, uint16_t l, byte mul) { uint32_t tdw; uint16_t tdy; - SPI.beginTransaction(spiSettingsD); - digitalWrite(_dc, HIGH); - digitalWrite(_cs, LOW); + DISP_SPI_BEGINT; + DISP_DC_HI; + DISP_CS_LO; while (l) { if (mul == 2) @@ -2780,17 +2708,13 @@ void GFX4d::WrGRAMs8(uint8_t *data, uint16_t l, byte mul) if (testf & 2) { tdw = TWimageTextCol << 16; - } - else - { + } else { tdw = (*data++ << 24) + (*data++ << 16); } if (testf & 1) { tdw = tdw + TWimageTextCol; - } - else - { + } else { tdw = tdw + (*data++ << 8) + (*data++); } if (TWcharBit == 0) @@ -2798,62 +2722,96 @@ void GFX4d::WrGRAMs8(uint8_t *data, uint16_t l, byte mul) TWcharBit = 8; TWcharByte ++; } TWcharBit -= 2; - } - else - { + } else { tdw = (*data++ << 24) + (*data++ << 16) + (*data++ << 8) + *data++; } l -= 4; - SPI.write32(tdw, true); - } - else - { + DISP_SPI_WRITE32(tdw); + } else { tdy = (*data++ << 8) + *data++; l -= 2; - SPI.write16(tdy); + DISP_SPI_WRITE16(tdy); } #else SPI.writeBytes(data, l); l = 0; #endif - } - else - { + } else { if (l >= 2) { tdw = (RGB3322565[*data++] << 16) + RGB3322565[*data++]; l -= 2; - SPI.write32(tdw); +#ifdef ESP32 + DISP_SPI_WRITE32(tdw); + } else { + tdy = RGB3322565[*data++]; + l -= 1; + DISP_SPI_WRITE16(tdy); } - else - { + } + } + DISP_CS_HI; + DISP_SPI_ENDT; +#else + DISP_SPI_WRITE32(tdw); + } else { tdy = RGB3322565[*data++]; l -= 1; - SPI.write16(tdy); + DISP_SPI_WRITE(tdy); } } } - digitalWrite(_cs, HIGH); - SPI.endTransaction(); + DISP_CS_HI; + DISP_SPI_ENDT; +#endif +} + +#ifdef ESP32 +void GFX4d::WritePixels(uint16_t * data, uint32_t l){ + DISP_SPI_BEGINT; + DISP_DC_HI; + DISP_CS_LO; + SPI.writePixels(data, l); + DISP_CS_HI; + DISP_SPI_ENDT; +} +#endif + +void GFX4d::WriteBytes(uint8_t *data, uint32_t l) { + DISP_SPI_BEGINT; + DISP_DC_HI; + DISP_CS_LO; + DISP_SPI_WRITEBYTES(data, l); + DISP_CS_HI; + DISP_SPI_ENDT; +} + +void GFX4d::WrGRAMs(uint32_t *data, uint16_t l) +{ + uint32_t tdw; + DISP_SPI_BEGINT; + DISP_DC_HI; + DISP_CS_LO; + while (l--) + { + tdw = *data++; + DISP_SPI_WRITE32(tdw); + } + DISP_CS_HI; + DISP_SPI_ENDT; } -void GFX4d::WrGRAMs(uint32_t *data, uint16_t l) +void GFX4d::WrGRAMsNT(uint32_t *data, uint16_t l) { uint32_t tdw; - SPI.beginTransaction(spiSettingsD); - digitalWrite(_dc, HIGH); - digitalWrite(_cs, LOW); + DISP_DC_HI; + DISP_CS_LO; while (l--) { tdw = *data++; -#ifndef ESP32 - SPI.write32(tdw, true); -#else - SPI.write32(tdw); -#endif + DISP_SPI_WRITE32(tdw); } - digitalWrite(_cs, HIGH); - SPI.endTransaction(); + DISP_CS_HI; } void GFX4d::PutPixel(int16_t x, int16_t y, uint16_t color) @@ -2862,28 +2820,26 @@ void GFX4d::PutPixel(int16_t x, int16_t y, uint16_t color) { return; } - SPI.beginTransaction(spiSettingsD); - digitalWrite(_cs, LOW); + DISP_SPI_BEGINT; + DISP_CS_LO; + x += _xstart; + y += _ystart; uint32_t casCoord = (x << 16) + (x + 1); uint32_t pasCoord = (y << 16) + (y + 1); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_CASET); - digitalWrite(_dc, HIGH); - SPI.write32(casCoord); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_PASET); - digitalWrite(_dc, HIGH); - SPI.write32(pasCoord); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_RAMWR); - digitalWrite(_dc, HIGH); -#ifndef ESP32 - SPI.write16(color, true); -#else - SPI.write16(color); -#endif - digitalWrite(_cs, HIGH); - SPI.endTransaction(); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_CASET); + DISP_DC_HI; + DISP_SPI_WRITE32(casCoord); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_PASET); + DISP_DC_HI; + DISP_SPI_WRITE32(pasCoord); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_RAMWR); + DISP_DC_HI; + DISP_SPI_WRITE16(color); + DISP_CS_HI; + DISP_SPI_ENDT; } void GFX4d::Vline(int16_t x, int16_t y, int16_t h, uint16_t vcolor) @@ -2900,36 +2856,36 @@ void GFX4d::Vline(int16_t x, int16_t y, int16_t h, uint16_t vcolor) y = 0; } if ((y + h - 1) >= height) h = height - y; - SPI.beginTransaction(spiSettingsD); - digitalWrite(_cs, LOW); + x += _xstart; + y += _ystart; + DISP_SPI_BEGINT; + DISP_CS_LO; uint32_t casCoord = (x << 16) + x; uint32_t pasCoord = (y << 16) + (y + h - 1); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_CASET); - digitalWrite(_dc, HIGH); - SPI.write32(casCoord); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_PASET); - digitalWrite(_dc, HIGH); - SPI.write32(pasCoord); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_RAMWR); - digitalWrite(_dc, HIGH); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_CASET); + DISP_DC_HI; + DISP_SPI_WRITE32(casCoord); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_PASET); + DISP_DC_HI; + DISP_SPI_WRITE32(pasCoord); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_RAMWR); + DISP_DC_HI; if (h < 2) { - SPI.write16(vcolor); - } - else - { + DISP_SPI_WRITE16(vcolor); + } else { while (h > 0) { - SPI.write32((vcolor << 16) | vcolor); + DISP_SPI_WRITE32((vcolor << 16) | vcolor); h -= 2; } - if (h < 0) SPI.write16(vcolor); + if (h < 0) DISP_SPI_WRITE16(vcolor); } - digitalWrite(_cs, HIGH); - SPI.endTransaction(); + DISP_CS_HI; + DISP_SPI_ENDT; } void GFX4d::Hline(int16_t x, int16_t y, int16_t w, uint16_t hcolor) @@ -2946,36 +2902,36 @@ void GFX4d::Hline(int16_t x, int16_t y, int16_t w, uint16_t hcolor) x = 0; } if ((x + w - 1) >= width) w = width - x; - SPI.beginTransaction(spiSettingsD); - digitalWrite(_cs, LOW); + x += _xstart; + y += _ystart; + DISP_SPI_BEGINT; + DISP_CS_LO; uint32_t casCoord = (x << 16) + (x + w - 1); uint32_t pasCoord = (y << 16) + y; - digitalWrite(_dc, LOW); - SPI.write(GFX4d_CASET); - digitalWrite(_dc, HIGH); - SPI.write32(casCoord); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_PASET); - digitalWrite(_dc, HIGH); - SPI.write32(pasCoord); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_RAMWR); - digitalWrite(_dc, HIGH); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_CASET); + DISP_DC_HI; + DISP_SPI_WRITE32(casCoord); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_PASET); + DISP_DC_HI; + DISP_SPI_WRITE32(pasCoord); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_RAMWR); + DISP_DC_HI; if (w < 2) { - SPI.write16(hcolor); - } - else - { + DISP_SPI_WRITE16(hcolor); + } else { while (w > 0) { - SPI.write32((hcolor << 16) | hcolor); + DISP_SPI_WRITE32((hcolor << 16) | hcolor); w -= 2; } - if (w < 0) SPI.write16(hcolor); + if (w < 0) DISP_SPI_WRITE16(hcolor); } - digitalWrite(_cs, HIGH); - SPI.endTransaction(); + DISP_CS_HI; + DISP_SPI_ENDT; } void GFX4d::Cls(uint16_t color) @@ -3029,37 +2985,37 @@ void GFX4d::RectangleFilled(int16_t x, int16_t y, int16_t x1, int16_t y1, uint16 } int w = x1 - x + 1; int h = y1 - y + 1; - SPI.beginTransaction(spiSettingsD); - digitalWrite(_cs, LOW); + x += _xstart; + y += _ystart; + DISP_SPI_BEGINT; + DISP_CS_LO; uint32_t casCoord = (x << 16) + (x + w - 1); uint32_t pasCoord = (y << 16) + (y + h - 1); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_CASET); - digitalWrite(_dc, HIGH); - SPI.write32(casCoord); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_PASET); - digitalWrite(_dc, HIGH); - SPI.write32(pasCoord); - digitalWrite(_dc, LOW); - SPI.write(GFX4d_RAMWR); - digitalWrite(_dc, HIGH); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_CASET); + DISP_DC_HI; + DISP_SPI_WRITE32(casCoord); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_PASET); + DISP_DC_HI; + DISP_SPI_WRITE32(pasCoord); + DISP_DC_LO; + DISP_SPI_WRITE(GFX4d_RAMWR); + DISP_DC_HI; int32_t tpwh = w * h; if (tpwh < 2) { - SPI.write16(color); - } - else - { + DISP_SPI_WRITE16(color); + } else { while (tpwh > 0) { - SPI.write32((color << 16) | color); + DISP_SPI_WRITE32((color << 16) | color); tpwh -= 2; } - if (tpwh < 0) SPI.write16(color); + if (tpwh < 0) DISP_SPI_WRITE16(color); } - digitalWrite(_cs, HIGH); - SPI.endTransaction(); + DISP_CS_HI; + DISP_SPI_ENDT; } void GFX4d::Panel(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t colorp) @@ -3092,6 +3048,16 @@ void GFX4d::PanelRecessed(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t c void GFX4d::Buttonx(uint8_t hndl, int16_t x, int16_t y, int16_t w, int16_t h, uint16_t colorb, String btext, int8_t tfont, uint16_t tcolor) { + if(ButtonxInitial){ + bposx = (uint16_t *)malloc(256); + bposy = (uint16_t *)malloc(256); + bposw = (uint16_t *)malloc(256); + bposh = (uint16_t *)malloc(256); + bposc = (uint16_t *)malloc(256); + bstat = (uint8_t *)malloc(128); + bactive = (bool *)malloc(128); + ButtonxInitial = false; + } nl = false; bactive[hndl] = true; bposx[hndl] = x; @@ -3111,9 +3077,7 @@ void GFX4d::Button(uint8_t state, int16_t x, int16_t y, uint16_t colorb, uint16_ { fsww = 6; fshh = 8; - } - else - { + } else { fsww = 8; fshh = 16; } @@ -3157,9 +3121,7 @@ void GFX4d::drawButton(uint8_t updn, int16_t x, int16_t y, int16_t w, int16_t h, { tfw = 6; tfh = 8; - } - else - { + } else { tfw = 9; tfh = 16; } @@ -3251,18 +3213,18 @@ uint16_t GFX4d::getScrolledY(uint16_t y) { if (rotation == 2 && scrolled == true) { - SY = 320 - scrollOffset + y; - if (SY > 319) + SY = _nlh - scrollOffset + y; + if (SY > (_nlh - 1)) { - SY = SY - 320; + SY = SY - _nlh; } } if (rotation == 3 && scrolled == true) { SY = scrollOffset + y; - if (SY > 319) + if (SY > (_nlh -1)) { - SY = SY - 320; + SY = SY - _nlh; } } } @@ -3532,174 +3494,137 @@ uint16_t GFX4d::RGBto565(uint8_t rc, uint8_t gc, uint8_t bc) void GFX4d::Orientation(uint8_t m) { - SPI.beginTransaction(spiSettingsD); - digitalWrite(_dc, LOW); - digitalWrite(_cs, LOW); - SPI.write(0x36); - digitalWrite(_cs, HIGH); + DISP_SPI_BEGINT; + DISP_DC_LO; + DISP_CS_LO; + DISP_SPI_WRITE(0x36); + DISP_CS_HI; rotation = m % 4; switch (rotation) { case 2: - digitalWrite(_dc, HIGH); - digitalWrite(_cs, LOW); -#ifdef M5STACK - SPI.write(0x68); -#else + DISP_DC_HI; + DISP_CS_LO; if(ST7789){ - SPI.write(TFT_MAD_COLOR_ORDER); + DISP_SPI_WRITE(TFT_MAD_COLOR_ORDER); + _xstart = 0; + _ystart = 0; } else { - SPI.write(0x48); + DISP_SPI_WRITE(0x48); } -#endif - digitalWrite(_cs, HIGH); + DISP_CS_HI; width = GFX4d_TFTWIDTH; - height = GFX4d_TFTHEIGHT; + height = _nlh; rotation = 2; break; case 1: - digitalWrite(_dc, HIGH); - digitalWrite(_cs, LOW); -#ifdef M5STACK - SPI.write(0xA8); -#else + DISP_DC_HI; + DISP_CS_LO; if(ST7789){ - SPI.write(TFT_MAD_MV | TFT_MAD_MY | TFT_MAD_COLOR_ORDER); + DISP_SPI_WRITE(TFT_MAD_MV | TFT_MAD_MY | TFT_MAD_COLOR_ORDER); + _ystart = _colstart; + _xstart = _rowstart; } else { - SPI.write(0xE8); + DISP_SPI_WRITE(0xE8); } -#endif - digitalWrite(_cs, HIGH); - width = GFX4d_TFTHEIGHT; - height = GFX4d_TFTWIDTH; -#ifdef M5STACK - rotation = 1; -#else + DISP_CS_HI; + width = _nlh; + height = GFX4d_TFTWIDTH; rotation = 0; -#endif break; case 3: - digitalWrite(_dc, HIGH); - digitalWrite(_cs, LOW); -#ifdef M5STACK - SPI.write(0xC8); -#else + DISP_DC_HI; + DISP_CS_LO; if(ST7789){ - SPI.write(TFT_MAD_MX | TFT_MAD_MY | TFT_MAD_COLOR_ORDER); + DISP_SPI_WRITE(TFT_MAD_MX | TFT_MAD_MY | TFT_MAD_COLOR_ORDER); + _xstart = _colstart; + _ystart = _rowstart; } else { - SPI.write(0x88); + DISP_SPI_WRITE(0x88); } -#endif - digitalWrite(_cs, HIGH); + DISP_CS_HI; width = GFX4d_TFTWIDTH; - height = GFX4d_TFTHEIGHT; + height = _nlh; rotation = 3; break; case 0: - digitalWrite(_dc, HIGH); - digitalWrite(_cs, LOW); -#ifdef M5STACK - SPI.write(0x08); -#else + DISP_DC_HI; + DISP_CS_LO; if(ST7789){ - SPI.write(TFT_MAD_MX | TFT_MAD_MV | TFT_MAD_COLOR_ORDER); - //SPI.write(TFT_MAD_COLOR_ORDER); + DISP_SPI_WRITE(TFT_MAD_MX | TFT_MAD_MV | TFT_MAD_COLOR_ORDER); + _xstart = 0; + _ystart = 0; } else { - SPI.write(0x28); + DISP_SPI_WRITE(0x28); } -#endif - digitalWrite(_cs, HIGH); - width = GFX4d_TFTHEIGHT; - height = GFX4d_TFTWIDTH; -#ifdef M5STACK - rotation = 0; -#else + DISP_CS_HI; + width = _nlh; + height = GFX4d_TFTWIDTH; rotation = 1; -#endif break; } - SPI.endTransaction(); + DISP_SPI_ENDT; } void GFX4d::Invert(boolean i) { - SPI.beginTransaction(spiSettingsD); - if (i) - { - if (IPSDisplay) - { - SetCommand(GFX4d_INVOFF); - } - else - { - SetCommand(GFX4d_INVON); - } - } - else + DISP_SPI_BEGINT; + if (IPSDisplay ^ i) { - if (IPSDisplay) - { - SetCommand(GFX4d_INVON); - } - else - { - SetCommand(GFX4d_INVOFF); - } - } - SPI.endTransaction(); + SetCommand(GFX4d_INVON); + } else { + SetCommand(GFX4d_INVOFF); + } + DISP_SPI_ENDT; } uint8_t GFX4d::ReadCommand(uint8_t c, uint8_t index) { - SPI.beginTransaction(spiSettingsD); - digitalWrite(_cs, LOW); - digitalWrite(_dc, LOW); - SPI.write(0xD9); - digitalWrite(_dc, HIGH); - SPI.write(0x10 + index); - digitalWrite(_dc, LOW); - SPI.write(c); - digitalWrite(_dc, HIGH); - uint8_t r = SPI.transfer(0x00); - digitalWrite(_cs, HIGH); - SPI.endTransaction(); + DISP_SPI_BEGINT; + DISP_CS_LO; + DISP_DC_LO; + DISP_SPI_WRITE(0xD9); + DISP_DC_HI; + DISP_SPI_WRITE(0x10 + index); + DISP_DC_LO; + DISP_SPI_WRITE(c); + DISP_DC_HI; + uint8_t r = DISP_SPI_TRANSFER(0x00); + DISP_CS_HI; + DISP_SPI_ENDT; return r; } void GFX4d::SetCommand(uint8_t c) { - digitalWrite(_dc, LOW); - digitalWrite(_cs, LOW); - SPI.write(c); - digitalWrite(_cs, HIGH); + DISP_DC_LO; + DISP_CS_LO; + DISP_SPI_WRITE(c); + DISP_CS_HI; } void GFX4d::SetData(uint8_t c) { - digitalWrite(_dc, HIGH); - digitalWrite(_cs, LOW); - SPI.write(c); - digitalWrite(_cs, HIGH); + DISP_DC_HI; + DISP_CS_LO; + DISP_SPI_WRITE(c); + DISP_CS_HI; } void GFX4d::SetData(uint8_t * data, uint8_t size) { - digitalWrite(_dc, HIGH); - digitalWrite(_cs, LOW); - SPI.writeBytes(data, size); - digitalWrite(_cs, HIGH); + DISP_DC_HI; + DISP_CS_LO; + DISP_SPI_WRITEBYTES(data, size); + DISP_CS_HI; } void GFX4d::touch_Set(uint8_t mode) { uint8_t dat; -#ifndef ESP32 - SPI.beginTransaction(spiSettingsT); -#else - SPI.beginTransaction(spiSettingsT32); -#endif + DISP_SPI_BEGINT; tchen = false; - digitalWrite(_tcs, LOW); + TOUCH_CS_LO; delayMicroseconds(50); SPI.write(0x55); delayMicroseconds(50); @@ -3712,11 +3637,11 @@ void GFX4d::touch_Set(uint8_t mode) dat = SPI.transfer(0); delayMicroseconds(50); } - digitalWrite(_tcs, HIGH); + TOUCH_CS_HI; if (mode == TOUCH_ENABLE) { tchen = true; - digitalWrite(_tcs, LOW); + TOUCH_CS_LO; SPI.write(0x55); delayMicroseconds(50); SPI.write(0x01); @@ -3758,16 +3683,16 @@ void GFX4d::touch_Set(uint8_t mode) dat = SPI.transfer(0); delayMicroseconds(50); } - digitalWrite(_tcs, HIGH); + TOUCH_CS_HI; } - SPI.endTransaction(); + DISP_SPI_ENDT; } boolean GFX4d::touch_Update() { if (millis() >= touchTime && (millis() - touchTime) < 18) return false; if (tchen == false) return false; - gciobjtouched = 255; + gciobjtouched = IMAGE_NOT_TOUCHED; boolean tsskip = false; uint8_t dattouch[5]; uint8_t pen = 0; @@ -3776,26 +3701,18 @@ boolean GFX4d::touch_Update() uint16_t ty; uint16_t TestNoNewData = 0; boolean NewData = true; -#ifndef ESP32 - SPI.beginTransaction(spiSettingsT); -#else - SPI.beginTransaction(spiSettingsT32); -#endif -#ifndef ESP32 + DISP_SPI_BEGINTT; delayMicroseconds(50); -#endif - digitalWrite(_tcs, LOW); -#ifndef ESP32 + TOUCH_CS_LO; delayMicroseconds(50); -#endif for (int s = 0; s < 5; s++) { dattouch[s] = SPI.transfer(0x00); TestNoNewData = TestNoNewData + dattouch[s]; delayMicroseconds(50); } - SPI.endTransaction(); - digitalWrite(_tcs, HIGH); + DISP_SPI_ENDT; + TOUCH_CS_HI; for (int n = 0; n < 13; n ++) { tchbuf[n] = tchbuf[n + 1]; @@ -3819,9 +3736,7 @@ boolean GFX4d::touch_Update() } gTX = oldgTX; gTY = oldgTY; - } - else - { + } else { gTX = (dattouch[2] << 7) + (dattouch[1] & 0x7F); gTY = (dattouch[4] << 7) + (dattouch[3] & 0x7F); if (dattouch[0] > 129 || dattouch[0] < 128) pen = 128; @@ -3845,41 +3760,43 @@ boolean GFX4d::touch_Update() switch (rotation) { case 2: - gTX = map(gTX, 260, 3820, 0, 240); - gTY = map(gTY, 400, 3930, 320, 0); + gTX = map(gTX, 260, 3820, 0, GFX4d_TFTWIDTH); + gTY = map(gTY, 400, 3930, GFX4d_TFTHEIGHT, 0); break; case 1: tx = gTY; ty = gTX; - gTY = map(ty, 260, 3820, 240, 0); - gTX = map(tx, 400, 3930, 320, 0); + gTY = map(ty, 260, 3820, GFX4d_TFTWIDTH, 0); + gTX = map(tx, 400, 3930, GFX4d_TFTHEIGHT, 0); break; case 3: - gTX = map(gTX, 240, 3820, 240, 0); - gTY = map(gTY, 400, 3930, 0, 320); + gTX = map(gTX, 240, 3820, GFX4d_TFTWIDTH, 0); + gTY = map(gTY, 400, 3930, 0, GFX4d_TFTHEIGHT); break; case 0: tx = gTY; ty = gTX; - gTY = map(ty, 260, 3820, 0, 240); - gTX = map(tx, 400, 3930, 0, 320); + gTY = map(ty, 260, 3820, 0, GFX4d_TFTWIDTH); + gTX = map(tx, 400, 3930, 0, GFX4d_TFTHEIGHT); break; } } - gciobjtouched = 255; + gciobjtouched = IMAGE_NOT_TOUCHED; if (gciobjnum > 0 && gPEN == TOUCH_PRESSED && NewData) { - for (int n = 0; n < gciobjnum; n++) - { - if (gciobjtouchenable[n] == true) + if(opgfx){ + for (int n = 0; n < gciobjnum; n++) { - if (gTX >= tuix[n] && gTX <= (tuix[n] + tuiw[n] - 1) && gTY >= tuiy[n] && gTY <= (tuiy[n] + tuih[n] - 1)) + if (gciobjtouchenable[n] == true) { - gciobjtouched = n; - break; + if (gTX >= tuix[n] && gTX <= (tuix[n] + tuiw[n] - 1) && gTY >= tuiy[n] && gTY <= (tuiy[n] + tuih[n] - 1)) + { + gciobjtouched = n; + break; + } } } - } + } } oldgPEN = gPEN; oldgTX = gTX; @@ -3891,22 +3808,26 @@ boolean GFX4d::touch_Update() void GFX4d::imageTouchEnable(int gcinum, boolean en) { - if (gcinum < 0) - { - for (int n = 0; n < MAX_WIDGETS; n++) + if(opgfx){ + if (gcinum < 0) { - gciobjtouchenable[n] = en; + for (int n = 0; n < MAX_WIDGETS; n++) + { + gciobjtouchenable[n] = en; + } + } else { + gciobjtouchenable[gcinum] = en; } } - else - { - gciobjtouchenable[gcinum] = en; - } } -uint16_t GFX4d::imageTouched() +int GFX4d::imageTouched() { - return gciobjtouched; + if(opgfx){ + return gciobjtouched; + } else { + return -1; + } } uint16_t GFX4d::touch_GetX() @@ -3933,9 +3854,7 @@ void GFX4d::BacklightOn(boolean bl) #else ledcWrite(1, 1023); #endif - } - else - { + } else { #ifndef ESP32 analogWrite(0, 0); #else @@ -4033,9 +3952,7 @@ void GFX4d::UserCharacter(uint32_t *data, uint8_t ucsize, int16_t ucx, int16_t u if (test2 == 1) { PutPixel(mx, my, color); - } - else - { + } else { PutPixel(mx, my, bgcolor); } } @@ -4047,9 +3964,7 @@ void GFX4d::UserCharacter(uint32_t *data, uint8_t ucsize, int16_t ucx, int16_t u if (test2 == 1) { PutPixel(mx, my, color); - } - else - { + } else { PutPixel(mx, my, bgcolor); } } @@ -4074,9 +3989,7 @@ void GFX4d::UserImageDR(uint16_t ui, int16_t uxpos, int16_t uypos, int16_t uwidt if (userImag) { String resultFO = "Success. "; - } - else - { + } else { return; } userImag.seek(tuiIndex[ui] + 4); @@ -4119,9 +4032,7 @@ void GFX4d::UserImageDR(uint16_t ui, int16_t uxpos, int16_t uypos, int16_t uwidt buf16[b >> 1] = (buf[b] << 8) | buf[b + 1]; } WrGRAMs16(buf16, bufsize); - } - else - { + } else { WrGRAMs8(buf, bufsize, mul); } #endif @@ -4204,9 +4115,7 @@ void GFX4d::UserImagesDR(uint16_t uino, int frames, int16_t uxpos, int16_t uypos pc = 0; } } - } - else - { + } else { WrGRAMs8(buf, bufsize, mul); } #endif @@ -4244,9 +4153,7 @@ void GFX4d::UserCharacterBG(uint32_t *data, uint8_t ucsize, int16_t ucx, int16_t dataFile.seek(bgindex); bwidth = (dataFile.read() << 8) + dataFile.read(); bheight = (dataFile.read() << 8) + dataFile.read(); - } - else - { + } else { bwidth = tuiw[ui]; bheight = tuih[ui]; } @@ -4271,16 +4178,12 @@ void GFX4d::UserCharacterBG(uint32_t *data, uint8_t ucsize, int16_t ucx, int16_t if (test2 == 1 && draw) { pix1 = color; - } - else - { + } else { if (type) { dataFile.seek(bgoff + (left << 1)); pix1 = (dataFile.read() << 8) + dataFile.read(); - } - else - { + } else { userImag.seek(bgoff + (left << 1)); pix1 = (userImag.read() << 8) + userImag.read(); } @@ -4290,16 +4193,12 @@ void GFX4d::UserCharacterBG(uint32_t *data, uint8_t ucsize, int16_t ucx, int16_t if (test2 == 1 && draw) { pix2 = color; - } - else - { + } else { if (type) { dataFile.seek(bgoff + (left << 1)); pix2 = (dataFile.read() << 8) + dataFile.read(); - } - else - { + } else { userImag.seek(bgoff + (left << 1)); pix2 = (userImag.read() << 8) + userImag.read(); } @@ -4361,9 +4260,7 @@ void GFX4d::Download(String Address, uint16_t port, String hfile, String Fname, #else http.begin(Address, port, hfile); #endif - } - else - { + } else { if (sha1 == "") { #if ARDUINO_ESP8266_GIT_VER > 0x2843a5ac @@ -4371,9 +4268,7 @@ void GFX4d::Download(String Address, uint16_t port, String hfile, String Fname, #else http.begin(Address); #endif - } - else - { + } else { #ifndef ESP32 #if ARDUINO_ESP8266_GIT_VER > 0x2843a5ac std::unique_ptrclient(new BearSSL::WiFiClientSecure); @@ -4451,22 +4346,16 @@ int16_t GFX4d::XYposToDegree(int curX, int curY) { adj = 1 ; deg = 90 ; - } - else - { + } else { adj = 2 ; deg = 180 ; } - } - else - { + } else { if (curX < 0) { deg = 0 ; adj = 2 ; - } - else - { + } else { deg = 270 ; adj = 1 ; } @@ -4476,9 +4365,7 @@ int16_t GFX4d::XYposToDegree(int curX, int curY) if (curX < curY) { adj &= 1 ; - } - else - { + } else { adj &= 2 ; swap(curX, curY) ; } @@ -4486,9 +4373,7 @@ int16_t GFX4d::XYposToDegree(int curX, int curY) if (adj) { deg += 90 - delta ; - } - else - { + } else { deg += delta ; } return deg ; @@ -4512,9 +4397,7 @@ void GFX4d::RGB2HLS() if (GFX4d_RED >= GFX4d_GREEN) { cMax = GFX4d_RED; - } - else - { + } else { cMax = GFX4d_GREEN; } if (GFX4d_BLUE >= cMax) @@ -4524,9 +4407,7 @@ void GFX4d::RGB2HLS() if (GFX4d_RED <= GFX4d_GREEN) { cMin = GFX4d_RED; - } - else - { + } else { cMin = GFX4d_GREEN; } if (GFX4d_BLUE <= cMin) @@ -4540,15 +4421,11 @@ void GFX4d::RGB2HLS() { s = 0; h = UNDEFINED; - } - else - { + } else { if (l <= (HLSMAX / 2)) { s = ((cMmM * HLSMAX) + (cMpM / 2) ) / cMpM; - } - else - { + } else { s = ((cMmM * HLSMAX) + ((RGBMAXm2 - cMpM) / 2)) / (RGBMAXm2 - cMpM); } Rdelta = (((cMax - GFX4d_RED) * HLSMAXd6) + (cMmM / 2)) / cMmM; @@ -4557,13 +4434,9 @@ void GFX4d::RGB2HLS() if (GFX4d_RED == cMax) { h = Bdelta - Gdelta ; - } - else if (GFX4d_GREEN == cMax) - { + } else if (GFX4d_GREEN == cMax){ h = HLSMAXd3 + Rdelta - Bdelta ; - } - else - { + } else { h = HLSMAXm2d3 + Gdelta - Rdelta; } if (h < 0) @@ -4583,25 +4456,17 @@ uint8_t GFX4d::hue_RGB(int Hin, int M1, int M2) if (Hin < 0) { Hin += HLSMAX ; - } - else if (Hin > HLSMAX) - { + } else if (Hin > HLSMAX){ Hin -= HLSMAX ; } if (Hin < HLSMAXd6) { Value = M1 + ( (M2 - M1) * Hin + HLSMAXd12) / HLSMAXd6 ; - } - else if (Hin < HLSMAXd2) - { + } else if (Hin < HLSMAXd2){ Value = M2 ; - } - else if (Hin < HLSMAXm2d3) - { + } else if (Hin < HLSMAXm2d3){ Value = M1 + ((M2 - M1) * (HLSMAXm2d3 - Hin) + HLSMAXd12) / HLSMAXd6 ; - } - else - { + } else { Value = M1 ; } return Value ; @@ -4615,15 +4480,11 @@ void GFX4d::HLS2RGB(int H, int L, int S) GFX4d_RED = L ; GFX4d_GREEN = L ; GFX4d_BLUE = L ; - } - else - { + } else { if (L <= HLSMAXd2) { M2 = (L * (HLSMAX + S) + HLSMAXd2) / HLSMAX ; - } - else - { + } else { M2 = L + S - ((L * S + HLSMAXd2) / HLSMAX) ; } M1 = 2 * L - M2 ; @@ -4652,22 +4513,21 @@ void GFX4d::Close4dGFX() void GFX4d::WrGRAMs16232(uint16_t *data, uint16_t l) { uint32_t tdw; - SPI.beginTransaction(spiSettingsD); - digitalWrite(_dc, HIGH); - digitalWrite(_cs, LOW); + DISP_SPI_BEGINT; + DISP_DC_HI; + DISP_CS_LO; while (l) { tdw = (*data++ << 16) + *data++; l -= 2; - SPI.write32(tdw); + DISP_SPI_WRITE32(tdw); } - if (l < 0)SPI.write16(*data++); - digitalWrite(_cs, HIGH); - SPI.endTransaction(); + if (l < 0) DISP_SPI_WRITE16(*data++); + DISP_CS_HI; + DISP_SPI_ENDT; } - void GFX4d::WrGRAMs16232NT(uint16_t *data, uint16_t l) { uint32_t tdw; @@ -4675,33 +4535,33 @@ void GFX4d::WrGRAMs16232NT(uint16_t *data, uint16_t l) { tdw = (*data++ << 16) + *data++; l -= 2; - SPI.write32(tdw); + DISP_SPI_WRITE32(tdw); } - if (l < 0)SPI.write16(*data++); + if (l < 0) DISP_SPI_WRITE16(*data++); } void GFX4d::WrGRAMend() { - digitalWrite(_cs, HIGH); - SPI.endTransaction(); + DISP_CS_HI; + DISP_SPI_ENDT; } void GFX4d::WrGRAMstart() { - SPI.beginTransaction(spiSettingsD); - digitalWrite(_dc, HIGH); - digitalWrite(_cs, LOW); + DISP_SPI_BEGINT; + DISP_DC_HI; + DISP_CS_LO; } void GFX4d::WrGRAM16232(uint16_t mcolor, int32_t l) { uint32_t tdw; - SPI.beginTransaction(spiSettingsD); - digitalWrite(_dc, HIGH); - digitalWrite(_cs, LOW); + DISP_SPI_BEGINT; + DISP_DC_HI; + DISP_CS_LO; if (l == 1) { - SPI.write16(mcolor); + DISP_SPI_WRITE16(mcolor); } else { @@ -4709,12 +4569,12 @@ void GFX4d::WrGRAM16232(uint16_t mcolor, int32_t l) while (l > 0) { l -= 2; - SPI.write32(tdw); + DISP_SPI_WRITE32(tdw); } - if (l < 0)SPI.write16(mcolor); + if (l < 0)DISP_SPI_WRITE16(mcolor); } - digitalWrite(_cs, HIGH); - SPI.endTransaction(); + DISP_CS_HI; + DISP_SPI_ENDT; } uint8_t GFX4d::getFontData(uint8_t fntnum, uint16_t val) @@ -4726,6 +4586,7 @@ uint8_t GFX4d::getFontData(uint8_t fntnum, uint16_t val) int16_t GFX4d::ImageTouchedAuto(int UpdateImages) { + if(!(opgfx)) return -1; int itouched; bool shifted = false; if ((shift || caps) && UpdateImages == KEYPAD) shifted = true; @@ -4750,9 +4611,7 @@ int16_t GFX4d::ImageTouchedAuto(int UpdateImages) if (gciobjframes[itouched] >= 1 + butcntrl) { UserImages(itouched, 1 + butcntrl) ; - } - else - { + } else { UserImages(itouched, 1) ; } } @@ -4765,9 +4624,7 @@ int16_t GFX4d::ImageTouchedAuto(int UpdateImages) if (UpdateImages == DRAW_UPDOWN && gciobjframes[pressed] >= butcntrl) { UserImages(pressed, butcntrl) ; - } - else - { + } else { UserImages(pressed, 0) ; } temppressed = pressed; @@ -4779,9 +4636,7 @@ int16_t GFX4d::ImageTouchedAuto(int UpdateImages) if (UpdateImages == DRAW_UPDOWN && gciobjframes[pressed] >= butcntrl) { UserImages(pressed, butcntrl) ; - } - else - { + } else { UserImages(pressed, 0) ; } temppressed = pressed; @@ -4792,11 +4647,10 @@ int16_t GFX4d::ImageTouchedAuto(int UpdateImages) { return -1; } - } - else - { + } else { return -1; } + return -1; } void GFX4d::FontStyle(uint8_t ctyp) @@ -4832,6 +4686,7 @@ uint16_t GFX4d::GetSliderValue(uint16_t ui, uint8_t axis, uint16_t uiv, uint16_t wpos = (gciobjframes[ui] - 1) - (gciobjframes[ui] - 1) * wpos / (wsiz - maxg) ; // max-min - (max-min) * posn / (height-17) return wpos; } + return wpos; } int GFX4d::DecodeKeypad(int kpad, int kpress, byte *kbks, int8_t *kbck) @@ -4996,9 +4851,7 @@ void GFX4d::SetSprite(int num, bool active, int x, int y, uint16_t bscolor, uint { tsx = spriteLast[lxy]; tsx1 = x + spriteList[dxy + SPRITE_WIDTH]; - } - else - { + } else { tsx1 = spriteLast[lxy] + spriteList[dxy + SPRITE_WIDTH]; tsx = x; } @@ -5006,15 +4859,11 @@ void GFX4d::SetSprite(int num, bool active, int x, int y, uint16_t bscolor, uint { tsy = spriteLast[lxy + 1]; tsy1 = y + spriteList[dxy + SPRITE_HEIGHT]; - } - else - { + } else { tsy1 = spriteLast[lxy + 1] + spriteList[dxy + SPRITE_HEIGHT]; tsy = y; } - } - else - { + } else { tsx = dsx; tsy = dsy; tsx1 = dsx + spriteList[dxy + SPRITE_WIDTH]; @@ -5071,7 +4920,7 @@ void GFX4d::UpdateSprites(uint16_t bscolor, uint16_t * sdata) uint16_t cscolor; uint16_t tscolor; #ifndef ESP8266 - uint16_t bufsp[spriteArea[2] + 1]; + uint16_t bufsp[spriteArea[2] + 2]; uint16_t count; #endif int spriteAPos; @@ -5144,19 +4993,19 @@ void GFX4d::UpdateSprites(uint16_t bscolor, uint16_t * sdata) if (tog == 0) tdw = wscolor << 16; if (tog == 1) { - SPI.write32(tdw + wscolor); + SPI.write32(tdw | wscolor); } tog ^= 1; } } - if (tog == 1) SPI.write16(tdw >> 16); + if (tog == 1) DISP_SPI_WRITE16(tdw >> 16, true); WrGRAMend(); yield(); #else bufsp[count] = wscolor; count ++; } - SPI.writePixels(bufsp, count * 2); + SPI.writePixels(bufsp, count * 2); } WrGRAMend(); #endif @@ -5214,9 +5063,7 @@ uint16_t GFX4d::SpriteGetPixel(int snum, int xo, int yo, uint16_t tcolor, uint16 if (snum < 0) { chks = 0; chke = numSprites; - } - else - { + } else { chks = snum; chke = snum + 1; } for (int chk = chks; chk < chke; chk ++) @@ -5321,11 +5168,11 @@ void GFX4d::SetMaxNumberSprites(uint16_t snos) msprites = snos >> 1; } -uint16_t GFX4d::Grad(int raisSunk, int state, int glev, int h1, int pos, uint16_t colToAdj) +int GFX4d::Grad(int raisSunk, int state, int glev, int h1, int pos, int colToAdj) { int CTALevel, BflatMin, BflatMax; - uint16_t retcolor; - int8_t CTAr, CTAg, CTAb; + int retcolor; + int CTAr, CTAg, CTAb; if (glev > 63) glev = 63; pos -= (h1 >> 1); if (glev == -1) @@ -5341,24 +5188,29 @@ uint16_t GFX4d::Grad(int raisSunk, int state, int glev, int h1, int pos, uint16_ CTAr = (colToAdj >> 11) - state; CTAg = ((colToAdj >> 6) & 0x001F) - state; CTAb = (colToAdj & 0x001F) - state; - if (!(raisSunk)) CTALevel = 0 - CTALevel; - CTAr += CTALevel; CTAg += CTALevel; CTAb += CTALevel; - CTAr = (CTAr > 0) * CTAr; CTAg = (CTAg > 0) * CTAg; CTAb = (CTAb > 0) * CTAb; - if (CTAr > 31) CTAr = 31; - if (CTAg > 31) CTAg = 31; - if (CTAb > 31) CTAb = 31; + if(raisSunk == 1){ + CTAr += CTALevel; CTAg += CTALevel; CTAb += CTALevel; + } else { + CTAr -= CTALevel; CTAg -= CTALevel; CTAb -= CTALevel; + } + if(CTAr > 31) CTAr = 31; + if(CTAg > 31) CTAg = 31; + if(CTAb > 31) CTAb = 31; + if(CTAr < 0) CTAr = 0; + if(CTAg < 0) CTAg = 0; + if(CTAb < 0) CTAb = 0; retcolor = (CTAr << 11) | (CTAg << 6) | CTAb; return retcolor; } -void GFX4d::gradientShape(int ow, int xPos, int yPos, int w, int h, int r1, int r2, int r3, int r4, int darken, uint16_t color, int sr1, int gl1, uint16_t colorD, int sr3, int gl3, int gtb) +void GFX4d::gradientShape(int ow, int xPos, int yPos, int w, int h, int r1, int r2, int r3, int r4, int darken, int color, int sr1, int gl1, int colorD, int sr3, int gl3, int gtb) { int arcn, xc1, xc2, xc3, xc4, yc1, mi, cDraw, xgxl, xgxr, tcount, tgss1, tgss2, drgs, yag, lastarc, lastow, lachk; int c, xx, yy, x, y, c1, xx1, yy1, xin, y1, lasty1, sCxPos, owMin, owMax, mirror, dbl1, dbl2, gradofs, hmd, gof, owSet, rtSide; int lasty, incy, incy1, maxR, mh, mw, xa, xb, xc, ya, radsMinOw, txPos, tyPos, cErase, tow, tsr1, tsr3, tgl3, tdarken, tgl1; int fill, yb, Lfill, Rfill, Ldw, Rdw, Lw, Rw, mfill, start, fin, fCmp; - uint16_t hm, tcolorD, tcolor, tgrad; + int hm, tcolorD, tcolor, tgrad; radsGS[0] = r1; radsGS[1] = r2; radsGS[2] = r3; radsGS[3] = r4; mh = max(radsGS[0] + radsGS[2], radsGS[1] + radsGS[3]); mw = max(radsGS[0] + radsGS[1], radsGS[2] + radsGS[3]); @@ -5395,9 +5247,7 @@ void GFX4d::gradientShape(int ow, int xPos, int yPos, int w, int h, int r1, int if (!(cErase)) { txPos = xPos; tyPos = yPos; xPos = GSEraseXpos; yPos = GSEraseYpos; tow = ow; ow = 0; tcolor = color; color = GSEraseColour; tcolorD = colorD; colorD = GSEraseHeight; tsr1 = sr1; sr1 = GSERaisedSunk; tgl1 = gl1; gl1 = GSEraseGLevel; tsr3 = sr3; sr3 = -2; tgl3 = gl3; gl3 = GSErasePHeight; /*th := h; h := GSEraseHeight;*/ tdarken = darken; darken = 0; - } - else - { + } else { xPos = txPos; yPos = tyPos; ow = tow; colorD = tcolorD; sr3 = tsr3; gl3 = tgl3; sr1 = tsr1; gl1 = tgl1; color = tcolor; darken = tdarken; } } @@ -5454,9 +5304,7 @@ void GFX4d::gradientShape(int ow, int xPos, int yPos, int w, int h, int r1, int { xc3 = sCxPos + xa; xc4 = sCxPos + xb; if (GSCropArcLeft > 0 && xc2 > xc3) xc3 = xc2; - } - else - { + } else { yc1 = yPos + ypGSaPos[1] - cDraw; xc2 = sCxPos + xb; xc1 = sCxPos + xa; swap(xc3, xc4); } @@ -5474,9 +5322,7 @@ void GFX4d::gradientShape(int ow, int xPos, int yPos, int w, int h, int r1, int if (dbl2) { xc3 = sCxPos + xa; xc4 = sCxPos + xb; - } - else - { + } else { yc1 = yPos + ypGSaPos[3] + cDraw; xc2 = sCxPos + xb; xc1 = sCxPos + xa; swap(xc3, xc4); } @@ -5492,9 +5338,7 @@ void GFX4d::gradientShape(int ow, int xPos, int yPos, int w, int h, int r1, int if (sr3 == -2) { hm = colorD; gradofs = gl3; - } - else - { + } else { hm = h; gradofs = 0; } if (gtb) @@ -5503,9 +5347,7 @@ void GFX4d::gradientShape(int ow, int xPos, int yPos, int w, int h, int r1, int if (gtb == 2) gof = h; gradofs = h >> 1; hm += (h >> 1); - } - else - { + } else { hmd = h; } mi = 0; @@ -5526,15 +5368,11 @@ void GFX4d::gradientShape(int ow, int xPos, int yPos, int w, int h, int r1, int if (!(owSet)) { if ((xc1 < xc4) || (rtSide && xc1 > xc4)) HlineD(yc1, xc1, xc4, tgrad); - } - else - { + } else { if (xc1 < xc2) HlineD(yc1, xc1, xc2, tgrad); if (xc3 < xc4) HlineD(yc1, xc3, xc4, tgrad); } - } - else - { + } else { if (xc1 < xc4) HlineD(yc1, xc1, xc4, tgrad); } if (GSSsxpos != -9999) @@ -5546,9 +5384,7 @@ void GFX4d::gradientShape(int ow, int xPos, int yPos, int w, int h, int r1, int if (xc1 > xc4) { xgxr = xc4; drgs = 1; - } - else - { + } else { if (xgxl < xc1) { xgxr = xc1 - 1; drgs = 1; @@ -5561,9 +5397,7 @@ void GFX4d::gradientShape(int ow, int xPos, int yPos, int w, int h, int r1, int if (xc1 > xc4) { xgxr = xc1; drgs = 1; - } - else - { + } else { if (xgxl > xc4) { xgxr = xc4 + 1; drgs = 1; @@ -5572,9 +5406,7 @@ void GFX4d::gradientShape(int ow, int xPos, int yPos, int w, int h, int r1, int } if (drgs) HlineD(yc1, xgxl, xgxr, GSSBGColor); } - } - else - { + } else { if (GSSsxpos != -9999) { if (GSCropArcLeft > -1) @@ -5598,7 +5430,7 @@ void GFX4d::gradientShape(int ow, int xPos, int yPos, int w, int h, int r1, int } arcn ++; } - if (!((radsGS[0] == radsGS[1] && radsGS[2] == radsGS[3]) && (radsGS[0] == radsGS[2] && radsGS[0] + radsGS[2] >= h - 1))) + if (!((radsGS[0] == radsGS[1] && radsGS[2] == radsGS[3]) && (radsGS[0] == radsGS[2] && (radsGS[0] + radsGS[2]) >= (h - 1)))) { fin = h; if (radsGS[0] == radsGS[1]) start = radsGS[0]; @@ -5625,14 +5457,10 @@ void GFX4d::gradientShape(int ow, int xPos, int yPos, int w, int h, int r1, int if (fCmp && Lfill <= Ldw) HlineD(yb, Lfill, Lfill + Lw, tgrad); if (fCmp && sr3 > -1) HlineD(yb, Lfill + Lw + 1, Rfill - Rw, Grad(sr3, darken, gl3, hm, mfill, colorD)); if (fCmp && Rfill >= Rdw) HlineD(yb, Rfill - Rw, Rfill, tgrad); - } - else - { + } else { if (fCmp)HlineD(yb, Lfill, Rfill, tgrad); } - } - else - { + } else { if (fCmp)HlineD(yb, Lfill, Rfill, tgrad); } fill ++; @@ -5644,8 +5472,72 @@ void GFX4d::gradientShape(int ow, int xPos, int yPos, int w, int h, int r1, int yield(); } -void GFX4d::HlineD(int y, int x1, int x2, uint16_t color) +void GFX4d::HlineD(int y, int x1, int x2, int color) { if (x1 > x2) swap(x1, x2); Hline(x1, y, x2 - x1 + 1, color); } + + void GFX4d::GradTriangleFilled(int x0, int y0, int x1, int y1, int x2, int y2, int color, int ncCol, int h, int ypos, int lev, int erase){ + int a, b, y, last; + if (y0 > y1){ + swap(y0, y1); swap(x0, x1); + } + if (y1 > y2){ + swap(y2, y1); swap(x2, x1); + } + if (y0 > y1){ + swap(y0, y1); swap(x0, x1); + } + if(y0 == y2){ + a = x0; b = x0; + if(x1 < a){ + a = x1; + } else if (x1 > b){ + b = x1; + } + if(x2 < a){ + a = x2; + } else if (x2 > b){ + b = x2; + } + if(erase) color = Grad(0, 0, lev, h, y0-ypos, ncCol); + HlineD(y0, a, b, color); + return; + } + int dx01, dy01, dx02, dy02, dx12, dy12, sa, sb, t1, t2, t3; + dx01 = x1 - x0; + dy01 = y1 - y0; + dx02 = x2 - x0; + dy02 = y2 - y0; + dx12 = x2 - x1; + dy12 = y2 - y1; + sa = 0; + sb = 0; + if(y1 == y2){ + last = y1; // Include y1 scanline + } else { + last = y1-1; // Skip it + } + if(last < 0)last = 0; + for(y=y0; y<=last; y++){ + t1 = x0; t2 = dy01; t3 = dx01; + a = t1 + sa / t2; + b = x0 + sb / dy02; + sa += t3; + sb += dx02; + if(erase) color = Grad(0, 0, lev, h, y-ypos, ncCol); + HlineD(y, a, b, color); + } + sa = dx12 * (y - y1); + sb = dx02 * (y - y0); + for(y = y; y<=y2; y++){ + t1 = x1; t2 = dy12; t3 = dx12; + a = t1 + sa / t2; + b = x0 + sb / dy02; + sa += t3; + sb += dx02; + if(erase) color = Grad(0, 0, lev, h, y-ypos, ncCol); + HlineD(y, a, b, color); + } +} diff --git a/src/GFX4d.h b/src/GFX4d.h index e0ba46f..a8a2083 100644 --- a/src/GFX4d.h +++ b/src/GFX4d.h @@ -1,481 +1,520 @@ /*************************************************************************** * * - 4D Systems GFX4d Library +* 4D Systems GFX4d Library * * * - Date: 6th October 2021 +* Date: 13th Nov 2022 * * * - Description: Provides Graphics, Touch Control and SD Card functions - for 4D Systems Gen4 IoD range of intelligent displays. +* Description: Provides Graphics, Touch Control and SD Card functions * +* for 4D Systems Gen4 IoD range of intelligent displays. * * * - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 +* GNU LESSER GENERAL PUBLIC LICENSE * +* Version 3, 29 June 2007 * * * - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. +* Copyright (C) 2007 Free Software Foundation, Inc. * +* Everyone is permitted to copy and distribute verbatim copies * +* of this license document, but changing it is not allowed. * * * * * - This version of the GNU Lesser General Public License incorporates - the terms and conditions of version 3 of the GNU General Public - License, supplemented by the additional permissions listed below. +* This version of the GNU Lesser General Public License incorporates * +* the terms and conditions of version 3 of the GNU General Public * +* License, supplemented by the additional permissions listed below. * * * - 0. Additional Definitions. +* 0. Additional Definitions. * * * - As used herein, "this License" refers to version 3 of the GNU Lesser - General Public License, and the "GNU GPL" refers to version 3 of the GNU - General Public License. +* As used herein, "this License" refers to version 3 of the GNU Lesser * +* General Public License, and the "GNU GPL" refers to version 3 of the GNU * +* General Public License. * * * - "The Library" refers to a covered work governed by this License, - other than an Application or a Combined Work as defined below. +* "The Library" refers to a covered work governed by this License, * +* other than an Application or a Combined Work as defined below. * * * - An "Application" is any work that makes use of an interface provided - by the Library, but which is not otherwise based on the Library. - Defining a subclass of a class defined by the Library is deemed a mode - of using an interface provided by the Library. +* An "Application" is any work that makes use of an interface provided * +* by the Library, but which is not otherwise based on the Library. * +* Defining a subclass of a class defined by the Library is deemed a mode * +* of using an interface provided by the Library. * * * - A "Combined Work" is a work produced by combining or linking an - Application with the Library. The particular version of the Library - with which the Combined Work was made is also called the "Linked - Version". +* A "Combined Work" is a work produced by combining or linking an * +* Application with the Library. The particular version of the Library * +* with which the Combined Work was made is also called the "Linked * +* Version". * * * - The "Minimal Corresponding Source" for a Combined Work means the - Corresponding Source for the Combined Work, excluding any source code - for portions of the Combined Work that, considered in isolation, are - based on the Application, and not on the Linked Version. +* The "Minimal Corresponding Source" for a Combined Work means the * +* Corresponding Source for the Combined Work, excluding any source code * +* for portions of the Combined Work that, considered in isolation, are * +* based on the Application, and not on the Linked Version. * * * - The "Corresponding Application Code" for a Combined Work means the - object code and/or source code for the Application, including any data - and utility programs needed for reproducing the Combined Work from the - Application, but excluding the System Libraries of the Combined Work. +* The "Corresponding Application Code" for a Combined Work means the * +* object code and/or source code for the Application, including any data * +* and utility programs needed for reproducing the Combined Work from the * +* Application, but excluding the System Libraries of the Combined Work. * * * - 1. Exception to Section 3 of the GNU GPL. +* 1. Exception to Section 3 of the GNU GPL. * * * - You may convey a covered work under sections 3 and 4 of this License - without being bound by section 3 of the GNU GPL. +* You may convey a covered work under sections 3 and 4 of this License * +* without being bound by section 3 of the GNU GPL. * * * - 2. Conveying Modified Versions. +* 2. Conveying Modified Versions. * * * - If you modify a copy of the Library, and, in your modifications, a - facility refers to a function or data to be supplied by an Application - that uses the facility (other than as an argument passed when the - facility is invoked), then you may convey a copy of the modified - version: +* If you modify a copy of the Library, and, in your modifications, a * +* facility refers to a function or data to be supplied by an Application * +* that uses the facility (other than as an argument passed when the * +* facility is invoked), then you may convey a copy of the modified * +* version: * * * - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or +* a) under this License, provided that you make a good faith effort to * +* ensure that, in the event an Application does not supply the * +* function or data, the facility still operates, and performs * +* whatever part of its purpose remains meaningful, or * * * - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. +* b) under the GNU GPL, with none of the additional permissions of * +* this License applicable to that copy. * * * - 3. Object Code Incorporating Material from Library Header Files. +* 3. Object Code Incorporating Material from Library Header Files. * * * - The object code form of an Application may incorporate material from - a header file that is part of the Library. You may convey such object - code under terms of your choice, provided that, if the incorporated - material is not limited to numerical parameters, data structure - layouts and accessors, or small macros, inline functions and templates - (ten or fewer lines in length), you do both of the following: +* The object code form of an Application may incorporate material from * +* a header file that is part of the Library. You may convey such object * +* code under terms of your choice, provided that, if the incorporated * +* material is not limited to numerical parameters, data structure * +* layouts and accessors, or small macros, inline functions and templates * +* (ten or fewer lines in length), you do both of the following: * * * - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. +* a) Give prominent notice with each copy of the object code that the * +* Library is used in it and that the Library and its use are * +* covered by this License. * * * - b) Accompany the object code with a copy of the GNU GPL and this - license document. +* b) Accompany the object code with a copy of the GNU GPL and this * +* license document. * * * - 4. Combined Works. +* 4. Combined Works. * * * - You may convey a Combined Work under terms of your choice that, - taken together, effectively do not restrict modification of the - portions of the Library contained in the Combined Work and reverse - engineering for debugging such modifications, if you also do each of - the following: +* You may convey a Combined Work under terms of your choice that, * +* taken together, effectively do not restrict modification of the * +* portions of the Library contained in the Combined Work and reverse * +* engineering for debugging such modifications, if you also do each of * +* the following: * * * - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. +* a) Give prominent notice with each copy of the Combined Work that * +* the Library is used in it and that the Library and its use are * +* covered by this License. * * * - b) Accompany the Combined Work with a copy of the GNU GPL and this - license document. +* b) Accompany the Combined Work with a copy of the GNU GPL and this * +* license document. * * * - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. +* c) For a Combined Work that displays copyright notices during * +* execution, include the copyright notice for the Library among * +* these notices, as well as a reference directing the user to the * +* copies of the GNU GPL and this license document. * * * - d) Do one of the following: +* d) Do one of the following: * * * - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. +* 0) Convey the Minimal Corresponding Source under the terms of this * +* License, and the Corresponding Application Code in a form * +* suitable for, and under terms that permit, the user to * +* recombine or relink the Application with a modified version of * +* the Linked Version to produce a modified Combined Work, in the * +* manner specified by section 6 of the GNU GPL for conveying * +* Corresponding Source. * * * - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. +* 1) Use a suitable shared library mechanism for linking with the * +* Library. A suitable mechanism is one that (a) uses at run time * +* a copy of the Library already present on the user's computer * +* system, and (b) will operate properly with a modified version * +* of the Library that is interface-compatible with the Linked * +* Version. * * * - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) +* e) Provide Installation Information, but only if you would otherwise * +* be required to provide such information under section 6 of the * +* GNU GPL, and only to the extent that such information is * +* necessary to install and execute a modified version of the * +* Combined Work produced by recombining or relinking the * +* Application with a modified version of the Linked Version. (If * +* you use option 4d0, the Installation Information must accompany * +* the Minimal Corresponding Source and Corresponding Application * +* Code. If you use option 4d1, you must provide the Installation * +* Information in the manner specified by section 6 of the GNU GPL * +* for conveying Corresponding Source.) * * * - 5. Combined Libraries. +* 5. Combined Libraries. * * * - You may place library facilities that are a work based on the - Library side by side in a single library together with other library - facilities that are not Applications and are not covered by this - License, and convey such a combined library under terms of your - choice, if you do both of the following: +* You may place library facilities that are a work based on the * +* Library side by side in a single library together with other library * +* facilities that are not Applications and are not covered by this * +* License, and convey such a combined library under terms of your * +* choice, if you do both of the following: * * * - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. +* a) Accompany the combined library with a copy of the same work based * +* on the Library, uncombined with any other library facilities, * +* conveyed under the terms of this License. * * * - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. +* b) Give prominent notice with the combined library that part of it * +* is a work based on the Library, and explaining where to find the * +* accompanying uncombined form of the same work. * * * - 6. Revised Versions of the GNU Lesser General Public License. +* 6. Revised Versions of the GNU Lesser General Public License. * * * - The Free Software Foundation may publish revised and/or new versions - of the GNU Lesser General Public License from time to time. Such new - versions will be similar in spirit to the present version, but may - differ in detail to address new problems or concerns. +* The Free Software Foundation may publish revised and/or new versions * +* of the GNU Lesser General Public License from time to time. Such new * +* versions will be similar in spirit to the present version, but may * +* differ in detail to address new problems or concerns. * * * - Each version is given a distinguishing version number. If the - Library as you received it specifies that a certain numbered version - of the GNU Lesser General Public License "or any later version" - applies to it, you have the option of following the terms and - conditions either of that published version or of any later version - published by the Free Software Foundation. If the Library as you - received it does not specify a version number of the GNU Lesser - General Public License, you may choose any version of the GNU Lesser - General Public License ever published by the Free Software Foundation. +* Each version is given a distinguishing version number. If the * +* Library as you received it specifies that a certain numbered version * +* of the GNU Lesser General Public License "or any later version" * +* applies to it, you have the option of following the terms and * +* conditions either of that published version or of any later version * +* published by the Free Software Foundation. If the Library as you * +* received it does not specify a version number of the GNU Lesser * +* General Public License, you may choose any version of the GNU Lesser * +* General Public License ever published by the Free Software Foundation. * * * - If the Library as you received it specifies that a proxy can decide - whether future versions of the GNU Lesser General Public License shall - apply, that proxy's public statement of acceptance of any version is - permanent authorization for you to choose that version for the - Library. +* If the Library as you received it specifies that a proxy can decide * +* whether future versions of the GNU Lesser General Public License shall * +* apply, that proxy's public statement of acceptance of any version is * +* permanent authorization for you to choose that version for the * +* Library. * * * ***************************************************************************/ #ifndef _GFX4d_H #define _GFX4d_H + // #define USE_FS + +#define IMAGE_NOT_TOUCHED 255 +//#define IMAGE_NOT_TOUCHED -1 +//#define IMAGE_NOT_TOUCHED MAX_WIDGETS+1 + #define IPS_DISPLAY 1 #define TN_DISPLAY 0 #define ST7789_DISPLAY 2 +#define ST240x240 4 +#define ILI9488_DISPLAY 8 #include "Arduino.h" #include "Print.h" +#include + #ifndef USE_FS - //#if ARDUINO_ESP8266_GIT_VER > 0x2843a5ac - // #include "SdFat.h" - // #include "sdios.h" - //#else - #include - //#endif + #include #else -//#define FS_NO_GLOBALS //allow spiffs to coexist with SD card, define BEFORE including FS.h -#include //spiff file system + #include //spiff file system #endif - #define SD_CONFIG SdSpiConfig(5, SHARED_SPI, SPI_CLOCK) -#define MAX_WIDGETS 400 +//#define MAX_WIDGETS 300 #ifdef USING_WS4_GCIOBJECTS -#define GCIOBJSEN + #define GCIOBJSEN #endif -#define GFX4d_TFTWIDTH 240 -#define GFX4d_TFTHEIGHT 320 +#ifdef ESP32 + #define DISP_CS_HI GPIO.out1_w1ts.val = ((uint32_t)1 << (_cs - 32)); + #define DISP_CS_LO GPIO.out1_w1tc.val = ((uint32_t)1 << (_cs - 32)); + //#define TOUCH_CS_HI GPIO.out1_w1ts.val = (1 << (_tcs - 32)); + //#define TOUCH_CS_LO GPIO.out1_w1tc.val = (1 << (_tcs - 32)); + #define TOUCH_CS_HI GPIO.out_w1ts=(1<<_tcs) + #define TOUCH_CS_LO GPIO.out_w1tc=(1<<_tcs) + #define DISP_DC_HI GPIO.out_w1ts=((uint32_t)1<<_dc) + #define DISP_DC_LO GPIO.out_w1tc=((uint32_t)1<<_dc) + #define SD_BEGIN SD.begin(_sd,SPI,79000000) + #define ESP8266WiFi.h Wifi.h +#else + #define DISP_CS_HI GPOS=(1<<_cs) + #define DISP_CS_LO GPOC=(1<<_cs) + #define TOUCH_CS_HI GPOS=(1<<_tcs) + #define TOUCH_CS_LO GPOC=(1<<_tcs) + #define DISP_DC_HI GPOS=(1<<_dc) + #define DISP_DC_LO GPOC=(1<<_dc) + #if ARDUINO_ESP8266_GIT_VER > 0x2843a5ac + #define SD_BEGIN SD.begin(_sd,SD_SCK_MHZ(79)) + #else + #define SD_BEGIN SD.begin(_sd,spiSettings) + #endif +#endif +#define DISP_SPI_BEGINT SPI.beginTransaction(spiSettingsD) +#define DISP_SPI_BEGINTT SPI.beginTransaction(spiSettingsT) +#define DISP_SPI_ENDT SPI.endTransaction() +#define DISP_SPI_WRITE SPI.write +#define DISP_SPI_WRITE16 SPI.write16 +#define DISP_SPI_WRITE32 SPI.write32 +#define DISP_SPI_WRITEBYTES SPI.writeBytes +#define DISP_SPI_TRANSFER SPI.transfer +#define DISP_SPI_TRANSFER16 SPI.transfer16 -#define GFX4d_NOP 0x00 -#define GFX4d_SWRESET 0x01 -#define GFX4d_RDDID 0x04 -#define GFX4d_RDDST 0x09 +#define GFX4d_NOP 0x00 +#define GFX4d_SWRESET 0x01 +#define GFX4d_RDDID 0x04 +#define GFX4d_RDDST 0x09 -#define GFX4d_SLPIN 0x10 -#define GFX4d_SLPOUT 0x11 -#define GFX4d_PTLON 0x12 -#define GFX4d_NORON 0x13 +#define GFX4d_SLPIN 0x10 +#define GFX4d_SLPOUT 0x11 +#define GFX4d_PTLON 0x12 +#define GFX4d_NORON 0x13 -#define GFX4d_RDMODE 0x0A -#define GFX4d_RDMADCTL 0x0B -#define GFX4d_RDPIXFMT 0x0C -#define GFX4d_RDIMGFMT 0x0D -#define GFX4d_RDSELFDIAG 0x0F +#define GFX4d_RDMODE 0x0A +#define GFX4d_RDMADCTL 0x0B +#define GFX4d_RDPIXFMT 0x0C +#define GFX4d_RDIMGFMT 0x0D +#define GFX4d_RDSELFDIAG 0x0F -#define GFX4d_INVOFF 0x20 -#define GFX4d_INVON 0x21 -#define GFX4d_GAMMASET 0x26 -#define GFX4d_DISPOFF 0x28 -#define GFX4d_DISPON 0x29 +#define GFX4d_INVOFF 0x20 +#define GFX4d_INVON 0x21 +#define GFX4d_GAMMASET 0x26 +#define GFX4d_DISPOFF 0x28 +#define GFX4d_DISPON 0x29 -#define GFX4d_CASET 0x2A -#define GFX4d_PASET 0x2B -#define GFX4d_RAMWR 0x2C -#define GFX4d_RAMRD 0x2E +#define GFX4d_CASET 0x2A +#define GFX4d_PASET 0x2B +#define GFX4d_RAMWR 0x2C +#define GFX4d_RAMRD 0x2E -#define GFX4d_PTLAR 0x30 -#define GFX4d_VSCRDEF 0x33 -#define GFX4d_MADCTL 0x36 -#define GFX4d_VSCRSADD 0x37 -#define GFX4d_PIXFMT 0x3A +#define GFX4d_PTLAR 0x30 +#define GFX4d_VSCRDEF 0x33 +#define GFX4d_MADCTL 0x36 +#define GFX4d_VSCRSADD 0x37 +#define GFX4d_PIXFMT 0x3A -#define GFX4d_FRMCTR1 0xB1 -#define GFX4d_FRMCTR2 0xB2 -#define GFX4d_FRMCTR3 0xB3 -#define GFX4d_INVCTR 0xB4 -#define GFX4d_DFUNCTR 0xB6 +#define GFX4d_FRMCTR1 0xB1 +#define GFX4d_FRMCTR2 0xB2 +#define GFX4d_FRMCTR3 0xB3 +#define GFX4d_INVCTR 0xB4 +#define GFX4d_DFUNCTR 0xB6 -#define GFX4d_PWCTR1 0xC0 -#define GFX4d_PWCTR2 0xC1 -#define GFX4d_PWCTR3 0xC2 -#define GFX4d_PWCTR4 0xC3 -#define GFX4d_PWCTR5 0xC4 -#define GFX4d_VMCTR1 0xC5 -#define GFX4d_VMCTR2 0xC7 +#define GFX4d_PWCTR1 0xC0 +#define GFX4d_PWCTR2 0xC1 +#define GFX4d_PWCTR3 0xC2 +#define GFX4d_PWCTR4 0xC3 +#define GFX4d_PWCTR5 0xC4 +#define GFX4d_VMCTR1 0xC5 +#define GFX4d_VMCTR2 0xC7 -#define GFX4d_RDID1 0xDA -#define GFX4d_RDID2 0xDB -#define GFX4d_RDID3 0xDC -#define GFX4d_RDID4 0xDD +#define GFX4d_RDID1 0xDA +#define GFX4d_RDID2 0xDB +#define GFX4d_RDID3 0xDC +#define GFX4d_RDID4 0xDD -#define GFX4d_GMCTRP1 0xE0 -#define GFX4d_GMCTRN1 0xE1 +#define GFX4d_GMCTRP1 0xE0 +#define GFX4d_GMCTRN1 0xE1 -#define LANDSCAPE 0 -#define LANDSCAPE_R 1 -#define PORTRAIT 2 -#define PORTRAIT_R 3 -#define SOLID 0 -#define DOTMATRIXROUND 1 -#define DOTMATRIXLED 3 -#define DOTMATRIXSQUARE 4 -#define DOTMATRIXFADE 5 -#define SYSTEM 1 -#define FONT1 1 -#define FONT2 2 -#define Pressed 1 -#define Released 0 -#define SLIDER_RAISED 0 -#define SLIDER_SUNKEN 1 -#define NOTOUCH 0 -#define T_SENSE 10 -#define TOUCH_PRESSED 1 -#define TOUCH_RELEASED 2 -#define TOUCH_STATUS 0 -#define TOUCH_GETX 1 -#define TOUCH_GETY 2 -#define KEYPAD 3 -#define DRAW_UPDOWN 2 -#define DRAW_DOWNONLY 1 -#define DRAW_NONE 0 -#define MAX_ARCSIZE 200 -#define GRADIENT_RAISED 0 -#define GRADIENT_SUNKEN 1 -#define GRADIENT_FLATTEN -1 -#define GRADIENT_HIGH 63 -#define GRADIENT_MEDIUM 32 -#define GRADIENT_LOW 24 -#define GRADIENT_OFF 0 -#define GRADIENT_DARKEN0 0 -#define GRADIENT_DARKEN1 1 -#define GRADIENT_DARKEN2 2 -#define BUTTON_SQUARE 0 -#define BUTTON_ROUNDED 1 -#define BUTTON_CIRCULAR 2 -#define BUTTON_CIRCULAR_TOP 3 +#define IMAGE_XPOS 1 +#define IMAGE_YPOS 2 +#define IMAGE_WIDTH 4 +#define IMAGE_HEIGHT 8 +#define IMAGE_VALUE 16 +#define LANDSCAPE 0 +#define LANDSCAPE_R 1 +#define PORTRAIT 2 +#define PORTRAIT_R 3 +#define SOLID 0 +#define DOTMATRIXROUND 1 +#define DOTMATRIXLED 3 +#define DOTMATRIXSQUARE 4 +#define DOTMATRIXFADE 5 +#define SYSTEM 1 +#define FONT1 1 +#define FONT2 2 +#define Pressed 1 +#define Released 0 +#define SLIDER_RAISED 0 +#define SLIDER_SUNKEN 1 +#define NOTOUCH 0 +#define T_SENSE 10 +#define TOUCH_PRESSED 1 +#define TOUCH_RELEASED 2 +#define TOUCH_STATUS 0 +#define TOUCH_GETX 1 +#define TOUCH_GETY 2 +#define KEYPAD 3 +#define DRAW_UPDOWN 2 +#define DRAW_DOWNONLY 1 +#define DRAW_NONE 0 +#define MAX_ARCSIZE 200 +#define GRADIENT_RAISED 0 +#define GRADIENT_SUNKEN 1 +#define GRADIENT_FLATTEN -1 +#define GRADIENT_HIGH 63 +#define GRADIENT_MEDIUM 32 +#define GRADIENT_LOW 24 +#define GRADIENT_OFF 0 +#define GRADIENT_DARKEN0 0 +#define GRADIENT_DARKEN1 1 +#define GRADIENT_DARKEN2 2 +#define BUTTON_SQUARE 0 +#define BUTTON_ROUNDED 1 +#define BUTTON_CIRCULAR 2 +#define BUTTON_CIRCULAR_TOP 3 -#define ALICEBLUE 0xF7DF -#define ANTIQUEWHITE 0xFF5A -#define AQUA 0x07FF -#define AQUAMARINE 0x7FFA -#define AZURE 0xF7FF -#define BEIGE 0xF7BB -#define BISQUE 0xFF38 -#define BLACK 0x0000 -#define BLANCHEDALMOND 0xFF59 -#define BLUE 0x001F -#define BLUEVIOLET 0x895C -#define BROWN 0xA145 -#define BURLYWOOD 0xDDD0 -#define CADETBLUE 0x5CF4 -#define CHARTREUSE 0x7FE0 -#define CHOCOLATE 0xD343 -#define CORAL 0xFBEA -#define CORNFLOWERBLUE 0x64BD -#define CORNSILK 0xFFDB -#define CRIMSON 0xD8A7 -#define CYAN 0x07FF -#define DARKBLUE 0x0011 -#define DARKCYAN 0x0451 -#define DARKGOLDENROD 0xBC21 -#define DARKGRAY 0xAD55 -#define DARKGREEN 0x0320 -#define DARKKHAKI 0xBDAD -#define DARKMAGENTA 0x8811 -#define DARKOLIVEGREEN 0x5345 -#define DARKORANGE 0xFC60 -#define DARKORCHID 0x9999 -#define DARKRED 0x8800 -#define DARKSALMON 0xECAF -#define DARKSEAGREEN 0x8DF1 -#define DARKSLATEBLUE 0x49F1 -#define DARKSLATEGRAY 0x2A69 -#define DARKTURQUOISE 0x067A -#define DARKVIOLET 0x901A -#define DEEPPINK 0xF8B2 -#define DEEPSKYBLUE 0x05FF -#define DIMGRAY 0x6B4D -#define DODGERBLUE 0x1C9F -#define FIREBRICK 0xB104 -#define FLORALWHITE 0xFFDE -#define FORESTGREEN 0x2444 -#define FUCHSIA 0xF81F -#define GAINSBORO 0xDEFB -#define GHOSTWHITE 0xFFDF -#define GOLD 0xFEA0 -#define GOLDENROD 0xDD24 -#define GRAY 0x8410 -#define GREEN 0x0400 -#define GREENYELLOW 0xAFE5 -#define HONEYDEW 0xF7FE -#define HOTPINK 0xFB56 -#define INDIANRED 0xCAEB -#define INDIGO 0x4810 -#define IVORY 0xFFFE -#define KHAKI 0xF731 -#define LAVENDER 0xE73F -#define LAVENDERBLUSH 0xFF9E -#define LAWNGREEN 0x7FE0 -#define LEMONCHIFFON 0xFFD9 -#define LIGHTBLUE 0xAEDC -#define LIGHTCORAL 0xF410 -#define LIGHTCYAN 0xE7FF -#define LIGHTGOLD 0xFFDA -#define LIGHTGREEN 0x9772 -#define LIGHTGREY 0xD69A -#define LIGHTPINK 0xFDB8 -#define LIGHTSALMON 0xFD0F -#define LIGHTSEAGREEN 0x2595 -#define LIGHTSKYBLUE 0x867F -#define LIGHTSLATEGRAY 0x7453 -#define LIGHTSTEELBLUE 0xB63B -#define LIGHTYELLOW 0xFFFC -#define LIME 0x07E0 -#define LIMEGREEN 0x3666 -#define LINEN 0xFF9C -#define MAGENTA 0xF81F -#define MAROON 0x8000 +#define ALICEBLUE 0xF7DF +#define ANTIQUEWHITE 0xFF5A +#define AQUA 0x07FF +#define AQUAMARINE 0x7FFA +#define AZURE 0xF7FF +#define BEIGE 0xF7BB +#define BISQUE 0xFF38 +#define BLACK 0x0000 +#define BLANCHEDALMOND 0xFF59 +#define BLUE 0x001F +#define BLUEVIOLET 0x895C +#define BROWN 0xA145 +#define BURLYWOOD 0xDDD0 +#define CADETBLUE 0x5CF4 +#define CHARTREUSE 0x7FE0 +#define CHOCOLATE 0xD343 +#define CORAL 0xFBEA +#define CORNFLOWERBLUE 0x64BD +#define CORNSILK 0xFFDB +#define CRIMSON 0xD8A7 +#define CYAN 0x07FF +#define DARKBLUE 0x0011 +#define DARKCYAN 0x0451 +#define DARKGOLDENROD 0xBC21 +#define DARKGRAY 0xAD55 +#define DARKGREEN 0x0320 +#define DARKKHAKI 0xBDAD +#define DARKMAGENTA 0x8811 +#define DARKOLIVEGREEN 0x5345 +#define DARKORANGE 0xFC60 +#define DARKORCHID 0x9999 +#define DARKRED 0x8800 +#define DARKSALMON 0xECAF +#define DARKSEAGREEN 0x8DF1 +#define DARKSLATEBLUE 0x49F1 +#define DARKSLATEGRAY 0x2A69 +#define DARKTURQUOISE 0x067A +#define DARKVIOLET 0x901A +#define DEEPPINK 0xF8B2 +#define DEEPSKYBLUE 0x05FF +#define DIMGRAY 0x6B4D +#define DODGERBLUE 0x1C9F +#define FIREBRICK 0xB104 +#define FLORALWHITE 0xFFDE +#define FORESTGREEN 0x2444 +#define FUCHSIA 0xF81F +#define GAINSBORO 0xDEFB +#define GHOSTWHITE 0xFFDF +#define GOLD 0xFEA0 +#define GOLDENROD 0xDD24 +#define GRAY 0x8410 +#define GREEN 0x0400 +#define GREENYELLOW 0xAFE5 +#define HONEYDEW 0xF7FE +#define HOTPINK 0xFB56 +#define INDIANRED 0xCAEB +#define INDIGO 0x4810 +#define IVORY 0xFFFE +#define KHAKI 0xF731 +#define LAVENDER 0xE73F +#define LAVENDERBLUSH 0xFF9E +#define LAWNGREEN 0x7FE0 +#define LEMONCHIFFON 0xFFD9 +#define LIGHTBLUE 0xAEDC +#define LIGHTCORAL 0xF410 +#define LIGHTCYAN 0xE7FF +#define LIGHTGOLD 0xFFDA +#define LIGHTGREEN 0x9772 +#define LIGHTGREY 0xD69A +#define LIGHTPINK 0xFDB8 +#define LIGHTSALMON 0xFD0F +#define LIGHTSEAGREEN 0x2595 +#define LIGHTSKYBLUE 0x867F +#define LIGHTSLATEGRAY 0x7453 +#define LIGHTSTEELBLUE 0xB63B +#define LIGHTYELLOW 0xFFFC +#define LIME 0x07E0 +#define LIMEGREEN 0x3666 +#define LINEN 0xFF9C +#define MAGENTA 0xF81F +#define MAROON 0x8000 #define MEDIUMAQUAMARINE 0x6675 -#define MEDIUMBLUE 0x0019 -#define MEDIUMORCHID 0xBABA -#define MEDIUMPURPLE 0x939B -#define MEDIUMSEAGREEN 0x3D8E +#define MEDIUMBLUE 0x0019 +#define MEDIUMORCHID 0xBABA +#define MEDIUMPURPLE 0x939B +#define MEDIUMSEAGREEN 0x3D8E #define MEDIUMSLATEBLUE 0x7B5D #define MEDIUMSPRINGGREEN 0x07D3 #define MEDIUMTURQUOISE 0x4E99 #define MEDIUMVIOLETRED 0xC0B0 -#define MIDNIGHTBLUE 0x18CE -#define MINTCREAM 0xF7FF -#define MISTYROSE 0xFF3C -#define MOCCASIN 0xFF36 -#define NAVAJOWHITE 0xFEF5 -#define NAVY 0x0010 -#define OLDLACE 0xFFBC -#define OLIVE 0x8400 -#define OLIVEDRAB 0x6C64 -#define ORANGE 0xFD20 -#define ORANGERED 0xFA20 -#define ORCHID 0xDB9A -#define PALEGOLDENROD 0xEF55 -#define PALEGREEN 0x9FD3 -#define PALETURQUOISE 0xAF7D -#define PALEVIOLETRED 0xDB92 -#define PAPAYAWHIP 0xFF7A -#define PEACHPUFF 0xFED7 -#define PERU 0xCC27 -#define PINK 0xFE19 -#define PLUM 0xDD1B -#define POWDERBLUE 0xB71C -#define PURPLE 0x8010 -#define RED 0xF800 -#define ROSYBROWN 0xBC71 -#define ROYALBLUE 0x435C -#define SADDLEBROWN 0x8A22 -#define SALMON 0xFC0E -#define SANDYBROWN 0xF52C -#define SEAGREEN 0x2C4A -#define SEASHELL 0xFFBD -#define SIENNA 0xA285 -#define SILVER 0xC618 -#define SKYBLUE 0x867D -#define SLATEBLUE 0x6AD9 -#define SLATEGRAY 0x7412 -#define SNOW 0xFFDF -#define SPRINGGREEN 0x07EF -#define STEELBLUE 0x4416 -#define TAN 0xD5B1 -#define TEAL 0x0410 -#define THISTLE 0xDDFB -#define TOMATO 0xFB08 -#define TURQUOISE 0x471A -#define VIOLET 0xEC1D -#define WHEAT 0xF6F6 -#define WHITE 0xFFFF -#define WHITESMOKE 0xF7BE -#define YELLOW 0xFFE0 -#define YELLOWGREEN 0x9E66 +#define MIDNIGHTBLUE 0x18CE +#define MINTCREAM 0xF7FF +#define MISTYROSE 0xFF3C +#define MOCCASIN 0xFF36 +#define NAVAJOWHITE 0xFEF5 +#define NAVY 0x0010 +#define OLDLACE 0xFFBC +#define OLIVE 0x8400 +#define OLIVEDRAB 0x6C64 +#define ORANGE 0xFD20 +#define ORANGERED 0xFA20 +#define ORCHID 0xDB9A +#define PALEGOLDENROD 0xEF55 +#define PALEGREEN 0x9FD3 +#define PALETURQUOISE 0xAF7D +#define PALEVIOLETRED 0xDB92 +#define PAPAYAWHIP 0xFF7A +#define PEACHPUFF 0xFED7 +#define PERU 0xCC27 +#define PINK 0xFE19 +#define PLUM 0xDD1B +#define POWDERBLUE 0xB71C +#define PURPLE 0x8010 +#define RED 0xF800 +#define ROSYBROWN 0xBC71 +#define ROYALBLUE 0x435C +#define SADDLEBROWN 0x8A22 +#define SALMON 0xFC0E +#define SANDYBROWN 0xF52C +#define SEAGREEN 0x2C4A +#define SEASHELL 0xFFBD +#define SIENNA 0xA285 +#define SILVER 0xC618 +#define SKYBLUE 0x867D +#define SLATEBLUE 0x6AD9 +#define SLATEGRAY 0x7412 +#define SNOW 0xFFDF +#define SPRINGGREEN 0x07EF +#define STEELBLUE 0x4416 +#define TAN 0xD5B1 +#define TEAL 0x0410 +#define THISTLE 0xDDFB +#define TOMATO 0xFB08 +#define TURQUOISE 0x471A +#define VIOLET 0xEC1D +#define WHEAT 0xF6F6 +#define WHITE 0xFFFF +#define WHITESMOKE 0xF7BE +#define YELLOW 0xFFE0 +#define YELLOWGREEN 0x9E66 -#define HLSMAX 127 -#define HLSMAXm2d3 85 -#define HLSMAXd12 10 -#define HLSMAXd6 21 -#define HLSMAXd2 63 -#define HLSMAXd3 42 -#define RGBMAX 127 -#define RGBMAXm2 254 -#define UNDEFINED 85 -#define _redmask 0xF800 -#define _greenmask 0x07E0 -#define _bluemask 0x001F -#define GET_VERSION 0x10 -#define ENABLE_TOUCH 0x12 -#define DISABLE_TOUCH 0x13 +#define HLSMAX 127 +#define HLSMAXm2d3 85 +#define HLSMAXd12 10 +#define HLSMAXd6 21 +#define HLSMAXd2 63 +#define HLSMAXd3 42 +#define RGBMAX 127 +#define RGBMAXm2 254 +#define UNDEFINED 85 +#define _redmask 0xF800 +#define _greenmask 0x07E0 +#define _bluemask 0x001F +#define GET_VERSION 0x10 +#define ENABLE_TOUCH 0x12 +#define DISABLE_TOUCH 0x13 #define CALIBRATE_MODE 0x14 #define REGISTER_READ 0x20 #define REGISTER_WRITE 0x21 #define REGISTER_START_ADDRESS_REQUEST 0x22 #define REGISTERS_WRITE_TO_EEPROM 0x23 #define EEPROM_READ 0x28 -#define EEPROM_WRITE 0x29 +#define EEPROM_WRITE 0x29 #define EEPROM_WRITE_TO_REGISTERS 0x2B #define TOUCH_ENABLE 0x00 #define TOUCH_DISABLE 0x01 -#define HORIZONTAL_SLIDER 0x00 -#define VERTICAL_SLIDER 0x01 +#define HORIZONTAL_SLIDER 0x00 +#define VERTICAL_SLIDER 0x01 #define SHIFT 0x01 #define CAPSLOCK 0x02 #define CTRL 0x03 -#define SPRITE_ACTIVE 0x00 +#define SPRITE_ACTIVE 0x00 #define SPRITE_MEMPOS 0x01 #define SPRITE_X 0x02 #define SPRITE_Y 0x03 @@ -488,40 +527,40 @@ #define SPRITE_4BIT 0x03 #define TFT_WIDTH 240 -#define TFT_HEIGHT 320 +#define TFT_HEIGHT 340 #if (TFT_HEIGHT == 240) && (TFT_WIDTH == 240) #define CGRAM_OFFSET #endif -#define TFT_NOP 0x00 -#define TFT_SWRST 0x01 +#define TFT_NOP 0x00 +#define TFT_SWRST 0x01 -#define TFT_SLPIN 0x10 -#define TFT_SLPOUT 0x11 -#define TFT_NORON 0x13 +#define TFT_SLPIN 0x10 +#define TFT_SLPOUT 0x11 +#define TFT_NORON 0x13 -#define TFT_INVOFF 0x20 -#define TFT_INVON 0x21 -#define TFT_DISPOFF 0x28 -#define TFT_DISPON 0x29 -#define TFT_CASET 0x2A -#define TFT_PASET 0x2B -#define TFT_RAMWR 0x2C -#define TFT_RAMRD 0x2E -#define TFT_MADCTL 0x36 -#define TFT_COLMOD 0x3A +#define TFT_INVOFF 0x20 +#define TFT_INVON 0x21 +#define TFT_DISPOFF 0x28 +#define TFT_DISPON 0x29 +#define TFT_CASET 0x2A +#define TFT_PASET 0x2B +#define TFT_RAMWR 0x2C +#define TFT_RAMRD 0x2E +#define TFT_MADCTL 0x36 +#define TFT_COLMOD 0x3A -#define TFT_MAD_MY 0x80 -#define TFT_MAD_MX 0x40 -#define TFT_MAD_MV 0x20 -#define TFT_MAD_ML 0x10 -#define TFT_MAD_RGB 0x00 -#define TFT_MAD_BGR 0x08 -#define TFT_MAD_MH 0x04 -#define TFT_MAD_SS 0x02 -#define TFT_MAD_GS 0x01 -#define TFT_RGB_ORDER 0x00 +#define TFT_MAD_MY 0x80 +#define TFT_MAD_MX 0x40 +#define TFT_MAD_MV 0x20 +#define TFT_MAD_ML 0x10 +#define TFT_MAD_RGB 0x00 +#define TFT_MAD_BGR 0x08 +#define TFT_MAD_MH 0x04 +#define TFT_MAD_SS 0x02 +#define TFT_MAD_GS 0x01 +#define TFT_RGB_ORDER 0x00 #ifdef TFT_RGB_ORDER #if (TFT_RGB_ORDER == 1) @@ -570,7 +609,7 @@ #define GFX4DST_PTLAR 0x30 #define GFX4DST_VSCRDEF 0x33 // Vertical scrolling definition (ST7789V) #define GFX4DST_TEOFF 0x34 // Tearing effect line off -#define GFX4DST_TEON 0x35 // Tearing effect line on +#define GFX4DST_TEON 0x35 // Tearing effect line on #define GFX4DST_MADCTL 0x36 // Memory data access control #define GFX4DST_IDMOFF 0x38 // Idle mode off #define GFX4DST_IDMON 0x39 // Idle mode on @@ -589,27 +628,27 @@ #define GFX4DST_VCOMS 0xBB #define GFX4DST_LCMCTRL 0xC0 #define GFX4DST_IDSET 0xC1 -#define GFX4DST_VDVVRHEN 0xC2 -#define GFX4DST_VRHS 0xC3 +#define GFX4DST_VDVVRHEN 0xC2 +#define GFX4DST_VRHS 0xC3 #define GFX4DST_VDVSET 0xC4 -#define GFX4DST_VCMOFSET 0xC5 +#define GFX4DST_VCMOFSET 0xC5 #define GFX4DST_FRCTR2 0xC6 -#define GFX4DST_CABCCTRL 0xC7 +#define GFX4DST_CABCCTRL 0xC7 #define GFX4DST_REGSEL1 0xC8 #define GFX4DST_REGSEL2 0xCA -#define GFX4DST_PWMFRSEL 0xCC +#define GFX4DST_PWMFRSEL 0xCC #define GFX4DST_PWCTRL1 0xD0 -#define GFX4DST_VAPVANEN 0xD2 +#define GFX4DST_VAPVANEN 0xD2 #define GFX4DST_CMD2EN 0xDF #define GFX4DST_PVGAMCTRL 0xE0 #define GFX4DST_NVGAMCTRL 0xE1 #define GFX4DST_DGMLUTR 0xE2 #define GFX4DST_DGMLUTB 0xE3 -#define GFX4DST_GATECTRL 0xE4 +#define GFX4DST_GATECTRL 0xE4 #define GFX4DST_SPI2EN 0xE7 #define GFX4DST_PWCTRL2 0xE8 #define GFX4DST_EQCTRL 0xE9 -#define GFX4DST_PROMCTRL 0xEC +#define GFX4DST_PROMCTRL 0xEC #define GFX4DST_PROMEN 0xFA #define GFX4DST_NVMSET 0xFC #define GFX4DST_PROMACT 0xFE @@ -879,22 +918,32 @@ class GFX4d : public Print fs::File dataFile; fs::File userImag; fs::File userDat; -#endif +#endif + GFX4d(); void begin(void), begin(byte a), setGRAM(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1), +#ifdef ESP32 + setGRAMdma(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1), +#endif WrGRAM(uint32_t color), WrGRAMs(uint32_t *data, uint16_t l), + WrGRAMsNT(uint32_t *data, uint16_t l), WrGRAM16(uint16_t color), WrGRAMs16(uint16_t *data, uint16_t l), + WrGRAMs16NT(uint16_t *data, uint16_t l), WrGRAMs8(uint8_t *data, uint16_t l, byte mul), WrGRAMs16232(uint16_t *data, uint16_t l), WrGRAMs16232(uint16_t *data, uint16_t l, uint8_t *odata, int x, int y), WrGRAM16232(uint16_t mcolor, int32_t l), WrGRAMs16232NT(uint16_t *data, uint16_t l), + WriteBytes(uint8_t *data, uint32_t l), +#ifdef ESP32 + WritePixels(uint16_t * data, uint32_t l), +#endif WrGRAMend(), WrGRAMstart(), FillScreen(uint16_t color), @@ -907,6 +956,9 @@ class GFX4d : public Print MoveTo(int16_t x, int16_t y), newLine(int8_t f1, int8_t ts, uint16_t ux), Open4dGFX(String file4d), + Open4dGFX(String file4d, bool allocMAX), + _Open4dGFX(String file4d, bool scan), + SetMaxWidgets(int mw), DownloadFile(String WebAddr, String Fname), DownloadFile(String WebAddr, String Fname, String sha1), DownloadFile(String Address, uint16_t port, String hfile, String Fname), @@ -921,23 +973,14 @@ class GFX4d : public Print UserImages(uint16_t uis, int16_t frame, int offset, int16_t altx, int16_t alty), UserImages(uint16_t uisnb, int16_t framenb, int16_t newx, int16_t newy), UserImagesDR(uint16_t uino, int frames, int16_t uxpos, int16_t uypos, int16_t uwidth, int16_t uheight), - //LedDigitsDisplay(uint16_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks), - //LedDigitsDisplay(uint32_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks), - LedDigitsDisplay(uint64_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks), - //LedDigitsDisplay(uint16_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks, int16_t altx, int16_t alty), - //LedDigitsDisplay(uint32_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks, int16_t altx, int16_t alty), - LedDigitsDisplay(uint64_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks, int16_t altx, int16_t alty), - //LedDigitsDisplaySigned(int16_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks), - //LedDigitsDisplaySigned(int32_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks), - LedDigitsDisplaySigned(int64_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks), - //LedDigitsDisplaySigned(int16_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks, int16_t altx, int16_t alty), - //LedDigitsDisplaySigned(int32_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks, int16_t altx, int16_t alty), - LedDigitsDisplaySigned(int64_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks, int16_t altx, int16_t alty), + LedDigitsDisplay(int64_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks), + LedDigitsDisplay(int64_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks, int16_t altx, int16_t alty), + LedDigitsDisplaySigned(int64_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks), + LedDigitsDisplaySigned(int64_t newval, uint16_t index, int16_t Digits, int16_t MinDigits, int16_t WidthDigit, int16_t LeadingBlanks, int16_t altx, int16_t alty), DrawWidget(uint32_t Index, int16_t uix, int16_t uiy, int16_t uiw, int16_t uih, uint16_t frame, int16_t bar, bool images, uint8_t cdv), DrawImage(uint32_t Index, int16_t uix, int16_t uiy), UserCharacter(uint32_t *data, uint8_t ucsize, int16_t ucx, int16_t ucy, uint16_t color, uint16_t bgcolor), - UserCharacterBG(uint32_t *data, uint8_t ucsize, int16_t ucx, int16_t ucy, uint16_t color, - boolean draw, uint32_t bgindex), + UserCharacterBG(uint32_t *data, uint8_t ucsize, int16_t ucx, int16_t ucy, uint16_t color, boolean draw, uint32_t bgindex), UserCharacterBG(int8_t ui, uint32_t *data, uint8_t ucsize, int16_t ucx, int16_t ucy, uint16_t color, boolean draw), UserCharacterBG(uint32_t *data, uint8_t ucsize, int16_t ucx, int16_t ucy, uint16_t color, boolean draw, uint32_t bgindex, bool type, int8_t ui), PrintImage(uint16_t iIndex), @@ -1018,13 +1061,18 @@ class GFX4d : public Print ResetKeypad(), TextWindowImage(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t txtcolor, uint16_t TWimg, uint16_t frcolor), drawChar2TWimage(uint8_t ch, uint16_t uino, int frames, int16_t uxpos, int16_t uypos, uint16_t txtcol), - gradientShape(int ow, int xPos, int yPos, int w, int h, int r1, int r2, int r3, int r4, int darken, uint16_t color, int sr1, int gl1, uint16_t colorD, int sr3, int gl3, int gtb), - HlineD(int y, int x1, int x2, uint16_t color), + gradientShape(int ow, int xPos, int yPos, int w, int h, int r1, int r2, int r3, int r4, int darken, int color, int sr1, int gl1, int colorD, int sr3, int gl3, int gtb), + HlineD(int y, int x1, int x2, int color), ChangeColor(uint16_t oCol, uint16_t nCol), ButtonXstyle(byte bs), - Invert(boolean i); + Invert(boolean i), + GradTriangleFilled(int x0, int y0, int x1, int y1, int x2, int y2, int color, int ncCol, int h, int ypos, int lev, int erase); - uint16_t RGBto565(uint8_t r, uint8_t g, uint8_t b); + int strWidth(String ts); + int charHeight(char ch = 'A'); + int charWidth(char ch = 'A'); + int imageGetWord(uint16_t img, byte controlIndex); + uint16_t RGBto565(uint8_t r, uint8_t g, uint8_t b); uint16_t RGBs2COL(uint8_t r, uint8_t g, uint8_t b); uint8_t hue_RGB(int Hin, int M1, int M2); uint16_t ReadPixel(uint16_t xrp, uint16_t yrp); @@ -1048,7 +1096,7 @@ class GFX4d : public Print uint16_t touch_GetX(void); uint16_t touch_GetY(void); uint8_t touch_GetPen(void); - uint16_t imageTouched(void); + int imageTouched(void); uint8_t CheckButtons(void); uint16_t getNumberofObjects(void); uint8_t getFontData(uint8_t fntnum, uint16_t val); @@ -1056,7 +1104,7 @@ class GFX4d : public Print int DecodeKeypad(int kpad, int kpress, byte *kbks, int8_t *kbck); bool KeypadStatus(int keyType); bool SpriteInit(uint16_t *sdata, size_t nums); - bool SpriteAdd(int pos, int snum, int x, int y, uint16_t *sdata); + bool SpriteAdd(int pos, int snum, int x, int y, uint16_t *sdata); boolean CheckSD(void); boolean CheckDL(void); boolean touch_Update(void); @@ -1071,7 +1119,7 @@ class GFX4d : public Print uint16_t GetSliderValue(uint16_t ui, uint8_t axis, uint16_t uiv, uint16_t ming, uint16_t maxg); uint16_t SpriteGetPixel(int snum, int xo, int yo, uint16_t tcolor, uint16_t * sdata); uint16_t SpriteGetPalette(int pnumber); - uint16_t Grad(int raisSunk, int state, int glev, int h1, int pos, uint16_t colToAdj); + int Grad(int raisSunk, int state, int glev, int h1, int pos, int colToAdj); int GetSpritesAt(int xo, int yo, uint16_t tcolor, int * slist, uint16_t * sdata); int SpriteTouched(); int GetSprite(int snum, int choice); @@ -1088,9 +1136,11 @@ class GFX4d : public Print uint16_t palette4bit[16] = {BLACK, MAROON, GREEN, OLIVE, NAVY, PURPLE, TEAL, SILVER, GRAY, RED, LIME, YELLOW, BLUE, FUCHSIA, AQUA, WHITE}; virtual size_t write(uint8_t); - + + private: - String dat4d; + + String dat4d; String gci4d; uint16_t tdark; uint16_t tlight; @@ -1110,6 +1160,7 @@ class GFX4d : public Print boolean ctrl; boolean ddos; boolean twen; + boolean useDMA; int8_t fsh; int8_t fsh1; int8_t fsw; @@ -1120,57 +1171,62 @@ class GFX4d : public Print int8_t _cs, _dc, _rst, _mosi, _miso, _sclk, _disp, _tcs, _sd, _sRes; boolean IPSDisplay = false; boolean ST7789 = false; + boolean ILI9488 = false; + uint16_t GFX4d_TFTWIDTH = 240; + uint16_t GFX4d_TFTHEIGHT = 320; + uint16_t GFX4d_SCRWIDTH = 239; + int _xstart; + int _ystart; + int _rowstart; + int _colstart; + int _nlh = 320; public: uint8_t dispID[4]; - int16_t //lastArcOld[max_ARCSIZE], - //inx[max_ARCSIZE], - GSCropArcLeft = -1, - GSCropArcRight = -1, - xpGSaPos[4], - ypGSaPos[4], - radsGS[4], - //GSCropArcLeft := -1, - //GSCropArcRight := -1, - GSCropLastVal, - lastAsize, - keepLastArc = 0, - protectLA = 0, - GSErase, - GSEraseXpos, - GSEraseYpos, - GSEraseHeight, - GSErasePHeight, - GSEraseColour, - GSEraseGLevel, - GSERaisedSunk, - GSSLastSliderVal, - GSSBGColor, - GSSArconly, - GSSsxpos = -9999; - //gradofs; - uint16_t lastArcOld[MAX_ARCSIZE], - inx[MAX_ARCSIZE]; - boolean sdok; + int16_t + MAX_WIDGETS = 300, + GSCropArcLeft = -1, + GSCropArcRight = -1, + xpGSaPos[4], + ypGSaPos[4], + radsGS[4], + GSCropLastVal, + lastAsize, + keepLastArc = 0, + protectLA = 0, + GSErase, + GSEraseXpos, + GSEraseYpos, + GSEraseHeight, + GSErasePHeight, + GSEraseColour, + GSEraseGLevel, + GSERaisedSunk, + GSSLastSliderVal, + GSSBGColor, + GSSArconly, + GSSsxpos = -9999; + uint16_t + lastArcOld[MAX_ARCSIZE], + inx[MAX_ARCSIZE]; + boolean sdok; protected: uint32_t krepeat; - uint32_t tuiIndex[MAX_WIDGETS]; + uint32_t *tuiIndex; int16_t - tuix[MAX_WIDGETS], - tuiy[MAX_WIDGETS], - tuiw[MAX_WIDGETS], - tuih[MAX_WIDGETS], + *tuix, + *tuiy, + *tuiw, + *tuih, + *spriteData, + *spriteList, + *spriteLast, + *spriteNum, xpApos[4], ypApos[4], rads[4], - - //lastArcOld[max_ARCSIZE], - //inx[MAX_ARCSIZE], - //GSCropArcLeft = -1, - //GSCropArcRight = -1, - //lastAsize, TWimage, TWimageCount, pressed = -1, @@ -1179,21 +1235,25 @@ class GFX4d : public Print sdetailh, sdetailx, sdetailw, - *spriteData, - *spriteList, - *spriteLast, - *spriteNum, - width, height, cursor_x, cursor_y , scrollpos, xic, yic; + width, + height, + cursor_x, + cursor_y, + scrollpos, + xic, + yic, + gciobjtouched; uint16_t #ifndef ESP8266 - buf16[12001], + buf16[12001], #endif - gciobjframes[MAX_WIDGETS], + *gciobjframes, twframecol, textcolor, textbgcolor, chracc, chrdwn, TWimgSet = 0, TWimageTextCol, + opgfx = 0, sgx, sgy, sgw, @@ -1206,19 +1266,18 @@ class GFX4d : public Print twcurx, twcury, twcolnum, - bposx[128], - bposy[128], - bposw[128], - bposh[128], - bposc[128], - txfcol[600], + *bposx, + *bposy, + *bposw, + *bposh, + *bposc, + *txfcol, spriteArea[4], numSprites, butdelay, - gciobjnum, - gciobjtouched; + gciobjnum; uint8_t - cdv[MAX_WIDGETS], + *cdv, TWcharByte, TWcharBit, UIDRcharOn, @@ -1231,10 +1290,9 @@ class GFX4d : public Print pencount, oldbut, twcl, - bstat[128], - txtbuf[600], + *bstat, + *txtbuf, tchbuf[15], - //tdata[256], textsize, textsizeht, rotation, @@ -1245,24 +1303,25 @@ class GFX4d : public Print _but, bxStyle; boolean - saSet, - tchen, - uimage, - twframe, - butchnge, - dlok, - //sdok, - gciobjtouchenable[MAX_WIDGETS], - scrolled, - nl, - txtwin, - wrap, - bactive[128]; - String - cmdtxt, - twtext; + saSet, + tchen, + uimage, + twframe, + butchnge, + dlok, + *gciobjtouchenable, + scrolled, + nl, + txtwin, + ButtonxInitial = true, + TWInitial = true, + wrap, + *bactive; + String + cmdtxt, + twtext; long - touchTime; + touchTime; }; #endif diff --git a/src/keywords.txt b/src/keywords.txt index 557e01d..93669aa 100644 --- a/src/keywords.txt +++ b/src/keywords.txt @@ -10,23 +10,27 @@ # Methods and Functions (KEYWORD2) ####################################### -GFX4d KEYWORD1 +GFX4d KEYWORD1 +strWidth KEYWORD2 +charWidth KEYWORD2 +charHeight KEYWORD2 +imageGetWord KEYWORD2 GradientShape KEYWORD2 ButtonXstyle KEYWORD2 GetSliderValue KEYWORD2 DecodeKeypad KEYWORD2 -ResetKeypad KEYWORD2 +ResetKeypad KEYWORD2 KeypadStatus KEYWORD2 SpriteEnable KEYWORD2 SpriteSetPalette KEYWORD2 SpriteGetPalette KEYWORD2 SpriteTouched KEYWORD2 -SpriteInit KEYWORD2 -SpriteAdd KEYWORD2 +SpriteInit KEYWORD2 +SpriteAdd KEYWORD2 SpriteAreaSet KEYWORD2 GetSpriteImageNum KEYWORD2 -SetSprite KEYWORD2 -GetSprite KEYWORD2 +SetSprite KEYWORD2 +GetSprite KEYWORD2 GetSpritesAt KEYWORD2 SpriteGetPixel KEYWORD2 UpdateSprites KEYWORD2 @@ -151,6 +155,10 @@ getFontData KEYWORD2 # Constants (LITERAL1) ####################################### +IMAGE_XPOS LITERAL1 +IMAGE_YPOS LITERAL1 +IMAGE_WIDTH LITERAL1 +IMAGE_HEIGHT LITERAL1 GFX4d_RED LITERAL1 GFX4d_GREEN LITERAL1 GFX4d_BLUE LITERAL1