diff --git a/cpu.cpp b/cpu.cpp new file mode 100644 index 0000000..ed41303 --- /dev/null +++ b/cpu.cpp @@ -0,0 +1,2414 @@ +#include +#include + +#define EXECUTES_PER_RUN 100 +#define RAM_SIZE 16400 +extern uint8_t RAM[RAM_SIZE]; +extern uint8_t HIGHVIC[16];//color of background/border/sprites are situated here + +//extern uint16_t cacheAddr[EXECUTES_PER_RUN]; +//extern uint16_t nrCaches; + +extern void serout(uint8_t value); + +//#define NULL (void *) 0 + + +//6502 defines +//#define UNDOCUMENTED //when this is defined, undocumented opcodes are handled. + //otherwise, they're simply treated as NOPs. + +//#define USE_TIMING //slower, but allows you to specify number of cycles to run for exec6502 + //rather than simply a number of instructions. also uses a little more + //program memory when enabled. + +#define FLAG_CARRY 0x01 +#define FLAG_ZERO 0x02 +#define FLAG_INTERRUPT 0x04 +#define FLAG_DECIMAL 0x08 +#define FLAG_BREAK 0x10 +#define FLAG_CONSTANT 0x20 +#define FLAG_OVERFLOW 0x40 +#define FLAG_SIGN 0x80 + +#define BASE_STACK 0x100 + +#define saveaccum(n) a = (uint8_t)((n) & 0x00FF) + + +//flag modifier macros +#define setcarry() cpustatus |= FLAG_CARRY +#define clearcarry() cpustatus &= (~FLAG_CARRY) +#define setzero() cpustatus |= FLAG_ZERO +#define clearzero() cpustatus &= (~FLAG_ZERO) +#define setinterrupt() cpustatus |= FLAG_INTERRUPT +#define clearinterrupt() cpustatus &= (~FLAG_INTERRUPT) +#define setdecimal() cpustatus |= FLAG_DECIMAL +#define cleardecimal() cpustatus &= (~FLAG_DECIMAL) +#define setoverflow() cpustatus |= FLAG_OVERFLOW +#define clearoverflow() cpustatus &= (~FLAG_OVERFLOW) +#define setsign() cpustatus |= FLAG_SIGN +#define clearsign() cpustatus &= (~FLAG_SIGN) + + +//flag calculation macros +#define zerocalc(n) { if ((n) & 0x00FF) clearzero(); else setzero(); } + +#define signcalc(n) { if ((n) & 0x0080) setsign(); else clearsign(); } + +#define carrycalc(n) { if ((n) & 0xFF00) setcarry(); else clearcarry(); } + +#define overflowcalc(n, m, o) { if (((n) ^ (uint16_t)(m)) & ((n) ^ (o)) & 0x0080) setoverflow(); else clearoverflow(); } + + +//6502 CPU registers +uint16_t pc; +uint8_t sp, a, x, y, cpustatus; + +//helper variables +uint32_t instructions = 0; //keep track of total instructions executed +int32_t clockticks6502 = 0, clockgoal6502 = 0; +uint16_t oldpc, ea, reladdr, value, result; +uint8_t opcode, oldcpustatus, useaccum; + + +prog_uchar BIOS[16384] PROGMEM = { + 0x94,0xE3,0x7B,0xE3,0x43,0x42,0x4D,0x42,0x41,0x53,0x49,0x43,0x30,0xA8,0x41,0xA7, + 0x1D,0xAD,0xF7,0xA8,0xA4,0xAB,0xBE,0xAB,0x80,0xB0,0x05,0xAC,0xA4,0xA9,0x9F,0xA8, + 0x70,0xA8,0x27,0xA9,0x1C,0xA8,0x82,0xA8,0xD1,0xA8,0x3A,0xA9,0x2E,0xA8,0x4A,0xA9, + 0x2C,0xB8,0x67,0xE1,0x55,0xE1,0x64,0xE1,0xB2,0xB3,0x23,0xB8,0x7F,0xAA,0x9F,0xAA, + 0x56,0xA8,0x9B,0xA6,0x5D,0xA6,0x85,0xAA,0x29,0xE1,0xBD,0xE1,0xC6,0xE1,0x7A,0xAB, + 0x41,0xA6,0x39,0xBC,0xCC,0xBC,0x58,0xBC,0x10,0x03,0x7D,0xB3,0x9E,0xB3,0x71,0xBF, + 0x97,0xE0,0xEA,0xB9,0xED,0xBF,0x64,0xE2,0x6B,0xE2,0xB4,0xE2,0x0E,0xE3,0x0D,0xB8, + 0x7C,0xB7,0x65,0xB4,0xAD,0xB7,0x8B,0xB7,0xEC,0xB6,0x00,0xB7,0x2C,0xB7,0x37,0xB7, + 0x79,0x69,0xB8,0x79,0x52,0xB8,0x7B,0x2A,0xBA,0x7B,0x11,0xBB,0x7F,0x7A,0xBF,0x50, + 0xE8,0xAF,0x46,0xE5,0xAF,0x7D,0xB3,0xBF,0x5A,0xD3,0xAE,0x64,0x15,0xB0,0x45,0x4E, + 0xC4,0x46,0x4F,0xD2,0x4E,0x45,0x58,0xD4,0x44,0x41,0x54,0xC1,0x49,0x4E,0x50,0x55, + 0x54,0xA3,0x49,0x4E,0x50,0x55,0xD4,0x44,0x49,0xCD,0x52,0x45,0x41,0xC4,0x4C,0x45, + 0xD4,0x47,0x4F,0x54,0xCF,0x52,0x55,0xCE,0x49,0xC6,0x52,0x45,0x53,0x54,0x4F,0x52, + 0xC5,0x47,0x4F,0x53,0x55,0xC2,0x52,0x45,0x54,0x55,0x52,0xCE,0x52,0x45,0xCD,0x53, + 0x54,0x4F,0xD0,0x4F,0xCE,0x57,0x41,0x49,0xD4,0x4C,0x4F,0x41,0xC4,0x53,0x41,0x56, + 0xC5,0x56,0x45,0x52,0x49,0x46,0xD9,0x44,0x45,0xC6,0x50,0x4F,0x4B,0xC5,0x50,0x52, + 0x49,0x4E,0x54,0xA3,0x50,0x52,0x49,0x4E,0xD4,0x43,0x4F,0x4E,0xD4,0x4C,0x49,0x53, + 0xD4,0x43,0x4C,0xD2,0x43,0x4D,0xC4,0x53,0x59,0xD3,0x4F,0x50,0x45,0xCE,0x43,0x4C, + 0x4F,0x53,0xC5,0x47,0x45,0xD4,0x4E,0x45,0xD7,0x54,0x41,0x42,0xA8,0x54,0xCF,0x46, + 0xCE,0x53,0x50,0x43,0xA8,0x54,0x48,0x45,0xCE,0x4E,0x4F,0xD4,0x53,0x54,0x45,0xD0, + 0xAB,0xAD,0xAA,0xAF,0xDE,0x41,0x4E,0xC4,0x4F,0xD2,0xBE,0xBD,0xBC,0x53,0x47,0xCE, + 0x49,0x4E,0xD4,0x41,0x42,0xD3,0x55,0x53,0xD2,0x46,0x52,0xC5,0x50,0x4F,0xD3,0x53, + 0x51,0xD2,0x52,0x4E,0xC4,0x4C,0x4F,0xC7,0x45,0x58,0xD0,0x43,0x4F,0xD3,0x53,0x49, + 0xCE,0x54,0x41,0xCE,0x41,0x54,0xCE,0x50,0x45,0x45,0xCB,0x4C,0x45,0xCE,0x53,0x54, + 0x52,0xA4,0x56,0x41,0xCC,0x41,0x53,0xC3,0x43,0x48,0x52,0xA4,0x4C,0x45,0x46,0x54, + 0xA4,0x52,0x49,0x47,0x48,0x54,0xA4,0x4D,0x49,0x44,0xA4,0x47,0xCF,0x00,0x54,0x4F, + 0x4F,0x20,0x4D,0x41,0x4E,0x59,0x20,0x46,0x49,0x4C,0x45,0xD3,0x46,0x49,0x4C,0x45, + 0x20,0x4F,0x50,0x45,0xCE,0x46,0x49,0x4C,0x45,0x20,0x4E,0x4F,0x54,0x20,0x4F,0x50, + 0x45,0xCE,0x46,0x49,0x4C,0x45,0x20,0x4E,0x4F,0x54,0x20,0x46,0x4F,0x55,0x4E,0xC4, + 0x44,0x45,0x56,0x49,0x43,0x45,0x20,0x4E,0x4F,0x54,0x20,0x50,0x52,0x45,0x53,0x45, + 0x4E,0xD4,0x4E,0x4F,0x54,0x20,0x49,0x4E,0x50,0x55,0x54,0x20,0x46,0x49,0x4C,0xC5, + 0x4E,0x4F,0x54,0x20,0x4F,0x55,0x54,0x50,0x55,0x54,0x20,0x46,0x49,0x4C,0xC5,0x4D, + 0x49,0x53,0x53,0x49,0x4E,0x47,0x20,0x46,0x49,0x4C,0x45,0x20,0x4E,0x41,0x4D,0xC5, + 0x49,0x4C,0x4C,0x45,0x47,0x41,0x4C,0x20,0x44,0x45,0x56,0x49,0x43,0x45,0x20,0x4E, + 0x55,0x4D,0x42,0x45,0xD2,0x4E,0x45,0x58,0x54,0x20,0x57,0x49,0x54,0x48,0x4F,0x55, + 0x54,0x20,0x46,0x4F,0xD2,0x53,0x59,0x4E,0x54,0x41,0xD8,0x52,0x45,0x54,0x55,0x52, + 0x4E,0x20,0x57,0x49,0x54,0x48,0x4F,0x55,0x54,0x20,0x47,0x4F,0x53,0x55,0xC2,0x4F, + 0x55,0x54,0x20,0x4F,0x46,0x20,0x44,0x41,0x54,0xC1,0x49,0x4C,0x4C,0x45,0x47,0x41, + 0x4C,0x20,0x51,0x55,0x41,0x4E,0x54,0x49,0x54,0xD9,0x4F,0x56,0x45,0x52,0x46,0x4C, + 0x4F,0xD7,0x4F,0x55,0x54,0x20,0x4F,0x46,0x20,0x4D,0x45,0x4D,0x4F,0x52,0xD9,0x55, + 0x4E,0x44,0x45,0x46,0x27,0x44,0x20,0x53,0x54,0x41,0x54,0x45,0x4D,0x45,0x4E,0xD4, + 0x42,0x41,0x44,0x20,0x53,0x55,0x42,0x53,0x43,0x52,0x49,0x50,0xD4,0x52,0x45,0x44, + 0x49,0x4D,0x27,0x44,0x20,0x41,0x52,0x52,0x41,0xD9,0x44,0x49,0x56,0x49,0x53,0x49, + 0x4F,0x4E,0x20,0x42,0x59,0x20,0x5A,0x45,0x52,0xCF,0x49,0x4C,0x4C,0x45,0x47,0x41, + 0x4C,0x20,0x44,0x49,0x52,0x45,0x43,0xD4,0x54,0x59,0x50,0x45,0x20,0x4D,0x49,0x53, + 0x4D,0x41,0x54,0x43,0xC8,0x53,0x54,0x52,0x49,0x4E,0x47,0x20,0x54,0x4F,0x4F,0x20, + 0x4C,0x4F,0x4E,0xC7,0x46,0x49,0x4C,0x45,0x20,0x44,0x41,0x54,0xC1,0x46,0x4F,0x52, + 0x4D,0x55,0x4C,0x41,0x20,0x54,0x4F,0x4F,0x20,0x43,0x4F,0x4D,0x50,0x4C,0x45,0xD8, + 0x43,0x41,0x4E,0x27,0x54,0x20,0x43,0x4F,0x4E,0x54,0x49,0x4E,0x55,0xC5,0x55,0x4E, + 0x44,0x45,0x46,0x27,0x44,0x20,0x46,0x55,0x4E,0x43,0x54,0x49,0x4F,0xCE,0x56,0x45, + 0x52,0x49,0x46,0xD9,0x4C,0x4F,0x41,0xC4,0x9E,0xA1,0xAC,0xA1,0xB5,0xA1,0xC2,0xA1, + 0xD0,0xA1,0xE2,0xA1,0xF0,0xA1,0xFF,0xA1,0x10,0xA2,0x25,0xA2,0x35,0xA2,0x3B,0xA2, + 0x4F,0xA2,0x5A,0xA2,0x6A,0xA2,0x72,0xA2,0x7F,0xA2,0x90,0xA2,0x9D,0xA2,0xAA,0xA2, + 0xBA,0xA2,0xC8,0xA2,0xD5,0xA2,0xE4,0xA2,0xED,0xA2,0x00,0xA3,0x0E,0xA3,0x1E,0xA3, + 0x24,0xA3,0x83,0xA3,0x0D,0x4F,0x4B,0x0D,0x00,0x20,0x20,0x45,0x52,0x52,0x4F,0x52, + 0x00,0x20,0x49,0x4E,0x20,0x00,0x0D,0x0A,0x52,0x45,0x41,0x44,0x59,0x2E,0x0D,0x0A, + 0x00,0x0D,0x0A,0x42,0x52,0x45,0x41,0x4B,0x00,0xA0,0xBA,0xE8,0xE8,0xE8,0xE8,0xBD, + 0x01,0x01,0xC9,0x81,0xD0,0x21,0xA5,0x4A,0xD0,0x0A,0xBD,0x02,0x01,0x85,0x49,0xBD, + 0x03,0x01,0x85,0x4A,0xDD,0x03,0x01,0xD0,0x07,0xA5,0x49,0xDD,0x02,0x01,0xF0,0x07, + 0x8A,0x18,0x69,0x12,0xAA,0xD0,0xD8,0x60,0x20,0x08,0xA4,0x85,0x31,0x84,0x32,0x38, + 0xA5,0x5A,0xE5,0x5F,0x85,0x22,0xA8,0xA5,0x5B,0xE5,0x60,0xAA,0xE8,0x98,0xF0,0x23, + 0xA5,0x5A,0x38,0xE5,0x22,0x85,0x5A,0xB0,0x03,0xC6,0x5B,0x38,0xA5,0x58,0xE5,0x22, + 0x85,0x58,0xB0,0x08,0xC6,0x59,0x90,0x04,0xB1,0x5A,0x91,0x58,0x88,0xD0,0xF9,0xB1, + 0x5A,0x91,0x58,0xC6,0x5B,0xC6,0x59,0xCA,0xD0,0xF2,0x60,0x0A,0x69,0x3E,0xB0,0x35, + 0x85,0x22,0xBA,0xE4,0x22,0x90,0x2E,0x60,0xC4,0x34,0x90,0x28,0xD0,0x04,0xC5,0x33, + 0x90,0x22,0x48,0xA2,0x09,0x98,0x48,0xB5,0x57,0xCA,0x10,0xFA,0x20,0x26,0xB5,0xA2, + 0xF7,0x68,0x95,0x61,0xE8,0x30,0xFA,0x68,0xA8,0x68,0xC4,0x34,0x90,0x06,0xD0,0x05, + 0xC5,0x33,0xB0,0x01,0x60,0xA2,0x10,0x6C,0x00,0x03,0x8A,0x0A,0xAA,0xBD,0x26,0xA3, + 0x85,0x22,0xBD,0x27,0xA3,0x85,0x23,0x20,0xCC,0xFF,0xA9,0x00,0x85,0x13,0x20,0xD7, + 0xAA,0x20,0x45,0xAB,0xA0,0x00,0xB1,0x22,0x48,0x29,0x7F,0x20,0x47,0xAB,0xC8,0x68, + 0x10,0xF4,0x20,0x7A,0xA6,0xA9,0x69,0xA0,0xA3,0x20,0x1E,0xAB,0xA4,0x3A,0xC8,0xF0, + 0x03,0x20,0xC2,0xBD,0xA9,0x76,0xA0,0xA3,0x20,0x1E,0xAB,0xA9,0x80,0x20,0x90,0xFF, + 0x6C,0x02,0x03,0x20,0x60,0xA5,0x86,0x7A,0x84,0x7B,0x20,0x73,0x00,0xAA,0xF0,0xF0, + 0xA2,0xFF,0x86,0x3A,0x90,0x06,0x20,0x79,0xA5,0x4C,0xE1,0xA7,0x20,0x6B,0xA9,0x20, + 0x79,0xA5,0x84,0x0B,0x20,0x13,0xA6,0x90,0x44,0xA0,0x01,0xB1,0x5F,0x85,0x23,0xA5, + 0x2D,0x85,0x22,0xA5,0x60,0x85,0x25,0xA5,0x5F,0x88,0xF1,0x5F,0x18,0x65,0x2D,0x85, + 0x2D,0x85,0x24,0xA5,0x2E,0x69,0xFF,0x85,0x2E,0xE5,0x60,0xAA,0x38,0xA5,0x5F,0xE5, + 0x2D,0xA8,0xB0,0x03,0xE8,0xC6,0x25,0x18,0x65,0x22,0x90,0x03,0xC6,0x23,0x18,0xB1, + 0x22,0x91,0x24,0xC8,0xD0,0xF9,0xE6,0x23,0xE6,0x25,0xCA,0xD0,0xF2,0x20,0x59,0xA6, + 0x20,0x33,0xA5,0xAD,0x00,0x02,0xF0,0x88,0x18,0xA5,0x2D,0x85,0x5A,0x65,0x0B,0x85, + 0x58,0xA4,0x2E,0x84,0x5B,0x90,0x01,0xC8,0x84,0x59,0x20,0xB8,0xA3,0xA5,0x14,0xA4, + 0x15,0x8D,0xFE,0x01,0x8C,0xFF,0x01,0xA5,0x31,0xA4,0x32,0x85,0x2D,0x84,0x2E,0xA4, + 0x0B,0x88,0xB9,0xFC,0x01,0x91,0x5F,0x88,0x10,0xF8,0x20,0x59,0xA6,0x20,0x33,0xA5, + 0x4C,0x80,0xA4,0xA5,0x2B,0xA4,0x2C,0x85,0x22,0x84,0x23,0x18,0xA0,0x01,0xB1,0x22, + 0xF0,0x1D,0xA0,0x04,0xC8,0xB1,0x22,0xD0,0xFB,0xC8,0x98,0x65,0x22,0xAA,0xA0,0x00, + 0x91,0x22,0xA5,0x23,0x69,0x00,0xC8,0x91,0x22,0x86,0x22,0x85,0x23,0x90,0xDD,0x60, + 0xA2,0x00,0x20,0x12,0xE1,0xC9,0x0D,0xF0,0x0D,0x9D,0x00,0x02,0xE8,0xE0,0x59,0x90, + 0xF1,0xA2,0x17,0x4C,0x37,0xA4,0x4C,0xCA,0xAA,0x6C,0x04,0x03,0xA6,0x7A,0xA0,0x04, + 0x84,0x0F,0xBD,0x00,0x02,0x10,0x07,0xC9,0xFF,0xF0,0x3E,0xE8,0xD0,0xF4,0xC9,0x20, + 0xF0,0x37,0x85,0x08,0xC9,0x22,0xF0,0x56,0x24,0x0F,0x70,0x2D,0xC9,0x3F,0xD0,0x04, + 0xA9,0x99,0xD0,0x25,0xC9,0x30,0x90,0x04,0xC9,0x3C,0x90,0x1D,0x84,0x71,0xA0,0x00, + 0x84,0x0B,0x88,0x86,0x7A,0xCA,0xC8,0xE8,0xBD,0x00,0x02,0x38,0xF9,0x9E,0xA0,0xF0, + 0xF5,0xC9,0x80,0xD0,0x30,0x05,0x0B,0xA4,0x71,0xE8,0xC8,0x99,0xFB,0x01,0xB9,0xFB, + 0x01,0xF0,0x36,0x38,0xE9,0x3A,0xF0,0x04,0xC9,0x49,0xD0,0x02,0x85,0x0F,0x38,0xE9, + 0x55,0xD0,0x9F,0x85,0x08,0xBD,0x00,0x02,0xF0,0xDF,0xC5,0x08,0xF0,0xDB,0xC8,0x99, + 0xFB,0x01,0xE8,0xD0,0xF0,0xA6,0x7A,0xE6,0x0B,0xC8,0xB9,0x9D,0xA0,0x10,0xFA,0xB9, + 0x9E,0xA0,0xD0,0xB4,0xBD,0x00,0x02,0x10,0xBE,0x99,0xFD,0x01,0xC6,0x7B,0xA9,0xFF, + 0x85,0x7A,0x60,0xA5,0x2B,0xA6,0x2C,0xA0,0x01,0x85,0x5F,0x86,0x60,0xB1,0x5F,0xF0, + 0x1F,0xC8,0xC8,0xA5,0x15,0xD1,0x5F,0x90,0x18,0xF0,0x03,0x88,0xD0,0x09,0xA5,0x14, + 0x88,0xD1,0x5F,0x90,0x0C,0xF0,0x0A,0x88,0xB1,0x5F,0xAA,0x88,0xB1,0x5F,0xB0,0xD7, + 0x18,0x60,0xD0,0xFD,0xA9,0x00,0xA8,0x91,0x2B,0xC8,0x91,0x2B,0xA5,0x2B,0x18,0x69, + 0x02,0x85,0x2D,0xA5,0x2C,0x69,0x00,0x85,0x2E,0x20,0x8E,0xA6,0xA9,0x00,0xD0,0x2D, + 0x20,0xE7,0xFF,0xA5,0x37,0xA4,0x38,0x85,0x33,0x84,0x34,0xA5,0x2D,0xA4,0x2E,0x85, + 0x2F,0x84,0x30,0x85,0x31,0x84,0x32,0x20,0x1D,0xA8,0xA2,0x19,0x86,0x16,0x68,0xA8, + 0x68,0xA2,0xFA,0x9A,0x48,0x98,0x48,0xA9,0x00,0x85,0x3E,0x85,0x10,0x60,0x18,0xA5, + 0x2B,0x69,0xFF,0x85,0x7A,0xA5,0x2C,0x69,0xFF,0x85,0x7B,0x60,0x90,0x06,0xF0,0x04, + 0xC9,0xAB,0xD0,0xE9,0x20,0x6B,0xA9,0x20,0x13,0xA6,0x20,0x79,0x00,0xF0,0x0C,0xC9, + 0xAB,0xD0,0x8E,0x20,0x73,0x00,0x20,0x6B,0xA9,0xD0,0x86,0x68,0x68,0xA5,0x14,0x05, + 0x15,0xD0,0x06,0xA9,0xFF,0x85,0x14,0x85,0x15,0xA0,0x01,0x84,0x0F,0xB1,0x5F,0xF0, + 0x43,0x20,0x2C,0xA8,0x20,0xD7,0xAA,0xC8,0xB1,0x5F,0xAA,0xC8,0xB1,0x5F,0xC5,0x15, + 0xD0,0x04,0xE4,0x14,0xF0,0x02,0xB0,0x2C,0x84,0x49,0x20,0xCD,0xBD,0xA9,0x20,0xA4, + 0x49,0x29,0x7F,0x20,0x47,0xAB,0xC9,0x22,0xD0,0x06,0xA5,0x0F,0x49,0xFF,0x85,0x0F, + 0xC8,0xF0,0x11,0xB1,0x5F,0xD0,0x10,0xA8,0xB1,0x5F,0xAA,0xC8,0xB1,0x5F,0x86,0x5F, + 0x85,0x60,0xD0,0xB5,0x4C,0x86,0xE3,0x6C,0x06,0x03,0x10,0xD7,0xC9,0xFF,0xF0,0xD3, + 0x24,0x0F,0x30,0xCF,0x38,0xE9,0x7F,0xAA,0x84,0x49,0xA0,0xFF,0xCA,0xF0,0x08,0xC8, + 0xB9,0x9E,0xA0,0x10,0xFA,0x30,0xF5,0xC8,0xB9,0x9E,0xA0,0x30,0xB2,0x20,0x47,0xAB, + 0xD0,0xF5,0xA9,0x80,0x85,0x10,0x20,0xA5,0xA9,0x20,0x8A,0xA3,0xD0,0x05,0x8A,0x69, + 0x0F,0xAA,0x9A,0x68,0x68,0xA9,0x09,0x20,0xFB,0xA3,0x20,0x06,0xA9,0x18,0x98,0x65, + 0x7A,0x48,0xA5,0x7B,0x69,0x00,0x48,0xA5,0x3A,0x48,0xA5,0x39,0x48,0xA9,0xA4,0x20, + 0xFF,0xAE,0x20,0x8D,0xAD,0x20,0x8A,0xAD,0xA5,0x66,0x09,0x7F,0x25,0x62,0x85,0x62, + 0xA9,0x8B,0xA0,0xA7,0x85,0x22,0x84,0x23,0x4C,0x43,0xAE,0xA9,0xBC,0xA0,0xB9,0x20, + 0xA2,0xBB,0x20,0x79,0x00,0xC9,0xA9,0xD0,0x06,0x20,0x73,0x00,0x20,0x8A,0xAD,0x20, + 0x2B,0xBC,0x20,0x38,0xAE,0xA5,0x4A,0x48,0xA5,0x49,0x48,0xA9,0x81,0x48,0x20,0x2C, + 0xA8,0xA5,0x7A,0xA4,0x7B,0xC0,0x02,0xEA,0xF0,0x04,0x85,0x3D,0x84,0x3E,0xA0,0x00, + 0xB1,0x7A,0xD0,0x43,0xA0,0x02,0xB1,0x7A,0x18,0xD0,0x03,0x4C,0x4B,0xA8,0xC8,0xB1, + 0x7A,0x85,0x39,0xC8,0xB1,0x7A,0x85,0x3A,0x98,0x65,0x7A,0x85,0x7A,0x90,0x02,0xE6, + 0x7B,0x6C,0x08,0x03,0x20,0x73,0x00,0x20,0xED,0xA7,0x4C,0xAE,0xA7,0xF0,0x3C,0xE9, + 0x80,0x90,0x11,0xC9,0x23,0xB0,0x17,0x0A,0xA8,0xB9,0x0D,0xA0,0x48,0xB9,0x0C,0xA0, + 0x48,0x4C,0x73,0x00,0x4C,0xA5,0xA9,0xC9,0x3A,0xF0,0xD6,0x4C,0x08,0xAF,0xC9,0x4B, + 0xD0,0xF9,0x20,0x73,0x00,0xA9,0xA4,0x20,0xFF,0xAE,0x4C,0xA0,0xA8,0x38,0xA5,0x2B, + 0xE9,0x01,0xA4,0x2C,0xB0,0x01,0x88,0x85,0x41,0x84,0x42,0x60,0x20,0xE1,0xFF,0xB0, + 0x01,0x18,0xD0,0x3C,0xA5,0x7A,0xA4,0x7B,0xA6,0x3A,0xE8,0xF0,0x0C,0x85,0x3D,0x84, + 0x3E,0xA5,0x39,0xA4,0x3A,0x85,0x3B,0x84,0x3C,0x68,0x68,0xA9,0x81,0xA0,0xA3,0x90, + 0x03,0x4C,0x69,0xA4,0x4C,0x86,0xE3,0xD0,0x17,0xA2,0x1A,0xA4,0x3E,0xD0,0x03,0x4C, + 0x37,0xA4,0xA5,0x3D,0x85,0x7A,0x84,0x7B,0xA5,0x3B,0xA4,0x3C,0x85,0x39,0x84,0x3A, + 0x60,0x08,0xA9,0x00,0x20,0x90,0xFF,0x28,0xD0,0x03,0x4C,0x59,0xA6,0x20,0x60,0xA6, + 0x4C,0x97,0xA8,0xA9,0x03,0x20,0xFB,0xA3,0xA5,0x7B,0x48,0xA5,0x7A,0x48,0xA5,0x3A, + 0x48,0xA5,0x39,0x48,0xA9,0x8D,0x48,0x20,0x79,0x00,0x20,0xA0,0xA8,0x4C,0xAE,0xA7, + 0x20,0x6B,0xA9,0x20,0x09,0xA9,0x38,0xA5,0x39,0xE5,0x14,0xA5,0x3A,0xE5,0x15,0xB0, + 0x0B,0x98,0x38,0x65,0x7A,0xA6,0x7B,0x90,0x07,0xE8,0xB0,0x04,0xA5,0x2B,0xA6,0x2C, + 0x20,0x17,0xA6,0x90,0x1E,0xA5,0x5F,0xE9,0x01,0x85,0x7A,0xA5,0x60,0xE9,0x00,0x85, + 0x7B,0x60,0xD0,0xFD,0xA9,0xFF,0x85,0x4A,0x20,0x8A,0xA3,0x9A,0xC9,0x8D,0xF0,0x0B, + 0xA2,0x0C,0x2C,0xA2,0x11,0x4C,0x37,0xA4,0x4C,0x08,0xAF,0x68,0x68,0x85,0x39,0x68, + 0x85,0x3A,0x68,0x85,0x7A,0x68,0x85,0x7B,0x20,0x06,0xA9,0x98,0x18,0x65,0x7A,0x85, + 0x7A,0x90,0x02,0xE6,0x7B,0x60,0xA2,0x3A,0x2C,0xA2,0x00,0x86,0x07,0xA0,0x00,0x84, + 0x08,0xA5,0x08,0xA6,0x07,0x85,0x07,0x86,0x08,0xB1,0x7A,0xF0,0xE8,0xC5,0x08,0xF0, + 0xE4,0xC8,0xC9,0x22,0xD0,0xF3,0xF0,0xE9,0x20,0x9E,0xAD,0x20,0x79,0x00,0xC9,0x89, + 0xF0,0x05,0xA9,0xA7,0x20,0xFF,0xAE,0xA5,0x61,0xD0,0x05,0x20,0x09,0xA9,0xF0,0xBB, + 0x20,0x79,0x00,0xB0,0x03,0x4C,0xA0,0xA8,0x4C,0xED,0xA7,0x20,0x9E,0xB7,0x48,0xC9, + 0x8D,0xF0,0x04,0xC9,0x89,0xD0,0x91,0xC6,0x65,0xD0,0x04,0x68,0x4C,0xEF,0xA7,0x20, + 0x73,0x00,0x20,0x6B,0xA9,0xC9,0x2C,0xF0,0xEE,0x68,0x60,0xA2,0x00,0x86,0x14,0x86, + 0x15,0xB0,0xF7,0xE9,0x2F,0x85,0x07,0xA5,0x15,0x85,0x22,0xC9,0x19,0xB0,0xD4,0xA5, + 0x14,0x0A,0x26,0x22,0x0A,0x26,0x22,0x65,0x14,0x85,0x14,0xA5,0x22,0x65,0x15,0x85, + 0x15,0x06,0x14,0x26,0x15,0xA5,0x14,0x65,0x07,0x85,0x14,0x90,0x02,0xE6,0x15,0x20, + 0x73,0x00,0x4C,0x71,0xA9,0x20,0x8B,0xB0,0x85,0x49,0x84,0x4A,0xA9,0xB2,0x20,0xFF, + 0xAE,0xA5,0x0E,0x48,0xA5,0x0D,0x48,0x20,0x9E,0xAD,0x68,0x2A,0x20,0x90,0xAD,0xD0, + 0x18,0x68,0x10,0x12,0x20,0x1B,0xBC,0x20,0xBF,0xB1,0xA0,0x00,0xA5,0x64,0x91,0x49, + 0xC8,0xA5,0x65,0x91,0x49,0x60,0x4C,0xD0,0xBB,0x68,0xA4,0x4A,0xC0,0xBF,0xD0,0x4C, + 0x20,0xA6,0xB6,0xC9,0x06,0xD0,0x3D,0xA0,0x00,0x84,0x61,0x84,0x66,0x84,0x71,0x20, + 0x1D,0xAA,0x20,0xE2,0xBA,0xE6,0x71,0xA4,0x71,0x20,0x1D,0xAA,0x20,0x0C,0xBC,0xAA, + 0xF0,0x05,0xE8,0x8A,0x20,0xED,0xBA,0xA4,0x71,0xC8,0xC0,0x06,0xD0,0xDF,0x20,0xE2, + 0xBA,0x20,0x9B,0xBC,0xA6,0x64,0xA4,0x63,0xA5,0x65,0x4C,0xDB,0xFF,0xB1,0x22,0x20, + 0x80,0x00,0x90,0x03,0x4C,0x48,0xB2,0xE9,0x2F,0x4C,0x7E,0xBD,0xA0,0x02,0xB1,0x64, + 0xC5,0x34,0x90,0x17,0xD0,0x07,0x88,0xB1,0x64,0xC5,0x33,0x90,0x0E,0xA4,0x65,0xC4, + 0x2E,0x90,0x08,0xD0,0x0D,0xA5,0x64,0xC5,0x2D,0xB0,0x07,0xA5,0x64,0xA4,0x65,0x4C, + 0x68,0xAA,0xA0,0x00,0xB1,0x64,0x20,0x75,0xB4,0xA5,0x50,0xA4,0x51,0x85,0x6F,0x84, + 0x70,0x20,0x7A,0xB6,0xA9,0x61,0xA0,0x00,0x85,0x50,0x84,0x51,0x20,0xDB,0xB6,0xA0, + 0x00,0xB1,0x50,0x91,0x49,0xC8,0xB1,0x50,0x91,0x49,0xC8,0xB1,0x50,0x91,0x49,0x60, + 0x20,0x86,0xAA,0x4C,0xB5,0xAB,0x20,0x9E,0xB7,0xF0,0x05,0xA9,0x2C,0x20,0xFF,0xAE, + 0x08,0x86,0x13,0x20,0x18,0xE1,0x28,0x4C,0xA0,0xAA,0x20,0x21,0xAB,0x20,0x79,0x00, + 0xF0,0x35,0xF0,0x43,0xC9,0xA3,0xF0,0x50,0xC9,0xA6,0x18,0xF0,0x4B,0xC9,0x2C,0xF0, + 0x37,0xC9,0x3B,0xF0,0x5E,0x20,0x9E,0xAD,0x24,0x0D,0x30,0xDE,0x20,0xDD,0xBD,0x20, + 0x87,0xB4,0x20,0x21,0xAB,0x20,0x3B,0xAB,0xD0,0xD3,0xA9,0x00,0x9D,0x00,0x02,0xA2, + 0xFF,0xA0,0x01,0xA5,0x13,0xD0,0x10,0xA9,0x0D,0x20,0x47,0xAB,0x24,0x13,0x10,0x05, + 0xA9,0x0A,0x20,0x47,0xAB,0x49,0xFF,0x60,0x38,0x20,0xF0,0xFF,0x98,0x38,0xE9,0x0A, + 0xB0,0xFC,0x49,0xFF,0x69,0x01,0xD0,0x16,0x08,0x38,0x20,0xF0,0xFF,0x84,0x09,0x20, + 0x9B,0xB7,0xC9,0x29,0xD0,0x59,0x28,0x90,0x06,0x8A,0xE5,0x09,0x90,0x05,0xAA,0xE8, + 0xCA,0xD0,0x06,0x20,0x73,0x00,0x4C,0xA2,0xAA,0x20,0x3B,0xAB,0xD0,0xF2,0x20,0x87, + 0xB4,0x20,0xA6,0xB6,0xAA,0xA0,0x00,0xE8,0xCA,0xF0,0xBC,0xB1,0x22,0x20,0x47,0xAB, + 0xC8,0xC9,0x0D,0xD0,0xF3,0x20,0xE5,0xAA,0x4C,0x28,0xAB,0xA5,0x13,0xF0,0x03,0xA9, + 0x20,0x2C,0xA9,0x1D,0x2C,0xA9,0x3F,0x20,0x0C,0xE1,0x29,0xFF,0x60,0xA5,0x11,0xF0, + 0x11,0x30,0x04,0xA0,0xFF,0xD0,0x04,0xA5,0x3F,0xA4,0x40,0x85,0x39,0x84,0x3A,0x4C, + 0x08,0xAF,0xA5,0x13,0xF0,0x05,0xA2,0x18,0x4C,0x37,0xA4,0xA9,0x0C,0xA0,0xAD,0x20, + 0x1E,0xAB,0xA5,0x3D,0xA4,0x3E,0x85,0x7A,0x84,0x7B,0x60,0x20,0xA6,0xB3,0xC9,0x23, + 0xD0,0x10,0x20,0x73,0x00,0x20,0x9E,0xB7,0xA9,0x2C,0x20,0xFF,0xAE,0x86,0x13,0x20, + 0x1E,0xE1,0xA2,0x01,0xA0,0x02,0xA9,0x00,0x8D,0x01,0x02,0xA9,0x40,0x20,0x0F,0xAC, + 0xA6,0x13,0xD0,0x13,0x60,0x20,0x9E,0xB7,0xA9,0x2C,0x20,0xFF,0xAE,0x86,0x13,0x20, + 0x1E,0xE1,0x20,0xCE,0xAB,0xA5,0x13,0x20,0xCC,0xFF,0xA2,0x00,0x86,0x13,0x60,0xC9, + 0x22,0xD0,0x0B,0x20,0xBD,0xAE,0xA9,0x3B,0x20,0xFF,0xAE,0x20,0x21,0xAB,0x20,0xA6, + 0xB3,0xA9,0x2C,0x8D,0xFF,0x01,0x20,0xF9,0xAB,0xA5,0x13,0xF0,0x0D,0x20,0xB7,0xFF, + 0x29,0x02,0xF0,0x06,0x20,0xB5,0xAB,0x4C,0xF8,0xA8,0xAD,0x00,0x02,0xD0,0x1E,0xA5, + 0x13,0xD0,0xE3,0x20,0x06,0xA9,0x4C,0xFB,0xA8,0xA5,0x13,0xD0,0x06,0x20,0x45,0xAB, + 0x20,0x3B,0xAB,0x4C,0x60,0xA5,0xA6,0x41,0xA4,0x42,0xA9,0x98,0x2C,0xA9,0x00,0x85, + 0x11,0x86,0x43,0x84,0x44,0x20,0x8B,0xB0,0x85,0x49,0x84,0x4A,0xA5,0x7A,0xA4,0x7B, + 0x85,0x4B,0x84,0x4C,0xA6,0x43,0xA4,0x44,0x86,0x7A,0x84,0x7B,0x20,0x79,0x00,0xD0, + 0x20,0x24,0x11,0x50,0x0C,0x20,0x24,0xE1,0x8D,0x00,0x02,0xA2,0xFF,0xA0,0x01,0xD0, + 0x0C,0x30,0x75,0xA5,0x13,0xD0,0x03,0x20,0x45,0xAB,0x20,0xF9,0xAB,0x86,0x7A,0x84, + 0x7B,0x20,0x73,0x00,0x24,0x0D,0x10,0x31,0x24,0x11,0x50,0x09,0xE8,0x86,0x7A,0xA9, + 0x00,0x85,0x07,0xF0,0x0C,0x85,0x07,0xC9,0x22,0xF0,0x07,0xA9,0x3A,0x85,0x07,0xA9, + 0x2C,0x18,0x85,0x08,0xA5,0x7A,0xA4,0x7B,0x69,0x00,0x90,0x01,0xC8,0x20,0x8D,0xB4, + 0x20,0xE2,0xB7,0x20,0xDA,0xA9,0x4C,0x91,0xAC,0x20,0xF3,0xBC,0xA5,0x0E,0x20,0xC2, + 0xA9,0x20,0x79,0x00,0xF0,0x07,0xC9,0x2C,0xF0,0x03,0x4C,0x4D,0xAB,0xA5,0x7A,0xA4, + 0x7B,0x85,0x43,0x84,0x44,0xA5,0x4B,0xA4,0x4C,0x85,0x7A,0x84,0x7B,0x20,0x79,0x00, + 0xF0,0x2D,0x20,0xFD,0xAE,0x4C,0x15,0xAC,0x20,0x06,0xA9,0xC8,0xAA,0xD0,0x12,0xA2, + 0x0D,0xC8,0xB1,0x7A,0xF0,0x6C,0xC8,0xB1,0x7A,0x85,0x3F,0xC8,0xB1,0x7A,0xC8,0x85, + 0x40,0x20,0xFB,0xA8,0x20,0x79,0x00,0xAA,0xE0,0x83,0xD0,0xDC,0x4C,0x51,0xAC,0xA5, + 0x43,0xA4,0x44,0xA6,0x11,0x10,0x03,0x4C,0x27,0xA8,0xA0,0x00,0xB1,0x43,0xF0,0x0B, + 0xA5,0x13,0xD0,0x07,0xA9,0xFC,0xA0,0xAC,0x4C,0x1E,0xAB,0x60,0x3F,0x45,0x58,0x54, + 0x52,0x41,0x20,0x49,0x47,0x4E,0x4F,0x52,0x45,0x44,0x0D,0x00,0x3F,0x52,0x45,0x44, + 0x4F,0x20,0x46,0x52,0x4F,0x4D,0x20,0x53,0x54,0x41,0x52,0x54,0x0D,0x00,0xD0,0x04, + 0xA0,0x00,0xF0,0x03,0x20,0x8B,0xB0,0x85,0x49,0x84,0x4A,0x20,0x8A,0xA3,0xF0,0x05, + 0xA2,0x0A,0x4C,0x37,0xA4,0x9A,0x8A,0x18,0x69,0x04,0x48,0x69,0x06,0x85,0x24,0x68, + 0xA0,0x01,0x20,0xA2,0xBB,0xBA,0xBD,0x09,0x01,0x85,0x66,0xA5,0x49,0xA4,0x4A,0x20, + 0x67,0xB8,0x20,0xD0,0xBB,0xA0,0x01,0x20,0x5D,0xBC,0xBA,0x38,0xFD,0x09,0x01,0xF0, + 0x17,0xBD,0x0F,0x01,0x85,0x39,0xBD,0x10,0x01,0x85,0x3A,0xBD,0x12,0x01,0x85,0x7A, + 0xBD,0x11,0x01,0x85,0x7B,0x4C,0xAE,0xA7,0x8A,0x69,0x11,0xAA,0x9A,0x20,0x79,0x00, + 0xC9,0x2C,0xD0,0xF1,0x20,0x73,0x00,0x20,0x24,0xAD,0x20,0x9E,0xAD,0x18,0x24,0x38, + 0x24,0x0D,0x30,0x03,0xB0,0x03,0x60,0xB0,0xFD,0xA2,0x16,0x4C,0x37,0xA4,0xA6,0x7A, + 0xD0,0x02,0xC6,0x7B,0xC6,0x7A,0xA2,0x00,0x24,0x48,0x8A,0x48,0xA9,0x01,0x20,0xFB, + 0xA3,0x20,0x83,0xAE,0xA9,0x00,0x85,0x4D,0x20,0x79,0x00,0x38,0xE9,0xB1,0x90,0x17, + 0xC9,0x03,0xB0,0x13,0xC9,0x01,0x2A,0x49,0x01,0x45,0x4D,0xC5,0x4D,0x90,0x61,0x85, + 0x4D,0x20,0x73,0x00,0x4C,0xBB,0xAD,0xA6,0x4D,0xD0,0x2C,0xB0,0x7B,0x69,0x07,0x90, + 0x77,0x65,0x0D,0xD0,0x03,0x4C,0x3D,0xB6,0x69,0xFF,0x85,0x22,0x0A,0x65,0x22,0xA8, + 0x68,0xD9,0x80,0xA0,0xB0,0x67,0x20,0x8D,0xAD,0x48,0x20,0x20,0xAE,0x68,0xA4,0x4B, + 0x10,0x17,0xAA,0xF0,0x56,0xD0,0x5F,0x46,0x0D,0x8A,0x2A,0xA6,0x7A,0xD0,0x02,0xC6, + 0x7B,0xC6,0x7A,0xA0,0x1B,0x85,0x4D,0xD0,0xD7,0xD9,0x80,0xA0,0xB0,0x48,0x90,0xD9, + 0xB9,0x82,0xA0,0x48,0xB9,0x81,0xA0,0x48,0x20,0x33,0xAE,0xA5,0x4D,0x4C,0xA9,0xAD, + 0x4C,0x08,0xAF,0xA5,0x66,0xBE,0x80,0xA0,0xA8,0x68,0x85,0x22,0xE6,0x22,0x68,0x85, + 0x23,0x98,0x48,0x20,0x1B,0xBC,0xA5,0x65,0x48,0xA5,0x64,0x48,0xA5,0x63,0x48,0xA5, + 0x62,0x48,0xA5,0x61,0x48,0x6C,0x22,0x00,0xA0,0xFF,0x68,0xF0,0x23,0xC9,0x64,0xF0, + 0x03,0x20,0x8D,0xAD,0x84,0x4B,0x68,0x4A,0x85,0x12,0x68,0x85,0x69,0x68,0x85,0x6A, + 0x68,0x85,0x6B,0x68,0x85,0x6C,0x68,0x85,0x6D,0x68,0x85,0x6E,0x45,0x66,0x85,0x6F, + 0xA5,0x61,0x60,0x6C,0x0A,0x03,0xA9,0x00,0x85,0x0D,0x20,0x73,0x00,0xB0,0x03,0x4C, + 0xF3,0xBC,0x20,0x13,0xB1,0x90,0x03,0x4C,0x28,0xAF,0xC9,0xFF,0xD0,0x0F,0xA9,0xA8, + 0xA0,0xAE,0x20,0xA2,0xBB,0x4C,0x73,0x00,0x82,0x49,0x0F,0xDA,0xA1,0xC9,0x2E,0xF0, + 0xDE,0xC9,0xAB,0xF0,0x58,0xC9,0xAA,0xF0,0xD1,0xC9,0x22,0xD0,0x0F,0xA5,0x7A,0xA4, + 0x7B,0x69,0x00,0x90,0x01,0xC8,0x20,0x87,0xB4,0x4C,0xE2,0xB7,0xC9,0xA8,0xD0,0x13, + 0xA0,0x18,0xD0,0x3B,0x20,0xBF,0xB1,0xA5,0x65,0x49,0xFF,0xA8,0xA5,0x64,0x49,0xFF, + 0x4C,0x91,0xB3,0xC9,0xA5,0xD0,0x03,0x4C,0xF4,0xB3,0xC9,0xB4,0x90,0x03,0x4C,0xA7, + 0xAF,0x20,0xFA,0xAE,0x20,0x9E,0xAD,0xA9,0x29,0x2C,0xA9,0x28,0x2C,0xA9,0x2C,0xA0, + 0x00,0xD1,0x7A,0xD0,0x03,0x4C,0x73,0x00,0xA2,0x0B,0x4C,0x37,0xA4,0xA0,0x15,0x68, + 0x68,0x4C,0xFA,0xAD,0x38,0xA5,0x64,0xE9,0x00,0xA5,0x65,0xE9,0xA0,0x90,0x08,0xA9, + 0xA2,0xE5,0x64,0xA9,0xE3,0xE5,0x65,0x60,0x20,0x8B,0xB0,0x85,0x64,0x84,0x65,0xA6, + 0x45,0xA4,0x46,0xA5,0x0D,0xF0,0x26,0xA9,0x00,0x85,0x70,0x20,0x14,0xAF,0x90,0x1C, + 0xE0,0x54,0xD0,0x18,0xC0,0xC9,0xD0,0x14,0x20,0x84,0xAF,0x84,0x5E,0x88,0x84,0x71, + 0xA0,0x06,0x84,0x5D,0xA0,0x24,0x20,0x68,0xBE,0x4C,0x6F,0xB4,0x60,0x24,0x0E,0x10, + 0x0D,0xA0,0x00,0xB1,0x64,0xAA,0xC8,0xB1,0x64,0xA8,0x8A,0x4C,0x91,0xB3,0x20,0x14, + 0xAF,0x90,0x2D,0xE0,0x54,0xD0,0x1B,0xC0,0x49,0xD0,0x25,0x20,0x84,0xAF,0x98,0xA2, + 0xA0,0x4C,0x4F,0xBC,0x20,0xDE,0xFF,0x86,0x64,0x84,0x63,0x85,0x65,0xA0,0x00,0x84, + 0x62,0x60,0xE0,0x53,0xD0,0x0A,0xC0,0x54,0xD0,0x06,0x20,0xB7,0xFF,0x4C,0x3C,0xBC, + 0xA5,0x64,0xA4,0x65,0x4C,0xA2,0xBB,0x0A,0x48,0xAA,0x20,0x73,0x00,0xE0,0x8F,0x90, + 0x20,0x20,0xFA,0xAE,0x20,0x9E,0xAD,0x20,0xFD,0xAE,0x20,0x8F,0xAD,0x68,0xAA,0xA5, + 0x65,0x48,0xA5,0x64,0x48,0x8A,0x48,0x20,0x9E,0xB7,0x68,0xA8,0x8A,0x48,0x4C,0xD6, + 0xAF,0x20,0xF1,0xAE,0x68,0xA8,0xB9,0xEA,0x9F,0x85,0x55,0xB9,0xEB,0x9F,0x85,0x56, + 0x20,0x54,0x00,0x4C,0x8D,0xAD,0xA0,0xFF,0x2C,0xA0,0x00,0x84,0x0B,0x20,0xBF,0xB1, + 0xA5,0x64,0x45,0x0B,0x85,0x07,0xA5,0x65,0x45,0x0B,0x85,0x08,0x20,0xFC,0xBB,0x20, + 0xBF,0xB1,0xA5,0x65,0x45,0x0B,0x25,0x08,0x45,0x0B,0xA8,0xA5,0x64,0x45,0x0B,0x25, + 0x07,0x45,0x0B,0x4C,0x91,0xB3,0x20,0x90,0xAD,0xB0,0x13,0xA5,0x6E,0x09,0x7F,0x25, + 0x6A,0x85,0x6A,0xA9,0x69,0xA0,0x00,0x20,0x5B,0xBC,0xAA,0x4C,0x61,0xB0,0xA9,0x00, + 0x85,0x0D,0xC6,0x4D,0x20,0xA6,0xB6,0x85,0x61,0x86,0x62,0x84,0x63,0xA5,0x6C,0xA4, + 0x6D,0x20,0xAA,0xB6,0x86,0x6C,0x84,0x6D,0xAA,0x38,0xE5,0x61,0xF0,0x08,0xA9,0x01, + 0x90,0x04,0xA6,0x61,0xA9,0xFF,0x85,0x66,0xA0,0xFF,0xE8,0xC8,0xCA,0xD0,0x07,0xA6, + 0x66,0x30,0x0F,0x18,0x90,0x0C,0xB1,0x6C,0xD1,0x62,0xF0,0xEF,0xA2,0xFF,0xB0,0x02, + 0xA2,0x01,0xE8,0x8A,0x2A,0x25,0x12,0xF0,0x02,0xA9,0xFF,0x4C,0x3C,0xBC,0x20,0xFD, + 0xAE,0xAA,0x20,0x90,0xB0,0x20,0x79,0x00,0xD0,0xF4,0x60,0xA2,0x00,0x20,0x79,0x00, + 0x86,0x0C,0x85,0x45,0x20,0x79,0x00,0x20,0x13,0xB1,0xB0,0x03,0x4C,0x08,0xAF,0xA2, + 0x00,0x86,0x0D,0x86,0x0E,0x20,0x73,0x00,0x90,0x05,0x20,0x13,0xB1,0x90,0x0B,0xAA, + 0x20,0x73,0x00,0x90,0xFB,0x20,0x13,0xB1,0xB0,0xF6,0xC9,0x24,0xD0,0x06,0xA9,0xFF, + 0x85,0x0D,0xD0,0x10,0xC9,0x25,0xD0,0x13,0xA5,0x10,0xD0,0xD0,0xA9,0x80,0x85,0x0E, + 0x05,0x45,0x85,0x45,0x8A,0x09,0x80,0xAA,0x20,0x73,0x00,0x86,0x46,0x38,0x05,0x10, + 0xE9,0x28,0xD0,0x03,0x4C,0xD1,0xB1,0xA0,0x00,0x84,0x10,0xA5,0x2D,0xA6,0x2E,0x86, + 0x60,0x85,0x5F,0xE4,0x30,0xD0,0x04,0xC5,0x2F,0xF0,0x22,0xA5,0x45,0xD1,0x5F,0xD0, + 0x08,0xA5,0x46,0xC8,0xD1,0x5F,0xF0,0x7D,0x88,0x18,0xA5,0x5F,0x69,0x07,0x90,0xE1, + 0xE8,0xD0,0xDC,0xC9,0x41,0x90,0x05,0xE9,0x5B,0x38,0xE9,0xA5,0x60,0x68,0x48,0xC9, + 0x2A,0xD0,0x05,0xA9,0x13,0xA0,0xBF,0x60,0xA5,0x45,0xA4,0x46,0xC9,0x54,0xD0,0x0B, + 0xC0,0xC9,0xF0,0xEF,0xC0,0x49,0xD0,0x03,0x4C,0x08,0xAF,0xC9,0x53,0xD0,0x04,0xC0, + 0x54,0xF0,0xF5,0xA5,0x2F,0xA4,0x30,0x85,0x5F,0x84,0x60,0xA5,0x31,0xA4,0x32,0x85, + 0x5A,0x84,0x5B,0x18,0x69,0x07,0x90,0x01,0xC8,0x85,0x58,0x84,0x59,0x20,0xB8,0xA3, + 0xA5,0x58,0xA4,0x59,0xC8,0x85,0x2F,0x84,0x30,0xA0,0x00,0xA5,0x45,0x91,0x5F,0xC8, + 0xA5,0x46,0x91,0x5F,0xA9,0x00,0xC8,0x91,0x5F,0xC8,0x91,0x5F,0xC8,0x91,0x5F,0xC8, + 0x91,0x5F,0xC8,0x91,0x5F,0xA5,0x5F,0x18,0x69,0x02,0xA4,0x60,0x90,0x01,0xC8,0x85, + 0x47,0x84,0x48,0x60,0xA5,0x0B,0x0A,0x69,0x05,0x65,0x5F,0xA4,0x60,0x90,0x01,0xC8, + 0x85,0x58,0x84,0x59,0x60,0x90,0x80,0x00,0x00,0x00,0x20,0xBF,0xB1,0xA5,0x64,0xA4, + 0x65,0x60,0x20,0x73,0x00,0x20,0x9E,0xAD,0x20,0x8D,0xAD,0xA5,0x66,0x30,0x0D,0xA5, + 0x61,0xC9,0x90,0x90,0x09,0xA9,0xA5,0xA0,0xB1,0x20,0x5B,0xBC,0xD0,0x7A,0x4C,0x9B, + 0xBC,0xA5,0x0C,0x05,0x0E,0x48,0xA5,0x0D,0x48,0xA0,0x00,0x98,0x48,0xA5,0x46,0x48, + 0xA5,0x45,0x48,0x20,0xB2,0xB1,0x68,0x85,0x45,0x68,0x85,0x46,0x68,0xA8,0xBA,0xBD, + 0x02,0x01,0x48,0xBD,0x01,0x01,0x48,0xA5,0x64,0x9D,0x02,0x01,0xA5,0x65,0x9D,0x01, + 0x01,0xC8,0x20,0x79,0x00,0xC9,0x2C,0xF0,0xD2,0x84,0x0B,0x20,0xF7,0xAE,0x68,0x85, + 0x0D,0x68,0x85,0x0E,0x29,0x7F,0x85,0x0C,0xA6,0x2F,0xA5,0x30,0x86,0x5F,0x85,0x60, + 0xC5,0x32,0xD0,0x04,0xE4,0x31,0xF0,0x39,0xA0,0x00,0xB1,0x5F,0xC8,0xC5,0x45,0xD0, + 0x06,0xA5,0x46,0xD1,0x5F,0xF0,0x16,0xC8,0xB1,0x5F,0x18,0x65,0x5F,0xAA,0xC8,0xB1, + 0x5F,0x65,0x60,0x90,0xD7,0xA2,0x12,0x2C,0xA2,0x0E,0x4C,0x37,0xA4,0xA2,0x13,0xA5, + 0x0C,0xD0,0xF7,0x20,0x94,0xB1,0xA5,0x0B,0xA0,0x04,0xD1,0x5F,0xD0,0xE7,0x4C,0xEA, + 0xB2,0x20,0x94,0xB1,0x20,0x08,0xA4,0xA0,0x00,0x84,0x72,0xA2,0x05,0xA5,0x45,0x91, + 0x5F,0x10,0x01,0xCA,0xC8,0xA5,0x46,0x91,0x5F,0x10,0x02,0xCA,0xCA,0x86,0x71,0xA5, + 0x0B,0xC8,0xC8,0xC8,0x91,0x5F,0xA2,0x0B,0xA9,0x00,0x24,0x0C,0x50,0x08,0x68,0x18, + 0x69,0x01,0xAA,0x68,0x69,0x00,0xC8,0x91,0x5F,0xC8,0x8A,0x91,0x5F,0x20,0x4C,0xB3, + 0x86,0x71,0x85,0x72,0xA4,0x22,0xC6,0x0B,0xD0,0xDC,0x65,0x59,0xB0,0x5D,0x85,0x59, + 0xA8,0x8A,0x65,0x58,0x90,0x03,0xC8,0xF0,0x52,0x20,0x08,0xA4,0x85,0x31,0x84,0x32, + 0xA9,0x00,0xE6,0x72,0xA4,0x71,0xF0,0x05,0x88,0x91,0x58,0xD0,0xFB,0xC6,0x59,0xC6, + 0x72,0xD0,0xF5,0xE6,0x59,0x38,0xA5,0x31,0xE5,0x5F,0xA0,0x02,0x91,0x5F,0xA5,0x32, + 0xC8,0xE5,0x60,0x91,0x5F,0xA5,0x0C,0xD0,0x62,0xC8,0xB1,0x5F,0x85,0x0B,0xA9,0x00, + 0x85,0x71,0x85,0x72,0xC8,0x68,0xAA,0x85,0x64,0x68,0x85,0x65,0xD1,0x5F,0x90,0x0E, + 0xD0,0x06,0xC8,0x8A,0xD1,0x5F,0x90,0x07,0x4C,0x45,0xB2,0x4C,0x35,0xA4,0xC8,0xA5, + 0x72,0x05,0x71,0x18,0xF0,0x0A,0x20,0x4C,0xB3,0x8A,0x65,0x64,0xAA,0x98,0xA4,0x22, + 0x65,0x65,0x86,0x71,0xC6,0x0B,0xD0,0xCA,0x85,0x72,0xA2,0x05,0xA5,0x45,0x10,0x01, + 0xCA,0xA5,0x46,0x10,0x02,0xCA,0xCA,0x86,0x28,0xA9,0x00,0x20,0x55,0xB3,0x8A,0x65, + 0x58,0x85,0x47,0x98,0x65,0x59,0x85,0x48,0xA8,0xA5,0x47,0x60,0x84,0x22,0xB1,0x5F, + 0x85,0x28,0x88,0xB1,0x5F,0x85,0x29,0xA9,0x10,0x85,0x5D,0xA2,0x00,0xA0,0x00,0x8A, + 0x0A,0xAA,0x98,0x2A,0xA8,0xB0,0xA4,0x06,0x71,0x26,0x72,0x90,0x0B,0x18,0x8A,0x65, + 0x28,0xAA,0x98,0x65,0x29,0xA8,0xB0,0x93,0xC6,0x5D,0xD0,0xE3,0x60,0xA5,0x0D,0xF0, + 0x03,0x20,0xA6,0xB6,0x20,0x26,0xB5,0x38,0xA5,0x33,0xE5,0x31,0xA8,0xA5,0x34,0xE5, + 0x32,0xA2,0x00,0x86,0x0D,0x85,0x62,0x84,0x63,0xA2,0x90,0x4C,0x44,0xBC,0x38,0x20, + 0xF0,0xFF,0xA9,0x00,0xF0,0xEB,0xA6,0x3A,0xE8,0xD0,0xA0,0xA2,0x15,0x2C,0xA2,0x1B, + 0x4C,0x37,0xA4,0x20,0xE1,0xB3,0x20,0xA6,0xB3,0x20,0xFA,0xAE,0xA9,0x80,0x85,0x10, + 0x20,0x8B,0xB0,0x20,0x8D,0xAD,0x20,0xF7,0xAE,0xA9,0xB2,0x20,0xFF,0xAE,0x48,0xA5, + 0x48,0x48,0xA5,0x47,0x48,0xA5,0x7B,0x48,0xA5,0x7A,0x48,0x20,0xF8,0xA8,0x4C,0x4F, + 0xB4,0xA9,0xA5,0x20,0xFF,0xAE,0x09,0x80,0x85,0x10,0x20,0x92,0xB0,0x85,0x4E,0x84, + 0x4F,0x4C,0x8D,0xAD,0x20,0xE1,0xB3,0xA5,0x4F,0x48,0xA5,0x4E,0x48,0x20,0xF1,0xAE, + 0x20,0x8D,0xAD,0x68,0x85,0x4E,0x68,0x85,0x4F,0xA0,0x02,0xB1,0x4E,0x85,0x47,0xAA, + 0xC8,0xB1,0x4E,0xF0,0x99,0x85,0x48,0xC8,0xB1,0x47,0x48,0x88,0x10,0xFA,0xA4,0x48, + 0x20,0xD4,0xBB,0xA5,0x7B,0x48,0xA5,0x7A,0x48,0xB1,0x4E,0x85,0x7A,0xC8,0xB1,0x4E, + 0x85,0x7B,0xA5,0x48,0x48,0xA5,0x47,0x48,0x20,0x8A,0xAD,0x68,0x85,0x4E,0x68,0x85, + 0x4F,0x20,0x79,0x00,0xF0,0x03,0x4C,0x08,0xAF,0x68,0x85,0x7A,0x68,0x85,0x7B,0xA0, + 0x00,0x68,0x91,0x4E,0x68,0xC8,0x91,0x4E,0x68,0xC8,0x91,0x4E,0x68,0xC8,0x91,0x4E, + 0x68,0xC8,0x91,0x4E,0x60,0x20,0x8D,0xAD,0xA0,0x00,0x20,0xDF,0xBD,0x68,0x68,0xA9, + 0xFF,0xA0,0x00,0xF0,0x12,0xA6,0x64,0xA4,0x65,0x86,0x50,0x84,0x51,0x20,0xF4,0xB4, + 0x86,0x62,0x84,0x63,0x85,0x61,0x60,0xA2,0x22,0x86,0x07,0x86,0x08,0x85,0x6F,0x84, + 0x70,0x85,0x62,0x84,0x63,0xA0,0xFF,0xC8,0xB1,0x6F,0xF0,0x0C,0xC5,0x07,0xF0,0x04, + 0xC5,0x08,0xD0,0xF3,0xC9,0x22,0xF0,0x01,0x18,0x84,0x61,0x98,0x65,0x6F,0x85,0x71, + 0xA6,0x70,0x90,0x01,0xE8,0x86,0x72,0xA5,0x70,0xF0,0x04,0xC9,0x02,0xD0,0x0B,0x98, + 0x20,0x75,0xB4,0xA6,0x6F,0xA4,0x70,0x20,0x88,0xB6,0xA6,0x16,0xE0,0x22,0xD0,0x05, + 0xA2,0x19,0x4C,0x37,0xA4,0xA5,0x61,0x95,0x00,0xA5,0x62,0x95,0x01,0xA5,0x63,0x95, + 0x02,0xA0,0x00,0x86,0x64,0x84,0x65,0x84,0x70,0x88,0x84,0x0D,0x86,0x17,0xE8,0xE8, + 0xE8,0x86,0x16,0x60,0x46,0x0F,0x48,0x49,0xFF,0x38,0x65,0x33,0xA4,0x34,0xB0,0x01, + 0x88,0xC4,0x32,0x90,0x11,0xD0,0x04,0xC5,0x31,0x90,0x0B,0x85,0x33,0x84,0x34,0x85, + 0x35,0x84,0x36,0xAA,0x68,0x60,0xA2,0x10,0xA5,0x0F,0x30,0xB6,0x20,0x26,0xB5,0xA9, + 0x80,0x85,0x0F,0x68,0xD0,0xD0,0xA6,0x37,0xA5,0x38,0x86,0x33,0x85,0x34,0xA0,0x00, + 0x84,0x4F,0x84,0x4E,0xA5,0x31,0xA6,0x32,0x85,0x5F,0x86,0x60,0xA9,0x19,0xA2,0x00, + 0x85,0x22,0x86,0x23,0xC5,0x16,0xF0,0x05,0x20,0xC7,0xB5,0xF0,0xF7,0xA9,0x07,0x85, + 0x53,0xA5,0x2D,0xA6,0x2E,0x85,0x22,0x86,0x23,0xE4,0x30,0xD0,0x04,0xC5,0x2F,0xF0, + 0x05,0x20,0xBD,0xB5,0xF0,0xF3,0x85,0x58,0x86,0x59,0xA9,0x03,0x85,0x53,0xA5,0x58, + 0xA6,0x59,0xE4,0x32,0xD0,0x07,0xC5,0x31,0xD0,0x03,0x4C,0x06,0xB6,0x85,0x22,0x86, + 0x23,0xA0,0x00,0xB1,0x22,0xAA,0xC8,0xB1,0x22,0x08,0xC8,0xB1,0x22,0x65,0x58,0x85, + 0x58,0xC8,0xB1,0x22,0x65,0x59,0x85,0x59,0x28,0x10,0xD3,0x8A,0x30,0xD0,0xC8,0xB1, + 0x22,0xA0,0x00,0x0A,0x69,0x05,0x65,0x22,0x85,0x22,0x90,0x02,0xE6,0x23,0xA6,0x23, + 0xE4,0x59,0xD0,0x04,0xC5,0x58,0xF0,0xBA,0x20,0xC7,0xB5,0xF0,0xF3,0xB1,0x22,0x30, + 0x35,0xC8,0xB1,0x22,0x10,0x30,0xC8,0xB1,0x22,0xF0,0x2B,0xC8,0xB1,0x22,0xAA,0xC8, + 0xB1,0x22,0xC5,0x34,0x90,0x06,0xD0,0x1E,0xE4,0x33,0xB0,0x1A,0xC5,0x60,0x90,0x16, + 0xD0,0x04,0xE4,0x5F,0x90,0x10,0x86,0x5F,0x85,0x60,0xA5,0x22,0xA6,0x23,0x85,0x4E, + 0x86,0x4F,0xA5,0x53,0x85,0x55,0xA5,0x53,0x18,0x65,0x22,0x85,0x22,0x90,0x02,0xE6, + 0x23,0xA6,0x23,0xA0,0x00,0x60,0xA5,0x4F,0x05,0x4E,0xF0,0xF5,0xA5,0x55,0x29,0x04, + 0x4A,0xA8,0x85,0x55,0xB1,0x4E,0x65,0x5F,0x85,0x5A,0xA5,0x60,0x69,0x00,0x85,0x5B, + 0xA5,0x33,0xA6,0x34,0x85,0x58,0x86,0x59,0x20,0xBF,0xA3,0xA4,0x55,0xC8,0xA5,0x58, + 0x91,0x4E,0xAA,0xE6,0x59,0xA5,0x59,0xC8,0x91,0x4E,0x4C,0x2A,0xB5,0xA5,0x65,0x48, + 0xA5,0x64,0x48,0x20,0x83,0xAE,0x20,0x8F,0xAD,0x68,0x85,0x6F,0x68,0x85,0x70,0xA0, + 0x00,0xB1,0x6F,0x18,0x71,0x64,0x90,0x05,0xA2,0x17,0x4C,0x37,0xA4,0x20,0x75,0xB4, + 0x20,0x7A,0xB6,0xA5,0x50,0xA4,0x51,0x20,0xAA,0xB6,0x20,0x8C,0xB6,0xA5,0x6F,0xA4, + 0x70,0x20,0xAA,0xB6,0x20,0xCA,0xB4,0x4C,0xB8,0xAD,0xA0,0x00,0xB1,0x6F,0x48,0xC8, + 0xB1,0x6F,0xAA,0xC8,0xB1,0x6F,0xA8,0x68,0x86,0x22,0x84,0x23,0xA8,0xF0,0x0A,0x48, + 0x88,0xB1,0x22,0x91,0x35,0x98,0xD0,0xF8,0x68,0x18,0x65,0x35,0x85,0x35,0x90,0x02, + 0xE6,0x36,0x60,0x20,0x8F,0xAD,0xA5,0x64,0xA4,0x65,0x85,0x22,0x84,0x23,0x20,0xDB, + 0xB6,0x08,0xA0,0x00,0xB1,0x22,0x48,0xC8,0xB1,0x22,0xAA,0xC8,0xB1,0x22,0xA8,0x68, + 0x28,0xD0,0x13,0xC4,0x34,0xD0,0x0F,0xE4,0x33,0xD0,0x0B,0x48,0x18,0x65,0x33,0x85, + 0x33,0x90,0x02,0xE6,0x34,0x68,0x86,0x22,0x84,0x23,0x60,0xC4,0x18,0xD0,0x0C,0xC5, + 0x17,0xD0,0x08,0x85,0x16,0xE9,0x03,0x85,0x17,0xA0,0x00,0x60,0x20,0xA1,0xB7,0x8A, + 0x48,0xA9,0x01,0x20,0x7D,0xB4,0x68,0xA0,0x00,0x91,0x62,0x68,0x68,0x4C,0xCA,0xB4, + 0x20,0x61,0xB7,0xD1,0x50,0x98,0x90,0x04,0xB1,0x50,0xAA,0x98,0x48,0x8A,0x48,0x20, + 0x7D,0xB4,0xA5,0x50,0xA4,0x51,0x20,0xAA,0xB6,0x68,0xA8,0x68,0x18,0x65,0x22,0x85, + 0x22,0x90,0x02,0xE6,0x23,0x98,0x20,0x8C,0xB6,0x4C,0xCA,0xB4,0x20,0x61,0xB7,0x18, + 0xF1,0x50,0x49,0xFF,0x4C,0x06,0xB7,0xA9,0xFF,0x85,0x65,0x20,0x79,0x00,0xC9,0x29, + 0xF0,0x06,0x20,0xFD,0xAE,0x20,0x9E,0xB7,0x20,0x61,0xB7,0xF0,0x4B,0xCA,0x8A,0x48, + 0x18,0xA2,0x00,0xF1,0x50,0xB0,0xB6,0x49,0xFF,0xC5,0x65,0x90,0xB1,0xA5,0x65,0xB0, + 0xAD,0x20,0xF7,0xAE,0x68,0xA8,0x68,0x85,0x55,0x68,0x68,0x68,0xAA,0x68,0x85,0x50, + 0x68,0x85,0x51,0xA5,0x55,0x48,0x98,0x48,0xA0,0x00,0x8A,0x60,0x20,0x82,0xB7,0x4C, + 0xA2,0xB3,0x20,0xA3,0xB6,0xA2,0x00,0x86,0x0D,0xA8,0x60,0x20,0x82,0xB7,0xF0,0x08, + 0xA0,0x00,0xB1,0x22,0xA8,0x4C,0xA2,0xB3,0x4C,0x48,0xB2,0x20,0x73,0x00,0x20,0x8A, + 0xAD,0x20,0xB8,0xB1,0xA6,0x64,0xD0,0xF0,0xA6,0x65,0x4C,0x79,0x00,0x20,0x82,0xB7, + 0xD0,0x03,0x4C,0xF7,0xB8,0xA6,0x7A,0xA4,0x7B,0x86,0x71,0x84,0x72,0xA6,0x22,0x86, + 0x7A,0x18,0x65,0x22,0x85,0x24,0xA6,0x23,0x86,0x7B,0x90,0x01,0xE8,0x86,0x25,0xA0, + 0x00,0xB1,0x24,0x48,0x98,0x91,0x24,0x20,0x79,0x00,0x20,0xF3,0xBC,0x68,0xA0,0x00, + 0x91,0x24,0xA6,0x71,0xA4,0x72,0x86,0x7A,0x84,0x7B,0x60,0x20,0x8A,0xAD,0x20,0xF7, + 0xB7,0x20,0xFD,0xAE,0x4C,0x9E,0xB7,0xA5,0x66,0x30,0x9D,0xA5,0x61,0xC9,0x91,0xB0, + 0x97,0x20,0x9B,0xBC,0xA5,0x64,0xA4,0x65,0x84,0x14,0x85,0x15,0x60,0xA5,0x15,0x48, + 0xA5,0x14,0x48,0x20,0xF7,0xB7,0xA0,0x00,0xB1,0x14,0xA8,0x68,0x85,0x14,0x68,0x85, + 0x15,0x4C,0xA2,0xB3,0x20,0xEB,0xB7,0x8A,0xA0,0x00,0x91,0x14,0x60,0x20,0xEB,0xB7, + 0x86,0x49,0xA2,0x00,0x20,0x79,0x00,0xF0,0x03,0x20,0xF1,0xB7,0x86,0x4A,0xA0,0x00, + 0xB1,0x14,0x45,0x4A,0x25,0x49,0xF0,0xF8,0x60,0xA9,0x11,0xA0,0xBF,0x4C,0x67,0xB8, + 0x20,0x8C,0xBA,0xA5,0x66,0x49,0xFF,0x85,0x66,0x45,0x6E,0x85,0x6F,0xA5,0x61,0x4C, + 0x6A,0xB8,0x20,0x99,0xB9,0x90,0x3C,0x20,0x8C,0xBA,0xD0,0x03,0x4C,0xFC,0xBB,0xA6, + 0x70,0x86,0x56,0xA2,0x69,0xA5,0x69,0xA8,0xF0,0xCE,0x38,0xE5,0x61,0xF0,0x24,0x90, + 0x12,0x84,0x61,0xA4,0x6E,0x84,0x66,0x49,0xFF,0x69,0x00,0xA0,0x00,0x84,0x56,0xA2, + 0x61,0xD0,0x04,0xA0,0x00,0x84,0x70,0xC9,0xF9,0x30,0xC7,0xA8,0xA5,0x70,0x56,0x01, + 0x20,0xB0,0xB9,0x24,0x6F,0x10,0x57,0xA0,0x61,0xE0,0x69,0xF0,0x02,0xA0,0x69,0x38, + 0x49,0xFF,0x65,0x56,0x85,0x70,0xB9,0x04,0x00,0xF5,0x04,0x85,0x65,0xB9,0x03,0x00, + 0xF5,0x03,0x85,0x64,0xB9,0x02,0x00,0xF5,0x02,0x85,0x63,0xB9,0x01,0x00,0xF5,0x01, + 0x85,0x62,0xB0,0x03,0x20,0x47,0xB9,0xA0,0x00,0x98,0x18,0xA6,0x62,0xD0,0x4A,0xA6, + 0x63,0x86,0x62,0xA6,0x64,0x86,0x63,0xA6,0x65,0x86,0x64,0xA6,0x70,0x86,0x65,0x84, + 0x70,0x69,0x08,0xC9,0x20,0xD0,0xE4,0xA9,0x00,0x85,0x61,0x85,0x66,0x60,0x65,0x56, + 0x85,0x70,0xA5,0x65,0x65,0x6D,0x85,0x65,0xA5,0x64,0x65,0x6C,0x85,0x64,0xA5,0x63, + 0x65,0x6B,0x85,0x63,0xA5,0x62,0x65,0x6A,0x85,0x62,0x4C,0x36,0xB9,0x69,0x01,0x06, + 0x70,0x26,0x65,0x26,0x64,0x26,0x63,0x26,0x62,0x10,0xF2,0x38,0xE5,0x61,0xB0,0xC7, + 0x49,0xFF,0x69,0x01,0x85,0x61,0x90,0x0E,0xE6,0x61,0xF0,0x42,0x66,0x62,0x66,0x63, + 0x66,0x64,0x66,0x65,0x66,0x70,0x60,0xA5,0x66,0x49,0xFF,0x85,0x66,0xA5,0x62,0x49, + 0xFF,0x85,0x62,0xA5,0x63,0x49,0xFF,0x85,0x63,0xA5,0x64,0x49,0xFF,0x85,0x64,0xA5, + 0x65,0x49,0xFF,0x85,0x65,0xA5,0x70,0x49,0xFF,0x85,0x70,0xE6,0x70,0xD0,0x0E,0xE6, + 0x65,0xD0,0x0A,0xE6,0x64,0xD0,0x06,0xE6,0x63,0xD0,0x02,0xE6,0x62,0x60,0xA2,0x0F, + 0x4C,0x37,0xA4,0xA2,0x25,0xB4,0x04,0x84,0x70,0xB4,0x03,0x94,0x04,0xB4,0x02,0x94, + 0x03,0xB4,0x01,0x94,0x02,0xA4,0x68,0x94,0x01,0x69,0x08,0x30,0xE8,0xF0,0xE6,0xE9, + 0x08,0xA8,0xA5,0x70,0xB0,0x14,0x16,0x01,0x90,0x02,0xF6,0x01,0x76,0x01,0x76,0x01, + 0x76,0x02,0x76,0x03,0x76,0x04,0x6A,0xC8,0xD0,0xEC,0x18,0x60,0x81,0x00,0x00,0x00, + 0x00,0x03,0x7F,0x5E,0x56,0xCB,0x79,0x80,0x13,0x9B,0x0B,0x64,0x80,0x76,0x38,0x93, + 0x16,0x82,0x38,0xAA,0x3B,0x20,0x80,0x35,0x04,0xF3,0x34,0x81,0x35,0x04,0xF3,0x34, + 0x80,0x80,0x00,0x00,0x00,0x80,0x31,0x72,0x17,0xF8,0x20,0x2B,0xBC,0xF0,0x02,0x10, + 0x03,0x4C,0x48,0xB2,0xA5,0x61,0xE9,0x7F,0x48,0xA9,0x80,0x85,0x61,0xA9,0xD6,0xA0, + 0xB9,0x20,0x67,0xB8,0xA9,0xDB,0xA0,0xB9,0x20,0x0F,0xBB,0xA9,0xBC,0xA0,0xB9,0x20, + 0x50,0xB8,0xA9,0xC1,0xA0,0xB9,0x20,0x43,0xE0,0xA9,0xE0,0xA0,0xB9,0x20,0x67,0xB8, + 0x68,0x20,0x7E,0xBD,0xA9,0xE5,0xA0,0xB9,0x20,0x8C,0xBA,0xD0,0x03,0x4C,0x8B,0xBA, + 0x20,0xB7,0xBA,0xA9,0x00,0x85,0x26,0x85,0x27,0x85,0x28,0x85,0x29,0xA5,0x70,0x20, + 0x59,0xBA,0xA5,0x65,0x20,0x59,0xBA,0xA5,0x64,0x20,0x59,0xBA,0xA5,0x63,0x20,0x59, + 0xBA,0xA5,0x62,0x20,0x5E,0xBA,0x4C,0x8F,0xBB,0xD0,0x03,0x4C,0x83,0xB9,0x4A,0x09, + 0x80,0xA8,0x90,0x19,0x18,0xA5,0x29,0x65,0x6D,0x85,0x29,0xA5,0x28,0x65,0x6C,0x85, + 0x28,0xA5,0x27,0x65,0x6B,0x85,0x27,0xA5,0x26,0x65,0x6A,0x85,0x26,0x66,0x26,0x66, + 0x27,0x66,0x28,0x66,0x29,0x66,0x70,0x98,0x4A,0xD0,0xD6,0x60,0x85,0x22,0x84,0x23, + 0xA0,0x04,0xB1,0x22,0x85,0x6D,0x88,0xB1,0x22,0x85,0x6C,0x88,0xB1,0x22,0x85,0x6B, + 0x88,0xB1,0x22,0x85,0x6E,0x45,0x66,0x85,0x6F,0xA5,0x6E,0x09,0x80,0x85,0x6A,0x88, + 0xB1,0x22,0x85,0x69,0xA5,0x61,0x60,0xA5,0x69,0xF0,0x1F,0x18,0x65,0x61,0x90,0x04, + 0x30,0x1D,0x18,0x2C,0x10,0x14,0x69,0x80,0x85,0x61,0xD0,0x03,0x4C,0xFB,0xB8,0xA5, + 0x6F,0x85,0x66,0x60,0xA5,0x66,0x49,0xFF,0x30,0x05,0x68,0x68,0x4C,0xF7,0xB8,0x4C, + 0x7E,0xB9,0x20,0x0C,0xBC,0xAA,0xF0,0x10,0x18,0x69,0x02,0xB0,0xF2,0xA2,0x00,0x86, + 0x6F,0x20,0x77,0xB8,0xE6,0x61,0xF0,0xE7,0x60,0x84,0x20,0x00,0x00,0x00,0x20,0x0C, + 0xBC,0xA9,0xF9,0xA0,0xBA,0xA2,0x00,0x86,0x6F,0x20,0xA2,0xBB,0x4C,0x12,0xBB,0x20, + 0x8C,0xBA,0xF0,0x76,0x20,0x1B,0xBC,0xA9,0x00,0x38,0xE5,0x61,0x85,0x61,0x20,0xB7, + 0xBA,0xE6,0x61,0xF0,0xBA,0xA2,0xFC,0xA9,0x01,0xA4,0x6A,0xC4,0x62,0xD0,0x10,0xA4, + 0x6B,0xC4,0x63,0xD0,0x0A,0xA4,0x6C,0xC4,0x64,0xD0,0x04,0xA4,0x6D,0xC4,0x65,0x08, + 0x2A,0x90,0x09,0xE8,0x95,0x29,0xF0,0x32,0x10,0x34,0xA9,0x01,0x28,0xB0,0x0E,0x06, + 0x6D,0x26,0x6C,0x26,0x6B,0x26,0x6A,0xB0,0xE6,0x30,0xCE,0x10,0xE2,0xA8,0xA5,0x6D, + 0xE5,0x65,0x85,0x6D,0xA5,0x6C,0xE5,0x64,0x85,0x6C,0xA5,0x6B,0xE5,0x63,0x85,0x6B, + 0xA5,0x6A,0xE5,0x62,0x85,0x6A,0x98,0x4C,0x4F,0xBB,0xA9,0x40,0xD0,0xCE,0x0A,0x0A, + 0x0A,0x0A,0x0A,0x0A,0x85,0x70,0x28,0x4C,0x8F,0xBB,0xA2,0x14,0x4C,0x37,0xA4,0xA5, + 0x26,0x85,0x62,0xA5,0x27,0x85,0x63,0xA5,0x28,0x85,0x64,0xA5,0x29,0x85,0x65,0x4C, + 0xD7,0xB8,0x85,0x22,0x84,0x23,0xA0,0x04,0xB1,0x22,0x85,0x65,0x88,0xB1,0x22,0x85, + 0x64,0x88,0xB1,0x22,0x85,0x63,0x88,0xB1,0x22,0x85,0x66,0x09,0x80,0x85,0x62,0x88, + 0xB1,0x22,0x85,0x61,0x84,0x70,0x60,0xA2,0x5C,0x2C,0xA2,0x57,0xA0,0x00,0xF0,0x04, + 0xA6,0x49,0xA4,0x4A,0x20,0x1B,0xBC,0x86,0x22,0x84,0x23,0xA0,0x04,0xA5,0x65,0x91, + 0x22,0x88,0xA5,0x64,0x91,0x22,0x88,0xA5,0x63,0x91,0x22,0x88,0xA5,0x66,0x09,0x7F, + 0x25,0x62,0x91,0x22,0x88,0xA5,0x61,0x91,0x22,0x84,0x70,0x60,0xA5,0x6E,0x85,0x66, + 0xA2,0x05,0xB5,0x68,0x95,0x60,0xCA,0xD0,0xF9,0x86,0x70,0x60,0x20,0x1B,0xBC,0xA2, + 0x06,0xB5,0x60,0x95,0x68,0xCA,0xD0,0xF9,0x86,0x70,0x60,0xA5,0x61,0xF0,0xFB,0x06, + 0x70,0x90,0xF7,0x20,0x6F,0xB9,0xD0,0xF2,0x4C,0x38,0xB9,0xA5,0x61,0xF0,0x09,0xA5, + 0x66,0x2A,0xA9,0xFF,0xB0,0x02,0xA9,0x01,0x60,0x20,0x2B,0xBC,0x85,0x62,0xA9,0x00, + 0x85,0x63,0xA2,0x88,0xA5,0x62,0x49,0xFF,0x2A,0xA9,0x00,0x85,0x65,0x85,0x64,0x86, + 0x61,0x85,0x70,0x85,0x66,0x4C,0xD2,0xB8,0x46,0x66,0x60,0x85,0x24,0x84,0x25,0xA0, + 0x00,0xB1,0x24,0xC8,0xAA,0xF0,0xC4,0xB1,0x24,0x45,0x66,0x30,0xC2,0xE4,0x61,0xD0, + 0x21,0xB1,0x24,0x09,0x80,0xC5,0x62,0xD0,0x19,0xC8,0xB1,0x24,0xC5,0x63,0xD0,0x12, + 0xC8,0xB1,0x24,0xC5,0x64,0xD0,0x0B,0xC8,0xA9,0x7F,0xC5,0x70,0xB1,0x24,0xE5,0x65, + 0xF0,0x28,0xA5,0x66,0x90,0x02,0x49,0xFF,0x4C,0x31,0xBC,0xA5,0x61,0xF0,0x4A,0x38, + 0xE9,0xA0,0x24,0x66,0x10,0x09,0xAA,0xA9,0xFF,0x85,0x68,0x20,0x4D,0xB9,0x8A,0xA2, + 0x61,0xC9,0xF9,0x10,0x06,0x20,0x99,0xB9,0x84,0x68,0x60,0xA8,0xA5,0x66,0x29,0x80, + 0x46,0x62,0x05,0x62,0x85,0x62,0x20,0xB0,0xB9,0x84,0x68,0x60,0xA5,0x61,0xC9,0xA0, + 0xB0,0x20,0x20,0x9B,0xBC,0x84,0x70,0xA5,0x66,0x84,0x66,0x49,0x80,0x2A,0xA9,0xA0, + 0x85,0x61,0xA5,0x65,0x85,0x07,0x4C,0xD2,0xB8,0x85,0x62,0x85,0x63,0x85,0x64,0x85, + 0x65,0xA8,0x60,0xA0,0x00,0xA2,0x0A,0x94,0x5D,0xCA,0x10,0xFB,0x90,0x0F,0xC9,0x2D, + 0xD0,0x04,0x86,0x67,0xF0,0x04,0xC9,0x2B,0xD0,0x05,0x20,0x73,0x00,0x90,0x5B,0xC9, + 0x2E,0xF0,0x2E,0xC9,0x45,0xD0,0x30,0x20,0x73,0x00,0x90,0x17,0xC9,0xAB,0xF0,0x0E, + 0xC9,0x2D,0xF0,0x0A,0xC9,0xAA,0xF0,0x08,0xC9,0x2B,0xF0,0x04,0xD0,0x07,0x66,0x60, + 0x20,0x73,0x00,0x90,0x5C,0x24,0x60,0x10,0x0E,0xA9,0x00,0x38,0xE5,0x5E,0x4C,0x49, + 0xBD,0x66,0x5F,0x24,0x5F,0x50,0xC3,0xA5,0x5E,0x38,0xE5,0x5D,0x85,0x5E,0xF0,0x12, + 0x10,0x09,0x20,0xFE,0xBA,0xE6,0x5E,0xD0,0xF9,0xF0,0x07,0x20,0xE2,0xBA,0xC6,0x5E, + 0xD0,0xF9,0xA5,0x67,0x30,0x01,0x60,0x4C,0xB4,0xBF,0x48,0x24,0x5F,0x10,0x02,0xE6, + 0x5D,0x20,0xE2,0xBA,0x68,0x38,0xE9,0x30,0x20,0x7E,0xBD,0x4C,0x0A,0xBD,0x48,0x20, + 0x0C,0xBC,0x68,0x20,0x3C,0xBC,0xA5,0x6E,0x45,0x66,0x85,0x6F,0xA6,0x61,0x4C,0x6A, + 0xB8,0xA5,0x5E,0xC9,0x0A,0x90,0x09,0xA9,0x64,0x24,0x60,0x30,0x11,0x4C,0x7E,0xB9, + 0x0A,0x0A,0x18,0x65,0x5E,0x0A,0x18,0xA0,0x00,0x71,0x7A,0x38,0xE9,0x30,0x85,0x5E, + 0x4C,0x30,0xBD,0x9B,0x3E,0xBC,0x1F,0xFD,0x9E,0x6E,0x6B,0x27,0xFD,0x9E,0x6E,0x6B, + 0x28,0x00,0xA9,0x71,0xA0,0xA3,0x20,0xDA,0xBD,0xA5,0x3A,0xA6,0x39,0x85,0x62,0x86, + 0x63,0xA2,0x90,0x38,0x20,0x49,0xBC,0x20,0xDF,0xBD,0x4C,0x1E,0xAB,0xA0,0x01,0xA9, + 0x20,0x24,0x66,0x10,0x02,0xA9,0x2D,0x99,0xFF,0x00,0x85,0x66,0x84,0x71,0xC8,0xA9, + 0x30,0xA6,0x61,0xD0,0x03,0x4C,0x04,0xBF,0xA9,0x00,0xE0,0x80,0xF0,0x02,0xB0,0x09, + 0xA9,0xBD,0xA0,0xBD,0x20,0x28,0xBA,0xA9,0xF7,0x85,0x5D,0xA9,0xB8,0xA0,0xBD,0x20, + 0x5B,0xBC,0xF0,0x1E,0x10,0x12,0xA9,0xB3,0xA0,0xBD,0x20,0x5B,0xBC,0xF0,0x02,0x10, + 0x0E,0x20,0xE2,0xBA,0xC6,0x5D,0xD0,0xEE,0x20,0xFE,0xBA,0xE6,0x5D,0xD0,0xDC,0x20, + 0x49,0xB8,0x20,0x9B,0xBC,0xA2,0x01,0xA5,0x5D,0x18,0x69,0x0A,0x30,0x09,0xC9,0x0B, + 0xB0,0x06,0x69,0xFF,0xAA,0xA9,0x02,0x38,0xE9,0x02,0x85,0x5E,0x86,0x5D,0x8A,0xF0, + 0x02,0x10,0x13,0xA4,0x71,0xA9,0x2E,0xC8,0x99,0xFF,0x00,0x8A,0xF0,0x06,0xA9,0x30, + 0xC8,0x99,0xFF,0x00,0x84,0x71,0xA0,0x00,0xA2,0x80,0xA5,0x65,0x18,0x79,0x19,0xBF, + 0x85,0x65,0xA5,0x64,0x79,0x18,0xBF,0x85,0x64,0xA5,0x63,0x79,0x17,0xBF,0x85,0x63, + 0xA5,0x62,0x79,0x16,0xBF,0x85,0x62,0xE8,0xB0,0x04,0x10,0xDE,0x30,0x02,0x30,0xDA, + 0x8A,0x90,0x04,0x49,0xFF,0x69,0x0A,0x69,0x2F,0xC8,0xC8,0xC8,0xC8,0x84,0x47,0xA4, + 0x71,0xC8,0xAA,0x29,0x7F,0x99,0xFF,0x00,0xC6,0x5D,0xD0,0x06,0xA9,0x2E,0xC8,0x99, + 0xFF,0x00,0x84,0x71,0xA4,0x47,0x8A,0x49,0xFF,0x29,0x80,0xAA,0xC0,0x24,0xF0,0x04, + 0xC0,0x3C,0xD0,0xA6,0xA4,0x71,0xB9,0xFF,0x00,0x88,0xC9,0x30,0xF0,0xF8,0xC9,0x2E, + 0xF0,0x01,0xC8,0xA9,0x2B,0xA6,0x5E,0xF0,0x2E,0x10,0x08,0xA9,0x00,0x38,0xE5,0x5E, + 0xAA,0xA9,0x2D,0x99,0x01,0x01,0xA9,0x45,0x99,0x00,0x01,0x8A,0xA2,0x2F,0x38,0xE8, + 0xE9,0x0A,0xB0,0xFB,0x69,0x3A,0x99,0x03,0x01,0x8A,0x99,0x02,0x01,0xA9,0x00,0x99, + 0x04,0x01,0xF0,0x08,0x99,0xFF,0x00,0xA9,0x00,0x99,0x00,0x01,0xA9,0x00,0xA0,0x01, + 0x60,0x80,0x00,0x00,0x00,0x00,0xFA,0x0A,0x1F,0x00,0x00,0x98,0x96,0x80,0xFF,0xF0, + 0xBD,0xC0,0x00,0x01,0x86,0xA0,0xFF,0xFF,0xD8,0xF0,0x00,0x00,0x03,0xE8,0xFF,0xFF, + 0xFF,0x9C,0x00,0x00,0x00,0x0A,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0x0A,0x80,0x00,0x03, + 0x4B,0xC0,0xFF,0xFF,0x73,0x60,0x00,0x00,0x0E,0x10,0xFF,0xFF,0xFD,0xA8,0x00,0x00, + 0x00,0x3C,0xEC,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0x20,0x0C,0xBC,0xA9,0x11,0xA0,0xBF,0x20,0xA2,0xBB,0xF0,0x70,0xA5,0x69,0xD0, + 0x03,0x4C,0xF9,0xB8,0xA2,0x4E,0xA0,0x00,0x20,0xD4,0xBB,0xA5,0x6E,0x10,0x0F,0x20, + 0xCC,0xBC,0xA9,0x4E,0xA0,0x00,0x20,0x5B,0xBC,0xD0,0x03,0x98,0xA4,0x07,0x20,0xFE, + 0xBB,0x98,0x48,0x20,0xEA,0xB9,0xA9,0x4E,0xA0,0x00,0x20,0x28,0xBA,0x20,0xED,0xBF, + 0x68,0x4A,0x90,0x0A,0xA5,0x61,0xF0,0x06,0xA5,0x66,0x49,0xFF,0x85,0x66,0x60,0x81, + 0x38,0xAA,0x3B,0x29,0x07,0x71,0x34,0x58,0x3E,0x56,0x74,0x16,0x7E,0xB3,0x1B,0x77, + 0x2F,0xEE,0xE3,0x85,0x7A,0x1D,0x84,0x1C,0x2A,0x7C,0x63,0x59,0x58,0x0A,0x7E,0x75, + 0xFD,0xE7,0xC6,0x80,0x31,0x72,0x18,0x10,0x81,0x00,0x00,0x00,0x00,0xA9,0xBF,0xA0, + 0xBF,0x20,0x28,0xBA,0xA5,0x70,0x69,0x50,0x90,0x03,0x20,0x23,0xBC,0x4C,0x00,0xE0, + 0x85,0x56,0x20,0x0F,0xBC,0xA5,0x61,0xC9,0x88,0x90,0x03,0x20,0xD4,0xBA,0x20,0xCC, + 0xBC,0xA5,0x07,0x18,0x69,0x81,0xF0,0xF3,0x38,0xE9,0x01,0x48,0xA2,0x05,0xB5,0x69, + 0xB4,0x61,0x95,0x61,0x94,0x69,0xCA,0x10,0xF5,0xA5,0x56,0x85,0x70,0x20,0x53,0xB8, + 0x20,0xB4,0xBF,0xA9,0xC4,0xA0,0xBF,0x20,0x59,0xE0,0xA9,0x00,0x85,0x6F,0x68,0x20, + 0xB9,0xBA,0x60,0x85,0x71,0x84,0x72,0x20,0xCA,0xBB,0xA9,0x57,0x20,0x28,0xBA,0x20, + 0x5D,0xE0,0xA9,0x57,0xA0,0x00,0x4C,0x28,0xBA,0x85,0x71,0x84,0x72,0x20,0xC7,0xBB, + 0xB1,0x71,0x85,0x67,0xA4,0x71,0xC8,0x98,0xD0,0x02,0xE6,0x72,0x85,0x71,0xA4,0x72, + 0x20,0x28,0xBA,0xA5,0x71,0xA4,0x72,0x18,0x69,0x05,0x90,0x01,0xC8,0x85,0x71,0x84, + 0x72,0x20,0x67,0xB8,0xA9,0x5C,0xA0,0x00,0xC6,0x67,0xD0,0xE4,0x60,0x98,0x35,0x44, + 0x7A,0x00,0x68,0x28,0xB1,0x46,0x00,0x20,0x2B,0xBC,0x30,0x37,0xD0,0x20,0x20,0xF3, + 0xFF,0x86,0x22,0x84,0x23,0xA0,0x04,0xB1,0x22,0x85,0x62,0xC8,0xB1,0x22,0x85,0x64, + 0xA0,0x08,0xB1,0x22,0x85,0x63,0xC8,0xB1,0x22,0x85,0x65,0x4C,0xE3,0xE0,0xA9,0x8B, + 0xA0,0x00,0x20,0xA2,0xBB,0xA9,0x8D,0xA0,0xE0,0x20,0x28,0xBA,0xA9,0x92,0xA0,0xE0, + 0x20,0x67,0xB8,0xA6,0x65,0xA5,0x62,0x85,0x65,0x86,0x62,0xA6,0x63,0xA5,0x64,0x85, + 0x63,0x86,0x64,0xA9,0x00,0x85,0x66,0xA5,0x61,0x85,0x70,0xA9,0x80,0x85,0x61,0x20, + 0xD7,0xB8,0xA2,0x8B,0xA0,0x00,0x4C,0xD4,0xBB,0xC9,0xF0,0xD0,0x07,0x84,0x38,0x86, + 0x37,0x4C,0x63,0xA6,0xAA,0xD0,0x02,0xA2,0x1E,0x4C,0x37,0xA4,0x20,0xD2,0xFF,0xB0, + 0xE8,0x60,0x20,0xCF,0xFF,0xB0,0xE2,0x60,0x20,0xAD,0xE4,0xB0,0xDC,0x60,0x20,0xC6, + 0xFF,0xB0,0xD6,0x60,0x20,0xE4,0xFF,0xB0,0xD0,0x60,0x20,0x8A,0xAD,0x20,0xF7,0xB7, + 0xA9,0xE1,0x48,0xA9,0x46,0x48,0xAD,0x0F,0x03,0x48,0xAD,0x0C,0x03,0xAE,0x0D,0x03, + 0xAC,0x0E,0x03,0x28,0x6C,0x14,0x00,0x08,0x8D,0x0C,0x03,0x8E,0x0D,0x03,0x8C,0x0E, + 0x03,0x68,0x8D,0x0F,0x03,0x60,0x20,0xD4,0xE1,0xA6,0x2D,0xA4,0x2E,0xA9,0x2B,0x20, + 0xD8,0xFF,0xB0,0x95,0x60,0xA9,0x01,0x2C,0xA9,0x00,0x85,0x0A,0x20,0xD4,0xE1,0xA5, + 0x0A,0xA6,0x2B,0xA4,0x2C,0x20,0xD5,0xFF,0xB0,0x57,0xA5,0x0A,0xF0,0x17,0xA2,0x1C, + 0x20,0xB7,0xFF,0x29,0x10,0xD0,0x17,0xA5,0x7A,0xC9,0x02,0xF0,0x07,0xA9,0x64,0xA0, + 0xA3,0x4C,0x1E,0xAB,0x60,0x20,0xB7,0xFF,0x29,0xBF,0xF0,0x05,0xA2,0x1D,0x4C,0x37, + 0xA4,0xA5,0x7B,0xC9,0x02,0xD0,0x0E,0x86,0x2D,0x84,0x2E,0xA9,0x76,0xA0,0xA3,0x20, + 0x1E,0xAB,0x4C,0x2A,0xA5,0x20,0x8E,0xA6,0x20,0x33,0xA5,0x4C,0x77,0xA6,0x20,0x19, + 0xE2,0x20,0xC0,0xFF,0xB0,0x0B,0x60,0x20,0x19,0xE2,0xA5,0x49,0x20,0xC3,0xFF,0x90, + 0xC3,0x4C,0xF9,0xE0,0xA9,0x00,0x20,0xBD,0xFF,0xA2,0x01,0xA0,0x00,0x20,0xBA,0xFF, + 0x20,0x06,0xE2,0x20,0x57,0xE2,0x20,0x06,0xE2,0x20,0x00,0xE2,0xA0,0x00,0x86,0x49, + 0x20,0xBA,0xFF,0x20,0x06,0xE2,0x20,0x00,0xE2,0x8A,0xA8,0xA6,0x49,0x4C,0xBA,0xFF, + 0x20,0x0E,0xE2,0x4C,0x9E,0xB7,0x20,0x79,0x00,0xD0,0x02,0x68,0x68,0x60,0x20,0xFD, + 0xAE,0x20,0x79,0x00,0xD0,0xF7,0x4C,0x08,0xAF,0xA9,0x00,0x20,0xBD,0xFF,0x20,0x11, + 0xE2,0x20,0x9E,0xB7,0x86,0x49,0x8A,0xA2,0x01,0xA0,0x00,0x20,0xBA,0xFF,0x20,0x06, + 0xE2,0x20,0x00,0xE2,0x86,0x4A,0xA0,0x00,0xA5,0x49,0xE0,0x03,0x90,0x01,0x88,0x20, + 0xBA,0xFF,0x20,0x06,0xE2,0x20,0x00,0xE2,0x8A,0xA8,0xA6,0x4A,0xA5,0x49,0x20,0xBA, + 0xFF,0x20,0x06,0xE2,0x20,0x0E,0xE2,0x20,0x9E,0xAD,0x20,0xA3,0xB6,0xA6,0x22,0xA4, + 0x23,0x4C,0xBD,0xFF,0xA9,0xE0,0xA0,0xE2,0x20,0x67,0xB8,0x20,0x0C,0xBC,0xA9,0xE5, + 0xA0,0xE2,0xA6,0x6E,0x20,0x07,0xBB,0x20,0x0C,0xBC,0x20,0xCC,0xBC,0xA9,0x00,0x85, + 0x6F,0x20,0x53,0xB8,0xA9,0xEA,0xA0,0xE2,0x20,0x50,0xB8,0xA5,0x66,0x48,0x10,0x0D, + 0x20,0x49,0xB8,0xA5,0x66,0x30,0x09,0xA5,0x12,0x49,0xFF,0x85,0x12,0x20,0xB4,0xBF, + 0xA9,0xEA,0xA0,0xE2,0x20,0x67,0xB8,0x68,0x10,0x03,0x20,0xB4,0xBF,0xA9,0xEF,0xA0, + 0xE2,0x4C,0x43,0xE0,0x20,0xCA,0xBB,0xA9,0x00,0x85,0x12,0x20,0x6B,0xE2,0xA2,0x4E, + 0xA0,0x00,0x20,0xF6,0xE0,0xA9,0x57,0xA0,0x00,0x20,0xA2,0xBB,0xA9,0x00,0x85,0x66, + 0xA5,0x12,0x20,0xDC,0xE2,0xA9,0x4E,0xA0,0x00,0x4C,0x0F,0xBB,0x48,0x4C,0x9D,0xE2, + 0x81,0x49,0x0F,0xDA,0xA2,0x83,0x49,0x0F,0xDA,0xA2,0x7F,0x00,0x00,0x00,0x00,0x05, + 0x84,0xE6,0x1A,0x2D,0x1B,0x86,0x28,0x07,0xFB,0xF8,0x87,0x99,0x68,0x89,0x01,0x87, + 0x23,0x35,0xDF,0xE1,0x86,0xA5,0x5D,0xE7,0x28,0x83,0x49,0x0F,0xDA,0xA2,0xA5,0x66, + 0x48,0x10,0x03,0x20,0xB4,0xBF,0xA5,0x61,0x48,0xC9,0x81,0x90,0x07,0xA9,0xBC,0xA0, + 0xB9,0x20,0x0F,0xBB,0xA9,0x3E,0xA0,0xE3,0x20,0x43,0xE0,0x68,0xC9,0x81,0x90,0x07, + 0xA9,0xE0,0xA0,0xE2,0x20,0x50,0xB8,0x68,0x10,0x03,0x4C,0xB4,0xBF,0x60,0x0B,0x76, + 0xB3,0x83,0xBD,0xD3,0x79,0x1E,0xF4,0xA6,0xF5,0x7B,0x83,0xFC,0xB0,0x10,0x7C,0x0C, + 0x1F,0x67,0xCA,0x7C,0xDE,0x53,0xCB,0xC1,0x7D,0x14,0x64,0x70,0x4C,0x7D,0xB7,0xEA, + 0x51,0x7A,0x7D,0x63,0x30,0x88,0x7E,0x7E,0x92,0x44,0x99,0x3A,0x7E,0x4C,0xCC,0x91, + 0xC7,0x7F,0xAA,0xAA,0xAA,0x13,0x81,0x00,0x00,0x00,0x00,0x20,0xCC,0xFF,0xA9,0x00, + 0x85,0x13,0x20,0x7A,0xA6,0x58,0xA2,0x80,0x6C,0x00,0x03,0x8A,0x30,0x03,0x4C,0x3A, + 0xA4,0x4C,0x74,0xA4,0x20,0x53,0xE4,0x20,0xBF,0xE3,0x20,0x22,0xE4,0xA2,0xFB,0x9A, + 0xD0,0xE4,0xE6,0x7A,0xD0,0x02,0xE6,0x7B,0xAD,0x60,0xEA,0xC9,0x3A,0xB0,0x0A,0xC9, + 0x20,0xF0,0xEF,0x38,0xE9,0x30,0x38,0xE9,0xD0,0x60,0x80,0x4F,0xC7,0x52,0x58,0xA9, + 0x4C,0x85,0x54,0x8D,0x10,0x03,0xA9,0x48,0xA0,0xB2,0x8D,0x11,0x03,0x8C,0x12,0x03, + 0xA9,0x91,0xA0,0xB3,0x85,0x05,0x84,0x06,0xA9,0xAA,0xA0,0xB1,0x85,0x03,0x84,0x04, + 0xA2,0x1C,0xBD,0xA2,0xE3,0x95,0x73,0xCA,0x10,0xF8,0xA9,0x03,0x85,0x53,0xA9,0x00, + 0x85,0x68,0x85,0x13,0x85,0x18,0xA2,0x01,0x8E,0xFD,0x01,0x8E,0xFC,0x01,0xA2,0x19, + 0x86,0x16,0x38,0x20,0x9C,0xFF,0x86,0x2B,0x84,0x2C,0x38,0x20,0x99,0xFF,0x86,0x37, + 0x84,0x38,0x86,0x33,0x84,0x34,0xA0,0x00,0x98,0x91,0x2B,0xE6,0x2B,0xD0,0x02,0xE6, + 0x2C,0x60,0xA5,0x2B,0xA4,0x2C,0x20,0x08,0xA4,0xA9,0x73,0xA0,0xE4,0x20,0x1E,0xAB, + 0xA5,0x37,0x38,0xE5,0x2B,0xAA,0xA5,0x38,0xE5,0x2C,0x20,0xCD,0xBD,0xA9,0x60,0xA0, + 0xE4,0x20,0x1E,0xAB,0x4C,0x44,0xA6,0x8B,0xE3,0x83,0xA4,0x7C,0xA5,0x1A,0xA7,0xE4, + 0xA7,0x86,0xAE,0xA2,0x0B,0xBD,0x47,0xE4,0x9D,0x00,0x03,0xCA,0x10,0xF7,0x60,0x00, + 0x20,0x42,0x41,0x53,0x49,0x43,0x20,0x42,0x59,0x54,0x45,0x53,0x20,0x46,0x52,0x45, + 0x45,0x0D,0x00,0x93,0x0D,0x20,0x20,0x20,0x20,0x2A,0x2A,0x2A,0x2A,0x20,0x43,0x4F, + 0x4D,0x4D,0x4F,0x44,0x4F,0x52,0x45,0x20,0x36,0x34,0x20,0x42,0x41,0x53,0x49,0x43, + 0x20,0x56,0x32,0x20,0x2A,0x2A,0x2A,0x2A,0x0D,0x0D,0x20,0x36,0x34,0x4B,0x20,0x52, + 0x41,0x4D,0x20,0x53,0x59,0x53,0x54,0x45,0x4D,0x20,0x20,0x00,0x81,0x48,0x20,0xC9, + 0xFF,0xAA,0x68,0x90,0x01,0x8A,0x60,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, + 0xAA,0xAA,0xAA,0x85,0xA9,0xA9,0x01,0x85,0xAB,0x60,0xAD,0x86,0x02,0x91,0xF3,0x60, + 0x69,0x02,0xA4,0x91,0xC8,0xD0,0x04,0xC5,0xA1,0xD0,0xF7,0x60,0x19,0x26,0x44,0x19, + 0x1A,0x11,0xE8,0x0D,0x70,0x0C,0x06,0x06,0xD1,0x02,0x37,0x01,0xAE,0x00,0x69,0x00, + 0xA2,0x00,0xA0,0xDC,0x60,0xA2,0x28,0xA0,0x19,0x60,0xB0,0x07,0x86,0xD6,0x84,0xD3, + 0x20,0x6C,0xE5,0xA6,0xD6,0xA4,0xD3,0x60,0x20,0xA0,0xE5,0xA9,0x00,0x8D,0x91,0x02, + 0x85,0xCF,0xA9,0x48,0x8D,0x8F,0x02,0xA9,0xEB,0x8D,0x90,0x02,0xA9,0x0A,0x8D,0x89, + 0x02,0x8D,0x8C,0x02,0xA9,0x0E,0x8D,0x86,0x02,0xA9,0x04,0x8D,0x8B,0x02,0xA9,0x0C, + 0x85,0xCD,0x85,0xCC,0xAD,0x88,0x02,0x09,0x80,0xA8,0xA9,0x00,0xAA,0x94,0xD9,0x18, + 0x69,0x28,0x90,0x01,0xC8,0xE8,0xE0,0x1A,0xD0,0xF3,0xA9,0xFF,0x95,0xD9,0xA2,0x18, + 0x20,0xFF,0xE9,0xCA,0x10,0xFA,0xA0,0x00,0x84,0xD3,0x84,0xD6,0xA6,0xD6,0xA5,0xD3, + 0xB4,0xD9,0x30,0x08,0x18,0x69,0x28,0x85,0xD3,0xCA,0x10,0xF4,0x20,0xF0,0xE9,0xA9, + 0x27,0xE8,0xB4,0xD9,0x30,0x06,0x18,0x69,0x28,0xE8,0x10,0xF6,0x85,0xD5,0x4C,0x24, + 0xEA,0xE4,0xC9,0xF0,0x03,0x4C,0xED,0xE6,0x60,0xEA,0x20,0xA0,0xE5,0x4C,0x66,0xE5, + 0xA9,0x03,0x85,0x9A,0xA9,0x00,0x85,0x99,0xA2,0x2F,0xBD,0xB8,0xEC,0x9D,0xFF,0xCF, + 0xCA,0xD0,0xF7,0x60,0xAC,0x77,0x02,0xA2,0x00,0xBD,0x78,0x02,0x9D,0x77,0x02,0xE8, + 0xE4,0xC6,0xD0,0xF5,0xC6,0xC6,0x98,0x58,0x18,0x60,0x20,0x16,0xE7,0xA5,0xC6,0x85, + 0xCC,0x8D,0x92,0x02,0xF0,0xF7,0x78,0xA5,0xCF,0xF0,0x0C,0xA5,0xCE,0xAE,0x87,0x02, + 0xA0,0x00,0x84,0xCF,0x20,0x13,0xEA,0x20,0xB4,0xE5,0xC9,0x83,0xD0,0x10,0xA2,0x09, + 0x78,0x86,0xC6,0xBD,0xE6,0xEC,0x9D,0x76,0x02,0xCA,0xD0,0xF7,0xF0,0xCF,0xC9,0x0D, + 0xD0,0xC8,0xA4,0xD5,0x84,0xD0,0xB1,0xD1,0xC9,0x20,0xD0,0x03,0x88,0xD0,0xF7,0xC8, + 0x84,0xC8,0xA0,0x00,0x8C,0x92,0x02,0x84,0xD3,0x84,0xD4,0xA5,0xC9,0x30,0x1B,0xA6, + 0xD6,0x20,0x91,0xE5,0xE4,0xC9,0xD0,0x12,0xA5,0xCA,0x85,0xD3,0xC5,0xC8,0x90,0x0A, + 0xB0,0x2B,0x98,0x48,0x8A,0x48,0xA5,0xD0,0xF0,0x93,0xA4,0xD3,0xB1,0xD1,0x85,0xD7, + 0x29,0x3F,0x06,0xD7,0x24,0xD7,0x10,0x02,0x09,0x80,0x90,0x04,0xA6,0xD4,0xD0,0x04, + 0x70,0x02,0x09,0x40,0xE6,0xD3,0x20,0x84,0xE6,0xC4,0xC8,0xD0,0x17,0xA9,0x00,0x85, + 0xD0,0xA9,0x0D,0xA6,0x99,0xE0,0x03,0xF0,0x06,0xA6,0x9A,0xE0,0x03,0xF0,0x03,0x20, + 0x16,0xE7,0xA9,0x0D,0x85,0xD7,0x68,0xAA,0x68,0xA8,0xA5,0xD7,0xC9,0xDE,0xD0,0x02, + 0xA9,0xFF,0x18,0x60,0xC9,0x22,0xD0,0x08,0xA5,0xD4,0x49,0x01,0x85,0xD4,0xA9,0x22, + 0x60,0x09,0x40,0xA6,0xC7,0xF0,0x02,0x09,0x80,0xA6,0xD8,0xF0,0x02,0xC6,0xD8,0xAE, + 0x86,0x02,0x20,0x13,0xEA,0x20,0xB6,0xE6,0x68,0xA8,0xA5,0xD8,0xF0,0x02,0x46,0xD4, + 0x68,0xAA,0x68,0x18,0x58,0x60,0x20,0xB3,0xE8,0xE6,0xD3,0xA5,0xD5,0xC5,0xD3,0xB0, + 0x3F,0xC9,0x4F,0xF0,0x32,0xAD,0x92,0x02,0xF0,0x03,0x4C,0x67,0xE9,0xA6,0xD6,0xE0, + 0x19,0x90,0x07,0x20,0xEA,0xE8,0xC6,0xD6,0xA6,0xD6,0x16,0xD9,0x56,0xD9,0xE8,0xB5, + 0xD9,0x09,0x80,0x95,0xD9,0xCA,0xA5,0xD5,0x18,0x69,0x28,0x85,0xD5,0xB5,0xD9,0x30, + 0x03,0xCA,0xD0,0xF9,0x4C,0xF0,0xE9,0xC6,0xD6,0x20,0x7C,0xE8,0xA9,0x00,0x85,0xD3, + 0x60,0xA6,0xD6,0xD0,0x06,0x86,0xD3,0x68,0x68,0xD0,0x9D,0xCA,0x86,0xD6,0x20,0x6C, + 0xE5,0xA4,0xD5,0x84,0xD3,0x60,0x48,0x85,0xD7,0x8A,0x48,0x98,0x48,0xA9,0x00,0x85, + 0xD0,0xA4,0xD3,0xA5,0xD7,0x10,0x03,0x4C,0xD4,0xE7,0xC9,0x0D,0xD0,0x03,0x4C,0x91, + 0xE8,0xC9,0x20,0x90,0x10,0xC9,0x60,0x90,0x04,0x29,0xDF,0xD0,0x02,0x29,0x3F,0x20, + 0x84,0xE6,0x4C,0x93,0xE6,0xA6,0xD8,0xF0,0x03,0x4C,0x97,0xE6,0xC9,0x14,0xD0,0x2E, + 0x98,0xD0,0x06,0x20,0x01,0xE7,0x4C,0x73,0xE7,0x20,0xA1,0xE8,0x88,0x84,0xD3,0x20, + 0x24,0xEA,0xC8,0xB1,0xD1,0x88,0x91,0xD1,0xC8,0xB1,0xF3,0x88,0x91,0xF3,0xC8,0xC4, + 0xD5,0xD0,0xEF,0xA9,0x20,0x91,0xD1,0xAD,0x86,0x02,0x91,0xF3,0x10,0x4D,0xA6,0xD4, + 0xF0,0x03,0x4C,0x97,0xE6,0xC9,0x12,0xD0,0x02,0x85,0xC7,0xC9,0x13,0xD0,0x03,0x20, + 0x66,0xE5,0xC9,0x1D,0xD0,0x17,0xC8,0x20,0xB3,0xE8,0x84,0xD3,0x88,0xC4,0xD5,0x90, + 0x09,0xC6,0xD6,0x20,0x7C,0xE8,0xA0,0x00,0x84,0xD3,0x4C,0xA8,0xE6,0xC9,0x11,0xD0, + 0x1D,0x18,0x98,0x69,0x28,0xA8,0xE6,0xD6,0xC5,0xD5,0x90,0xEC,0xF0,0xEA,0xC6,0xD6, + 0xE9,0x28,0x90,0x04,0x85,0xD3,0xD0,0xF8,0x20,0x7C,0xE8,0x4C,0xA8,0xE6,0x20,0xCB, + 0xE8,0x4C,0x44,0xEC,0x29,0x7F,0xC9,0x7F,0xD0,0x02,0xA9,0x5E,0xC9,0x20,0x90,0x03, + 0x4C,0x91,0xE6,0xC9,0x0D,0xD0,0x03,0x4C,0x91,0xE8,0xA6,0xD4,0xD0,0x3F,0xC9,0x14, + 0xD0,0x37,0xA4,0xD5,0xB1,0xD1,0xC9,0x20,0xD0,0x04,0xC4,0xD3,0xD0,0x07,0xC0,0x4F, + 0xF0,0x24,0x20,0x65,0xE9,0xA4,0xD5,0x20,0x24,0xEA,0x88,0xB1,0xD1,0xC8,0x91,0xD1, + 0x88,0xB1,0xF3,0xC8,0x91,0xF3,0x88,0xC4,0xD3,0xD0,0xEF,0xA9,0x20,0x91,0xD1,0xAD, + 0x86,0x02,0x91,0xF3,0xE6,0xD8,0x4C,0xA8,0xE6,0xA6,0xD8,0xF0,0x05,0x09,0x40,0x4C, + 0x97,0xE6,0xC9,0x11,0xD0,0x16,0xA6,0xD6,0xF0,0x37,0xC6,0xD6,0xA5,0xD3,0x38,0xE9, + 0x28,0x90,0x04,0x85,0xD3,0x10,0x2A,0x20,0x6C,0xE5,0xD0,0x25,0xC9,0x12,0xD0,0x04, + 0xA9,0x00,0x85,0xC7,0xC9,0x1D,0xD0,0x12,0x98,0xF0,0x09,0x20,0xA1,0xE8,0x88,0x84, + 0xD3,0x4C,0xA8,0xE6,0x20,0x01,0xE7,0x4C,0xA8,0xE6,0xC9,0x13,0xD0,0x06,0x20,0x44, + 0xE5,0x4C,0xA8,0xE6,0x09,0x80,0x20,0xCB,0xE8,0x4C,0x4F,0xEC,0x46,0xC9,0xA6,0xD6, + 0xE8,0xE0,0x19,0xD0,0x03,0x20,0xEA,0xE8,0xB5,0xD9,0x10,0xF4,0x86,0xD6,0x4C,0x6C, + 0xE5,0xA2,0x00,0x86,0xD8,0x86,0xC7,0x86,0xD4,0x86,0xD3,0x20,0x7C,0xE8,0x4C,0xA8, + 0xE6,0xA2,0x02,0xA9,0x00,0xC5,0xD3,0xF0,0x07,0x18,0x69,0x28,0xCA,0xD0,0xF6,0x60, + 0xC6,0xD6,0x60,0xA2,0x02,0xA9,0x27,0xC5,0xD3,0xF0,0x07,0x18,0x69,0x28,0xCA,0xD0, + 0xF6,0x60,0xA6,0xD6,0xE0,0x19,0xF0,0x02,0xE6,0xD6,0x60,0xA2,0x0F,0xDD,0xDA,0xE8, + 0xF0,0x04,0xCA,0x10,0xF8,0x60,0x8E,0x86,0x02,0x60,0x90,0x05,0x1C,0x9F,0x9C,0x1E, + 0x1F,0x9E,0x81,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0xA5,0xAC,0x48,0xA5,0xAD,0x48, + 0xA5,0xAE,0x48,0xA5,0xAF,0x48,0xA2,0xFF,0xC6,0xD6,0xC6,0xC9,0xCE,0xA5,0x02,0xE8, + 0x20,0xF0,0xE9,0xE0,0x18,0xB0,0x0C,0xBD,0xF1,0xEC,0x85,0xAC,0xB5,0xDA,0x20,0xC8, + 0xE9,0x30,0xEC,0x20,0xFF,0xE9,0xA2,0x00,0xB5,0xD9,0x29,0x7F,0xB4,0xDA,0x10,0x02, + 0x09,0x80,0x95,0xD9,0xE8,0xE0,0x18,0xD0,0xEF,0xA5,0xF1,0x09,0x80,0x85,0xF1,0xA5, + 0xD9,0x10,0xC3,0xE6,0xD6,0xEE,0xA5,0x02,0xA9,0x7F,0x8D,0x00,0xDC,0xAD,0x01,0xDC, + 0xC9,0xFB,0x08,0xA9,0x7F,0x8D,0x00,0xDC,0x28,0xD0,0x0B,0xA0,0x00,0xEA,0xCA,0xD0, + 0xFC,0x88,0xD0,0xF9,0x84,0xC6,0xA6,0xD6,0x68,0x85,0xAF,0x68,0x85,0xAE,0x68,0x85, + 0xAD,0x68,0x85,0xAC,0x60,0xA6,0xD6,0xE8,0xB5,0xD9,0x10,0xFB,0x8E,0xA5,0x02,0xE0, + 0x18,0xF0,0x0E,0x90,0x0C,0x20,0xEA,0xE8,0xAE,0xA5,0x02,0xCA,0xC6,0xD6,0x4C,0xDA, + 0xE6,0xA5,0xAC,0x48,0xA5,0xAD,0x48,0xA5,0xAE,0x48,0xA5,0xAF,0x48,0xA2,0x19,0xCA, + 0x20,0xF0,0xE9,0xEC,0xA5,0x02,0x90,0x0E,0xF0,0x0C,0xBD,0xEF,0xEC,0x85,0xAC,0xB5, + 0xD8,0x20,0xC8,0xE9,0x30,0xE9,0x20,0xFF,0xE9,0xA2,0x17,0xEC,0xA5,0x02,0x90,0x0F, + 0xB5,0xDA,0x29,0x7F,0xB4,0xD9,0x10,0x02,0x09,0x80,0x95,0xDA,0xCA,0xD0,0xEC,0xAE, + 0xA5,0x02,0x20,0xDA,0xE6,0x4C,0x58,0xE9,0x29,0x03,0x0D,0x88,0x02,0x85,0xAD,0x20, + 0xE0,0xE9,0xA0,0x27,0xB1,0xAC,0x91,0xD1,0xB1,0xAE,0x91,0xF3,0x88,0x10,0xF5,0x60, + 0x20,0x24,0xEA,0xA5,0xAC,0x85,0xAE,0xA5,0xAD,0x29,0x03,0x09,0xD8,0x85,0xAF,0x60, + 0xBD,0xF0,0xEC,0x85,0xD1,0xB5,0xD9,0x29,0x03,0x0D,0x88,0x02,0x85,0xD2,0x60,0xA0, + 0x27,0x20,0xF0,0xE9,0x20,0x24,0xEA,0x20,0xDA,0xE4,0xA9,0x20,0x91,0xD1,0x88,0x10, + 0xF6,0x60,0xEA,0xA8,0xA9,0x02,0x85,0xCD,0x20,0x24,0xEA,0x98,0xA4,0xD3,0x91,0xD1, + 0x8A,0x91,0xF3,0x60,0xA5,0xD1,0x85,0xF3,0xA5,0xD2,0x29,0x03,0x09,0xD8,0x85,0xF4, + 0x60,0x20,0xEA,0xFF,0xA5,0xCC,0xD0,0x29,0xC6,0xCD,0xD0,0x25,0xA9,0x14,0x85,0xCD, + 0xA4,0xD3,0x46,0xCF,0xAE,0x87,0x02,0xB1,0xD1,0xB0,0x11,0xE6,0xCF,0x85,0xCE,0x20, + 0x24,0xEA,0xB1,0xF3,0x8D,0x87,0x02,0xAE,0x86,0x02,0xA5,0xCE,0x49,0x80,0x20,0x1C, + 0xEA,0xA5,0x01,0x29,0x10,0xF0,0x0A,0xA0,0x00,0x84,0xC0,0xA5,0x01,0x09,0x20,0xD0, + 0x08,0xA5,0xC0,0xD0,0x06,0xA5,0x01,0x29,0x1F,0x85,0x01,0x20,0x87,0xEA,0xAD,0x0D, + 0xDC,0x68,0xA8,0x68,0xAA,0x68,0x40,0xA9,0x00,0x8D,0x8D,0x02,0xA0,0x40,0x84,0xCB, + 0x8D,0x00,0xDC,0xAE,0x01,0xDC,0xE0,0xFF,0xF0,0x61,0xA8,0xA9,0x81,0x85,0xF5,0xA9, + 0xEB,0x85,0xF6,0xA9,0xFE,0x8D,0x00,0xDC,0xA2,0x08,0x48,0xAD,0x01,0xDC,0xCD,0x01, + 0xDC,0xD0,0xF8,0x4A,0xB0,0x16,0x48,0xB1,0xF5,0xC9,0x05,0xB0,0x0C,0xC9,0x03,0xF0, + 0x08,0x0D,0x8D,0x02,0x8D,0x8D,0x02,0x10,0x02,0x84,0xCB,0x68,0xC8,0xC0,0x41,0xB0, + 0x0B,0xCA,0xD0,0xDF,0x38,0x68,0x2A,0x8D,0x00,0xDC,0xD0,0xCC,0x68,0x6C,0x8F,0x02, + 0xA4,0xCB,0xB1,0xF5,0xAA,0xC4,0xC5,0xF0,0x07,0xA0,0x10,0x8C,0x8C,0x02,0xD0,0x36, + 0x29,0x7F,0x2C,0x8A,0x02,0x30,0x16,0x70,0x49,0xC9,0x7F,0xF0,0x29,0xC9,0x14,0xF0, + 0x0C,0xC9,0x20,0xF0,0x08,0xC9,0x1D,0xF0,0x04,0xC9,0x11,0xD0,0x35,0xAC,0x8C,0x02, + 0xF0,0x05,0xCE,0x8C,0x02,0xD0,0x2B,0xCE,0x8B,0x02,0xD0,0x26,0xA0,0x04,0x8C,0x8B, + 0x02,0xA4,0xC6,0x88,0x10,0x1C,0xA4,0xCB,0x84,0xC5,0xAC,0x8D,0x02,0x8C,0x8E,0x02, + 0xE0,0xFF,0xF0,0x0E,0x8A,0xA6,0xC6,0xEC,0x89,0x02,0xB0,0x06,0x9D,0x77,0x02,0xE8, + 0x86,0xC6,0xA9,0x7F,0x8D,0x00,0xDC,0x60,0xAD,0x8D,0x02,0xC9,0x03,0xD0,0x15,0xCD, + 0x8E,0x02,0xF0,0xEE,0xAD,0x91,0x02,0x30,0x1D,0xAD,0x18,0xD0,0x49,0x02,0x8D,0x18, + 0xD0,0x4C,0x76,0xEB,0x0A,0xC9,0x08,0x90,0x02,0xA9,0x06,0xAA,0xBD,0x79,0xEB,0x85, + 0xF5,0xBD,0x7A,0xEB,0x85,0xF6,0x4C,0xE0,0xEA,0x81,0xEB,0xC2,0xEB,0x03,0xEC,0x78, + 0xEC,0x14,0x0D,0x1D,0x88,0x85,0x86,0x87,0x11,0x33,0x57,0x41,0x34,0x5A,0x53,0x45, + 0x01,0x35,0x52,0x44,0x36,0x43,0x46,0x54,0x58,0x37,0x59,0x47,0x38,0x42,0x48,0x55, + 0x56,0x39,0x49,0x4A,0x30,0x4D,0x4B,0x4F,0x4E,0x2B,0x50,0x4C,0x2D,0x2E,0x3A,0x40, + 0x2C,0x5C,0x2A,0x3B,0x13,0x01,0x3D,0x5E,0x2F,0x31,0x5F,0x04,0x32,0x20,0x02,0x51, + 0x03,0xFF,0x94,0x8D,0x9D,0x8C,0x89,0x8A,0x8B,0x91,0x23,0xD7,0xC1,0x24,0xDA,0xD3, + 0xC5,0x01,0x25,0xD2,0xC4,0x26,0xC3,0xC6,0xD4,0xD8,0x27,0xD9,0xC7,0x28,0xC2,0xC8, + 0xD5,0xD6,0x29,0xC9,0xCA,0x30,0xCD,0xCB,0xCF,0xCE,0xDB,0xD0,0xCC,0xDD,0x3E,0x5B, + 0xBA,0x3C,0xA9,0xC0,0x5D,0x93,0x01,0x3D,0xDE,0x3F,0x21,0x5F,0x04,0x22,0xA0,0x02, + 0xD1,0x83,0xFF,0x94,0x8D,0x9D,0x8C,0x89,0x8A,0x8B,0x91,0x96,0xB3,0xB0,0x97,0xAD, + 0xAE,0xB1,0x01,0x98,0xB2,0xAC,0x99,0xBC,0xBB,0xA3,0xBD,0x9A,0xB7,0xA5,0x9B,0xBF, + 0xB4,0xB8,0xBE,0x29,0xA2,0xB5,0x30,0xA7,0xA1,0xB9,0xAA,0xA6,0xAF,0xB6,0xDC,0x3E, + 0x5B,0xA4,0x3C,0xA8,0xDF,0x5D,0x93,0x01,0x3D,0xDE,0x3F,0x81,0x5F,0x04,0x95,0xA0, + 0x02,0xAB,0x83,0xFF,0xC9,0x0E,0xD0,0x07,0xAD,0x18,0xD0,0x09,0x02,0xD0,0x09,0xC9, + 0x8E,0xD0,0x0B,0xAD,0x18,0xD0,0x29,0xFD,0x8D,0x18,0xD0,0x4C,0xA8,0xE6,0xC9,0x08, + 0xD0,0x07,0xA9,0x80,0x0D,0x91,0x02,0x30,0x09,0xC9,0x09,0xD0,0xEE,0xA9,0x7F,0x2D, + 0x91,0x02,0x8D,0x91,0x02,0x4C,0xA8,0xE6,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0x1C,0x17,0x01,0x9F,0x1A,0x13,0x05,0xFF,0x9C,0x12,0x04,0x1E,0x03,0x06,0x14,0x18, + 0x1F,0x19,0x07,0x9E,0x02,0x08,0x15,0x16,0x12,0x09,0x0A,0x92,0x0D,0x0B,0x0F,0x0E, + 0xFF,0x10,0x0C,0xFF,0xFF,0x1B,0x00,0xFF,0x1C,0xFF,0x1D,0xFF,0xFF,0x1F,0x1E,0xFF, + 0x90,0x06,0xFF,0x05,0xFF,0xFF,0x11,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9B,0x37,0x00,0x00,0x00,0x08, + 0x00,0x14,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x06,0x01,0x02,0x03,0x04,0x00, + 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x4C,0x4F,0x41,0x44,0x0D,0x52,0x55,0x4E,0x0D, + 0x00,0x28,0x50,0x78,0xA0,0xC8,0xF0,0x18,0x40,0x68,0x90,0xB8,0xE0,0x08,0x30,0x58, + 0x80,0xA8,0xD0,0xF8,0x20,0x48,0x70,0x98,0xC0,0x09,0x40,0x2C,0x09,0x20,0x20,0xA4, + 0xF0,0x48,0x24,0x94,0x10,0x0A,0x38,0x66,0xA3,0x20,0x40,0xED,0x46,0x94,0x46,0xA3, + 0x68,0x85,0x95,0x78,0x20,0x97,0xEE,0xC9,0x3F,0xD0,0x03,0x20,0x85,0xEE,0xAD,0x00, + 0xDD,0x09,0x08,0x8D,0x00,0xDD,0x78,0x20,0x8E,0xEE,0x20,0x97,0xEE,0x20,0xB3,0xEE, + 0x78,0x20,0x97,0xEE,0x20,0xA9,0xEE,0xB0,0x64,0x20,0x85,0xEE,0x24,0xA3,0x10,0x0A, + 0x20,0xA9,0xEE,0x90,0xFB,0x20,0xA9,0xEE,0xB0,0xFB,0x20,0xA9,0xEE,0x90,0xFB,0x20, + 0x8E,0xEE,0xA9,0x08,0x85,0xA5,0xAD,0x00,0xDD,0xCD,0x00,0xDD,0xD0,0xF8,0x0A,0x90, + 0x3F,0x66,0x95,0xB0,0x05,0x20,0xA0,0xEE,0xD0,0x03,0x20,0x97,0xEE,0x20,0x85,0xEE, + 0xEA,0xEA,0xEA,0xEA,0xAD,0x00,0xDD,0x29,0xDF,0x09,0x10,0x8D,0x00,0xDD,0xC6,0xA5, + 0xD0,0xD4,0xA9,0x04,0x8D,0x07,0xDC,0xA9,0x19,0x8D,0x0F,0xDC,0xAD,0x0D,0xDC,0xAD, + 0x0D,0xDC,0x29,0x02,0xD0,0x0A,0x20,0xA9,0xEE,0xB0,0xF4,0x58,0x60,0xA9,0x80,0x2C, + 0xA9,0x03,0x20,0x1C,0xFE,0x58,0x18,0x90,0x4A,0x85,0x95,0x20,0x36,0xED,0xAD,0x00, + 0xDD,0x29,0xF7,0x8D,0x00,0xDD,0x60,0x85,0x95,0x20,0x36,0xED,0x78,0x20,0xA0,0xEE, + 0x20,0xBE,0xED,0x20,0x85,0xEE,0x20,0xA9,0xEE,0x30,0xFB,0x58,0x60,0x24,0x94,0x30, + 0x05,0x38,0x66,0x94,0xD0,0x05,0x48,0x20,0x40,0xED,0x68,0x85,0x95,0x18,0x60,0x78, + 0x20,0x8E,0xEE,0xAD,0x00,0xDD,0x09,0x08,0x8D,0x00,0xDD,0xA9,0x5F,0x2C,0xA9,0x3F, + 0x20,0x11,0xED,0x20,0xBE,0xED,0x8A,0xA2,0x0A,0xCA,0xD0,0xFD,0xAA,0x20,0x85,0xEE, + 0x4C,0x97,0xEE,0x78,0xA9,0x00,0x85,0xA5,0x20,0x85,0xEE,0x20,0xA9,0xEE,0x10,0xFB, + 0xA9,0x01,0x8D,0x07,0xDC,0xA9,0x19,0x8D,0x0F,0xDC,0x20,0x97,0xEE,0xAD,0x0D,0xDC, + 0xAD,0x0D,0xDC,0x29,0x02,0xD0,0x07,0x20,0xA9,0xEE,0x30,0xF4,0x10,0x18,0xA5,0xA5, + 0xF0,0x05,0xA9,0x02,0x4C,0xB2,0xED,0x20,0xA0,0xEE,0x20,0x85,0xEE,0xA9,0x40,0x20, + 0x1C,0xFE,0xE6,0xA5,0xD0,0xCA,0xA9,0x08,0x85,0xA5,0xAD,0x00,0xDD,0xCD,0x00,0xDD, + 0xD0,0xF8,0x0A,0x10,0xF5,0x66,0xA4,0xAD,0x00,0xDD,0xCD,0x00,0xDD,0xD0,0xF8,0x0A, + 0x30,0xF5,0xC6,0xA5,0xD0,0xE4,0x20,0xA0,0xEE,0x24,0x90,0x50,0x03,0x20,0x06,0xEE, + 0xA5,0xA4,0x58,0x18,0x60,0xAD,0x00,0xDD,0x29,0xEF,0x8D,0x00,0xDD,0x60,0xAD,0x00, + 0xDD,0x09,0x10,0x8D,0x00,0xDD,0x60,0xAD,0x00,0xDD,0x29,0xDF,0x8D,0x00,0xDD,0x60, + 0xAD,0x00,0xDD,0x09,0x20,0x8D,0x00,0xDD,0x60,0xAD,0x00,0xDD,0xCD,0x00,0xDD,0xD0, + 0xF8,0x0A,0x60,0x8A,0xA2,0xB8,0xCA,0xD0,0xFD,0xAA,0x60,0xA5,0xB4,0xF0,0x47,0x30, + 0x3F,0x46,0xB6,0xA2,0x00,0x90,0x01,0xCA,0x8A,0x45,0xBD,0x85,0xBD,0xC6,0xB4,0xF0, + 0x06,0x8A,0x29,0x04,0x85,0xB5,0x60,0xA9,0x20,0x2C,0x94,0x02,0xF0,0x14,0x30,0x1C, + 0x70,0x14,0xA5,0xBD,0xD0,0x01,0xCA,0xC6,0xB4,0xAD,0x93,0x02,0x10,0xE3,0xC6,0xB4, + 0xD0,0xDF,0xE6,0xB4,0xD0,0xF0,0xA5,0xBD,0xF0,0xED,0xD0,0xEA,0x70,0xE9,0x50,0xE6, + 0xE6,0xB4,0xA2,0xFF,0xD0,0xCB,0xAD,0x94,0x02,0x4A,0x90,0x07,0x2C,0x01,0xDD,0x10, + 0x1D,0x50,0x1E,0xA9,0x00,0x85,0xBD,0x85,0xB5,0xAE,0x98,0x02,0x86,0xB4,0xAC,0x9D, + 0x02,0xCC,0x9E,0x02,0xF0,0x13,0xB1,0xF9,0x85,0xB6,0xEE,0x9D,0x02,0x60,0xA9,0x40, + 0x2C,0xA9,0x10,0x0D,0x97,0x02,0x8D,0x97,0x02,0xA9,0x01,0x8D,0x0D,0xDD,0x4D,0xA1, + 0x02,0x09,0x80,0x8D,0xA1,0x02,0x8D,0x0D,0xDD,0x60,0xA2,0x09,0xA9,0x20,0x2C,0x93, + 0x02,0xF0,0x01,0xCA,0x50,0x02,0xCA,0xCA,0x60,0xA6,0xA9,0xD0,0x33,0xC6,0xA8,0xF0, + 0x36,0x30,0x0D,0xA5,0xA7,0x45,0xAB,0x85,0xAB,0x46,0xA7,0x66,0xAA,0x60,0xC6,0xA8, + 0xA5,0xA7,0xF0,0x67,0xAD,0x93,0x02,0x0A,0xA9,0x01,0x65,0xA8,0xD0,0xEF,0xA9,0x90, + 0x8D,0x0D,0xDD,0x0D,0xA1,0x02,0x8D,0xA1,0x02,0x85,0xA9,0xA9,0x02,0x4C,0x3B,0xEF, + 0xA5,0xA7,0xD0,0xEA,0x4C,0xD3,0xE4,0xAC,0x9B,0x02,0xC8,0xCC,0x9C,0x02,0xF0,0x2A, + 0x8C,0x9B,0x02,0x88,0xA5,0xAA,0xAE,0x98,0x02,0xE0,0x09,0xF0,0x04,0x4A,0xE8,0xD0, + 0xF8,0x91,0xF7,0xA9,0x20,0x2C,0x94,0x02,0xF0,0xB4,0x30,0xB1,0xA5,0xA7,0x45,0xAB, + 0xF0,0x03,0x70,0xA9,0x2C,0x50,0xA6,0xA9,0x01,0x2C,0xA9,0x04,0x2C,0xA9,0x80,0x2C, + 0xA9,0x02,0x0D,0x97,0x02,0x8D,0x97,0x02,0x4C,0x7E,0xEF,0xA5,0xAA,0xD0,0xF1,0xF0, + 0xEC,0x85,0x9A,0xAD,0x94,0x02,0x4A,0x90,0x29,0xA9,0x02,0x2C,0x01,0xDD,0x10,0x1D, + 0xD0,0x20,0xAD,0xA1,0x02,0x29,0x02,0xD0,0xF9,0x2C,0x01,0xDD,0x70,0xFB,0xAD,0x01, + 0xDD,0x09,0x02,0x8D,0x01,0xDD,0x2C,0x01,0xDD,0x70,0x07,0x30,0xF9,0xA9,0x40,0x8D, + 0x97,0x02,0x18,0x60,0x20,0x28,0xF0,0xAC,0x9E,0x02,0xC8,0xCC,0x9D,0x02,0xF0,0xF4, + 0x8C,0x9E,0x02,0x88,0xA5,0x9E,0x91,0xF9,0xAD,0xA1,0x02,0x4A,0xB0,0x1E,0xA9,0x10, + 0x8D,0x0E,0xDD,0xAD,0x99,0x02,0x8D,0x04,0xDD,0xAD,0x9A,0x02,0x8D,0x05,0xDD,0xA9, + 0x81,0x20,0x3B,0xEF,0x20,0x06,0xEF,0xA9,0x11,0x8D,0x0E,0xDD,0x60,0x85,0x99,0xAD, + 0x94,0x02,0x4A,0x90,0x28,0x29,0x08,0xF0,0x24,0xA9,0x02,0x2C,0x01,0xDD,0x10,0xAD, + 0xF0,0x22,0xAD,0xA1,0x02,0x4A,0xB0,0xFA,0xAD,0x01,0xDD,0x29,0xFD,0x8D,0x01,0xDD, + 0xAD,0x01,0xDD,0x29,0x04,0xF0,0xF9,0xA9,0x90,0x18,0x4C,0x3B,0xEF,0xAD,0xA1,0x02, + 0x29,0x12,0xF0,0xF3,0x18,0x60,0xAD,0x97,0x02,0xAC,0x9C,0x02,0xCC,0x9B,0x02,0xF0, + 0x0B,0x29,0xF7,0x8D,0x97,0x02,0xB1,0xF7,0xEE,0x9C,0x02,0x60,0x09,0x08,0x8D,0x97, + 0x02,0xA9,0x00,0x60,0x48,0xAD,0xA1,0x02,0xF0,0x11,0xAD,0xA1,0x02,0x29,0x03,0xD0, + 0xF9,0xA9,0x10,0x8D,0x0D,0xDD,0xA9,0x00,0x8D,0xA1,0x02,0x68,0x60,0x0D,0x49,0x2F, + 0x4F,0x20,0x45,0x52,0x52,0x4F,0x52,0x20,0xA3,0x0D,0x53,0x45,0x41,0x52,0x43,0x48, + 0x49,0x4E,0x47,0xA0,0x46,0x4F,0x52,0xA0,0x0D,0x50,0x52,0x45,0x53,0x53,0x20,0x50, + 0x4C,0x41,0x59,0x20,0x4F,0x4E,0x20,0x54,0x41,0x50,0xC5,0x50,0x52,0x45,0x53,0x53, + 0x20,0x52,0x45,0x43,0x4F,0x52,0x44,0x20,0x26,0x20,0x50,0x4C,0x41,0x59,0x20,0x4F, + 0x4E,0x20,0x54,0x41,0x50,0xC5,0x0D,0x4C,0x4F,0x41,0x44,0x49,0x4E,0xC7,0x0D,0x53, + 0x41,0x56,0x49,0x4E,0x47,0xA0,0x0D,0x56,0x45,0x52,0x49,0x46,0x59,0x49,0x4E,0xC7, + 0x0D,0x46,0x4F,0x55,0x4E,0x44,0xA0,0x0D,0x4F,0x4B,0x8D,0x24,0x9D,0x10,0x0D,0xB9, + 0xBD,0xF0,0x08,0x29,0x7F,0x20,0xD2,0xFF,0xC8,0x28,0x10,0xF3,0x18,0x60,0xA5,0x99, + 0xD0,0x08,0xA5,0xC6,0xF0,0x0F,0x78,0x4C,0xB4,0xE5,0xC9,0x02,0xD0,0x18,0x84,0x97, + 0x20,0x86,0xF0,0xA4,0x97,0x18,0x60,0xA5,0x99,0xD0,0x0B,0xA5,0xD3,0x85,0xCA,0xA5, + 0xD6,0x85,0xC9,0x4C,0x32,0xE6,0xC9,0x03,0xD0,0x09,0x85,0xD0,0xA5,0xD5,0x85,0xC8, + 0x4C,0x32,0xE6,0xB0,0x38,0xC9,0x02,0xF0,0x3F,0x86,0x97,0x20,0x99,0xF1,0xB0,0x16, + 0x48,0x20,0x99,0xF1,0xB0,0x0D,0xD0,0x05,0xA9,0x40,0x20,0x1C,0xFE,0xC6,0xA6,0xA6, + 0x97,0x68,0x60,0xAA,0x68,0x8A,0xA6,0x97,0x60,0x20,0x0D,0xF8,0xD0,0x0B,0x20,0x41, + 0xF8,0xB0,0x11,0xA9,0x00,0x85,0xA6,0xF0,0xF0,0xB1,0xB2,0x18,0x60,0xA5,0x90,0xF0, + 0x04,0xA9,0x0D,0x18,0x60,0x4C,0x13,0xEE,0x20,0x4E,0xF1,0xB0,0xF7,0xC9,0x00,0xD0, + 0xF2,0xAD,0x97,0x02,0x29,0x60,0xD0,0xE9,0xF0,0xEE,0x48,0xA5,0x9A,0xC9,0x03,0xD0, + 0x04,0x68,0x4C,0x16,0xE7,0x90,0x04,0x68,0x4C,0xDD,0xED,0x4A,0x68,0x85,0x9E,0x8A, + 0x48,0x98,0x48,0x90,0x23,0x20,0x0D,0xF8,0xD0,0x0E,0x20,0x64,0xF8,0xB0,0x0E,0xA9, + 0x02,0xA0,0x00,0x91,0xB2,0xC8,0x84,0xA6,0xA5,0x9E,0x91,0xB2,0x18,0x68,0xA8,0x68, + 0xAA,0xA5,0x9E,0x90,0x02,0xA9,0x00,0x60,0x20,0x17,0xF0,0x4C,0xFC,0xF1,0x20,0x0F, + 0xF3,0xF0,0x03,0x4C,0x01,0xF7,0x20,0x1F,0xF3,0xA5,0xBA,0xF0,0x16,0xC9,0x03,0xF0, + 0x12,0xB0,0x14,0xC9,0x02,0xD0,0x03,0x4C,0x4D,0xF0,0xA6,0xB9,0xE0,0x60,0xF0,0x03, + 0x4C,0x0A,0xF7,0x85,0x99,0x18,0x60,0xAA,0x20,0x09,0xED,0xA5,0xB9,0x10,0x06,0x20, + 0xCC,0xED,0x4C,0x48,0xF2,0x20,0xC7,0xED,0x8A,0x24,0x90,0x10,0xE6,0x4C,0x07,0xF7, + 0x20,0x0F,0xF3,0xF0,0x03,0x4C,0x01,0xF7,0x20,0x1F,0xF3,0xA5,0xBA,0xD0,0x03,0x4C, + 0x0D,0xF7,0xC9,0x03,0xF0,0x0F,0xB0,0x11,0xC9,0x02,0xD0,0x03,0x4C,0xE1,0xEF,0xA6, + 0xB9,0xE0,0x60,0xF0,0xEA,0x85,0x9A,0x18,0x60,0xAA,0x20,0x0C,0xED,0xA5,0xB9,0x10, + 0x05,0x20,0xBE,0xED,0xD0,0x03,0x20,0xB9,0xED,0x8A,0x24,0x90,0x10,0xE7,0x4C,0x07, + 0xF7,0x20,0x14,0xF3,0xF0,0x02,0x18,0x60,0x20,0x1F,0xF3,0x8A,0x48,0xA5,0xBA,0xF0, + 0x50,0xC9,0x03,0xF0,0x4C,0xB0,0x47,0xC9,0x02,0xD0,0x1D,0x68,0x20,0xF2,0xF2,0x20, + 0x83,0xF4,0x20,0x27,0xFE,0xA5,0xF8,0xF0,0x01,0xC8,0xA5,0xFA,0xF0,0x01,0xC8,0xA9, + 0x00,0x85,0xF8,0x85,0xFA,0x4C,0x7D,0xF4,0xA5,0xB9,0x29,0x0F,0xF0,0x23,0x20,0xD0, + 0xF7,0xA9,0x00,0x38,0x20,0xDD,0xF1,0x20,0x64,0xF8,0x90,0x04,0x68,0xA9,0x00,0x60, + 0xA5,0xB9,0xC9,0x62,0xD0,0x0B,0xA9,0x05,0x20,0x6A,0xF7,0x4C,0xF1,0xF2,0x20,0x42, + 0xF6,0x68,0xAA,0xC6,0x98,0xE4,0x98,0xF0,0x14,0xA4,0x98,0xB9,0x59,0x02,0x9D,0x59, + 0x02,0xB9,0x63,0x02,0x9D,0x63,0x02,0xB9,0x6D,0x02,0x9D,0x6D,0x02,0x18,0x60,0xA9, + 0x00,0x85,0x90,0x8A,0xA6,0x98,0xCA,0x30,0x15,0xDD,0x59,0x02,0xD0,0xF8,0x60,0xBD, + 0x59,0x02,0x85,0xB8,0xBD,0x63,0x02,0x85,0xBA,0xBD,0x6D,0x02,0x85,0xB9,0x60,0xA9, + 0x00,0x85,0x98,0xA2,0x03,0xE4,0x9A,0xB0,0x03,0x20,0xFE,0xED,0xE4,0x99,0xB0,0x03, + 0x20,0xEF,0xED,0x86,0x9A,0xA9,0x00,0x85,0x99,0x60,0xA6,0xB8,0xD0,0x03,0x4C,0x0A, + 0xF7,0x20,0x0F,0xF3,0xD0,0x03,0x4C,0xFE,0xF6,0xA6,0x98,0xE0,0x0A,0x90,0x03,0x4C, + 0xFB,0xF6,0xE6,0x98,0xA5,0xB8,0x9D,0x59,0x02,0xA5,0xB9,0x09,0x60,0x85,0xB9,0x9D, + 0x6D,0x02,0xA5,0xBA,0x9D,0x63,0x02,0xF0,0x5A,0xC9,0x03,0xF0,0x56,0x90,0x05,0x20, + 0xD5,0xF3,0x90,0x4F,0xC9,0x02,0xD0,0x03,0x4C,0x09,0xF4,0x20,0xD0,0xF7,0xB0,0x03, + 0x4C,0x13,0xF7,0xA5,0xB9,0x29,0x0F,0xD0,0x1F,0x20,0x17,0xF8,0xB0,0x36,0x20,0xAF, + 0xF5,0xA5,0xB7,0xF0,0x0A,0x20,0xEA,0xF7,0x90,0x18,0xF0,0x28,0x4C,0x04,0xF7,0x20, + 0x2C,0xF7,0xF0,0x20,0x90,0x0C,0xB0,0xF4,0x20,0x38,0xF8,0xB0,0x17,0xA9,0x04,0x20, + 0x6A,0xF7,0xA9,0xBF,0xA4,0xB9,0xC0,0x60,0xF0,0x07,0xA0,0x00,0xA9,0x02,0x91,0xB2, + 0x98,0x85,0xA6,0x18,0x60,0xA5,0xB9,0x30,0xFA,0xA4,0xB7,0xF0,0xF6,0xA9,0x00,0x85, + 0x90,0xA5,0xBA,0x20,0x0C,0xED,0xA5,0xB9,0x09,0xF0,0x20,0xB9,0xED,0xA5,0x90,0x10, + 0x05,0x68,0x68,0x4C,0x07,0xF7,0xA5,0xB7,0xF0,0x0C,0xA0,0x00,0xB1,0xBB,0x20,0xDD, + 0xED,0xC8,0xC4,0xB7,0xD0,0xF6,0x4C,0x54,0xF6,0x20,0x83,0xF4,0x8C,0x97,0x02,0xC4, + 0xB7,0xF0,0x0A,0xB1,0xBB,0x99,0x93,0x02,0xC8,0xC0,0x04,0xD0,0xF2,0x20,0x4A,0xEF, + 0x8E,0x98,0x02,0xAD,0x93,0x02,0x29,0x0F,0xF0,0x1C,0x0A,0xAA,0xAD,0xA6,0x02,0xD0, + 0x09,0xBC,0xC1,0xFE,0xBD,0xC0,0xFE,0x4C,0x40,0xF4,0xBC,0xEB,0xE4,0xBD,0xEA,0xE4, + 0x8C,0x96,0x02,0x8D,0x95,0x02,0xAD,0x95,0x02,0x0A,0x20,0x2E,0xFF,0xAD,0x94,0x02, + 0x4A,0x90,0x09,0xAD,0x01,0xDD,0x0A,0xB0,0x03,0x20,0x0D,0xF0,0xAD,0x9B,0x02,0x8D, + 0x9C,0x02,0xAD,0x9E,0x02,0x8D,0x9D,0x02,0x20,0x27,0xFE,0xA5,0xF8,0xD0,0x05,0x88, + 0x84,0xF8,0x86,0xF7,0xA5,0xFA,0xD0,0x05,0x88,0x84,0xFA,0x86,0xF9,0x38,0xA9,0xF0, + 0x4C,0x2D,0xFE,0xA9,0x7F,0x8D,0x0D,0xDD,0xA9,0x06,0x8D,0x03,0xDD,0x8D,0x01,0xDD, + 0xA9,0x04,0x0D,0x00,0xDD,0x8D,0x00,0xDD,0xA0,0x00,0x8C,0xA1,0x02,0x60,0x86,0xC3, + 0x84,0xC4,0x6C,0x30,0x03,0x85,0x93,0xA9,0x00,0x85,0x90,0xA5,0xBA,0xD0,0x03,0x4C, + 0x13,0xF7,0xC9,0x03,0xF0,0xF9,0x90,0x7B,0xA4,0xB7,0xD0,0x03,0x4C,0x10,0xF7,0xA6, + 0xB9,0x20,0xAF,0xF5,0xA9,0x60,0x85,0xB9,0x20,0xD5,0xF3,0xA5,0xBA,0x20,0x09,0xED, + 0xA5,0xB9,0x20,0xC7,0xED,0x20,0x13,0xEE,0x85,0xAE,0xA5,0x90,0x4A,0x4A,0xB0,0x50, + 0x20,0x13,0xEE,0x85,0xAF,0x8A,0xD0,0x08,0xA5,0xC3,0x85,0xAE,0xA5,0xC4,0x85,0xAF, + 0x20,0xD2,0xF5,0xA9,0xFD,0x25,0x90,0x85,0x90,0x20,0xE1,0xFF,0xD0,0x03,0x4C,0x33, + 0xF6,0x20,0x13,0xEE,0xAA,0xA5,0x90,0x4A,0x4A,0xB0,0xE8,0x8A,0xA4,0x93,0xF0,0x0C, + 0xA0,0x00,0xD1,0xAE,0xF0,0x08,0xA9,0x10,0x20,0x1C,0xFE,0x2C,0x91,0xAE,0xE6,0xAE, + 0xD0,0x02,0xE6,0xAF,0x24,0x90,0x50,0xCB,0x20,0xEF,0xED,0x20,0x42,0xF6,0x90,0x79, + 0x4C,0x04,0xF7,0x4A,0xB0,0x03,0x4C,0x13,0xF7,0x20,0xD0,0xF7,0xB0,0x03,0x4C,0x13, + 0xF7,0x20,0x17,0xF8,0xB0,0x68,0x20,0xAF,0xF5,0xA5,0xB7,0xF0,0x09,0x20,0xEA,0xF7, + 0x90,0x0B,0xF0,0x5A,0xB0,0xDA,0x20,0x2C,0xF7,0xF0,0x53,0xB0,0xD3,0xA5,0x90,0x29, + 0x10,0x38,0xD0,0x4A,0xE0,0x01,0xF0,0x11,0xE0,0x03,0xD0,0xDD,0xA0,0x01,0xB1,0xB2, + 0x85,0xC3,0xC8,0xB1,0xB2,0x85,0xC4,0xB0,0x04,0xA5,0xB9,0xD0,0xEF,0xA0,0x03,0xB1, + 0xB2,0xA0,0x01,0xF1,0xB2,0xAA,0xA0,0x04,0xB1,0xB2,0xA0,0x02,0xF1,0xB2,0xA8,0x18, + 0x8A,0x65,0xC3,0x85,0xAE,0x98,0x65,0xC4,0x85,0xAF,0xA5,0xC3,0x85,0xC1,0xA5,0xC4, + 0x85,0xC2,0x20,0xD2,0xF5,0x20,0x4A,0xF8,0x24,0x18,0xA6,0xAE,0xA4,0xAF,0x60,0xA5, + 0x9D,0x10,0x1E,0xA0,0x0C,0x20,0x2F,0xF1,0xA5,0xB7,0xF0,0x15,0xA0,0x17,0x20,0x2F, + 0xF1,0xA4,0xB7,0xF0,0x0C,0xA0,0x00,0xB1,0xBB,0x20,0xD2,0xFF,0xC8,0xC4,0xB7,0xD0, + 0xF6,0x60,0xA0,0x49,0xA5,0x93,0xF0,0x02,0xA0,0x59,0x4C,0x2B,0xF1,0x86,0xAE,0x84, + 0xAF,0xAA,0xB5,0x00,0x85,0xC1,0xB5,0x01,0x85,0xC2,0x6C,0x32,0x03,0xA5,0xBA,0xD0, + 0x03,0x4C,0x13,0xF7,0xC9,0x03,0xF0,0xF9,0x90,0x5F,0xA9,0x61,0x85,0xB9,0xA4,0xB7, + 0xD0,0x03,0x4C,0x10,0xF7,0x20,0xD5,0xF3,0x20,0x8F,0xF6,0xA5,0xBA,0x20,0x0C,0xED, + 0xA5,0xB9,0x20,0xB9,0xED,0xA0,0x00,0x20,0x8E,0xFB,0xA5,0xAC,0x20,0xDD,0xED,0xA5, + 0xAD,0x20,0xDD,0xED,0x20,0xD1,0xFC,0xB0,0x16,0xB1,0xAC,0x20,0xDD,0xED,0x20,0xE1, + 0xFF,0xD0,0x07,0x20,0x42,0xF6,0xA9,0x00,0x38,0x60,0x20,0xDB,0xFC,0xD0,0xE5,0x20, + 0xFE,0xED,0x24,0xB9,0x30,0x11,0xA5,0xBA,0x20,0x0C,0xED,0xA5,0xB9,0x29,0xEF,0x09, + 0xE0,0x20,0xB9,0xED,0x20,0xFE,0xED,0x18,0x60,0x4A,0xB0,0x03,0x4C,0x13,0xF7,0x20, + 0xD0,0xF7,0x90,0x8D,0x20,0x38,0xF8,0xB0,0x25,0x20,0x8F,0xF6,0xA2,0x03,0xA5,0xB9, + 0x29,0x01,0xD0,0x02,0xA2,0x01,0x8A,0x20,0x6A,0xF7,0xB0,0x12,0x20,0x67,0xF8,0xB0, + 0x0D,0xA5,0xB9,0x29,0x02,0xF0,0x06,0xA9,0x05,0x20,0x6A,0xF7,0x24,0x18,0x60,0xA5, + 0x9D,0x10,0xFB,0xA0,0x51,0x20,0x2F,0xF1,0x4C,0xC1,0xF5,0xA2,0x00,0xE6,0xA2,0xD0, + 0x06,0xE6,0xA1,0xD0,0x02,0xE6,0xA0,0x38,0xA5,0xA2,0xE9,0x01,0xA5,0xA1,0xE9,0x1A, + 0xA5,0xA0,0xE9,0x4F,0x90,0x06,0x86,0xA0,0x86,0xA1,0x86,0xA2,0xAD,0x01,0xDC,0xCD, + 0x01,0xDC,0xD0,0xF8,0xAA,0x30,0x13,0xA2,0xBD,0x8E,0x00,0xDC,0xAE,0x01,0xDC,0xEC, + 0x01,0xDC,0xD0,0xF8,0x8D,0x00,0xDC,0xE8,0xD0,0x02,0x85,0x91,0x60,0x78,0xA5,0xA2, + 0xA6,0xA1,0xA4,0xA0,0x78,0x85,0xA2,0x86,0xA1,0x84,0xA0,0x58,0x60,0xA5,0x91,0xC9, + 0x7F,0xD0,0x07,0x08,0x20,0xCC,0xFF,0x85,0xC6,0x28,0x60,0xA9,0x01,0x2C,0xA9,0x02, + 0x2C,0xA9,0x03,0x2C,0xA9,0x04,0x2C,0xA9,0x05,0x2C,0xA9,0x06,0x2C,0xA9,0x07,0x2C, + 0xA9,0x08,0x2C,0xA9,0x09,0x48,0x20,0xCC,0xFF,0xA0,0x00,0x24,0x9D,0x50,0x0A,0x20, + 0x2F,0xF1,0x68,0x48,0x09,0x30,0x20,0xD2,0xFF,0x68,0x38,0x60,0xA5,0x93,0x48,0x20, + 0x41,0xF8,0x68,0x85,0x93,0xB0,0x32,0xA0,0x00,0xB1,0xB2,0xC9,0x05,0xF0,0x2A,0xC9, + 0x01,0xF0,0x08,0xC9,0x03,0xF0,0x04,0xC9,0x04,0xD0,0xE1,0xAA,0x24,0x9D,0x10,0x17, + 0xA0,0x63,0x20,0x2F,0xF1,0xA0,0x05,0xB1,0xB2,0x20,0xD2,0xFF,0xC8,0xC0,0x15,0xD0, + 0xF6,0xA5,0xA1,0x20,0xE0,0xE4,0xEA,0x18,0x88,0x60,0x85,0x9E,0x20,0xD0,0xF7,0x90, + 0x5E,0xA5,0xC2,0x48,0xA5,0xC1,0x48,0xA5,0xAF,0x48,0xA5,0xAE,0x48,0xA0,0xBF,0xA9, + 0x20,0x91,0xB2,0x88,0xD0,0xFB,0xA5,0x9E,0x91,0xB2,0xC8,0xA5,0xC1,0x91,0xB2,0xC8, + 0xA5,0xC2,0x91,0xB2,0xC8,0xA5,0xAE,0x91,0xB2,0xC8,0xA5,0xAF,0x91,0xB2,0xC8,0x84, + 0x9F,0xA0,0x00,0x84,0x9E,0xA4,0x9E,0xC4,0xB7,0xF0,0x0C,0xB1,0xBB,0xA4,0x9F,0x91, + 0xB2,0xE6,0x9E,0xE6,0x9F,0xD0,0xEE,0x20,0xD7,0xF7,0xA9,0x69,0x85,0xAB,0x20,0x6B, + 0xF8,0xA8,0x68,0x85,0xAE,0x68,0x85,0xAF,0x68,0x85,0xC1,0x68,0x85,0xC2,0x98,0x60, + 0xA6,0xB2,0xA4,0xB3,0xC0,0x02,0x60,0x20,0xD0,0xF7,0x8A,0x85,0xC1,0x18,0x69,0xC0, + 0x85,0xAE,0x98,0x85,0xC2,0x69,0x00,0x85,0xAF,0x60,0x20,0x2C,0xF7,0xB0,0x1D,0xA0, + 0x05,0x84,0x9F,0xA0,0x00,0x84,0x9E,0xC4,0xB7,0xF0,0x10,0xB1,0xBB,0xA4,0x9F,0xD1, + 0xB2,0xD0,0xE7,0xE6,0x9E,0xE6,0x9F,0xA4,0x9E,0xD0,0xEC,0x18,0x60,0x20,0xD0,0xF7, + 0xE6,0xA6,0xA4,0xA6,0xC0,0xC0,0x60,0x20,0x2E,0xF8,0xF0,0x1A,0xA0,0x1B,0x20,0x2F, + 0xF1,0x20,0xD0,0xF8,0x20,0x2E,0xF8,0xD0,0xF8,0xA0,0x6A,0x4C,0x2F,0xF1,0xA9,0x10, + 0x24,0x01,0xD0,0x02,0x24,0x01,0x18,0x60,0x20,0x2E,0xF8,0xF0,0xF9,0xA0,0x2E,0xD0, + 0xDD,0xA9,0x00,0x85,0x90,0x85,0x93,0x20,0xD7,0xF7,0x20,0x17,0xF8,0xB0,0x1F,0x78, + 0xA9,0x00,0x85,0xAA,0x85,0xB4,0x85,0xB0,0x85,0x9E,0x85,0x9F,0x85,0x9C,0xA9,0x90, + 0xA2,0x0E,0xD0,0x11,0x20,0xD7,0xF7,0xA9,0x14,0x85,0xAB,0x20,0x38,0xF8,0xB0,0x6C, + 0x78,0xA9,0x82,0xA2,0x08,0xA0,0x7F,0x8C,0x0D,0xDC,0x8D,0x0D,0xDC,0xAD,0x0E,0xDC, + 0x09,0x19,0x8D,0x0F,0xDC,0x29,0x91,0x8D,0xA2,0x02,0x20,0xA4,0xF0,0xAD,0x11,0xD0, + 0x29,0xEF,0x8D,0x11,0xD0,0xAD,0x14,0x03,0x8D,0x9F,0x02,0xAD,0x15,0x03,0x8D,0xA0, + 0x02,0x20,0xBD,0xFC,0xA9,0x02,0x85,0xBE,0x20,0x97,0xFB,0xA5,0x01,0x29,0x1F,0x85, + 0x01,0x85,0xC0,0xA2,0xFF,0xA0,0xFF,0x88,0xD0,0xFD,0xCA,0xD0,0xF8,0x58,0xAD,0xA0, + 0x02,0xCD,0x15,0x03,0x18,0xF0,0x15,0x20,0xD0,0xF8,0x20,0xBC,0xF6,0x4C,0xBE,0xF8, + 0x20,0xE1,0xFF,0x18,0xD0,0x0B,0x20,0x93,0xFC,0x38,0x68,0x68,0xA9,0x00,0x8D,0xA0, + 0x02,0x60,0x86,0xB1,0xA5,0xB0,0x0A,0x0A,0x18,0x65,0xB0,0x18,0x65,0xB1,0x85,0xB1, + 0xA9,0x00,0x24,0xB0,0x30,0x01,0x2A,0x06,0xB1,0x2A,0x06,0xB1,0x2A,0xAA,0xAD,0x06, + 0xDC,0xC9,0x16,0x90,0xF9,0x65,0xB1,0x8D,0x04,0xDC,0x8A,0x6D,0x07,0xDC,0x8D,0x05, + 0xDC,0xAD,0xA2,0x02,0x8D,0x0E,0xDC,0x8D,0xA4,0x02,0xAD,0x0D,0xDC,0x29,0x10,0xF0, + 0x09,0xA9,0xF9,0x48,0xA9,0x2A,0x48,0x4C,0x43,0xFF,0x58,0x60,0xAE,0x07,0xDC,0xA0, + 0xFF,0x98,0xED,0x06,0xDC,0xEC,0x07,0xDC,0xD0,0xF2,0x86,0xB1,0xAA,0x8C,0x06,0xDC, + 0x8C,0x07,0xDC,0xA9,0x19,0x8D,0x0F,0xDC,0xAD,0x0D,0xDC,0x8D,0xA3,0x02,0x98,0xE5, + 0xB1,0x86,0xB1,0x4A,0x66,0xB1,0x4A,0x66,0xB1,0xA5,0xB0,0x18,0x69,0x3C,0xC5,0xB1, + 0xB0,0x4A,0xA6,0x9C,0xF0,0x03,0x4C,0x60,0xFA,0xA6,0xA3,0x30,0x1B,0xA2,0x00,0x69, + 0x30,0x65,0xB0,0xC5,0xB1,0xB0,0x1C,0xE8,0x69,0x26,0x65,0xB0,0xC5,0xB1,0xB0,0x17, + 0x69,0x2C,0x65,0xB0,0xC5,0xB1,0x90,0x03,0x4C,0x10,0xFA,0xA5,0xB4,0xF0,0x1D,0x85, + 0xA8,0xD0,0x19,0xE6,0xA9,0xB0,0x02,0xC6,0xA9,0x38,0xE9,0x13,0xE5,0xB1,0x65,0x92, + 0x85,0x92,0xA5,0xA4,0x49,0x01,0x85,0xA4,0xF0,0x2B,0x86,0xD7,0xA5,0xB4,0xF0,0x22, + 0xAD,0xA3,0x02,0x29,0x01,0xD0,0x05,0xAD,0xA4,0x02,0xD0,0x16,0xA9,0x00,0x85,0xA4, + 0x8D,0xA4,0x02,0xA5,0xA3,0x10,0x30,0x30,0xBF,0xA2,0xA6,0x20,0xE2,0xF8,0xA5,0x9B, + 0xD0,0xB9,0x4C,0xBC,0xFE,0xA5,0x92,0xF0,0x07,0x30,0x03,0xC6,0xB0,0x2C,0xE6,0xB0, + 0xA9,0x00,0x85,0x92,0xE4,0xD7,0xD0,0x0F,0x8A,0xD0,0xA0,0xA5,0xA9,0x30,0xBD,0xC9, + 0x10,0x90,0xB9,0x85,0x96,0xB0,0xB5,0x8A,0x45,0x9B,0x85,0x9B,0xA5,0xB4,0xF0,0xD2, + 0xC6,0xA3,0x30,0xC5,0x46,0xD7,0x66,0xBF,0xA2,0xDA,0x20,0xE2,0xF8,0x4C,0xBC,0xFE, + 0xA5,0x96,0xF0,0x04,0xA5,0xB4,0xF0,0x07,0xA5,0xA3,0x30,0x03,0x4C,0x97,0xF9,0x46, + 0xB1,0xA9,0x93,0x38,0xE5,0xB1,0x65,0xB0,0x0A,0xAA,0x20,0xE2,0xF8,0xE6,0x9C,0xA5, + 0xB4,0xD0,0x11,0xA5,0x96,0xF0,0x26,0x85,0xA8,0xA9,0x00,0x85,0x96,0xA9,0x81,0x8D, + 0x0D,0xDC,0x85,0xB4,0xA5,0x96,0x85,0xB5,0xF0,0x09,0xA9,0x00,0x85,0xB4,0xA9,0x01, + 0x8D,0x0D,0xDC,0xA5,0xBF,0x85,0xBD,0xA5,0xA8,0x05,0xA9,0x85,0xB6,0x4C,0xBC,0xFE, + 0x20,0x97,0xFB,0x85,0x9C,0xA2,0xDA,0x20,0xE2,0xF8,0xA5,0xBE,0xF0,0x02,0x85,0xA7, + 0xA9,0x0F,0x24,0xAA,0x10,0x17,0xA5,0xB5,0xD0,0x0C,0xA6,0xBE,0xCA,0xD0,0x0B,0xA9, + 0x08,0x20,0x1C,0xFE,0xD0,0x04,0xA9,0x00,0x85,0xAA,0x4C,0xBC,0xFE,0x70,0x31,0xD0, + 0x18,0xA5,0xB5,0xD0,0xF5,0xA5,0xB6,0xD0,0xF1,0xA5,0xA7,0x4A,0xA5,0xBD,0x30,0x03, + 0x90,0x18,0x18,0xB0,0x15,0x29,0x0F,0x85,0xAA,0xC6,0xAA,0xD0,0xDD,0xA9,0x40,0x85, + 0xAA,0x20,0x8E,0xFB,0xA9,0x00,0x85,0xAB,0xF0,0xD0,0xA9,0x80,0x85,0xAA,0xD0,0xCA, + 0xA5,0xB5,0xF0,0x0A,0xA9,0x04,0x20,0x1C,0xFE,0xA9,0x00,0x4C,0x4A,0xFB,0x20,0xD1, + 0xFC,0x90,0x03,0x4C,0x48,0xFB,0xA6,0xA7,0xCA,0xF0,0x2D,0xA5,0x93,0xF0,0x0C,0xA0, + 0x00,0xA5,0xBD,0xD1,0xAC,0xF0,0x04,0xA9,0x01,0x85,0xB6,0xA5,0xB6,0xF0,0x4B,0xA2, + 0x3D,0xE4,0x9E,0x90,0x3E,0xA6,0x9E,0xA5,0xAD,0x9D,0x01,0x01,0xA5,0xAC,0x9D,0x00, + 0x01,0xE8,0xE8,0x86,0x9E,0x4C,0x3A,0xFB,0xA6,0x9F,0xE4,0x9E,0xF0,0x35,0xA5,0xAC, + 0xDD,0x00,0x01,0xD0,0x2E,0xA5,0xAD,0xDD,0x01,0x01,0xD0,0x27,0xE6,0x9F,0xE6,0x9F, + 0xA5,0x93,0xF0,0x0B,0xA5,0xBD,0xA0,0x00,0xD1,0xAC,0xF0,0x17,0xC8,0x84,0xB6,0xA5, + 0xB6,0xF0,0x07,0xA9,0x10,0x20,0x1C,0xFE,0xD0,0x09,0xA5,0x93,0xD0,0x05,0xA8,0xA5, + 0xBD,0x91,0xAC,0x20,0xDB,0xFC,0xD0,0x43,0xA9,0x80,0x85,0xAA,0x78,0xA2,0x01,0x8E, + 0x0D,0xDC,0xAE,0x0D,0xDC,0xA6,0xBE,0xCA,0x30,0x02,0x86,0xBE,0xC6,0xA7,0xF0,0x08, + 0xA5,0x9E,0xD0,0x27,0x85,0xBE,0xF0,0x23,0x20,0x93,0xFC,0x20,0x8E,0xFB,0xA0,0x00, + 0x84,0xAB,0xB1,0xAC,0x45,0xAB,0x85,0xAB,0x20,0xDB,0xFC,0x20,0xD1,0xFC,0x90,0xF2, + 0xA5,0xAB,0x45,0xBD,0xF0,0x05,0xA9,0x20,0x20,0x1C,0xFE,0x4C,0xBC,0xFE,0xA5,0xC2, + 0x85,0xAD,0xA5,0xC1,0x85,0xAC,0x60,0xA9,0x08,0x85,0xA3,0xA9,0x00,0x85,0xA4,0x85, + 0xA8,0x85,0x9B,0x85,0xA9,0x60,0xA5,0xBD,0x4A,0xA9,0x60,0x90,0x02,0xA9,0xB0,0xA2, + 0x00,0x8D,0x06,0xDC,0x8E,0x07,0xDC,0xAD,0x0D,0xDC,0xA9,0x19,0x8D,0x0F,0xDC,0xA5, + 0x01,0x49,0x08,0x85,0x01,0x29,0x08,0x60,0x38,0x66,0xB6,0x30,0x3C,0xA5,0xA8,0xD0, + 0x12,0xA9,0x10,0xA2,0x01,0x20,0xB1,0xFB,0xD0,0x2F,0xE6,0xA8,0xA5,0xB6,0x10,0x29, + 0x4C,0x57,0xFC,0xA5,0xA9,0xD0,0x09,0x20,0xAD,0xFB,0xD0,0x1D,0xE6,0xA9,0xD0,0x19, + 0x20,0xA6,0xFB,0xD0,0x14,0xA5,0xA4,0x49,0x01,0x85,0xA4,0xF0,0x0F,0xA5,0xBD,0x49, + 0x01,0x85,0xBD,0x29,0x01,0x45,0x9B,0x85,0x9B,0x4C,0xBC,0xFE,0x46,0xBD,0xC6,0xA3, + 0xA5,0xA3,0xF0,0x3A,0x10,0xF3,0x20,0x97,0xFB,0x58,0xA5,0xA5,0xF0,0x12,0xA2,0x00, + 0x86,0xD7,0xC6,0xA5,0xA6,0xBE,0xE0,0x02,0xD0,0x02,0x09,0x80,0x85,0xBD,0xD0,0xD9, + 0x20,0xD1,0xFC,0x90,0x0A,0xD0,0x91,0xE6,0xAD,0xA5,0xD7,0x85,0xBD,0xB0,0xCA,0xA0, + 0x00,0xB1,0xAC,0x85,0xBD,0x45,0xD7,0x85,0xD7,0x20,0xDB,0xFC,0xD0,0xBB,0xA5,0x9B, + 0x49,0x01,0x85,0xBD,0x4C,0xBC,0xFE,0xC6,0xBE,0xD0,0x03,0x20,0xCA,0xFC,0xA9,0x50, + 0x85,0xA7,0xA2,0x08,0x78,0x20,0xBD,0xFC,0xD0,0xEA,0xA9,0x78,0x20,0xAF,0xFB,0xD0, + 0xE3,0xC6,0xA7,0xD0,0xDF,0x20,0x97,0xFB,0xC6,0xAB,0x10,0xD8,0xA2,0x0A,0x20,0xBD, + 0xFC,0x58,0xE6,0xAB,0xA5,0xBE,0xF0,0x30,0x20,0x8E,0xFB,0xA2,0x09,0x86,0xA5,0x86, + 0xB6,0xD0,0x83,0x08,0x78,0xAD,0x11,0xD0,0x09,0x10,0x8D,0x11,0xD0,0x20,0xCA,0xFC, + 0xA9,0x7F,0x8D,0x0D,0xDC,0x20,0xDD,0xFD,0xAD,0xA0,0x02,0xF0,0x09,0x8D,0x15,0x03, + 0xAD,0x9F,0x02,0x8D,0x14,0x03,0x28,0x60,0x20,0x93,0xFC,0xF0,0x97,0xBD,0x93,0xFD, + 0x8D,0x14,0x03,0xBD,0x94,0xFD,0x8D,0x15,0x03,0x60,0xA5,0x01,0x09,0x20,0x85,0x01, + 0x60,0x38,0xA5,0xAC,0xE5,0xAE,0xA5,0xAD,0xE5,0xAF,0x60,0xE6,0xAC,0xD0,0x02,0xE6, + 0xAD,0x60,0xA2,0xFF,0x78,0x9A,0xD8,0x20,0x02,0xFD,0xD0,0x03,0x6C,0x00,0x80,0x8E, + 0x16,0xD0,0x20,0xA3,0xFD,0x20,0x50,0xFD,0x20,0x15,0xFD,0x20,0x5B,0xFF,0x58,0x6C, + 0x00,0xA0,0xA2,0x05,0xBD,0x0F,0xFD,0xDD,0x03,0x80,0xD0,0x03,0xCA,0xD0,0xF5,0x60, + 0xC3,0xC2,0xCD,0x38,0x30,0xA2,0x30,0xA0,0xFD,0x18,0x86,0xC3,0x84,0xC4,0xA0,0x1F, + 0xB9,0x14,0x03,0xB0,0x02,0xB1,0xC3,0x91,0xC3,0x99,0x14,0x03,0x88,0x10,0xF1,0x60, + 0x31,0xEA,0x66,0xFE,0x47,0xFE,0x4A,0xF3,0x91,0xF2,0x0E,0xF2,0x50,0xF2,0x33,0xF3, + 0x57,0xF1,0xCA,0xF1,0xED,0xF6,0x3E,0xF1,0x2F,0xF3,0x66,0xFE,0xA5,0xF4,0xED,0xF5, + 0xA9,0x00,0xA8,0x99,0x02,0x00,0x99,0x00,0x02,0x99,0x00,0x03,0xC8,0xD0,0xF4,0xA2, + 0x3C,0xA0,0x03,0x86,0xB2,0x84,0xB3,0xA8,0xA9,0x03,0x85,0xC2,0xE6,0xC2,0xB1,0xC1, + 0xAA,0xA9,0x55,0x91,0xC1,0xD1,0xC1,0xD0,0x0F,0x2A,0x91,0xC1,0xD1,0xC1,0xD0,0x08, + 0x8A,0x91,0xC1,0xC8,0xD0,0xE8,0xF0,0xE4,0x98,0xAA,0xA4,0xC2,0x18,0x20,0x2D,0xFE, + 0xA9,0x08,0x8D,0x82,0x02,0xA9,0x04,0x8D,0x88,0x02,0x60,0x6A,0xFC,0xCD,0xFB,0x31, + 0xEA,0x2C,0xF9,0xA9,0x7F,0x8D,0x0D,0xDC,0x8D,0x0D,0xDD,0x8D,0x00,0xDC,0xA9,0x08, + 0x8D,0x0E,0xDC,0x8D,0x0E,0xDD,0x8D,0x0F,0xDC,0x8D,0x0F,0xDD,0xA2,0x00,0x8E,0x03, + 0xDC,0x8E,0x03,0xDD,0x8E,0x18,0xD4,0xCA,0x8E,0x02,0xDC,0xA9,0x07,0x8D,0x00,0xDD, + 0xA9,0x3F,0x8D,0x02,0xDD,0xA9,0xE7,0x85,0x01,0xA9,0x2F,0x85,0x00,0xAD,0xA6,0x02, + 0xF0,0x0A,0xA9,0x25,0x8D,0x04,0xDC,0xA9,0x40,0x4C,0xF3,0xFD,0xA9,0x95,0x8D,0x04, + 0xDC,0xA9,0x42,0x8D,0x05,0xDC,0x4C,0x6E,0xFF,0x85,0xB7,0x86,0xBB,0x84,0xBC,0x60, + 0x85,0xB8,0x86,0xBA,0x84,0xB9,0x60,0xA5,0xBA,0xC9,0x02,0xD0,0x0D,0xAD,0x97,0x02, + 0x48,0xA9,0x00,0x8D,0x97,0x02,0x68,0x60,0x85,0x9D,0xA5,0x90,0x05,0x90,0x85,0x90, + 0x60,0x8D,0x85,0x02,0x60,0x90,0x06,0xAE,0x83,0x02,0xAC,0x84,0x02,0x8E,0x83,0x02, + 0x8C,0x84,0x02,0x60,0x90,0x06,0xAE,0x81,0x02,0xAC,0x82,0x02,0x8E,0x81,0x02,0x8C, + 0x82,0x02,0x60,0x78,0x6C,0x18,0x03,0x48,0x8A,0x48,0x98,0x48,0xA9,0x7F,0x8D,0x0D, + 0xDD,0xAC,0x0D,0xDD,0x30,0x1C,0x20,0x02,0xFD,0xD0,0x03,0x6C,0x02,0x80,0x20,0xBC, + 0xF6,0x20,0xE1,0xFF,0xD0,0x0C,0x20,0x15,0xFD,0x20,0xA3,0xFD,0x20,0x18,0xE5,0x6C, + 0x02,0xA0,0x98,0x2D,0xA1,0x02,0xAA,0x29,0x01,0xF0,0x28,0xAD,0x00,0xDD,0x29,0xFB, + 0x05,0xB5,0x8D,0x00,0xDD,0xAD,0xA1,0x02,0x8D,0x0D,0xDD,0x8A,0x29,0x12,0xF0,0x0D, + 0x29,0x02,0xF0,0x06,0x20,0xD6,0xFE,0x4C,0x9D,0xFE,0x20,0x07,0xFF,0x20,0xBB,0xEE, + 0x4C,0xB6,0xFE,0x8A,0x29,0x02,0xF0,0x06,0x20,0xD6,0xFE,0x4C,0xB6,0xFE,0x8A,0x29, + 0x10,0xF0,0x03,0x20,0x07,0xFF,0xAD,0xA1,0x02,0x8D,0x0D,0xDD,0x68,0xA8,0x68,0xAA, + 0x68,0x40,0xC1,0x27,0x3E,0x1A,0xC5,0x11,0x74,0x0E,0xED,0x0C,0x45,0x06,0xF0,0x02, + 0x46,0x01,0xB8,0x00,0x71,0x00,0xAD,0x01,0xDD,0x29,0x01,0x85,0xA7,0xAD,0x06,0xDD, + 0xE9,0x1C,0x6D,0x99,0x02,0x8D,0x06,0xDD,0xAD,0x07,0xDD,0x6D,0x9A,0x02,0x8D,0x07, + 0xDD,0xA9,0x11,0x8D,0x0F,0xDD,0xAD,0xA1,0x02,0x8D,0x0D,0xDD,0xA9,0xFF,0x8D,0x06, + 0xDD,0x8D,0x07,0xDD,0x4C,0x59,0xEF,0xAD,0x95,0x02,0x8D,0x06,0xDD,0xAD,0x96,0x02, + 0x8D,0x07,0xDD,0xA9,0x11,0x8D,0x0F,0xDD,0xA9,0x12,0x4D,0xA1,0x02,0x8D,0xA1,0x02, + 0xA9,0xFF,0x8D,0x06,0xDD,0x8D,0x07,0xDD,0xAE,0x98,0x02,0x86,0xA8,0x60,0xAA,0xAD, + 0x96,0x02,0x2A,0xA8,0x8A,0x69,0xC8,0x8D,0x99,0x02,0x98,0x69,0x00,0x8D,0x9A,0x02, + 0x60,0xEA,0xEA,0x08,0x68,0x29,0xEF,0x48,0x48,0x8A,0x48,0x98,0x48,0xBA,0xBD,0x04, + 0x01,0x29,0x10,0xF0,0x03,0x6C,0x16,0x03,0x6C,0x14,0x03,0x20,0x18,0xE5,0xAD,0x12, + 0xD0,0xD0,0xFB,0xAD,0x19,0xD0,0x29,0x01,0x8D,0xA6,0x02,0x4C,0xDD,0xFD,0xA9,0x81, + 0x8D,0x0D,0xDC,0xAD,0x0E,0xDC,0x29,0x80,0x09,0x11,0x8D,0x0E,0xDC,0x4C,0x8E,0xEE, + 0x03,0x4C,0x5B,0xFF,0x4C,0xA3,0xFD,0x4C,0x50,0xFD,0x4C,0x15,0xFD,0x4C,0x1A,0xFD, + 0x4C,0x18,0xFE,0x4C,0xB9,0xED,0x4C,0xC7,0xED,0x4C,0x25,0xFE,0x4C,0x34,0xFE,0x4C, + 0x87,0xEA,0x4C,0x21,0xFE,0x4C,0x13,0xEE,0x4C,0xDD,0xED,0x4C,0xEF,0xED,0x4C,0xFE, + 0xED,0x4C,0x0C,0xED,0x4C,0x09,0xED,0x4C,0x07,0xFE,0x4C,0x00,0xFE,0x4C,0xF9,0xFD, + 0x6C,0x1A,0x03,0x6C,0x1C,0x03,0x6C,0x1E,0x03,0x6C,0x20,0x03,0x6C,0x22,0x03,0x6C, + 0x24,0x03,0x6C,0x26,0x03,0x4C,0x9E,0xF4,0x4C,0xDD,0xF5,0x4C,0xE4,0xF6,0x4C,0xDD, + 0xF6,0x6C,0x28,0x03,0x6C,0x2A,0x03,0x6C,0x2C,0x03,0x4C,0x9B,0xF6,0x4C,0x05,0xE5, + 0x4C,0x0A,0xE5,0x4C,0x00,0xE5,0x52,0x52,0x42,0x59,0x43,0xFE,0xE2,0xFC,0x48,0xFF}; + +uint8_t read6502(uint16_t address) { + if ((address >= 53280) && (address <=53294)) return HIGHVIC[address-53280]; + if ((address >= 0xA000)&&(address < 0xC000)) return pgm_read_byte_near(BIOS+(address - 0xA000));//BASIC ROM + if (address >= 0xE000) return pgm_read_byte_near(BIOS+(address - 0xC000)); //KERNAL ROM + if ((address >= 0xD000)&&(address < 0xD800)) return(0); //VIC2 and SID + if (address < RAM_SIZE) return(RAM[address]); //free RAM for user +} + + +void write6502(uint16_t address, uint8_t value) { + if (address < RAM_SIZE) RAM[address] = value; + if ((address >= 53280) && (address <=53294)) HIGHVIC[address-53280]=value; + // serout(value); + //if ((address>=0x0400)&&(address<0x07E8)) { + if ((address>1023)&&(address<2024)) { + //VIDEO RAM + } +} + +//a few general functions used by various other functions +void push16(uint16_t pushval) { + write6502(BASE_STACK + sp, (pushval >> 8) & 0xFF); + write6502(BASE_STACK + ((sp - 1) & 0xFF), pushval & 0xFF); + sp -= 2; +} + +void push8(uint8_t pushval) { + write6502(BASE_STACK + sp--, pushval); +} + +uint16_t pull16() { + uint16_t temp16; + temp16 = read6502(BASE_STACK + ((sp + 1) & 0xFF)) | ((uint16_t)read6502(BASE_STACK + ((sp + 2) & 0xFF)) << 8); + sp += 2; + return(temp16); +} + +uint8_t pull8() { + return (read6502(BASE_STACK + ++sp)); +} + +void reset6502() { + pc = (uint16_t)read6502(0xFFFC) | ((uint16_t)read6502(0xFFFD) << 8); + Serial.println("set pc"); + a = 0; + x = 0; + y = 0; + sp = 0xFD; + cpustatus |= FLAG_CONSTANT; +} + +//addressing mode functions, calculates effective addresses +void imp() { //implied +} + +void acc() { //accumulator + useaccum = 1; +} + +void imm() { //immediate + ea = pc++; +} + +void zp() { //zero-page + ea = (uint16_t)read6502((uint16_t)pc++); +} + +void zpx() { //zero-page,X + ea = ((uint16_t)read6502((uint16_t)pc++) + (uint16_t)x) & 0xFF; //zero-page wraparound +} + +void zpy() { //zero-page,Y + ea = ((uint16_t)read6502((uint16_t)pc++) + (uint16_t)y) & 0xFF; //zero-page wraparound +} + +void rel() { //relative for branch ops (8-bit immediate value, sign-extended) + reladdr = (uint16_t)read6502(pc++); + if (reladdr & 0x80) reladdr |= 0xFF00; +} + +void abso() { //absolute + ea = (uint16_t)read6502(pc) | ((uint16_t)read6502(pc+1) << 8); + pc += 2; +} + +void absx() { //absolute,X + uint16_t startpage; + ea = ((uint16_t)read6502(pc) | ((uint16_t)read6502(pc+1) << 8)); + startpage = ea & 0xFF00; + ea += (uint16_t)x; + + pc += 2; +} + +void absy() { //absolute,Y + uint16_t startpage; + ea = ((uint16_t)read6502(pc) | ((uint16_t)read6502(pc+1) << 8)); + startpage = ea & 0xFF00; + ea += (uint16_t)y; + + pc += 2; +} + +void ind() { //indirect + uint16_t eahelp, eahelp2; + eahelp = (uint16_t)read6502(pc) | (uint16_t)((uint16_t)read6502(pc+1) << 8); + eahelp2 = (eahelp & 0xFF00) | ((eahelp + 1) & 0x00FF); //replicate 6502 page-boundary wraparound bug + ea = (uint16_t)read6502(eahelp) | ((uint16_t)read6502(eahelp2) << 8); + pc += 2; +} + +void indx() { // (indirect,X) + uint16_t eahelp; + eahelp = (uint16_t)(((uint16_t)read6502(pc++) + (uint16_t)x) & 0xFF); //zero-page wraparound for table pointer + ea = (uint16_t)read6502(eahelp & 0x00FF) | ((uint16_t)read6502((eahelp+1) & 0x00FF) << 8); +} + +void indy() { // (indirect),Y + uint16_t eahelp, eahelp2, startpage; + eahelp = (uint16_t)read6502(pc++); + eahelp2 = (eahelp & 0xFF00) | ((eahelp + 1) & 0x00FF); //zero-page wraparound + ea = (uint16_t)read6502(eahelp) | ((uint16_t)read6502(eahelp2) << 8); + startpage = ea & 0xFF00; + ea += (uint16_t)y; + +} + +static uint16_t getvalue() { + if (useaccum) return((uint16_t)a); + else return((uint16_t)read6502(ea)); +} + +static uint16_t getvalue16() { + return((uint16_t)read6502(ea) | ((uint16_t)read6502(ea+1) << 8)); +} + +void putvalue(uint16_t saveval) { + if (useaccum) a = (uint8_t)(saveval & 0x00FF); + else write6502(ea, (saveval & 0x00FF)); +} + + +//instruction handler functions +void adc() { + value = getvalue(); + result = (uint16_t)a + value + (uint16_t)(cpustatus & FLAG_CARRY); + + carrycalc(result); + zerocalc(result); + overflowcalc(result, a, value); + signcalc(result); + + #ifndef NES_CPU + if (cpustatus & FLAG_DECIMAL) { + clearcarry(); + + if ((a & 0x0F) > 0x09) { + a += 0x06; + } + if ((a & 0xF0) > 0x90) { + a += 0x60; + setcarry(); + } + + clockticks6502++; + } + #endif + + saveaccum(result); +} + +void op_and() { + value = getvalue(); + result = (uint16_t)a & value; + + zerocalc(result); + signcalc(result); + + saveaccum(result); +} + +void asl() { + value = getvalue(); + result = value << 1; + + carrycalc(result); + zerocalc(result); + signcalc(result); + + putvalue(result); +} + +void bcc() { + if ((cpustatus & FLAG_CARRY) == 0) { + oldpc = pc; + pc += reladdr; + if ((oldpc & 0xFF00) != (pc & 0xFF00)) clockticks6502 += 2; //check if jump crossed a page boundary + else clockticks6502++; + } +} + +void bcs() { + if ((cpustatus & FLAG_CARRY) == FLAG_CARRY) { + oldpc = pc; + pc += reladdr; + if ((oldpc & 0xFF00) != (pc & 0xFF00)) clockticks6502 += 2; //check if jump crossed a page boundary + else clockticks6502++; + } +} + +void beq() { + if ((cpustatus & FLAG_ZERO) == FLAG_ZERO) { + oldpc = pc; + pc += reladdr; + if ((oldpc & 0xFF00) != (pc & 0xFF00)) clockticks6502 += 2; //check if jump crossed a page boundary + else clockticks6502++; + } +} + +void op_bit() { + value = getvalue(); + result = (uint16_t)a & value; + + zerocalc(result); + cpustatus = (cpustatus & 0x3F) | (uint8_t)(value & 0xC0); +} + +void bmi() { + if ((cpustatus & FLAG_SIGN) == FLAG_SIGN) { + oldpc = pc; + pc += reladdr; + if ((oldpc & 0xFF00) != (pc & 0xFF00)) clockticks6502 += 2; //check if jump crossed a page boundary + else clockticks6502++; + } +} + +void bne() { + if ((cpustatus & FLAG_ZERO) == 0) { + oldpc = pc; + pc += reladdr; + if ((oldpc & 0xFF00) != (pc & 0xFF00)) clockticks6502 += 2; //check if jump crossed a page boundary + else clockticks6502++; + } +} + +void bpl() { + if ((cpustatus & FLAG_SIGN) == 0) { + oldpc = pc; + pc += reladdr; + if ((oldpc & 0xFF00) != (pc & 0xFF00)) clockticks6502 += 2; //check if jump crossed a page boundary + else clockticks6502++; + } +} + +void brk() { + pc++; + push16(pc); //push next instruction address onto stack + push8(cpustatus | FLAG_BREAK); //push CPU cpustatus to stack + setinterrupt(); //set interrupt flag + pc = (uint16_t)read6502(0xFFFE) | ((uint16_t)read6502(0xFFFF) << 8); +} + +void bvc() { + if ((cpustatus & FLAG_OVERFLOW) == 0) { + oldpc = pc; + pc += reladdr; + if ((oldpc & 0xFF00) != (pc & 0xFF00)) clockticks6502 += 2; //check if jump crossed a page boundary + else clockticks6502++; + } +} + +void bvs() { + if ((cpustatus & FLAG_OVERFLOW) == FLAG_OVERFLOW) { + oldpc = pc; + pc += reladdr; + if ((oldpc & 0xFF00) != (pc & 0xFF00)) clockticks6502 += 2; //check if jump crossed a page boundary + else clockticks6502++; + } +} + +void clc() { + clearcarry(); +} + +void cld() { + cleardecimal(); +} + +void cli() { + clearinterrupt(); +} + +void clv() { + clearoverflow(); +} + +void cmp() { + value = getvalue(); + result = (uint16_t)a - value; + + if (a >= (uint8_t)(value & 0x00FF)) setcarry(); + else clearcarry(); + if (a == (uint8_t)(value & 0x00FF)) setzero(); + else clearzero(); + signcalc(result); +} + +void cpx() { + value = getvalue(); + result = (uint16_t)x - value; + + if (x >= (uint8_t)(value & 0x00FF)) setcarry(); + else clearcarry(); + if (x == (uint8_t)(value & 0x00FF)) setzero(); + else clearzero(); + signcalc(result); +} + +void cpy() { + value = getvalue(); + result = (uint16_t)y - value; + + if (y >= (uint8_t)(value & 0x00FF)) setcarry(); + else clearcarry(); + if (y == (uint8_t)(value & 0x00FF)) setzero(); + else clearzero(); + signcalc(result); +} + +void dec() { + value = getvalue(); + result = value - 1; + + zerocalc(result); + signcalc(result); + + putvalue(result); +} + +void dex() { + x--; + + zerocalc(x); + signcalc(x); +} + +void dey() { + y--; + + zerocalc(y); + signcalc(y); +} + +void eor() { + value = getvalue(); + result = (uint16_t)a ^ value; + + zerocalc(result); + signcalc(result); + + saveaccum(result); +} + +void inc() { + value = getvalue(); + result = value + 1; + + zerocalc(result); + signcalc(result); + + putvalue(result); +} + +void inx() { + x++; + + zerocalc(x); + signcalc(x); +} + +void iny() { + y++; + + zerocalc(y); + signcalc(y); +} + +void jmp() { + pc = ea; +} + +void jsr() { + push16(pc - 1); + pc = ea; +} + +void lda() { + value = getvalue(); + a = (uint8_t)(value & 0x00FF); + + zerocalc(a); + signcalc(a); +} + +void ldx() { + value = getvalue(); + x = (uint8_t)(value & 0x00FF); + + zerocalc(x); + signcalc(x); +} + +void ldy() { + value = getvalue(); + y = (uint8_t)(value & 0x00FF); + + zerocalc(y); + signcalc(y); +} + +void lsr() { + value = getvalue(); + result = value >> 1; + + if (value & 1) setcarry(); + else clearcarry(); + zerocalc(result); + signcalc(result); + + putvalue(result); +} + +void nop() { +} + +void ora() { + value = getvalue(); + result = (uint16_t)a | value; + + zerocalc(result); + signcalc(result); + + saveaccum(result); +} + +void pha() { + push8(a); +} + +void php() { + push8(cpustatus | FLAG_BREAK); +} + +void pla() { + a = pull8(); + + zerocalc(a); + signcalc(a); +} + +void plp() { + cpustatus = pull8() | FLAG_CONSTANT; +} + +void rol() { + value = getvalue(); + result = (value << 1) | (cpustatus & FLAG_CARRY); + + carrycalc(result); + zerocalc(result); + signcalc(result); + + putvalue(result); +} + +void ror() { + value = getvalue(); + result = (value >> 1) | ((cpustatus & FLAG_CARRY) << 7); + + if (value & 1) setcarry(); + else clearcarry(); + zerocalc(result); + signcalc(result); + + putvalue(result); +} + +void rti() { + cpustatus = pull8(); + value = pull16(); + pc = value; +} + +void rts() { + value = pull16(); + pc = value + 1; +} + +void sbc() { + value = getvalue() ^ 0x00FF; + result = (uint16_t)a + value + (uint16_t)(cpustatus & FLAG_CARRY); + + carrycalc(result); + zerocalc(result); + overflowcalc(result, a, value); + signcalc(result); + + #ifndef NES_CPU + if (cpustatus & FLAG_DECIMAL) { + clearcarry(); + + a -= 0x66; + if ((a & 0x0F) > 0x09) { + a += 0x06; + } + if ((a & 0xF0) > 0x90) { + a += 0x60; + setcarry(); + } + + clockticks6502++; + } + #endif + + saveaccum(result); +} + +void sec() { + setcarry(); +} + +void sed() { + setdecimal(); +} + +void sei() { + setinterrupt(); +} + +void sta() { + putvalue(a); +} + +void stx() { + putvalue(x); +} + +void sty() { + putvalue(y); +} + +void tax() { + x = a; + + zerocalc(x); + signcalc(x); +} + +void tay() { + y = a; + + zerocalc(y); + signcalc(y); +} + +void tsx() { + x = sp; + + zerocalc(x); + signcalc(x); +} + +void txa() { + a = x; + + zerocalc(a); + signcalc(a); +} + +void txs() { + sp = x; +} + +void tya() { + a = y; + + zerocalc(a); + signcalc(a); +} + +//undocumented instructions +#ifdef UNDOCUMENTED + void lax() { + lda(); + ldx(); + } + + void sax() { + sta(); + stx(); + putvalue(a & x); + } + + void dcp() { + dec(); + cmp(); + } + + void isb() { + inc(); + sbc(); + } + + void slo() { + asl(); + ora(); + } + + void rla() { + rol(); + op_and(); + } + + void sre() { + lsr(); + eor(); + } + + void rra() { + ror(); + adc(); + } +#else + #define lax nop + #define sax nop + #define dcp nop + #define isb nop + #define slo nop + #define rla nop + #define sre nop + #define rra nop +#endif + + +void nmi6502() { + push16(pc); + push8(cpustatus); + cpustatus |= FLAG_INTERRUPT; + pc = (uint16_t)read6502(0xFFFA) | ((uint16_t)read6502(0xFFFB) << 8); +} + +void irq6502() { + push16(pc); + push8(cpustatus); + cpustatus |= FLAG_INTERRUPT; + pc = (uint16_t)read6502(0xFFFE) | ((uint16_t)read6502(0xFFFF) << 8); +} + +#ifdef USE_TIMING +prog_char ticktable[256] PROGMEM = { + 7, 6, 2, 8, 3, 3, 5, 5, 3, 2, 2, 2, 4, 4, 6, 6, + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, + 6, 6, 2, 8, 3, 3, 5, 5, 4, 2, 2, 2, 4, 4, 6, 6, + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, + 6, 6, 2, 8, 3, 3, 5, 5, 3, 2, 2, 2, 3, 4, 6, 6, + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, + 6, 6, 2, 8, 3, 3, 5, 5, 4, 2, 2, 2, 5, 4, 6, 6, + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, + 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 2, 4, 4, 4, 4, + 2, 6, 2, 6, 4, 4, 4, 4, 2, 5, 2, 5, 5, 5, 5, 5, + 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 2, 4, 4, 4, 4, + 2, 5, 2, 5, 4, 4, 4, 4, 2, 4, 2, 4, 4, 4, 4, 4, + 2, 6, 2, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 6, 6, + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, + 2, 6, 2, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 6, 6, + 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7 +}; +#endif + +void exec6502(int32_t tickcount) { +#ifdef USE_TIMING + clockgoal6502 += tickcount; + + while (clockgoal6502 > 0) { +#else + while (tickcount--) { +#endif + opcode = read6502(pc++); + cpustatus |= FLAG_CONSTANT; + + useaccum = 0; + + switch (opcode) { + case 0x0: + imp(); + brk(); + break; + case 0x1: + indx(); + ora(); + break; + case 0x5: + zp(); + ora(); + break; + case 0x6: + zp(); + asl(); + break; + case 0x8: + imp(); + php(); + break; + case 0x9: + imm(); + ora(); + break; + case 0xA: + acc(); + asl(); + break; + case 0xD: + abso(); + ora(); + break; + case 0xE: + abso(); + asl(); + break; + case 0x10: + rel(); + bpl(); + break; + case 0x11: + indy(); + ora(); + break; + case 0x15: + zpx(); + ora(); + break; + case 0x16: + zpx(); + asl(); + break; + case 0x18: + imp(); + clc(); + break; + case 0x19: + absy(); + ora(); + break; + case 0x1D: + absx(); + ora(); + break; + case 0x1E: + absx(); + asl(); + break; + case 0x20: + abso(); + jsr(); + break; + case 0x21: + indx(); + op_and(); + break; + case 0x24: + zp(); + op_bit(); + break; + case 0x25: + zp(); + op_and(); + break; + case 0x26: + zp(); + rol(); + break; + case 0x28: + imp(); + plp(); + break; + case 0x29: + imm(); + op_and(); + break; + case 0x2A: + acc(); + rol(); + break; + case 0x2C: + abso(); + op_bit(); + break; + case 0x2D: + abso(); + op_and(); + break; + case 0x2E: + abso(); + rol(); + break; + case 0x30: + rel(); + bmi(); + break; + case 0x31: + indy(); + op_and(); + break; + case 0x35: + zpx(); + op_and(); + break; + case 0x36: + zpx(); + rol(); + break; + case 0x38: + imp(); + sec(); + break; + case 0x39: + absy(); + op_and(); + break; + case 0x3D: + absx(); + op_and(); + break; + case 0x3E: + absx(); + rol(); + break; + case 0x40: + imp(); + rti(); + break; + case 0x41: + indx(); + eor(); + break; + case 0x45: + zp(); + eor(); + break; + case 0x46: + zp(); + lsr(); + break; + case 0x48: + imp(); + pha(); + break; + case 0x49: + imm(); + eor(); + break; + case 0x4A: + acc(); + lsr(); + break; + case 0x4C: + abso(); + jmp(); + break; + case 0x4D: + abso(); + eor(); + break; + case 0x4E: + abso(); + lsr(); + break; + case 0x50: + rel(); + bvc(); + break; + case 0x51: + indy(); + eor(); + break; + case 0x55: + zpx(); + eor(); + break; + case 0x56: + zpx(); + lsr(); + break; + case 0x58: + imp(); + cli(); + break; + case 0x59: + absy(); + eor(); + break; + case 0x5D: + absx(); + eor(); + break; + case 0x5E: + absx(); + lsr(); + break; + case 0x60: + imp(); + rts(); + break; + case 0x61: + indx(); + adc(); + break; + case 0x65: + zp(); + adc(); + break; + case 0x66: + zp(); + ror(); + break; + case 0x68: + imp(); + pla(); + break; + case 0x69: + imm(); + adc(); + break; + case 0x6A: + acc(); + ror(); + break; + case 0x6C: + ind(); + jmp(); + break; + case 0x6D: + abso(); + adc(); + break; + case 0x6E: + abso(); + ror(); + break; + case 0x70: + rel(); + bvs(); + break; + case 0x71: + indy(); + adc(); + break; + case 0x75: + zpx(); + adc(); + break; + case 0x76: + zpx(); + ror(); + break; + case 0x78: + imp(); + sei(); + break; + case 0x79: + absy(); + adc(); + break; + case 0x7D: + absx(); + adc(); + break; + case 0x7E: + absx(); + ror(); + break; + case 0x81: + indx(); + sta(); + break; + case 0x84: + zp(); + sty(); + break; + case 0x85: + zp(); + sta(); + break; + case 0x86: + zp(); + stx(); + break; + case 0x88: + imp(); + dey(); + break; + case 0x8A: + imp(); + txa(); + break; + case 0x8C: + abso(); + sty(); + break; + case 0x8D: + abso(); + sta(); + break; + case 0x8E: + abso(); + stx(); + break; + case 0x90: + rel(); + bcc(); + break; + case 0x91: + indy(); + sta(); + break; + case 0x94: + zpx(); + sty(); + break; + case 0x95: + zpx(); + sta(); + break; + case 0x96: + zpy(); + stx(); + break; + case 0x98: + imp(); + tya(); + break; + case 0x99: + absy(); + sta(); + break; + case 0x9A: + imp(); + txs(); + break; + case 0x9D: + absx(); + sta(); + break; + case 0xA0: + imm(); + ldy(); + break; + case 0xA1: + indx(); + lda(); + break; + case 0xA2: + imm(); + ldx(); + break; + case 0xA4: + zp(); + ldy(); + break; + case 0xA5: + zp(); + lda(); + break; + case 0xA6: + zp(); + ldx(); + break; + case 0xA8: + imp(); + tay(); + break; + case 0xA9: + imm(); + lda(); + break; + case 0xAA: + imp(); + tax(); + break; + case 0xAC: + abso(); + ldy(); + break; + case 0xAD: + abso(); + lda(); + break; + case 0xAE: + abso(); + ldx(); + break; + case 0xB0: + rel(); + bcs(); + break; + case 0xB1: + indy(); + lda(); + break; + case 0xB4: + zpx(); + ldy(); + break; + case 0xB5: + zpx(); + lda(); + break; + case 0xB6: + zpy(); + ldx(); + break; + case 0xB8: + imp(); + clv(); + break; + case 0xB9: + absy(); + lda(); + break; + case 0xBA: + imp(); + tsx(); + break; + case 0xBC: + absx(); + ldy(); + break; + case 0xBD: + absx(); + lda(); + break; + case 0xBE: + absy(); + ldx(); + break; + case 0xC0: + imm(); + cpy(); + break; + case 0xC1: + indx(); + cmp(); + break; + case 0xC4: + zp(); + cpy(); + break; + case 0xC5: + zp(); + cmp(); + break; + case 0xC6: + zp(); + dec(); + break; + case 0xC8: + imp(); + iny(); + break; + case 0xC9: + imm(); + cmp(); + break; + case 0xCA: + imp(); + dex(); + break; + case 0xCC: + abso(); + cpy(); + break; + case 0xCD: + abso(); + cmp(); + break; + case 0xCE: + abso(); + dec(); + break; + case 0xD0: + rel(); + bne(); + break; + case 0xD1: + indy(); + cmp(); + break; + case 0xD5: + zpx(); + cmp(); + break; + case 0xD6: + zpx(); + dec(); + break; + case 0xD8: + imp(); + cld(); + break; + case 0xD9: + absy(); + cmp(); + break; + case 0xDD: + absx(); + cmp(); + break; + case 0xDE: + absx(); + dec(); + break; + case 0xE0: + imm(); + cpx(); + break; + case 0xE1: + indx(); + sbc(); + break; + case 0xE4: + zp(); + cpx(); + break; + case 0xE5: + zp(); + sbc(); + break; + case 0xE6: + zp(); + inc(); + break; + case 0xE8: + imp(); + inx(); + break; + case 0xE9: + imm(); + sbc(); + break; + case 0xEB: + imm(); + sbc(); + break; + case 0xEC: + abso(); + cpx(); + break; + case 0xED: + abso(); + sbc(); + break; + case 0xEE: + abso(); + inc(); + break; + case 0xF0: + rel(); + beq(); + break; + case 0xF1: + indy(); + sbc(); + break; + case 0xF5: + zpx(); + sbc(); + break; + case 0xF6: + zpx(); + inc(); + break; + case 0xF8: + imp(); + sed(); + break; + case 0xF9: + absy(); + sbc(); + break; + case 0xFD: + absx(); + sbc(); + break; + case 0xFE: + absx(); + inc(); + break; + } +#ifdef USE_TIMING + clockgoal6502 -= (int32_t)pgm_read_byte_near(ticktable + opcode); +#endif + instructions++; + } +} + +uint16_t getpc() { + return(pc); +} + +uint8_t getop() { + return(opcode); +} + + diff --git a/esp8266C64_Browser.ino b/esp8266C64_Browser.ino new file mode 100644 index 0000000..6cd4211 --- /dev/null +++ b/esp8266C64_Browser.ino @@ -0,0 +1,352 @@ +// C64 Emulator, works with esp8266 using webbrowser as display +// see +// http://www.esp8266.com/viewtopic.php?f=8&t=4704&p=28932#p28932 +// based upon +// http://forum.arduino.cc/index.php?topic=193216.msg1793065#msg1793065 + +// Remarks speed: +// max speed is 5 frames per second, this amounts to 5 kB (kilobytes) per second +// Reduced the number of RAM bytes send from esp8266 to zero and +// als reduced the processing of this info in browser to zero bytes, +// but this has no effect on framerate (still 5 fps) +// slow speed possibly due to protocolo XMLHTTP! +// Serial debug works at 115200 baudrate, so 14kB per second and would make 14 fps possible! + +//find free space +//extern "C" {#include "user_interface.h"} + +#include +#include +#include + +//const char* ssid = "DeltaFlyer"; +const char* ssid = "Voyager"; +const char* password = "keelta01"; + +ESP8266WebServer server(80); +uint8_t curkey = 0; + +#define EXECUTES_PER_RUN 100 +#define RAM_SIZE 24576 +uint8_t RAM[RAM_SIZE]; +uint8_t HIGHVIC[16];//color of background/border/sprites are situated here + +uint16_t getpc(); +uint8_t getop(); +void exec6502(int32_t tickcount); +void reset6502(); +void serout(uint8_t val) { + Serial.write(val); +} + +//server.send_uint8(200, "text/plain", msg); +void send_uint8(const uint8_t *data, const size_t data_length) { +/* + else if(path.endsWith(".htm")) dataType = "text/html"; + else if(path.endsWith(".css")) dataType = "text/css"; + else if(path.endsWith(".js")) dataType = "application/javascript"; + else if(path.endsWith(".png")) dataType = "image/png"; + else if(path.endsWith(".gif")) dataType = "image/gif"; + else if(path.endsWith(".jpg")) dataType = "image/jpeg"; + else if(path.endsWith(".ico")) dataType = "image/x-icon"; + else if(path.endsWith(".xml")) dataType = "text/xml"; + else if(path.endsWith(".pdf")) dataType = "application/pdf"; + else if(path.endsWith(".zip")) dataType = "application/zip"; + //if(server.hasArg("download")) dataType = "application/octet-stream"; +*/ + String data_type="application/octet-stream"; + //String data_type="image/png"; + server.sendHeader("Content-Length", String(data_length)); + server.send(200, data_type.c_str(), ""); + + WiFiClient client = server.client(); + client.write(data, data_length); +} + +const char gui[] PROGMEM = + "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n" + "\n

