Setup
The raw .drawio file is available here:
The .bin files of the project at generated at the directory ~/Documents/STM32_Projects/ledBlink/Debug
Code
Flashing binary array
const byte binary[21140] { 0x00, 0x50, 0x00, 0x20, 0xf1, 0x00, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0xf9, 0x04, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x39, 0x01, 0x00, 0x08, 0x5f, 0xf8, 0x08, 0xf1, 0x00, 0x21, 0x00, 0xf0, 0x04, 0xb8, 0x0b, 0x4b, 0x5b, 0x58, 0x43, 0x50, 0x04, 0x31, 0x0a, 0x48, 0x0a, 0x4b, 0x42, 0x18, 0x9a, 0x42, 0xff, 0xf4, 0xf6, 0xaf, 0x09, 0x4a, 0x00, 0xf0, 0x03, 0xb8, 0x00, 0x23, 0x42, 0xf8, 0x04, 0x3b, 0x07, 0x4b, 0x9a, 0x42, 0xff, 0xf4, 0xf9, 0xaf, 0x00, 0xf0, 0x45, 0xfa, 0x70, 0x47, 0x30, 0x19, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0xc8, 0x02, 0x00, 0x20, 0xc8, 0x02, 0x00, 0x20, 0x0c, 0x03, 0x00, 0x20, 0xff, 0xf7, 0xfe, 0xbf, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47, 0x03, 0x28, 0x8c, 0xbf, 0x02, 0x20, 0x00, 0x20, 0x70, 0x47, 0x70, 0x47, 0x00, 0x00, 0x03, 0x4b, 0x1b, 0x68, 0x9b, 0x7a, 0x13, 0xb1, 0x02, 0x4b, 0x05, 0x22, 0x1a, 0x60, 0x70, 0x47, 0x04, 0x03, 0x00, 0x20, 0x10, 0x03, 0x00, 0x20, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47, 0x01, 0x4b, 0x04, 0x22, 0x1a, 0x60, 0x70, 0x47, 0x10, 0x03, 0x00, 0x20, 0x10, 0xb5, 0x00, 0xf0, 0x87, 0xfc, 0x21, 0x4b, 0x21, 0x4a, 0x1b, 0x68, 0x00, 0x24, 0x12, 0x68, 0x9c, 0x72, 0xd2, 0x79, 0x20, 0x46, 0x5a, 0x72, 0x1e, 0x4a, 0x1f, 0x4b, 0x14, 0x60, 0x19, 0x68, 0x21, 0xf4, 0xec, 0x41, 0x21, 0xf0, 0x70, 0x01, 0x41, 0xf4, 0x00, 0x71, 0x89, 0xb2, 0x19, 0x60, 0x19, 0x68, 0x21, 0xf4, 0xe0, 0x41, 0x21, 0xf0, 0x40, 0x01, 0x89, 0xb2, 0x81, 0xf0, 0x10, 0x01, 0x19, 0x60, 0x11, 0x68, 0x15, 0x4b, 0x89, 0xb2, 0x0b, 0x44, 0x5b, 0x00, 0x40, 0x21, 0x19, 0x60, 0x13, 0x68, 0x80, 0x22, 0x9b, 0xb2, 0x03, 0xf1, 0x00, 0x53, 0x03, 0xf5, 0x40, 0x53, 0x5b, 0x00, 0x1a, 0x60, 0x00, 0xf0, 0x37, 0xfe, 0x0e, 0x4b, 0x20, 0x46, 0x1b, 0x68, 0x93, 0xf8, 0x30, 0x10, 0x00, 0xf0, 0x88, 0xfe, 0x20, 0x46, 0x00, 0xf0, 0x1e, 0xfe, 0x0a, 0x4b, 0x01, 0x22, 0x20, 0x46, 0xbd, 0xe8, 0x10, 0x40, 0x1a, 0x60, 0x01, 0xf0, 0x1f, 0xbb, 0x00, 0xbf, 0x04, 0x03, 0x00, 0x20, 0xb8, 0x02, 0x00, 0x20, 0x50, 0x5c, 0x00, 0x40, 0x00, 0x5c, 0x00, 0x40, 0x04, 0x30, 0x00, 0x20, 0xdc, 0x02, 0x00, 0x20, 0x10, 0x03, 0x00, 0x20, 0x38, 0xb5, 0x12, 0x4b, 0x05, 0x46, 0x1a, 0x68, 0x1c, 0x46, 0x12, 0x78, 0x02, 0xf0, 0x7f, 0x02, 0x21, 0x2a, 0x19, 0xd1, 0x00, 0xf0, 0xc0, 0xfc, 0xb0, 0xb1, 0x68, 0x1e, 0x04, 0x28, 0x13, 0xd8, 0xdf, 0xe8, 0x00, 0xf0, 0x03, 0x05, 0x07, 0x12, 0x09, 0x00, 0x09, 0x4b, 0x04, 0xe0, 0x09, 0x4b, 0x02, 0xe0, 0x09, 0x4b, 0x00, 0xe0, 0x09, 0x4b, 0x22, 0x68, 0x00, 0x24, 0x20, 0x46, 0x93, 0x61, 0x54, 0x82, 0x98, 0x47, 0x20, 0x46, 0x38, 0xbd, 0x02, 0x20, 0x38, 0xbd, 0x04, 0x03, 0x00, 0x20, 0x09, 0x0b, 0x00, 0x08, 0x31, 0x0b, 0x00, 0x08, 0xf1, 0x0a, 0x00, 0x08, 0xd9, 0x0a, 0x00, 0x08, 0x01, 0x49, 0x01, 0xf0, 0xdd, 0xb8, 0x00, 0xbf, 0x44, 0x01, 0x00, 0x20, 0x01, 0x49, 0x01, 0xf0, 0xd7, 0xb8, 0x00, 0xbf, 0xb8, 0x02, 0x00, 0x20, 0x05, 0x4b, 0x1b, 0x68, 0x9b, 0x78, 0x07, 0x2b, 0x04, 0xd8, 0x04, 0x49, 0x01, 0xeb, 0xc3, 0x01, 0x01, 0xf0, 0xca, 0xb8, 0x00, 0x20, 0x70, 0x47, 0x04, 0x03, 0x00, 0x20, 0x94, 0x00, 0x00, 0x20, 0x01, 0x49, 0x01, 0xf0, 0xc1, 0xb8, 0x00, 0xbf, 0xe0, 0x00, 0x00, 0x20, 0x08, 0xb5, 0x08, 0x4b, 0x1b, 0x68, 0x1b, 0x78, 0x03, 0xf0, 0x7f, 0x03, 0x21, 0x2b, 0x06, 0xd1, 0x00, 0xf0, 0x70, 0xfc, 0x00, 0x28, 0x0c, 0xbf, 0x02, 0x20, 0x00, 0x20, 0x08, 0xbd, 0x02, 0x20, 0x08, 0xbd, 0x00, 0xbf, 0x04, 0x03, 0x00, 0x20, 0x37, 0xb5, 0x19, 0x4c, 0x0c, 0x20, 0x25, 0x68, 0x00, 0xf0, 0x7e, 0xfb, 0x28, 0x40, 0x40, 0xf4, 0x80, 0x35, 0x25, 0x60, 0x15, 0x48, 0x0c, 0x21, 0x00, 0x22, 0x00, 0xf0, 0xbb, 0xf9, 0x00, 0x23, 0x01, 0x93, 0x01, 0x9b, 0xb3, 0xf5, 0x00, 0x7f, 0x02, 0xd2, 0x01, 0x9b, 0x01, 0x33, 0xf7, 0xe7, 0x0c, 0x20, 0x25, 0x68, 0x00, 0xf0, 0x68, 0xfb, 0x28, 0x40, 0x40, 0xf4, 0x80, 0x25, 0x25, 0x60, 0x00, 0xf0, 0x74, 0xfb, 0x0a, 0x4b, 0xc2, 0xb2, 0x18, 0x60, 0x0a, 0x4b, 0xc0, 0xf3, 0x07, 0x20, 0x83, 0xf8, 0x29, 0x20, 0x83, 0xf8, 0x2a, 0x00, 0x07, 0x4b, 0x5a, 0x71, 0x98, 0x71, 0x00, 0xf0, 0xa1, 0xfe, 0x03, 0xb0, 0x30, 0xbd, 0x00, 0xbf, 0x04, 0x08, 0x01, 0x40, 0x00, 0x08, 0x01, 0x40, 0xc8, 0x02, 0x00, 0x20, 0xec, 0x00, 0x00, 0x20, 0x29, 0x01, 0x00, 0x20, 0x04, 0x4b, 0x1a, 0x68, 0x92, 0xb2, 0x42, 0xf0, 0x0c, 0x02, 0x1a, 0x60, 0x02, 0x4b, 0x03, 0x22, 0x1a, 0x60, 0x70, 0x47, 0x40, 0x5c, 0x00, 0x40, 0x10, 0x03, 0x00, 0x20, 0x04, 0x4b, 0x4f, 0xf6, 0xfb, 0x72, 0x19, 0x68, 0x0a, 0x40, 0x1a, 0x60, 0x4f, 0xf4, 0x3f, 0x42, 0x1a, 0x60, 0x70, 0x47, 0x40, 0x5c, 0x00, 0x40, 0x10, 0xb5, 0x1e, 0x4c, 0x07, 0x28, 0x18, 0xbf, 0x20, 0x70, 0x23, 0x78, 0x05, 0x2b, 0x32, 0xd8, 0xdf, 0xe8, 0x03, 0xf0, 0x03, 0x06, 0x0a, 0x0e, 0x16, 0x21, 0xff, 0xf7, 0xe5, 0xff, 0x2a, 0xe0, 0xff, 0xf7, 0xe2, 0xff, 0x04, 0x23, 0x27, 0xe0, 0x02, 0x23, 0x63, 0x70, 0x03, 0x23, 0x23, 0xe0, 0x63, 0x78, 0x01, 0x3b, 0xdb, 0xb2, 0x63, 0x70, 0x63, 0x78, 0xf3, 0xb9, 0x04, 0x22, 0x17, 0xe0, 0x0f, 0x4b, 0x1a, 0x68, 0x92, 0xb2, 0x42, 0xf0, 0x10, 0x02, 0x1a, 0x60, 0x05, 0x23, 0x23, 0x70, 0x0a, 0x23, 0x63, 0x70, 0x10, 0xbd, 0x63, 0x78, 0x01, 0x3b, 0xdb, 0xb2, 0x63, 0x70, 0x63, 0x78, 0x5b, 0xb9, 0x07, 0x4a, 0x4f, 0xf6, 0xef, 0x73, 0x11, 0x68, 0x0b, 0x40, 0x13, 0x60, 0x06, 0x22, 0x02, 0x4b, 0x1a, 0x70, 0x10, 0xbd, 0x06, 0x23, 0x23, 0x70, 0x10, 0xbd, 0xce, 0x02, 0x00, 0x20, 0x40, 0x5c, 0x00, 0x40, 0x06, 0x4b, 0x01, 0x22, 0x1a, 0x60, 0x06, 0x4a, 0x00, 0x20, 0x06, 0x49, 0x18, 0x60, 0x10, 0x60, 0x4f, 0xf4, 0xe0, 0x52, 0x0a, 0x80, 0x1a, 0x60, 0x70, 0x47, 0x00, 0xbf, 0x40, 0x5c, 0x00, 0x40, 0x44, 0x5c, 0x00, 0x40, 0x08, 0x03, 0x00, 0x20, 0x04, 0x4b, 0x01, 0x22, 0x1a, 0x60, 0x04, 0x4a, 0x00, 0x20, 0x10, 0x60, 0x03, 0x22, 0x1a, 0x60, 0x70, 0x47, 0x00, 0xbf, 0x40, 0x5c, 0x00, 0x40, 0x44, 0x5c, 0x00, 0x40, 0xff, 0xf7, 0xf0, 0xbf, 0x07, 0xb5, 0x14, 0x23, 0x8d, 0xf8, 0x04, 0x30, 0x00, 0x23, 0x8d, 0xf8, 0x05, 0x30, 0x8d, 0xf8, 0x06, 0x30, 0x01, 0xa8, 0x01, 0x23, 0x8d, 0xf8, 0x07, 0x30, 0x00, 0xf0, 0xff, 0xf9, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x10, 0xb5, 0x00, 0xf0, 0xcf, 0xfa, 0x09, 0x4b, 0x00, 0x24, 0x1b, 0x68, 0x9c, 0x72, 0xff, 0xf7, 0xc1, 0xff, 0x07, 0x4b, 0x07, 0x4a, 0x1c, 0x60, 0x4f, 0xf4, 0x3f, 0x43, 0x13, 0x80, 0x06, 0x4a, 0x13, 0x60, 0xff, 0xf7, 0xdb, 0xff, 0x05, 0x4b, 0x1c, 0x60, 0x10, 0xbd, 0x04, 0x03, 0x00, 0x20, 0x44, 0x5c, 0x00, 0x40, 0x08, 0x03, 0x00, 0x20, 0x40, 0x5c, 0x00, 0x40, 0x10, 0x03, 0x00, 0x20, 0x07, 0xb5, 0x14, 0x23, 0x8d, 0xf8, 0x04, 0x30, 0x01, 0xa8, 0x00, 0x23, 0x8d, 0xf8, 0x05, 0x30, 0x8d, 0xf8, 0x06, 0x30, 0x8d, 0xf8, 0x07, 0x30, 0x00, 0xf0, 0xce, 0xf9, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x00, 0x00, 0x70, 0xb5, 0x27, 0x4d, 0x27, 0x4c, 0x2b, 0x68, 0x27, 0x4e, 0x9b, 0xb2, 0x23, 0x80, 0x22, 0x88, 0x33, 0x88, 0x13, 0x40, 0x59, 0x05, 0x05, 0xd5, 0x4f, 0xf6, 0xff, 0x33, 0x2b, 0x60, 0x23, 0x4b, 0x5b, 0x68, 0x98, 0x47, 0x22, 0x88, 0x33, 0x88, 0x1a, 0x40, 0x92, 0x04, 0x44, 0xbf, 0x4d, 0xf6, 0xff, 0x72, 0x2a, 0x60, 0x22, 0x88, 0x13, 0x40, 0xdb, 0x04, 0x05, 0xd5, 0x4e, 0xf6, 0xff, 0x73, 0x2b, 0x60, 0x00, 0x20, 0xff, 0xf7, 0x32, 0xff, 0x22, 0x88, 0x33, 0x88, 0x13, 0x40, 0x18, 0x05, 0x04, 0xd5, 0xff, 0xf7, 0x11, 0xff, 0x4f, 0xf2, 0xff, 0x73, 0x2b, 0x60, 0x22, 0x88, 0x33, 0x88, 0x1a, 0x40, 0x91, 0x05, 0x07, 0xd5, 0x4f, 0xf6, 0xff, 0x52, 0x2a, 0x60, 0x10, 0x4a, 0x11, 0x78, 0x01, 0x31, 0xc9, 0xb2, 0x11, 0x70, 0x22, 0x88, 0x13, 0x40, 0xda, 0x05, 0x05, 0xd5, 0x4f, 0xf6, 0xff, 0x63, 0x2b, 0x60, 0x07, 0x20, 0xff, 0xf7, 0x11, 0xff, 0x22, 0x88, 0x33, 0x88, 0x13, 0x40, 0x1b, 0x04, 0x03, 0xd5, 0xbd, 0xe8, 0x70, 0x40, 0x00, 0xf0, 0xd8, 0xbc, 0x70, 0xbd, 0x00, 0xbf, 0x44, 0x5c, 0x00, 0x40, 0xcc, 0x02, 0x00, 0x20, 0x08, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x0c, 0x03, 0x00, 0x20, 0x37, 0xb5, 0x00, 0xf0, 0xa7, 0xf8, 0x00, 0xf0, 0xc9, 0xf8, 0x00, 0xf0, 0xf7, 0xf8, 0xff, 0xf7, 0x9b, 0xfe, 0x00, 0xf0, 0x07, 0xf9, 0x00, 0xf0, 0x3f, 0xf9, 0x01, 0x28, 0x04, 0x46, 0x4f, 0xf0, 0x00, 0x03, 0x02, 0xd0, 0x02, 0x28, 0x35, 0xd0, 0x08, 0xe0, 0x00, 0x93, 0x28, 0x48, 0x0d, 0x21, 0x05, 0x22, 0x4f, 0xf4, 0xa0, 0x23, 0x00, 0xf0, 0x65, 0xf8, 0x44, 0xe0, 0x00, 0x93, 0x24, 0x48, 0x0d, 0x21, 0x05, 0x22, 0x4f, 0xf4, 0xa0, 0x23, 0x00, 0xf0, 0x5c, 0xf8, 0x21, 0x48, 0x00, 0xf0, 0xf7, 0xf8, 0x28, 0xb1, 0x00, 0xf0, 0x4e, 0xf8, 0x04, 0x1c, 0x18, 0xbf, 0x01, 0x24, 0x32, 0xe0, 0x1d, 0x48, 0x00, 0xf0, 0xed, 0xf8, 0x00, 0x28, 0xf4, 0xd1, 0x01, 0x24, 0x2b, 0xe0, 0x00, 0x23, 0x00, 0x93, 0x17, 0x48, 0x0d, 0x21, 0x01, 0x22, 0x4f, 0xf4, 0x80, 0x13, 0x00, 0xf0, 0x42, 0xf8, 0x00, 0xf0, 0xe6, 0xfb, 0x08, 0xb1, 0x00, 0xf0, 0xe9, 0xfb, 0x01, 0x35, 0x05, 0x2d, 0xee, 0xdd, 0x00, 0x2c, 0xec, 0xd1, 0x10, 0x48, 0x00, 0xf0, 0xd3, 0xf8, 0x08, 0xb1, 0x0e, 0x48, 0x04, 0xe0, 0x0c, 0x48, 0x00, 0xf0, 0xcd, 0xf8, 0x18, 0xb1, 0x0a, 0x48, 0x00, 0xf0, 0x61, 0xf9, 0x0c, 0xe0, 0x00, 0x90, 0x0d, 0x21, 0x06, 0x48, 0x05, 0x22, 0x4f, 0xf4, 0xa0, 0x23, 0x00, 0xf0, 0x22, 0xf8, 0x00, 0xf0, 0x6a, 0xf9, 0x01, 0xe0, 0x00, 0x25, 0xe0, 0xe7, 0x00, 0x20, 0x03, 0xb0, 0x30, 0xbd, 0x00, 0x10, 0x01, 0x40, 0x00, 0x50, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08, 0x01, 0x23, 0x03, 0xfa, 0x01, 0xf1, 0xd2, 0xf1, 0x01, 0x02, 0x38, 0xbf, 0x00, 0x22, 0x13, 0x01, 0x99, 0x40, 0x01, 0x61, 0x70, 0x47, 0x00, 0x00, 0x02, 0x4b, 0x18, 0x68, 0xc0, 0xf3, 0x80, 0x00, 0x70, 0x47, 0x00, 0xbf, 0x08, 0x0c, 0x01, 0x40, 0x2d, 0xe9, 0xf0, 0x47, 0x9d, 0xf8, 0x20, 0xa0, 0x14, 0x46, 0xca, 0xf1, 0x01, 0x07, 0xff, 0xb2, 0x3a, 0x46, 0x80, 0x46, 0x89, 0x46, 0x1e, 0x46, 0xff, 0xf7, 0xde, 0xff, 0xb4, 0xb1, 0x35, 0x46, 0x15, 0xb1, 0x00, 0xbf, 0x01, 0x3d, 0xfb, 0xe7, 0x40, 0x46, 0x49, 0x46, 0x52, 0x46, 0xff, 0xf7, 0xd3, 0xff, 0x35, 0x46, 0x15, 0xb1, 0x00, 0xbf, 0x01, 0x3d, 0xfb, 0xe7, 0x40, 0x46, 0x49, 0x46, 0x3a, 0x46, 0x01, 0x3c, 0xff, 0xf7, 0xc8, 0xff, 0xe4, 0xb2, 0xe7, 0xe7, 0xbd, 0xe8, 0xf0, 0x87, 0x0d, 0x4b, 0x0e, 0x49, 0x1a, 0x68, 0x42, 0xf0, 0x01, 0x02, 0x1a, 0x60, 0x0c, 0x4a, 0x10, 0x68, 0x01, 0x40, 0x11, 0x60, 0x19, 0x68, 0x21, 0xf0, 0x84, 0x71, 0x21, 0xf4, 0x80, 0x31, 0x19, 0x60, 0x19, 0x68, 0x21, 0xf4, 0x80, 0x21, 0x19, 0x60, 0x13, 0x68, 0x23, 0xf4, 0xfe, 0x03, 0x13, 0x60, 0x04, 0x4b, 0x00, 0x22, 0x1a, 0x60, 0x70, 0x47, 0x00, 0x10, 0x02, 0x40, 0x00, 0x00, 0xff, 0xf8, 0x04, 0x10, 0x02, 0x40, 0x08, 0x10, 0x02, 0x40, 0x15, 0x4b, 0x1a, 0x68, 0x42, 0xf0, 0x01, 0x12, 0x1a, 0x60, 0x1a, 0x68, 0x12, 0x48, 0x92, 0x03, 0xfb, 0xd5, 0x12, 0x4a, 0x12, 0x21, 0x11, 0x60, 0xa2, 0xf6, 0xfc, 0x72, 0x11, 0x68, 0x41, 0xf4, 0xe8, 0x11, 0x41, 0xf4, 0x80, 0x61, 0x11, 0x60, 0x01, 0x68, 0x41, 0xf0, 0x80, 0x71, 0x01, 0x60, 0x19, 0x68, 0x11, 0xf0, 0x40, 0x7f, 0xfb, 0xd0, 0x11, 0x68, 0x41, 0xf0, 0x02, 0x01, 0x11, 0x60, 0x11, 0x68, 0x09, 0x07, 0xfc, 0xd5, 0x9a, 0x69, 0x42, 0xf4, 0xfe, 0x72, 0x9a, 0x61, 0xda, 0x69, 0x42, 0xf4, 0x00, 0x02, 0xda, 0x61, 0x70, 0x47, 0x00, 0x10, 0x02, 0x40, 0x00, 0x20, 0x02, 0x40, 0x07, 0x4b, 0x08, 0x4a, 0x1a, 0x60, 0x4f, 0xf4, 0x80, 0x22, 0x1a, 0x61, 0xd3, 0xf8, 0x04, 0x24, 0x22, 0xf4, 0x70, 0x02, 0x42, 0xf4, 0x80, 0x12, 0xc3, 0xf8, 0x04, 0x24, 0x70, 0x47, 0x00, 0xbf, 0x00, 0x0c, 0x01, 0x40, 0x00, 0x04, 0x01, 0x40, 0x05, 0x4b, 0x1a, 0x68, 0xd1, 0x07, 0x03, 0xd4, 0x1a, 0x68, 0x42, 0xf0, 0x01, 0x02, 0x1a, 0x60, 0x1a, 0x68, 0x92, 0x07, 0xfc, 0xd5, 0x70, 0x47, 0x00, 0x10, 0x02, 0x40, 0x03, 0x68, 0x03, 0x48, 0x18, 0x40, 0xb0, 0xf1, 0x00, 0x53, 0x58, 0x42, 0x58, 0x41, 0x70, 0x47, 0x00, 0x00, 0xfe, 0x2f, 0x04, 0x4a, 0x08, 0xb5, 0x43, 0x68, 0x10, 0x60, 0x02, 0x68, 0x82, 0xf3, 0x08, 0x88, 0x98, 0x47, 0x08, 0xbd, 0x00, 0xbf, 0x08, 0xed, 0x00, 0xe0, 0x08, 0x4b, 0xda, 0x69, 0x42, 0xf0, 0xc0, 0x52, 0xda, 0x61, 0xa3, 0xf5, 0xd0, 0x33, 0x1a, 0x68, 0x42, 0xf4, 0x80, 0x72, 0x1a, 0x60, 0x04, 0x4a, 0x10, 0x85, 0x1a, 0x68, 0x22, 0xf4, 0x80, 0x72, 0x1a, 0x60, 0x70, 0x47, 0x00, 0x10, 0x02, 0x40, 0x00, 0x6c, 0x00, 0x40, 0x38, 0xb5, 0x0f, 0x4b, 0x44, 0xf2, 0x4c, 0x21, 0xda, 0x69, 0x1d, 0x46, 0x42, 0xf0, 0xc0, 0x52, 0xda, 0x61, 0x0c, 0x4a, 0x12, 0x8d, 0x92, 0xb2, 0x8a, 0x42, 0x05, 0xd0, 0x44, 0xf2, 0x4d, 0x23, 0x9a, 0x42, 0x03, 0xd0, 0x00, 0x24, 0x09, 0xe0, 0x01, 0x24, 0x00, 0xe0, 0x02, 0x24, 0x00, 0x20, 0xff, 0xf7, 0xd0, 0xff, 0xeb, 0x69, 0x23, 0xf0, 0xc0, 0x53, 0xeb, 0x61, 0x20, 0x46, 0x38, 0xbd, 0x00, 0x10, 0x02, 0x40, 0x00, 0x6c, 0x00, 0x40, 0x18, 0x4b, 0x30, 0xb5, 0xdb, 0x68, 0x44, 0x78, 0xdb, 0x43, 0xc3, 0xf3, 0x02, 0x23, 0xc3, 0xf1, 0x04, 0x02, 0x04, 0xfa, 0x02, 0xf2, 0x0f, 0x24, 0xdc, 0x40, 0x81, 0x78, 0x03, 0x78, 0x0c, 0x40, 0x14, 0x43, 0x03, 0xf0, 0x03, 0x01, 0xc9, 0x00, 0x24, 0x01, 0xff, 0x22, 0x8c, 0x40, 0x8a, 0x40, 0x03, 0xf0, 0xfc, 0x03, 0x03, 0xf1, 0x60, 0x43, 0x03, 0xf5, 0x61, 0x43, 0xd3, 0xf8, 0x00, 0x53, 0x25, 0xea, 0x02, 0x01, 0x22, 0x40, 0x0a, 0x43, 0xc3, 0xf8, 0x00, 0x23, 0x03, 0x78, 0x01, 0x22, 0x59, 0x09, 0x03, 0xf0, 0x1f, 0x03, 0x02, 0xfa, 0x03, 0xf3, 0x03, 0x4a, 0x42, 0xf8, 0x21, 0x30, 0x30, 0xbd, 0x00, 0xbf, 0x00, 0xed, 0x00, 0xe0, 0x00, 0xe1, 0x00, 0xe0, 0x07, 0x4b, 0x4f, 0xf0, 0xff, 0x32, 0xc3, 0xf8, 0x80, 0x20, 0xc3, 0xf8, 0x84, 0x20, 0xc3, 0xf8, 0x80, 0x21, 0xc3, 0xf8, 0x84, 0x21, 0x04, 0x22, 0x43, 0xf8, 0xf0, 0x2c, 0x70, 0x47, 0x00, 0xbf, 0x00, 0xe1, 0x00, 0xe0, 0x10, 0xb5, 0x08, 0x4b, 0x80, 0x22, 0x04, 0x46, 0x1a, 0x60, 0xff, 0xf7, 0xd5, 0xfd, 0xff, 0xf7, 0xe5, 0xff, 0xff, 0xf7, 0x9d, 0xfd, 0xff, 0xf7, 0xe5, 0xfe, 0x20, 0x46, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0x60, 0xbf, 0x10, 0x20, 0x02, 0x40, 0x02, 0x4a, 0x03, 0x4b, 0xda, 0x60, 0x00, 0xbf, 0xfd, 0xe7, 0x00, 0xbf, 0x04, 0x00, 0xfa, 0x05, 0x00, 0xed, 0x00, 0xe0, 0x0a, 0x4b, 0x10, 0xb5, 0x1a, 0x68, 0x02, 0x22, 0x1a, 0x60, 0x09, 0x4a, 0x11, 0x68, 0x14, 0x46, 0x11, 0xf0, 0x01, 0x0f, 0xf9, 0xd1, 0x90, 0x60, 0x42, 0x22, 0x1a, 0x60, 0x22, 0x68, 0x12, 0xf0, 0x01, 0x01, 0xfb, 0xd1, 0x19, 0x60, 0x01, 0x20, 0x10, 0xbd, 0x00, 0xbf, 0x10, 0x20, 0x02, 0x40, 0x0c, 0x20, 0x02, 0x40, 0x37, 0xb5, 0x8b, 0xb2, 0x00, 0x93, 0x0b, 0x0c, 0x01, 0x93, 0x0e, 0x4b, 0x01, 0x22, 0x1c, 0x68, 0x1a, 0x60, 0x0d, 0x4a, 0x15, 0x68, 0xed, 0x07, 0xfb, 0xd4, 0x01, 0x9d, 0xad, 0xb2, 0x45, 0x80, 0x15, 0x68, 0xed, 0x07, 0xfc, 0xd4, 0x00, 0x9d, 0xad, 0xb2, 0x05, 0x80, 0x15, 0x68, 0xed, 0x07, 0xfc, 0xd4, 0x24, 0xf0, 0x01, 0x02, 0x1a, 0x60, 0x00, 0x68, 0x43, 0x1a, 0x58, 0x42, 0x58, 0x41, 0x03, 0xb0, 0x30, 0xbd, 0x10, 0x20, 0x02, 0x40, 0x0c, 0x20, 0x02, 0x40, 0x01, 0x4b, 0x80, 0x22, 0x1a, 0x60, 0x70, 0x47, 0x10, 0x20, 0x02, 0x40, 0x03, 0x4b, 0x04, 0x4a, 0x1a, 0x60, 0x02, 0xf1, 0x88, 0x32, 0x1a, 0x60, 0x70, 0x47, 0x00, 0xbf, 0x04, 0x20, 0x02, 0x40, 0x23, 0x01, 0x67, 0x45, 0x07, 0x28, 0xc8, 0xbf, 0x08, 0x38, 0x0f, 0x23, 0x80, 0x00, 0x03, 0xfa, 0x00, 0xf0, 0xc0, 0x43, 0x70, 0x47, 0x00, 0x00, 0x02, 0x4b, 0x18, 0x88, 0x00, 0xf5, 0x00, 0x30, 0x80, 0x02, 0x70, 0x47, 0xe0, 0xf7, 0xff, 0x1f, 0x04, 0x4b, 0x1b, 0x88, 0x81, 0x2b, 0x34, 0xbf, 0x4f, 0xf4, 0x80, 0x60, 0x4f, 0xf4, 0x00, 0x60, 0x70, 0x47, 0x00, 0xbf, 0xe0, 0xf7, 0xff, 0x1f, 0x0d, 0x4a, 0x00, 0x23, 0x02, 0x21, 0x13, 0x70, 0x53, 0x70, 0x93, 0x70, 0xd3, 0x70, 0x11, 0x71, 0x53, 0x71, 0x0a, 0x4a, 0x0a, 0x49, 0x13, 0x60, 0x0a, 0x4a, 0x13, 0x80, 0x0a, 0x4a, 0x11, 0x60, 0x0a, 0x4a, 0x01, 0xf5, 0x88, 0x41, 0x11, 0x60, 0x09, 0x4a, 0x03, 0x21, 0x13, 0x70, 0x09, 0x4a, 0x11, 0x70, 0x09, 0x4a, 0x13, 0x70, 0x70, 0x47, 0x1d, 0x0b, 0x00, 0x20, 0x18, 0x0b, 0x00, 0x20, 0x00, 0x0c, 0x00, 0x20, 0x16, 0x0b, 0x00, 0x20, 0xc4, 0x02, 0x00, 0x20, 0xc0, 0x02, 0x00, 0x20, 0x1c, 0x0b, 0x00, 0x20, 0xd0, 0x02, 0x00, 0x20, 0x23, 0x0b, 0x00, 0x20, 0x08, 0xb5, 0x0e, 0x4b, 0x0e, 0x48, 0x19, 0x79, 0x00, 0x22, 0xc9, 0xb2, 0x01, 0x29, 0x02, 0x60, 0x08, 0xd1, 0x02, 0x21, 0x19, 0x71, 0x1a, 0x70, 0xff, 0xf7, 0x24, 0xff, 0xbd, 0xe8, 0x08, 0x40, 0xff, 0xf7, 0xdc, 0xbc, 0x11, 0xf0, 0xfd, 0x0f, 0x06, 0xd0, 0x02, 0x21, 0x19, 0x71, 0x1a, 0x70, 0xbd, 0xe8, 0x08, 0x40, 0xff, 0xf7, 0x3c, 0xbf, 0x08, 0xbd, 0x00, 0xbf, 0x1d, 0x0b, 0x00, 0x20, 0x18, 0x0b, 0x00, 0x20, 0x20, 0xb9, 0x03, 0x4b, 0x01, 0x22, 0x1b, 0x68, 0x1a, 0x82, 0x70, 0x47, 0x01, 0x48, 0x70, 0x47, 0x04, 0x03, 0x00, 0x20, 0x21, 0x0b, 0x00, 0x20, 0x20, 0xb9, 0x03, 0x4b, 0x06, 0x22, 0x1b, 0x68, 0x1a, 0x82, 0x70, 0x47, 0x01, 0x48, 0x70, 0x47, 0x04, 0x03, 0x00, 0x20, 0x1d, 0x0b, 0x00, 0x20, 0x06, 0x4b, 0x1b, 0x68, 0x30, 0xb9, 0xda, 0x88, 0x59, 0x8a, 0x51, 0x1a, 0x19, 0x82, 0x04, 0x4b, 0x1a, 0x80, 0x70, 0x47, 0x5b, 0x8a, 0x03, 0x48, 0x18, 0x44, 0x70, 0x47, 0x04, 0x03, 0x00, 0x20, 0x16, 0x0b, 0x00, 0x20, 0x14, 0x03, 0x00, 0x20, 0x08, 0x4b, 0x30, 0xb9, 0x1b, 0x68, 0x08, 0x4a, 0x11, 0x88, 0x5a, 0x8a, 0x8a, 0x1a, 0x1a, 0x82, 0x70, 0x47, 0x06, 0x49, 0x06, 0x4a, 0x1b, 0x68, 0x12, 0x68, 0x08, 0x68, 0x5b, 0x8a, 0x10, 0x44, 0x18, 0x44, 0x70, 0x47, 0x04, 0x03, 0x00, 0x20, 0x16, 0x0b, 0x00, 0x20, 0xc4, 0x02, 0x00, 0x20, 0x18, 0x0b, 0x00, 0x20, 0x70, 0xb5, 0x12, 0x4b, 0x12, 0x4e, 0x1b, 0x78, 0x34, 0x68, 0x02, 0x2b, 0x04, 0xf1, 0x00, 0x64, 0x0c, 0xbf, 0x04, 0xf5, 0xa0, 0x44, 0x04, 0xf5, 0x00, 0x54, 0x20, 0x46, 0xff, 0xf7, 0xea, 0xfe, 0x00, 0x25, 0x0c, 0x4b, 0x1a, 0x88, 0x92, 0xb2, 0x95, 0x42, 0x06, 0xda, 0x0a, 0x4b, 0x60, 0x19, 0xe9, 0x58, 0xff, 0xf7, 0xf9, 0xfe, 0x04, 0x35, 0xf3, 0xe7, 0x31, 0x68, 0x1a, 0x88, 0x92, 0xb2, 0x0a, 0x44, 0x32, 0x60, 0x00, 0x22, 0x1a, 0x80, 0x70, 0xbd, 0x00, 0xbf, 0x1c, 0x0b, 0x00, 0x20, 0x18, 0x0b, 0x00, 0x20, 0x16, 0x0b, 0x00, 0x20, 0x14, 0x03, 0x00, 0x20, 0x2d, 0xe9, 0xf0, 0x41, 0x81, 0x49, 0x82, 0x4c, 0x01, 0x20, 0x08, 0x70, 0x23, 0x79, 0x00, 0x22, 0xdb, 0xb2, 0x02, 0x2b, 0x22, 0x70, 0x5a, 0xd1, 0x08, 0x70, 0x7e, 0x49, 0x09, 0x68, 0x48, 0x78, 0x01, 0x28, 0x2a, 0xd1, 0xc8, 0x88, 0x00, 0x28, 0x00, 0xf0, 0xc5, 0x80, 0x7a, 0x48, 0x09, 0x7b, 0x02, 0x60, 0x01, 0x29, 0x4f, 0xf0, 0x03, 0x02, 0x22, 0x71, 0x0b, 0xd0, 0x02, 0x29, 0x1a, 0xd1, 0x76, 0x4b, 0x1a, 0x70, 0x76, 0x4a, 0x77, 0x4b, 0x1a, 0x60, 0xff, 0xf7, 0xe1, 0xfd, 0xff, 0xf7, 0xe9, 0xfe, 0x0b, 0xe0, 0x74, 0x49, 0x73, 0x4a, 0x11, 0x60, 0x70, 0x4a, 0x13, 0x70, 0xff, 0xf7, 0xd7, 0xfd, 0xff, 0xf7, 0xdf, 0xfe, 0x6e, 0x48, 0xff, 0xf7, 0x96, 0xfe, 0x44, 0xf2, 0x4d, 0x20, 0xff, 0xf7, 0xf2, 0xfd, 0xc2, 0xe0, 0x0a, 0x23, 0x62, 0xe0, 0x02, 0x28, 0x21, 0xd1, 0x09, 0x23, 0x23, 0x71, 0xca, 0x88, 0x69, 0x4b, 0x1a, 0x80, 0x18, 0x88, 0x69, 0x4a, 0x80, 0xb2, 0x10, 0x80, 0x1a, 0x88, 0x4b, 0x88, 0x92, 0xb2, 0x5a, 0x43, 0x5f, 0x4b, 0x1a, 0x60, 0x0b, 0x7b, 0x01, 0x2b, 0x03, 0xd0, 0x02, 0x2b, 0x09, 0xd1, 0x5e, 0x4a, 0x00, 0xe0, 0x5f, 0x4a, 0x5d, 0x4b, 0x1a, 0x60, 0xff, 0xf7, 0xce, 0xfe, 0x5f, 0x4b, 0x18, 0x60, 0xa0, 0xe0, 0x0a, 0x23, 0x23, 0x71, 0x03, 0x23, 0x9b, 0xe0, 0x06, 0x28, 0x3c, 0xd0, 0x03, 0x28, 0x19, 0xd0, 0x05, 0x28, 0x3c, 0xe0, 0x03, 0x2b, 0x0b, 0xd1, 0x50, 0x4a, 0x12, 0x68, 0x52, 0x78, 0x03, 0x2a, 0x04, 0xd1, 0x05, 0x23, 0x23, 0x71, 0xff, 0xf7, 0x60, 0xff, 0x8a, 0xe0, 0x05, 0x2a, 0x2e, 0xe0, 0x04, 0x2b, 0x09, 0xd1, 0x52, 0x49, 0x08, 0x78, 0x02, 0x28, 0x03, 0xd1, 0x03, 0x23, 0x62, 0x70, 0x0b, 0x70, 0x05, 0x23, 0x23, 0x71, 0x7c, 0xe0, 0x05, 0x2b, 0x14, 0xd1, 0x43, 0x4b, 0x1a, 0x68, 0x53, 0x78, 0x01, 0x2b, 0x08, 0xd1, 0xd3, 0x88, 0x0b, 0xb1, 0x03, 0x23, 0xf2, 0xe7, 0x06, 0x23, 0x23, 0x71, 0xff, 0xf7, 0x7c, 0xfe, 0x6c, 0xe0, 0x06, 0x2b, 0x4d, 0xd0, 0x03, 0x2b, 0x4b, 0xd0, 0x05, 0x2b, 0x62, 0xd1, 0x48, 0xe0, 0x06, 0x2b, 0x0b, 0xd1, 0x37, 0x49, 0x09, 0x68, 0x49, 0x78, 0x03, 0x29, 0x03, 0xd1, 0x08, 0x23, 0x23, 0x71, 0x22, 0x70, 0x5a, 0xe0, 0x05, 0x29, 0x54, 0xd1, 0xd8, 0xe7, 0x07, 0x2b, 0xf6, 0xd0, 0x08, 0x2b, 0xd4, 0xd0, 0x09, 0x2b, 0x3c, 0xd1, 0x2e, 0x4b, 0x1a, 0x68, 0x53, 0x78, 0x02, 0x2b, 0x2d, 0xd1, 0xd0, 0x88, 0x38, 0xb3, 0x31, 0x49, 0x52, 0x88, 0x0b, 0x88, 0x2d, 0x4d, 0x9b, 0xb2, 0x53, 0x43, 0x29, 0x4a, 0x2f, 0x4e, 0x13, 0x60, 0x2f, 0x68, 0xd2, 0xf8, 0x00, 0x80, 0xb1, 0xf8, 0x00, 0xc0, 0x47, 0x44, 0x33, 0x68, 0x1f, 0xfa, 0x8c, 0xfc, 0x67, 0x44, 0x9f, 0x42, 0x28, 0x4b, 0x03, 0xd8, 0x0a, 0x88, 0x92, 0xb2, 0x1a, 0x80, 0x19, 0xe0, 0x36, 0x68, 0x2d, 0x68, 0x11, 0x68, 0x72, 0x1b, 0x52, 0x1a, 0x92, 0xb2, 0x1a, 0x80, 0x1a, 0x88, 0x92, 0xb2, 0x82, 0x42, 0x08, 0xd3, 0x00, 0x22, 0x1a, 0x80, 0x05, 0xe0, 0x0a, 0x23, 0x23, 0x71, 0x09, 0x23, 0x1d, 0xe0, 0x06, 0x2b, 0x01, 0xd1, 0x02, 0x23, 0x9b, 0xe7, 0x03, 0x2b, 0x01, 0xd0, 0x05, 0x2b, 0x12, 0xd1, 0x09, 0x23, 0x95, 0xe7, 0x0a, 0x2b, 0x0e, 0xd1, 0x0f, 0x4b, 0x1b, 0x68, 0x5b, 0x78, 0x03, 0x2b, 0x01, 0xd1, 0x0a, 0x23, 0x8c, 0xe7, 0x05, 0x2b, 0xfb, 0xd0, 0x04, 0x2b, 0x03, 0xd1, 0x02, 0x23, 0x23, 0x71, 0x00, 0x23, 0x02, 0xe0, 0x0a, 0x23, 0x23, 0x71, 0x0f, 0x23, 0x23, 0x70, 0x20, 0x78, 0xd0, 0xf1, 0x01, 0x00, 0x38, 0xbf, 0x00, 0x20, 0xbd, 0xe8, 0xf0, 0x81, 0x00, 0xbf, 0x23, 0x0b, 0x00, 0x20, 0x1d, 0x0b, 0x00, 0x20, 0x04, 0x03, 0x00, 0x20, 0x18, 0x0b, 0x00, 0x20, 0x1c, 0x0b, 0x00, 0x20, 0x00, 0x20, 0x00, 0x08, 0xc4, 0x02, 0x00, 0x20, 0x00, 0x50, 0x00, 0x08, 0x14, 0x0b, 0x00, 0x20, 0x16, 0x0b, 0x00, 0x20, 0xc0, 0x02, 0x00, 0x20, 0xd0, 0x02, 0x00, 0x20, 0x01, 0x4b, 0x18, 0x78, 0x70, 0x47, 0x00, 0xbf, 0x23, 0x0b, 0x00, 0x20, 0x00, 0xbf, 0xfd, 0xe7, 0x80, 0x00, 0x00, 0xf1, 0x80, 0x40, 0x00, 0xf5, 0xb8, 0x40, 0x03, 0x68, 0xca, 0x06, 0x23, 0xf4, 0xe0, 0x43, 0x23, 0xf0, 0x40, 0x03, 0x9b, 0xb2, 0x48, 0xbf, 0x83, 0xf0, 0x10, 0x03, 0x8a, 0x06, 0x48, 0xbf, 0x83, 0xf0, 0x20, 0x03, 0x03, 0x60, 0x70, 0x47, 0x80, 0x00, 0x00, 0xf1, 0x80, 0x40, 0x00, 0xf5, 0xb8, 0x40, 0x03, 0x68, 0x23, 0xf4, 0x80, 0x43, 0x23, 0xf0, 0x70, 0x03, 0x9b, 0xb2, 0x83, 0xf4, 0x40, 0x53, 0x03, 0x60, 0x70, 0x47, 0x80, 0x00, 0x00, 0xf1, 0x80, 0x40, 0x00, 0xf5, 0xb8, 0x40, 0x03, 0x68, 0x23, 0xf4, 0xe2, 0x43, 0x23, 0xf0, 0x70, 0x03, 0x1b, 0x04, 0x1b, 0x0c, 0x03, 0x60, 0x70, 0x47, 0x80, 0x00, 0x00, 0xf1, 0x80, 0x40, 0x00, 0xf5, 0xb8, 0x40, 0x03, 0x68, 0x5b, 0x04, 0x06, 0xd5, 0x02, 0x68, 0x48, 0xf6, 0x8f, 0x73, 0x13, 0x40, 0x43, 0xf4, 0x80, 0x43, 0x03, 0x60, 0x70, 0x47, 0x80, 0x00, 0x00, 0xf1, 0x80, 0x40, 0x00, 0xf5, 0xb8, 0x40, 0x03, 0x68, 0x5b, 0x06, 0x06, 0xd5, 0x02, 0x68, 0x48, 0xf6, 0x8f, 0x73, 0x13, 0x40, 0x43, 0xf0, 0x40, 0x03, 0x03, 0x60, 0x70, 0x47, 0x05, 0x4b, 0x1b, 0x68, 0x9b, 0xb2, 0x03, 0xeb, 0xc0, 0x00, 0x00, 0xf1, 0x00, 0x50, 0x00, 0xf5, 0x40, 0x50, 0x40, 0x00, 0x00, 0x88, 0x70, 0x47, 0x50, 0x5c, 0x00, 0x40, 0x04, 0x4b, 0x1b, 0x68, 0x9b, 0xb2, 0x03, 0xeb, 0xc0, 0x00, 0x03, 0x4b, 0x03, 0x44, 0x5b, 0x00, 0x18, 0x88, 0x70, 0x47, 0x50, 0x5c, 0x00, 0x40, 0x04, 0x30, 0x00, 0x20, 0x04, 0x4b, 0x1b, 0x68, 0x9b, 0xb2, 0x03, 0xeb, 0xc0, 0x00, 0x03, 0x4b, 0x03, 0x44, 0x5b, 0x00, 0x19, 0x60, 0x70, 0x47, 0x50, 0x5c, 0x00, 0x40, 0x02, 0x30, 0x00, 0x20, 0x0d, 0x4b, 0x3e, 0x29, 0x1b, 0x68, 0x9b, 0xb2, 0x03, 0xeb, 0xc0, 0x00, 0x0b, 0x4b, 0x03, 0x44, 0x4f, 0xea, 0x43, 0x02, 0x09, 0xd9, 0x4b, 0x09, 0xc8, 0x06, 0x04, 0xbf, 0x03, 0xf1, 0xff, 0x33, 0x9b, 0xb2, 0x9b, 0x02, 0x43, 0xf4, 0x00, 0x43, 0x04, 0xe0, 0x4b, 0x08, 0xc9, 0x07, 0x48, 0xbf, 0x01, 0x33, 0x9b, 0x02, 0x13, 0x60, 0x70, 0x47, 0x50, 0x5c, 0x00, 0x40, 0x06, 0x30, 0x00, 0x20, 0x70, 0xb5, 0x4c, 0x4a, 0x4c, 0x4b, 0x11, 0x68, 0x88, 0xb2, 0x0c, 0x04, 0x18, 0x80, 0x40, 0xf1, 0x90, 0x80, 0x47, 0xf6, 0xff, 0x71, 0x11, 0x60, 0x1a, 0x88, 0x48, 0x4c, 0x02, 0xf0, 0x0f, 0x02, 0x22, 0x70, 0x00, 0x2a, 0x5f, 0xd1, 0x46, 0x4c, 0x46, 0x4d, 0x22, 0x68, 0x46, 0x4e, 0x02, 0xf4, 0x40, 0x52, 0x2a, 0x80, 0x22, 0x68, 0x02, 0xf0, 0x30, 0x02, 0x32, 0x80, 0x22, 0x68, 0x22, 0xf4, 0x80, 0x42, 0x22, 0xf0, 0x70, 0x02, 0x92, 0xb2, 0x82, 0xf4, 0x00, 0x52, 0x22, 0x60, 0x22, 0x68, 0x22, 0xf4, 0xe0, 0x42, 0x22, 0xf0, 0x40, 0x02, 0x92, 0xb2, 0x82, 0xf0, 0x20, 0x02, 0x22, 0x60, 0x1b, 0x88, 0xd8, 0x06, 0x02, 0xd5, 0x23, 0x68, 0x19, 0x06, 0x07, 0xd5, 0x22, 0x68, 0x48, 0xf6, 0x0f, 0x73, 0x13, 0x40, 0x23, 0x60, 0x00, 0xf0, 0x61, 0xfc, 0x12, 0xe0, 0x1a, 0x05, 0x07, 0xd5, 0x22, 0x68, 0x40, 0xf6, 0x8f, 0x73, 0x13, 0x40, 0x23, 0x60, 0x00, 0xf0, 0x69, 0xfa, 0x08, 0xe0, 0x18, 0x04, 0xb6, 0xd5, 0x22, 0x68, 0x40, 0xf6, 0x8f, 0x73, 0x13, 0x40, 0x23, 0x60, 0x00, 0xf0, 0xcd, 0xfb, 0x23, 0x68, 0x2a, 0x88, 0x23, 0xf4, 0x80, 0x43, 0x23, 0xf0, 0x70, 0x03, 0x9b, 0xb2, 0xd1, 0x04, 0x48, 0xbf, 0x83, 0xf4, 0x80, 0x53, 0x95, 0x04, 0x21, 0x4a, 0x48, 0xbf, 0x83, 0xf4, 0x00, 0x53, 0x13, 0x60, 0x13, 0x68, 0x31, 0x88, 0x23, 0xf4, 0xe0, 0x43, 0x23, 0xf0, 0x40, 0x03, 0x9b, 0xb2, 0xcc, 0x06, 0x48, 0xbf, 0x83, 0xf0, 0x10, 0x03, 0x88, 0x06, 0x48, 0xbf, 0x83, 0xf0, 0x20, 0x03, 0x13, 0x60, 0x70, 0xbd, 0x93, 0x00, 0x03, 0xf1, 0x80, 0x43, 0x03, 0xf5, 0xb8, 0x43, 0x1d, 0x68, 0x29, 0x04, 0x09, 0xd5, 0x18, 0x68, 0x40, 0xf6, 0x8f, 0x71, 0x01, 0x40, 0x19, 0x60, 0x12, 0x4b, 0x01, 0x3a, 0x53, 0xf8, 0x22, 0x30, 0x98, 0x47, 0x2b, 0x06, 0x7f, 0xf5, 0x79, 0xaf, 0x21, 0x78, 0x48, 0xf6, 0x0f, 0x72, 0x8b, 0x00, 0x03, 0xf1, 0x80, 0x43, 0x03, 0xf5, 0xb8, 0x43, 0x18, 0x68, 0x01, 0x39, 0x02, 0x40, 0x1a, 0x60, 0x09, 0x4b, 0x53, 0xf8, 0x21, 0x30, 0x98, 0x47, 0x67, 0xe7, 0x70, 0xbd, 0x44, 0x5c, 0x00, 0x40, 0xcc, 0x02, 0x00, 0x20, 0xe0, 0x02, 0x00, 0x20, 0x00, 0x5c, 0x00, 0x40, 0xd2, 0x02, 0x00, 0x20, 0xd4, 0x02, 0x00, 0x20, 0x50, 0x00, 0x00, 0x20, 0x34, 0x00, 0x00, 0x20, 0x08, 0xb5, 0x07, 0x4a, 0x07, 0x4b, 0x08, 0x49, 0x13, 0x60, 0x02, 0x22, 0x1a, 0x72, 0x07, 0x4b, 0x07, 0x4a, 0x13, 0x60, 0x07, 0x4a, 0x1b, 0x68, 0x11, 0x60, 0x98, 0x47, 0x08, 0xbd, 0x00, 0xbf, 0x04, 0x03, 0x00, 0x20, 0xe4, 0x02, 0x00, 0x20, 0x6c, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0xdc, 0x02, 0x00, 0x20, 0x00, 0x03, 0x00, 0x20, 0x10, 0xb5, 0x06, 0x4c, 0x18, 0xb9, 0x23, 0x68, 0x01, 0x22, 0x1a, 0x82, 0x10, 0xbd, 0x04, 0x4b, 0x1b, 0x68, 0x1b, 0x68, 0x98, 0x47, 0x20, 0x68, 0x0a, 0x30, 0x10, 0xbd, 0x04, 0x03, 0x00, 0x20, 0x00, 0x03, 0x00, 0x20, 0x10, 0xb5, 0x06, 0x4c, 0x18, 0xb9, 0x23, 0x68, 0x01, 0x22, 0x1a, 0x82, 0x10, 0xbd, 0x04, 0x4b, 0x1b, 0x68, 0x9b, 0x68, 0x98, 0x47, 0x20, 0x68, 0x0c, 0x30, 0x10, 0xbd, 0x04, 0x03, 0x00, 0x20, 0x00, 0x03, 0x00, 0x20, 0x10, 0xb5, 0x20, 0x4b, 0x18, 0xb9, 0x1b, 0x68, 0x02, 0x22, 0x1a, 0x82, 0x10, 0xbd, 0x1e, 0x4a, 0x19, 0x68, 0x00, 0x20, 0x10, 0x80, 0x0c, 0x78, 0x13, 0x46, 0x14, 0xf0, 0x7f, 0x04, 0x0d, 0xd1, 0x4a, 0x7a, 0x91, 0x06, 0x44, 0xbf, 0x02, 0x21, 0x19, 0x70, 0x12, 0xf0, 0x40, 0x0f, 0x1a, 0x78, 0x14, 0xbf, 0x22, 0xf0, 0x01, 0x02, 0x42, 0xf0, 0x01, 0x02, 0x14, 0xe0, 0x01, 0x2c, 0x1f, 0xd0, 0x02, 0x2c, 0x1e, 0xd1, 0x09, 0x79, 0x01, 0xf0, 0x0f, 0x02, 0x92, 0x00, 0x02, 0xf1, 0x80, 0x42, 0x02, 0xf5, 0xb8, 0x42, 0x11, 0xf0, 0x80, 0x0f, 0x12, 0x68, 0x06, 0xd0, 0x02, 0xf0, 0x30, 0x02, 0x10, 0x2a, 0x07, 0xd1, 0x01, 0x22, 0x1a, 0x70, 0x04, 0xe0, 0x02, 0xf4, 0x40, 0x52, 0xb2, 0xf5, 0x80, 0x5f, 0xf6, 0xe7, 0x05, 0x4b, 0x1b, 0x68, 0x1b, 0x69, 0x98, 0x47, 0x02, 0x48, 0x10, 0xbd, 0x10, 0x46, 0x10, 0xbd, 0x04, 0x03, 0x00, 0x20, 0x0a, 0x03, 0x00, 0x20, 0x00, 0x03, 0x00, 0x20, 0x23, 0x4a, 0x2d, 0xe9, 0xf8, 0x43, 0x14, 0x68, 0x90, 0x46, 0x23, 0x8a, 0x26, 0x7a, 0x21, 0x4f, 0xa3, 0xb9, 0x04, 0x2e, 0x12, 0xd1, 0x20, 0x49, 0x0a, 0x78, 0x01, 0x2a, 0x0a, 0xd1, 0x1f, 0x4a, 0x10, 0x68, 0x1f, 0x4a, 0x80, 0xb2, 0x02, 0x44, 0x52, 0x00, 0x13, 0x60, 0x30, 0x22, 0x3a, 0x80, 0x0b, 0x70, 0x27, 0xe0, 0x10, 0x23, 0x3b, 0x80, 0x07, 0x26, 0x23, 0xe0, 0xa5, 0x8a, 0xab, 0x42, 0x8c, 0xbf, 0x02, 0x26, 0x04, 0x26, 0x9d, 0x42, 0x28, 0xbf, 0x1d, 0x46, 0x28, 0x46, 0xa3, 0x69, 0x98, 0x47, 0x81, 0x46, 0x00, 0x20, 0xff, 0xf7, 0x57, 0xfe, 0x2a, 0x46, 0x01, 0x46, 0x48, 0x46, 0x00, 0xf0, 0x68, 0xfb, 0x29, 0x46, 0x00, 0x20, 0xff, 0xf7, 0x6a, 0xfe, 0x23, 0x8a, 0x4f, 0xf4, 0x40, 0x52, 0x5b, 0x1b, 0x23, 0x82, 0x63, 0x8a, 0x1d, 0x44, 0x30, 0x23, 0x3b, 0x80, 0x09, 0x4b, 0x65, 0x82, 0x1a, 0x80, 0xd8, 0xf8, 0x00, 0x30, 0x1e, 0x72, 0xbd, 0xe8, 0xf8, 0x83, 0x00, 0xbf, 0x04, 0x03, 0x00, 0x20, 0xd4, 0x02, 0x00, 0x20, 0x24, 0x0b, 0x00, 0x20, 0x50, 0x5c, 0x00, 0x40, 0x02, 0x30, 0x00, 0x20, 0xd2, 0x02, 0x00, 0x20, 0x10, 0xb5, 0x0a, 0x4b, 0x0a, 0x49, 0x1b, 0x68, 0x49, 0x78, 0x9a, 0x78, 0x91, 0x42, 0x0a, 0xd3, 0xd9, 0x78, 0x41, 0xb9, 0x9c, 0x88, 0x34, 0xb9, 0x9a, 0x72, 0x06, 0x4b, 0x1b, 0x68, 0x5b, 0x68, 0x98, 0x47, 0x20, 0x46, 0x10, 0xbd, 0x02, 0x20, 0x10, 0xbd, 0x00, 0xbf, 0x04, 0x03, 0x00, 0x20, 0x90, 0x00, 0x00, 0x20, 0x00, 0x03, 0x00, 0x20, 0x38, 0xb5, 0x0e, 0x4a, 0x0e, 0x4c, 0x12, 0x68, 0x23, 0x68, 0x92, 0x69, 0x18, 0x79, 0x99, 0x78, 0x90, 0x47, 0x23, 0x68, 0x9a, 0x7a, 0x7a, 0xb1, 0x70, 0xb9, 0x5a, 0x79, 0x62, 0xb9, 0xdd, 0x78, 0x55, 0xb9, 0x08, 0x4b, 0x1b, 0x68, 0xdb, 0x68, 0x98, 0x47, 0x23, 0x68, 0x28, 0x46, 0x1a, 0x79, 0xda, 0x72, 0x9a, 0x78, 0x1a, 0x73, 0x38, 0xbd, 0x02, 0x20, 0x38, 0xbd, 0xdc, 0x02, 0x00, 0x20, 0x04, 0x03, 0x00, 0x20, 0x00, 0x03, 0x00, 0x20, 0x38, 0xb5, 0x2f, 0x4b, 0x1b, 0x68, 0x18, 0x78, 0x10, 0xf0, 0x7f, 0x00, 0x04, 0xd1, 0x5a, 0x7a, 0x22, 0xf0, 0x20, 0x02, 0x5a, 0x72, 0x38, 0xbd, 0x02, 0x28, 0x4e, 0xd1, 0x5a, 0x88, 0x00, 0x2a, 0x4c, 0xd1, 0x5a, 0x79, 0x00, 0x2a, 0x49, 0xd1, 0x1a, 0x79, 0x26, 0x4d, 0x22, 0xf0, 0x80, 0x00, 0x84, 0x00, 0x04, 0xf1, 0x80, 0x41, 0x01, 0xf5, 0xb8, 0x41, 0x09, 0x68, 0x2d, 0x78, 0x12, 0xf0, 0x80, 0x0f, 0x14, 0xbf, 0x01, 0xf0, 0x30, 0x01, 0x01, 0xf4, 0x40, 0x51, 0xa8, 0x42, 0x34, 0xd2, 0x00, 0x29, 0x32, 0xd0, 0x9b, 0x7a, 0x83, 0xb3, 0x04, 0xf1, 0x80, 0x44, 0x04, 0xf5, 0xb8, 0x44, 0x12, 0x06, 0x23, 0x68, 0x0c, 0xd5, 0x03, 0xf0, 0x30, 0x03, 0x10, 0x2b, 0x1f, 0xd1, 0xc4, 0xb2, 0x20, 0x46, 0xff, 0xf7, 0xa5, 0xfd, 0x20, 0x46, 0x30, 0x21, 0xff, 0xf7, 0x5f, 0xfd, 0x16, 0xe0, 0x03, 0xf4, 0x40, 0x53, 0xb3, 0xf5, 0x80, 0x5f, 0x11, 0xd1, 0x28, 0xb9, 0x0e, 0x4b, 0x93, 0xf8, 0x30, 0x10, 0xff, 0xf7, 0xcf, 0xfd, 0x01, 0xe0, 0xff, 0xf7, 0x82, 0xfd, 0x23, 0x68, 0x23, 0xf4, 0x80, 0x43, 0x23, 0xf0, 0x70, 0x03, 0x9b, 0xb2, 0x83, 0xf4, 0x40, 0x53, 0x23, 0x60, 0x07, 0x4b, 0x1b, 0x68, 0x5b, 0x69, 0x98, 0x47, 0x00, 0x20, 0x38, 0xbd, 0x02, 0x20, 0x38, 0xbd, 0x00, 0xbf, 0x04, 0x03, 0x00, 0x20, 0x90, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x03, 0x00, 0x20, 0x38, 0xb5, 0x1d, 0x4b, 0x1d, 0x4d, 0x19, 0x68, 0x2d, 0x78, 0x0a, 0x79, 0x22, 0xf0, 0x80, 0x04, 0xa3, 0x00, 0x03, 0xf1, 0x80, 0x40, 0x00, 0xf5, 0xb8, 0x40, 0x00, 0x68, 0x12, 0xf0, 0x80, 0x0f, 0x14, 0xbf, 0x00, 0xf0, 0x30, 0x00, 0x00, 0xf4, 0x40, 0x50, 0xac, 0x42, 0x22, 0xd2, 0x4c, 0x88, 0x04, 0xbb, 0xf8, 0xb1, 0x89, 0x7a, 0xe9, 0xb1, 0x03, 0xf1, 0x80, 0x43, 0x03, 0xf5, 0xb8, 0x43, 0x12, 0xf0, 0x80, 0x0f, 0x1a, 0x68, 0x07, 0xd0, 0x22, 0xf4, 0xe0, 0x42, 0x22, 0xf0, 0x40, 0x02, 0x92, 0xb2, 0x82, 0xf0, 0x10, 0x02, 0x06, 0xe0, 0x22, 0xf4, 0x80, 0x42, 0x22, 0xf0, 0x70, 0x02, 0x92, 0xb2, 0x82, 0xf4, 0x80, 0x52, 0x1a, 0x60, 0x05, 0x4b, 0x1b, 0x68, 0x9b, 0x69, 0x98, 0x47, 0x00, 0x20, 0x38, 0xbd, 0x02, 0x20, 0x38, 0xbd, 0x04, 0x03, 0x00, 0x20, 0x90, 0x00, 0x00, 0x20, 0x00, 0x03, 0x00, 0x20, 0x08, 0xb5, 0x06, 0x4b, 0x1b, 0x68, 0x5a, 0x7a, 0x42, 0xf0, 0x20, 0x02, 0x5a, 0x72, 0x04, 0x4b, 0x1b, 0x68, 0xdb, 0x69, 0x98, 0x47, 0x00, 0x20, 0x08, 0xbd, 0x00, 0xbf, 0x04, 0x03, 0x00, 0x20, 0x00, 0x03, 0x00, 0x20, 0x05, 0x4b, 0x1a, 0x68, 0x53, 0x8a, 0x18, 0xb9, 0x89, 0x88, 0xcb, 0x1a, 0x13, 0x82, 0x70, 0x47, 0x08, 0x68, 0x18, 0x44, 0x70, 0x47, 0x00, 0xbf, 0x04, 0x03, 0x00, 0x20, 0x08, 0xb5, 0x0b, 0x4b, 0x00, 0x20, 0x93, 0xf8, 0x30, 0x10, 0xff, 0xf7, 0x49, 0xfd, 0x09, 0x4b, 0x1b, 0x68, 0x18, 0x7a, 0x08, 0x28, 0x06, 0xd1, 0x07, 0x4b, 0x4f, 0xf4, 0x80, 0x52, 0x1a, 0x80, 0x06, 0x4b, 0x10, 0x22, 0x1a, 0x80, 0xb0, 0xf1, 0x09, 0x03, 0x58, 0x42, 0x58, 0x41, 0x08, 0xbd, 0x00, 0x00, 0x00, 0x20, 0x04, 0x03, 0x00, 0x20, 0xd2, 0x02, 0x00, 0x20, 0xd4, 0x02, 0x00, 0x20, 0x73, 0xb5, 0x96, 0x4e, 0x96, 0x4b, 0x32, 0x68, 0x96, 0x4d, 0x92, 0xb2, 0x13, 0x44, 0x5b, 0x00, 0x1a, 0x68, 0x2b, 0x68, 0x19, 0x7a, 0x09, 0x29, 0x0f, 0xd0, 0x92, 0xb2, 0x52, 0x00, 0x02, 0xf1, 0x80, 0x42, 0x02, 0xf5, 0xc0, 0x42, 0x11, 0x78, 0x19, 0x70, 0x51, 0x78, 0x59, 0x70, 0x91, 0x88, 0x59, 0x80, 0x11, 0x89, 0x99, 0x80, 0x92, 0x89, 0xda, 0x80, 0x01, 0x22, 0x1a, 0x72, 0xda, 0x88, 0x5c, 0x78, 0x00, 0x2a, 0x61, 0xd1, 0x1a, 0x78, 0x12, 0xf0, 0x7f, 0x02, 0x3a, 0xd1, 0x09, 0x2c, 0x02, 0xd1, 0xff, 0xf7, 0xab, 0xfe, 0x44, 0xe0, 0x05, 0x2c, 0x0f, 0xd1, 0x93, 0xf9, 0x02, 0x20, 0x00, 0x2a, 0x01, 0xda, 0x08, 0x23, 0x4d, 0xe0, 0xda, 0x78, 0x00, 0x2a, 0xfa, 0xd1, 0x9a, 0x88, 0x00, 0x2a, 0xf7, 0xd1, 0x9b, 0x7a, 0x00, 0x2b, 0x37, 0xd0, 0xf3, 0xe7, 0x03, 0x2c, 0x13, 0xd1, 0x9a, 0x78, 0x01, 0x2a, 0x07, 0xd0, 0x78, 0x4b, 0x20, 0x46, 0x1b, 0x68, 0x5b, 0x69, 0x98, 0x47, 0x03, 0x28, 0x28, 0xd1, 0x35, 0xe0, 0x9a, 0x88, 0x00, 0x2a, 0xf4, 0xd1, 0x5b, 0x7a, 0x98, 0x06, 0xf1, 0xd5, 0xff, 0xf7, 0x6d, 0xff, 0x1c, 0xe0, 0x01, 0x2c, 0xec, 0xd1, 0x9a, 0x78, 0x01, 0x2a, 0xe9, 0xd1, 0x9a, 0x88, 0x00, 0x2a, 0xe6, 0xd1, 0x5b, 0x7a, 0x99, 0x06, 0xe3, 0xd5, 0xff, 0xf7, 0xb5, 0xfe, 0x0e, 0xe0, 0x01, 0x2a, 0x04, 0xd1, 0x0b, 0x2c, 0xdc, 0xd1, 0xff, 0xf7, 0x8a, 0xfe, 0x07, 0xe0, 0x02, 0x2a, 0xd7, 0xd1, 0x01, 0x2c, 0xf1, 0xd0, 0x03, 0x2c, 0xd3, 0xd1, 0xff, 0xf7, 0x0d, 0xff, 0x10, 0xb1, 0xcf, 0xe7, 0x00, 0x28, 0xbc, 0xd1, 0x32, 0x68, 0x5f, 0x4b, 0x92, 0xb2, 0x13, 0x44, 0x5b, 0x00, 0x00, 0x22, 0x1a, 0x60, 0x5d, 0x4b, 0x30, 0x22, 0x1a, 0x80, 0x06, 0x23, 0x00, 0xe0, 0x09, 0x23, 0x2a, 0x68, 0x13, 0x72, 0xd4, 0xe0, 0x06, 0x2c, 0x18, 0xd1, 0x1a, 0x78, 0x52, 0x06, 0x7c, 0xd1, 0xda, 0x78, 0x54, 0x4b, 0x01, 0x2a, 0x02, 0xd1, 0x1b, 0x68, 0xdb, 0x69, 0x6c, 0xe0, 0x02, 0x2a, 0x02, 0xd1, 0x1b, 0x68, 0x1b, 0x6a, 0x67, 0xe0, 0x03, 0x2a, 0x02, 0xd1, 0x1b, 0x68, 0x5b, 0x6a, 0x62, 0xe0, 0x21, 0x2a, 0x69, 0xd1, 0x1b, 0x68, 0x9b, 0x6a, 0x5d, 0xe0, 0x00, 0x2c, 0x3c, 0xd1, 0x59, 0x88, 0x00, 0x29, 0x61, 0xd1, 0x5a, 0x68, 0x22, 0xf0, 0xff, 0x02, 0xb2, 0xf5, 0x00, 0x3f, 0x5b, 0xd1, 0x1a, 0x78, 0x12, 0xf0, 0x7f, 0x02, 0x04, 0xd1, 0x9b, 0x88, 0x00, 0x2b, 0x00, 0xf0, 0xab, 0x80, 0x52, 0xe0, 0x01, 0x2a, 0x0c, 0xd1, 0x3e, 0x4a, 0x18, 0x79, 0x12, 0x68, 0x92, 0x69, 0x90, 0x47, 0x00, 0x28, 0x49, 0xd1, 0x2b, 0x68, 0x9b, 0x7a, 0x00, 0x2b, 0x40, 0xf0, 0x9c, 0x80, 0x43, 0xe0, 0x02, 0x2a, 0x41, 0xd1, 0x1b, 0x79, 0x39, 0x48, 0x03, 0xf0, 0x0f, 0x01, 0x8a, 0x00, 0x02, 0xf1, 0x80, 0x42, 0x02, 0xf5, 0xb8, 0x42, 0x12, 0x68, 0x00, 0x78, 0x13, 0xf0, 0x80, 0x0f, 0x14, 0xbf, 0x02, 0xf0, 0x30, 0x02, 0x02, 0xf4, 0x40, 0x52, 0x81, 0x42, 0x2d, 0xd2, 0x13, 0xf0, 0x70, 0x0f, 0x2a, 0xd1, 0x00, 0x2a, 0x7f, 0xd1, 0x27, 0xe0, 0x08, 0x2c, 0x03, 0xd1, 0x1b, 0x78, 0x5b, 0x06, 0x7b, 0xd0, 0x21, 0xe0, 0x0a, 0x2c, 0x1f, 0xd1, 0x1a, 0x78, 0x02, 0xf0, 0x7f, 0x02, 0x01, 0x2a, 0x1a, 0xd1, 0x9a, 0x7a, 0xc2, 0xb1, 0x59, 0x88, 0xb1, 0xb9, 0x5a, 0x68, 0x22, 0xf0, 0xff, 0x02, 0xb2, 0xf5, 0x80, 0x3f, 0x10, 0xd1, 0x1e, 0x4a, 0x18, 0x79, 0x12, 0x68, 0x92, 0x69, 0x90, 0x47, 0x00, 0x28, 0x64, 0xd0, 0x08, 0xe0, 0x3b, 0xb1, 0x2a, 0x68, 0x00, 0x24, 0x54, 0x82, 0x93, 0x61, 0x20, 0x46, 0x98, 0x47, 0x20, 0x46, 0x0a, 0xe0, 0x16, 0x4b, 0x1a, 0x68, 0x2b, 0x68, 0x12, 0x69, 0x58, 0x78, 0x90, 0x47, 0x03, 0x28, 0x02, 0xd1, 0x11, 0x4b, 0x1b, 0x68, 0x05, 0xe0, 0x2b, 0x68, 0x4f, 0xf6, 0xff, 0x71, 0x1a, 0x8a, 0x8a, 0x42, 0x01, 0xd1, 0x09, 0x22, 0x03, 0xe0, 0x02, 0x28, 0x00, 0xd0, 0x12, 0xb9, 0x08, 0x22, 0x1a, 0x72, 0x39, 0xe0, 0x93, 0xf9, 0x00, 0x10, 0x00, 0x29, 0x2f, 0xda, 0xd9, 0x88, 0x01, 0x91, 0x01, 0x98, 0x82, 0x42, 0x05, 0x48, 0x11, 0xd9, 0x01, 0x9a, 0x1a, 0x82, 0x1f, 0xe0, 0x00, 0xbf, 0x50, 0x5c, 0x00, 0x40, 0x04, 0x30, 0x00, 0x20, 0x04, 0x03, 0x00, 0x20, 0xdc, 0x02, 0x00, 0x20, 0x02, 0x30, 0x00, 0x20, 0xd4, 0x02, 0x00, 0x20, 0x90, 0x00, 0x00, 0x20, 0x8a, 0x42, 0x0e, 0xd2, 0x01, 0x68, 0x91, 0xf8, 0x30, 0x10, 0x8a, 0x42, 0x01, 0xd2, 0x00, 0x21, 0x05, 0xe0, 0x92, 0xfb, 0xf1, 0xf4, 0x01, 0xfb, 0x14, 0x22, 0x12, 0xb9, 0x01, 0x21, 0x0c, 0x4a, 0x11, 0x70, 0x02, 0x68, 0x92, 0xf8, 0x30, 0x20, 0x9a, 0x82, 0xff, 0xf7, 0x2f, 0xfd, 0x05, 0xe0, 0x03, 0x22, 0x1a, 0x72, 0x07, 0x4b, 0x4f, 0xf4, 0x40, 0x52, 0x1a, 0x80, 0xff, 0xf7, 0x84, 0xfe, 0x02, 0xb0, 0x70, 0xbd, 0x04, 0x4b, 0x9e, 0xe7, 0x04, 0x4b, 0x9c, 0xe7, 0x04, 0x4b, 0x9a, 0xe7, 0x24, 0x0b, 0x00, 0x20, 0xd2, 0x02, 0x00, 0x20, 0x19, 0x11, 0x00, 0x08, 0xd1, 0x10, 0x00, 0x08, 0xf5, 0x10, 0x00, 0x08, 0xf8, 0xb5, 0x2b, 0x4d, 0x2c, 0x68, 0x23, 0x7a, 0x03, 0x2b, 0x01, 0xd0, 0x05, 0x2b, 0x41, 0xd1, 0xa3, 0x69, 0x22, 0x8a, 0xab, 0xb1, 0xa2, 0xb1, 0xa6, 0x8a, 0x96, 0x42, 0x28, 0xbf, 0x16, 0x46, 0x30, 0x46, 0x98, 0x47, 0x23, 0x8a, 0x07, 0x46, 0x9b, 0x1b, 0x23, 0x82, 0x63, 0x8a, 0x00, 0x20, 0x33, 0x44, 0x63, 0x82, 0xff, 0xf7, 0x8a, 0xfb, 0x32, 0x46, 0x01, 0x46, 0x38, 0x46, 0x00, 0xf0, 0xa5, 0xf8, 0x23, 0x8a, 0x53, 0xb1, 0x1b, 0x4b, 0x00, 0x20, 0x4f, 0xf4, 0x40, 0x52, 0x01, 0x46, 0x1a, 0x80, 0xff, 0xf7, 0x89, 0xfb, 0x18, 0x4b, 0x30, 0x22, 0x1a, 0x80, 0x23, 0x8a, 0xa2, 0x8a, 0x9a, 0x42, 0x02, 0xd8, 0x2b, 0x68, 0x03, 0x22, 0x02, 0xe0, 0x1b, 0xb1, 0x2b, 0x68, 0x05, 0x22, 0x1a, 0x72, 0x0c, 0xe0, 0x2a, 0x68, 0x06, 0x21, 0x11, 0x72, 0x10, 0x4a, 0x11, 0x68, 0x10, 0x4a, 0x89, 0xb2, 0x0a, 0x44, 0x52, 0x00, 0x13, 0x60, 0x0b, 0x4b, 0x30, 0x22, 0x1a, 0x80, 0x2b, 0x68, 0x1b, 0x7a, 0x06, 0xe0, 0x07, 0x2b, 0x03, 0xd1, 0x0a, 0x4b, 0x1b, 0x68, 0xdb, 0x68, 0x98, 0x47, 0x08, 0x23, 0x2a, 0x68, 0x13, 0x72, 0xbd, 0xe8, 0xf8, 0x40, 0xff, 0xf7, 0x1b, 0xbe, 0x00, 0xbf, 0x04, 0x03, 0x00, 0x20, 0xd2, 0x02, 0x00, 0x20, 0xd4, 0x02, 0x00, 0x20, 0x50, 0x5c, 0x00, 0x40, 0x02, 0x30, 0x00, 0x20, 0xdc, 0x02, 0x00, 0x20, 0x30, 0xb5, 0x0b, 0x4b, 0x1c, 0x78, 0x00, 0x23, 0xa3, 0x42, 0x0c, 0xd2, 0x03, 0xf1, 0x80, 0x52, 0x02, 0xf5, 0xb8, 0x52, 0x91, 0x00, 0x0d, 0x68, 0x48, 0xf6, 0x8f, 0x72, 0x2a, 0x40, 0x1a, 0x43, 0x0a, 0x60, 0x01, 0x33, 0xf0, 0xe7, 0x03, 0x4b, 0x40, 0xf0, 0x80, 0x00, 0x18, 0x60, 0x30, 0xbd, 0x90, 0x00, 0x00, 0x20, 0x4c, 0x5c, 0x00, 0x40, 0x10, 0xb5, 0x13, 0x4c, 0x23, 0x68, 0x1a, 0x7a, 0x02, 0x2a, 0x01, 0xd0, 0x04, 0x2a, 0x04, 0xd1, 0xff, 0xf7, 0x8a, 0xfc, 0x23, 0x68, 0x1b, 0x7a, 0x13, 0xe0, 0x06, 0x2a, 0x10, 0xd1, 0x5a, 0x78, 0x05, 0x2a, 0x09, 0xd1, 0x1a, 0x78, 0x52, 0x06, 0x06, 0xd1, 0x98, 0x78, 0xff, 0xf7, 0xcc, 0xff, 0x08, 0x4b, 0x1b, 0x68, 0x1b, 0x6a, 0x98, 0x47, 0x07, 0x4b, 0x1b, 0x68, 0x9b, 0x68, 0x98, 0x47, 0x08, 0x23, 0x22, 0x68, 0x13, 0x72, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0xcb, 0xbd, 0x00, 0xbf, 0x04, 0x03, 0x00, 0x20, 0x00, 0x03, 0x00, 0x20, 0xdc, 0x02, 0x00, 0x20, 0x30, 0xb5, 0x01, 0xf1, 0x00, 0x51, 0x01, 0x32, 0x01, 0xf5, 0x40, 0x51, 0x52, 0x10, 0x49, 0x00, 0x00, 0x23, 0x93, 0x42, 0x00, 0xf1, 0x02, 0x00, 0x09, 0xd0, 0x10, 0xf8, 0x01, 0x5c, 0x10, 0xf8, 0x02, 0x4c, 0x44, 0xea, 0x05, 0x24, 0x21, 0xf8, 0x23, 0x40, 0x01, 0x33, 0xf1, 0xe7, 0x30, 0xbd, 0x10, 0xb5, 0x01, 0xf1, 0x00, 0x51, 0x01, 0x32, 0x01, 0xf5, 0x40, 0x51, 0x52, 0x10, 0x49, 0x00, 0x00, 0x23, 0x93, 0x42, 0x05, 0xd0, 0x51, 0xf8, 0x23, 0x40, 0x20, 0xf8, 0x13, 0x40, 0x01, 0x33, 0xf7, 0xe7, 0x10, 0xbd, 0x95, 0x04, 0x00, 0x08, 0x81, 0x01, 0x00, 0x08, 0x3f, 0x01, 0x00, 0x08, 0x41, 0x01, 0x00, 0x08, 0x29, 0x02, 0x00, 0x08, 0xcd, 0x02, 0x00, 0x08, 0x43, 0x01, 0x00, 0x08, 0x89, 0x02, 0x00, 0x08, 0x95, 0x02, 0x00, 0x08, 0xa1, 0x02, 0x00, 0x08, 0xc1, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3d, 0x01, 0x00, 0x08, 0x3d, 0x01, 0x00, 0x08, 0x3d, 0x01, 0x00, 0x08, 0x3d, 0x01, 0x00, 0x08, 0x3d, 0x01, 0x00, 0x08, 0x3d, 0x01, 0x00, 0x08, 0x3d, 0x01, 0x00, 0x08, 0x3d, 0x01, 0x00, 0x08, 0x3d, 0x01, 0x00, 0x08, 0x3d, 0x01, 0x00, 0x08, 0x3d, 0x01, 0x00, 0x08, 0x3d, 0x01, 0x00, 0x08, 0x3d, 0x01, 0x00, 0x08, 0x3d, 0x01, 0x00, 0x08, 0x4d, 0x01, 0x00, 0x08, 0x51, 0x01, 0x00, 0x08, 0x69, 0x01, 0x00, 0x08, 0x6b, 0x01, 0x00, 0x08, 0x6d, 0x01, 0x00, 0x08, 0x6f, 0x01, 0x00, 0x08, 0x71, 0x01, 0x00, 0x08, 0x73, 0x01, 0x00, 0x08, 0x75, 0x01, 0x00, 0x08, 0x01, 0x01, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x32, 0x01, 0x00, 0x20, 0x12, 0x00, 0x00, 0x00, 0x4c, 0x01, 0x00, 0x20, 0x14, 0x00, 0x00, 0x00, 0x19, 0x01, 0x00, 0x20, 0x10, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x20, 0x6c, 0x00, 0x00, 0x00, 0x4c, 0x02, 0x00, 0x20, 0x6c, 0x00, 0x00, 0x00, 0x12, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0xaf, 0x1e, 0x03, 0x00, 0x01, 0x02, 0x01, 0x02, 0x03, 0x01, 0x00, 0x00, 0x29, 0x01, 0x00, 0x20, 0x09, 0x00, 0x00, 0x00, 0x04, 0x03, 0x09, 0x04, 0x09, 0x02, 0x2d, 0x00, 0x01, 0x01, 0x00, 0x80, 0x32, 0x09, 0x04, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x02, 0x04, 0x09, 0x04, 0x00, 0x01, 0x00, 0xfe, 0x01, 0x02, 0x05, 0x09, 0x04, 0x00, 0x02, 0x00, 0xfe, 0x01, 0x02, 0x06, 0x09, 0x21, 0x03, 0xff, 0x00, 0x00, 0x08, 0x10, 0x01, 0x10, 0x03, 0x4c, 0x00, 0x4c, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x30, 0x00, 0x30, 0x00, 0x33, 0x00, 0x09, 0x21, 0x03, 0xff, 0x00, 0x00, 0x08, 0x10, 0x01, 0x12, 0x03, 0x4c, 0x00, 0x65, 0x00, 0x61, 0x00, 0x66, 0x00, 0x4c, 0x00, 0x61, 0x00, 0x62, 0x00, 0x73, 0x00, 0xcc, 0x00, 0x00, 0x20, 0x12, 0x00, 0x00, 0x00, 0x14, 0x03, 0x4d, 0x00, 0x61, 0x00, 0x70, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x20, 0x00, 0x30, 0x00, 0x30, 0x00, 0x33, 0x00, 0x80, 0x03, 0x53, 0x00, 0x54, 0x00, 0x4d, 0x00, 0x33, 0x00, 0x32, 0x00, 0x64, 0x00, 0x75, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x61, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x20, 0x00, 0x76, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x30, 0x00, 0x20, 0x00, 0x20, 0x00, 0x45, 0x00, 0x52, 0x00, 0x52, 0x00, 0x4f, 0x00, 0x52, 0x00, 0x2e, 0x00, 0x20, 0x00, 0x55, 0x00, 0x70, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x61, 0x00, 0x64, 0x00, 0x20, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x52, 0x00, 0x41, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x20, 0x00, 0x73, 0x00, 0x75, 0x00, 0x70, 0x00, 0x70, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x2e, 0x00, 0x6c, 0x03, 0x53, 0x00, 0x54, 0x00, 0x4d, 0x00, 0x33, 0x00, 0x32, 0x00, 0x64, 0x00, 0x75, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x61, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x20, 0x00, 0x76, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x30, 0x00, 0x20, 0x00, 0x20, 0x00, 0x55, 0x00, 0x70, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x61, 0x00, 0x64, 0x00, 0x20, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x46, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x20, 0x00, 0x30, 0x00, 0x78, 0x00, 0x38, 0x00, 0x30, 0x00, 0x30, 0x00, 0x35, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x6c, 0x03, 0x53, 0x00, 0x54, 0x00, 0x4d, 0x00, 0x33, 0x00, 0x32, 0x00, 0x64, 0x00, 0x75, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x61, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x20, 0x00, 0x76, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x30, 0x00, 0x20, 0x00, 0x20, 0x00, 0x55, 0x00, 0x70, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x61, 0x00, 0x64, 0x00, 0x20, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x46, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x20, 0x00, 0x30, 0x00, 0x78, 0x00, 0x38, 0x00, 0x30, 0x00, 0x30, 0x00, 0x32, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0xec, 0x00, 0x00, 0x20, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x20, 0x00, 0x0c, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x20, 0x91, 0x21, 0x00, 0x08, 0x61, 0x24, 0x00, 0x08, 0x65, 0x24, 0x00, 0x08, 0x69, 0x24, 0x00, 0x08, 0x6d, 0x24, 0x00, 0x08, 0x71, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0x5d, 0x28, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0x19, 0x25, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0x7d, 0x32, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xe5, 0x28, 0x00, 0x08, 0x09, 0x29, 0x00, 0x08, 0x2d, 0x29, 0x00, 0x08, 0x65, 0x29, 0x00, 0x08, 0xb9, 0x29, 0x00, 0x08, 0x29, 0x2a, 0x00, 0x08, 0x99, 0x2a, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0x81, 0x2b, 0x00, 0x08, 0xd5, 0x2b, 0x00, 0x08, 0x29, 0x2c, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0xc1, 0x24, 0x00, 0x08, 0x10, 0xb5, 0x05, 0x4c, 0x23, 0x78, 0x33, 0xb9, 0x04, 0x4b, 0x13, 0xb1, 0x04, 0x48, 0xaf, 0xf3, 0x00, 0x80, 0x01, 0x23, 0x23, 0x70, 0x10, 0xbd, 0xd8, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x38, 0x46, 0x00, 0x08, 0x08, 0xb5, 0x06, 0x4b, 0x1b, 0xb1, 0x06, 0x48, 0x06, 0x49, 0xaf, 0xf3, 0x00, 0x80, 0x06, 0x48, 0x03, 0x68, 0x13, 0xb1, 0x05, 0x4b, 0x03, 0xb1, 0x98, 0x47, 0x08, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x38, 0x46, 0x00, 0x08, 0xdc, 0x07, 0x00, 0x20, 0xd8, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x48, 0x00, 0xf0, 0x23, 0xbf, 0x00, 0xbf, 0x8c, 0x08, 0x00, 0x20, 0x10, 0xb5, 0x0b, 0x4c, 0x0b, 0x49, 0x20, 0x46, 0x00, 0xf0, 0x6c, 0xfe, 0x20, 0x46, 0x0a, 0x49, 0x00, 0xf0, 0x68, 0xfe, 0x20, 0x46, 0x09, 0x49, 0x00, 0xf0, 0x64, 0xfe, 0x20, 0x46, 0x08, 0x49, 0x00, 0xf0, 0x60, 0xfe, 0xbd, 0xe8, 0x10, 0x40, 0x4f, 0xf4, 0x7a, 0x70, 0x00, 0xf0, 0x80, 0xbf, 0x8c, 0x08, 0x00, 0x20, 0x48, 0x4e, 0x00, 0x08, 0x86, 0x4e, 0x00, 0x08, 0xc9, 0x4e, 0x00, 0x08, 0xf5, 0x4e, 0x00, 0x08, 0x01, 0x49, 0x8d, 0x46, 0x01, 0x49, 0x08, 0x47, 0x00, 0x50, 0x00, 0x20, 0xa1, 0x21, 0x00, 0x08, 0x08, 0xb5, 0x12, 0x4b, 0x12, 0x4a, 0x19, 0x68, 0x91, 0x42, 0x01, 0xd0, 0x00, 0x23, 0x01, 0xe0, 0x10, 0x4b, 0x07, 0xe0, 0x10, 0x48, 0xd4, 0x18, 0x84, 0x42, 0xf9, 0xd2, 0xc8, 0x58, 0xd0, 0x50, 0x04, 0x33, 0xf7, 0xe7, 0x0d, 0x4a, 0x93, 0x42, 0x03, 0xd2, 0x00, 0x22, 0x43, 0xf8, 0x04, 0x2b, 0xf8, 0xe7, 0x02, 0xf0, 0xe5, 0xf8, 0x00, 0x20, 0x01, 0x46, 0x02, 0x46, 0x00, 0xf0, 0x34, 0xfe, 0x07, 0x4b, 0x0b, 0xb1, 0x02, 0xf0, 0xcc, 0xf8, 0xfe, 0xe7, 0x00, 0xbf, 0x90, 0x52, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0xd8, 0x07, 0x00, 0x20, 0xd8, 0x07, 0x00, 0x20, 0x00, 0x0b, 0x00, 0x20, 0x81, 0x43, 0x00, 0x08, 0xfe, 0xe7, 0x00, 0xf0, 0x47, 0xbf, 0x00, 0x00, 0x0b, 0x4b, 0x10, 0xb5, 0x19, 0x68, 0x09, 0x22, 0x0a, 0x23, 0x0a, 0x48, 0x00, 0xf0, 0xc8, 0xfd, 0x09, 0x4b, 0x02, 0x22, 0x19, 0x68, 0x09, 0x48, 0x03, 0x23, 0x00, 0xf0, 0xc1, 0xfd, 0xbd, 0xe8, 0x10, 0x40, 0x07, 0x4b, 0x07, 0x48, 0x19, 0x68, 0x1a, 0x22, 0x1b, 0x23, 0x00, 0xf0, 0xb8, 0xbd, 0x14, 0x01, 0x00, 0x20, 0xf4, 0x07, 0x00, 0x20, 0x18, 0x01, 0x00, 0x20, 0x0c, 0x08, 0x00, 0x20, 0x1c, 0x01, 0x00, 0x20, 0x24, 0x08, 0x00, 0x20, 0x10, 0xb5, 0x04, 0x46, 0x00, 0xf0, 0xaa, 0xf9, 0x03, 0x4b, 0x20, 0x46, 0x19, 0x78, 0xbd, 0xe8, 0x10, 0x40, 0x00, 0xf0, 0x3f, 0xb9, 0x00, 0xbf, 0x0c, 0x00, 0x00, 0x20, 0xf8, 0xb5, 0x04, 0x46, 0x05, 0x68, 0x00, 0xf0, 0x13, 0xfb, 0x22, 0x68, 0x00, 0x23, 0x51, 0x01, 0x01, 0xf1, 0x84, 0x41, 0x0b, 0x60, 0x80, 0x21, 0x29, 0x60, 0x01, 0x21, 0xa9, 0x62, 0x2b, 0x61, 0xeb, 0x60, 0x63, 0x79, 0x69, 0x61, 0x13, 0xb1, 0x8b, 0x42, 0x03, 0xd0, 0x2b, 0xe0, 0x4f, 0xf4, 0x00, 0x43, 0x6b, 0x64, 0x4f, 0xf6, 0xff, 0x73, 0xd3, 0x62, 0x00, 0x25, 0x6e, 0x1c, 0xf7, 0xb2, 0x20, 0x46, 0x39, 0x46, 0x00, 0xf0, 0xfe, 0xfa, 0xd0, 0xb1, 0x23, 0x68, 0x48, 0xf6, 0xff, 0x71, 0x03, 0xf1, 0x34, 0x02, 0x42, 0xf8, 0x25, 0x10, 0x18, 0x33, 0x6d, 0x10, 0x17, 0xf0, 0x01, 0x0f, 0x53, 0xf8, 0x25, 0x20, 0x14, 0xbf, 0x6f, 0xf0, 0xff, 0x01, 0x6f, 0xf4, 0x7f, 0x41, 0x01, 0xea, 0x02, 0x02, 0x14, 0xbf, 0x68, 0x21, 0x4f, 0xf4, 0xd0, 0x41, 0x0a, 0x43, 0x43, 0xf8, 0x25, 0x20, 0x04, 0x2e, 0x35, 0x46, 0xda, 0xd1, 0x21, 0x68, 0x01, 0x22, 0x4b, 0x01, 0x49, 0x01, 0x03, 0xf1, 0x84, 0x43, 0x01, 0xf1, 0x84, 0x41, 0xc3, 0xf8, 0x80, 0x22, 0x0a, 0x60, 0xf8, 0xbd, 0x00, 0x00, 0x38, 0xb5, 0x26, 0x4b, 0x26, 0x4c, 0x1a, 0x68, 0x02, 0x20, 0x42, 0xf0, 0x10, 0x02, 0x1a, 0x60, 0x00, 0xf0, 0x62, 0xf9, 0x00, 0x25, 0x00, 0x20, 0x00, 0xf0, 0x02, 0xfa, 0x65, 0x60, 0x23, 0x68, 0x18, 0x20, 0x23, 0xf4, 0x00, 0x23, 0x23, 0x60, 0x00, 0xf0, 0x07, 0xfa, 0x10, 0x20, 0x00, 0xf0, 0x04, 0xfa, 0x00, 0xf0, 0x43, 0xf8, 0xa5, 0x60, 0x10, 0x20, 0x00, 0xf0, 0xf1, 0xf9, 0x10, 0x20, 0x00, 0xf0, 0x09, 0xfa, 0x00, 0x28, 0xfa, 0xd0, 0x00, 0xf0, 0x39, 0xf8, 0x15, 0x48, 0x00, 0xf0, 0x0f, 0xfa, 0x18, 0x20, 0x00, 0xf0, 0xe4, 0xf9, 0x18, 0x20, 0x00, 0xf0, 0xfc, 0xf9, 0x00, 0x28, 0xfa, 0xd0, 0x02, 0x20, 0x00, 0xf0, 0xcc, 0xf9, 0x00, 0x21, 0x0f, 0x48, 0x00, 0xf0, 0x9c, 0xf9, 0x0e, 0x48, 0x00, 0xf0, 0x63, 0xfa, 0x00, 0xf0, 0x39, 0xf8, 0x0d, 0x4b, 0x18, 0x88, 0x00, 0xf0, 0xfd, 0xf8, 0x0c, 0x48, 0x00, 0xf0, 0xfe, 0xf8, 0x0b, 0x48, 0x00, 0xf0, 0x6d, 0xfa, 0x00, 0xf0, 0x2f, 0xf8, 0x00, 0xf0, 0x57, 0xf8, 0xff, 0xf7, 0x2e, 0xff, 0x38, 0xbd, 0x00, 0x20, 0x02, 0x40, 0x00, 0x10, 0x02, 0x40, 0x10, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x08, 0x3f, 0x19, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x20, 0x55, 0x22, 0x00, 0x08, 0x71, 0x22, 0x00, 0x08, 0x70, 0x47, 0x08, 0xb5, 0x00, 0x20, 0x01, 0x46, 0x00, 0xf0, 0x12, 0xfa, 0x01, 0x20, 0x4f, 0xf4, 0x80, 0x61, 0x00, 0xf0, 0x0d, 0xfa, 0x00, 0x21, 0x02, 0x20, 0x00, 0xf0, 0x09, 0xfa, 0x2d, 0x20, 0x00, 0xf0, 0x16, 0xfa, 0xbd, 0xe8, 0x08, 0x40, 0x03, 0x20, 0x00, 0x21, 0x00, 0xf0, 0x00, 0xba, 0x00, 0xf0, 0xfe, 0xb8, 0x13, 0xb5, 0x12, 0x4c, 0x03, 0x22, 0xd4, 0xf8, 0xc0, 0x00, 0x94, 0xf8, 0xcc, 0x10, 0x00, 0xf0, 0x0d, 0xf9, 0x94, 0xf8, 0xcc, 0x20, 0x4f, 0xf4, 0x80, 0x31, 0x01, 0xfa, 0x02, 0xf2, 0xd4, 0xf8, 0xc0, 0x00, 0x03, 0x68, 0x1a, 0x61, 0x00, 0x23, 0x01, 0x93, 0x01, 0x9b, 0xb3, 0xf5, 0x00, 0x7f, 0x02, 0xd2, 0x01, 0x9b, 0x01, 0x33, 0xf7, 0xe7, 0x94, 0xf8, 0xcc, 0x10, 0x04, 0x22, 0x00, 0xf0, 0xf5, 0xf8, 0x03, 0x48, 0x00, 0xf0, 0xa2, 0xfd, 0x02, 0xb0, 0x10, 0xbd, 0x18, 0x4f, 0x00, 0x08, 0x8c, 0x08, 0x00, 0x20, 0x00, 0xf0, 0x12, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x07, 0xe0, 0x02, 0x20, 0x05, 0xe0, 0x03, 0x20, 0x03, 0xe0, 0x04, 0x20, 0x01, 0xe0, 0x05, 0x20, 0xff, 0xe7, 0x0d, 0x4a, 0x01, 0x21, 0x11, 0x60, 0x72, 0xb6, 0x0c, 0x4a, 0x00, 0x21, 0x11, 0x60, 0x07, 0x49, 0x02, 0xb4, 0x08, 0x49, 0x02, 0xb4, 0x86, 0xb0, 0x05, 0x49, 0x8e, 0x46, 0x70, 0x47, 0x00, 0xbf, 0xaf, 0xf3, 0x00, 0x80, 0xaf, 0xf3, 0x00, 0x80, 0xaf, 0xf3, 0x00, 0x80, 0x00, 0x00, 0x00, 0x61, 0xf9, 0xff, 0xff, 0xff, 0xc9, 0x2c, 0x00, 0x08, 0x14, 0xed, 0x00, 0xe0, 0x10, 0xe0, 0x00, 0xe0, 0xaf, 0xf3, 0x00, 0x80, 0xaf, 0xf3, 0x00, 0x80, 0xaf, 0xf3, 0x00, 0x80, 0xfe, 0xe7, 0x10, 0xb5, 0x04, 0x46, 0x00, 0x79, 0x00, 0xf0, 0x66, 0xf9, 0x20, 0x79, 0xbd, 0xe8, 0x10, 0x40, 0x00, 0xf0, 0x79, 0xb9, 0x03, 0x68, 0x9a, 0x68, 0x22, 0xf4, 0x60, 0x22, 0x42, 0xf4, 0x80, 0x12, 0x11, 0x43, 0x99, 0x60, 0x70, 0x47, 0x00, 0x23, 0x70, 0xb5, 0x1a, 0x46, 0x1c, 0x46, 0x07, 0x2b, 0x4f, 0xea, 0x43, 0x05, 0x03, 0xdc, 0xee, 0x18, 0x01, 0xfa, 0x06, 0xf6, 0x34, 0x43, 0x1d, 0x44, 0x01, 0xfa, 0x05, 0xf5, 0x01, 0x33, 0x0a, 0x2b, 0x42, 0xea, 0x05, 0x02, 0xef, 0xd1, 0x03, 0x68, 0xdc, 0x60, 0x1a, 0x61, 0x70, 0xbd, 0x38, 0xb5, 0x12, 0x4d, 0x2a, 0x68, 0x13, 0x68, 0x1c, 0x68, 0xa1, 0x07, 0x06, 0xd5, 0x19, 0x68, 0x21, 0xf0, 0x02, 0x01, 0x19, 0x60, 0x93, 0x68, 0x03, 0xb1, 0x98, 0x47, 0x62, 0x07, 0x08, 0xd5, 0x2b, 0x68, 0x1a, 0x68, 0x1b, 0x69, 0x11, 0x68, 0x21, 0xf0, 0x04, 0x01, 0x11, 0x60, 0x03, 0xb1, 0x98, 0x47, 0xe3, 0x07, 0x08, 0xd5, 0x2b, 0x68, 0x1a, 0x68, 0xdb, 0x68, 0x11, 0x68, 0x21, 0xf0, 0x01, 0x01, 0x11, 0x60, 0x03, 0xb1, 0x98, 0x47, 0x38, 0xbd, 0x00, 0xbf, 0x3c, 0x00, 0x00, 0x20, 0x03, 0x68, 0x01, 0x22, 0x5b, 0x01, 0x03, 0xf1, 0x84, 0x43, 0x03, 0xf5, 0x86, 0x73, 0x19, 0x1f, 0x1a, 0x60, 0x18, 0x68, 0x00, 0x28, 0xfc, 0xd1, 0x43, 0xf8, 0x04, 0x2c, 0x0b, 0x68, 0x00, 0x2b, 0xfc, 0xd1, 0x70, 0x47, 0x01, 0x46, 0x04, 0x20, 0x00, 0xf0, 0x34, 0xb9, 0x04, 0x4b, 0x10, 0xb5, 0x04, 0x46, 0x18, 0x68, 0xa0, 0x47, 0x03, 0x4b, 0x18, 0x68, 0xa0, 0x47, 0x10, 0xbd, 0x00, 0xbf, 0x3c, 0x00, 0x00, 0x20, 0x38, 0x00, 0x00, 0x20, 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0x85, 0xff, 0x20, 0x46, 0x4f, 0xf4, 0x60, 0x21, 0xff, 0xf7, 0x8a, 0xff, 0x23, 0x68, 0x01, 0x21, 0x03, 0xf1, 0x40, 0x43, 0x08, 0x33, 0x5a, 0x01, 0x5b, 0x01, 0x02, 0xf1, 0x84, 0x42, 0x03, 0xf1, 0x84, 0x43, 0x11, 0x65, 0x20, 0x46, 0x19, 0x60, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0xc1, 0xbf, 0x00, 0x00, 0x03, 0x4b, 0x1a, 0x68, 0x22, 0xf0, 0x07, 0x02, 0x10, 0x43, 0x18, 0x60, 0x70, 0x47, 0x00, 0xbf, 0x00, 0x20, 0x02, 0x40, 0x08, 0xb5, 0x07, 0x48, 0x00, 0xf0, 0x55, 0xfd, 0x06, 0x48, 0x00, 0xf0, 0x52, 0xfd, 0x06, 0x48, 0x00, 0xf0, 0x4f, 0xfd, 0xbd, 0xe8, 0x08, 0x40, 0x04, 0x48, 0x00, 0xf0, 0x4a, 0xbd, 0x00, 0xbf, 0x40, 0x00, 0x00, 0x20, 0x48, 0x00, 0x00, 0x20, 0x50, 0x00, 0x00, 0x20, 0x58, 0x00, 0x00, 0x20, 0x70, 0xb5, 0x01, 0xf0, 0x07, 0x04, 0xa4, 0x00, 0x0f, 0x25, 0xa5, 0x40, 0x03, 0x68, 0xc8, 0x08, 0x53, 0xf8, 0x20, 0x60, 0x09, 0x2a, 0x26, 0xea, 0x05, 0x05, 0x14, 0xbf, 0x16, 0x46, 0x08, 0x26, 0x06, 0xfa, 0x04, 0xf4, 0x08, 0x2a, 0x44, 0xea, 0x05, 0x04, 0x43, 0xf8, 0x20, 0x40, 0x06, 0xd1, 0x01, 0x20, 0x00, 0xfa, 0x01, 0xf1, 0xda, 0x68, 0x22, 0xea, 0x01, 0x01, 0x06, 0xe0, 0x09, 0x2a, 0x05, 0xd1, 0x01, 0x20, 0x00, 0xfa, 0x01, 0xf1, 0xda, 0x68, 0x11, 0x43, 0xd9, 0x60, 0x70, 0xbd, 0x08, 0xb5, 0x03, 0x20, 0x00, 0xf0, 0x8a, 0xf8, 0xbd, 0xe8, 0x08, 0x40, 0x03, 0x20, 0x00, 0xf0, 0x9d, 0xb8, 0x00, 0x00, 0x00, 0x28, 0x4f, 0xea, 0x01, 0x11, 0x05, 0xda, 0x06, 0x4b, 0x00, 0xf0, 0x0f, 0x00, 0xc9, 0xb2, 0x19, 0x54, 0x70, 0x47, 0x00, 0xf1, 0x60, 0x40, 0xc9, 0xb2, 0x00, 0xf5, 0x61, 0x40, 0x80, 0xf8, 0x00, 0x13, 0x70, 0x47, 0x14, 0xed, 0x00, 0xe0, 0x21, 0xf0, 0x60, 0x41, 0x38, 0xb5, 0x21, 0xf0, 0x7f, 0x01, 0x08, 0x4b, 0x08, 0x43, 0x98, 0x60, 0x00, 0x24, 0x1d, 0x46, 0x60, 0xb2, 0x0f, 0x21, 0x01, 0x34, 0xff, 0xf7, 0xdd, 0xff, 0x2b, 0x2c, 0xf8, 0xd1, 0xf0, 0x23, 0x85, 0xf8, 0x23, 0x30, 0x38, 0xbd, 0x00, 0xbf, 0x00, 0xed, 0x00, 0xe0, 0x04, 0x4a, 0x05, 0x4b, 0xd1, 0x68, 0x01, 0xf4, 0x40, 0x71, 0x0b, 0x43, 0xd3, 0x60, 0xbf, 0xf3, 0x4f, 0x8f, 0xfe, 0xe7, 0x00, 0xed, 0x00, 0xe0, 0x04, 0x00, 0xfa, 0x05, 0x01, 0x4b, 0x13, 0xf8, 0x10, 0x00, 0x70, 0x47, 0x4c, 0x51, 0x00, 0x08, 0x06, 0x4b, 0x5a, 0x68, 0x22, 0xf0, 0x03, 0x02, 0x02, 0x43, 0x5a, 0x60, 0x80, 0x00, 0x5a, 0x68, 0x02, 0xf0, 0x0c, 0x02, 0x82, 0x42, 0xfa, 0xd1, 0x70, 0x47, 0x00, 0xbf, 0x00, 0x10, 0x02, 0x40, 0x03, 0x0a, 0x01, 0x21, 0xc0, 0xb2, 0x01, 0xfa, 0x00, 0xf0, 0x03, 0xf1, 0x80, 0x43, 0x03, 0xf5, 0x04, 0x33, 0x1a, 0x68, 0x10, 0x43, 0x18, 0x60, 0x70, 0x47, 0x03, 0x0a, 0x01, 0x21, 0xc0, 0xb2, 0x01, 0xfa, 0x00, 0xf0, 0x03, 0xf1, 0x80, 0x43, 0x03, 0xf5, 0x04, 0x33, 0x1a, 0x68, 0x22, 0xea, 0x00, 0x00, 0x18, 0x60, 0x70, 0x47, 0x03, 0x0a, 0x02, 0x22, 0xc0, 0xb2, 0x02, 0xfa, 0x00, 0xf0, 0x03, 0xf1, 0x80, 0x43, 0x03, 0xf5, 0x04, 0x33, 0x1b, 0x68, 0x18, 0x40, 0x70, 0x47, 0x00, 0x00, 0x04, 0x4b, 0x05, 0xc8, 0x59, 0x68, 0x12, 0x68, 0x21, 0xf4, 0x74, 0x11, 0x02, 0x43, 0x0a, 0x43, 0x5a, 0x60, 0x70, 0x47, 0x00, 0x10, 0x02, 0x40, 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xb2, 0xff, 0x07, 0x4b, 0x53, 0xf8, 0x20, 0x20, 0x07, 0x4b, 0x03, 0xeb, 0x44, 0x04, 0x63, 0x78, 0x03, 0xeb, 0xc2, 0x03, 0x9b, 0x00, 0x03, 0xf1, 0x84, 0x43, 0x01, 0x22, 0x1a, 0x60, 0x10, 0xbd, 0x00, 0xbf, 0x60, 0x00, 0x00, 0x20, 0x4c, 0x51, 0x00, 0x08, 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0x9a, 0xff, 0x08, 0x4b, 0x53, 0xf8, 0x20, 0x20, 0x08, 0x4b, 0x03, 0xeb, 0x44, 0x04, 0x63, 0x78, 0x03, 0xeb, 0xc2, 0x03, 0x9b, 0x00, 0x03, 0xf1, 0x84, 0x43, 0x01, 0x22, 0x1a, 0x60, 0x00, 0x22, 0x1a, 0x60, 0x10, 0xbd, 0x00, 0xbf, 0x6c, 0x00, 0x00, 0x20, 0x4c, 0x51, 0x00, 0x08, 0x10, 0xb5, 0x05, 0x4b, 0x05, 0x4c, 0x5a, 0x68, 0x54, 0xf8, 0x20, 0x00, 0x22, 0xea, 0x00, 0x02, 0x11, 0x43, 0x59, 0x60, 0x10, 0xbd, 0x00, 0xbf, 0x00, 0x10, 0x02, 0x40, 0xa8, 0x51, 0x00, 0x08, 0x10, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0x70, 0xff, 0x07, 0x4b, 0x53, 0xf8, 0x20, 0x20, 0x07, 0x4b, 0x03, 0xeb, 0x44, 0x04, 0x63, 0x78, 0x03, 0xeb, 0xc2, 0x03, 0x9b, 0x00, 0x03, 0xf1, 0x84, 0x43, 0x00, 0x22, 0x1a, 0x60, 0x10, 0xbd, 0x00, 0xbf, 0x74, 0x00, 0x00, 0x20, 0x4c, 0x51, 0x00, 0x08, 0x02, 0x4b, 0x07, 0x22, 0x58, 0x60, 0x1a, 0x60, 0x70, 0x47, 0x00, 0xbf, 0x10, 0xe0, 0x00, 0xe0, 0x08, 0xb5, 0x04, 0x4b, 0x1a, 0x68, 0x01, 0x32, 0x1a, 0x60, 0x03, 0x4b, 0x1b, 0x68, 0x03, 0xb1, 0x98, 0x47, 0x08, 0xbd, 0xc0, 0x0a, 0x00, 0x20, 0x3c, 0x08, 0x00, 0x20, 0x10, 0xb5, 0x04, 0x46, 0x04, 0x48, 0xa0, 0x47, 0x04, 0x48, 0xa0, 0x47, 0x04, 0x48, 0xa0, 0x47, 0x04, 0x48, 0xa0, 0x47, 0x10, 0xbd, 0x00, 0xbf, 0xc8, 0x00, 0x00, 0x20, 0xf0, 0x00, 0x00, 0x20, 0x80, 0x00, 0x00, 0x20, 0xa4, 0x00, 0x00, 0x20, 0x10, 0xb5, 0x04, 0x46, 0x00, 0x79, 0xff, 0xf7, 0x77, 0xff, 0x20, 0x79, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0x8a, 0xbf, 0x03, 0x79, 0x1e, 0x2b, 0x10, 0xd9, 0x21, 0x2b, 0x0e, 0xd0, 0x20, 0x2b, 0x0e, 0xd9, 0x22, 0x2b, 0x01, 0xd0, 0x25, 0x2b, 0x04, 0xd1, 0x02, 0x29, 0x8c, 0xbf, 0x00, 0x20, 0x01, 0x20, 0x70, 0x47, 0x4b, 0x1e, 0x58, 0x42, 0x58, 0x41, 0x70, 0x47, 0x01, 0x20, 0x70, 0x47, 0x00, 0x20, 0x70, 0x47, 0x10, 0xb5, 0x07, 0x4b, 0x1c, 0x68, 0xe1, 0x68, 0x22, 0x69, 0x0a, 0x40, 0x12, 0x06, 0x06, 0xd5, 0x5b, 0x6a, 0x23, 0xb1, 0x98, 0x47, 0x23, 0x69, 0x23, 0xf0, 0x80, 0x03, 0x23, 0x61, 0x10, 0xbd, 0xc8, 0x00, 0x00, 0x20, 0x10, 0xb5, 0x07, 0x4b, 0x1c, 0x68, 0xe1, 0x68, 0x22, 0x69, 0x0a, 0x40, 0xd2, 0x07, 0x06, 0xd5, 0x9b, 0x68, 0x23, 0xb1, 0x98, 0x47, 0x23, 0x69, 0x23, 0xf0, 0x01, 0x03, 0x23, 0x61, 0x10, 0xbd, 0xc8, 0x00, 0x00, 0x20, 0xf8, 0xb5, 0x0c, 0x4f, 0x3d, 0x68, 0xeb, 0x68, 0x2e, 0x69, 0x1e, 0x40, 0x16, 0xf0, 0x40, 0x04, 0x03, 0xd0, 0x3c, 0x6a, 0x0c, 0xb1, 0xa0, 0x47, 0x40, 0x24, 0xb3, 0x06, 0x04, 0xd5, 0xfb, 0x69, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x20, 0x04, 0x2b, 0x69, 0x23, 0xea, 0x04, 0x04, 0x2c, 0x61, 0xf8, 0xbd, 0x00, 0xbf, 0xc8, 0x00, 0x00, 0x20, 0xf8, 0xb5, 0x13, 0x4f, 0x3e, 0x68, 0xf3, 0x68, 0x35, 0x69, 0x1d, 0x40, 0x15, 0xf0, 0x10, 0x04, 0x03, 0xd0, 0xbc, 0x69, 0x0c, 0xb1, 0xa0, 0x47, 0x10, 0x24, 0x29, 0x07, 0x04, 0xd5, 0x7b, 0x69, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x08, 0x04, 0x6a, 0x07, 0x04, 0xd5, 0x3b, 0x69, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x04, 0x04, 0xab, 0x07, 0x04, 0xd5, 0xfb, 0x68, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x02, 0x04, 0x33, 0x69, 0x23, 0xea, 0x04, 0x04, 0x34, 0x61, 0xf8, 0xbd, 0x00, 0xbf, 0xc8, 0x00, 0x00, 0x20, 0xf8, 0xb5, 0x1a, 0x4e, 0x37, 0x68, 0xfb, 0x68, 0x3d, 0x69, 0x1d, 0x40, 0x15, 0xf0, 0x40, 0x04, 0x03, 0xd0, 0x34, 0x6a, 0x0c, 0xb1, 0xa0, 0x47, 0x40, 0x24, 0xeb, 0x06, 0x04, 0xd5, 0xb3, 0x69, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x10, 0x04, 0x28, 0x07, 0x04, 0xd5, 0x73, 0x69, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x08, 0x04, 0x69, 0x07, 0x04, 0xd5, 0x33, 0x69, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x04, 0x04, 0xaa, 0x07, 0x04, 0xd5, 0xf3, 0x68, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x02, 0x04, 0xeb, 0x07, 0x04, 0xd5, 0xb3, 0x68, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x01, 0x04, 0x3b, 0x69, 0x23, 0xea, 0x04, 0x04, 0x3c, 0x61, 0xf8, 0xbd, 0x00, 0xbf, 0xf0, 0x00, 0x00, 0x20, 0xf8, 0xb5, 0x1a, 0x4e, 0x37, 0x68, 0xfb, 0x68, 0x3d, 0x69, 0x1d, 0x40, 0x15, 0xf0, 0x40, 0x04, 0x03, 0xd0, 0x34, 0x6a, 0x0c, 0xb1, 0xa0, 0x47, 0x40, 0x24, 0xeb, 0x06, 0x04, 0xd5, 0xb3, 0x69, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x10, 0x04, 0x28, 0x07, 0x04, 0xd5, 0x73, 0x69, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x08, 0x04, 0x69, 0x07, 0x04, 0xd5, 0x33, 0x69, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x04, 0x04, 0xaa, 0x07, 0x04, 0xd5, 0xf3, 0x68, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x02, 0x04, 0xeb, 0x07, 0x04, 0xd5, 0xb3, 0x68, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x01, 0x04, 0x3b, 0x69, 0x23, 0xea, 0x04, 0x04, 0x3c, 0x61, 0xf8, 0xbd, 0x00, 0xbf, 0x80, 0x00, 0x00, 0x20, 0xf8, 0xb5, 0x1a, 0x4e, 0x37, 0x68, 0xfb, 0x68, 0x3d, 0x69, 0x1d, 0x40, 0x15, 0xf0, 0x40, 0x04, 0x03, 0xd0, 0x34, 0x6a, 0x0c, 0xb1, 0xa0, 0x47, 0x40, 0x24, 0xeb, 0x06, 0x04, 0xd5, 0xb3, 0x69, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x10, 0x04, 0x28, 0x07, 0x04, 0xd5, 0x73, 0x69, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x08, 0x04, 0x69, 0x07, 0x04, 0xd5, 0x33, 0x69, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x04, 0x04, 0xaa, 0x07, 0x04, 0xd5, 0xf3, 0x68, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x02, 0x04, 0xeb, 0x07, 0x04, 0xd5, 0xb3, 0x68, 0x13, 0xb1, 0x98, 0x47, 0x44, 0xf0, 0x01, 0x04, 0x3b, 0x69, 0x23, 0xea, 0x04, 0x04, 0x3c, 0x61, 0xf8, 0xbd, 0x00, 0xbf, 0xa4, 0x00, 0x00, 0x20, 0x81, 0x88, 0x02, 0x68, 0x03, 0x46, 0x89, 0xb2, 0x50, 0x5c, 0x99, 0x88, 0x1a, 0x89, 0x89, 0xb2, 0x92, 0xb2, 0x91, 0x42, 0x17, 0xbf, 0x9a, 0x88, 0x00, 0x22, 0x01, 0x32, 0x92, 0xb2, 0xc0, 0xb2, 0x9a, 0x80, 0x70, 0x47, 0xc2, 0x88, 0x38, 0xb5, 0x83, 0x88, 0x92, 0xb2, 0x9b, 0xb2, 0x01, 0x32, 0x9a, 0x42, 0x04, 0x46, 0x0d, 0x46, 0x1a, 0xd0, 0xc2, 0x88, 0x03, 0x89, 0x92, 0xb2, 0x9b, 0xb2, 0x9a, 0x42, 0x02, 0xd1, 0x83, 0x88, 0x9b, 0xb2, 0x8b, 0xb1, 0x4f, 0xf0, 0xff, 0x30, 0xe2, 0x88, 0x23, 0x68, 0x92, 0xb2, 0x9d, 0x54, 0xe2, 0x88, 0x23, 0x89, 0x92, 0xb2, 0x9b, 0xb2, 0x9a, 0x42, 0x17, 0xbf, 0xe3, 0x88, 0x00, 0x23, 0x01, 0x33, 0x9b, 0xb2, 0xe3, 0x80, 0x38, 0xbd, 0x20, 0x46, 0xff, 0xf7, 0xc6, 0xff, 0xeb, 0xe7, 0x00, 0x00, 0x38, 0xb5, 0x11, 0x4d, 0xeb, 0x68, 0x98, 0x06, 0x07, 0xd5, 0x2b, 0x68, 0x99, 0x06, 0x04, 0xd5, 0x69, 0x68, 0x0e, 0x48, 0xc9, 0xb2, 0xff, 0xf7, 0xc9, 0xff, 0xeb, 0x68, 0x0a, 0x4c, 0x1a, 0x06, 0x11, 0xd5, 0x23, 0x68, 0x1b, 0x06, 0x0e, 0xd5, 0x09, 0x48, 0x82, 0x88, 0xc3, 0x88, 0x92, 0xb2, 0x9b, 0xb2, 0x9a, 0x42, 0x03, 0xd0, 0xff, 0xf7, 0xa7, 0xff, 0x60, 0x60, 0x38, 0xbd, 0xe3, 0x68, 0x23, 0xf0, 0x80, 0x03, 0xe3, 0x60, 0x38, 0xbd, 0x00, 0x38, 0x01, 0x40, 0x4c, 0x08, 0x00, 0x20, 0x40, 0x08, 0x00, 0x20, 0x38, 0xb5, 0x11, 0x4d, 0xeb, 0x68, 0x98, 0x06, 0x07, 0xd5, 0x2b, 0x68, 0x99, 0x06, 0x04, 0xd5, 0x69, 0x68, 0x0e, 0x48, 0xc9, 0xb2, 0xff, 0xf7, 0x9f, 0xff, 0xeb, 0x68, 0x0a, 0x4c, 0x1a, 0x06, 0x11, 0xd5, 0x23, 0x68, 0x1b, 0x06, 0x0e, 0xd5, 0x09, 0x48, 0x82, 0x88, 0xc3, 0x88, 0x92, 0xb2, 0x9b, 0xb2, 0x9a, 0x42, 0x03, 0xd0, 0xff, 0xf7, 0x7d, 0xff, 0x60, 0x60, 0x38, 0xbd, 0xe3, 0x68, 0x23, 0xf0, 0x80, 0x03, 0xe3, 0x60, 0x38, 0xbd, 0x00, 0x44, 0x00, 0x40, 0x58, 0x08, 0x00, 0x20, 0x70, 0x08, 0x00, 0x20, 0x38, 0xb5, 0x11, 0x4d, 0xeb, 0x68, 0x98, 0x06, 0x07, 0xd5, 0x2b, 0x68, 0x99, 0x06, 0x04, 0xd5, 0x69, 0x68, 0x0e, 0x48, 0xc9, 0xb2, 0xff, 0xf7, 0x75, 0xff, 0xeb, 0x68, 0x0a, 0x4c, 0x1a, 0x06, 0x11, 0xd5, 0x23, 0x68, 0x1b, 0x06, 0x0e, 0xd5, 0x09, 0x48, 0x82, 0x88, 0xc3, 0x88, 0x92, 0xb2, 0x9b, 0xb2, 0x9a, 0x42, 0x03, 0xd0, 0xff, 0xf7, 0x53, 0xff, 0x60, 0x60, 0x38, 0xbd, 0xe3, 0x68, 0x23, 0xf0, 0x80, 0x03, 0xe3, 0x60, 0x38, 0xbd, 0x00, 0x48, 0x00, 0x40, 0x64, 0x08, 0x00, 0x20, 0x7c, 0x08, 0x00, 0x20, 0x08, 0xb5, 0x11, 0x4b, 0x01, 0x21, 0x1c, 0x68, 0x03, 0x22, 0x20, 0x46, 0xff, 0xf7, 0xd0, 0xfc, 0x00, 0x23, 0x01, 0x21, 0x1a, 0x46, 0x93, 0x42, 0x20, 0x68, 0x34, 0xbf, 0x02, 0x25, 0x4f, 0xf4, 0x00, 0x35, 0xb2, 0xf5, 0x00, 0x7f, 0x05, 0x61, 0x03, 0xf1, 0x01, 0x03, 0x03, 0xd0, 0x00, 0x2a, 0x08, 0xbf, 0x01, 0x21, 0x01, 0xe0, 0x4f, 0xf0, 0xff, 0x31, 0xb3, 0xf5, 0x00, 0x7f, 0x04, 0xbf, 0x52, 0x18, 0x00, 0x23, 0xe7, 0xe7, 0x00, 0xbf, 0x48, 0x51, 0x00, 0x08, 0x08, 0xb5, 0x03, 0x4b, 0x0b, 0xb1, 0xaf, 0xf3, 0x00, 0x80, 0x62, 0xb6, 0xff, 0xf7, 0xd2, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x69, 0x5b, 0x68, 0xd9, 0x88, 0x9a, 0x88, 0x89, 0xb2, 0x92, 0xb2, 0xd8, 0x88, 0x8a, 0x1a, 0x99, 0x88, 0x80, 0xb2, 0x89, 0xb2, 0x88, 0x42, 0x03, 0xd2, 0x19, 0x89, 0x89, 0xb2, 0x01, 0x31, 0x0a, 0x44, 0x92, 0xb2, 0x82, 0xb1, 0x99, 0x88, 0x1a, 0x68, 0x89, 0xb2, 0x50, 0x5c, 0x99, 0x88, 0x1a, 0x89, 0x89, 0xb2, 0x92, 0xb2, 0x91, 0x42, 0x17, 0xbf, 0x9a, 0x88, 0x00, 0x22, 0x01, 0x32, 0x92, 0xb2, 0xc0, 0xb2, 0x9a, 0x80, 0x70, 0x47, 0x4f, 0xf0, 0xff, 0x30, 0x70, 0x47, 0x03, 0x69, 0x5b, 0x68, 0x99, 0x88, 0xda, 0x88, 0x89, 0xb2, 0x92, 0xb2, 0x91, 0x42, 0x05, 0xd0, 0x9a, 0x88, 0x1b, 0x68, 0x92, 0xb2, 0x98, 0x5c, 0xc0, 0xb2, 0x70, 0x47, 0x4f, 0xf0, 0xff, 0x30, 0x70, 0x47, 0x03, 0x69, 0x9a, 0x68, 0x90, 0x88, 0xd1, 0x88, 0x80, 0xb2, 0x89, 0xb2, 0x88, 0x42, 0xf9, 0xd1, 0x1a, 0x68, 0x13, 0x68, 0x5b, 0x06, 0xfc, 0xd5, 0x70, 0x47, 0x13, 0xb5, 0x04, 0x69, 0x8d, 0xf8, 0x07, 0x10, 0x20, 0x46, 0x0d, 0xf1, 0x07, 0x01, 0x01, 0x22, 0x00, 0xf0, 0xb5, 0xf9, 0x00, 0x28, 0xf7, 0xd0, 0x01, 0x20, 0x02, 0xb0, 0x10, 0xbd, 0x03, 0x69, 0x5b, 0x68, 0xd8, 0x88, 0x9a, 0x88, 0x80, 0xb2, 0x92, 0xb2, 0xd9, 0x88, 0x80, 0x1a, 0x9a, 0x88, 0x89, 0xb2, 0x92, 0xb2, 0x91, 0x42, 0x03, 0xd2, 0x1b, 0x89, 0x9b, 0xb2, 0x01, 0x33, 0x18, 0x44, 0x80, 0xb2, 0x70, 0x47, 0x00, 0x00, 0x30, 0xb5, 0x00, 0x25, 0x45, 0x60, 0x4f, 0xf4, 0x7a, 0x75, 0x85, 0x60, 0x02, 0x4d, 0x01, 0x61, 0x05, 0x60, 0x02, 0x75, 0x43, 0x75, 0x30, 0xbd, 0xc8, 0x51, 0x00, 0x08, 0x70, 0xb5, 0x05, 0x46, 0x0e, 0x46, 0x00, 0x24, 0x31, 0x5d, 0x29, 0xb1, 0x2a, 0x68, 0x28, 0x46, 0x12, 0x68, 0x90, 0x47, 0x01, 0x34, 0xf7, 0xe7, 0x20, 0x46, 0x70, 0xbd, 0xf8, 0xb5, 0x05, 0x46, 0x0c, 0x46, 0x16, 0x46, 0x8f, 0x18, 0xbc, 0x42, 0x06, 0xd0, 0x2b, 0x68, 0x28, 0x46, 0x1b, 0x68, 0x14, 0xf8, 0x01, 0x1b, 0x98, 0x47, 0xf6, 0xe7, 0x30, 0x46, 0xf8, 0xbd, 0x08, 0xb5, 0x03, 0x68, 0x1b, 0x68, 0x98, 0x47, 0x08, 0xbd, 0x08, 0xb5, 0x03, 0x68, 0x5b, 0x68, 0x98, 0x47, 0x08, 0xbd, 0x38, 0xb5, 0x0d, 0x21, 0x05, 0x46, 0xff, 0xf7, 0xf1, 0xff, 0x0a, 0x21, 0x04, 0x46, 0x28, 0x46, 0xff, 0xf7, 0xec, 0xff, 0x20, 0x44, 0x38, 0xbd, 0x38, 0xb5, 0x04, 0x46, 0xff, 0xf7, 0xeb, 0xff, 0x05, 0x46, 0x20, 0x46, 0xff, 0xf7, 0xec, 0xff, 0x28, 0x44, 0x38, 0xbd, 0xff, 0xf7, 0x64, 0xba, 0x08, 0xb5, 0xff, 0xf7, 0x79, 0xf9, 0xff, 0xf7, 0x7d, 0xf9, 0xfc, 0xe7, 0x00, 0xf0, 0x5a, 0xbd, 0x07, 0xb5, 0x01, 0x21, 0x0d, 0xf1, 0x07, 0x00, 0x00, 0xf0, 0x60, 0xfd, 0x01, 0x28, 0x0c, 0xbf, 0x9d, 0xf8, 0x07, 0x00, 0x4f, 0xf0, 0xff, 0x30, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x07, 0xb5, 0x01, 0x21, 0x0d, 0xf1, 0x07, 0x00, 0x00, 0xf0, 0x6d, 0xfd, 0x10, 0xb1, 0x9d, 0xf8, 0x07, 0x00, 0x01, 0xe0, 0x4f, 0xf0, 0xff, 0x30, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x10, 0xb5, 0x0b, 0x78, 0x22, 0x2b, 0x20, 0xd1, 0x10, 0x4c, 0x00, 0xf0, 0x97, 0xfd, 0x23, 0x78, 0x03, 0x2b, 0x0d, 0xd8, 0xdf, 0xe8, 0x03, 0xf0, 0x07, 0x02, 0x07, 0x07, 0x00, 0x28, 0x0c, 0xbf, 0x02, 0x23, 0x01, 0x23, 0x03, 0xe0, 0x00, 0x28, 0x0c, 0xbf, 0x03, 0x23, 0x01, 0x23, 0x23, 0x70, 0x00, 0xf0, 0x8c, 0xfd, 0xb0, 0xf5, 0x96, 0x6f, 0x07, 0xd1, 0x23, 0x78, 0x02, 0x2b, 0x04, 0xd1, 0x00, 0x20, 0x0a, 0x21, 0x00, 0xf0, 0xf4, 0xf8, 0xfe, 0xe7, 0x10, 0xbd, 0x9c, 0x08, 0x00, 0x20, 0x1d, 0x4b, 0x73, 0xb5, 0x1a, 0x78, 0x02, 0x2a, 0x34, 0xd1, 0x03, 0x22, 0x1a, 0x70, 0x00, 0xf0, 0x0b, 0xfd, 0x03, 0x28, 0x2e, 0xd9, 0x00, 0xf0, 0x07, 0xfd, 0x04, 0x22, 0x01, 0x1f, 0x01, 0xa8, 0x00, 0xf0, 0x44, 0xfd, 0x9d, 0xf8, 0x04, 0x30, 0x31, 0x2b, 0x23, 0xd1, 0x9d, 0xf8, 0x05, 0x30, 0x45, 0x2b, 0x1f, 0xd1, 0x9d, 0xf8, 0x06, 0x30, 0x41, 0x2b, 0x1b, 0xd1, 0x9d, 0xf8, 0x07, 0x30, 0x46, 0x2b, 0x17, 0xd1, 0x0d, 0x4c, 0x4f, 0xf0, 0xc2, 0x46, 0x6f, 0xf0, 0x06, 0x05, 0x44, 0xf0, 0x01, 0x04, 0x0b, 0x4b, 0x18, 0x46, 0x85, 0x46, 0x4f, 0xf0, 0x01, 0x00, 0x21, 0x46, 0x32, 0x46, 0x04, 0xb4, 0x02, 0xb4, 0x01, 0xb4, 0x01, 0xb4, 0x01, 0xb4, 0x01, 0xb4, 0x01, 0xb4, 0x01, 0xb4, 0xae, 0x46, 0x70, 0x47, 0x02, 0xb0, 0x70, 0xbd, 0x9c, 0x08, 0x00, 0x20, 0x69, 0x2f, 0x00, 0x08, 0x00, 0x08, 0x00, 0x20, 0x02, 0x4b, 0x18, 0x46, 0x01, 0x38, 0xfd, 0xd8, 0xff, 0xf7, 0xba, 0xbb, 0x7f, 0x4f, 0x12, 0x00, 0x00, 0x22, 0x42, 0x60, 0x4f, 0xf4, 0x7a, 0x72, 0x82, 0x60, 0x01, 0x4a, 0x02, 0x60, 0x70, 0x47, 0xf0, 0x51, 0x00, 0x08, 0x09, 0x4b, 0x10, 0xb5, 0x18, 0x78, 0x70, 0xb9, 0x01, 0x24, 0x01, 0x46, 0x1c, 0x70, 0x00, 0xf0, 0x6b, 0xfc, 0x20, 0x46, 0x05, 0x49, 0x00, 0xf0, 0x59, 0xfc, 0xbd, 0xe8, 0x10, 0x40, 0x02, 0x20, 0x03, 0x49, 0x00, 0xf0, 0x53, 0xbc, 0x10, 0xbd, 0x88, 0x08, 0x00, 0x20, 0xe5, 0x2e, 0x00, 0x08, 0x95, 0x2e, 0x00, 0x08, 0x70, 0xb5, 0x0e, 0x46, 0x15, 0x46, 0x00, 0x24, 0xac, 0x42, 0x05, 0xd2, 0x30, 0x19, 0x29, 0x1b, 0x00, 0xf0, 0xc4, 0xfc, 0x04, 0x44, 0xf7, 0xe7, 0x20, 0x46, 0x70, 0xbd, 0x13, 0xb5, 0x04, 0x46, 0x00, 0xf0, 0x94, 0xfc, 0x30, 0xb1, 0x20, 0x46, 0x0d, 0xf1, 0x07, 0x01, 0x01, 0x22, 0xff, 0xf7, 0xe7, 0xff, 0xf5, 0xe7, 0x02, 0xb0, 0x10, 0xbd, 0x08, 0xb5, 0x06, 0x4b, 0x1b, 0x68, 0x1b, 0x7b, 0x05, 0x2b, 0x05, 0xd1, 0x00, 0xf0, 0xe4, 0xfc, 0x00, 0x30, 0x18, 0xbf, 0x01, 0x20, 0x08, 0xbd, 0x00, 0x20, 0x08, 0xbd, 0xdc, 0x02, 0x00, 0x20, 0x70, 0xb5, 0x0e, 0x46, 0x15, 0x46, 0xff, 0xf7, 0xeb, 0xff, 0x48, 0xb1, 0x46, 0xb1, 0x00, 0x24, 0xac, 0x42, 0x05, 0xd2, 0x30, 0x19, 0x29, 0x1b, 0x00, 0xf0, 0x3c, 0xfc, 0x04, 0x44, 0xf7, 0xe7, 0x00, 0x20, 0x70, 0xbd, 0x07, 0xb5, 0x02, 0xab, 0x03, 0xf8, 0x01, 0x1d, 0x19, 0x46, 0x01, 0x22, 0xff, 0xf7, 0xe6, 0xff, 0x00, 0x20, 0x03, 0xb0, 0x5d, 0xf8, 0x04, 0xfb, 0x38, 0xb5, 0x05, 0x46, 0x08, 0x46, 0x0c, 0x46, 0x01, 0xf0, 0xc8, 0xf9, 0x21, 0x46, 0x02, 0x46, 0x28, 0x46, 0xff, 0xf7, 0xd7, 0xff, 0x00, 0x20, 0x38, 0xbd, 0x00, 0x00, 0x01, 0x48, 0xff, 0xf7, 0x81, 0xbf, 0x00, 0xbf, 0x8c, 0x08, 0x00, 0x20, 0x05, 0x4b, 0x70, 0xb5, 0x1c, 0x68, 0x06, 0x46, 0x1d, 0x46, 0x00, 0xf0, 0x11, 0xf8, 0x2b, 0x68, 0x1b, 0x1b, 0xb3, 0x42, 0xf9, 0xd3, 0x70, 0xbd, 0xc0, 0x0a, 0x00, 0x20, 0x03, 0x4b, 0x1a, 0x68, 0x22, 0xf0, 0xe0, 0x62, 0x42, 0xf0, 0x80, 0x62, 0x1a, 0x60, 0x70, 0x47, 0x04, 0x00, 0x01, 0x40, 0x70, 0x47, 0x10, 0xb5, 0x04, 0x46, 0x00, 0x79, 0xff, 0xf7, 0x70, 0xfb, 0x20, 0x79, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0x83, 0xbb, 0x00, 0x00, 0x06, 0x4b, 0x45, 0xf2, 0x55, 0x52, 0x1a, 0x60, 0x4c, 0xf6, 0xcc, 0x42, 0x58, 0x60, 0x99, 0x60, 0x1a, 0x60, 0x4a, 0xf6, 0xaa, 0x22, 0x1a, 0x60, 0x70, 0x47, 0x00, 0xbf, 0x00, 0x30, 0x00, 0x40, 0xf0, 0xb5, 0x83, 0x68, 0x05, 0x46, 0x04, 0x68, 0x00, 0x20, 0x9f, 0x88, 0xde, 0x88, 0xbf, 0xb2, 0xb6, 0xb2, 0xb7, 0x42, 0x04, 0xd0, 0xe3, 0x68, 0x23, 0xf0, 0x80, 0x03, 0xe3, 0x60, 0x27, 0xe0, 0x26, 0x68, 0x36, 0x06, 0xf7, 0xd5, 0x90, 0x42, 0xf5, 0xd0, 0x0e, 0x5c, 0x01, 0x30, 0x66, 0x60, 0xeb, 0xe7, 0xdf, 0x88, 0x9e, 0x88, 0xbf, 0xb2, 0xb6, 0xb2, 0x01, 0x37, 0xb7, 0x42, 0x11, 0xf8, 0x00, 0xc0, 0x1d, 0xd0, 0xdf, 0x88, 0x1e, 0x89, 0xbf, 0xb2, 0xb6, 0xb2, 0xb7, 0x42, 0x13, 0xd0, 0xdf, 0x88, 0x1e, 0x68, 0xbf, 0xb2, 0x06, 0xf8, 0x07, 0xc0, 0xdf, 0x88, 0x1e, 0x89, 0xbf, 0xb2, 0xb6, 0xb2, 0xb7, 0x42, 0x18, 0xd0, 0xde, 0x88, 0x01, 0x36, 0xb6, 0xb2, 0xde, 0x80, 0x01, 0x30, 0x90, 0x42, 0xab, 0x68, 0xdd, 0xd3, 0x03, 0xe0, 0x9e, 0x88, 0xb6, 0xb2, 0x00, 0x2e, 0xe7, 0xd1, 0x9a, 0x88, 0xdb, 0x88, 0x92, 0xb2, 0x9b, 0xb2, 0x9a, 0x42, 0x00, 0xd1, 0xf0, 0xbd, 0xe3, 0x68, 0x43, 0xf0, 0x80, 0x03, 0xe3, 0x60, 0xf0, 0xbd, 0x00, 0x26, 0xe7, 0xe7, 0x29, 0x4b, 0x07, 0x28, 0x18, 0xbf, 0x18, 0x70, 0x1a, 0x78, 0x05, 0x2a, 0x49, 0xd8, 0xdf, 0xe8, 0x02, 0xf0, 0x03, 0x13, 0x1e, 0x22, 0x2a, 0x35, 0x24, 0x4a, 0x4f, 0xf6, 0xfb, 0x71, 0x10, 0x6c, 0x01, 0x40, 0x11, 0x64, 0x4f, 0xf4, 0x3f, 0x41, 0x11, 0x64, 0x06, 0x22, 0x1a, 0x70, 0x20, 0x4b, 0x1b, 0x68, 0x5a, 0x7b, 0x1a, 0x73, 0x70, 0x47, 0x1c, 0x4a, 0x4f, 0xf6, 0xfb, 0x71, 0x10, 0x6c, 0x01, 0x40, 0x11, 0x64, 0x4f, 0xf4, 0x3f, 0x41, 0x11, 0x64, 0x04, 0x22, 0x2a, 0xe0, 0x02, 0x22, 0x5a, 0x70, 0x03, 0x22, 0x26, 0xe0, 0x5a, 0x78, 0x01, 0x3a, 0xd2, 0xb2, 0x5a, 0x70, 0x5b, 0x78, 0x0b, 0xbb, 0x04, 0x22, 0x1b, 0xe0, 0x11, 0x4a, 0x11, 0x6c, 0x89, 0xb2, 0x41, 0xf0, 0x10, 0x01, 0x11, 0x64, 0x05, 0x22, 0x1a, 0x70, 0x0a, 0x22, 0x5a, 0x70, 0x70, 0x47, 0x5a, 0x78, 0x01, 0x3a, 0xd2, 0xb2, 0x5a, 0x70, 0x5b, 0x78, 0x73, 0xb9, 0x08, 0x4a, 0x4f, 0xf6, 0xef, 0x73, 0x11, 0x6c, 0x0b, 0x40, 0x13, 0x64, 0x06, 0x4b, 0x1b, 0x68, 0x5a, 0x7b, 0x1a, 0x73, 0x06, 0x22, 0x02, 0x4b, 0x00, 0xe0, 0x06, 0x22, 0x1a, 0x70, 0x70, 0x47, 0xc8, 0x0a, 0x00, 0x20, 0x00, 0x5c, 0x00, 0x40, 0xdc, 0x02, 0x00, 0x20, 0x70, 0xb5, 0x04, 0x46, 0x80, 0x7b, 0x0d, 0x46, 0x16, 0x46, 0xff, 0xf7, 0xab, 0xfa, 0x08, 0x4a, 0x08, 0x4b, 0x09, 0x49, 0x1a, 0x60, 0x09, 0x4b, 0x09, 0x48, 0x0b, 0x60, 0x09, 0x49, 0x65, 0x60, 0x08, 0x60, 0x02, 0x21, 0xa6, 0x60, 0x1b, 0x68, 0x11, 0x72, 0x98, 0x47, 0x70, 0xbd, 0x00, 0xbf, 0xd8, 0x0a, 0x00, 0x20, 0xf8, 0x0a, 0x00, 0x20, 0xd0, 0x0a, 0x00, 0x20, 0xf8, 0x02, 0x00, 0x20, 0x80, 0x03, 0x00, 0x20, 0xf4, 0x0a, 0x00, 0x20, 0xf8, 0xb5, 0x6c, 0x4d, 0x6c, 0x4b, 0x2a, 0x68, 0x5c, 0x6c, 0x12, 0x68, 0xa4, 0xb2, 0x02, 0xf4, 0x80, 0x62, 0x22, 0x42, 0x06, 0xd0, 0x6f, 0xf4, 0x80, 0x62, 0x5a, 0x64, 0x67, 0x4b, 0x1b, 0x68, 0x5b, 0x68, 0x98, 0x47, 0x2b, 0x68, 0x1b, 0x68, 0x23, 0x40, 0x9f, 0x04, 0x03, 0xd5, 0x62, 0x4a, 0x6f, 0xf4, 0x00, 0x51, 0x51, 0x64, 0xde, 0x04, 0x06, 0xd5, 0x5f, 0x4b, 0x6f, 0xf4, 0xc0, 0x52, 0x5a, 0x64, 0x00, 0x20, 0xff, 0xf7, 0x5e, 0xff, 0x2a, 0x68, 0x11, 0x68, 0x21, 0x40, 0x08, 0x05, 0x0f, 0xd5, 0x59, 0x4b, 0x18, 0x6c, 0x80, 0xb2, 0x40, 0xf0, 0x08, 0x06, 0x40, 0xf0, 0x0c, 0x00, 0x1e, 0x64, 0x18, 0x64, 0x10, 0x7b, 0x50, 0x73, 0x03, 0x20, 0x10, 0x73, 0x6f, 0xf4, 0xc0, 0x52, 0x5a, 0x64, 0x8b, 0x05, 0x03, 0xd5, 0x50, 0x4b, 0x6f, 0xf4, 0x00, 0x72, 0x5a, 0x64, 0xcf, 0x05, 0x06, 0xd5, 0x4d, 0x4b, 0x6f, 0xf4, 0x80, 0x72, 0x5a, 0x64, 0x07, 0x20, 0xff, 0xf7, 0x3a, 0xff, 0x2b, 0x68, 0x1b, 0x68, 0x03, 0xf4, 0x00, 0x43, 0x23, 0x42, 0x00, 0xf0, 0x89, 0x80, 0x46, 0x4b, 0x5a, 0x6c, 0x11, 0x04, 0x40, 0xf1, 0x84, 0x80, 0x6f, 0xf4, 0x00, 0x41, 0x12, 0xf0, 0x0f, 0x06, 0x59, 0x64, 0x58, 0xd1, 0x19, 0x68, 0x48, 0xf6, 0x80, 0x00, 0x08, 0x40, 0x00, 0x28, 0xee, 0xd0, 0x88, 0xb2, 0x3f, 0x4c, 0x00, 0xf4, 0x40, 0x55, 0x25, 0x80, 0x3e, 0x4d, 0x00, 0xf0, 0x30, 0x00, 0x28, 0x80, 0x18, 0x68, 0xd6, 0x06, 0x20, 0xf4, 0x80, 0x40, 0x20, 0xf0, 0x70, 0x00, 0x40, 0xf4, 0x00, 0x40, 0x40, 0xf0, 0x80, 0x00, 0x80, 0xf4, 0x00, 0x50, 0x18, 0x60, 0x18, 0x68, 0x20, 0xf4, 0xe0, 0x40, 0x20, 0xf0, 0x40, 0x00, 0x40, 0xf4, 0x00, 0x40, 0x40, 0xf0, 0x80, 0x00, 0x80, 0xf0, 0x20, 0x00, 0x18, 0x60, 0x01, 0xd5, 0x08, 0x06, 0x07, 0xd5, 0x19, 0x68, 0x48, 0xf6, 0x0f, 0x72, 0x0a, 0x40, 0x1a, 0x60, 0x00, 0xf0, 0x1e, 0xff, 0x0b, 0xe0, 0x18, 0x68, 0x40, 0xf6, 0x8f, 0x72, 0x02, 0x40, 0x1a, 0x60, 0x0a, 0x05, 0x02, 0xd5, 0x00, 0xf0, 0x2c, 0xfd, 0x01, 0xe0, 0x00, 0xf0, 0x91, 0xfe, 0x21, 0x4b, 0x22, 0x88, 0x19, 0x68, 0x28, 0x88, 0x21, 0xf4, 0x80, 0x41, 0x21, 0xf0, 0x70, 0x01, 0x41, 0xf4, 0x00, 0x41, 0x41, 0xf0, 0x80, 0x01, 0x51, 0x40, 0x19, 0x60, 0x1a, 0x68, 0x22, 0xf4, 0xe0, 0x42, 0x22, 0xf0, 0x40, 0x02, 0x42, 0xf4, 0x00, 0x42, 0x42, 0xf0, 0x80, 0x02, 0x42, 0x40, 0x1a, 0x60, 0xf8, 0xbd, 0xb4, 0x00, 0x04, 0xf1, 0x80, 0x44, 0x04, 0xf5, 0xb8, 0x44, 0x27, 0x68, 0x3b, 0x04, 0x0c, 0xd5, 0x22, 0x68, 0x40, 0xf6, 0x8f, 0x73, 0x13, 0x40, 0x2a, 0x68, 0x23, 0x60, 0x92, 0x68, 0x06, 0xf1, 0x80, 0x43, 0x01, 0x3b, 0x52, 0xf8, 0x23, 0x30, 0x98, 0x47, 0x38, 0x06, 0x84, 0xd5, 0x22, 0x68, 0x48, 0xf6, 0x0f, 0x73, 0x13, 0x40, 0x23, 0x60, 0x2b, 0x68, 0x06, 0xf1, 0x80, 0x46, 0x5b, 0x68, 0x01, 0x3e, 0x53, 0xf8, 0x26, 0x30, 0x98, 0x47, 0x76, 0xe7, 0xf8, 0xbd, 0x00, 0xbf, 0xdc, 0x02, 0x00, 0x20, 0x00, 0x5c, 0x00, 0x40, 0xd0, 0x0a, 0x00, 0x20, 0xc4, 0x0a, 0x00, 0x20, 0xc6, 0x0a, 0x00, 0x20, 0x80, 0x00, 0x00, 0xf1, 0x80, 0x40, 0x00, 0xf5, 0xb8, 0x40, 0x03, 0x68, 0x23, 0xf4, 0x80, 0x43, 0x23, 0xf0, 0x70, 0x03, 0x43, 0xf4, 0x00, 0x43, 0x43, 0xf0, 0x80, 0x03, 0x59, 0x40, 0x01, 0x60, 0x70, 0x47, 0x00, 0x00, 0x18, 0xb9, 0x03, 0x4b, 0x07, 0x22, 0x1b, 0x68, 0x1a, 0x82, 0x02, 0x48, 0x70, 0x47, 0x00, 0xbf, 0xf8, 0x0a, 0x00, 0x20, 0x78, 0x03, 0x00, 0x20, 0x37, 0xb5, 0x11, 0x4b, 0x1a, 0x68, 0x1d, 0x46, 0x12, 0x78, 0x02, 0xf0, 0x7f, 0x02, 0x21, 0x2a, 0x01, 0xd0, 0x02, 0x20, 0x16, 0xe0, 0xa0, 0xf1, 0x20, 0x03, 0x01, 0x2b, 0x0b, 0x4b, 0x0c, 0x4c, 0x1b, 0x68, 0x88, 0xbf, 0x00, 0x24, 0x23, 0xb1, 0x02, 0xa9, 0x01, 0xf8, 0x01, 0x0d, 0x02, 0x20, 0x98, 0x47, 0x00, 0x2c, 0xed, 0xd0, 0x2b, 0x68, 0x00, 0x25, 0x28, 0x46, 0x9c, 0x61, 0x5d, 0x82, 0xa0, 0x47, 0x28, 0x46, 0x03, 0xb0, 0x30, 0xbd, 0xf8, 0x0a, 0x00, 0x20, 0xb0, 0x0a, 0x00, 0x20, 0x69, 0x34, 0x00, 0x08, 0x13, 0xb5, 0x10, 0x4b, 0x1b, 0x68, 0x1a, 0x78, 0x02, 0xf0, 0x7f, 0x02, 0x21, 0x2a, 0x14, 0xd1, 0x02, 0x28, 0x06, 0xd0, 0x22, 0x28, 0x06, 0xd1, 0x9a, 0x78, 0x0b, 0x4b, 0x02, 0xf0, 0x03, 0x02, 0x1a, 0x70, 0x00, 0x24, 0x00, 0xe0, 0x02, 0x24, 0x08, 0x4b, 0x1b, 0x68, 0x33, 0xb1, 0x02, 0xa9, 0x01, 0xf8, 0x01, 0x0d, 0x02, 0x20, 0x98, 0x47, 0x00, 0xe0, 0x02, 0x24, 0x20, 0x46, 0x02, 0xb0, 0x10, 0xbd, 0x00, 0xbf, 0xf8, 0x0a, 0x00, 0x20, 0x9d, 0x08, 0x00, 0x20, 0xb0, 0x0a, 0x00, 0x20, 0x21, 0xb9, 0x02, 0x28, 0x34, 0xbf, 0x00, 0x20, 0x02, 0x20, 0x70, 0x47, 0x02, 0x20, 0x70, 0x47, 0x04, 0x4b, 0x1b, 0x68, 0x9b, 0x7a, 0x1b, 0xb1, 0x03, 0x4b, 0x05, 0x22, 0x1b, 0x68, 0x1a, 0x73, 0x70, 0x47, 0x00, 0xbf, 0xf8, 0x0a, 0x00, 0x20, 0xdc, 0x02, 0x00, 0x20, 0x02, 0x4b, 0x04, 0x22, 0x1b, 0x68, 0x1a, 0x73, 0x70, 0x47, 0x00, 0xbf, 0xdc, 0x02, 0x00, 0x20, 0x05, 0x4b, 0x1b, 0x68, 0x9b, 0x78, 0x03, 0x2b, 0x04, 0xd8, 0x04, 0x49, 0x01, 0xeb, 0xc3, 0x01, 0x00, 0xf0, 0x18, 0xbc, 0x00, 0x20, 0x70, 0x47, 0xf8, 0x0a, 0x00, 0x20, 0x44, 0x03, 0x00, 0x20, 0x01, 0x49, 0x00, 0xf0, 0x0f, 0xbc, 0x00, 0xbf, 0xf0, 0x02, 0x00, 0x20, 0x01, 0x49, 0x00, 0xf0, 0x09, 0xbc, 0x00, 0xbf, 0xa4, 0x03, 0x00, 0x20, 0x0c, 0x4b, 0x00, 0x22, 0x1b, 0x68, 0x01, 0x21, 0x9a, 0x72, 0x0b, 0x4b, 0x4f, 0xf4, 0xe0, 0x50, 0x19, 0x64, 0x0a, 0x49, 0x09, 0x68, 0x1a, 0x64, 0x5a, 0x64, 0x18, 0x64, 0x4f, 0xf4, 0x3f, 0x40, 0x5a, 0x64, 0x08, 0x60, 0x18, 0x64, 0x06, 0x4b, 0x4f, 0xf4, 0x80, 0x10, 0x18, 0x60, 0x0a, 0x73, 0x70, 0x47, 0x00, 0xbf, 0xf8, 0x0a, 0x00, 0x20, 0x00, 0x5c, 0x00, 0x40, 0xdc, 0x02, 0x00, 0x20, 0x00, 0xe1, 0x00, 0xe0, 0x20, 0x49, 0x21, 0x4b, 0x0a, 0x68, 0x1b, 0x68, 0x70, 0xb5, 0x9b, 0x1a, 0x13, 0xf0, 0xff, 0x03, 0x0e, 0x46, 0x1e, 0x49, 0x05, 0xd1, 0x0a, 0x78, 0x01, 0x3a, 0xd2, 0xb2, 0x0a, 0x70, 0xfa, 0xb1, 0x70, 0xbd, 0x01, 0x20, 0x08, 0x70, 0x00, 0x21, 0x19, 0x48, 0x40, 0x2b, 0x28, 0xbf, 0x40, 0x23, 0x0c, 0x46, 0x18, 0x4d, 0x11, 0xf0, 0x01, 0x0f, 0xad, 0x5c, 0x01, 0xf1, 0x01, 0x01, 0xed, 0xb2, 0x1c, 0xbf, 0x44, 0xea, 0x05, 0x25, 0x05, 0x60, 0x02, 0xf1, 0x01, 0x02, 0x0c, 0xbf, 0x2c, 0x46, 0x04, 0x30, 0x99, 0x42, 0xd2, 0xb2, 0xec, 0xd1, 0xd9, 0x07, 0x48, 0xbf, 0x04, 0x60, 0x32, 0x60, 0x0d, 0x4a, 0x0e, 0x49, 0x10, 0x6d, 0x40, 0x00, 0x0b, 0x50, 0x53, 0x68, 0x23, 0xf4, 0xe0, 0x43, 0x23, 0xf0, 0x40, 0x03, 0x43, 0xf4, 0x00, 0x43, 0x43, 0xf0, 0x80, 0x03, 0x83, 0xf0, 0x30, 0x03, 0x53, 0x60, 0x70, 0xbd, 0xb8, 0x0a, 0x00, 0x20, 0xa0, 0x09, 0x00, 0x20, 0xa8, 0x0a, 0x00, 0x20, 0x80, 0x61, 0x00, 0x40, 0x9e, 0x08, 0x00, 0x20, 0x00, 0x5c, 0x00, 0x40, 0x14, 0x60, 0x00, 0x40, 0x2d, 0xe9, 0xf8, 0x43, 0x49, 0x4b, 0x4a, 0x4c, 0x1b, 0x68, 0x00, 0x25, 0x4f, 0xf0, 0xc0, 0x08, 0x9d, 0x72, 0x83, 0xf8, 0x09, 0x80, 0x25, 0x65, 0x23, 0x68, 0x48, 0xf6, 0x8f, 0x16, 0x33, 0x40, 0x43, 0xf4, 0x00, 0x73, 0x23, 0x60, 0x23, 0x68, 0x48, 0xf2, 0x80, 0x07, 0x23, 0xf4, 0xe0, 0x43, 0x23, 0xf0, 0x40, 0x03, 0x3b, 0x43, 0x83, 0xf0, 0x10, 0x03, 0x23, 0x60, 0x22, 0x6d, 0x3d, 0x4b, 0x52, 0x00, 0x4f, 0xf0, 0x40, 0x09, 0x43, 0xf8, 0x02, 0x90, 0x23, 0x6d, 0x80, 0x22, 0x5b, 0x00, 0x03, 0xf1, 0x80, 0x43, 0x03, 0xf5, 0xc0, 0x43, 0x1a, 0x60, 0x23, 0x68, 0x28, 0x46, 0x23, 0xf4, 0xe2, 0x43, 0x23, 0xf0, 0x70, 0x03, 0x1b, 0x04, 0x1b, 0x0c, 0x23, 0x60, 0x32, 0x4b, 0x1b, 0x68, 0x93, 0xf8, 0x2c, 0x10, 0x00, 0xf0, 0x7c, 0xf9, 0x28, 0x46, 0x4f, 0xf4, 0x40, 0x51, 0xff, 0xf7, 0xa3, 0xfe, 0xa3, 0x68, 0x02, 0x20, 0x33, 0x40, 0x43, 0xf4, 0xc0, 0x63, 0xa3, 0x60, 0x22, 0x6d, 0x2a, 0x4b, 0x52, 0x00, 0x13, 0x44, 0x4f, 0xf4, 0x80, 0x72, 0x1a, 0x60, 0xa3, 0x68, 0x29, 0x46, 0x23, 0xf4, 0xe0, 0x43, 0x23, 0xf0, 0x40, 0x03, 0x3b, 0x43, 0x83, 0xf0, 0x20, 0x03, 0xa3, 0x60, 0xff, 0xf7, 0x8a, 0xfe, 0xe3, 0x68, 0x03, 0x20, 0x33, 0x40, 0xe3, 0x60, 0x22, 0x6d, 0x20, 0x4b, 0x52, 0x00, 0x13, 0x44, 0x4f, 0xf4, 0x88, 0x72, 0x1a, 0x60, 0x49, 0x46, 0x00, 0xf0, 0x50, 0xf9, 0x03, 0x20, 0x4f, 0xf4, 0x40, 0x51, 0xff, 0xf7, 0x77, 0xfe, 0x63, 0x68, 0x01, 0x20, 0x1e, 0x40, 0x66, 0x60, 0x22, 0x6d, 0x17, 0x4b, 0x52, 0x00, 0x43, 0xf8, 0x02, 0x80, 0x63, 0x68, 0x29, 0x46, 0x23, 0xf4, 0xe0, 0x43, 0x23, 0xf0, 0x40, 0x03, 0x3b, 0x43, 0x83, 0xf0, 0x20, 0x03, 0x63, 0x60, 0xff, 0xf7, 0x62, 0xfe, 0x10, 0x4b, 0x01, 0x22, 0x1b, 0x68, 0x28, 0x46, 0x1a, 0x73, 0x00, 0xf0, 0x05, 0xfd, 0x0e, 0x4b, 0xff, 0x22, 0x1d, 0x60, 0x0d, 0x4b, 0x1d, 0x60, 0x0d, 0x4b, 0x1d, 0x60, 0x0d, 0x4b, 0x1d, 0x60, 0x0d, 0x4b, 0x1a, 0x70, 0xbd, 0xe8, 0xf8, 0x83, 0xf8, 0x0a, 0x00, 0x20, 0x00, 0x5c, 0x00, 0x40, 0x08, 0x60, 0x00, 0x40, 0xd0, 0x0a, 0x00, 0x20, 0x20, 0x60, 0x00, 0x40, 0x38, 0x60, 0x00, 0x40, 0x10, 0x60, 0x00, 0x40, 0xdc, 0x02, 0x00, 0x20, 0xb4, 0x0a, 0x00, 0x20, 0xac, 0x0a, 0x00, 0x20, 0xa0, 0x09, 0x00, 0x20, 0xb8, 0x0a, 0x00, 0x20, 0xa8, 0x0a, 0x00, 0x20, 0xf8, 0xb5, 0x18, 0x4a, 0x18, 0x4c, 0x23, 0x68, 0x11, 0x6d, 0x02, 0xf2, 0x3c, 0x42, 0x49, 0x00, 0x56, 0x58, 0x00, 0x22, 0x15, 0x49, 0xc6, 0xf3, 0x09, 0x06, 0x10, 0x46, 0x25, 0x46, 0xb2, 0x42, 0x0d, 0xd2, 0xd4, 0x07, 0x01, 0xd5, 0x04, 0x0a, 0x03, 0xe0, 0x0c, 0x68, 0x04, 0x31, 0xa0, 0xb2, 0xe4, 0xb2, 0x0f, 0x4f, 0x01, 0x32, 0xfc, 0x54, 0x01, 0x33, 0xdb, 0xb2, 0xef, 0xe7, 0x0d, 0x4a, 0x2b, 0x60, 0x12, 0x68, 0x9b, 0x1a, 0xdb, 0xb2, 0xbf, 0x2b, 0x04, 0xd8, 0x03, 0x20, 0x4f, 0xf4, 0x40, 0x51, 0xff, 0xf7, 0x09, 0xfe, 0x08, 0x4b, 0x1b, 0x68, 0x13, 0xb1, 0x01, 0x20, 0x00, 0x21, 0x98, 0x47, 0xf8, 0xbd, 0x00, 0x5c, 0x00, 0x40, 0xb4, 0x0a, 0x00, 0x20, 0x20, 0x62, 0x00, 0x40, 0xa8, 0x09, 0x00, 0x20, 0xac, 0x0a, 0x00, 0x20, 0xa4, 0x09, 0x00, 0x20, 0xc2, 0x07, 0x44, 0xbf, 0x03, 0x4b, 0x19, 0x60, 0x83, 0x07, 0x44, 0xbf, 0x02, 0x4b, 0x19, 0x60, 0x70, 0x47, 0x00, 0xbf, 0xa4, 0x09, 0x00, 0x20, 0xb0, 0x0a, 0x00, 0x20, 0x38, 0xb5, 0x0d, 0x46, 0x04, 0x46, 0x40, 0xb1, 0x03, 0x22, 0xfe, 0xf7, 0xd5, 0xfe, 0x4f, 0xf4, 0x80, 0x32, 0x02, 0xfa, 0x05, 0xf5, 0x23, 0x68, 0x1d, 0x61, 0x04, 0x4b, 0x04, 0x49, 0x18, 0x68, 0x04, 0x4a, 0xbd, 0xe8, 0x38, 0x40, 0xff, 0xf7, 0xcb, 0xbc, 0x00, 0xbf, 0xdc, 0x02, 0x00, 0x20, 0x28, 0x03, 0x00, 0x20, 0x5c, 0x03, 0x00, 0x20, 0x70, 0xb5, 0x0c, 0x46, 0x11, 0xb3, 0x12, 0x49, 0x12, 0x4a, 0x0b, 0x68, 0x12, 0x68, 0x0d, 0x46, 0x9a, 0x1a, 0xd2, 0xb2, 0xc2, 0xf1, 0xff, 0x02, 0x94, 0x42, 0x01, 0xd9, 0xa2, 0xb1, 0x14, 0x46, 0x00, 0x22, 0x91, 0xb2, 0xa1, 0x42, 0x02, 0xf1, 0x01, 0x02, 0x05, 0xd2, 0x46, 0x5c, 0x0a, 0x49, 0xce, 0x54, 0x01, 0x33, 0xdb, 0xb2, 0xf4, 0xe7, 0x2b, 0x60, 0x08, 0x4b, 0x1b, 0x78, 0x1b, 0x06, 0x04, 0xd5, 0xff, 0xf7, 0x75, 0xfe, 0x01, 0xe0, 0x10, 0x46, 0x70, 0xbd, 0x20, 0x46, 0x70, 0xbd, 0xa0, 0x09, 0x00, 0x20, 0xb8, 0x0a, 0x00, 0x20, 0x9e, 0x08, 0x00, 0x20, 0xa8, 0x0a, 0x00, 0x20, 0x03, 0x4b, 0x18, 0x68, 0x03, 0x4b, 0x1b, 0x68, 0xc0, 0x1a, 0xc0, 0xb2, 0x70, 0x47, 0x00, 0xbf, 0xb4, 0x0a, 0x00, 0x20, 0xac, 0x0a, 0x00, 0x20, 0x0a, 0x4b, 0x10, 0xb5, 0x1a, 0x68, 0x0a, 0x4b, 0x1b, 0x68, 0x9b, 0x1a, 0xdb, 0xb2, 0x99, 0x42, 0x28, 0xbf, 0x19, 0x46, 0x00, 0x23, 0x8b, 0x42, 0x06, 0xd0, 0x06, 0x4c, 0xa4, 0x5c, 0x01, 0x32, 0xc4, 0x54, 0xd2, 0xb2, 0x01, 0x33, 0xf6, 0xe7, 0x18, 0x46, 0x10, 0xbd, 0xac, 0x0a, 0x00, 0x20, 0xb4, 0x0a, 0x00, 0x20, 0xa8, 0x09, 0x00, 0x20, 0x10, 0xb5, 0xff, 0xf7, 0xe1, 0xff, 0x09, 0x4a, 0x04, 0x46, 0x13, 0x68, 0x03, 0x44, 0xdb, 0xb2, 0x13, 0x60, 0x07, 0x4a, 0x12, 0x68, 0xd3, 0x1a, 0xdb, 0xb2, 0x40, 0x2b, 0x04, 0xd8, 0x03, 0x20, 0x4f, 0xf4, 0x40, 0x51, 0xff, 0xf7, 0x60, 0xfd, 0x20, 0x46, 0x10, 0xbd, 0xac, 0x0a, 0x00, 0x20, 0xb4, 0x0a, 0x00, 0x20, 0x0c, 0x4b, 0x30, 0xb5, 0x1c, 0x68, 0x0c, 0x4b, 0x0c, 0x44, 0x1b, 0x68, 0xe4, 0xb2, 0x1b, 0x1b, 0xdb, 0xb2, 0x8d, 0x18, 0x9d, 0x42, 0x88, 0xbf, 0xc1, 0xeb, 0x03, 0x02, 0x00, 0x23, 0x93, 0x42, 0x06, 0xd0, 0x06, 0x49, 0x09, 0x5d, 0x01, 0x34, 0xc1, 0x54, 0xe4, 0xb2, 0x01, 0x33, 0xf6, 0xe7, 0x18, 0x46, 0x30, 0xbd, 0xac, 0x0a, 0x00, 0x20, 0xb4, 0x0a, 0x00, 0x20, 0xa8, 0x09, 0x00, 0x20, 0x02, 0x4b, 0x18, 0x78, 0x00, 0xf0, 0x01, 0x00, 0x70, 0x47, 0x00, 0xbf, 0x9d, 0x08, 0x00, 0x20, 0x01, 0x4b, 0x18, 0x68, 0x70, 0x47, 0x00, 0xbf, 0x78, 0x03, 0x00, 0x20, 0x0d, 0x4b, 0x3e, 0x29, 0x1b, 0x6d, 0x03, 0xeb, 0xc0, 0x00, 0x0c, 0x4b, 0x4f, 0xea, 0x40, 0x00, 0x03, 0x44, 0x09, 0xd9, 0x4a, 0x09, 0xc8, 0x06, 0x04, 0xbf, 0x02, 0xf1, 0xff, 0x32, 0x92, 0xb2, 0x92, 0x02, 0x42, 0xf4, 0x00, 0x42, 0x04, 0xe0, 0x4a, 0x08, 0xc9, 0x07, 0x48, 0xbf, 0x01, 0x32, 0x92, 0x02, 0x1a, 0x60, 0x70, 0x47, 0x00, 0xbf, 0x00, 0x5c, 0x00, 0x40, 0x0c, 0x60, 0x00, 0x40, 0x10, 0xb5, 0x06, 0x4c, 0x18, 0xb9, 0x23, 0x68, 0x01, 0x22, 0x1a, 0x82, 0x10, 0xbd, 0x04, 0x4b, 0x1b, 0x68, 0x1b, 0x68, 0x98, 0x47, 0x20, 0x68, 0x0a, 0x30, 0x10, 0xbd, 0xf8, 0x0a, 0x00, 0x20, 0xf4, 0x0a, 0x00, 0x20, 0x10, 0xb5, 0x06, 0x4c, 0x18, 0xb9, 0x23, 0x68, 0x01, 0x22, 0x1a, 0x82, 0x10, 0xbd, 0x04, 0x4b, 0x1b, 0x68, 0x9b, 0x68, 0x98, 0x47, 0x20, 0x68, 0x0c, 0x30, 0x10, 0xbd, 0xf8, 0x0a, 0x00, 0x20, 0xf4, 0x0a, 0x00, 0x20, 0x10, 0xb5, 0x20, 0x4b, 0x18, 0xb9, 0x1b, 0x68, 0x02, 0x22, 0x1a, 0x82, 0x10, 0xbd, 0x1e, 0x4a, 0x19, 0x68, 0x00, 0x20, 0x10, 0x80, 0x0c, 0x78, 0x13, 0x46, 0x14, 0xf0, 0x7f, 0x04, 0x0d, 0xd1, 0x4a, 0x7a, 0x91, 0x06, 0x44, 0xbf, 0x02, 0x21, 0x19, 0x70, 0x12, 0xf0, 0x40, 0x0f, 0x1a, 0x78, 0x14, 0xbf, 0x22, 0xf0, 0x01, 0x02, 0x42, 0xf0, 0x01, 0x02, 0x14, 0xe0, 0x01, 0x2c, 0x1f, 0xd0, 0x02, 0x2c, 0x1e, 0xd1, 0x09, 0x79, 0x01, 0xf0, 0x0f, 0x02, 0x92, 0x00, 0x02, 0xf1, 0x80, 0x42, 0x02, 0xf5, 0xb8, 0x42, 0x11, 0xf0, 0x80, 0x0f, 0x12, 0x68, 0x06, 0xd0, 0x02, 0xf0, 0x30, 0x02, 0x10, 0x2a, 0x07, 0xd1, 0x01, 0x22, 0x1a, 0x70, 0x04, 0xe0, 0x02, 0xf4, 0x40, 0x52, 0xb2, 0xf5, 0x80, 0x5f, 0xf6, 0xe7, 0x05, 0x4b, 0x1b, 0x68, 0x1b, 0x69, 0x98, 0x47, 0x02, 0x48, 0x10, 0xbd, 0x10, 0x46, 0x10, 0xbd, 0xf8, 0x0a, 0x00, 0x20, 0xca, 0x0a, 0x00, 0x20, 0xf4, 0x0a, 0x00, 0x20, 0x23, 0x4a, 0x2d, 0xe9, 0xf8, 0x43, 0x14, 0x68, 0x90, 0x46, 0x23, 0x8a, 0x26, 0x7a, 0x21, 0x4f, 0xa3, 0xb9, 0x04, 0x2e, 0x12, 0xd1, 0x20, 0x49, 0x0a, 0x78, 0x01, 0x2a, 0x0a, 0xd1, 0x1f, 0x4a, 0x10, 0x68, 0x1f, 0x4a, 0x80, 0xb2, 0x02, 0x44, 0x52, 0x00, 0x13, 0x60, 0x30, 0x22, 0x3a, 0x80, 0x0b, 0x70, 0x27, 0xe0, 0x10, 0x23, 0x3b, 0x80, 0x07, 0x26, 0x23, 0xe0, 0xa5, 0x8a, 0xab, 0x42, 0x8c, 0xbf, 0x02, 0x26, 0x04, 0x26, 0x9d, 0x42, 0x28, 0xbf, 0x1d, 0x46, 0x28, 0x46, 0xa3, 0x69, 0x98, 0x47, 0x81, 0x46, 0x00, 0x20, 0x00, 0xf0, 0xc7, 0xfb, 0x2a, 0x46, 0x01, 0x46, 0x48, 0x46, 0x00, 0xf0, 0x63, 0xfb, 0x29, 0x46, 0x00, 0x20, 0x00, 0xf0, 0xda, 0xfb, 0x23, 0x8a, 0x4f, 0xf4, 0x40, 0x52, 0x5b, 0x1b, 0x23, 0x82, 0x63, 0x8a, 0x1d, 0x44, 0x30, 0x23, 0x3b, 0x80, 0x09, 0x4b, 0x65, 0x82, 0x1a, 0x80, 0xd8, 0xf8, 0x00, 0x30, 0x1e, 0x72, 0xbd, 0xe8, 0xf8, 0x83, 0x00, 0xbf, 0xf8, 0x0a, 0x00, 0x20, 0xc6, 0x0a, 0x00, 0x20, 0xbc, 0x0a, 0x00, 0x20, 0x50, 0x5c, 0x00, 0x40, 0x02, 0x30, 0x00, 0x20, 0xc4, 0x0a, 0x00, 0x20, 0x10, 0xb5, 0x0a, 0x4b, 0x0a, 0x49, 0x1b, 0x68, 0x49, 0x78, 0x9a, 0x78, 0x91, 0x42, 0x0a, 0xd3, 0xd9, 0x78, 0x41, 0xb9, 0x9c, 0x88, 0x34, 0xb9, 0x9a, 0x72, 0x06, 0x4b, 0x1b, 0x68, 0x5b, 0x68, 0x98, 0x47, 0x20, 0x46, 0x10, 0xbd, 0x02, 0x20, 0x10, 0xbd, 0x00, 0xbf, 0xf8, 0x0a, 0x00, 0x20, 0xac, 0x03, 0x00, 0x20, 0xf4, 0x0a, 0x00, 0x20, 0x38, 0xb5, 0x0e, 0x4a, 0x0e, 0x4c, 0x12, 0x68, 0x23, 0x68, 0x92, 0x69, 0x18, 0x79, 0x99, 0x78, 0x90, 0x47, 0x23, 0x68, 0x9a, 0x7a, 0x7a, 0xb1, 0x70, 0xb9, 0x5a, 0x79, 0x62, 0xb9, 0xdd, 0x78, 0x55, 0xb9, 0x08, 0x4b, 0x1b, 0x68, 0xdb, 0x68, 0x98, 0x47, 0x23, 0x68, 0x28, 0x46, 0x1a, 0x79, 0xda, 0x72, 0x9a, 0x78, 0x1a, 0x73, 0x38, 0xbd, 0x02, 0x20, 0x38, 0xbd, 0xd0, 0x0a, 0x00, 0x20, 0xf8, 0x0a, 0x00, 0x20, 0xf4, 0x0a, 0x00, 0x20, 0x38, 0xb5, 0x2f, 0x4b, 0x1b, 0x68, 0x18, 0x78, 0x10, 0xf0, 0x7f, 0x00, 0x04, 0xd1, 0x5a, 0x7a, 0x22, 0xf0, 0x20, 0x02, 0x5a, 0x72, 0x38, 0xbd, 0x02, 0x28, 0x4e, 0xd1, 0x5a, 0x88, 0x00, 0x2a, 0x4c, 0xd1, 0x5a, 0x79, 0x00, 0x2a, 0x49, 0xd1, 0x1a, 0x79, 0x26, 0x4d, 0x22, 0xf0, 0x80, 0x00, 0x84, 0x00, 0x04, 0xf1, 0x80, 0x41, 0x01, 0xf5, 0xb8, 0x41, 0x09, 0x68, 0x2d, 0x78, 0x12, 0xf0, 0x80, 0x0f, 0x14, 0xbf, 0x01, 0xf0, 0x30, 0x01, 0x01, 0xf4, 0x40, 0x51, 0xa8, 0x42, 0x34, 0xd2, 0x00, 0x29, 0x32, 0xd0, 0x9b, 0x7a, 0x83, 0xb3, 0x04, 0xf1, 0x80, 0x44, 0x04, 0xf5, 0xb8, 0x44, 0x12, 0x06, 0x23, 0x68, 0x0c, 0xd5, 0x03, 0xf0, 0x30, 0x03, 0x10, 0x2b, 0x1f, 0xd1, 0xc4, 0xb2, 0x20, 0x46, 0x00, 0xf0, 0x15, 0xfb, 0x20, 0x46, 0x30, 0x21, 0x00, 0xf0, 0xec, 0xfa, 0x16, 0xe0, 0x03, 0xf4, 0x40, 0x53, 0xb3, 0xf5, 0x80, 0x5f, 0x11, 0xd1, 0x28, 0xb9, 0x0e, 0x4b, 0x93, 0xf8, 0x2c, 0x10, 0x00, 0xf0, 0x3f, 0xfb, 0x01, 0xe0, 0x00, 0xf0, 0xf2, 0xfa, 0x23, 0x68, 0x23, 0xf4, 0x80, 0x43, 0x23, 0xf0, 0x70, 0x03, 0x9b, 0xb2, 0x83, 0xf4, 0x40, 0x53, 0x23, 0x60, 0x07, 0x4b, 0x1b, 0x68, 0x5b, 0x69, 0x98, 0x47, 0x00, 0x20, 0x38, 0xbd, 0x02, 0x20, 0x38, 0xbd, 0x00, 0xbf, 0xf8, 0x0a, 0x00, 0x20, 0xac, 0x03, 0x00, 0x20, 0xf8, 0x02, 0x00, 0x20, 0xf4, 0x0a, 0x00, 0x20, 0x38, 0xb5, 0x1d, 0x4b, 0x1d, 0x4d, 0x19, 0x68, 0x2d, 0x78, 0x0a, 0x79, 0x22, 0xf0, 0x80, 0x04, 0xa3, 0x00, 0x03, 0xf1, 0x80, 0x40, 0x00, 0xf5, 0xb8, 0x40, 0x00, 0x68, 0x12, 0xf0, 0x80, 0x0f, 0x14, 0xbf, 0x00, 0xf0, 0x30, 0x00, 0x00, 0xf4, 0x40, 0x50, 0xac, 0x42, 0x22, 0xd2, 0x4c, 0x88, 0x04, 0xbb, 0xf8, 0xb1, 0x89, 0x7a, 0xe9, 0xb1, 0x03, 0xf1, 0x80, 0x43, 0x03, 0xf5, 0xb8, 0x43, 0x12, 0xf0, 0x80, 0x0f, 0x1a, 0x68, 0x07, 0xd0, 0x22, 0xf4, 0xe0, 0x42, 0x22, 0xf0, 0x40, 0x02, 0x92, 0xb2, 0x82, 0xf0, 0x10, 0x02, 0x06, 0xe0, 0x22, 0xf4, 0x80, 0x42, 0x22, 0xf0, 0x70, 0x02, 0x92, 0xb2, 0x82, 0xf4, 0x80, 0x52, 0x1a, 0x60, 0x05, 0x4b, 0x1b, 0x68, 0x9b, 0x69, 0x98, 0x47, 0x00, 0x20, 0x38, 0xbd, 0x02, 0x20, 0x38, 0xbd, 0xf8, 0x0a, 0x00, 0x20, 0xac, 0x03, 0x00, 0x20, 0xf4, 0x0a, 0x00, 0x20, 0x08, 0xb5, 0x06, 0x4b, 0x1b, 0x68, 0x5a, 0x7a, 0x42, 0xf0, 0x20, 0x02, 0x5a, 0x72, 0x04, 0x4b, 0x1b, 0x68, 0xdb, 0x69, 0x98, 0x47, 0x00, 0x20, 0x08, 0xbd, 0x00, 0xbf, 0xf8, 0x0a, 0x00, 0x20, 0xf4, 0x0a, 0x00, 0x20, 0x05, 0x4b, 0x1a, 0x68, 0x53, 0x8a, 0x18, 0xb9, 0x89, 0x88, 0xcb, 0x1a, 0x13, 0x82, 0x70, 0x47, 0x08, 0x68, 0x18, 0x44, 0x70, 0x47, 0x00, 0xbf, 0xf8, 0x0a, 0x00, 0x20, 0x08, 0xb5, 0x0b, 0x4b, 0x00, 0x20, 0x93, 0xf8, 0x2c, 0x10, 0x00, 0xf0, 0xb9, 0xfa, 0x09, 0x4b, 0x1b, 0x68, 0x18, 0x7a, 0x08, 0x28, 0x06, 0xd1, 0x07, 0x4b, 0x4f, 0xf4, 0x80, 0x52, 0x1a, 0x80, 0x06, 0x4b, 0x10, 0x22, 0x1a, 0x80, 0xb0, 0xf1, 0x09, 0x03, 0x58, 0x42, 0x58, 0x41, 0x08, 0xbd, 0xf8, 0x02, 0x00, 0x20, 0xf8, 0x0a, 0x00, 0x20, 0xc4, 0x0a, 0x00, 0x20, 0xc6, 0x0a, 0x00, 0x20, 0x73, 0xb5, 0x93, 0x4e, 0x93, 0x4b, 0x32, 0x68, 0x93, 0x4d, 0x92, 0xb2, 0x13, 0x44, 0x5b, 0x00, 0x1a, 0x68, 0x2b, 0x68, 0x19, 0x7a, 0x09, 0x29, 0x0f, 0xd0, 0x92, 0xb2, 0x52, 0x00, 0x02, 0xf1, 0x80, 0x42, 0x02, 0xf5, 0xc0, 0x42, 0x11, 0x78, 0x19, 0x70, 0x51, 0x78, 0x59, 0x70, 0x91, 0x88, 0x59, 0x80, 0x11, 0x89, 0x99, 0x80, 0x92, 0x89, 0xda, 0x80, 0x01, 0x22, 0x1a, 0x72, 0xda, 0x88, 0x5c, 0x78, 0x00, 0x2a, 0x61, 0xd1, 0x1a, 0x78, 0x12, 0xf0, 0x7f, 0x02, 0x3a, 0xd1, 0x09, 0x2c, 0x02, 0xd1, 0xff, 0xf7, 0xab, 0xfe, 0x44, 0xe0, 0x05, 0x2c, 0x0f, 0xd1, 0x93, 0xf9, 0x02, 0x20, 0x00, 0x2a, 0x01, 0xda, 0x08, 0x23, 0x4d, 0xe0, 0xda, 0x78, 0x00, 0x2a, 0xfa, 0xd1, 0x9a, 0x88, 0x00, 0x2a, 0xf7, 0xd1, 0x9b, 0x7a, 0x00, 0x2b, 0x37, 0xd0, 0xf3, 0xe7, 0x03, 0x2c, 0x13, 0xd1, 0x9a, 0x78, 0x01, 0x2a, 0x07, 0xd0, 0x75, 0x4b, 0x20, 0x46, 0x1b, 0x68, 0x5b, 0x69, 0x98, 0x47, 0x03, 0x28, 0x28, 0xd1, 0x35, 0xe0, 0x9a, 0x88, 0x00, 0x2a, 0xf4, 0xd1, 0x5b, 0x7a, 0x98, 0x06, 0xf1, 0xd5, 0xff, 0xf7, 0x6d, 0xff, 0x1c, 0xe0, 0x01, 0x2c, 0xec, 0xd1, 0x9a, 0x78, 0x01, 0x2a, 0xe9, 0xd1, 0x9a, 0x88, 0x00, 0x2a, 0xe6, 0xd1, 0x5b, 0x7a, 0x99, 0x06, 0xe3, 0xd5, 0xff, 0xf7, 0xb5, 0xfe, 0x0e, 0xe0, 0x01, 0x2a, 0x04, 0xd1, 0x0b, 0x2c, 0xdc, 0xd1, 0xff, 0xf7, 0x8a, 0xfe, 0x07, 0xe0, 0x02, 0x2a, 0xd7, 0xd1, 0x01, 0x2c, 0xf1, 0xd0, 0x03, 0x2c, 0xd3, 0xd1, 0xff, 0xf7, 0x0d, 0xff, 0x10, 0xb1, 0xcf, 0xe7, 0x00, 0x28, 0xbc, 0xd1, 0x32, 0x68, 0x5c, 0x4b, 0x92, 0xb2, 0x13, 0x44, 0x5b, 0x00, 0x00, 0x22, 0x1a, 0x60, 0x5a, 0x4b, 0x30, 0x22, 0x1a, 0x80, 0x06, 0x23, 0x00, 0xe0, 0x09, 0x23, 0x2a, 0x68, 0x13, 0x72, 0xce, 0xe0, 0x06, 0x2c, 0x13, 0xd1, 0x1a, 0x78, 0x52, 0x06, 0x77, 0xd1, 0xda, 0x78, 0x51, 0x4b, 0x01, 0x2a, 0x02, 0xd1, 0x1b, 0x68, 0xdb, 0x69, 0x67, 0xe0, 0x02, 0x2a, 0x02, 0xd1, 0x1b, 0x68, 0x1b, 0x6a, 0x62, 0xe0, 0x03, 0x2a, 0x69, 0xd1, 0x1b, 0x68, 0x5b, 0x6a, 0x5d, 0xe0, 0x00, 0x2c, 0x3c, 0xd1, 0x59, 0x88, 0x00, 0x29, 0x61, 0xd1, 0x5a, 0x68, 0x22, 0xf0, 0xff, 0x02, 0xb2, 0xf5, 0x00, 0x3f, 0x5b, 0xd1, 0x1a, 0x78, 0x12, 0xf0, 0x7f, 0x02, 0x04, 0xd1, 0x9b, 0x88, 0x00, 0x2b, 0x00, 0xf0, 0xaa, 0x80, 0x52, 0xe0, 0x01, 0x2a, 0x0c, 0xd1, 0x3e, 0x4a, 0x18, 0x79, 0x12, 0x68, 0x92, 0x69, 0x90, 0x47, 0x00, 0x28, 0x49, 0xd1, 0x2b, 0x68, 0x9b, 0x7a, 0x00, 0x2b, 0x40, 0xf0, 0x9b, 0x80, 0x43, 0xe0, 0x02, 0x2a, 0x41, 0xd1, 0x1b, 0x79, 0x39, 0x48, 0x03, 0xf0, 0x0f, 0x01, 0x8a, 0x00, 0x02, 0xf1, 0x80, 0x42, 0x02, 0xf5, 0xb8, 0x42, 0x12, 0x68, 0x00, 0x78, 0x13, 0xf0, 0x80, 0x0f, 0x14, 0xbf, 0x02, 0xf0, 0x30, 0x02, 0x02, 0xf4, 0x40, 0x52, 0x81, 0x42, 0x2d, 0xd2, 0x13, 0xf0, 0x70, 0x0f, 0x2a, 0xd1, 0x00, 0x2a, 0x7e, 0xd1, 0x27, 0xe0, 0x08, 0x2c, 0x03, 0xd1, 0x1b, 0x78, 0x5b, 0x06, 0x7a, 0xd0, 0x21, 0xe0, 0x0a, 0x2c, 0x1f, 0xd1, 0x1a, 0x78, 0x02, 0xf0, 0x7f, 0x02, 0x01, 0x2a, 0x1a, 0xd1, 0x9a, 0x7a, 0xc2, 0xb1, 0x59, 0x88, 0xb1, 0xb9, 0x5a, 0x68, 0x22, 0xf0, 0xff, 0x02, 0xb2, 0xf5, 0x80, 0x3f, 0x10, 0xd1, 0x1e, 0x4a, 0x18, 0x79, 0x12, 0x68, 0x92, 0x69, 0x90, 0x47, 0x00, 0x28, 0x63, 0xd0, 0x08, 0xe0, 0x3b, 0xb1, 0x2a, 0x68, 0x00, 0x24, 0x54, 0x82, 0x93, 0x61, 0x20, 0x46, 0x98, 0x47, 0x20, 0x46, 0x0a, 0xe0, 0x15, 0x4b, 0x1a, 0x68, 0x2b, 0x68, 0x12, 0x69, 0x58, 0x78, 0x90, 0x47, 0x03, 0x28, 0x02, 0xd1, 0x10, 0x4b, 0x1b, 0x68, 0x05, 0xe0, 0x2b, 0x68, 0x4f, 0xf6, 0xff, 0x71, 0x1a, 0x8a, 0x8a, 0x42, 0x01, 0xd1, 0x09, 0x22, 0x03, 0xe0, 0x02, 0x28, 0x00, 0xd0, 0x12, 0xb9, 0x08, 0x22, 0x1a, 0x72, 0x38, 0xe0, 0x93, 0xf9, 0x00, 0x10, 0x00, 0x29, 0x2e, 0xda, 0xd9, 0x88, 0x01, 0x91, 0x01, 0x98, 0x82, 0x42, 0x05, 0x48, 0x10, 0xd9, 0x01, 0x9a, 0x1a, 0x82, 0x1e, 0xe0, 0x50, 0x5c, 0x00, 0x40, 0x04, 0x30, 0x00, 0x20, 0xf8, 0x0a, 0x00, 0x20, 0xd0, 0x0a, 0x00, 0x20, 0x02, 0x30, 0x00, 0x20, 0xc6, 0x0a, 0x00, 0x20, 0xac, 0x03, 0x00, 0x20, 0x8a, 0x42, 0x0e, 0xd2, 0x01, 0x68, 0x91, 0xf8, 0x2c, 0x10, 0x8a, 0x42, 0x01, 0xd2, 0x00, 0x21, 0x05, 0xe0, 0x92, 0xfb, 0xf1, 0xf4, 0x01, 0xfb, 0x14, 0x22, 0x12, 0xb9, 0x01, 0x21, 0x0c, 0x4a, 0x11, 0x70, 0x02, 0x68, 0x92, 0xf8, 0x2c, 0x20, 0x9a, 0x82, 0xff, 0xf7, 0x35, 0xfd, 0x05, 0xe0, 0x03, 0x22, 0x1a, 0x72, 0x07, 0x4b, 0x4f, 0xf4, 0x40, 0x52, 0x1a, 0x80, 0xff, 0xf7, 0x8a, 0xfe, 0x02, 0xb0, 0x70, 0xbd, 0x04, 0x4b, 0x9f, 0xe7, 0x04, 0x4b, 0x9d, 0xe7, 0x04, 0x4b, 0x9b, 0xe7, 0xbc, 0x0a, 0x00, 0x20, 0xc4, 0x0a, 0x00, 0x20, 0x75, 0x3a, 0x00, 0x08, 0x2d, 0x3a, 0x00, 0x08, 0x51, 0x3a, 0x00, 0x08, 0xf8, 0xb5, 0x2b, 0x4d, 0x2c, 0x68, 0x23, 0x7a, 0x03, 0x2b, 0x01, 0xd0, 0x05, 0x2b, 0x41, 0xd1, 0xa3, 0x69, 0x22, 0x8a, 0xab, 0xb1, 0xa2, 0xb1, 0xa6, 0x8a, 0x96, 0x42, 0x28, 0xbf, 0x16, 0x46, 0x30, 0x46, 0x98, 0x47, 0x23, 0x8a, 0x07, 0x46, 0x9b, 0x1b, 0x23, 0x82, 0x63, 0x8a, 0x00, 0x20, 0x33, 0x44, 0x63, 0x82, 0x00, 0xf0, 0x00, 0xf9, 0x32, 0x46, 0x01, 0x46, 0x38, 0x46, 0x00, 0xf0, 0xa6, 0xf8, 0x23, 0x8a, 0x53, 0xb1, 0x1b, 0x4b, 0x00, 0x20, 0x4f, 0xf4, 0x40, 0x52, 0x01, 0x46, 0x1a, 0x80, 0x00, 0xf0, 0xff, 0xf8, 0x18, 0x4b, 0x30, 0x22, 0x1a, 0x80, 0x23, 0x8a, 0xa2, 0x8a, 0x9a, 0x42, 0x02, 0xd8, 0x2b, 0x68, 0x03, 0x22, 0x02, 0xe0, 0x1b, 0xb1, 0x2b, 0x68, 0x05, 0x22, 0x1a, 0x72, 0x0c, 0xe0, 0x2a, 0x68, 0x06, 0x21, 0x11, 0x72, 0x10, 0x4a, 0x11, 0x68, 0x10, 0x4a, 0x89, 0xb2, 0x0a, 0x44, 0x52, 0x00, 0x13, 0x60, 0x0b, 0x4b, 0x30, 0x22, 0x1a, 0x80, 0x2b, 0x68, 0x1b, 0x7a, 0x06, 0xe0, 0x07, 0x2b, 0x03, 0xd1, 0x0a, 0x4b, 0x1b, 0x68, 0xdb, 0x68, 0x98, 0x47, 0x08, 0x23, 0x2a, 0x68, 0x13, 0x72, 0xbd, 0xe8, 0xf8, 0x40, 0xff, 0xf7, 0x21, 0xbe, 0x00, 0xbf, 0xf8, 0x0a, 0x00, 0x20, 0xc4, 0x0a, 0x00, 0x20, 0xc6, 0x0a, 0x00, 0x20, 0x50, 0x5c, 0x00, 0x40, 0x02, 0x30, 0x00, 0x20, 0xd0, 0x0a, 0x00, 0x20, 0x30, 0xb5, 0x0b, 0x4b, 0x1c, 0x78, 0x00, 0x23, 0xa3, 0x42, 0x0c, 0xd2, 0x03, 0xf1, 0x80, 0x52, 0x02, 0xf5, 0xb8, 0x52, 0x91, 0x00, 0x0d, 0x68, 0x48, 0xf6, 0x8f, 0x72, 0x2a, 0x40, 0x1a, 0x43, 0x0a, 0x60, 0x01, 0x33, 0xf0, 0xe7, 0x03, 0x4b, 0x40, 0xf0, 0x80, 0x00, 0x18, 0x60, 0x30, 0xbd, 0xac, 0x03, 0x00, 0x20, 0x4c, 0x5c, 0x00, 0x40, 0x10, 0xb5, 0x13, 0x4c, 0x23, 0x68, 0x1a, 0x7a, 0x02, 0x2a, 0x01, 0xd0, 0x04, 0x2a, 0x04, 0xd1, 0xff, 0xf7, 0x90, 0xfc, 0x23, 0x68, 0x1b, 0x7a, 0x13, 0xe0, 0x06, 0x2a, 0x10, 0xd1, 0x5a, 0x78, 0x05, 0x2a, 0x09, 0xd1, 0x1a, 0x78, 0x52, 0x06, 0x06, 0xd1, 0x98, 0x78, 0xff, 0xf7, 0xcc, 0xff, 0x08, 0x4b, 0x1b, 0x68, 0x1b, 0x6a, 0x98, 0x47, 0x07, 0x4b, 0x1b, 0x68, 0x9b, 0x68, 0x98, 0x47, 0x08, 0x23, 0x22, 0x68, 0x13, 0x72, 0xbd, 0xe8, 0x10, 0x40, 0xff, 0xf7, 0xd1, 0xbd, 0x00, 0xbf, 0xf8, 0x0a, 0x00, 0x20, 0xf4, 0x0a, 0x00, 0x20, 0xd0, 0x0a, 0x00, 0x20, 0x70, 0x47, 0x30, 0xb5, 0x01, 0xf1, 0x00, 0x51, 0x01, 0x32, 0x01, 0xf5, 0x40, 0x51, 0x52, 0x10, 0x49, 0x00, 0x00, 0x23, 0x93, 0x42, 0x00, 0xf1, 0x02, 0x00, 0x09, 0xd0, 0x10, 0xf8, 0x01, 0x5c, 0x10, 0xf8, 0x02, 0x4c, 0x44, 0xea, 0x05, 0x24, 0x21, 0xf8, 0x23, 0x40, 0x01, 0x33, 0xf1, 0xe7, 0x30, 0xbd, 0x10, 0xb5, 0x01, 0xf1, 0x00, 0x51, 0x01, 0x32, 0x01, 0xf5, 0x40, 0x51, 0x52, 0x10, 0x49, 0x00, 0x00, 0x23, 0x93, 0x42, 0x05, 0xd0, 0x51, 0xf8, 0x23, 0x40, 0x20, 0xf8, 0x13, 0x40, 0x01, 0x33, 0xf7, 0xe7, 0x10, 0xbd, 0x80, 0x00, 0x00, 0xf1, 0x80, 0x40, 0x00, 0xf5, 0xb8, 0x40, 0x03, 0x68, 0xca, 0x06, 0x23, 0xf4, 0xe0, 0x43, 0x23, 0xf0, 0x40, 0x03, 0x9b, 0xb2, 0x48, 0xbf, 0x83, 0xf0, 0x10, 0x03, 0x8a, 0x06, 0x48, 0xbf, 0x83, 0xf0, 0x20, 0x03, 0x03, 0x60, 0x70, 0x47, 0x80, 0x00, 0x00, 0xf1, 0x80, 0x40, 0x00, 0xf5, 0xb8, 0x40, 0x03, 0x68, 0x5b, 0x04, 0x06, 0xd5, 0x02, 0x68, 0x48, 0xf6, 0x8f, 0x73, 0x13, 0x40, 0x43, 0xf4, 0x80, 0x43, 0x03, 0x60, 0x70, 0x47, 0x80, 0x00, 0x00, 0xf1, 0x80, 0x40, 0x00, 0xf5, 0xb8, 0x40, 0x03, 0x68, 0x5b, 0x06, 0x06, 0xd5, 0x02, 0x68, 0x48, 0xf6, 0x8f, 0x73, 0x13, 0x40, 0x43, 0xf0, 0x40, 0x03, 0x03, 0x60, 0x70, 0x47, 0x05, 0x4b, 0x1b, 0x68, 0x9b, 0xb2, 0x03, 0xeb, 0xc0, 0x00, 0x00, 0xf1, 0x00, 0x50, 0x00, 0xf5, 0x40, 0x50, 0x40, 0x00, 0x00, 0x88, 0x70, 0x47, 0x50, 0x5c, 0x00, 0x40, 0x04, 0x4b, 0x1b, 0x68, 0x9b, 0xb2, 0x03, 0xeb, 0xc0, 0x00, 0x03, 0x4b, 0x03, 0x44, 0x5b, 0x00, 0x18, 0x88, 0x70, 0x47, 0x50, 0x5c, 0x00, 0x40, 0x04, 0x30, 0x00, 0x20, 0x04, 0x4b, 0x1b, 0x68, 0x9b, 0xb2, 0x03, 0xeb, 0xc0, 0x00, 0x03, 0x4b, 0x03, 0x44, 0x5b, 0x00, 0x19, 0x60, 0x70, 0x47, 0x50, 0x5c, 0x00, 0x40, 0x02, 0x30, 0x00, 0x20, 0x0d, 0x4b, 0x3e, 0x29, 0x1b, 0x68, 0x9b, 0xb2, 0x03, 0xeb, 0xc0, 0x00, 0x0b, 0x4b, 0x03, 0x44, 0x4f, 0xea, 0x43, 0x02, 0x09, 0xd9, 0x4b, 0x09, 0xc8, 0x06, 0x04, 0xbf, 0x03, 0xf1, 0xff, 0x33, 0x9b, 0xb2, 0x9b, 0x02, 0x43, 0xf4, 0x00, 0x43, 0x04, 0xe0, 0x4b, 0x08, 0xc9, 0x07, 0x48, 0xbf, 0x01, 0x33, 0x9b, 0x02, 0x13, 0x60, 0x70, 0x47, 0x50, 0x5c, 0x00, 0x40, 0x06, 0x30, 0x00, 0x20, 0x08, 0xb5, 0x00, 0x21, 0x04, 0x46, 0x00, 0xf0, 0x6d, 0xf8, 0x04, 0x4b, 0x18, 0x68, 0xc3, 0x6b, 0x03, 0xb1, 0x98, 0x47, 0x20, 0x46, 0xfd, 0xf7, 0x35, 0xff, 0x00, 0xbf, 0x8c, 0x52, 0x00, 0x08, 0x70, 0xb5, 0x0f, 0x4e, 0x0f, 0x4d, 0x76, 0x1b, 0xb6, 0x10, 0x07, 0xd0, 0x04, 0x3d, 0x00, 0x24, 0x01, 0x34, 0x55, 0xf8, 0x04, 0x3f, 0x98, 0x47, 0xa6, 0x42, 0xf9, 0xd1, 0x0a, 0x4e, 0x0b, 0x4d, 0x00, 0xf0, 0x3a, 0xf9, 0x76, 0x1b, 0xb6, 0x10, 0x08, 0xd0, 0x04, 0x3d, 0x00, 0x24, 0x01, 0x34, 0x55, 0xf8, 0x04, 0x3f, 0x98, 0x47, 0xa6, 0x42, 0xf9, 0xd1, 0x70, 0xbd, 0x70, 0xbd, 0x00, 0xbf, 0x44, 0x46, 0x00, 0x08, 0x44, 0x46, 0x00, 0x08, 0x58, 0x46, 0x00, 0x08, 0x44, 0x46, 0x00, 0x08, 0x20, 0xf0, 0x03, 0x01, 0x10, 0xf0, 0x03, 0x00, 0xc0, 0xf1, 0x00, 0x00, 0x51, 0xf8, 0x04, 0x3b, 0x00, 0xf1, 0x04, 0x0c, 0x4f, 0xea, 0xcc, 0x0c, 0x6f, 0xf0, 0x00, 0x02, 0x1c, 0xbf, 0x22, 0xfa, 0x0c, 0xf2, 0x13, 0x43, 0x4f, 0xf0, 0x01, 0x0c, 0x4c, 0xea, 0x0c, 0x2c, 0x4c, 0xea, 0x0c, 0x4c, 0xa3, 0xeb, 0x0c, 0x02, 0x22, 0xea, 0x03, 0x02, 0x12, 0xea, 0xcc, 0x12, 0x04, 0xbf, 0x51, 0xf8, 0x04, 0x3b, 0x04, 0x30, 0xf4, 0xd0, 0x13, 0xf0, 0xff, 0x0f, 0x1f, 0xbf, 0x01, 0x30, 0x13, 0xf4, 0x7f, 0x4f, 0x01, 0x30, 0x13, 0xf4, 0x7f, 0x0f, 0x18, 0xbf, 0x01, 0x30, 0x70, 0x47, 0x00, 0xbf, 0x02, 0x4b, 0x13, 0xb1, 0x02, 0x48, 0x00, 0xf0, 0x7d, 0xb8, 0x70, 0x47, 0x00, 0x00, 0x00, 0x00, 0x61, 0x45, 0x00, 0x08, 0x2d, 0xe9, 0xf0, 0x4f, 0x38, 0x4b, 0x85, 0xb0, 0x1b, 0x68, 0x02, 0x90, 0x03, 0xf5, 0xa4, 0x72, 0x01, 0x93, 0x0f, 0x46, 0x03, 0x92, 0x01, 0x9b, 0xd3, 0xf8, 0x48, 0x81, 0xb8, 0xf1, 0x00, 0x0f, 0x1c, 0xd0, 0xdd, 0xf8, 0x0c, 0xb0, 0x4f, 0xf0, 0x01, 0x09, 0xda, 0x46, 0xd8, 0xf8, 0x04, 0x30, 0x5c, 0x1e, 0x11, 0xd4, 0x08, 0xf1, 0x88, 0x05, 0x9e, 0x1c, 0x05, 0xeb, 0x83, 0x05, 0x08, 0xeb, 0x86, 0x06, 0x77, 0xb1, 0xeb, 0x6f, 0xbb, 0x42, 0x0b, 0xd0, 0x01, 0x3c, 0x63, 0x1c, 0xa5, 0xf1, 0x04, 0x05, 0xa6, 0xf1, 0x04, 0x06, 0xf4, 0xd1, 0x24, 0x4a, 0x7a, 0xbb, 0x05, 0xb0, 0xbd, 0xe8, 0xf0, 0x8f, 0xd8, 0xf8, 0x04, 0x20, 0x56, 0xf8, 0x04, 0x3c, 0x01, 0x3a, 0xa2, 0x42, 0x16, 0xbf, 0x00, 0x22, 0xc8, 0xf8, 0x04, 0x40, 0x46, 0xf8, 0x04, 0x2c, 0x00, 0x2b, 0xe5, 0xd0, 0x09, 0xfa, 0x04, 0xf2, 0xd8, 0xf8, 0x88, 0x11, 0xd8, 0xf8, 0x04, 0xb0, 0x0a, 0x42, 0x10, 0xd0, 0xd8, 0xf8, 0x8c, 0x11, 0x0a, 0x42, 0x0e, 0xd1, 0x02, 0x98, 0x55, 0xf8, 0x04, 0x1c, 0x98, 0x47, 0xd8, 0xf8, 0x04, 0x30, 0x5b, 0x45, 0xb7, 0xd1, 0xda, 0xf8, 0x00, 0x30, 0x43, 0x45, 0xcd, 0xd0, 0xb2, 0xe7, 0x98, 0x47, 0xf4, 0xe7, 0x55, 0xf8, 0x04, 0x0c, 0x98, 0x47, 0xf0, 0xe7, 0xd8, 0xf8, 0x04, 0x30, 0x6b, 0xb9, 0xd8, 0xf8, 0x00, 0x30, 0x63, 0xb1, 0x40, 0x46, 0xca, 0xf8, 0x00, 0x30, 0xaf, 0xf3, 0x00, 0x80, 0xda, 0xf8, 0x00, 0x80, 0xb8, 0xf1, 0x00, 0x0f, 0xa7, 0xd1, 0xbe, 0xe7, 0xd8, 0xf8, 0x00, 0x30, 0xc2, 0x46, 0x98, 0x46, 0xf6, 0xe7, 0x8c, 0x52, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x46, 0x00, 0x20, 0x02, 0x46, 0x03, 0x46, 0x00, 0xf0, 0x18, 0xb8, 0x38, 0xb5, 0x09, 0x4d, 0x09, 0x4c, 0x64, 0x1b, 0xa4, 0x10, 0x18, 0xbf, 0x05, 0xeb, 0x84, 0x05, 0x05, 0xd0, 0x01, 0x3c, 0x55, 0xf8, 0x04, 0x3d, 0x98, 0x47, 0x00, 0x2c, 0xf9, 0xd1, 0xbd, 0xe8, 0x38, 0x40, 0x00, 0xf0, 0x69, 0xb8, 0x00, 0xbf, 0x64, 0x46, 0x00, 0x08, 0x68, 0x46, 0x00, 0x08, 0xf0, 0xb5, 0x27, 0x4c, 0x85, 0xb0, 0x26, 0x68, 0x07, 0x46, 0xd6, 0xf8, 0x48, 0x41, 0x00, 0x2c, 0x40, 0xd0, 0x65, 0x68, 0x1f, 0x2d, 0x1e, 0xdd, 0x22, 0x48, 0x18, 0xb9, 0x4f, 0xf0, 0xff, 0x30, 0x05, 0xb0, 0xf0, 0xbd, 0x4f, 0xf4, 0xc8, 0x70, 0x03, 0x91, 0x02, 0x92, 0x01, 0x93, 0xaf, 0xf3, 0x00, 0x80, 0x03, 0x99, 0x04, 0x46, 0x02, 0x9a, 0x01, 0x9b, 0x00, 0x28, 0xee, 0xd0, 0xd6, 0xf8, 0x48, 0x51, 0x00, 0x20, 0x25, 0x60, 0x60, 0x60, 0x05, 0x46, 0xc6, 0xf8, 0x48, 0x41, 0xc4, 0xf8, 0x88, 0x01, 0xc4, 0xf8, 0x8c, 0x01, 0x3f, 0xb9, 0x6b, 0x1c, 0x00, 0x20, 0x02, 0x35, 0x63, 0x60, 0x44, 0xf8, 0x25, 0x10, 0x05, 0xb0, 0xf0, 0xbd, 0x01, 0x26, 0xae, 0x40, 0x04, 0xeb, 0x85, 0x00, 0xc0, 0xf8, 0x88, 0x20, 0xd4, 0xf8, 0x88, 0x21, 0x02, 0x2f, 0x42, 0xea, 0x06, 0x02, 0xc4, 0xf8, 0x88, 0x21, 0xc0, 0xf8, 0x08, 0x31, 0xe7, 0xd1, 0xd4, 0xf8, 0x8c, 0x31, 0x1e, 0x43, 0xc4, 0xf8, 0x8c, 0x61, 0xe1, 0xe7, 0x06, 0xf5, 0xa6, 0x74, 0xc6, 0xf8, 0x48, 0x41, 0xb9, 0xe7, 0x00, 0xbf, 0x8c, 0x52, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xb5, 0x00, 0xbf, 0xf8, 0xbc, 0x08, 0xbc, 0x9e, 0x46, 0x70, 0x47, 0x51, 0x44, 0x00, 0x08, 0x45, 0x2e, 0x00, 0x08, 0x11, 0x21, 0x00, 0x08, 0x0d, 0x22, 0x00, 0x08, 0x71, 0x30, 0x00, 0x08, 0xf8, 0xb5, 0x00, 0xbf, 0xf8, 0xbc, 0x08, 0xbc, 0x9e, 0x46, 0x70, 0x47, 0xed, 0x20, 0x00, 0x08, 0x28, 0xdb, 0xff, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x20, 0x00, 0x28, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x24, 0x01, 0x40, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x20, 0x00, 0x08, 0x01, 0x40, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x40, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x10, 0x01, 0x40, 0x0d, 0x02, 0x00, 0x00, 0x00, 0x14, 0x01, 0x40, 0x0e, 0x03, 0x00, 0x00, 0x1c, 0x10, 0x02, 0x40, 0x18, 0x10, 0x02, 0x40, 0x14, 0x10, 0x02, 0x40, 0x10, 0x10, 0x02, 0x40, 0x0c, 0x10, 0x02, 0x40, 0x1c, 0x10, 0x02, 0x40, 0x18, 0x10, 0x02, 0x40, 0x14, 0x10, 0x02, 0x40, 0x00, 0x04, 0x00, 0x40, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x40, 0x1d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x40, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x20, 0xb4, 0x01, 0x00, 0x20, 0x48, 0x02, 0x00, 0x20, 0x00, 0x38, 0x01, 0x40, 0x4c, 0x08, 0x00, 0x20, 0x40, 0x08, 0x00, 0x20, 0x20, 0xaa, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x25, 0x00, 0x00, 0x00, 0x44, 0x00, 0x40, 0x58, 0x08, 0x00, 0x20, 0x70, 0x08, 0x00, 0x20, 0x10, 0x55, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x26, 0x00, 0x00, 0x00, 0x48, 0x00, 0x40, 0x64, 0x08, 0x00, 0x20, 0x7c, 0x08, 0x00, 0x20, 0x10, 0x55, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x27, 0x00, 0x00, 0xe0, 0x02, 0x00, 0x20, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x40, 0x52, 0x00, 0x08, 0x43, 0x00, 0x00, 0x00, 0x99, 0x35, 0x00, 0x08, 0x7d, 0x36, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x81, 0x34, 0x00, 0x08, 0xd5, 0x34, 0x00, 0x08, 0x25, 0x35, 0x00, 0x08, 0x8d, 0x35, 0x00, 0x08, 0x81, 0x35, 0x00, 0x08, 0x61, 0x35, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xdd, 0x35, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x83, 0x52, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x1c, 0x52, 0x00, 0x08, 0x12, 0x00, 0x00, 0x00, 0x10, 0x52, 0x00, 0x08, 0x0c, 0x00, 0x00, 0x00, 0x2d, 0x42, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0xdd, 0x37, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x2d, 0x42, 0x00, 0x08, 0x35, 0x35, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x2d, 0x42, 0x00, 0x08, 0x51, 0x35, 0x00, 0x08, 0x2e, 0x52, 0x00, 0x08, 0x12, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x06, 0x00, 0x20, 0x04, 0x07, 0x00, 0x20, 0x6c, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x52, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x33, 0xcd, 0xab, 0x34, 0x12, 0x6d, 0xe6, 0xec, 0xde, 0x05, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x6f, 0x6e, 0x67, 0x72, 0x61, 0x74, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x54, 0x4d, 0x33, 0x32, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x20, 0x62, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x00, 0x53, 0x65, 0x65, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x72, 0x6f, 0x67, 0x65, 0x72, 0x63, 0x6c, 0x61, 0x72, 0x6b, 0x6d, 0x65, 0x6c, 0x62, 0x6f, 0x75, 0x72, 0x6e, 0x65, 0x2f, 0x53, 0x54, 0x4d, 0x33, 0x32, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2d, 0x62, 0x6f, 0x6f, 0x74, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x72, 0x0a, 0x0a, 0x00, 0x46, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x20, 0x6f, 0x6e, 0x20, 0x53, 0x54, 0x4d, 0x33, 0x32, 0x00, 0x61, 0x6e, 0x64, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x73, 0x74, 0x6d, 0x33, 0x32, 0x64, 0x75, 0x69, 0x6e, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0xf0, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0xf0, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x20, 0x01, 0x02, 0x01, 0x00, 0x40, 0x00, 0x00, 0x20, 0xf0, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x20, 0x02, 0x03, 0x02, 0x00, 0x40, 0x00, 0x00, 0x20, 0xf0, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x20, 0x03, 0x04, 0x03, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x04, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x05, 0x00, 0x05, 0x00, 0x40, 0x00, 0x00, 0x20, 0x80, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x20, 0x06, 0x01, 0x06, 0x00, 0x40, 0x00, 0x00, 0x20, 0x80, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x20, 0x07, 0x02, 0x07, 0x00, 0x40, 0x00, 0x00, 0x20, 0xc8, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0xff, 0x00, 0x40, 0x00, 0x00, 0x20, 0xc8, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x09, 0x02, 0xff, 0x00, 0x40, 0x00, 0x00, 0x20, 0xc8, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x03, 0xff, 0x00, 0x40, 0x00, 0x00, 0x20, 0xc8, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0xff, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0xff, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xff, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0xff, 0x00, 0x48, 0x00, 0x00, 0x20, 0x80, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x20, 0x00, 0x03, 0x08, 0x00, 0x48, 0x00, 0x00, 0x20, 0x80, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x20, 0x01, 0x04, 0x09, 0x00, 0x48, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xff, 0x00, 0x48, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xff, 0x00, 0x48, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xff, 0x00, 0x48, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xff, 0x00, 0x48, 0x00, 0x00, 0x20, 0xa4, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0xff, 0x00, 0x48, 0x00, 0x00, 0x20, 0xa4, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0xff, 0x00, 0x48, 0x00, 0x00, 0x20, 0xa4, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x08, 0x03, 0xff, 0x00, 0x48, 0x00, 0x00, 0x20, 0xa4, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x09, 0x04, 0xff, 0x00, 0x48, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0xff, 0x00, 0x48, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0xff, 0x00, 0x48, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0xff, 0x00, 0x48, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0xff, 0x00, 0x48, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xff, 0x00, 0x48, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0xff, 0x00, 0x50, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0xff, 0x00, 0x50, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xff, 0x00, 0x50, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0xff, 0x00, 0x48, 0x00, 0x00, 0x20, 0x01, 0x09, 0x01, 0x0a, 0x01, 0x0f, 0x01, 0x00, 0x00, 0x1b, 0x02, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x01, 0x04, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x16, 0x00, 0x1c, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x0e, 0x00, 0x00, 0x02, 0x02, 0x01, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x11, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x2d, 0x00, 0x08, 0xc9, 0x2d, 0x00, 0x08, 0xe5, 0x2d, 0x00, 0x08, 0x85, 0x2d, 0x00, 0x08, 0xdd, 0x2c, 0x00, 0x08, 0x2b, 0x2d, 0x00, 0x08, 0x4d, 0x2d, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x30, 0x00, 0x08, 0x55, 0x30, 0x00, 0x08, 0xe5, 0x2d, 0x00, 0x08, 0x55, 0x2e, 0x00, 0x08, 0x77, 0x2e, 0x00, 0x08, 0x59, 0x2e, 0x00, 0x08, 0xdd, 0x2f, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x03, 0x4d, 0x00, 0x61, 0x00, 0x70, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x12, 0x03, 0x4c, 0x00, 0x65, 0x00, 0x61, 0x00, 0x66, 0x00, 0x4c, 0x00, 0x61, 0x00, 0x62, 0x00, 0x73, 0x00, 0x12, 0x01, 0x00, 0x02, 0x02, 0x00, 0x00, 0x40, 0xaf, 0x1e, 0x04, 0x00, 0x00, 0x02, 0x01, 0x02, 0x00, 0x01, 0x09, 0x02, 0x43, 0x00, 0x02, 0x01, 0x00, 0xc0, 0x32, 0x09, 0x04, 0x00, 0x00, 0x01, 0x02, 0x02, 0x01, 0x00, 0x05, 0x24, 0x00, 0x01, 0x10, 0x05, 0x24, 0x01, 0x03, 0x01, 0x04, 0x24, 0x02, 0x06, 0x05, 0x24, 0x06, 0x00, 0x01, 0x07, 0x05, 0x82, 0x03, 0x40, 0x00, 0xff, 0x09, 0x04, 0x01, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x05, 0x03, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x81, 0x02, 0x40, 0x00, 0x00, 0x04, 0x03, 0x09, 0x04, 0x00, 0x43, 0x00, 0x00, 0x00, 0xb0, 0x03, 0x00, 0x20, 0x70, 0x46, 0x00, 0x08 };Old Code
#define NRST 23
#define BOOT0 22
#define RXD2 16
#define TXD2 17
#define STERR "ERROR"
#define STM32INIT 0x7F // Send Init command
#define STM32OK 0x79 // return ACK
#define STM32ROK 0x1F // return NACK
#define STM32GET 0 // get version command
#define STM32RUN 0x21 // Restart and Run programm
#define STM32RD 0x11 // Read flash command
#define STM32WR 0x31 // Write flash command
#define STM32UNPCTWR 0x73 // Unprotest WR command
#define STM32ERASE 0x43 // Erase flash command
#define STM32ERASEN 0x44 // Erase extended flash command
#define STM32ID 0x02 // get chip ID command
#define STM32STADDR 0x8000000 // STM32 codes start address
#define STM32ERR 0x3F
#define F10xx8 "STM32F103x8/B" //tested
#define F10xx6 "STM32F103x4/6"
#define F10xxc "STM32F103xC/D/E"
#define F107 "STM32F105/107"
#define F03x46 "STM32F03xx4/6" //tested
#define F030xc "STM32F030xC"
#define F030x8 "STM32F030x8/05x"
String stm32GetId() { // Tested
Serial.println("entering the function");
int getid = 0;
unsigned char sbuf[5];
stm32SendCommand(STM32ID);
Serial.println("sent command completed");
while (!Serial2.available());
sbuf[0] = Serial2.read();
if (sbuf[0] == STM32OK) {
Serial2.readBytesUntil(STM32OK, sbuf, 4);
getid = sbuf[1];
getid = (getid << 8) + sbuf[2];
if (getid == 0x410)
return F10xx8;
if (getid == 0x412)
return F10xx6;
if (getid == 0x418)
return F107;
if (getid == 0x444)
return F03x46;
if (getid == 0x414)
return F10xxc;
if (getid == 0x440)
return F030x8;
if (getid == 0x442)
return F030xc;
}
else
return STERR;
}
void stm32SendCommand(unsigned char commd) { // Tested
Serial2.write(commd);
Serial2.write(~commd);
}
unsigned char stm32Erase() { // Tested
unsigned char eraseflag = 0;
stm32SendCommand(STM32ERASE);
while (!Serial2.available());
if (Serial2.read() == STM32OK)
{
Serial2.write(0xFF);
Serial2.write(0x00);
}
else return STM32ERR;
while (!Serial2.available());
eraseflag = Serial2.read();
return eraseflag;
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200, SERIAL_8E1);
Serial.begin(115200);
Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
pinMode(BOOT0, OUTPUT);
pinMode(NRST, OUTPUT);
digitalWrite(BOOT0, HIGH);
delay(100);
digitalWrite(NRST, LOW);
delay(50);
digitalWrite(NRST, HIGH);
delay(500);
FlashMode();
//Serial.println("flash mode completed");
stm32SendCommand(STM32INIT);
while (!Serial2.available());
Serial.println(Serial2.read());
Serial.println("INIT completed");
Serial.println(stm32GetId());
//Serial.println(stm32Erase());
Serial.println("ID completed");
RunMode();
// Serial.println(stm32Erase() == STM32OK);
}
void loop() {
// put your main code here, to run repeatedly:
// Serial.print("hello world");
// delay(500);
}
void FlashMode() { //Tested
digitalWrite(BOOT0, HIGH);
delay(100);
digitalWrite(NRST, LOW);
delay(50);
digitalWrite(NRST, HIGH);
delay(500);
}
void RunMode() { //Tested
digitalWrite(BOOT0, LOW);
delay(100);
digitalWrite(NRST, LOW);
delay(50);
digitalWrite(NRST, HIGH);
delay(500);
}Flashing .hex file
#include "a.h"
#include <SPIFFS.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include "SPIFFS.h"
const char * ssid = "*";
const char * password = "*";
# define NRST 19
# define BOOT0 18
# define ACK 0x79 // acknowledge byte from STM
HardwareSerial STM(1);
byte global_arr[512] = {
0
};
int global_len = 512;
void FlashMode() { //Tested
digitalWrite(BOOT0, HIGH);
delay(100);
digitalWrite(NRST, LOW);
delay(50);
digitalWrite(NRST, HIGH);
delay(500);
}
/*----------------------------------------------------------------
* stmSend, send byte over STM serial connection
* return: none
* param: byte cmd, byte to send
*/
inline void stmSend(byte cmd) {
STM.write(cmd);
delay(5);
}
/*----------------------------------------------------------------
* stmRead, blocks until byte recv from STM
* return: byte, value recv from STM
* param: none
*/
inline byte stmRead() {
byte buf;
while (!STM.available()); // wait to recv byte
buf = STM.read();
Serial.println(buf);
return buf;
}
/*----------------------------------------------------------------
* stmCmdGeneric, executes chosen generic command
* return: bool, true if successful
* arr, values returned by command
* len, lengh of arr
* param: byte cmd, command code
* byte* arr, array to hold returned values
* int* len, max length of arr
*/
bool stmCmdGeneric(byte cmd, byte * arr, int * len) {
stmSend(cmd); // send command
stmSend(cmd ^ 0xFF); // send checksum
if (stmRead() != ACK) {
// ACKNOWLEDGE FAILED
return false;
} else {
int recv_len = stmRead() + 1; // number of bytes in response
if (recv_len > * len) recv_len = * len; // limit recv_len to size of arr
for (int i = 0; i < recv_len; i++) {
arr[i] = stmRead(); // load response into arr
}
* len = recv_len; // update arr length
return true;
}
}
/*----------------------------------------------------------------
* printArr, prints array to console in HEX format
* return: none
* param: array of any data type
*/
template < typename T, size_t len > void printArr(const T( & arr)[len]) {
for (size_t i = 0; i < len; i++) {
Serial.print(arr[i], HEX);
Serial.print(" ");
}
Serial.println();
}
/*----------------------------------------------------------------
* stmFlushRx, clears DUEs RX buffer from STM32
* return: none
* param: none
*/
void stmFlushRx(void) {
while (STM.available()) STM.read(); // clear DUEs RX buffer
}
/*----------------------------------------------------------------
* stmReadMemory, reads the flash memory of the STM32
* return: bool, true if successful
* arr, memory values returned from STM32
* len, number of bytes returned
* param: int addr, start address of flash memory to read
* byte* arr, array to store returned values
* int* len, number of bytes to read (max 256)
*
*/
bool stmReadMemory(int addr, byte * arr, int * len) {
stmFlushRx();
stmSend(0x11); // send read command
stmSend(0x11 ^ 0xFF); // send checksum
if (stmRead() != ACK) return false; // wait for ACK
byte byte3 = (addr >> 0) & 0xFF; // addr lsb
byte byte2 = (addr >> 8) & 0xFF;
byte byte1 = (addr >> 16) & 0xFF;
byte byte0 = (addr >> 24) & 0xFF; // addr msb
byte crc = byte0 ^ byte1 ^ byte2 ^ byte3; // checksum
stmSend(byte0);
stmSend(byte1);
stmSend(byte2);
stmSend(byte3);
stmSend(crc);
if (stmRead() != ACK) return false; // wait for ACK
byte len_byte = static_cast < byte > ( * len) - 1;
stmSend(len_byte); // length of read
stmSend(len_byte ^ 0xFF); // checksum
if (stmRead() != ACK) return false; // wait for ACK
for (size_t i = 0; i <= len_byte; i++) {
arr[i] = stmRead();
}
* len = len_byte; // update length of array
return true;
}
/*----------------------------------------------------------------
* stmEraseMemory, performs a global erase of all flash memory
* return: bool, true if successful
* param: none
*/
bool stmEraseMemory(void) {
stmFlushRx();
Serial.println("Sending erase command...");
stmSend(0x43); // send read command
stmSend(0x43 ^ 0xFF); // send checksum
if (stmRead() != ACK) return false; // wait for ACK
Serial.println("Sending global code...");
stmSend(0xFF); // send global erase code
stmSend(0xFF ^ 0xFF); // send checksum
if (stmRead() != ACK) return false; // wait for ACK
return true;
}
/*----------------------------------------------------------------
* stm_init, init STM USART connection
* return: bool, true if successful
* param: none
*/
bool stm_init() {
// STM waits for 0x7F to init USART
stmSend(0x7F);
byte recv = stmRead();
if (recv != ACK) return false; // ACK FAILED
// get chip ID
if (stmCmdGeneric(0x02, global_arr, & global_len)) {
byte msb = global_arr[0];
byte lsb = global_arr[1];
int chip_id = (msb << 8) + (lsb << 0);
Serial.print("Chip ID: ");
Serial.println(chip_id, HEX);
if (chip_id == 0x410) return true;
}
return false;
}
bool stmWriteMemory(int addr,
const byte * arr, int len) {
Serial.println("Entered write function");
if (len > 256) return false; // max write length
stmFlushRx(); // clear DUE RX buffer from STM32
if (addr & 0x3 || len & 0x3) {
Serial.println("Data not aligned");
}
stmSend(0x31); // send write command
stmSend(0x31 ^ 0xFF); // send checksum
if (stmRead() != ACK) return false; // wait for ACK
byte byte3 = (addr >> 0) & 0xFF; // addr lsb
byte byte2 = (addr >> 8) & 0xFF;
byte byte1 = (addr >> 16) & 0xFF;
byte byte0 = (addr >> 24); // & 0xFF; // addr msb
byte crc = byte0 ^ byte1 ^ byte2 ^ byte3; // checksum
stmSend(byte0);
stmSend(byte1);
stmSend(byte2);
stmSend(byte3);
stmSend(crc);
if (stmRead() != ACK) return false; // wait for ACK
// Serial.println("BEFORE ALIGNMENT");
//
// uint8_t cs, buf[256 + 2];
//
// byte lng = (len - 1) & 0xFF;
// stmSend(lng);
//
// cs = 0xFF;
// for (int i = 0; i < len; i++) {
// cs ^= arr[i];
// stmSend(arr[i]);
// }
//
// stmSend(cs);
// Serial.println("PROCESS COMPLETED");
// byte aligned_len = (len + 3) & ~3;
// cs = aligned_len - 1;
// buf[0] = aligned_len - 1;
// for (int i = 0; i < len; i++) {
// cs ^= arr[i];
// buf[i + 1] = arr[i];
// }
//
// stmSend(aligned_len - 1);
//
// /* padding data */
// for (int i = len; i < aligned_len; i++) {
// cs ^= 0xFF;
// buf[i + 1] = 0xFF;
// stmSend(buf[i]);
// }
//
// Serial.println("ENDED");
// stmSend(aligned_len + 2);
//
// buf[aligned_len + 1] = cs;
byte len_byte = static_cast < byte > (len) - 1; // number of bytes to write
crc = len_byte; // XOR(arr, len) checksum for later
stmSend(len_byte); // length of write
for (size_t i = 0; i < len; i++) {
crc ^= arr[i]; // calculate checksum
Serial.println(arr[i], HEX);
stmSend(arr[i]); // send data bytes
}
stmSend(crc); // send checksum
if (stmRead() != ACK) return false; // wait for ACK
return true;
}
bool downloadBinFile() {
delay(100);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
if (!SPIFFS.begin(true)) {
Serial.println("An Error has occurred while mounting SPIFFS");
return false;
}
if ((WiFi.status() == WL_CONNECTED)) { //Check the current connection status
HTTPClient http;
String fileName = "/ledBlink.hex";
Serial.println(fileName);
File f = SPIFFS.open(fileName, FILE_WRITE);
if (f) {
http.begin("http://esp32.surge.sh/ledBlink.hex");
int httpCode = http.GET();
if (httpCode > 0) {
// int binLength = http.getSize();
// Serial.println(binLength);
//
// uint8_t buff[256] = { 0 };
// WiFiClient *stream = http.getStreamPtr();
//
// int count = 0;
// int addr = 0x08000000;
//
// while (http.connected() && (binLength > 0 || binLength == -1)) {
// Serial.println(binLength);
// size_t size = stream->available();
// Serial.println(size);
//
// if (size) {
// int c = stream->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size));
// Serial.println(c);
//
// if( stmWriteMemory(addr, &buff[256*count], 256) )
// {
// Serial.println("pass");
// }
// else
// {
// Serial.println("fail");
// while(1);
// }
//
// Serial.println(buff[count]);
//
// addr += 256;
// count += 1;
//
// if (binLength > 0) {
// binLength -= c;
// }
//
// } else {
// Serial.println(size);
// Serial.println("Unable to get data");
// }
// }
String dataContent = http.getString();
Serial.println(dataContent);
f.print(dataContent);
} else {
Serial.println("HTTP GET request failed!");
}
Serial.println("File Write Succeeded!");
} else {
Serial.println("File mounting failed!");
}
f.close();
http.end(); //Free the resources
}
delay(100);
return true;
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
STM.begin(115200, SERIAL_8N1, 23, 22);
pinMode(BOOT0, OUTPUT);
pinMode(NRST, OUTPUT);
/*----------------------------------------------------------------
* printArr, prints array to console in HEX format
* return: none
* param: byte* arr, array to be printed
* int len, length of array
*
void printArr(byte* arr, int len)
{
for(int i = 0; i < len; i++)
{
Serial.print(arr[i], HEX);
Serial.print(" ");
}
Serial.println();
}
*/
if (downloadBinFile()) {
Serial.println("BIN FILE DOWNLOAD SUCCESSFUL");
} else {
Serial.println("BIN FILE DOWNLOAD FAILED");
}
delayMicroseconds(1227); // wait for STM bootloader to load
FlashMode();
if (stm_init() == true) {
Serial.println("INIT SUCCESSFUL");
} else {
Serial.println("INIT FAILED");
while (1);
}
// array to write: binary[21140]
int len = 21140;
int count = 0;
int addr = 0x08000000;
delay(2); // need delay or smtReadMemory here or else it breaks?
if (stmEraseMemory()) Serial.println("MEMORY ERASED");
else {
Serial.println("ERASE FAILED");
while (1);
}
File file2 = SPIFFS.open("/ledBlink.hex");
int fileSize = file2.size();
Serial.println(fileSize);
if (!file2) {
Serial.println("Failed to open file for reading");
return;
}
Serial.println("File Content:");
uint8_t buff[256] = { 0 };
int counter = 0;
int totalCounter = 0;
while (file2.available()) {
int oneByte = file2.read();
// Serial.println(oneByte);
// Serial.println("ONE BYTES READ");
buff[counter++] = oneByte;
if (counter >= 256) {
if (stmWriteMemory(addr, &buff[0], 256)) {
Serial.println("pass");
} else {
Serial.println("fail");
while (1);
}
// clear the counter
totalCounter += counter;
Serial.print("CURRENT ADDR IS ");
Serial.println(addr, HEX);
counter = 0;
addr += 256;
Serial.println("256 bytes flashed");
}
}
int remaining = fileSize - totalCounter;
for (int i = remaining; i < 256; i++) {
buff[i] = 0xFF;
}
if(stmWriteMemory(addr, &buff[0], 256)) {
Serial.println("pass");
} else {
Serial.println("fail");
}
Serial.print(remaining);
Serial.println(" bytes flashed");
file2.close();
// flashing from the array STARTS
//while (len > 256) {
// Serial.println(count);
// // write in 256 byte blocks
// if (stmWriteMemory(addr, & binary[256 * count], 256)) {
// Serial.println("pass");
// } else {
// Serial.println("fail");
// while (1);
// }
// addr += 256;
// count++;
// len -= 256;
//}
//stmWriteMemory(addr, & binary[(21140 - len)], len);
// while(1);
// flashing from the array ENDS
//Serial.println("STARTING BIN FILE FLASHING");
//
//// flashing the bin file STARTS
//FILE * file;
//char * file_buf;
//size_t bytes_read;
//unsigned int file_size = 0;
//char cont_len[8];
//
//file = fopen("/ledBlink.hex", "r");
//
//if (file != NULL) {
// fseek(file, 0, SEEK_END);
// file_size = ftell(file);
// fseek(file, 0, SEEK_SET);
// Serial.println(file_size);
//
// file_buf = (char * ) malloc(file_size);
// if (file_buf == NULL) {
// Serial.println("SPIFFS - Failed to allocate memory");
// } else {
// bytes_read = fread(file_buf, sizeof(file_buf), 1, file);
// Serial.println(bytes_read);
// fclose(file);
// }
//} else {
// Serial.println("DOWNLOADED FILE IS NULL");
//}
// flashing the bin file ENDS
}
void loop() {
// put your main code here, to run repeatedly:
}Flashing .bin file
#include "a.h"
#include <SPIFFS.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include "SPIFFS.h"
const char * ssid = "*";
const char * password = "*";
int len;
# define NRST 19
# define BOOT0 18
# define ACK 0x79 // acknowledge byte from STM
HardwareSerial STM(1);
byte global_arr[512] = {
0
};
int global_len = 512;
void FlashMode() { //Tested
digitalWrite(BOOT0, HIGH);
delay(100);
digitalWrite(NRST, LOW);
delay(50);
digitalWrite(NRST, HIGH);
delay(500);
}
/*----------------------------------------------------------------
* stmSend, send byte over STM serial connection
* return: none
* param: byte cmd, byte to send
*/
inline void stmSend(byte cmd) {
STM.write(cmd);
delay(5);
}
/*----------------------------------------------------------------
* stmRead, blocks until byte recv from STM
* return: byte, value recv from STM
* param: none
*/
inline byte stmRead() {
byte buf;
while (!STM.available()); // wait to recv byte
buf = STM.read();
Serial.println(buf);
return buf;
}
/*----------------------------------------------------------------
* stmCmdGeneric, executes chosen generic command
* return: bool, true if successful
* arr, values returned by command
* len, lengh of arr
* param: byte cmd, command code
* byte* arr, array to hold returned values
* int* len, max length of arr
*/
bool stmCmdGeneric(byte cmd, byte * arr, int * len) {
stmSend(cmd); // send command
stmSend(cmd ^ 0xFF); // send checksum
if (stmRead() != ACK) {
// ACKNOWLEDGE FAILED
return false;
} else {
int recv_len = stmRead() + 1; // number of bytes in response
if (recv_len > * len) recv_len = * len; // limit recv_len to size of arr
for (int i = 0; i < recv_len; i++) {
arr[i] = stmRead(); // load response into arr
}
* len = recv_len; // update arr length
return true;
}
}
/*----------------------------------------------------------------
* printArr, prints array to console in HEX format
* return: none
* param: array of any data type
*/
template < typename T, size_t len > void printArr(const T( & arr)[len]) {
for (size_t i = 0; i < len; i++) {
Serial.print(arr[i], HEX);
Serial.print(" ");
}
Serial.println();
}
/*----------------------------------------------------------------
* stmFlushRx, clears DUEs RX buffer from STM32
* return: none
* param: none
*/
void stmFlushRx(void) {
while (STM.available()) STM.read(); // clear DUEs RX buffer
}
/*----------------------------------------------------------------
* stmReadMemory, reads the flash memory of the STM32
* return: bool, true if successful
* arr, memory values returned from STM32
* len, number of bytes returned
* param: int addr, start address of flash memory to read
* byte* arr, array to store returned values
* int* len, number of bytes to read (max 256)
*
*/
bool stmReadMemory(int addr, byte * arr, int * len) {
stmFlushRx();
stmSend(0x11); // send read command
stmSend(0x11 ^ 0xFF); // send checksum
if (stmRead() != ACK) return false; // wait for ACK
byte byte3 = (addr >> 0) & 0xFF; // addr lsb
byte byte2 = (addr >> 8) & 0xFF;
byte byte1 = (addr >> 16) & 0xFF;
byte byte0 = (addr >> 24) & 0xFF; // addr msb
byte crc = byte0 ^ byte1 ^ byte2 ^ byte3; // checksum
stmSend(byte0);
stmSend(byte1);
stmSend(byte2);
stmSend(byte3);
stmSend(crc);
if (stmRead() != ACK) return false; // wait for ACK
byte len_byte = static_cast < byte > ( * len) - 1;
stmSend(len_byte); // length of read
stmSend(len_byte ^ 0xFF); // checksum
if (stmRead() != ACK) return false; // wait for ACK
for (size_t i = 0; i <= len_byte; i++) {
arr[i] = stmRead();
}
* len = len_byte; // update length of array
return true;
}
/*----------------------------------------------------------------
* stmEraseMemory, performs a global erase of all flash memory
* return: bool, true if successful
* param: none
*/
bool stmEraseMemory(void) {
stmFlushRx();
Serial.println("Sending erase command...");
stmSend(0x43); // send read command
stmSend(0x43 ^ 0xFF); // send checksum
if (stmRead() != ACK) return false; // wait for ACK
Serial.println("Sending global code...");
stmSend(0xFF); // send global erase code
stmSend(0xFF ^ 0xFF); // send checksum
if (stmRead() != ACK) return false; // wait for ACK
return true;
}
/*----------------------------------------------------------------
* stm_init, init STM USART connection
* return: bool, true if successful
* param: none
*/
bool stm_init() {
// STM waits for 0x7F to init USART
stmSend(0x7F);
byte recv = stmRead();
if (recv != ACK) return false; // ACK FAILED
// get chip ID
if (stmCmdGeneric(0x02, global_arr, & global_len)) {
byte msb = global_arr[0];
byte lsb = global_arr[1];
int chip_id = (msb << 8) + (lsb << 0);
Serial.print("Chip ID: ");
Serial.println(chip_id, HEX);
if (chip_id == 0x410) return true;
}
return false;
}
bool stmWriteMemory(int addr,
const byte * arr, int len) {
Serial.println("Entered write function");
if (len > 256) return false; // max write length
stmFlushRx(); // clear DUE RX buffer from STM32
if (addr & 0x3 || len & 0x3) {
Serial.println("Data not aligned");
}
stmSend(0x31); // send write command
stmSend(0x31 ^ 0xFF); // send checksum
if (stmRead() != ACK) return false; // wait for ACK
byte byte3 = (addr >> 0) & 0xFF; // addr lsb
byte byte2 = (addr >> 8) & 0xFF;
byte byte1 = (addr >> 16) & 0xFF;
byte byte0 = (addr >> 24); // & 0xFF; // addr msb
byte crc = byte0 ^ byte1 ^ byte2 ^ byte3; // checksum
stmSend(byte0);
stmSend(byte1);
stmSend(byte2);
stmSend(byte3);
stmSend(crc);
if (stmRead() != ACK) return false; // wait for ACK
Serial.println("BEFORE ALIGNMENT");
uint8_t cs, buf[256 + 2];
byte lng = (len - 1) & 0xFF;
stmSend(lng);
cs = 0xFF;
for (int i = 0; i < len; i++) {
cs ^= arr[i];
stmSend(arr[i]);
}
stmSend(cs);
Serial.println("PROCESS COMPLETED");
// byte aligned_len = (len + 3) & ~3;
// cs = aligned_len - 1;
// buf[0] = aligned_len - 1;
// for (int i = 0; i < len; i++) {
// cs ^= arr[i];
// buf[i + 1] = arr[i];
// }
//
// stmSend(aligned_len - 1);
//
// /* padding data */
// for (int i = len; i < aligned_len; i++) {
// cs ^= 0xFF;
// buf[i + 1] = 0xFF;
// stmSend(buf[i]);
// }
//
// Serial.println("ENDED");
// stmSend(aligned_len + 2);
//
// buf[aligned_len + 1] = cs;
// byte len_byte = static_cast < byte > (len) - 1; // number of bytes to write
// crc = len_byte; // XOR(arr, len) checksum for later
//
// stmSend(len_byte); // length of write
//
// for (size_t i = 0; i < len; i++) {
// crc ^= arr[i]; // calculate checksum
// stmSend(arr[i]); // send data bytes
// }
//
// stmSend(crc); // send checksum
if (stmRead() != ACK) return false; // wait for ACK
return true;
}
bool downloadBinFile() {
delay(100);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
if (!SPIFFS.begin(true)) {
Serial.println("An Error has occurred while mounting SPIFFS");
return false;
}
if ((WiFi.status() == WL_CONNECTED)) { //Check the current connection status
HTTPClient http;
WiFiClient* stream;
String fileName = "/final.bin";
Serial.println(fileName);
File f = SPIFFS.open(fileName, FILE_WRITE);
if (f) {
http.begin("http://esp32.surge.sh/final.bin");
int httpCode = http.GET();
len = http.getSize();
Serial.print("Lenght: ");
Serial.println(len);
if(http.connected()) {
Serial.println("Getting Stream");
stream = http.getStreamPtr();
while (stream->available()) {
char c = stream->read();
f.print(c);
//Serial.println(c);
}
Serial.println("Got Stream");
}
/*
if (httpCode > 0) {
String dataContent = http.getString();
Serial.println(dataContent);
////////
f.print(dataContent);
} else {
Serial.println("HTTP GET request failed!");
}
*/
Serial.println("File Write Succeeded!");
} else {
Serial.println("File mounting failed!");
}
f.close();
http.end(); //Free the resources
}
delay(100);
return true;
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
STM.begin(115200, SERIAL_8N1, 23, 22);
pinMode(BOOT0, OUTPUT);
pinMode(NRST, OUTPUT);
/*----------------------------------------------------------------
* printArr, prints array to console in HEX format
* return: none
* param: byte* arr, array to be printed
* int len, length of array
*
void printArr(byte* arr, int len)
{
for(int i = 0; i < len; i++)
{
Serial.print(arr[i], HEX);
Serial.print(" ");
}
Serial.println();
}
*/
if (downloadBinFile()) {
Serial.println("BIN FILE DOWNLOAD SUCCESSFUL");
} else {
Serial.println("BIN FILE DOWNLOAD FAILED");
}
delayMicroseconds(1227); // wait for STM bootloader to load
FlashMode();
if (stm_init() == true) {
Serial.println("INIT SUCCESSFUL");
} else {
Serial.println("INIT FAILED");
while (1);
}
// array to write: binary[21140]
int len = 21140;
int count = 0;
int addr = 0x08000000;
delay(2); // need delay or smtReadMemory here or else it breaks?
if (stmEraseMemory()) Serial.println("MEMORY ERASED");
else {
Serial.println("ERASE FAILED");
while (1);
}
File file2 = SPIFFS.open("/final.bin");
int fileSize = file2.size();
Serial.println(fileSize);
if (!file2) {
Serial.println("Failed to open file for reading");
return;
}
Serial.println("File Content:");
uint8_t buff[256] = { 0 };
int counter = 0;
int totalCounter = 0;
while (file2.available()) {
int oneByte = file2.read();
// Serial.println(oneByte);
// Serial.println("ONE BYTES READ");
buff[counter++] = oneByte;
if (counter >= 256) {
if (stmWriteMemory(addr, &buff[0], 256)) {
Serial.println("pass");
} else {
Serial.println("fail");
while (1);
}
// clear the counter
totalCounter += counter;
Serial.print("CURRENT ADDR IS ");
Serial.println(addr, HEX);
counter = 0;
addr += 256;
Serial.println("256 bytes flashed");
}
}
int remaining = fileSize - totalCounter;
for (int i = remaining; i < 256; i++) {
buff[i] = 0;
}
if(stmWriteMemory(addr, &buff[0], 256)) {
Serial.println("pass");
} else {
Serial.println("fail");
}
Serial.print(remaining);
Serial.println(" bytes flashed");
file2.close();
// flashing from the array STARTS
//while (len > 256) {
// Serial.println(count);
// // write in 256 byte blocks
// if (stmWriteMemory(addr, & binary[256 * count], 256)) {
// Serial.println("pass");
// } else {
// Serial.println("fail");
// while (1);
// }
// addr += 256;
// count++;
// len -= 256;
//}
//stmWriteMemory(addr, & binary[(21140 - len)], len);
// while(1);
// flashing from the array ENDS
//Serial.println("STARTING BIN FILE FLASHING");
//
//// flashing the bin file STARTS
//FILE * file;
//char * file_buf;
//size_t bytes_read;
//unsigned int file_size = 0;
//char cont_len[8];
//
//file = fopen("/ledBlink.hex", "r");
//
//if (file != NULL) {
// fseek(file, 0, SEEK_END);
// file_size = ftell(file);
// fseek(file, 0, SEEK_SET);
// Serial.println(file_size);
//
// file_buf = (char * ) malloc(file_size);
// if (file_buf == NULL) {
// Serial.println("SPIFFS - Failed to allocate memory");
// } else {
// bytes_read = fread(file_buf, sizeof(file_buf), 1, file);
// Serial.println(bytes_read);
// fclose(file);
// }
//} else {
// Serial.println("DOWNLOADED FILE IS NULL");
//}
// flashing the bin file ENDS
}
void loop() {
// put your main code here, to run repeatedly:
}Flashing .bin file - MicroPython (Boilerplate)
import urequests
from machine import UART
from machine import Pin
from time import sleep
WIFI_SSID = "*"
WIFI_PASSWORD = "*"
NRST = 19
BOOT0 = 18
ACK = 0x79
def FlashMode():
return
def stmSend(cmd):
return
def stmRead():
return
def stmCmdGeneric(cmd, arr, len):
return
def stmFlushRx():
return
def stmReadMemory(addr, arr, len):
return
def stmEraseMemory():
return
def stm_init():
return
def stmWriteMemory(addr, arr, len):
return
def wlan_connect(ssid='MYSSID', password='MYPASS'):
import network
wlan = network.WLAN(network.STA_IF)
if not wlan.active() or not wlan.isconnected():
wlan.active(True)
print('connecting to:', ssid)
wlan.connect(ssid, password)
while not wlan.isconnected():
pass
print('network config:', wlan.ifconfig())
def downloadFile(path):
url = 'http://esp32.surge.sh/final.bin'
response = urequests.get(url)
# print(response.content)
f = open(path, 'wb')""
f.write(response.content)
f.close()
def readFile(path):
f = open(path, 'rb')
data = [c for c in f.readline()]
f.close()
return data
# initialization of the UART serial port
uart = UART(2)
uart.init(baudrate=115200, rx=23, tx=22)
print(uart)
# initialization of the Pins
Pin(BOOT0, Pin.OUT)
Pin(NRST, Pin.OUT)
# connecting to WiFi
wlan_connect(WIFI_SSID, WIFI_PASSWORD)
# downloading the bin file
path = '/final.bin'
downloadFile(path)
# reading the bin file
allData = readFile(path)
print(allData)
sleep(1227)
FlashMode()
if stm_init() == True:
print("INIT SUCCESSFUL")
else:
print("INIT FAILED")
while(1)
len = 21140
count = 0
addr = 0x08000000
sleep(2)
if stmEraseMemory():
print("MEMORY ERASED")
else:
print("ERASE FAILED")
while(1)
while (len > 256):
print(count)
if stmWriteMemory(addr, 'c', 256):
print("pass")
else:
print("fail")
while(1)
addr += 256
count += 1
len -= 256
stmWriteMemory(addr, 'x', len)
print("STARTING BIN FILE FLASHING")Final Code
#include <WiFi.h>
#include <SPIFFS.h>
#include <HTTPClient.h>
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLE2902.h>
BLEServer *pServer = NULL;
BLECharacteristic * pTxCharacteristic;
bool deviceConnected = false;
bool oldDeviceConnected = false;
char ssid[32];
char password[32];
#define SERVICE_UUID "ffe0" // UART service UUID
#define CHARACTERISTIC_UUID_RX "ffe1"
#define CHARACTERISTIC_UUID_TX "ffe1"
///////// STM32 FLASH FUNCTIONS START /////////
int len;
# define NRST 19
# define BOOT0 18
# define ACK 0x79 // acknowledge byte from STM
HardwareSerial STM(1);
byte global_arr[512] = {
0
};
int global_len = 512;
void FlashMode() { //Tested
digitalWrite(BOOT0, HIGH);
delay(100);
digitalWrite(NRST, LOW);
delay(50);
digitalWrite(NRST, HIGH);
delay(500);
}
/*----------------------------------------------------------------
* stmSend, send byte over STM serial connection
* return: none
* param: byte cmd, byte to send
*/
inline void stmSend(byte cmd) {
STM.write(cmd);
delay(4);
}
/*----------------------------------------------------------------
* stmRead, blocks until byte recv from STM
* return: byte, value recv from STM
* param: none
*/
inline byte stmRead() {
byte buf;
while (!STM.available()); // wait to recv byte
buf = STM.read();
// Serial.println(buf);
return buf;
}
/*----------------------------------------------------------------
* stmCmdGeneric, executes chosen generic command
* return: bool, true if successful
* arr, values returned by command
* len, lengh of arr
* param: byte cmd, command code
* byte* arr, array to hold returned values
* int* len, max length of arr
*/
bool stmCmdGeneric(byte cmd, byte * arr, int * len) {
stmSend(cmd); // send command
stmSend(cmd ^ 0xFF); // send checksum
if (stmRead() != ACK) {
// ACKNOWLEDGE FAILED
return false;
} else {
int recv_len = stmRead() + 1; // number of bytes in response
if (recv_len > * len) recv_len = * len; // limit recv_len to size of arr
for (int i = 0; i < recv_len; i++) {
arr[i] = stmRead(); // load response into arr
}
* len = recv_len; // update arr length
return true;
}
}
/*----------------------------------------------------------------
* printArr, prints array to console in HEX format
* return: none
* param: array of any data type
*/
template < typename T, size_t len > void printArr(const T( & arr)[len]) {
for (size_t i = 0; i < len; i++) {
Serial.print(arr[i], HEX);
Serial.print(" ");
}
Serial.println();
}
/*----------------------------------------------------------------
* stmFlushRx, clears DUEs RX buffer from STM32
* return: none
* param: none
*/
void stmFlushRx(void) {
while (STM.available()) STM.read(); // clear DUEs RX buffer
}
/*----------------------------------------------------------------
* stmReadMemory, reads the flash memory of the STM32
* return: bool, true if successful
* arr, memory values returned from STM32
* len, number of bytes returned
* param: int addr, start address of flash memory to read
* byte* arr, array to store returned values
* int* len, number of bytes to read (max 256)
*
*/
bool stmReadMemory(int addr, byte * arr, int * len) {
stmFlushRx();
stmSend(0x11); // send read command
stmSend(0x11 ^ 0xFF); // send checksum
if (stmRead() != ACK) return false; // wait for ACK
byte byte3 = (addr >> 0) & 0xFF; // addr lsb
byte byte2 = (addr >> 8) & 0xFF;
byte byte1 = (addr >> 16) & 0xFF;
byte byte0 = (addr >> 24) & 0xFF; // addr msb
byte crc = byte0 ^ byte1 ^ byte2 ^ byte3; // checksum
stmSend(byte0);
stmSend(byte1);
stmSend(byte2);
stmSend(byte3);
stmSend(crc);
if (stmRead() != ACK) return false; // wait for ACK
byte len_byte = static_cast < byte > ( * len) - 1;
stmSend(len_byte); // length of read
stmSend(len_byte ^ 0xFF); // checksum
if (stmRead() != ACK) return false; // wait for ACK
for (size_t i = 0; i <= len_byte; i++) {
arr[i] = stmRead();
}
* len = len_byte; // update length of array
return true;
}
/*----------------------------------------------------------------
* stmEraseMemory, performs a global erase of all flash memory
* return: bool, true if successful
* param: none
*/
bool stmEraseMemory(void) {
stmFlushRx();
// Serial.println("Sending erase command...");
stmSend(0x43); // send read command
stmSend(0x43 ^ 0xFF); // send checksum
if (stmRead() != ACK) return false; // wait for ACK
// Serial.println("Sending global code...");
stmSend(0xFF); // send global erase code
stmSend(0xFF ^ 0xFF); // send checksum
if (stmRead() != ACK) return false; // wait for ACK
return true;
}
/*----------------------------------------------------------------
* stm_init, init STM USART connection
* return: bool, true if successful
* param: none
*/
bool stm_init() {
// STM waits for 0x7F to init USART
stmSend(0x7F);
byte recv = stmRead();
if (recv != ACK) return false; // ACK FAILED
// get chip ID
if (stmCmdGeneric(0x02, global_arr, & global_len)) {
byte msb = global_arr[0];
byte lsb = global_arr[1];
int chip_id = (msb << 8) + (lsb << 0);
Serial.print("Chip ID: ");
Serial.println(chip_id, HEX);
if (chip_id == 0x410) return true;
}
return false;
}
bool stmWriteMemory(int addr,
const byte * arr, int len) {
// Serial.println("Entered write function");
if (len > 256) return false; // max write length
stmFlushRx(); // clear DUE RX buffer from STM32
if (addr & 0x3 || len & 0x3) {
Serial.println("Data not aligned");
}
stmSend(0x31); // send write command
stmSend(0x31 ^ 0xFF); // send checksum
if (stmRead() != ACK) return false; // wait for ACK
byte byte3 = (addr >> 0) & 0xFF; // addr lsb
byte byte2 = (addr >> 8) & 0xFF;
byte byte1 = (addr >> 16) & 0xFF;
byte byte0 = (addr >> 24); // & 0xFF; // addr msb
byte crc = byte0 ^ byte1 ^ byte2 ^ byte3; // checksum
stmSend(byte0);
stmSend(byte1);
stmSend(byte2);
stmSend(byte3);
stmSend(crc);
if (stmRead() != ACK) return false; // wait for ACK
uint8_t cs, buf[256 + 2];
byte lng = (len - 1) & 0xFF;
stmSend(lng);
cs = 0xFF;
for (int i = 0; i < len; i++) {
cs ^= arr[i];
stmSend(arr[i]);
}
stmSend(cs);
if (stmRead() != ACK) return false; // wait for ACK
return true;
}
///////// STM32 FLASH FUNCTIONS END /////////
bool flashSTMFirmware() {
delay(100);
delayMicroseconds(1227); // wait for STM bootloader to load
FlashMode();
delay(100);
if (stm_init() == true) {
Serial.println("INIT SUCCESSFUL");
} else {
Serial.println("INIT FAILED");
while (1);
}
// array to write: binary[21140]
int len = 21140;
int count = 0;
int addr = 0x08000000;
delay(2); // need delay or smtReadMemory here or else it breaks?
delay(200);
if (stmEraseMemory()) {
Serial.println("MEMORY ERASED");
return true;
}
else {
Serial.println("ERASE FAILED");
return false;
}
}
bool downloadBinFile() {
if (!SPIFFS.begin(true)) {
Serial.println("An Error has occurred while mounting SPIFFS");
return false;
}
if ((WiFi.status() == WL_CONNECTED)) { //Check the current connection status
HTTPClient http;
WiFiClient* stream;
String fileName = "/final.bin";
Serial.println(fileName);
File f = SPIFFS.open(fileName, FILE_WRITE);
SPIFFS.begin(true);
if (f) {
http.begin("http://157.245.99.108:5000/STM32F429_TouchGFX_v3.binary");
int httpCode = http.GET();
len = http.getSize();
Serial.print("Length: ");
Serial.println(len);
if(http.connected()) {
// Serial.println("Getting Stream");
stream = http.getStreamPtr();
while (stream->available()) {
char c = stream->read();
f.print(c);
// Serial.println(c);
}
// Serial.println("Got Stream");
}
Serial.println("File Write Succeeded!");
} else {
Serial.println("File mounting failed!");
}
f.close();
http.end(); //Free the resources
}
// delay(100);
return true;
}
class MyServerCallbacks: public BLEServerCallbacks {
void onConnect(BLEServer* pServer) {
deviceConnected = true;
};
void onDisconnect(BLEServer* pServer) {
deviceConnected = false;
}
};
void constructSsid(std::string payload) {
int counter = 0;
uint8_t ssidLength = payload.length();
for (int i = 1; i < (ssidLength / 2); i++) {
ssid[counter++] = payload[i*2];
}
ssid[counter] = '\0';
}
void constructPassword(std::string payload) {
int counter = 0;
uint8_t passwordLength = payload.length();
for (int i = 1; i < (passwordLength / 2); i++) {
password[counter++] = payload[i*2];
}
password[counter] = '\0';
}
bool connectToWifi() {
Serial.println(ssid);
Serial.println(password);
WiFi.begin(ssid, password);
uint8_t retryCount = 0;
while ((WiFi.status() != WL_CONNECTED) && retryCount <= 4) {
delay(1000);
Serial.println("Connecting to WiFi..");
retryCount += 1;
}
if (WiFi.status() == WL_CONNECTED) {
return true;
}
return false;
}
bool compareData(std::string received, std::string predefined) {
int receivedLength = received.length();
int predefinedLength = predefined.length();
if ((receivedLength / 2) != predefinedLength) {
return false;
}
for (int i = 0; i < predefinedLength; i++) {
if (received[i * 2] != predefined[i]) {
return false;
}
}
return true;
}
void sendSomeDataBLE(uint8_t *message, int messageSize) {
uint8_t txValue = 0;
while (txValue < messageSize) {
pTxCharacteristic->setValue(&message[txValue], 1);
pTxCharacteristic->notify();
txValue++;
delay(100); // bluetooth stack will go into congestion, if too many packets are sent
}
}
String listOfWifiNetworks(int *messageLength) {
int n = min((int16_t)3, WiFi.scanNetworks());
String commaSeparatedNetworks = "{";
for (int i = 0; i < n; i++) {
commaSeparatedNetworks += WiFi.SSID(i);
if (WiFi.encryptionType(i) != WIFI_AUTH_OPEN) {
commaSeparatedNetworks += "$";
} else {
commaSeparatedNetworks += "#";
}
if (i != (n - 1)) {
commaSeparatedNetworks += ", ";
}
}
commaSeparatedNetworks += "}";
*messageLength = commaSeparatedNetworks.length();
return commaSeparatedNetworks;
}
class MyCallbacks: public BLECharacteristicCallbacks {
void onWrite(BLECharacteristic *pCharacteristic) {
std::string rxValue = pCharacteristic->getValue();
std::string lwnCommand = "lwn";
if (compareData(rxValue, lwnCommand)) {
Serial.println("lwn command received");
int messageLength = 0;
String netMessage = listOfWifiNetworks(&messageLength);
Serial.println(netMessage);
uint8_t* message = (uint8_t*)malloc(sizeof(uint8_t)*messageLength);
for (int i = 0; i < messageLength; i++) {
message[i] = netMessage[i];
}
// uint8_t* message[netMessage.length()] = netMessage.c_str(); // "{srm hostels, srm campus}";
sendSomeDataBLE(&message[0], messageLength);
}
std::string mdCommand = "md";
if (compareData(rxValue, mdCommand)) {
Serial.println("md command received");
uint8_t message[] = "{Wheat, 7.6, 12, 1, 2, 55, 1}";
sendSomeDataBLE(&message[0], sizeof(message)/sizeof(uint8_t));
}
if (rxValue[0] == '$') {
Serial.println("wifi ssid received");
constructSsid(rxValue);
}
if (rxValue[0] == '%') {
Serial.println("wifi password received");
constructPassword(rxValue);
}
std::string wcrCommand = "wcr";
if (compareData(rxValue, wcrCommand)) {
Serial.println("wcr command received");
uint8_t wcStatus[] = "N";
if (connectToWifi()) {
wcStatus[0] = 'Y';
}
Serial.print("Connection status: ");
Serial.println(wcStatus[0]);
sendSomeDataBLE(&wcStatus[0], sizeof(wcStatus)/sizeof(uint8_t));
}
std::string dlCommand = "dl";
if (compareData(rxValue, dlCommand)) {
Serial.println("dl command received");
uint8_t dlStatus[] = "N";
if (downloadBinFile()) {
dlStatus[0] = 'Y';
}
Serial.print("Bin file download status: ");
Serial.println(dlStatus[0]);
sendSomeDataBLE(&dlStatus[0], sizeof(dlStatus)/sizeof(uint8_t));
}
std::string flashCommand = "fl";
if (compareData(rxValue, flashCommand)) {
Serial.println("fl command received");
uint8_t flashStatus[] = "N";
if (flashSTMFirmware()) {
flashStatus[0] = 'Y';
}
Serial.print("STM32 flash status: ");
Serial.println(flashStatus[0]);
sendSomeDataBLE(&flashStatus[0], sizeof(flashStatus)/sizeof(uint8_t));
}
}
};
void setup() {
Serial.begin(115200);
// Create the BLE Device
BLEDevice::init("MA-404-00000");
// Create the BLE Server
pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());
// Create the BLE Service
BLEService *pService = pServer->createService(SERVICE_UUID);
// Create a BLE Characteristic
pTxCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID_TX,
BLECharacteristic::PROPERTY_NOTIFY
);
pTxCharacteristic->addDescriptor(new BLE2902());
BLECharacteristic * pRxCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID_RX,
BLECharacteristic::PROPERTY_WRITE
);
pRxCharacteristic->setCallbacks(new MyCallbacks());
// Start the service
pService->start();
// Start advertising
pServer->getAdvertising()->start();
Serial.println("Waiting a client connection to notify...");
// set up WiFi configurations
WiFi.mode(WIFI_STA);
delay(100);
}
void loop() {
// if (deviceConnected) {
// pTxCharacteristic->setValue(&message[txValue], 1);
// pTxCharacteristic->notify();
// txValue++;
// delay(10); // bluetooth stack will go into congestion, if too many packets are sent
// }
// disconnecting
if (!deviceConnected && oldDeviceConnected) {
delay(500); // give the bluetooth stack the chance to get things ready
pServer->startAdvertising(); // restart advertising
Serial.println("start advertising");
oldDeviceConnected = deviceConnected;
}
// connecting
if (deviceConnected && !oldDeviceConnected) {
// do stuff here on connecting
oldDeviceConnected = deviceConnected;
}
}ESP32 Firmware Code Setup
To set up a custom partitioning scheme here, we are using a CSV defining that:
- Copy partitioning_scheme.csv to Arduino partitions folder. For example:
C:\Users\X\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.3\tools\partitions(Windows)~/.arduino15/packages/esp32/hardware/esp32/1.0.4/tools/partitions(Linux) - Open boards.txt folder in Arduino toolchain with any text editor. For example:
C:\Users\X\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.3\boards.txt(Windows)~/.arduino15/packages/esp32/hardware/esp32/1.0.4/boards.txt(Linux) - Find the following line :
esp32.name=ESP32 Dev Moduleand then append to the end the following:esp32.menu.PartitionScheme.partitioning_scheme=Custom Partition (1.5MB APP/2.5MB SPIFFS) esp32.menu.PartitionScheme.partitioning_scheme.build.partitions=partitioning_scheme esp32.menu.PartitionScheme.partitioning_scheme.upload.maximum_size=1572864 - Open Arduino project and under Tools select Board: "ESP32 Dev Module“ and Partition Scheme: "Custom Partition (1.5MB APP/2.5MB SPIFFS)“
- (FIRST TIME ONLY) Uncomment the
SPIFFS.format()portion at line 715 → Upload to ESP32 → check progress of SPIFFS being formatted → Comment theSPIFFS.format()portion at line 715 → Re-upload to ESP32.
Now, we are ready to use the app to interact with the ESP32.
Controller App
Screenshots
Development Goals
To implement
- Connecting to WiFi
List the WiFi networks availableCustomer can select the one he wants to use and input the passwordSetup as ESP32 network, try to connectDisplay message to customer is connection was successful or failed - Search for updates
Communicate with STM32 and query the firmware versionCompare version with version available onlineIf available version is newer then we ask the user if they want to upgradeStart firmware download / upgrade process (at the end of the upgrade we need to switch boot pin and reset the STM32)
Blockers & Solutions
- Was able to flash .hex file successfully, but still no blinking. Why?
Remember that Intel Hex is the hex format we require, not the standard Hex. We must use this library logic to generate the equivalent Intel Hex format. This is a C# app (and must be compiled using Visual Studio).
- While downloading the .bin file and storing it into a file through
http.getString()does not work unlike .hex files?.bin files are non-text files and therefor
http.getString()won't work. We need to read it as a stream of characters and store into the output file.HTTPClient http; WiFiClient* stream; String fileName = "/payload.bin"; Serial.println(fileName); File f = SPIFFS.open(fileName, FILE_WRITE); if (f) { http.begin("http://server.sh/payload.bin"); int httpCode = http.GET(); len = http.getSize(); Serial.print("Lenght: "); Serial.println(len); if(http.connected()) { Serial.println("Getting Stream"); stream = http.getStreamPtr(); while (stream->available()) { char c = stream->read(); f.print(c); //Serial.println(c); } - How much data can be sent at once through BLE? And how continuously can it send / receive?
BLE can send 20 bytes of data at once. Also, we need to ensure that there's gap of 10ms between each packet sent through BLE.
More Reading
If this blog interested you, go ahead with reading more on ESP32 and STM32 posts. Also, a similar project was done recently, check it out - https://github.com/laukik-hase/OTA_update_STM32_using_ESP32!
Thank you :)