VIC-II client

\n" + "
for use with ESP8266 based C64 CPU emulator

\n" + "
10 fps
" + "\n" + "
\n" + "\n" + "\n"; + +//Onready vindt alleen plaats als er iets wordt verzonden naar de browser! +//responeType arrayBuffer werkt niet goed!!! ALternatief is blob? +// " xmlhttp.responseType = 'arraybuffer';\n" + +const char vicii[] PROGMEM = + "var canvas;\n" + "var ctx;\n" + "var VICRAM;\n" + "var RAM_SIZE=1025;\n" + "var interval;\n" + "var xmlhttp=new XMLHttpRequest();\n" + "function printLog(msg){var log=document.getElementById('Log');log.innerHTML=log.innerHTML+msg+'
';log.scrollTop = log.scrollHeight}\n" + "document.addEventListener('DOMContentLoaded',initCanvas,false);\n" + "var fC=0;\n" + "var cS=0;\n" + "setInterval(updateFPS,1000);\n" + "setInterval(function(){cS=!cS;},500);\n" + "function updateFPS(){\n" + " var fT = document.getElementById('fps');\n" + " fT.innerHTML=fC+ ' fps';\n" + " fC=0;" + "}\n" + "function initCanvas(){\n" + " printLog('initCanvas');\n" + " canvas = document.getElementById('vicoutput');\n" + " canvas.width=384;\n" + " canvas.height=264;\n" + " ctx = canvas.getContext('2d');\n" + " ctx.font = '12px Lucida Console';\n" + " VICRAM = new Uint8Array(RAM_SIZE);\n" + " refreshVICRAM();\n" + " document.addEventListener('keypress', keypress, false);\n" + "}\n" + "var isAlive=true;\n" + "var aliveTimer;\n" + "function alive( ){\n" + " if (!isAlive) {\n" + " xmlhttp.abort();refreshVICRAM();\n" + " printLog('Restarting connection');\n" + " }\n " + "}\n" + "function refreshVICRAM( ){\n" + // based on https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data + " xmlhttp.onreadystatechange=function(){\n" + " if (xmlhttp.readyState==4 && xmlhttp.status==200){\n" + " isAlive=true;\n" + " var aB=xmlhttp.response;\n" + " if (aB){\n" + " VICRAM = new Uint8Array(aB);\n" + " refreshDisplay();\n" + " setTimeout(refreshVICRAM,0);\n" + " }\n" + " }\n" + " }\n" + " var tp='GET';\n" + " var url='/VICIIRefresh';\n" + " if (keyp.length>0) {tp='POST';url=url+keyp;}\n" + " keyp='';\n" + " xmlhttp.open(tp,url,true);\n" + " xmlhttp.setRequestHeader('Content-type','application/octet-stream');\n" + " xmlhttp.responseType='arraybuffer';\n" + " xmlhttp.send();\n" + " isAlive=false;\n" + " clearTimeout(aliveTimer);\n" + " aliveTimer=setTimeout(alive,3000);\n" + "}\n" +/* + "function dumpVICRAM(){\n" + " var msg='';\n" + " for (var i=0; i<120; i++){\n" + " var petscii = VICRAM[i];\n" + " if (petscii<32) petscii = petscii + 64;\n" + " msg=msg+String.fromCharCode(petscii);\n" + " var col=i % 40;\n" + " if (col==39) msg=msg+'
';\n" + " }\n" + " printLog(msg);\n" + "}\n" +*/ + //https://www.c64-wiki.com/index.php/Color + "var pal=['#000000','#FFFFFF','#880000','#AAFFEE','#CC44CC','#00CC55','#0000AA','#EEEE77','#DD8855','#664400','#FF7777','#333333','#777777','#AAFF66','#0088FF','#BBBBBB'];\n" + "function refreshDisplay(){\n" +// " printLog('refreshDisplay');\n" + " var tcol=pal[VICRAM[4]];\n"//text color + " var fcol=pal[VICRAM[5]];\n"//frame/border color + " var bcol=pal[VICRAM[6]];\n"//back color + " ctx.fillStyle=fcol;\n" + " ctx.fillRect(0,0,384,264);\n" + " ctx.fillStyle=bcol;\n" + " ctx.fillRect(32,32,320,200);\n" + " ctx.font='10px Lucida console';\n" + " ctx.textBaseline='top';\n" + " ctx.textAlign='left';\n" + " ctx.fillStyle=tcol;\n" + " var petscii;\n" + " for (var col=0;col<40;col++){\n" + " for (var row=0;row<40;row++){\n" + " petscii=VICRAM[24+row*40+col];\n"//char rom starts at 24 offset + " if (petscii<32) petscii = petscii + 64;\n" + " ctx.fillText(String.fromCharCode(petscii),32+col*8,32+row*8);\n" + " }\n" + " }\n" + " if (cS) ctx.fillRect(32+VICRAM[1]*8,32+VICRAM[0]*8,8,8);\n" + " fC++;\n" + "}\n" + "var keyp='';\n" + "function keypress(e) {\n" + " var keyCode = e.keyCode;\n" + " if (keyp.length==0) {keyp=keyp+'?';}else{keyp=keyp+'&';}\n" + " keyp=keyp+'k='+keyCode.toString();\n" +// " printLog('keyDown: '+keyCode);\n" + "}\n" + ; + +/* +void handleNotFound(){ + String message = "File Not Found: "; + server.send(404, "text/plain", message); + message += "'"+server.uri()+"'"; + Serial.println(message); +} +*/ + +void dumpScreenRam(){ + //Serial.println ("Cycles:"+cycles); + for (int i=0; i<1000; i++){ + uint8_t petscii = RAM[i + 1024]; + if (petscii<32) petscii = petscii + 64; + Serial.print (char(petscii)); + int col=i % 40; + if (col==39) Serial.println(); + } +} + +void VICIIRefresh(){ + wdt_disable(); + + //handle keypresses + if (server.args()){ + //Serial.println("keyDown: "); + //code using http://commodore64.se/wiki/index.php/Commodore_64_RAM_Addresses + int nrkeys=0; + for (uint8_t i=0; i63 && key<94) key = key - 64; + //make all upper case + if (key>96 && key<123) key = key - 32; + key = key & 0x7F; + RAM[631+nrkeys] = key ;//& 0x7F;//put key in buffer + nrkeys++; +/* + Serial.print("accept: "); + Serial.print(server.arg(i).toInt()); + Serial.print(" > "); + Serial.println(key); + }else{ + //Serial.print("reject: "); + //Serial.print(server.argName(i)); + //Serial.print("="); + //Serial.println(server.arg(i)); +*/ + } + } + RAM[198]=nrkeys;//number keys put in buffer + } + +//245-246 vector keyboard decode table +//655-656 vector keyboard table setup +//648 top of screen memory +//678 PAL(1)/NTSC(0) +//2024-?2047? sprite memory + + //send video ram + + int m=0; + uint8_t VICRAM[1024]; + VICRAM[0]=RAM[214];//line number of cursor (read/write) + VICRAM[1]=RAM[211];//col number of cursor (read/write) + VICRAM[2]=RAM[243];//low byte of location of color ram (RAM[244]*256+RAM[243], 55296-56319 default ) + VICRAM[3]=RAM[244];//high byte of location of color ram (RAM[244]*256+RAM[243], 55296-56319 default ) + VICRAM[4]=RAM[646];//text color code (read/write) + VICRAM[5]=HIGHVIC[0];//53280 border color + VICRAM[6]=HIGHVIC[1];//53281 background (0) + VICRAM[7]=HIGHVIC[2];//53282 background 1 (MC & ECM) + VICRAM[8]=HIGHVIC[3];//53283 background 2 (MC & ECM) + VICRAM[9]=HIGHVIC[4];//53284 background 3 (MC & ECM) + m=24; + for (int i=1024;i<2023;i++){//1024-2023 char ram + uint8_t petscii = RAM[i]; + if (petscii<32) petscii = petscii + 64; + VICRAM[m]=petscii; + m++; + } + send_uint8(VICRAM,1024); + //dumpScreenRam(); + wdt_enable(5000); +} + + +//Very nice articles about graphics mode of the VIC-II +//memory requirements of different modes: http://www.filfre.net/2013/08/how-things-work-commodore-64-and-summer-games-edition/ +//location of screen RAM @ 53272 (https://www.c64-wiki.com/index.php/Screen_RAM) +//how it works: http://dustlayer.com/c64-coding-tutorials/2013/4/8/episode-2-2-writing-to-the-c64-screen + +void setup () { + delay(1000); + Serial.begin (115200); + Serial.println("Setup Start"); +} + +unsigned long cycles=0; + +void initWifi(){ + // Start Wifi + WiFi.begin(ssid, password); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + Serial.print(" ip-address: "); + Serial.println(WiFi.localIP()); +} + +void initServer(){ + // set comm. pages + server.on ( "/",[]() { + Serial.println("Root page called"); + server.send_P ( 200, "text/html", gui); + }); + server.on ( "/VICII.js",[]() { + Serial.println("Javascript loaded"); + server.send_P ( 200, "text/plain", vicii); + }); + server.on ( "/VICIIRefresh", VICIIRefresh); + +// server.onNotFound(handleNotFound); + + // Start the server + server.begin(); +} + +/* +void checkFreeSpace(){ + //uint32_t freeSpace=system_get_free_heap_size(); + Serial.print (system_get_free_heap_size()); + Serial.println (" free space."); +} +*/ + +int fase=0; +void loop () { + if (fase!=4) {Serial.print ("Start boot fase ");Serial.println(fase);} + if (fase==0) {initWifi();} + if (fase==1) {initServer();} + //if (fase==2) {checkFreeSpace();} + if (fase==3) {reset6502();} + if (fase!=4) {Serial.print ("..finished boot fase ");Serial.println(fase);} + if (fase!=4) {fase++;return;} + + server.handleClient(); + + exec6502(EXECUTES_PER_RUN); + cycles++; +} +