├── main.c ├── rules.mk ├── rvk.c ├── rvk.h ├── sm.c ├── sm.h ├── smsched.c └── smsched.h /main.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 Ilya Zhuravlev 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining 5 | * a copy of this software and associated documentation files 6 | * (the "Software"), to deal in the Software without restriction, 7 | * including without limitation the rights to use, copy, modify, merge, 8 | * publish, distribute, sublicense, and/or sell copies of the Software, 9 | * and to permit persons to whom the Software is furnished to do so, 10 | * subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be 13 | * included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 19 | * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 20 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 21 | * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | */ 23 | 24 | #include "smsched.h" 25 | 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | 32 | #include "sm.h" 33 | 34 | static void f00d_init(const struct app_descriptor *app) { 35 | TRACEF("f00d_init\n"); 36 | 37 | smsched_init(); 38 | } 39 | 40 | command_t *test_cmd = (void*)0x50000000; // we have to use NS memory for command buffer 41 | 42 | static void f00d_entry(const struct app_descriptor *app, void *args) { 43 | TRACEF("f00d_entry\n"); 44 | 45 | task_t *t = smsched_create_task(sm, sm_size, 2); 46 | smsched_load_task(t); 47 | 48 | // wait for task to load 49 | while (t->state != 2) {} 50 | 51 | // submit cmd 1 52 | memset(test_cmd, 0, sizeof(*test_cmd)); 53 | test_cmd->len = sizeof(*test_cmd); 54 | test_cmd->cmd = 1; 55 | smsched_submit_command(test_cmd); 56 | 57 | // wait for cry2arm123 to trigger which indicates result 58 | while (!t->cry123) {}; t->cry123 = 0; 59 | 60 | // print output 61 | arch_invalidate_cache_range((addr_t)test_cmd, sizeof(*test_cmd)); 62 | hexdump(test_cmd, 0x100); 63 | 64 | // suspend our task 65 | smsched_suspend_current_task(); 66 | 67 | // wait for suspend to finish 68 | while (t->state != 1) {} 69 | 70 | // print suspend buffer 71 | arch_invalidate_cache_range((addr_t)t->suspendbuf, SUSPENDBUF_SIZE); 72 | hexdump(t->suspendbuf, 0x100); 73 | 74 | // resume the task 75 | smsched_load_task(t); // this function either starts or resumes the task 76 | 77 | // wait for resume 78 | while (t->state != 2) {} 79 | 80 | // submit cmd 2 81 | memset(test_cmd, 0, sizeof(*test_cmd)); 82 | test_cmd->len = sizeof(*test_cmd); 83 | test_cmd->cmd = 2; 84 | smsched_submit_command(test_cmd); 85 | 86 | // wait for cry2arm123 to trigger which indicates result 87 | while (!t->cry123) {}; t->cry123 = 0; 88 | 89 | // print output 90 | arch_invalidate_cache_range((addr_t)test_cmd, sizeof(*test_cmd)); 91 | hexdump(test_cmd, 0x100); 92 | 93 | TRACEF("all done\n"); 94 | } 95 | 96 | APP_START(f00d) 97 | .init = f00d_init, 98 | .entry = f00d_entry, 99 | APP_END 100 | -------------------------------------------------------------------------------- /rules.mk: -------------------------------------------------------------------------------- 1 | LOCAL_DIR := $(GET_LOCAL_DIR) 2 | 3 | MODULE := $(LOCAL_DIR) 4 | 5 | MODULE_SRCS += \ 6 | $(LOCAL_DIR)/main.c \ 7 | $(LOCAL_DIR)/rvk.c \ 8 | $(LOCAL_DIR)/sm.c \ 9 | $(LOCAL_DIR)/smsched.c 10 | 11 | include make/module.mk 12 | -------------------------------------------------------------------------------- /rvk.c: -------------------------------------------------------------------------------- 1 | unsigned char g_rvk_buf[1728] = { 2 | 0x53, 0x43, 0x45, 0x00, 0x03, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 3 | 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4 | 0xC0, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0xB7, 0x63, 0x0B, 0xE5, 0xFC, 0x39, 0x40, 0x4B, 0x69, 0xCB, 0x87, 0xDA, 0xB7, 0xEB, 0xFC, 0x68, 6 | 0x49, 0x82, 0x22, 0x9A, 0xF0, 0xAE, 0x8A, 0x6A, 0x48, 0x0A, 0x85, 0x34, 0xAB, 0x81, 0xC5, 0xB7, 7 | 0x83, 0x13, 0x2C, 0x76, 0xCE, 0x5A, 0x14, 0x8E, 0x78, 0xD3, 0x8C, 0x1A, 0x4F, 0xD3, 0xEC, 0x60, 8 | 0xE1, 0x34, 0xEA, 0x4F, 0xC4, 0x9A, 0x3D, 0xEF, 0xD5, 0xA4, 0x92, 0x07, 0x45, 0x0F, 0xC8, 0xB4, 9 | 0x19, 0x2E, 0x87, 0x7A, 0x0B, 0x98, 0x4C, 0x30, 0xD3, 0x68, 0xD6, 0xDA, 0x6A, 0x3E, 0xB3, 0x32, 10 | 0x64, 0x37, 0xEF, 0xDE, 0x74, 0x99, 0x62, 0xAD, 0x8B, 0x03, 0xE7, 0xAE, 0xDC, 0x06, 0xA2, 0x8E, 11 | 0xCF, 0x9B, 0xEF, 0x21, 0x77, 0xA8, 0xF3, 0xFD, 0xC8, 0xB0, 0xCF, 0xC5, 0xEF, 0x69, 0x2F, 0x44, 12 | 0x73, 0x43, 0xDB, 0x62, 0xC3, 0x0F, 0x6E, 0x9D, 0x53, 0xC5, 0x71, 0x9C, 0x53, 0x45, 0x59, 0xDA, 13 | 0xBE, 0x52, 0x44, 0x41, 0x5E, 0x93, 0x83, 0x79, 0xCA, 0x8D, 0x59, 0x20, 0xB0, 0x44, 0xC8, 0x6D, 14 | 0xFC, 0xCA, 0xF2, 0x30, 0xE0, 0xFD, 0xEB, 0xC5, 0xD2, 0x51, 0x98, 0x80, 0xC3, 0x4E, 0xD0, 0x0A, 15 | 0x22, 0xAC, 0x54, 0x85, 0xBD, 0xA3, 0x1C, 0xAB, 0xFA, 0xDD, 0xBF, 0x1D, 0xD5, 0x1C, 0x0E, 0x01, 16 | 0x1A, 0x31, 0x46, 0xD2, 0x09, 0x7A, 0xED, 0xD6, 0x59, 0xD9, 0xC5, 0x55, 0xBC, 0xFB, 0xCA, 0xD1, 17 | 0x56, 0x13, 0x51, 0xC8, 0xFA, 0xFC, 0xD3, 0xEE, 0xBD, 0xB5, 0xE0, 0x44, 0xB4, 0x18, 0x2F, 0x73, 18 | 0xB9, 0x9F, 0x80, 0x4B, 0xDD, 0x3D, 0xAD, 0x52, 0xCA, 0x48, 0xC0, 0xD0, 0x53, 0x88, 0xFE, 0x00, 19 | 0x59, 0xBD, 0x14, 0xBA, 0xC3, 0xB3, 0x7D, 0x98, 0xC5, 0xE3, 0x09, 0x86, 0x90, 0xFD, 0x2B, 0x60, 20 | 0x93, 0x00, 0xC6, 0xAA, 0x7C, 0xAC, 0xF5, 0xCB, 0xB0, 0x6E, 0x9F, 0x18, 0xBE, 0x76, 0x13, 0x7A, 21 | 0x7A, 0x88, 0xD2, 0x09, 0x01, 0x34, 0xB1, 0x6E, 0x77, 0x65, 0xC7, 0x47, 0xAA, 0xCD, 0xB6, 0xC1, 22 | 0xCA, 0xF1, 0x0F, 0x9E, 0x4C, 0x48, 0x25, 0x87, 0x93, 0xA5, 0x55, 0x1F, 0x03, 0x30, 0xC1, 0x72, 23 | 0x59, 0xFD, 0x2F, 0xC2, 0xBA, 0x2C, 0x51, 0xC2, 0x08, 0x89, 0x34, 0x2A, 0x2B, 0x69, 0x64, 0xB3, 24 | 0x7F, 0x3E, 0x98, 0xD7, 0x5D, 0xF5, 0x0A, 0xAC, 0x8A, 0x2C, 0xFE, 0x67, 0x1F, 0x2F, 0x70, 0x0F, 25 | 0x0E, 0xF8, 0x24, 0x8B, 0x89, 0x11, 0x8A, 0xB7, 0x07, 0x0B, 0xF0, 0x81, 0xFD, 0x0F, 0xE7, 0xE8, 26 | 0xB4, 0x9A, 0x55, 0x99, 0x51, 0x1C, 0x14, 0xB4, 0x78, 0xDF, 0x19, 0x63, 0xE3, 0x2A, 0xBE, 0x18, 27 | 0xE9, 0xDF, 0x95, 0xEA, 0x9C, 0x38, 0x7E, 0xFB, 0x77, 0xDE, 0x86, 0x98, 0x83, 0xA6, 0x2B, 0xD4, 28 | 0x3B, 0x2E, 0x55, 0x63, 0x7A, 0x3A, 0x8E, 0xA2, 0xB8, 0xD7, 0xCF, 0xBC, 0x8A, 0x1C, 0xB7, 0xCB, 29 | 0x4E, 0xA6, 0x2B, 0xFD, 0x39, 0xBD, 0x6C, 0x38, 0xC9, 0x57, 0x98, 0xBC, 0x66, 0xC1, 0x8C, 0xB1, 30 | 0xCA, 0x36, 0x46, 0x37, 0x31, 0x07, 0x3C, 0xC5, 0xC2, 0x94, 0x42, 0x60, 0x7F, 0x6E, 0x83, 0x14, 31 | 0xD5, 0xC7, 0x0C, 0x4D, 0x0C, 0x27, 0xF9, 0xFA, 0x24, 0xE7, 0x5B, 0x7C, 0x9D, 0x92, 0xA8, 0xED, 32 | 0xE7, 0x3D, 0xC6, 0xE3, 0x9F, 0x15, 0x02, 0xCD, 0x34, 0x06, 0x4F, 0x2E, 0x60, 0x0A, 0xB2, 0xE0, 33 | 0xF6, 0x65, 0x95, 0x45, 0x15, 0x01, 0x16, 0xFD, 0x1E, 0x7A, 0x0C, 0x43, 0x06, 0xF6, 0x88, 0xB9, 34 | 0xEF, 0x20, 0x4F, 0xC9, 0xCB, 0xC6, 0x9C, 0xFD, 0x4D, 0xAB, 0x61, 0xC6, 0x1C, 0xB6, 0x57, 0x08, 35 | 0xBA, 0xC6, 0xEC, 0x7B, 0x74, 0x5B, 0xDB, 0xA7, 0xAF, 0x3E, 0x16, 0x8D, 0xE2, 0x2B, 0x5B, 0x59, 36 | 0x8A, 0x1F, 0xB9, 0xE6, 0x58, 0x59, 0x9B, 0xA9, 0xCD, 0x48, 0x38, 0xCC, 0xE5, 0x2C, 0x94, 0xA7, 37 | 0xEA, 0x0B, 0x88, 0xE6, 0xD3, 0x0C, 0x88, 0xB5, 0xCC, 0x36, 0xAC, 0x86, 0x9F, 0xBE, 0xB6, 0xB7, 38 | 0xC7, 0xC5, 0xE4, 0xF6, 0xA2, 0x77, 0x68, 0xBB, 0x79, 0x1C, 0x32, 0xE6, 0x37, 0x5C, 0x8C, 0x32, 39 | 0xB1, 0xE2, 0x5D, 0x65, 0xC7, 0x1D, 0x1F, 0x2A, 0xF3, 0xF7, 0x3F, 0x0B, 0x96, 0x44, 0x01, 0x19, 40 | 0x7E, 0xF9, 0x8E, 0x90, 0xA6, 0x90, 0x06, 0x1D, 0x1A, 0xE2, 0x9F, 0x45, 0x31, 0xD7, 0x4A, 0xAE, 41 | 0x0A, 0xB9, 0x90, 0x77, 0xE5, 0x17, 0x2A, 0xE6, 0x4C, 0xAA, 0xFD, 0xBA, 0x0D, 0xC2, 0x93, 0xC2, 42 | 0xF0, 0x9F, 0xBE, 0xDB, 0xCC, 0xBE, 0xE2, 0x85, 0xC9, 0xFD, 0x03, 0xC1, 0x61, 0x31, 0x2C, 0xED, 43 | 0x3A, 0xD1, 0x89, 0xAD, 0x82, 0xDB, 0xEB, 0x89, 0x25, 0x80, 0x75, 0xDC, 0xBF, 0xB7, 0xEA, 0x7C, 44 | 0x7B, 0x3B, 0x92, 0x21, 0xB9, 0x7B, 0xDD, 0x22, 0x94, 0x86, 0xEC, 0xB2, 0xFA, 0x6E, 0xEC, 0x1F, 45 | 0x1D, 0x84, 0xA3, 0x0A, 0xAE, 0x07, 0x53, 0x0C, 0xD0, 0xFB, 0xA1, 0x31, 0xFD, 0x10, 0x75, 0x1C, 46 | 0x12, 0xD2, 0xC3, 0x46, 0xF0, 0x66, 0x25, 0x4E, 0x4F, 0x06, 0x4D, 0x79, 0x93, 0x47, 0xA0, 0xEC, 47 | 0x05, 0x03, 0x55, 0x8C, 0x05, 0xCD, 0xB6, 0x49, 0xC1, 0x13, 0xE7, 0xDE, 0x58, 0x49, 0x11, 0xF1, 48 | 0x64, 0xBB, 0x6A, 0xDB, 0x91, 0x4C, 0x80, 0x58, 0x6A, 0xD1, 0x48, 0x69, 0x0D, 0x42, 0xAC, 0xC0, 49 | 0x8F, 0xE7, 0x07, 0xFF, 0x8F, 0x7F, 0x4E, 0x4A, 0x6B, 0xE5, 0x00, 0x71, 0xBA, 0xF1, 0x49, 0xC1, 50 | 0xA0, 0x27, 0xBF, 0x25, 0x66, 0xC4, 0x65, 0xC2, 0x8E, 0xA4, 0xB9, 0xC6, 0xC5, 0xE2, 0x60, 0x9E, 51 | 0xA0, 0x87, 0xCB, 0xF6, 0xE5, 0x84, 0x4A, 0xB5, 0x5D, 0xFF, 0x56, 0xF7, 0x09, 0x3E, 0x47, 0x94, 52 | 0x93, 0x28, 0x27, 0x06, 0x36, 0x23, 0x91, 0x5E, 0x25, 0x94, 0x88, 0xD5, 0x9F, 0xAF, 0x3A, 0xC7, 53 | 0x2C, 0x42, 0x7C, 0x2E, 0xE8, 0x2F, 0x7A, 0xA3, 0x44, 0x03, 0x28, 0xF6, 0xDE, 0xFE, 0xA4, 0x17, 54 | 0x46, 0x76, 0xAD, 0x55, 0x93, 0xAD, 0x6E, 0x53, 0x97, 0xF5, 0x3F, 0xF0, 0xDE, 0xF1, 0x96, 0x72, 55 | 0x02, 0xCB, 0x44, 0xE6, 0x3C, 0x50, 0xCF, 0xCD, 0x41, 0xB7, 0xD2, 0x07, 0x53, 0x63, 0x41, 0x24, 56 | 0xCD, 0xAC, 0xD3, 0xA8, 0x04, 0x28, 0x62, 0x53, 0x7E, 0x02, 0xB4, 0xDB, 0x1F, 0x6E, 0x1E, 0x35, 57 | 0x23, 0x05, 0x12, 0xC7, 0x0F, 0xC9, 0x1B, 0x37, 0x45, 0x61, 0xDC, 0x4E, 0x72, 0x7B, 0x9F, 0xE0, 58 | 0xB3, 0xBB, 0xBB, 0x2F, 0x20, 0x49, 0x42, 0xDF, 0xFF, 0x7D, 0x02, 0x00, 0x1A, 0xA8, 0x1F, 0x20, 59 | 0xAD, 0x50, 0x5F, 0x7E, 0xE9, 0x9C, 0x9F, 0x60, 0x37, 0x5A, 0xA2, 0xBB, 0x6F, 0xA3, 0x93, 0x1C, 60 | 0x2F, 0x74, 0xCD, 0xB8, 0x04, 0x8F, 0xDB, 0x82, 0xDB, 0xB2, 0xD6, 0xA5, 0xEF, 0x8C, 0xFD, 0x62, 61 | 0x4D, 0x9B, 0x4C, 0xC9, 0x56, 0xB3, 0x8A, 0x3F, 0x2F, 0x1F, 0x66, 0x84, 0x0F, 0x4B, 0x91, 0x6C, 62 | 0x16, 0x08, 0xFF, 0x13, 0xC8, 0xC6, 0x70, 0x8C, 0xA2, 0x93, 0x3B, 0xD0, 0x37, 0xF1, 0x89, 0xB6, 63 | 0xE1, 0x66, 0xB4, 0x8B, 0xC1, 0x12, 0xEB, 0xEA, 0xD1, 0xFE, 0xBB, 0xE9, 0xA9, 0xF2, 0x90, 0xB8, 64 | 0xE3, 0x83, 0xC5, 0x26, 0x2E, 0xFD, 0x05, 0x71, 0xC6, 0x97, 0xE1, 0x2F, 0x02, 0x56, 0x86, 0xAD, 65 | 0x35, 0x7C, 0x2B, 0x8F, 0x8D, 0x74, 0x1F, 0x18, 0x4E, 0xEC, 0xE8, 0x14, 0x0C, 0x3D, 0xDE, 0xD4, 66 | 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x69, 0x01, 0x00, 0x00, 67 | 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 68 | 0x79, 0x5B, 0xF5, 0x4A, 0x22, 0x1D, 0x4C, 0x38, 0x13, 0x8F, 0xFC, 0x03, 0xF8, 0xFA, 0xD5, 0x28, 69 | 0x49, 0xE4, 0x5B, 0x31, 0x4E, 0xCB, 0xE8, 0xC1, 0x7C, 0xE7, 0x31, 0xAD, 0x0C, 0xAD, 0xE9, 0xAE, 70 | 0x49, 0xBE, 0xE5, 0xD8, 0x6B, 0xD4, 0x13, 0x42, 0x4C, 0x1E, 0x74, 0x24, 0x9A, 0xD9, 0xCD, 0x3C, 71 | 0xB9, 0xB6, 0x2C, 0x87, 0xA2, 0xF6, 0xE8, 0x70, 0xD5, 0x3F, 0xD9, 0x4B, 0xAE, 0x29, 0x81, 0x60, 72 | 0x61, 0x6C, 0xC7, 0x3A, 0xD7, 0x6C, 0x0B, 0x15, 0x20, 0x46, 0x34, 0x9D, 0xDF, 0x3E, 0xC9, 0xD9, 73 | 0x4F, 0x3E, 0xB2, 0x2C, 0x00, 0x25, 0x9C, 0x92, 0x80, 0x22, 0xA5, 0xA4, 0x90, 0x9A, 0xE1, 0x44, 74 | 0x58, 0xFF, 0x41, 0x58, 0x8D, 0x04, 0xC7, 0xDE, 0x94, 0xF0, 0xA2, 0xB9, 0x55, 0xCE, 0x8B, 0x8F, 75 | 0xAE, 0x84, 0x18, 0x05, 0xA4, 0x2B, 0xD9, 0x8E, 0xDE, 0xF0, 0xC7, 0x4E, 0x02, 0xCC, 0x4A, 0x91, 76 | 0xC6, 0x14, 0x30, 0x2C, 0x06, 0x4C, 0x7E, 0x5B, 0xFD, 0xC6, 0x49, 0x4D, 0x0C, 0x32, 0x65, 0xC1, 77 | 0x7A, 0x12, 0x8C, 0xE5, 0xAB, 0x6B, 0xD0, 0x00, 0xF0, 0x3E, 0xD7, 0x09, 0x30, 0xC5, 0x56, 0x15, 78 | 0x0D, 0xE2, 0xD5, 0x98, 0xB3, 0xAC, 0x30, 0x07, 0x94, 0x42, 0x51, 0xA3, 0xA7, 0xDF, 0xEB, 0xA3, 79 | 0xD6, 0x0A, 0x69, 0x89, 0x50, 0x63, 0xCE, 0x9F, 0x19, 0x81, 0x28, 0x21, 0xA6, 0x70, 0x84, 0xA6, 80 | 0xBF, 0x0C, 0xBD, 0x22, 0x54, 0xD0, 0xEC, 0x4C, 0xCB, 0xF9, 0x7C, 0xCF, 0x45, 0x1E, 0xA8, 0x5E, 81 | 0x92, 0xA2, 0x39, 0x00, 0xEC, 0x79, 0xBB, 0x29, 0x88, 0xDF, 0x1A, 0xF9, 0xB8, 0x4D, 0x48, 0xBE, 82 | 0x75, 0xCB, 0x79, 0xD5, 0x88, 0xD7, 0x61, 0x45, 0xCE, 0x6D, 0x1A, 0x12, 0x04, 0x43, 0x7F, 0x5B, 83 | 0x1B, 0xB0, 0x17, 0x12, 0xE9, 0x24, 0xF8, 0xF6, 0x89, 0x14, 0x5E, 0x14, 0x95, 0xD4, 0xC0, 0x0C, 84 | 0x8E, 0x4A, 0x67, 0xA9, 0xF4, 0x86, 0x28, 0x73, 0x35, 0x92, 0xBB, 0xE9, 0x06, 0xA5, 0x8C, 0x05, 85 | 0xD4, 0x5E, 0xEB, 0x8F, 0x6A, 0x3B, 0x03, 0x7B, 0xA4, 0x12, 0xA2, 0x5F, 0xE1, 0xC3, 0x94, 0x17, 86 | 0xEB, 0xB0, 0x05, 0x87, 0xA4, 0x52, 0x8D, 0x6F, 0xEA, 0x64, 0x3A, 0xC2, 0x80, 0xC4, 0x55, 0x82, 87 | 0xCE, 0xFA, 0x7D, 0xC4, 0xF9, 0x31, 0x11, 0x44, 0x95, 0x53, 0x95, 0x7D, 0x4D, 0x04, 0x4D, 0xA4, 88 | 0x46, 0x9A, 0x02, 0x9D, 0x29, 0xBD, 0xB5, 0x33, 0xF7, 0x09, 0x28, 0xDD, 0x62, 0x03, 0x18, 0xEF, 89 | 0x0E, 0x7C, 0x81, 0xFA, 0x55, 0x84, 0x47, 0x57, 0xF8, 0x0E, 0x69, 0x50, 0xB1, 0x74, 0x4D, 0xDC, 90 | 0x86, 0xBF, 0x60, 0xC3, 0x7A, 0x7C, 0x16, 0x20, 0x0C, 0x94, 0x04, 0x04, 0x4F, 0xCD, 0x90, 0xCC, 91 | 0x07, 0xBA, 0xAA, 0x2C, 0xD0, 0x59, 0xE3, 0x5E, 0xFA, 0x7F, 0xF2, 0x59, 0x4A, 0x61, 0x8A, 0x0E, 92 | 0x66, 0x16, 0x55, 0x62, 0x72, 0xB7, 0xFF, 0xB4, 0x29, 0x17, 0x26, 0xD9, 0x0B, 0x1C, 0x50, 0x5D, 93 | 0x0A, 0x84, 0x46, 0x73, 0xD7, 0x88, 0xC5, 0x5F, 0x0C, 0x80, 0x63, 0x17, 0x78, 0x3C, 0xE8, 0x6F, 94 | 0x63, 0x5B, 0xC2, 0x87, 0xD9, 0x61, 0x38, 0x45, 0xB6, 0x56, 0x07, 0x7B, 0x67, 0xF8, 0xF5, 0x28, 95 | 0x63, 0xE5, 0x0D, 0x7F, 0x6E, 0x27, 0xA4, 0x5C, 0x4D, 0x94, 0x24, 0x5E, 0xCF, 0xB5, 0x2F, 0x7C, 96 | 0x9D, 0x04, 0xC7, 0xDE, 0xC6, 0xAA, 0x46, 0xC2, 0xBF, 0x01, 0x21, 0x6A, 0xD3, 0xF7, 0x49, 0x95, 97 | 0x86, 0xBD, 0xCB, 0xD3, 0x1D, 0xD8, 0x76, 0x80, 0x55, 0x5C, 0xBB, 0xC4, 0x52, 0xB1, 0xCD, 0xBD, 98 | 0x3A, 0xA1, 0xDB, 0x74, 0x6A, 0x90, 0x2F, 0x45, 0xEB, 0xFF, 0x7E, 0x05, 0x9E, 0x96, 0xE4, 0x0A, 99 | 0x0F, 0x79, 0x7A, 0x87, 0x3E, 0x22, 0xBE, 0xAD, 0x75, 0xC5, 0xAD, 0xF1, 0x6D, 0xFA, 0x88, 0x06, 100 | 0x69, 0x25, 0xF4, 0x09, 0x71, 0x86, 0xFD, 0x30, 0x8B, 0xEC, 0x87, 0x5A, 0x3D, 0xE2, 0x5A, 0x4F, 101 | 0x0F, 0x89, 0xBE, 0x94, 0xF8, 0x3E, 0xEA, 0xD0, 0x12, 0x5B, 0x46, 0x1D, 0x53, 0x5A, 0x5F, 0xE0, 102 | 0x22, 0x48, 0x84, 0xDB, 0x58, 0x4E, 0xFC, 0x4A, 0xB3, 0xEA, 0x2B, 0x90, 0xB8, 0xF1, 0xF0, 0x15, 103 | 0x76, 0x9A, 0x42, 0x0D, 0x31, 0x7C, 0x8F, 0x93, 0xAC, 0x78, 0xD5, 0x85, 0x45, 0xFC, 0x8A, 0x7E, 104 | 0x30, 0x86, 0xA3, 0x3B, 0x75, 0x33, 0x71, 0x89, 0xA3, 0x1D, 0x7A, 0xD0, 0x6E, 0x18, 0x30, 0x22, 105 | 0xA4, 0x35, 0x52, 0xB2, 0xF7, 0xCB, 0xC3, 0x0C, 0x49, 0x47, 0xEA, 0x5D, 0xF0, 0xFD, 0xD4, 0xEF, 106 | 0xBC, 0xDC, 0x98, 0xE2, 0xA9, 0xDF, 0xA4, 0x43, 0xDF, 0x01, 0x7E, 0x43, 0x14, 0xA4, 0xB1, 0x42, 107 | 0x9A, 0xB7, 0x65, 0x4D, 0x47, 0x16, 0x53, 0x81, 0xDE, 0x89, 0x9D, 0x35, 0xB2, 0x4E, 0x3A, 0x82, 108 | 0xB9, 0xF3, 0xA3, 0x4E, 0x7A, 0x18, 0x90, 0x84, 0x86, 0xD8, 0xC3, 0xE5, 0x02, 0x92, 0x48, 0xB5, 109 | 0x8E, 0xD8, 0x84, 0xBD, 0xAB, 0xDC, 0x3A, 0x68, 0xB9, 0xD9, 0x3A, 0xDB, 0xCD, 0x2D, 0x41, 0xDF 110 | }; 111 | 112 | unsigned g_rvk_size = sizeof(g_rvk_buf); 113 | -------------------------------------------------------------------------------- /rvk.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | extern unsigned char g_rvk_buf[]; 4 | extern unsigned g_rvk_size; 5 | -------------------------------------------------------------------------------- /sm.c: -------------------------------------------------------------------------------- 1 | unsigned char sm[9964] = { 2 | 0x53, 0x43, 0x45, 0x00, 0x03, 0x00, 0x00, 0x00, 0x40, 0x01, 0x01, 0x00, 0x70, 0x03, 0x00, 0x00, 3 | 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 4 | 0xEC, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 5 | 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 6 | 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 7 | 0xFC, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 8 | 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 9 | 0xB0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 10 | 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 11 | 0x00, 0x00, 0x00, 0x20, 0x69, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 12 | 0x7F, 0x45, 0x4C, 0x46, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 13 | 0x02, 0x00, 0x0D, 0xF0, 0x01, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x80, 0x00, 0x34, 0x00, 0x00, 0x00, 14 | 0xFC, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x06, 0x08, 0x34, 0x00, 0x20, 0x00, 0x01, 0x00, 0x28, 0x00, 15 | 0x06, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 16 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xB0, 0x80, 0x00, 0x00, 0xB0, 0x80, 0x00, 17 | 0xD8, 0x0D, 0x00, 0x00, 0xE0, 0x1D, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 18 | 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 19 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 20 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 21 | 0x04, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 22 | 0x62, 0x7C, 0xB1, 0x80, 0x8A, 0xB9, 0x38, 0xE3, 0x2C, 0x8C, 0x09, 0x17, 0x08, 0x72, 0x6A, 0x57, 23 | 0x9E, 0x25, 0x86, 0xE4, 0x52, 0xF3, 0x81, 0x14, 0x98, 0xD0, 0xA2, 0x56, 0x80, 0x34, 0xC7, 0x33, 24 | 0xEE, 0x64, 0x89, 0x0A, 0x76, 0x89, 0xD6, 0x15, 0x62, 0x62, 0xC8, 0x30, 0xDA, 0x79, 0x38, 0xC6, 25 | 0xF7, 0x55, 0x2B, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 26 | 0x06, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 27 | 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 28 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 29 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 30 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 31 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 32 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 33 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 34 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 35 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 36 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 37 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 38 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 39 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 40 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 41 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 42 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 43 | 0x07, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 44 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 45 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 46 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 47 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 48 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 49 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 50 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 51 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 52 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 53 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 54 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 55 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 56 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 57 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 58 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 59 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 60 | 0x55, 0x72, 0x78, 0x0E, 0x9E, 0xA4, 0xC0, 0x8E, 0xA8, 0xF2, 0x70, 0x77, 0xC8, 0xFD, 0x11, 0xA6, 61 | 0x97, 0x0B, 0xE6, 0x46, 0x6E, 0x32, 0xAA, 0xFE, 0x2C, 0xD7, 0xBD, 0x83, 0x75, 0xCC, 0xDF, 0x0A, 62 | 0xC7, 0xFA, 0xFB, 0x5E, 0x7A, 0x36, 0xCE, 0xA6, 0x57, 0x52, 0x49, 0x03, 0x35, 0xBD, 0x9C, 0xED, 63 | 0x1A, 0x64, 0x00, 0xBA, 0x56, 0x0C, 0x9F, 0x7A, 0x41, 0x72, 0xEB, 0xD8, 0x97, 0x0E, 0x21, 0xA2, 64 | 0xF6, 0xF6, 0xF7, 0xCA, 0x2F, 0x42, 0x02, 0x92, 0x11, 0x1F, 0xB5, 0x3D, 0xA8, 0xC7, 0x38, 0x83, 65 | 0x57, 0xE5, 0x20, 0x96, 0xC5, 0xE5, 0xCD, 0x18, 0x49, 0x5E, 0x96, 0x48, 0x60, 0x2E, 0xB5, 0x12, 66 | 0x2A, 0x60, 0x16, 0x12, 0xF7, 0x8C, 0x5A, 0x60, 0x80, 0x6B, 0x8F, 0x86, 0xB9, 0x6E, 0x99, 0xD3, 67 | 0x33, 0x07, 0xB2, 0xF5, 0x79, 0x2E, 0xA9, 0x04, 0x10, 0x31, 0x76, 0x20, 0x26, 0x5F, 0x06, 0xD1, 68 | 0xCA, 0xBA, 0x98, 0xF4, 0x26, 0x9B, 0x8D, 0x55, 0x58, 0xD7, 0xC3, 0x7E, 0xAC, 0x64, 0xB8, 0xB5, 69 | 0x63, 0x52, 0x2D, 0x82, 0x83, 0x5D, 0x70, 0xD3, 0x5A, 0xF6, 0x8C, 0x11, 0xCB, 0xEB, 0x56, 0xA0, 70 | 0xEE, 0xEE, 0xFE, 0x98, 0x04, 0x88, 0x7E, 0x53, 0xF3, 0xAB, 0x56, 0x9C, 0x66, 0x4F, 0x6C, 0xAB, 71 | 0xB3, 0x30, 0x97, 0xB2, 0x3E, 0x50, 0x6F, 0x7E, 0x0A, 0x27, 0x13, 0x41, 0x9E, 0xE1, 0x37, 0xC3, 72 | 0x29, 0x13, 0x5E, 0x0A, 0x9A, 0x55, 0x7E, 0xB5, 0x40, 0x22, 0xA2, 0x71, 0x5A, 0x70, 0x80, 0x3B, 73 | 0xA4, 0x78, 0x23, 0x5B, 0x42, 0x75, 0x55, 0xD0, 0xEE, 0x6B, 0xC0, 0x74, 0x25, 0xAF, 0xC9, 0x64, 74 | 0xCF, 0x70, 0xAF, 0xD0, 0x00, 0xB8, 0x98, 0x39, 0x5C, 0xA3, 0xDC, 0xBA, 0x04, 0x0F, 0x15, 0xD8, 75 | 0xD9, 0x42, 0x16, 0x57, 0x9C, 0x43, 0x94, 0xA5, 0xD8, 0x38, 0x85, 0xCF, 0x39, 0xDC, 0xF5, 0xD9, 76 | 0xA1, 0x31, 0x8C, 0xAD, 0x28, 0x9E, 0xBF, 0x11, 0xD5, 0x94, 0xDB, 0xA1, 0x41, 0x76, 0x87, 0xD5, 77 | 0x57, 0xD6, 0xC6, 0xFF, 0x24, 0x9C, 0x4C, 0xBF, 0xB5, 0x65, 0x56, 0xDB, 0x89, 0x33, 0x85, 0x74, 78 | 0xA6, 0x64, 0x25, 0x42, 0x88, 0xE9, 0xC4, 0x26, 0x8D, 0x72, 0xA4, 0x14, 0x30, 0xA8, 0xA5, 0xA2, 79 | 0x33, 0xC5, 0xB8, 0xBF, 0x71, 0xFB, 0xF6, 0xAC, 0x11, 0xDC, 0xDD, 0xAB, 0x18, 0x90, 0x2B, 0xDC, 80 | 0x2E, 0x49, 0xAB, 0xD5, 0xCA, 0x73, 0xC1, 0x20, 0xDB, 0xBC, 0x40, 0xE5, 0x92, 0xE7, 0x68, 0xD5, 81 | 0xA3, 0xEA, 0x88, 0x1C, 0x81, 0x72, 0x56, 0xC5, 0xB5, 0xB2, 0x99, 0x13, 0x08, 0xCC, 0x3F, 0xB8, 82 | 0x45, 0x14, 0x56, 0x4B, 0x87, 0xBA, 0x8B, 0xA1, 0xCD, 0xCF, 0xB6, 0x47, 0x7F, 0x64, 0x74, 0x58, 83 | 0x0A, 0x9A, 0x8D, 0x13, 0xCA, 0xD2, 0xF9, 0x4D, 0xAD, 0x64, 0xE3, 0xC5, 0x2E, 0xF1, 0xEC, 0x04, 84 | 0xD6, 0x85, 0xFE, 0x88, 0x69, 0x73, 0xFA, 0xAC, 0xED, 0x11, 0x23, 0x53, 0x5F, 0x24, 0x22, 0xB3, 85 | 0x7F, 0xC2, 0x98, 0xD3, 0xFE, 0xF0, 0x61, 0x85, 0x9B, 0x32, 0x6C, 0x4A, 0x6B, 0xA6, 0xC7, 0xF7, 86 | 0xE1, 0x4A, 0xEF, 0x2D, 0x23, 0x2C, 0x32, 0x63, 0x1A, 0x31, 0xB0, 0xC7, 0x3C, 0x17, 0xBA, 0xCE, 87 | 0x9A, 0x90, 0xF8, 0x35, 0x21, 0x86, 0x28, 0x66, 0xC5, 0x02, 0x79, 0x18, 0xFC, 0xA4, 0xB5, 0x49, 88 | 0x51, 0x5D, 0xD6, 0x1A, 0x31, 0xA0, 0xA4, 0x9A, 0xE9, 0x4B, 0x9F, 0x3C, 0xE1, 0x06, 0xFE, 0x2F, 89 | 0xA0, 0xB8, 0x83, 0xC0, 0x32, 0x96, 0x3E, 0x62, 0xE7, 0x84, 0xF0, 0x58, 0x6F, 0xCB, 0xFD, 0x44, 90 | 0x24, 0x04, 0x6E, 0x22, 0x09, 0xC2, 0x04, 0x96, 0x00, 0x99, 0xB5, 0x21, 0x84, 0x3C, 0xD9, 0xE8, 91 | 0x7B, 0x23, 0xF1, 0xCB, 0xAB, 0xDF, 0x93, 0x48, 0x4E, 0x07, 0xE6, 0xB8, 0x6D, 0x81, 0xBA, 0x88, 92 | 0x7E, 0x40, 0x9D, 0xD8, 0x3C, 0x40, 0xA6, 0x7C, 0x10, 0xAB, 0xC1, 0x92, 0x7D, 0xC6, 0x7A, 0x8C, 93 | 0xDD, 0x15, 0x49, 0x5C, 0xAD, 0xE2, 0xE3, 0x4F, 0x36, 0xBC, 0x6A, 0x26, 0xBB, 0x8D, 0x9D, 0x66, 94 | 0xB9, 0x50, 0x94, 0xAB, 0x59, 0x60, 0x58, 0x1F, 0x09, 0x7E, 0xE8, 0xC7, 0xB4, 0x02, 0xA7, 0x17, 95 | 0x9D, 0xCE, 0xE6, 0xED, 0xEA, 0x80, 0x67, 0xDD, 0xFF, 0x3E, 0x7F, 0x0F, 0xC6, 0x2B, 0xF2, 0x6F, 96 | 0x60, 0xF6, 0x82, 0xCC, 0x95, 0xF1, 0x8D, 0xDC, 0xEB, 0x82, 0x55, 0xF4, 0xAB, 0xCF, 0xA8, 0x34, 97 | 0xE9, 0x5D, 0x5C, 0x47, 0x99, 0xA9, 0xC7, 0x1E, 0x7A, 0x82, 0xE5, 0x88, 0x8E, 0x07, 0x53, 0xA1, 98 | 0xA4, 0x2C, 0xD8, 0xC1, 0x1D, 0xAA, 0xAE, 0x00, 0x48, 0xDB, 0xD0, 0xDD, 0x5C, 0x3F, 0x63, 0x4A, 99 | 0xEA, 0xE9, 0xEA, 0xC8, 0x7F, 0xBB, 0x37, 0x21, 0x2F, 0x5D, 0xF8, 0x64, 0xFE, 0x64, 0xF4, 0xDF, 100 | 0x8D, 0xE8, 0xA6, 0x4F, 0xFD, 0x2E, 0xB2, 0x3C, 0xAD, 0x0C, 0x25, 0xDE, 0x54, 0x84, 0xBE, 0x0F, 101 | 0x47, 0xA3, 0xF3, 0xF4, 0x1A, 0x30, 0x3F, 0x3F, 0x79, 0x7A, 0x8C, 0x55, 0xC1, 0x3B, 0x2E, 0xD2, 102 | 0xF2, 0x8B, 0x3E, 0x27, 0x9A, 0x26, 0x5D, 0x1F, 0x34, 0x2D, 0xA4, 0x30, 0x01, 0x8D, 0x11, 0x95, 103 | 0x90, 0xDC, 0xEA, 0x1D, 0xB5, 0xBB, 0x60, 0x1F, 0x1F, 0xBA, 0x2D, 0xE2, 0x19, 0xD5, 0x3E, 0x89, 104 | 0x85, 0x4C, 0x78, 0xCF, 0xDE, 0xAD, 0x16, 0xCB, 0x24, 0xD1, 0x6D, 0xB8, 0x40, 0x7A, 0xF4, 0x4F, 105 | 0x70, 0x2B, 0xC7, 0x6E, 0x53, 0x15, 0xC0, 0x6D, 0xEA, 0x90, 0xA6, 0x0A, 0x7F, 0x9D, 0x51, 0xFB, 106 | 0x83, 0x1A, 0xE0, 0x58, 0xAB, 0xE1, 0x86, 0x02, 0xEF, 0xC6, 0xA0, 0x88, 0x36, 0xC7, 0xCB, 0x09, 107 | 0x20, 0x2B, 0xBC, 0xA0, 0xC9, 0xE2, 0x3C, 0x33, 0xC3, 0x0D, 0x3C, 0xB3, 0x0D, 0x8B, 0x6F, 0xB7, 108 | 0xA1, 0x2D, 0x2D, 0x3E, 0xCE, 0xBF, 0xD6, 0x22, 0x77, 0xCD, 0x02, 0x9E, 0x7A, 0x86, 0x40, 0xDC, 109 | 0xB7, 0xBB, 0x56, 0x4A, 0x62, 0xCA, 0x37, 0x25, 0x12, 0x35, 0x06, 0xA4, 0x95, 0x24, 0x80, 0x58, 110 | 0x0D, 0x70, 0xF2, 0xFF, 0x76, 0x37, 0x21, 0x99, 0x0D, 0x76, 0xB1, 0xAC, 0x2A, 0x47, 0xD7, 0x72, 111 | 0x8A, 0x1B, 0x7C, 0x0D, 0x38, 0x19, 0x98, 0x79, 0x53, 0xC9, 0x63, 0xD0, 0x03, 0x0F, 0x5A, 0xFC, 112 | 0xC3, 0xF0, 0x68, 0xDE, 0xC9, 0x5E, 0x84, 0xB1, 0xA2, 0x33, 0x4C, 0xB3, 0xCC, 0x45, 0x12, 0x2B, 113 | 0x34, 0xDE, 0xCB, 0x75, 0x25, 0xA3, 0x0D, 0x1E, 0x67, 0x03, 0x22, 0x04, 0xFB, 0x5B, 0x3E, 0x2D, 114 | 0xB3, 0xAA, 0x17, 0x4D, 0xBC, 0x77, 0x24, 0x95, 0x7E, 0xD9, 0xF2, 0xC2, 0x03, 0x80, 0x3C, 0x41, 115 | 0xD7, 0x22, 0xA6, 0x77, 0xCE, 0xB0, 0x96, 0x41, 0xBE, 0x97, 0xAF, 0xC4, 0xD1, 0x17, 0x4F, 0xC4, 116 | 0x48, 0x4F, 0x58, 0x96, 0xBF, 0xD2, 0xF6, 0x40, 0xA1, 0xC1, 0x2F, 0xA7, 0x31, 0x7C, 0x32, 0xD5, 117 | 0x41, 0x40, 0x56, 0x2E, 0xBE, 0xEE, 0x0B, 0x2B, 0x9E, 0xBA, 0x73, 0x6A, 0x97, 0xF7, 0xD6, 0xF0, 118 | 0xF2, 0x1B, 0x56, 0x21, 0x4A, 0xB1, 0xE5, 0xE1, 0xAF, 0x3B, 0x7B, 0x58, 0x1E, 0x79, 0xC9, 0x55, 119 | 0x42, 0x50, 0xE7, 0x04, 0x31, 0x03, 0xA6, 0x65, 0xE6, 0x7A, 0x7D, 0x0B, 0xE8, 0x8A, 0x2C, 0xE8, 120 | 0x00, 0x63, 0x95, 0xFD, 0x7E, 0xCC, 0xA0, 0x0B, 0xCF, 0x2A, 0x43, 0xD0, 0x78, 0x86, 0x8F, 0x00, 121 | 0xF5, 0x9C, 0xA4, 0x12, 0xAE, 0x74, 0x1D, 0xD7, 0x4C, 0xC6, 0x1F, 0xCD, 0x86, 0x1F, 0x96, 0xE1, 122 | 0xE3, 0x8B, 0x4F, 0xB3, 0x72, 0x11, 0x57, 0xE2, 0x3B, 0x94, 0xEB, 0xFE, 0x9E, 0x02, 0x71, 0x64, 123 | 0x5B, 0x68, 0xD0, 0x12, 0xAA, 0xCE, 0x02, 0xCD, 0x1E, 0x19, 0x86, 0x74, 0x80, 0x2C, 0xE9, 0xF9, 124 | 0x06, 0xD4, 0xD1, 0x74, 0x34, 0xA8, 0x16, 0xF3, 0x47, 0xF6, 0xF4, 0x62, 0x45, 0x1D, 0x1F, 0x30, 125 | 0x1A, 0x5F, 0x07, 0xD4, 0xEB, 0x10, 0xF8, 0x29, 0x48, 0x92, 0xB0, 0x4E, 0x65, 0xAF, 0x47, 0xFC, 126 | 0x85, 0xE1, 0xFD, 0xAC, 0xCB, 0xC2, 0x3A, 0x3C, 0xEE, 0xAE, 0x72, 0xF8, 0x78, 0xE2, 0x22, 0x43, 127 | 0xAF, 0x01, 0xAF, 0x26, 0x98, 0xA9, 0xBE, 0x36, 0x3F, 0x31, 0x1A, 0xF0, 0xCC, 0x4E, 0x1D, 0x08, 128 | 0xF6, 0xB7, 0x39, 0xF5, 0x06, 0x16, 0x21, 0xF9, 0x44, 0xA3, 0x2F, 0x6F, 0x60, 0x1C, 0xCE, 0xD1, 129 | 0xBB, 0xDA, 0xC3, 0x93, 0x9D, 0x0C, 0x32, 0x00, 0x5C, 0x7A, 0x36, 0x9C, 0x52, 0x78, 0xDA, 0x77, 130 | 0x15, 0x34, 0x76, 0x2A, 0x8C, 0xD0, 0x29, 0x04, 0xB0, 0x7B, 0xC0, 0xAE, 0x07, 0xDD, 0x97, 0x74, 131 | 0xC4, 0x03, 0x07, 0x85, 0x41, 0x92, 0x50, 0x1B, 0x0F, 0xE7, 0x4D, 0x79, 0xC5, 0x7E, 0xBF, 0xF1, 132 | 0x65, 0x69, 0x22, 0xA1, 0x1B, 0x3B, 0xF5, 0x57, 0xE1, 0xD8, 0x76, 0x0F, 0x6A, 0x8E, 0x5D, 0xD2, 133 | 0x92, 0xF8, 0x5D, 0xCA, 0x78, 0xCE, 0xEF, 0xBE, 0x92, 0xD5, 0x59, 0x27, 0xBD, 0x4C, 0xF0, 0x71, 134 | 0xA0, 0x29, 0xC6, 0xBB, 0x66, 0x32, 0x91, 0xF9, 0xE4, 0x67, 0xA7, 0x7E, 0x8D, 0xBA, 0x37, 0x13, 135 | 0x13, 0xB2, 0xBE, 0xD9, 0x4C, 0x9D, 0xBC, 0x47, 0x60, 0xD9, 0xB9, 0xE9, 0x7C, 0x57, 0x2F, 0x01, 136 | 0x48, 0xD3, 0x21, 0xB6, 0x10, 0x95, 0x21, 0xC4, 0x6A, 0xBB, 0xF0, 0x9F, 0x73, 0x44, 0x18, 0x69, 137 | 0x23, 0x77, 0x52, 0x39, 0x36, 0x08, 0xA0, 0xF0, 0x9B, 0x61, 0x2D, 0x4D, 0x1E, 0x92, 0x67, 0xD4, 138 | 0x00, 0x2A, 0x9E, 0xC4, 0x67, 0xDB, 0xD7, 0xB7, 0xF9, 0x6F, 0x59, 0x99, 0x28, 0x3B, 0x3D, 0x83, 139 | 0x2F, 0xB1, 0x71, 0x82, 0xEC, 0x74, 0x86, 0xED, 0x19, 0xA4, 0x6D, 0x6B, 0x1A, 0x85, 0x8E, 0x29, 140 | 0x09, 0x56, 0x13, 0x2F, 0x89, 0x32, 0x35, 0x4C, 0x3D, 0xEC, 0x4B, 0x92, 0xC1, 0x4A, 0x5F, 0x63, 141 | 0xF4, 0xBC, 0x2E, 0xD2, 0x01, 0xF1, 0x0F, 0xE4, 0xD3, 0x92, 0xB0, 0xB6, 0x58, 0x7B, 0x8B, 0x16, 142 | 0x43, 0x90, 0xDB, 0x81, 0x57, 0x9F, 0xE9, 0x96, 0xA4, 0xD6, 0x07, 0x88, 0x7E, 0x42, 0x7E, 0x1F, 143 | 0xAD, 0x4E, 0xA8, 0x2F, 0xE9, 0x96, 0x42, 0x39, 0x81, 0x5A, 0xBE, 0x4C, 0x7D, 0xC1, 0x5C, 0xE1, 144 | 0x34, 0x34, 0x02, 0xDE, 0x0C, 0x53, 0x73, 0x7B, 0x66, 0x65, 0x1A, 0x7F, 0x10, 0x3C, 0x6D, 0x0D, 145 | 0x45, 0x1D, 0x73, 0x5A, 0x1F, 0x4E, 0xEF, 0x0F, 0xEF, 0x14, 0xF3, 0x69, 0xDE, 0xDB, 0xAC, 0x89, 146 | 0xF7, 0x9C, 0x9E, 0xFD, 0xB3, 0x12, 0xDC, 0x38, 0x62, 0x6A, 0x90, 0x37, 0x11, 0x7A, 0x04, 0x1B, 147 | 0x84, 0xEA, 0x42, 0xEA, 0xBC, 0x7E, 0x37, 0xB3, 0x7C, 0x19, 0x0E, 0x0C, 0xC7, 0x54, 0x3A, 0x5C, 148 | 0x04, 0xB1, 0xD5, 0x6F, 0xCC, 0x59, 0x75, 0x2C, 0x4B, 0x01, 0x74, 0x4A, 0xCF, 0xB4, 0x04, 0x19, 149 | 0x34, 0x27, 0x73, 0x1E, 0xD8, 0xCE, 0xFF, 0xD9, 0x90, 0x87, 0xD2, 0x1F, 0xBB, 0xD4, 0x4F, 0x19, 150 | 0x58, 0x9B, 0x53, 0x61, 0xA5, 0x0C, 0x3E, 0x25, 0x63, 0x5A, 0xF6, 0x52, 0x8A, 0x8D, 0x9D, 0x9F, 151 | 0x24, 0x77, 0x29, 0xF5, 0x2E, 0x51, 0x6C, 0x17, 0x62, 0xB4, 0x6B, 0xD5, 0x7B, 0x05, 0xEA, 0xB2, 152 | 0xBA, 0xA7, 0xBD, 0x06, 0xC9, 0xCF, 0x11, 0x40, 0xE2, 0x9E, 0xED, 0xC1, 0xF5, 0xCC, 0x35, 0x5B, 153 | 0x50, 0xD6, 0x5B, 0x2D, 0x6F, 0x22, 0xF7, 0x93, 0x91, 0x6D, 0xFA, 0x53, 0xAA, 0xC3, 0x28, 0x5D, 154 | 0x9F, 0xC3, 0x39, 0x3C, 0xDB, 0xC4, 0x27, 0xEE, 0x1F, 0x48, 0x79, 0x8C, 0x8F, 0x53, 0xE7, 0x75, 155 | 0xEE, 0xA1, 0x63, 0xC5, 0x4E, 0x69, 0x2A, 0x6B, 0x3B, 0x16, 0x86, 0x97, 0x9E, 0xB5, 0xC4, 0xBB, 156 | 0x0D, 0x5F, 0x95, 0x9B, 0x91, 0x55, 0xD5, 0x2E, 0xF3, 0x73, 0xAC, 0xFC, 0x85, 0xC1, 0x8A, 0xBE, 157 | 0xD1, 0xEE, 0x3C, 0x97, 0xE2, 0x94, 0x3E, 0xAE, 0x14, 0xB2, 0xBE, 0x78, 0x17, 0xE8, 0xAA, 0x44, 158 | 0xC7, 0x42, 0x6E, 0x11, 0x84, 0x72, 0xA9, 0xED, 0x64, 0x56, 0x32, 0x5D, 0x46, 0x23, 0x27, 0xFC, 159 | 0x1E, 0xDD, 0x3B, 0x7F, 0xD3, 0x65, 0x21, 0x61, 0xA3, 0x8F, 0xD1, 0xE4, 0xF8, 0x27, 0x32, 0xB3, 160 | 0xFA, 0xD0, 0x8C, 0x78, 0x62, 0x11, 0x70, 0xA2, 0x22, 0x38, 0x7E, 0xA8, 0x69, 0x52, 0x74, 0x79, 161 | 0x80, 0xA2, 0xF1, 0xE7, 0x17, 0xA0, 0xFE, 0x70, 0x8B, 0x13, 0x9B, 0x44, 0x25, 0xE4, 0x3E, 0x01, 162 | 0x15, 0xF9, 0x4D, 0xEF, 0xFF, 0x8A, 0x3C, 0x60, 0xDE, 0x95, 0x81, 0xA5, 0x39, 0x45, 0x62, 0x6C, 163 | 0x3C, 0xBC, 0x5A, 0xCE, 0x1A, 0x3C, 0xC6, 0x40, 0x45, 0x9F, 0xA8, 0x96, 0xE1, 0x58, 0x28, 0x51, 164 | 0x5A, 0x95, 0xE1, 0x47, 0xEB, 0x53, 0x81, 0xA2, 0xF6, 0xBB, 0x07, 0x52, 0xDB, 0xC7, 0x63, 0x45, 165 | 0xB8, 0x86, 0xA2, 0x31, 0xC0, 0x2E, 0x1D, 0x73, 0x1D, 0xDD, 0xA2, 0x2D, 0x3C, 0x39, 0x47, 0xA4, 166 | 0x21, 0x7C, 0xC5, 0xD9, 0xEF, 0x78, 0x7D, 0x7B, 0x17, 0x94, 0xA5, 0x38, 0xDC, 0x84, 0xC0, 0x89, 167 | 0xDF, 0x6C, 0x0B, 0x24, 0xD9, 0x87, 0x24, 0x78, 0xA2, 0xE9, 0x22, 0xD6, 0xA7, 0xCE, 0x82, 0xDE, 168 | 0x97, 0xEE, 0x82, 0xF3, 0x83, 0x84, 0x29, 0x84, 0xB1, 0xB4, 0x0A, 0x07, 0x00, 0xED, 0x4D, 0xEA, 169 | 0x5E, 0x5F, 0x77, 0xA9, 0x88, 0x39, 0x05, 0xE7, 0xDA, 0x7F, 0x29, 0x68, 0xC0, 0x90, 0x3D, 0x0D, 170 | 0x45, 0xDF, 0x43, 0xF6, 0xE1, 0x36, 0xA0, 0x1D, 0x7C, 0x81, 0x30, 0xFE, 0x05, 0x88, 0x29, 0xD5, 171 | 0xED, 0xA4, 0x9A, 0xC4, 0xBA, 0xC0, 0xB2, 0x04, 0xCC, 0x0C, 0x92, 0x33, 0x1A, 0x68, 0x47, 0x31, 172 | 0x61, 0xC2, 0xD6, 0x11, 0x3D, 0x27, 0xB2, 0x50, 0xA7, 0xC1, 0xCB, 0x58, 0xF9, 0x0B, 0xDD, 0x65, 173 | 0xC1, 0xD9, 0x9F, 0x95, 0xF0, 0xC8, 0xCA, 0x09, 0x17, 0x91, 0x04, 0xDD, 0xF2, 0x5C, 0x56, 0x74, 174 | 0x13, 0x25, 0x15, 0xBF, 0xED, 0x4E, 0xB1, 0xFD, 0xB6, 0x86, 0xF5, 0xF5, 0x4F, 0x6E, 0xC9, 0x76, 175 | 0xE0, 0x5D, 0xA1, 0x67, 0xAF, 0xB2, 0x28, 0x98, 0xF8, 0xCA, 0x25, 0x73, 0x09, 0x78, 0x92, 0x72, 176 | 0xBE, 0x73, 0xC7, 0x27, 0x60, 0x2D, 0xF4, 0x60, 0x9D, 0x06, 0x3E, 0xB4, 0xF1, 0x2E, 0xEC, 0xE7, 177 | 0x9D, 0xB3, 0x90, 0xA1, 0x62, 0xDC, 0x89, 0x25, 0xE0, 0xE0, 0xBE, 0x60, 0x35, 0x5C, 0x32, 0xBB, 178 | 0x7C, 0xD7, 0x02, 0x8B, 0x44, 0x76, 0x3E, 0x46, 0x97, 0x83, 0xDD, 0x61, 0x1B, 0x98, 0x2D, 0x8A, 179 | 0xDF, 0xAD, 0xB4, 0x20, 0x74, 0xED, 0x69, 0x7B, 0xA5, 0xF2, 0xCB, 0xFE, 0x90, 0xD7, 0xB1, 0xE1, 180 | 0x38, 0x3A, 0xBD, 0xBD, 0xB7, 0xCB, 0xAD, 0x73, 0x14, 0x3E, 0x59, 0x7B, 0x4D, 0x16, 0x97, 0x6D, 181 | 0x43, 0xFB, 0xE9, 0x2C, 0x26, 0xC1, 0x51, 0x1B, 0x19, 0xAC, 0x54, 0x69, 0x28, 0x4F, 0x66, 0x6D, 182 | 0x29, 0x43, 0x8B, 0xB5, 0x1D, 0xD1, 0x29, 0xCB, 0x77, 0xB0, 0xB0, 0xE7, 0x52, 0xF1, 0xB2, 0x93, 183 | 0x87, 0xD0, 0x03, 0x66, 0x1D, 0xC9, 0x62, 0xC1, 0xD7, 0xFF, 0xB0, 0xB2, 0x80, 0xB5, 0x32, 0x2A, 184 | 0xFC, 0x6A, 0xED, 0xEB, 0x83, 0xBA, 0xEE, 0x2B, 0x8E, 0xDB, 0xA4, 0x3B, 0x07, 0x1A, 0x5C, 0x44, 185 | 0x12, 0xDB, 0x0F, 0x9C, 0x73, 0xF0, 0xB0, 0xFE, 0x05, 0x94, 0xB2, 0x29, 0x41, 0x50, 0xDB, 0x88, 186 | 0x11, 0x78, 0x59, 0x15, 0x2D, 0x11, 0x75, 0x73, 0xB9, 0xEB, 0xF8, 0xDE, 0xA2, 0xB3, 0x61, 0xA8, 187 | 0x25, 0xDD, 0xEA, 0xEE, 0x2D, 0xB5, 0x5C, 0x20, 0x27, 0x2B, 0xC7, 0xA9, 0x94, 0x82, 0x27, 0x08, 188 | 0xBB, 0x79, 0xFB, 0xD6, 0xDB, 0x4A, 0xA9, 0x56, 0x5A, 0xC9, 0x34, 0x1C, 0x6D, 0xB0, 0xEE, 0xA2, 189 | 0xC2, 0xF5, 0xAC, 0xB5, 0x50, 0x2E, 0x97, 0xE8, 0xE5, 0x23, 0x0E, 0x11, 0x41, 0xA3, 0xBB, 0xC3, 190 | 0xFA, 0x44, 0xFC, 0x9D, 0xE5, 0x58, 0x8D, 0x51, 0xCC, 0x43, 0x81, 0x76, 0x21, 0xE9, 0x51, 0xC1, 191 | 0x06, 0xF9, 0xA9, 0x04, 0xE3, 0xF1, 0x67, 0xD5, 0xDF, 0xED, 0x9E, 0xBA, 0x5B, 0x15, 0x58, 0xA0, 192 | 0xAB, 0xFB, 0xC3, 0xFA, 0x58, 0x8C, 0x40, 0x2D, 0x6F, 0xD3, 0x17, 0x12, 0xAC, 0x8A, 0x20, 0xC1, 193 | 0x40, 0xD9, 0x5A, 0xB1, 0xE7, 0xEA, 0x4E, 0x55, 0x56, 0x78, 0x9B, 0xB7, 0x38, 0x72, 0x76, 0xA2, 194 | 0x88, 0x52, 0xFF, 0x57, 0xEC, 0x8E, 0x3E, 0xA9, 0x4B, 0xA2, 0x9B, 0xEC, 0x4A, 0xBD, 0x7F, 0xB7, 195 | 0x99, 0xEE, 0x4A, 0x7F, 0xF0, 0xE0, 0x3B, 0x80, 0x64, 0x41, 0xF2, 0xD3, 0x33, 0x9C, 0xF6, 0xDD, 196 | 0xA2, 0xFC, 0x1B, 0x76, 0x32, 0xD3, 0x1B, 0xEE, 0x3B, 0x04, 0x3B, 0xC3, 0x10, 0x70, 0x8A, 0x7E, 197 | 0x82, 0x2C, 0xC5, 0xB5, 0xB1, 0xA2, 0xAF, 0x43, 0x4A, 0x2C, 0x9A, 0x37, 0xB3, 0x65, 0x99, 0x58, 198 | 0x68, 0x97, 0x63, 0xA1, 0x1A, 0x5A, 0x95, 0x26, 0x34, 0x05, 0xC1, 0x8F, 0x53, 0x17, 0xA2, 0x2B, 199 | 0x3D, 0xAF, 0xA1, 0xDC, 0x9F, 0x46, 0x35, 0x88, 0x1C, 0x4B, 0xBD, 0xC5, 0xD4, 0x61, 0xEF, 0x4E, 200 | 0x63, 0xC1, 0x0F, 0x1C, 0x6E, 0x35, 0x8A, 0x95, 0xA2, 0xBD, 0xAA, 0x06, 0x12, 0x4B, 0xEE, 0x90, 201 | 0x40, 0xA3, 0xEE, 0x10, 0x35, 0x9F, 0x68, 0xEA, 0x94, 0x94, 0x3B, 0x9D, 0x0C, 0xD8, 0x07, 0x9C, 202 | 0x5D, 0x39, 0xBE, 0x5B, 0xA8, 0x07, 0x4F, 0xD0, 0x47, 0x25, 0xD0, 0xA8, 0x0F, 0x57, 0x82, 0x4E, 203 | 0xED, 0xF8, 0x4E, 0xBE, 0x71, 0x5B, 0x93, 0x90, 0x2B, 0x79, 0x06, 0xD6, 0x41, 0xAE, 0x55, 0x85, 204 | 0x2C, 0xE0, 0x8E, 0xC3, 0x78, 0xB4, 0x1F, 0x73, 0x57, 0xE0, 0x3A, 0xD5, 0x9D, 0x16, 0x85, 0x51, 205 | 0xD5, 0xF3, 0x41, 0x99, 0x45, 0x61, 0x4F, 0xF0, 0xBE, 0x8E, 0xE9, 0xE3, 0xF1, 0xB9, 0x12, 0x66, 206 | 0xB7, 0xFF, 0x15, 0xB3, 0x72, 0x92, 0xC7, 0x3C, 0xF1, 0x6C, 0x43, 0xA6, 0x68, 0x1B, 0x9C, 0x0E, 207 | 0x5F, 0xEE, 0x36, 0x0F, 0xF0, 0x43, 0x19, 0x05, 0x29, 0x9E, 0x2B, 0xD8, 0x4C, 0x54, 0xCF, 0x07, 208 | 0x93, 0x67, 0x7D, 0xBF, 0x12, 0x4C, 0xCA, 0x5E, 0xE0, 0x9E, 0x67, 0x70, 0x13, 0xEF, 0x6F, 0xE7, 209 | 0xE7, 0x3D, 0xDF, 0xEA, 0x9E, 0xA2, 0x18, 0x98, 0xA2, 0x98, 0x2C, 0x94, 0xA3, 0x6D, 0x78, 0xD4, 210 | 0xC0, 0x0E, 0x8B, 0xFD, 0x2E, 0x74, 0xCA, 0x87, 0xC4, 0x3E, 0x03, 0x53, 0xB8, 0x3B, 0xE6, 0x6A, 211 | 0xB4, 0xEB, 0x78, 0xC0, 0x80, 0x13, 0xF1, 0xBB, 0xC6, 0x37, 0xC5, 0x56, 0x3F, 0xD9, 0x64, 0x8B, 212 | 0x7A, 0x53, 0x96, 0xEF, 0xCD, 0x16, 0xCB, 0x62, 0x41, 0x89, 0xE0, 0xC9, 0x35, 0x53, 0xA1, 0xAD, 213 | 0xCC, 0x0D, 0xE5, 0x87, 0xC0, 0x04, 0x6D, 0xED, 0x59, 0x68, 0x79, 0x39, 0xDD, 0x6B, 0xF5, 0xE4, 214 | 0x2E, 0xD5, 0x7C, 0xBA, 0xA8, 0x03, 0xF0, 0x22, 0xE2, 0x6C, 0x92, 0xF9, 0x34, 0x6E, 0x59, 0x31, 215 | 0xE5, 0x0B, 0xBC, 0x63, 0x5E, 0x79, 0xAA, 0xE3, 0x22, 0x84, 0x0D, 0xFE, 0x5C, 0x64, 0x9C, 0x8D, 216 | 0xE5, 0xD2, 0x2C, 0x12, 0x37, 0xC8, 0xA3, 0x10, 0x22, 0x1B, 0x86, 0xBA, 0xD0, 0xFE, 0xED, 0xBE, 217 | 0x57, 0x0E, 0x25, 0x3C, 0x61, 0x58, 0xB8, 0x38, 0x04, 0x31, 0xA9, 0x2E, 0xE4, 0xD5, 0x7C, 0xC6, 218 | 0x41, 0x2D, 0xEC, 0x4E, 0xE0, 0x6A, 0x9C, 0xEA, 0xAD, 0x6C, 0xD3, 0xBF, 0x83, 0x19, 0xCC, 0x5F, 219 | 0xC8, 0xFF, 0x1C, 0x29, 0x6C, 0x83, 0x68, 0xD8, 0xC6, 0xC3, 0x5B, 0x91, 0xAA, 0x08, 0x95, 0x02, 220 | 0x92, 0x67, 0x44, 0x55, 0x57, 0x62, 0x7E, 0xC4, 0x05, 0x47, 0x9A, 0xC6, 0x9E, 0x27, 0xD2, 0x59, 221 | 0x74, 0xAA, 0x40, 0xDC, 0x7A, 0x6C, 0x37, 0x63, 0xA6, 0xFC, 0xCC, 0x27, 0x6B, 0xB1, 0xCA, 0xFE, 222 | 0xB4, 0x7D, 0x75, 0xDF, 0xF6, 0x37, 0x45, 0x5F, 0x9D, 0x42, 0xD6, 0x7F, 0xCF, 0x7F, 0x9C, 0xC5, 223 | 0x6B, 0xD1, 0x70, 0xE9, 0x13, 0x61, 0x87, 0xC5, 0x7E, 0xDF, 0xEB, 0x36, 0x5D, 0x3B, 0x8A, 0xF4, 224 | 0x8B, 0xB4, 0x1B, 0x2D, 0xD2, 0x50, 0x53, 0xAB, 0xBC, 0x11, 0xEF, 0xDA, 0xC0, 0xC2, 0xA4, 0x3E, 225 | 0x93, 0x68, 0xC3, 0x1E, 0xF9, 0xF4, 0x2E, 0xD3, 0x59, 0x6A, 0x79, 0x4E, 0x9F, 0xC7, 0x7D, 0xA6, 226 | 0x2E, 0x0E, 0x57, 0x0F, 0xE6, 0x91, 0x50, 0xFA, 0x8D, 0x42, 0xF7, 0x73, 0x90, 0xAC, 0x00, 0x4C, 227 | 0x30, 0xB8, 0x2A, 0x7D, 0x17, 0xA4, 0x68, 0xB4, 0x71, 0x66, 0xD5, 0xA3, 0xA4, 0x85, 0x12, 0x12, 228 | 0x37, 0xD2, 0x3C, 0x88, 0x46, 0xD0, 0x84, 0x80, 0x1A, 0xE1, 0xA8, 0xBC, 0xA0, 0x11, 0x45, 0xDD, 229 | 0x8C, 0x35, 0xF7, 0x3A, 0x66, 0x86, 0x57, 0xC8, 0xE7, 0x43, 0xA5, 0xB0, 0x8E, 0x0D, 0x57, 0xB0, 230 | 0x64, 0xB9, 0x87, 0x7A, 0x17, 0xEB, 0x71, 0x9A, 0xF9, 0xC9, 0x7E, 0xC1, 0xC0, 0xE9, 0x11, 0x57, 231 | 0xE7, 0x96, 0x67, 0xBA, 0x58, 0xAB, 0x41, 0xD5, 0xB2, 0x0D, 0x97, 0x84, 0x03, 0xFC, 0xE5, 0x2D, 232 | 0x3C, 0x61, 0xA0, 0xA4, 0xC4, 0xF6, 0x45, 0x78, 0x78, 0x34, 0x59, 0x13, 0x2B, 0xED, 0x35, 0x98, 233 | 0xF6, 0x8B, 0x10, 0xC9, 0x6C, 0x23, 0x40, 0x2F, 0x43, 0x32, 0xE6, 0xA3, 0x15, 0xBF, 0x60, 0xC5, 234 | 0x77, 0x87, 0x67, 0x0F, 0x08, 0x0D, 0xC5, 0x0F, 0xED, 0xB2, 0x8B, 0x28, 0x60, 0x3B, 0x3A, 0x8D, 235 | 0x5C, 0x6A, 0xB2, 0x4A, 0x99, 0xEE, 0xAC, 0x6C, 0x30, 0xCA, 0x5B, 0x41, 0xAD, 0xD2, 0xF4, 0x23, 236 | 0x0E, 0xA0, 0xCD, 0xFD, 0x19, 0x81, 0x7A, 0x03, 0xA7, 0x91, 0xF4, 0xBD, 0x4F, 0xF6, 0xA7, 0x30, 237 | 0xC5, 0x72, 0x00, 0xCB, 0x94, 0x3D, 0xD3, 0x3E, 0x9A, 0x8B, 0x78, 0x6F, 0xDA, 0x5F, 0xE4, 0xC1, 238 | 0xD9, 0xF4, 0x53, 0x5A, 0xDB, 0xF0, 0x31, 0x5D, 0x37, 0xE2, 0x92, 0x5B, 0xF1, 0x28, 0xD2, 0xCC, 239 | 0x0E, 0x44, 0x0C, 0xFA, 0x68, 0xC4, 0x68, 0xC7, 0x57, 0x8C, 0x2C, 0x6D, 0xE0, 0xA8, 0xAC, 0x7B, 240 | 0x27, 0x7E, 0xE0, 0xD0, 0x23, 0x7D, 0x87, 0x61, 0xC5, 0x61, 0x0C, 0xED, 0x5E, 0x54, 0x8C, 0x2A, 241 | 0x3F, 0xDE, 0x8B, 0x45, 0x04, 0xC4, 0xF3, 0x96, 0x74, 0x99, 0xB9, 0xA7, 0x9F, 0xEA, 0x56, 0xFD, 242 | 0x8C, 0x15, 0x8A, 0x9A, 0x7F, 0x19, 0x32, 0xA4, 0xA1, 0xB4, 0x60, 0xB9, 0xD8, 0x64, 0x38, 0xF8, 243 | 0xDF, 0xEE, 0x1F, 0x91, 0x2B, 0xCB, 0x9C, 0x00, 0x32, 0x29, 0xB6, 0x52, 0xD5, 0xA0, 0x70, 0x3C, 244 | 0x34, 0x2E, 0x34, 0x37, 0xAF, 0xB9, 0xE3, 0x37, 0xF4, 0xA8, 0x82, 0xC6, 0x2F, 0xE8, 0xA4, 0xEE, 245 | 0xAF, 0xED, 0xC7, 0xF7, 0xE8, 0xF7, 0x55, 0x43, 0x18, 0xD9, 0x68, 0x5D, 0x09, 0xAE, 0xED, 0x94, 246 | 0x9B, 0x7E, 0x5D, 0x82, 0x6B, 0x30, 0x63, 0x62, 0xC0, 0x96, 0x74, 0x58, 0xA0, 0x10, 0xBF, 0xD6, 247 | 0x02, 0x6B, 0x36, 0x64, 0xB0, 0x73, 0x7B, 0xF2, 0x67, 0x3C, 0xF6, 0xEA, 0x42, 0x41, 0xB4, 0x5F, 248 | 0xB6, 0x65, 0x72, 0x8C, 0x08, 0x38, 0x5F, 0x61, 0xA9, 0x36, 0x93, 0xCA, 0xE9, 0x68, 0x94, 0x2D, 249 | 0xF1, 0xBB, 0x3C, 0x61, 0x7D, 0x00, 0x61, 0x92, 0xE6, 0x77, 0x7C, 0xF2, 0xBF, 0x73, 0xE3, 0x31, 250 | 0x62, 0xC5, 0xDC, 0xF0, 0x8D, 0xAD, 0x7A, 0x88, 0x5F, 0xEA, 0x42, 0x72, 0xA8, 0xCF, 0xD3, 0x24, 251 | 0xA5, 0x7C, 0x3D, 0x96, 0xC7, 0x1A, 0xB9, 0x52, 0x18, 0xF4, 0x99, 0xD7, 0x89, 0x88, 0x80, 0x5C, 252 | 0xA8, 0x73, 0x3E, 0x38, 0x7C, 0x9E, 0xD2, 0x59, 0xC4, 0x42, 0x1A, 0xA3, 0x29, 0xAD, 0xC6, 0xEF, 253 | 0x4A, 0xA6, 0xB5, 0x40, 0xA5, 0xF0, 0xB9, 0x70, 0xE6, 0x9A, 0x3B, 0x7D, 0xF9, 0x1D, 0x46, 0x69, 254 | 0x98, 0x45, 0x76, 0x9B, 0xBD, 0x10, 0xE5, 0x81, 0xA9, 0x45, 0xF8, 0xE5, 0x1F, 0x74, 0xDA, 0x70, 255 | 0x5B, 0x80, 0x0D, 0x68, 0xFC, 0x15, 0x2D, 0x03, 0x7B, 0xF5, 0x0A, 0x55, 0x76, 0xC5, 0x82, 0x52, 256 | 0x38, 0x40, 0xE7, 0x7B, 0x29, 0xF8, 0xF1, 0x7F, 0x6F, 0xDF, 0xFB, 0xFC, 0xAD, 0xF8, 0xA5, 0x29, 257 | 0xF4, 0xB0, 0x52, 0xE2, 0x6C, 0x3A, 0xD7, 0xF3, 0xAD, 0xA9, 0x04, 0x95, 0xB9, 0xB4, 0xB9, 0xE9, 258 | 0x40, 0xCD, 0x36, 0xF7, 0x3B, 0x3F, 0x34, 0xEC, 0x61, 0x12, 0x0A, 0xE5, 0x9F, 0xB2, 0x6B, 0xDA, 259 | 0x31, 0x87, 0xC0, 0x69, 0x35, 0x24, 0xED, 0x7E, 0xB2, 0x76, 0xAB, 0x99, 0x98, 0x4F, 0x6B, 0x5B, 260 | 0xBF, 0x6F, 0x15, 0x22, 0xAE, 0x3C, 0x6C, 0xDD, 0xEE, 0xE3, 0x7F, 0x24, 0xFE, 0x30, 0x44, 0x49, 261 | 0x1B, 0xFB, 0x20, 0xFA, 0x8F, 0xFA, 0x30, 0x49, 0x83, 0x7A, 0x0E, 0xF4, 0x9D, 0x25, 0x9A, 0x52, 262 | 0xE9, 0x20, 0xE9, 0xA0, 0x83, 0x40, 0xDA, 0xB8, 0x19, 0x83, 0x27, 0x03, 0x83, 0xA6, 0xA3, 0x10, 263 | 0x3A, 0xCF, 0x93, 0x79, 0xB1, 0x2E, 0x99, 0x13, 0x90, 0x13, 0xE1, 0x23, 0x72, 0x26, 0x52, 0xC8, 264 | 0x30, 0x3A, 0xFA, 0x84, 0xFB, 0x77, 0xF4, 0x40, 0xDD, 0x51, 0xB8, 0x97, 0xE1, 0x0D, 0x43, 0x9E, 265 | 0x33, 0x3F, 0x74, 0xC9, 0x93, 0x91, 0x8F, 0x09, 0x2E, 0x78, 0x72, 0xAB, 0xAE, 0x01, 0x50, 0xB7, 266 | 0x81, 0x1F, 0x6F, 0x66, 0xA9, 0x2F, 0x55, 0xC2, 0x1C, 0x8F, 0x84, 0xBD, 0x73, 0x36, 0x96, 0xF4, 267 | 0xC7, 0x19, 0x27, 0x6B, 0x65, 0xFC, 0x85, 0xC2, 0x5B, 0xE0, 0x9D, 0x14, 0xEA, 0x6C, 0x08, 0x43, 268 | 0x24, 0xFA, 0x2D, 0xEC, 0x33, 0xD8, 0x7F, 0x3B, 0x43, 0x74, 0xAA, 0x71, 0x39, 0xB4, 0xC4, 0xE9, 269 | 0x07, 0x7B, 0x19, 0x59, 0x79, 0xA3, 0x8E, 0x45, 0xF3, 0x85, 0x78, 0x5B, 0xED, 0x94, 0xD4, 0x98, 270 | 0x5A, 0xA3, 0xC5, 0x7C, 0x92, 0x7B, 0xB5, 0x33, 0x35, 0xC0, 0x5B, 0x3E, 0x00, 0xD8, 0xDA, 0x27, 271 | 0x78, 0xD9, 0x3E, 0x99, 0x98, 0x92, 0x79, 0xC3, 0x2F, 0x50, 0xDC, 0xE0, 0xFE, 0x15, 0xC8, 0xC1, 272 | 0xA8, 0x21, 0x93, 0x9F, 0x82, 0xA6, 0x3A, 0x33, 0xDE, 0x2B, 0x9E, 0x66, 0xDF, 0xB9, 0xE3, 0xCC, 273 | 0x82, 0x4E, 0xFA, 0xD0, 0x42, 0x3E, 0x24, 0x19, 0xB7, 0x43, 0x73, 0xF4, 0x3E, 0xEA, 0x03, 0x11, 274 | 0xE3, 0x85, 0x3F, 0xF9, 0xE6, 0xA7, 0xC6, 0x0E, 0xBF, 0xCA, 0xE6, 0xEF, 0xCB, 0xE2, 0xF7, 0xB9, 275 | 0x8D, 0xD7, 0x93, 0x29, 0x3F, 0x7E, 0x7F, 0xF9, 0xB4, 0x14, 0xEC, 0xFA, 0xAE, 0x87, 0xC7, 0x9B, 276 | 0x0A, 0x2F, 0x9E, 0x5B, 0xD6, 0x84, 0xA2, 0x98, 0x1E, 0x41, 0xCA, 0xD0, 0xAB, 0x66, 0x2D, 0x08, 277 | 0x7A, 0x31, 0x2A, 0x7A, 0x45, 0x5A, 0xD4, 0xE6, 0xDD, 0x38, 0x25, 0x98, 0x09, 0xFD, 0x26, 0x88, 278 | 0xE7, 0xF7, 0x93, 0x1F, 0x24, 0x7D, 0x29, 0x0B, 0x5F, 0xA5, 0x6A, 0x8A, 0x1B, 0x88, 0xB2, 0x7F, 279 | 0xCA, 0xB0, 0x68, 0xD1, 0x28, 0xEF, 0x5A, 0x3C, 0x53, 0x78, 0x8D, 0xE7, 0xD1, 0x01, 0xCA, 0x0E, 280 | 0x69, 0xC6, 0x0A, 0x1C, 0xBC, 0x22, 0x7D, 0xDB, 0x90, 0x9A, 0xE1, 0x9B, 0x12, 0xB1, 0xB9, 0xBB, 281 | 0xB8, 0xC2, 0x40, 0x67, 0x51, 0xAD, 0x60, 0x48, 0xA2, 0x2C, 0x10, 0xF2, 0x96, 0x78, 0xF5, 0xB2, 282 | 0xC1, 0xD5, 0xDB, 0xF8, 0xAA, 0xDB, 0x23, 0xB8, 0xB3, 0x3D, 0xE5, 0xAA, 0xF6, 0xE7, 0xF3, 0xE8, 283 | 0x3B, 0xB4, 0x65, 0xD9, 0x68, 0x0C, 0x41, 0x79, 0x7F, 0x05, 0x0E, 0x1E, 0x3A, 0xA9, 0x2A, 0x1D, 284 | 0x12, 0x5B, 0x41, 0x90, 0xB2, 0x48, 0xF8, 0x41, 0x10, 0x82, 0xEA, 0x0D, 0x03, 0x3C, 0x03, 0xC3, 285 | 0x1B, 0x4C, 0x69, 0x81, 0xF9, 0x6C, 0x7C, 0x1B, 0x15, 0x78, 0x92, 0xC2, 0x9A, 0x5F, 0x58, 0x36, 286 | 0x1F, 0x93, 0x32, 0x0E, 0xFA, 0x8C, 0x68, 0x87, 0x84, 0x45, 0xB8, 0x88, 0xE4, 0x01, 0x42, 0x00, 287 | 0x48, 0x7E, 0xCB, 0x2A, 0xB2, 0x09, 0x77, 0xBE, 0x8D, 0x32, 0xC1, 0x22, 0xE9, 0x23, 0xC0, 0xE2, 288 | 0xF1, 0x1E, 0xAA, 0x6B, 0x7E, 0x69, 0x20, 0xB6, 0x4E, 0xF0, 0xD3, 0xE8, 0x00, 0x3F, 0x73, 0x9C, 289 | 0xB0, 0x0D, 0xB1, 0x59, 0xE6, 0x72, 0x8E, 0xEC, 0xB2, 0x46, 0xE6, 0x5C, 0xB3, 0xFF, 0x92, 0xB5, 290 | 0xDD, 0x2F, 0x85, 0x3C, 0x2F, 0x5A, 0xAA, 0x53, 0x57, 0x57, 0x8D, 0x3F, 0x51, 0x2A, 0x73, 0xD7, 291 | 0xDB, 0x02, 0xA4, 0x30, 0xA2, 0xF1, 0x4C, 0x98, 0x3C, 0x11, 0xCA, 0x69, 0x2D, 0x6A, 0x83, 0x35, 292 | 0x9A, 0x4B, 0x0E, 0x7D, 0x12, 0xA2, 0xED, 0xF9, 0x3D, 0x34, 0xF8, 0xCD, 0x3A, 0xB2, 0xEA, 0xDA, 293 | 0x70, 0xE2, 0xBF, 0x88, 0x5A, 0x26, 0x1E, 0x2A, 0xE8, 0xF6, 0x84, 0xC0, 0x5E, 0xBF, 0xA3, 0x46, 294 | 0x11, 0x40, 0x1A, 0xFB, 0xEF, 0xFD, 0x26, 0x3F, 0x50, 0x2A, 0xAC, 0x7C, 0x0D, 0x06, 0xC0, 0xAD, 295 | 0xC4, 0xC2, 0x0C, 0x35, 0x03, 0xC1, 0x74, 0x0E, 0xFE, 0xB9, 0x94, 0xD2, 0xCA, 0x01, 0xD9, 0x5A, 296 | 0x21, 0x4C, 0xCA, 0x17, 0xE4, 0x8C, 0x19, 0x0C, 0xD9, 0x92, 0x24, 0x53, 0x9E, 0x42, 0x7E, 0x3F, 297 | 0x4E, 0x8E, 0xA7, 0x41, 0x1B, 0xAB, 0x72, 0xA9, 0xD3, 0x0C, 0x68, 0x13, 0xA0, 0xDD, 0xE9, 0x87, 298 | 0xC0, 0xDF, 0xDA, 0xD0, 0x7C, 0x66, 0x02, 0xBA, 0xD9, 0xF0, 0x31, 0x69, 0xEF, 0x9F, 0xE0, 0x91, 299 | 0xBB, 0x43, 0x1E, 0x54, 0x42, 0x8F, 0x69, 0x79, 0x99, 0x24, 0x89, 0x38, 0x5F, 0xB3, 0x84, 0x3E, 300 | 0x71, 0xC0, 0xA0, 0xFC, 0x96, 0x5C, 0xA2, 0x10, 0x8F, 0xDC, 0x4D, 0x41, 0x81, 0xEA, 0xEA, 0x2B, 301 | 0x7B, 0xB3, 0xC7, 0xD9, 0x3F, 0xEC, 0x2C, 0x53, 0x57, 0x0B, 0x67, 0x1E, 0x4D, 0x8B, 0x81, 0xAF, 302 | 0x38, 0x6B, 0x42, 0x1E, 0xE4, 0x5B, 0x72, 0xB0, 0x6E, 0x46, 0xCB, 0x11, 0x4E, 0xCE, 0xDF, 0xD6, 303 | 0x75, 0xB7, 0xA5, 0xD8, 0x72, 0xCC, 0x4D, 0xF2, 0x33, 0xE6, 0xDB, 0x67, 0x28, 0xE9, 0x5E, 0x62, 304 | 0x6D, 0xE3, 0x74, 0xFF, 0x96, 0x10, 0xED, 0xC3, 0x9F, 0xB5, 0x2E, 0xF5, 0xDC, 0x7E, 0x46, 0xDA, 305 | 0x94, 0x48, 0xCD, 0x51, 0xDB, 0xF9, 0xCE, 0x99, 0x05, 0x6F, 0xD2, 0x1F, 0x30, 0xF5, 0xDC, 0x95, 306 | 0x79, 0x44, 0xF7, 0x78, 0xE2, 0xFA, 0x08, 0x88, 0x2D, 0x5C, 0xAA, 0xC8, 0x26, 0x78, 0xF9, 0xF5, 307 | 0x40, 0x61, 0xD6, 0x24, 0xB7, 0xED, 0x4D, 0x6C, 0xAE, 0xB3, 0x79, 0xE6, 0x2E, 0xD5, 0x47, 0x4B, 308 | 0xBF, 0x42, 0x89, 0x15, 0xDA, 0x93, 0xE2, 0x35, 0xCB, 0x0F, 0x61, 0xC0, 0xD5, 0xFC, 0x87, 0xB8, 309 | 0x64, 0xBD, 0x78, 0x4D, 0x1B, 0x6D, 0xB8, 0xD7, 0x4B, 0xFA, 0x51, 0xB1, 0x5D, 0xE5, 0xD5, 0x4E, 310 | 0xFF, 0x04, 0xF5, 0x94, 0x89, 0x98, 0xF3, 0x50, 0xD9, 0x2F, 0x67, 0x55, 0x4D, 0x08, 0x82, 0xA0, 311 | 0xD4, 0x5D, 0x7C, 0x7A, 0x69, 0x4A, 0x82, 0x40, 0x6D, 0xBA, 0xFA, 0x54, 0x90, 0xAA, 0xA1, 0x58, 312 | 0x09, 0x9A, 0xB0, 0x43, 0x68, 0x50, 0x19, 0x99, 0xA4, 0xC6, 0x7F, 0x5F, 0xF1, 0xAC, 0x14, 0x4C, 313 | 0x3A, 0x66, 0x90, 0xF9, 0x7B, 0x96, 0x34, 0x4E, 0x7A, 0xAF, 0x8E, 0x5D, 0xF1, 0x6B, 0x1B, 0x13, 314 | 0xF8, 0xB1, 0xFD, 0xC3, 0x50, 0x1A, 0x58, 0x9D, 0x2C, 0xA3, 0x77, 0x2C, 0x39, 0x84, 0x17, 0x54, 315 | 0xFC, 0xC7, 0xC1, 0x8E, 0xD9, 0xCE, 0x8B, 0xA0, 0xDB, 0x67, 0xB5, 0x14, 0x50, 0x17, 0x84, 0xFF, 316 | 0xFA, 0x33, 0xFB, 0x11, 0xD4, 0x8E, 0xE6, 0x8C, 0x1A, 0x97, 0x20, 0xB1, 0x14, 0x1C, 0x44, 0x12, 317 | 0x09, 0xFB, 0xFF, 0x19, 0x5D, 0x99, 0xC1, 0x03, 0xB2, 0x65, 0x13, 0x49, 0x77, 0x96, 0x51, 0x9F, 318 | 0x62, 0x46, 0x62, 0x41, 0xDD, 0x06, 0x20, 0x7B, 0xC3, 0x09, 0x9A, 0x13, 0x6F, 0x40, 0x82, 0xE7, 319 | 0xFA, 0x1B, 0x50, 0x89, 0x84, 0x05, 0x78, 0xF8, 0xD4, 0xA1, 0x9C, 0x92, 0x61, 0xF8, 0x22, 0xD0, 320 | 0x20, 0xC0, 0x62, 0xBA, 0xBC, 0x05, 0x1C, 0xED, 0x4D, 0x08, 0x08, 0x75, 0x28, 0x82, 0x68, 0x1B, 321 | 0xC5, 0xEA, 0x04, 0xC3, 0x99, 0x45, 0xB2, 0xC5, 0x63, 0xEE, 0x83, 0xA3, 0xE2, 0x3B, 0x9D, 0x95, 322 | 0x54, 0xB8, 0x5C, 0x92, 0xBB, 0xEC, 0x3B, 0x81, 0x1B, 0x70, 0x43, 0x61, 0x85, 0xD5, 0x00, 0xA2, 323 | 0x6C, 0x6E, 0xB3, 0x6D, 0x56, 0x41, 0x88, 0xAA, 0x98, 0xED, 0xE9, 0xAC, 0x78, 0x49, 0x37, 0xCF, 324 | 0xAC, 0x47, 0x06, 0xEC, 0xC0, 0x1A, 0x62, 0x08, 0xDF, 0xDC, 0x4E, 0x67, 0xC2, 0x46, 0x46, 0xC9, 325 | 0x3A, 0x4E, 0xE4, 0xEE, 0xF7, 0x97, 0x8B, 0x6E, 0x74, 0x8D, 0x0E, 0x1A, 0xDC, 0x76, 0x7B, 0x17, 326 | 0x7D, 0xA3, 0xA9, 0xEB, 0xAD, 0x86, 0x90, 0x7D, 0x63, 0x16, 0xD3, 0xE8, 0xD4, 0xEB, 0xC7, 0xAB, 327 | 0x29, 0x56, 0x43, 0xB9, 0x33, 0x6A, 0x1B, 0xAD, 0x7B, 0x57, 0xA0, 0x4F, 0x52, 0xD1, 0x4A, 0x70, 328 | 0x5F, 0x9E, 0x98, 0xC2, 0x74, 0x32, 0x7E, 0xF8, 0x9F, 0x85, 0x7A, 0xD8, 0x2B, 0x93, 0x3B, 0x53, 329 | 0x03, 0x8F, 0x83, 0x41, 0x4A, 0xD8, 0x34, 0x04, 0xB2, 0xCF, 0x38, 0x84, 0x6F, 0x8D, 0x96, 0xB2, 330 | 0xC4, 0xFB, 0x6C, 0x6C, 0xBC, 0x8E, 0x2B, 0xD4, 0x34, 0xF6, 0x74, 0xED, 0x08, 0xD7, 0x7E, 0x8A, 331 | 0xD9, 0x8B, 0x14, 0x4A, 0x14, 0x62, 0x9E, 0xDF, 0xD7, 0x45, 0x1B, 0x57, 0x84, 0xDF, 0x7B, 0xD6, 332 | 0x79, 0x6E, 0x27, 0xA1, 0xCE, 0xF8, 0xD9, 0x75, 0xDD, 0x12, 0x49, 0x32, 0xE4, 0x7D, 0x69, 0xF3, 333 | 0xD0, 0x02, 0x21, 0x47, 0x4E, 0xFE, 0x9C, 0x2D, 0xB3, 0x3D, 0xDD, 0x2B, 0x57, 0x1B, 0xD9, 0xBD, 334 | 0x11, 0xA1, 0x38, 0x65, 0x44, 0x95, 0xBC, 0x36, 0xDD, 0xF0, 0xAB, 0x20, 0x85, 0x27, 0x34, 0xCE, 335 | 0x6A, 0x5F, 0x29, 0xA9, 0x91, 0xFF, 0x86, 0xCF, 0x4D, 0x4E, 0x12, 0x1F, 0xC3, 0xB1, 0xD8, 0x22, 336 | 0x57, 0x81, 0x1F, 0x1B, 0xD4, 0x62, 0xC8, 0xC6, 0x62, 0x34, 0x68, 0xC9, 0x84, 0xF3, 0x43, 0xAF, 337 | 0xB5, 0xF9, 0x9D, 0x87, 0x2B, 0x23, 0xDD, 0x34, 0x12, 0x6C, 0x97, 0xFA, 0x92, 0x30, 0x87, 0x6E, 338 | 0x28, 0xFD, 0xAF, 0x58, 0x7F, 0x9F, 0x69, 0xAA, 0x81, 0x99, 0xE8, 0xCD, 0x35, 0xE5, 0x30, 0x80, 339 | 0x58, 0x3E, 0x10, 0xEB, 0x34, 0x04, 0x90, 0xB7, 0x4B, 0xD2, 0xA8, 0x3F, 0xF4, 0x23, 0x75, 0xA7, 340 | 0x39, 0xD1, 0x2D, 0x96, 0xF0, 0xBA, 0x61, 0xEA, 0x9B, 0x8D, 0xBF, 0xE6, 0xFA, 0x1C, 0x1D, 0xD8, 341 | 0x12, 0xE1, 0x76, 0x60, 0xF3, 0x8F, 0x8C, 0x31, 0x3D, 0x70, 0x23, 0xEB, 0xF7, 0x6A, 0xBA, 0xBD, 342 | 0x2C, 0x10, 0x0A, 0x09, 0x2B, 0x62, 0xC3, 0xAE, 0xE2, 0xCF, 0xCC, 0x67, 0x7A, 0xEC, 0x62, 0xC4, 343 | 0x01, 0x75, 0xE7, 0xA9, 0x0C, 0x15, 0x1E, 0xCF, 0x65, 0x91, 0x9D, 0x3E, 0xDD, 0x7E, 0x6D, 0x00, 344 | 0xF7, 0xB0, 0x69, 0x35, 0xC8, 0xB3, 0x01, 0x9E, 0xEB, 0x9E, 0xDD, 0xB9, 0xD0, 0x56, 0x9B, 0x87, 345 | 0x8F, 0x0E, 0x36, 0xB5, 0x0E, 0x3F, 0x78, 0xC2, 0x41, 0x5C, 0x30, 0xDA, 0xAF, 0x4E, 0x7A, 0x98, 346 | 0x35, 0x09, 0x02, 0x13, 0x86, 0x01, 0xCD, 0x8A, 0x1C, 0xC1, 0x08, 0xD5, 0x1B, 0x2F, 0xB0, 0x69, 347 | 0xCD, 0x2F, 0x62, 0x60, 0x74, 0xA1, 0x32, 0x6D, 0xEC, 0xE0, 0xA5, 0xF1, 0xF8, 0x3C, 0x52, 0xB0, 348 | 0xFB, 0x92, 0x56, 0x5F, 0x2A, 0x15, 0xFC, 0x8B, 0x46, 0x46, 0xE5, 0x26, 0xBA, 0xE1, 0x87, 0x1E, 349 | 0x09, 0xD7, 0x03, 0x7E, 0x91, 0x6A, 0xBC, 0xED, 0x2F, 0xF3, 0x25, 0x4B, 0x43, 0xB5, 0x1B, 0xAD, 350 | 0x39, 0x8E, 0x36, 0x15, 0x92, 0xBA, 0x2C, 0xD9, 0xC6, 0xF4, 0xF6, 0x0D, 0xB2, 0xF6, 0x6B, 0xC1, 351 | 0x86, 0xF3, 0x4B, 0x28, 0x3C, 0x9B, 0x4B, 0x2C, 0x13, 0x5C, 0x99, 0x63, 0x66, 0x21, 0x1F, 0x60, 352 | 0xF4, 0x26, 0x55, 0x45, 0x54, 0xE5, 0xC2, 0x87, 0x46, 0xAB, 0xB8, 0xC2, 0x8D, 0xB9, 0x90, 0x72, 353 | 0x0B, 0xAC, 0xBF, 0xA6, 0xE6, 0x54, 0x84, 0xFA, 0xCE, 0x52, 0xE0, 0xF0, 0xDE, 0xEA, 0xFB, 0xD8, 354 | 0xF4, 0x76, 0x2C, 0xDB, 0x8C, 0xBE, 0x7B, 0xA8, 0xB0, 0xED, 0xC8, 0x16, 0x71, 0x95, 0x83, 0x4C, 355 | 0xD6, 0xEC, 0x1F, 0x06, 0x05, 0x64, 0x55, 0x78, 0x75, 0xFE, 0x0E, 0x5A, 0x8C, 0x34, 0xA8, 0x51, 356 | 0x24, 0x5E, 0x42, 0xBA, 0x1B, 0x64, 0xE0, 0x91, 0x64, 0xAA, 0x8F, 0x2B, 0x33, 0x99, 0x28, 0xAB, 357 | 0x88, 0x8B, 0x81, 0xA4, 0x2C, 0xA2, 0x60, 0xA6, 0xE3, 0x74, 0xED, 0xA1, 0x56, 0x21, 0xF2, 0xE0, 358 | 0x6D, 0x63, 0x97, 0x97, 0x17, 0x95, 0xEA, 0x5C, 0x3F, 0x07, 0x02, 0x95, 0x79, 0xCD, 0xCB, 0x9D, 359 | 0xFE, 0xF6, 0x75, 0x62, 0x25, 0x7C, 0x16, 0x01, 0x87, 0xDB, 0x40, 0x80, 0x81, 0x82, 0x83, 0x21, 360 | 0x14, 0xA5, 0xC8, 0x6D, 0xDB, 0xF7, 0x31, 0xC0, 0x2A, 0xB4, 0x5E, 0x67, 0xCD, 0xB9, 0x3E, 0x8F, 361 | 0x95, 0x9A, 0x22, 0xB1, 0xA6, 0x98, 0x7D, 0x94, 0xA8, 0x09, 0xAE, 0xB4, 0xDA, 0xEB, 0xAE, 0xBB, 362 | 0xE0, 0x6D, 0x83, 0x16, 0x8C, 0x4F, 0x37, 0xE0, 0x82, 0x4D, 0xDB, 0x5D, 0x83, 0xBF, 0x99, 0xA2, 363 | 0x31, 0x69, 0x00, 0x3E, 0xF9, 0x93, 0x22, 0x4D, 0x43, 0x66, 0x0E, 0x6B, 0x69, 0x3E, 0x48, 0x97, 364 | 0x93, 0x71, 0x3B, 0x02, 0x17, 0xCC, 0x32, 0x2C, 0xF9, 0x51, 0x45, 0x26, 0xF0, 0x53, 0xE9, 0xE1, 365 | 0x28, 0x06, 0x71, 0x5E, 0x32, 0x93, 0x15, 0xCF, 0xE5, 0x12, 0x56, 0x21, 0xCC, 0xB0, 0xFE, 0x58, 366 | 0x42, 0x5E, 0xDB, 0x8C, 0xD6, 0x69, 0xCB, 0xF0, 0xE3, 0x88, 0x39, 0x05, 0x3C, 0x22, 0xD2, 0x2F, 367 | 0x3B, 0x5A, 0x96, 0x3F, 0xD7, 0x36, 0xF8, 0xE5, 0x07, 0x48, 0x52, 0xC8, 0x3D, 0x14, 0xA5, 0xD3, 368 | 0x51, 0x27, 0xBE, 0x8A, 0x65, 0xD3, 0x3F, 0xEB, 0x66, 0xA1, 0x7F, 0x12, 0x02, 0x76, 0xC1, 0x5B, 369 | 0xFA, 0xB2, 0x67, 0xF5, 0x0F, 0x79, 0x8C, 0x6C, 0x9C, 0xB2, 0xBE, 0xD6, 0xB3, 0xA9, 0x71, 0x99, 370 | 0x64, 0xC6, 0x9C, 0xC9, 0xB0, 0x03, 0x45, 0xE0, 0x61, 0x81, 0x60, 0x18, 0x9D, 0x4F, 0xCC, 0xAD, 371 | 0x6B, 0x2B, 0x33, 0x6A, 0xB0, 0x21, 0xC5, 0x87, 0x07, 0xD9, 0xA2, 0x8D, 0xA1, 0x18, 0x86, 0xF9, 372 | 0x83, 0xB3, 0x43, 0x66, 0x30, 0x6F, 0x26, 0x74, 0x4D, 0xF7, 0x82, 0xEC, 0x9C, 0x90, 0xF9, 0x6D, 373 | 0x02, 0x0D, 0x88, 0x78, 0xB1, 0x58, 0x8F, 0xB6, 0xF8, 0x5E, 0x40, 0x5B, 0xDA, 0x4A, 0x14, 0x03, 374 | 0x6B, 0xEB, 0x3C, 0xD0, 0x7C, 0x66, 0xEF, 0x74, 0x2A, 0xAF, 0x03, 0x34, 0x1B, 0x37, 0xC9, 0xB0, 375 | 0x0A, 0xD4, 0x56, 0x3D, 0x80, 0xCA, 0x22, 0x29, 0xC9, 0xDE, 0x14, 0x8C, 0x00, 0xBE, 0x85, 0x5A, 376 | 0x82, 0x96, 0x29, 0xF0, 0x93, 0x2F, 0x18, 0xA1, 0x0D, 0x84, 0xBC, 0x61, 0xB6, 0x16, 0x24, 0x5F, 377 | 0x7E, 0xC0, 0x93, 0x63, 0xC8, 0x48, 0x6A, 0xA5, 0x35, 0x53, 0x23, 0x42, 0x5B, 0x98, 0xBB, 0xE2, 378 | 0x92, 0x7E, 0x31, 0x7E, 0x40, 0x9F, 0xA5, 0x17, 0x07, 0x56, 0x71, 0xB3, 0x9F, 0x90, 0x52, 0x30, 379 | 0x55, 0x4D, 0xD5, 0x2F, 0x25, 0x83, 0xBF, 0x5B, 0x31, 0xE8, 0xDF, 0x76, 0x02, 0xF0, 0xE6, 0x5A, 380 | 0x54, 0xC7, 0xF1, 0x7F, 0x94, 0xD2, 0x96, 0x4F, 0xC8, 0x63, 0xE1, 0xA8, 0xBD, 0xEA, 0x78, 0x3C, 381 | 0x90, 0x32, 0x01, 0x50, 0x61, 0xC6, 0x22, 0x5B, 0x0E, 0xAE, 0x4F, 0x70, 0x3D, 0xC9, 0x21, 0x9C, 382 | 0x6F, 0xE8, 0x8D, 0x74, 0x38, 0x8C, 0x58, 0xBF, 0x1F, 0x48, 0x3F, 0x44, 0xF8, 0xB1, 0xAD, 0xE2, 383 | 0x38, 0x4C, 0x1B, 0x3C, 0xB8, 0x87, 0xB9, 0x85, 0xC7, 0xBB, 0x3A, 0x1C, 0x73, 0x88, 0xB7, 0x9C, 384 | 0xAF, 0x1C, 0xE0, 0xD0, 0x13, 0xFC, 0xEF, 0x52, 0xAE, 0x12, 0x67, 0xEE, 0x8B, 0xD3, 0xB6, 0x2D, 385 | 0x7D, 0x27, 0xE6, 0x1F, 0x90, 0xEC, 0x4A, 0x99, 0x5E, 0x1C, 0x98, 0xAF, 0xE8, 0xA8, 0xF0, 0xF6, 386 | 0x1D, 0x42, 0x34, 0xBE, 0x4C, 0x94, 0x7B, 0xC7, 0x6F, 0xC4, 0x06, 0x18, 0x8E, 0x98, 0x7D, 0xCD, 387 | 0xC4, 0x77, 0x65, 0x65, 0xD7, 0x4F, 0x91, 0x95, 0xA7, 0x25, 0xCB, 0xD3, 0xDE, 0x0D, 0x7D, 0x2D, 388 | 0x87, 0xA3, 0x6B, 0x7B, 0x35, 0xE8, 0xD3, 0xBE, 0x8A, 0x15, 0x54, 0x3D, 0x4E, 0x30, 0x29, 0xF4, 389 | 0x80, 0x8C, 0x7E, 0xFD, 0xF9, 0xA2, 0x5A, 0x5F, 0xFD, 0x88, 0x84, 0x13, 0x84, 0xE3, 0x95, 0x47, 390 | 0x40, 0x41, 0x95, 0xCE, 0x28, 0x9B, 0xF7, 0xAB, 0x80, 0x6F, 0xD6, 0x5A, 0xBD, 0x9C, 0x1A, 0x2C, 391 | 0x6B, 0xC9, 0xC3, 0x4C, 0xF5, 0xCA, 0x02, 0x9A, 0x22, 0x26, 0x52, 0x4E, 0x43, 0x5E, 0xB1, 0x72, 392 | 0x68, 0xC5, 0x9E, 0x49, 0x0D, 0xD1, 0x20, 0xE0, 0xF2, 0xA9, 0x84, 0xDB, 0x51, 0x95, 0x9F, 0xF7, 393 | 0xD1, 0xDF, 0xFE, 0x54, 0x33, 0xFA, 0x3C, 0x24, 0xEC, 0x53, 0xF0, 0x32, 0xA6, 0x6C, 0xAE, 0x73, 394 | 0xB7, 0x92, 0xDD, 0x5D, 0xB8, 0x28, 0x2F, 0x0C, 0xCD, 0x94, 0x48, 0x6E, 0x9D, 0x62, 0x26, 0x48, 395 | 0x12, 0x42, 0x4C, 0x5A, 0x9A, 0xA0, 0xBE, 0xC5, 0x21, 0xC2, 0x9A, 0x29, 0x31, 0xAA, 0x9E, 0x8F, 396 | 0x28, 0x8E, 0x0D, 0x85, 0x38, 0x52, 0x2C, 0x8D, 0x1E, 0xD2, 0x83, 0x1C, 0xED, 0xD7, 0x58, 0xD5, 397 | 0x68, 0xEB, 0x62, 0x90, 0xFC, 0x1A, 0x9F, 0xBF, 0x09, 0x5F, 0x3E, 0x31, 0x38, 0xF3, 0xEE, 0x94, 398 | 0x7A, 0x45, 0x9A, 0x1E, 0xFE, 0xBF, 0x4E, 0x3D, 0x1E, 0xFE, 0x67, 0xC9, 0x30, 0x55, 0x9A, 0xAB, 399 | 0x30, 0x93, 0x10, 0x9B, 0xAD, 0xCA, 0x34, 0x4F, 0xAD, 0xC5, 0x90, 0x35, 0xD0, 0x37, 0xDF, 0x8C, 400 | 0x3C, 0xF5, 0xA1, 0x06, 0x62, 0x82, 0xE4, 0xDC, 0xB4, 0xF7, 0x51, 0x32, 0x6B, 0x04, 0x20, 0x30, 401 | 0x96, 0x52, 0x60, 0xD5, 0xCC, 0x34, 0x80, 0xF5, 0xC8, 0x7F, 0x3B, 0x5F, 0x73, 0xCA, 0x6C, 0x73, 402 | 0x88, 0xAF, 0xEA, 0x6E, 0x1D, 0x07, 0xBB, 0x25, 0xF2, 0x64, 0xC6, 0xF3, 0x0A, 0x65, 0x63, 0x27, 403 | 0x27, 0x3F, 0xF2, 0x03, 0xCA, 0x97, 0xD6, 0xA6, 0x58, 0x66, 0x47, 0x3D, 0x21, 0x70, 0x77, 0xF3, 404 | 0xC3, 0x9C, 0xA1, 0xCA, 0x2C, 0x85, 0x40, 0x7C, 0x3A, 0x03, 0xB1, 0xA3, 0xCA, 0x7D, 0x69, 0x0B, 405 | 0x5C, 0xF5, 0x24, 0x53, 0xE5, 0x6B, 0x5A, 0x16, 0x3D, 0x21, 0xF1, 0xE6, 0xA0, 0x6A, 0x2B, 0xFD, 406 | 0x17, 0x03, 0xDB, 0xAA, 0x33, 0xE8, 0x2D, 0x65, 0x38, 0x4B, 0x7B, 0x7E, 0xCD, 0x40, 0xB2, 0x03, 407 | 0x98, 0xCE, 0x0C, 0x11, 0x57, 0xCC, 0xF2, 0x65, 0x51, 0x25, 0xC4, 0xA2, 0x74, 0x02, 0x21, 0x26, 408 | 0x08, 0xCF, 0x71, 0x70, 0x0E, 0x9F, 0xD5, 0x65, 0xE7, 0xEF, 0x93, 0xF7, 0x81, 0x1A, 0x92, 0xFD, 409 | 0x95, 0xF1, 0x82, 0xE9, 0xEB, 0xA7, 0xF5, 0xE4, 0xAA, 0xA4, 0x39, 0x4E, 0x64, 0x5C, 0xB0, 0xE2, 410 | 0x35, 0x34, 0x05, 0xC8, 0xC9, 0xD5, 0xC0, 0x34, 0x4E, 0x0A, 0xA7, 0x77, 0x9E, 0xC0, 0x83, 0x0C, 411 | 0x82, 0x1B, 0xF6, 0x44, 0x62, 0x33, 0xC8, 0xB0, 0xCF, 0x47, 0x76, 0x05, 0x13, 0x84, 0xA0, 0x5B, 412 | 0xE1, 0x60, 0x2A, 0x06, 0x09, 0xA6, 0x68, 0xD7, 0x3D, 0x2C, 0x83, 0xDF, 0x3F, 0xC0, 0x36, 0xE7, 413 | 0x34, 0xAD, 0x52, 0x2A, 0xB8, 0x08, 0x3F, 0x7D, 0x76, 0xF9, 0xA1, 0x90, 0xD8, 0xE6, 0x9B, 0x8D, 414 | 0xC9, 0xC1, 0x24, 0x62, 0xD3, 0x37, 0x02, 0x88, 0x8A, 0xE1, 0x25, 0xCE, 0xF5, 0xC6, 0x02, 0x32, 415 | 0x4C, 0x64, 0x9C, 0xFE, 0xC8, 0x2B, 0x6E, 0xCF, 0x12, 0x17, 0x7E, 0x16, 0x69, 0x52, 0xF9, 0xDA, 416 | 0x3A, 0x80, 0x90, 0x35, 0xDF, 0xDD, 0xF4, 0xCE, 0x23, 0xB1, 0x6F, 0xEF, 0x9D, 0x3B, 0x23, 0xAA, 417 | 0xE2, 0x74, 0x4F, 0xBC, 0x50, 0x32, 0x24, 0xEC, 0xF6, 0x06, 0xC3, 0x11, 0x85, 0x76, 0x20, 0xD2, 418 | 0x04, 0xE2, 0x29, 0xA7, 0x90, 0xDE, 0xDB, 0xF3, 0x72, 0x92, 0xD2, 0x5D, 0x2A, 0x6D, 0xC9, 0xB8, 419 | 0x9B, 0x16, 0xFF, 0x13, 0x1A, 0xCD, 0xB1, 0xDD, 0x9A, 0xA3, 0xDA, 0x14, 0xA5, 0x5A, 0x47, 0x94, 420 | 0xC3, 0x8E, 0x4F, 0x58, 0x52, 0x1D, 0xFC, 0x51, 0xDA, 0xB2, 0xC5, 0xC5, 0x89, 0xA3, 0xE6, 0xF1, 421 | 0x7B, 0x04, 0x25, 0xAB, 0x1D, 0x70, 0x2F, 0x49, 0xA6, 0x87, 0x11, 0x00, 0x9F, 0xB2, 0x80, 0x17, 422 | 0xD1, 0x5E, 0x23, 0x79, 0x1F, 0x4B, 0x33, 0xE7, 0xCE, 0x65, 0x40, 0x00, 0xE0, 0x79, 0xAF, 0xA9, 423 | 0xC0, 0x7E, 0x66, 0x9D, 0xC9, 0x79, 0x6C, 0x78, 0x46, 0x11, 0xC4, 0x41, 0x32, 0x80, 0x30, 0x8E, 424 | 0x4D, 0xF3, 0x96, 0xCD, 0xE7, 0xD3, 0x83, 0x38, 0xE9, 0x8E, 0xB2, 0x0F, 0x88, 0x90, 0x27, 0x71, 425 | 0x28, 0x4D, 0x8C, 0x0B, 0xB7, 0x8D, 0x73, 0xB0, 0xDD, 0x13, 0xB5, 0x25, 0x5A, 0xE6, 0xC0, 0x44, 426 | 0x0F, 0x52, 0x6D, 0xAC, 0x25, 0xDD, 0x53, 0x69, 0xD5, 0x1D, 0x85, 0xDD, 0x48, 0x7D, 0xA1, 0x5A, 427 | 0x2E, 0x4B, 0x6F, 0xF8, 0x00, 0x18, 0x44, 0xC3, 0x45, 0x7D, 0x71, 0x1A, 0x32, 0x42, 0x48, 0x1E, 428 | 0xE8, 0xBB, 0x77, 0x86, 0x51, 0x07, 0x63, 0x94, 0xB6, 0x73, 0x7D, 0x3E, 0x9D, 0x5D, 0x4F, 0xDD, 429 | 0x11, 0xAD, 0x51, 0xBF, 0xDC, 0x8A, 0x77, 0xA5, 0xAD, 0xA7, 0x67, 0x1B, 0xF6, 0x82, 0x03, 0xEA, 430 | 0xA9, 0xE0, 0x30, 0x9F, 0x58, 0x33, 0x84, 0xC8, 0xBD, 0x52, 0x09, 0xA6, 0x20, 0x04, 0xD6, 0x55, 431 | 0x4D, 0xD0, 0x97, 0x88, 0x85, 0x60, 0x41, 0xCC, 0xEF, 0x6A, 0x00, 0x1D, 0x2F, 0x92, 0x40, 0xC0, 432 | 0xA9, 0x2E, 0xBD, 0x93, 0xF8, 0xA9, 0xDF, 0x1D, 0x50, 0xDC, 0xE2, 0xF4, 0xE9, 0x01, 0xA3, 0x6C, 433 | 0x42, 0xE0, 0x29, 0xC5, 0x51, 0x0C, 0x6E, 0xA4, 0x5E, 0xE4, 0x7F, 0x27, 0x46, 0xE1, 0x54, 0xDF, 434 | 0x00, 0xC7, 0x9D, 0x1C, 0xE6, 0x49, 0xC3, 0x87, 0x7C, 0x10, 0x76, 0x81, 0xF1, 0x28, 0xF8, 0x3A, 435 | 0x73, 0xD5, 0xB6, 0x7B, 0x46, 0x5C, 0x79, 0x72, 0xE3, 0xC3, 0xE7, 0x51, 0xEE, 0x88, 0x57, 0xC5, 436 | 0x0D, 0x03, 0xB3, 0xD4, 0x56, 0x1E, 0x29, 0xC4, 0x5D, 0x69, 0xD7, 0x59, 0x77, 0x3A, 0x47, 0x35, 437 | 0xE3, 0xCD, 0x5D, 0x57, 0x3C, 0x3D, 0xD3, 0x66, 0x32, 0xEB, 0x4D, 0xC2, 0xE3, 0xC0, 0xC9, 0x03, 438 | 0x89, 0x59, 0xCF, 0x3D, 0xE0, 0x8C, 0x0C, 0x83, 0x09, 0x3E, 0x46, 0x5B, 0x32, 0xB8, 0x0F, 0x0D, 439 | 0x96, 0x26, 0x87, 0xB5, 0x56, 0x22, 0xBA, 0x91, 0x92, 0xA0, 0xE6, 0x78, 0x59, 0x29, 0xEA, 0x43, 440 | 0x6C, 0x88, 0x5D, 0x33, 0x65, 0xD7, 0xFB, 0xC5, 0x7F, 0xF3, 0x53, 0xEF, 0x1E, 0x47, 0x5C, 0x99, 441 | 0x68, 0xE8, 0xBC, 0x01, 0x02, 0x42, 0x07, 0xA6, 0x62, 0x62, 0xC9, 0xAC, 0xDE, 0xCE, 0x1B, 0x26, 442 | 0x37, 0x68, 0x58, 0xB3, 0x8D, 0x60, 0x28, 0xD6, 0xBA, 0x75, 0xC8, 0xF2, 0x78, 0x6C, 0x59, 0x47, 443 | 0xD3, 0xA8, 0x5B, 0xC0, 0x1E, 0x68, 0x20, 0xCA, 0x7C, 0xCC, 0xB9, 0xDC, 0x0B, 0xDE, 0x77, 0x80, 444 | 0xFE, 0x44, 0xE6, 0x84, 0xEF, 0x06, 0x58, 0x9B, 0x1E, 0xFF, 0x86, 0xC3, 0xFD, 0x0B, 0xB2, 0x18, 445 | 0x4A, 0xD0, 0x2D, 0xD2, 0x0E, 0x37, 0x4E, 0x7D, 0xCF, 0x6C, 0xC1, 0x21, 0x3C, 0x9D, 0x58, 0xD2, 446 | 0x78, 0x4E, 0x66, 0xA5, 0xC9, 0x02, 0x1C, 0xAF, 0x6D, 0x95, 0x80, 0xDC, 0x6A, 0x08, 0x8E, 0x1A, 447 | 0x4C, 0x31, 0xA2, 0xE3, 0x6E, 0x45, 0x24, 0x50, 0x26, 0xD2, 0x23, 0x5D, 0x53, 0x2F, 0x8D, 0x2A, 448 | 0x1A, 0xCA, 0x22, 0x0F, 0x81, 0x7C, 0x3D, 0xBE, 0x78, 0xF1, 0xF7, 0x56, 0x28, 0xE1, 0xA5, 0xCE, 449 | 0x0B, 0x32, 0xE6, 0x9B, 0x24, 0x15, 0x7C, 0xEC, 0x69, 0x9B, 0xB7, 0x42, 0x98, 0x05, 0xC0, 0x76, 450 | 0x54, 0x12, 0xF2, 0x23, 0x39, 0xD2, 0x3C, 0x09, 0xBF, 0x9B, 0x18, 0xD6, 0x3F, 0x2A, 0x0F, 0xF7, 451 | 0x53, 0x5D, 0x7D, 0xAB, 0x6F, 0x2A, 0x82, 0xBF, 0xB1, 0x94, 0xCB, 0x03, 0x23, 0xF4, 0xF6, 0x2C, 452 | 0x43, 0xC2, 0xC4, 0xF7, 0x29, 0x29, 0xDC, 0xD1, 0xD3, 0x72, 0x90, 0xE5, 0x6D, 0xAA, 0xC2, 0xF3, 453 | 0xEB, 0x6B, 0x60, 0x51, 0x96, 0x9C, 0xDA, 0xB7, 0xAF, 0xD8, 0x98, 0x0C, 0xA1, 0xF9, 0x20, 0xE5, 454 | 0xFB, 0x21, 0xF1, 0x9A, 0xD8, 0x34, 0x7C, 0xF5, 0x8B, 0xCE, 0xA3, 0x34, 0xCD, 0x03, 0x26, 0x47, 455 | 0x37, 0x56, 0xF4, 0xC6, 0x31, 0x62, 0x02, 0xE0, 0xE2, 0x70, 0xEC, 0x90, 0x57, 0x34, 0xF6, 0x87, 456 | 0x4C, 0x2D, 0xDC, 0x4F, 0x72, 0xF4, 0x34, 0xBA, 0x74, 0xA6, 0x7C, 0x67, 0x8C, 0xE9, 0x5D, 0x78, 457 | 0x1A, 0x98, 0x42, 0x5A, 0x09, 0xF2, 0x35, 0x45, 0xF0, 0x30, 0xA1, 0x81, 0x80, 0xFB, 0xB0, 0xB7, 458 | 0xA7, 0x3F, 0x43, 0xF8, 0x7F, 0xC3, 0xB1, 0xAA, 0xF1, 0x73, 0xB3, 0xF7, 0x41, 0x29, 0xB4, 0xD8, 459 | 0xD5, 0xBA, 0x59, 0x98, 0x02, 0x4C, 0x90, 0x18, 0x1D, 0x52, 0x70, 0xF0, 0xAD, 0xE6, 0xF6, 0x76, 460 | 0xFE, 0x85, 0x90, 0xAB, 0x3F, 0x91, 0x8E, 0x15, 0x85, 0x5D, 0x8C, 0xEB, 0x11, 0xFD, 0x7E, 0x41, 461 | 0x53, 0xF0, 0x43, 0x76, 0x73, 0xE9, 0x9B, 0x7D, 0xF9, 0x5F, 0x38, 0xA3, 0x36, 0xD3, 0xB3, 0x13, 462 | 0x07, 0x45, 0x51, 0x17, 0x27, 0xE1, 0x23, 0x29, 0xA7, 0xCE, 0xD0, 0x46, 0x97, 0xC2, 0x12, 0x63, 463 | 0x9D, 0xB5, 0xD7, 0x18, 0xA7, 0x65, 0x1D, 0x34, 0x25, 0x8B, 0xDD, 0x9D, 0x01, 0x78, 0xA6, 0x9B, 464 | 0xC0, 0xC7, 0x44, 0xA2, 0xCB, 0xBD, 0xA1, 0xC2, 0x45, 0xF3, 0x90, 0x39, 0x70, 0x17, 0xAE, 0x86, 465 | 0x4D, 0xB7, 0x83, 0x69, 0x46, 0xCE, 0x6E, 0x07, 0x8B, 0x4A, 0xE9, 0x78, 0xBB, 0xD4, 0x87, 0x70, 466 | 0x4F, 0x40, 0x10, 0xF0, 0x85, 0x2D, 0xF4, 0x70, 0x19, 0x4B, 0x3F, 0x7F, 0xB1, 0xB2, 0xE0, 0x1B, 467 | 0x97, 0xA1, 0x52, 0xF8, 0xD9, 0xBC, 0x57, 0xC8, 0x29, 0x63, 0x01, 0x47, 0x06, 0x36, 0x25, 0xEE, 468 | 0xE4, 0x36, 0xA7, 0x29, 0xED, 0x28, 0x23, 0x4C, 0x6D, 0x6F, 0xCA, 0xA3, 0xE8, 0x94, 0xF2, 0x3B, 469 | 0xFA, 0xEF, 0xE3, 0xE0, 0xF9, 0xF0, 0x43, 0xDD, 0x36, 0x5D, 0xC6, 0xAF, 0xEF, 0x8D, 0xF2, 0xD8, 470 | 0xA0, 0x06, 0xCB, 0xEA, 0x2E, 0x1E, 0x79, 0x08, 0x06, 0xE9, 0x10, 0x78, 0x87, 0xC9, 0x4A, 0x11, 471 | 0x3C, 0xDE, 0x6B, 0x79, 0x5F, 0x68, 0x55, 0x8D, 0xD3, 0x79, 0x5A, 0x1D, 0xDC, 0x6B, 0xBD, 0x26, 472 | 0xF0, 0x2D, 0x0C, 0x72, 0x49, 0xD5, 0x54, 0x6B, 0x07, 0x55, 0x79, 0x82, 0xB6, 0x69, 0x52, 0x19, 473 | 0x05, 0xA4, 0xC1, 0x90, 0x57, 0x5A, 0xBD, 0x05, 0xC9, 0x73, 0x6E, 0xD9, 0xBA, 0x7B, 0x98, 0x89, 474 | 0x68, 0x54, 0xF9, 0x16, 0x05, 0xFE, 0x61, 0x56, 0xDB, 0x22, 0x8A, 0x83, 0x6F, 0x0C, 0xBF, 0x00, 475 | 0x24, 0xA7, 0xE3, 0xE0, 0x95, 0xA7, 0xDE, 0x84, 0x0F, 0x13, 0xFC, 0xBC, 0x03, 0x3F, 0xB9, 0xCD, 476 | 0xAC, 0x5C, 0xFC, 0xAE, 0xF5, 0xF2, 0xBD, 0x85, 0x06, 0x20, 0xF0, 0xE1, 0x13, 0x2D, 0x59, 0x9C, 477 | 0x13, 0x00, 0xEF, 0x16, 0xBC, 0x84, 0x38, 0x29, 0x1D, 0x3F, 0x95, 0xE6, 0x62, 0x11, 0xA1, 0xAB, 478 | 0x1D, 0x7A, 0x30, 0x9A, 0x26, 0x39, 0x26, 0x44, 0xFF, 0x6E, 0x30, 0x1B, 0xDD, 0x18, 0x1F, 0xE7, 479 | 0x4F, 0xD2, 0x42, 0xCA, 0xD2, 0x26, 0x57, 0xE5, 0x60, 0xB2, 0x48, 0x55, 0x78, 0xDE, 0x26, 0xD2, 480 | 0xDC, 0x60, 0xA4, 0xB6, 0x9D, 0x81, 0xB8, 0x0E, 0xF2, 0x12, 0xBD, 0x41, 0x8A, 0x88, 0x9A, 0xF6, 481 | 0x27, 0x08, 0x37, 0xDD, 0xD1, 0x3E, 0xD1, 0x68, 0x08, 0xB8, 0x8D, 0x45, 0x82, 0x6B, 0xA6, 0x64, 482 | 0xC7, 0x7E, 0xA3, 0x7A, 0x0C, 0x7F, 0x31, 0x96, 0x90, 0xA5, 0x01, 0x33, 0x12, 0xB2, 0x05, 0x80, 483 | 0x5E, 0xFB, 0xD2, 0xE0, 0xF0, 0x0E, 0xC2, 0xCA, 0x35, 0x74, 0x9C, 0xE4, 0xD4, 0x57, 0x3E, 0x5D, 484 | 0xA3, 0x5E, 0x1E, 0x11, 0xD9, 0x98, 0x4A, 0x73, 0x02, 0x07, 0x33, 0xFF, 0x53, 0x89, 0x2C, 0x9A, 485 | 0x22, 0xAA, 0xFF, 0x45, 0xFC, 0x49, 0x80, 0x9B, 0xFB, 0x3A, 0x21, 0x93, 0x39, 0xEF, 0xF7, 0xB7, 486 | 0xCF, 0xE2, 0x88, 0x1E, 0x12, 0x9D, 0x2A, 0x70, 0xFD, 0x95, 0x16, 0x3C, 0x4B, 0x1A, 0x15, 0x55, 487 | 0x86, 0x6D, 0x82, 0x7D, 0xF5, 0x09, 0x77, 0x60, 0xF0, 0xB0, 0xBE, 0xAB, 0x9E, 0x2D, 0xD9, 0x27, 488 | 0xF8, 0x21, 0x4F, 0xF4, 0x33, 0xC6, 0x80, 0x85, 0x8A, 0xEF, 0x1D, 0x0C, 0x8D, 0xB9, 0xBA, 0x51, 489 | 0xB1, 0x0F, 0x27, 0xDD, 0x64, 0xDF, 0x74, 0xC3, 0xE8, 0xE3, 0xB0, 0x03, 0x56, 0x94, 0xB4, 0x3C, 490 | 0x59, 0x7A, 0xAC, 0x57, 0x28, 0x30, 0x81, 0xC9, 0xA1, 0x3E, 0x97, 0x9C, 0x08, 0x2F, 0x61, 0x1C, 491 | 0x5F, 0xF5, 0xF2, 0x5A, 0x82, 0x9E, 0x62, 0x1C, 0x56, 0x51, 0x35, 0xBE, 0x81, 0x80, 0x53, 0x9A, 492 | 0xF9, 0x31, 0xB7, 0x66, 0x02, 0x6D, 0x66, 0x26, 0xEF, 0x12, 0x62, 0xCD, 0xD4, 0x6E, 0xE4, 0x79, 493 | 0xED, 0x5E, 0xE1, 0x29, 0xE8, 0x58, 0xCD, 0xFD, 0xF4, 0x3F, 0xFC, 0x71, 0xDC, 0x22, 0x1D, 0xB2, 494 | 0x6B, 0x51, 0x47, 0x0F, 0xFE, 0x47, 0x0D, 0xA3, 0xA4, 0xA3, 0x34, 0x82, 0x6D, 0xCA, 0xE0, 0x68, 495 | 0xFC, 0xED, 0x14, 0x42, 0x23, 0xF0, 0xC0, 0x35, 0x71, 0x0E, 0x45, 0x2A, 0xFB, 0xB5, 0x57, 0x56, 496 | 0x35, 0xB1, 0xC3, 0xAB, 0xB8, 0xDD, 0xAD, 0x6A, 0xDB, 0x61, 0x0D, 0xCA, 0xB0, 0x8F, 0x6B, 0x2F, 497 | 0x08, 0x7A, 0x12, 0x02, 0x26, 0x85, 0xB2, 0xDA, 0xBC, 0xE5, 0x32, 0x98, 0x94, 0x4C, 0x9B, 0xA0, 498 | 0xAA, 0x03, 0x65, 0x26, 0x6F, 0xCF, 0xD8, 0x65, 0x98, 0xF4, 0x62, 0x1B, 0xDD, 0x51, 0x6D, 0xC5, 499 | 0xC4, 0x82, 0x5A, 0x05, 0x03, 0x31, 0x1B, 0x91, 0x8A, 0xEA, 0x77, 0x67, 0x9E, 0xAD, 0x62, 0x40, 500 | 0xD8, 0x5B, 0x63, 0x68, 0x1E, 0x10, 0x7A, 0x80, 0x7E, 0x93, 0x8D, 0xE8, 0xB3, 0xD5, 0xC5, 0xF9, 501 | 0xBD, 0x5F, 0xBD, 0xE6, 0x26, 0x8D, 0x46, 0x39, 0x80, 0xA1, 0xF1, 0xBC, 0x69, 0xD6, 0xDB, 0x0B, 502 | 0x5E, 0x98, 0x1C, 0x15, 0xFE, 0x43, 0x05, 0x5F, 0xD1, 0x1B, 0x5F, 0xFD, 0xB5, 0xDC, 0x9A, 0xC7, 503 | 0x48, 0x2D, 0x07, 0xEE, 0x80, 0x82, 0x8F, 0xA7, 0x9F, 0x0F, 0x36, 0x8B, 0x49, 0x6A, 0xEF, 0x7F, 504 | 0x4C, 0x6F, 0xE2, 0x47, 0x6E, 0xF2, 0x79, 0x49, 0x22, 0x16, 0xE6, 0x78, 0xBB, 0x65, 0x61, 0x9E, 505 | 0xDF, 0x27, 0x47, 0x37, 0x52, 0x2A, 0xE7, 0x51, 0xB3, 0x34, 0x67, 0x70, 0xC9, 0x43, 0x59, 0xA9, 506 | 0x7C, 0xD7, 0xE3, 0xB6, 0x9D, 0x06, 0xD8, 0xA1, 0x15, 0xF8, 0xF4, 0x82, 0x67, 0x60, 0x72, 0xAF, 507 | 0x0D, 0x67, 0x3A, 0x5C, 0x29, 0x76, 0x95, 0x58, 0xFF, 0x05, 0xCF, 0xD6, 0xDE, 0xF9, 0x39, 0x48, 508 | 0xF0, 0x4B, 0x74, 0xAC, 0x5E, 0xEA, 0xE9, 0xB7, 0xD6, 0x75, 0x74, 0x9F, 0xD7, 0x1C, 0xC2, 0x66, 509 | 0xA6, 0x73, 0x25, 0x6C, 0xD9, 0xF8, 0x82, 0x48, 0x6B, 0xE6, 0xC0, 0x45, 0x5F, 0xB1, 0x93, 0xB8, 510 | 0x05, 0x78, 0x34, 0x78, 0xA1, 0xD2, 0x57, 0x10, 0xFF, 0xDC, 0x03, 0x93, 0x63, 0x1A, 0x56, 0x0F, 511 | 0xDF, 0x95, 0x44, 0xC0, 0x30, 0x3A, 0x4C, 0x01, 0x03, 0xAE, 0xCC, 0x64, 0x0B, 0x75, 0xCA, 0xB5, 512 | 0x18, 0x69, 0x5A, 0x20, 0xED, 0x2C, 0x50, 0x36, 0xAD, 0x99, 0x91, 0xA2, 0xAA, 0x38, 0x96, 0x75, 513 | 0xB4, 0x5A, 0xF5, 0x9A, 0x89, 0x08, 0x31, 0x55, 0xDD, 0x2B, 0x6C, 0x49, 0x33, 0x83, 0x84, 0xFA, 514 | 0x1F, 0xFB, 0x08, 0xFE, 0x1B, 0x93, 0xA3, 0xCF, 0xED, 0xD1, 0x76, 0xB7, 0x12, 0xF6, 0x4C, 0xB2, 515 | 0x7E, 0xD2, 0x9A, 0x16, 0xB4, 0x23, 0x43, 0x18, 0xEE, 0x9A, 0x61, 0x43, 0x05, 0x00, 0x1D, 0x71, 516 | 0xF3, 0x7B, 0xE1, 0x6C, 0x9F, 0xEA, 0x68, 0x89, 0x3B, 0x4A, 0xB8, 0xD5, 0x49, 0xB2, 0x2F, 0x2E, 517 | 0xDB, 0x54, 0xB9, 0x63, 0x80, 0x20, 0xDF, 0xBD, 0x21, 0x15, 0xEF, 0xC1, 0x89, 0xBA, 0x4F, 0xDA, 518 | 0x18, 0x72, 0x78, 0x23, 0x16, 0x60, 0x82, 0x1E, 0x02, 0x0E, 0x29, 0x69, 0x1C, 0x07, 0xFA, 0x3A, 519 | 0x44, 0x63, 0x8B, 0x01, 0xFB, 0x7A, 0x50, 0xE7, 0x64, 0xB2, 0x45, 0xB8, 0x18, 0xB7, 0xEF, 0xC6, 520 | 0xAD, 0x5F, 0x0D, 0xC9, 0xCC, 0xB6, 0xDA, 0xA0, 0x0D, 0x43, 0xEC, 0x9F, 0x63, 0x96, 0xAB, 0x92, 521 | 0x1B, 0x28, 0xF4, 0x21, 0x45, 0x60, 0xEC, 0xD1, 0x43, 0xAD, 0x51, 0x1F, 0x76, 0x6D, 0xEF, 0x9B, 522 | 0x26, 0x62, 0xC5, 0x1D, 0xCC, 0xD8, 0x29, 0xB7, 0xF3, 0xA5, 0xCF, 0x37, 0xD8, 0x3E, 0xF5, 0x5C, 523 | 0x11, 0xE0, 0x7D, 0x67, 0x90, 0x65, 0xFD, 0xC7, 0xD7, 0x4A, 0xF4, 0x73, 0x34, 0xFB, 0x46, 0x20, 524 | 0x20, 0x95, 0x10, 0x42, 0x34, 0x06, 0xAB, 0x5C, 0x1C, 0x17, 0x3D, 0xE9, 0xAA, 0xC2, 0xE5, 0xF4, 525 | 0x80, 0xDE, 0xAE, 0x2C, 0x98, 0x3E, 0x2A, 0x8A, 0x09, 0x0D, 0xF5, 0xDA, 0x49, 0xC3, 0x11, 0x9B, 526 | 0x86, 0x34, 0x45, 0xEB, 0x32, 0xFA, 0xFE, 0x7E, 0xFA, 0x12, 0x18, 0x68, 0x4C, 0x33, 0x9B, 0xED, 527 | 0xA2, 0x0A, 0xB9, 0xC4, 0xF3, 0x7D, 0x6F, 0x3B, 0x41, 0x0B, 0xDD, 0x41, 0xAE, 0xB9, 0x50, 0x37, 528 | 0xB8, 0xE4, 0x48, 0x76, 0x0E, 0x23, 0x71, 0xEB, 0x13, 0x22, 0x01, 0xC0, 0xA9, 0x85, 0x7F, 0xC6, 529 | 0x82, 0x43, 0xBF, 0x1F, 0x37, 0x33, 0xBF, 0xB5, 0x38, 0x5F, 0xD8, 0xC4, 0xFD, 0xAB, 0xB0, 0x88, 530 | 0xA2, 0x85, 0x9C, 0x18, 0x9D, 0x40, 0x26, 0x76, 0xC4, 0xF1, 0x3D, 0x77, 0x96, 0xBB, 0x66, 0xF0, 531 | 0xA2, 0x5F, 0x11, 0xEA, 0x6E, 0x50, 0x32, 0x6D, 0x41, 0xED, 0x86, 0x69, 0x6E, 0x02, 0xF7, 0x7D, 532 | 0x40, 0x57, 0x81, 0xA2, 0x54, 0x97, 0x9A, 0xC7, 0x25, 0x29, 0x69, 0x89, 0x11, 0x0E, 0x48, 0x53, 533 | 0x16, 0x5D, 0xE6, 0x4D, 0x77, 0x30, 0x97, 0x8A, 0x05, 0x57, 0x67, 0xF0, 0xC8, 0xB3, 0x1E, 0x8E, 534 | 0xBE, 0x3F, 0x03, 0x9F, 0x03, 0x2E, 0xF0, 0x0E, 0xA2, 0x8D, 0xDA, 0x5F, 0x3C, 0xF3, 0xA1, 0xF2, 535 | 0x16, 0x36, 0xDC, 0xBA, 0x7E, 0x25, 0xE9, 0xDD, 0x0C, 0x90, 0x37, 0xC3, 0x9A, 0xD6, 0xC2, 0x24, 536 | 0x72, 0x21, 0x0A, 0x79, 0x83, 0x16, 0xA0, 0x0C, 0x83, 0x69, 0xC3, 0xD9, 0x38, 0xC9, 0x22, 0xDB, 537 | 0xC8, 0x07, 0x8D, 0x50, 0x4D, 0xF6, 0x0C, 0x38, 0xAC, 0x7E, 0x63, 0xE9, 0x61, 0x66, 0x0D, 0x7D, 538 | 0x22, 0x25, 0xE9, 0x05, 0xA7, 0x7F, 0xB2, 0x34, 0x33, 0x10, 0x12, 0x52, 0x7D, 0x22, 0x86, 0x7E, 539 | 0xD8, 0xAF, 0x8A, 0x48, 0x9E, 0xC2, 0x6D, 0xCD, 0x2D, 0x7F, 0xB4, 0xC8, 0x9F, 0x06, 0x50, 0xA1, 540 | 0x5A, 0x37, 0x23, 0xF3, 0xDC, 0x34, 0x15, 0x01, 0xEF, 0x03, 0x78, 0x13, 0xE8, 0x5D, 0x4B, 0x1F, 541 | 0xD2, 0xD5, 0x66, 0x88, 0x65, 0x9A, 0x0B, 0x74, 0xBB, 0x45, 0xAB, 0xE8, 0x6D, 0x30, 0x49, 0xDD, 542 | 0x59, 0x28, 0x84, 0xC7, 0x03, 0xB3, 0xE3, 0xDF, 0xAB, 0x46, 0xDE, 0x56, 0x4C, 0x43, 0x10, 0xE8, 543 | 0x5A, 0x68, 0x70, 0xFC, 0xAB, 0xD0, 0xCC, 0x28, 0x47, 0xE7, 0x13, 0xE0, 0x9B, 0x0B, 0x36, 0x4B, 544 | 0x2C, 0x30, 0xF9, 0x58, 0x11, 0xD2, 0x23, 0x61, 0xC4, 0x6C, 0x1D, 0xB0, 0x47, 0x6F, 0xDE, 0x38, 545 | 0xCD, 0xE8, 0x9A, 0x2A, 0x9C, 0x27, 0x61, 0x7D, 0x12, 0x1D, 0x52, 0xCC, 0xC7, 0xEE, 0xDF, 0x09, 546 | 0x60, 0x02, 0x9D, 0xD4, 0xF9, 0xAD, 0x4A, 0x31, 0xA3, 0x55, 0x3F, 0x20, 0x3D, 0x5B, 0xC0, 0xEE, 547 | 0x0D, 0x82, 0x60, 0x89, 0x69, 0x4A, 0xDA, 0xA7, 0x83, 0xA2, 0x4E, 0x57, 0xE2, 0x3F, 0xE9, 0x4E, 548 | 0x51, 0x98, 0x6A, 0x4E, 0x71, 0x94, 0xE9, 0x64, 0x4F, 0x67, 0x54, 0x87, 0xE2, 0xB0, 0xC5, 0xFF, 549 | 0x41, 0xF4, 0x09, 0x6E, 0x27, 0x20, 0xD9, 0xD1, 0x0F, 0xAC, 0xC0, 0xE4, 0xCF, 0x36, 0x3C, 0x15, 550 | 0x60, 0xB7, 0xAD, 0xEE, 0x37, 0x8B, 0x8E, 0x0F, 0x93, 0x81, 0x8F, 0x2A, 0x4F, 0x43, 0xBD, 0x01, 551 | 0x32, 0xE7, 0x9E, 0xCD, 0xFD, 0x4D, 0x07, 0x16, 0x11, 0x9A, 0xA6, 0xE5, 0xE0, 0xCC, 0x47, 0xD9, 552 | 0xD4, 0x98, 0x80, 0x57, 0x2D, 0x35, 0x6D, 0xD1, 0xBF, 0x7C, 0x2E, 0x29, 0x16, 0xBD, 0x14, 0x33, 553 | 0x36, 0x19, 0x22, 0x9E, 0xD1, 0xBF, 0x39, 0x09, 0xFE, 0xAA, 0xE4, 0x55, 0xB6, 0x91, 0xCE, 0x2C, 554 | 0x2D, 0x79, 0xCB, 0xBB, 0xBA, 0xC5, 0xF1, 0x2F, 0xFD, 0x3D, 0xFA, 0x8A, 0x73, 0x1E, 0xE6, 0xEA, 555 | 0x56, 0xF8, 0x31, 0x5D, 0x46, 0x98, 0xB7, 0xA7, 0x85, 0x71, 0x0A, 0xA1, 0x74, 0x2B, 0xCE, 0x70, 556 | 0x04, 0x85, 0x7F, 0x48, 0x25, 0x80, 0xE3, 0x21, 0x9F, 0x44, 0xBE, 0xE2, 0x69, 0x50, 0x76, 0x1F, 557 | 0xFA, 0xED, 0xF3, 0x0F, 0xA6, 0x9B, 0x1F, 0x92, 0x1F, 0x0E, 0xEF, 0x3A, 0xC6, 0x9C, 0xB3, 0xB9, 558 | 0x67, 0xDE, 0x38, 0x76, 0xFF, 0x9A, 0xE2, 0x8A, 0xA5, 0xA0, 0xCA, 0xA7, 0x6F, 0x0C, 0x8B, 0x5B, 559 | 0x89, 0x8B, 0xB0, 0x4B, 0xC1, 0xDA, 0x2F, 0xE2, 0x28, 0x17, 0xD4, 0xA0, 0x7B, 0x83, 0xED, 0x6F, 560 | 0x2B, 0x92, 0xC7, 0x25, 0xD8, 0x61, 0xD1, 0xDF, 0xE8, 0xE3, 0x13, 0xFC, 0xAE, 0xE9, 0xC8, 0x13, 561 | 0x26, 0x89, 0xEC, 0xB7, 0x2E, 0xB1, 0xF8, 0x6F, 0xED, 0xC4, 0x92, 0x3C, 0x63, 0x4B, 0x93, 0xF9, 562 | 0x90, 0xEA, 0xF6, 0xDF, 0x4B, 0xA4, 0xD1, 0x40, 0x10, 0xA5, 0x8D, 0x44, 0x69, 0xA3, 0xF1, 0x1A, 563 | 0x41, 0xFB, 0xAC, 0x21, 0xC5, 0x15, 0x14, 0xFE, 0x35, 0x02, 0x4C, 0x89, 0xEE, 0xB6, 0xD4, 0x62, 564 | 0x0A, 0xD5, 0xE0, 0xBD, 0xF0, 0x73, 0x52, 0x06, 0xC8, 0xCF, 0x78, 0xE6, 0xB3, 0x01, 0xA6, 0x2A, 565 | 0x09, 0x99, 0x9E, 0x5E, 0x21, 0x1E, 0x66, 0x5E, 0xB6, 0x64, 0x63, 0x30, 0x5E, 0x90, 0x78, 0x45, 566 | 0xCF, 0x16, 0x29, 0xB7, 0xBA, 0xD7, 0x28, 0x3B, 0x24, 0xCB, 0x57, 0xE3, 0x00, 0xA1, 0xE9, 0x7B, 567 | 0xD9, 0x12, 0x01, 0x11, 0x2F, 0xC1, 0x4C, 0x31, 0x3A, 0x17, 0x72, 0x9B, 0x14, 0x64, 0x61, 0xD6, 568 | 0xB1, 0xE4, 0x14, 0x85, 0x45, 0x5B, 0xBE, 0x06, 0x63, 0xB1, 0x9B, 0xA6, 0x0D, 0xBC, 0xE7, 0x6A, 569 | 0x97, 0x72, 0xDE, 0x6C, 0x48, 0xA1, 0x78, 0x16, 0xCE, 0x4A, 0x32, 0x84, 0xA4, 0xE3, 0xDC, 0xAD, 570 | 0x20, 0x87, 0x24, 0x5B, 0x7F, 0x6A, 0x39, 0x65, 0x6B, 0x61, 0x38, 0x0F, 0x38, 0xBE, 0x20, 0x77, 571 | 0x4A, 0x09, 0xDB, 0x28, 0x38, 0x6C, 0x0A, 0xD0, 0x17, 0x3B, 0x84, 0xB0, 0x86, 0xF8, 0x8F, 0x62, 572 | 0x9F, 0x9A, 0x6A, 0x60, 0xE9, 0x8E, 0x78, 0xA3, 0x4A, 0x58, 0x8B, 0x5E, 0x56, 0xD1, 0xF7, 0xDF, 573 | 0x68, 0x25, 0x77, 0xD3, 0xE9, 0xA4, 0x56, 0xB1, 0x88, 0xE3, 0xDF, 0x10, 0xC0, 0x56, 0x08, 0xAB, 574 | 0x04, 0x03, 0xC0, 0x11, 0x70, 0x32, 0xCB, 0x62, 0x44, 0xE0, 0x2D, 0x0C, 0x02, 0xF2, 0x42, 0xC3, 575 | 0x8C, 0x1A, 0x55, 0x03, 0x86, 0xE0, 0xCC, 0xB3, 0x65, 0x2F, 0x5F, 0x16, 0x0F, 0x5C, 0x69, 0xEA, 576 | 0xFA, 0x08, 0xE7, 0xD8, 0x1A, 0x24, 0xBE, 0xD9, 0x60, 0x16, 0x76, 0xBD, 0xE2, 0x1B, 0xB5, 0x47, 577 | 0xEE, 0xFB, 0xC6, 0x73, 0x96, 0x19, 0xB9, 0x00, 0x9A, 0xFE, 0xF0, 0xC9, 0x6C, 0xCF, 0xD5, 0xA3, 578 | 0x59, 0x3E, 0x0B, 0xCC, 0x32, 0x95, 0xFA, 0x75, 0x9B, 0x29, 0x24, 0xDC, 0xBD, 0xD8, 0xFA, 0x74, 579 | 0x1C, 0x7E, 0xDA, 0x95, 0x4D, 0x64, 0x06, 0x0F, 0x74, 0x62, 0x13, 0xA5, 0x72, 0xC8, 0x69, 0xB3, 580 | 0xDA, 0xEF, 0x52, 0xED, 0x57, 0xAD, 0x33, 0x34, 0x0E, 0x5F, 0x3C, 0xD9, 0x26, 0xE6, 0xC7, 0x0C, 581 | 0xA1, 0x93, 0x60, 0x63, 0xBC, 0xE1, 0x4C, 0xD8, 0xD6, 0xA6, 0xD4, 0x21, 0x93, 0x20, 0x01, 0x78, 582 | 0xD7, 0xF4, 0x83, 0xBA, 0xB6, 0x5F, 0xD2, 0x39, 0x69, 0xEA, 0x4E, 0xF2, 0x90, 0x0C, 0xEC, 0x72, 583 | 0x05, 0x90, 0x65, 0x4D, 0xCE, 0xAE, 0x91, 0xA9, 0x57, 0x13, 0x79, 0x99, 0x3C, 0x96, 0xA0, 0x65, 584 | 0xCA, 0x30, 0x05, 0xBC, 0xB6, 0x25, 0xE9, 0xA0, 0x4B, 0x52, 0x6E, 0x6C, 0xCC, 0x31, 0xF6, 0x64, 585 | 0x30, 0x54, 0x45, 0x91, 0xA4, 0xE1, 0x82, 0x9F, 0xAE, 0x4A, 0x80, 0x6C, 0x06, 0x6B, 0xF1, 0x35, 586 | 0x4D, 0xC6, 0x64, 0x4C, 0x7B, 0x76, 0x4F, 0x46, 0xCD, 0xFB, 0x9C, 0x93, 0x20, 0x83, 0xA5, 0xFE, 587 | 0xC2, 0x73, 0x39, 0xBE, 0x91, 0xC5, 0x04, 0x40, 0xDA, 0x16, 0xAE, 0xC5, 0xDE, 0x26, 0xC7, 0x54, 588 | 0x9C, 0xD9, 0x00, 0xB7, 0x78, 0xC9, 0xF8, 0x81, 0xA9, 0x03, 0xFF, 0x8F, 0xAE, 0x2E, 0x76, 0x6D, 589 | 0x84, 0xAA, 0xE0, 0xBD, 0xF7, 0x39, 0x38, 0x41, 0x52, 0x91, 0x08, 0xC5, 0xC5, 0x7B, 0x3B, 0x5C, 590 | 0x93, 0x8D, 0x4A, 0xAE, 0x28, 0x35, 0xFD, 0x5B, 0x7F, 0xA6, 0xC4, 0xE8, 0x71, 0x48, 0x13, 0x26, 591 | 0xCC, 0xDA, 0x6B, 0x3B, 0x5D, 0x04, 0x94, 0x7E, 0x5E, 0x78, 0x82, 0x94, 0xF1, 0xB2, 0x74, 0xC0, 592 | 0x80, 0xD3, 0x40, 0x5E, 0x2B, 0xCC, 0x43, 0x5C, 0xD9, 0x7B, 0x81, 0x36, 0x2D, 0xE5, 0x1C, 0x82, 593 | 0x2B, 0x19, 0x2D, 0xFB, 0x77, 0xE3, 0xBF, 0xB4, 0x88, 0xE7, 0x76, 0xFD, 0xDC, 0xB8, 0x79, 0xB5, 594 | 0x94, 0xC8, 0x12, 0x41, 0xB9, 0x74, 0xED, 0x5D, 0x33, 0x36, 0xA2, 0x63, 0xD5, 0x5C, 0x2B, 0xA9, 595 | 0xD0, 0x5E, 0xB2, 0xEF, 0x39, 0x01, 0x36, 0x79, 0x41, 0xCB, 0xDB, 0x68, 0x78, 0x8D, 0x39, 0x83, 596 | 0x42, 0x46, 0xC2, 0x0B, 0xF6, 0xCA, 0x2B, 0x53, 0x8A, 0x64, 0xC0, 0x58, 0xA5, 0x94, 0x83, 0x87, 597 | 0x57, 0x58, 0x03, 0x88, 0x53, 0xCF, 0x72, 0xB0, 0x75, 0xB4, 0x8F, 0xE6, 0x5C, 0x51, 0x9F, 0x2C, 598 | 0x5A, 0x2B, 0x9D, 0xDA, 0x8F, 0x05, 0x8D, 0x34, 0x5B, 0x26, 0x8B, 0x99, 0xF6, 0xD9, 0x1D, 0xFF, 599 | 0x08, 0xBD, 0xC3, 0x97, 0x71, 0xCD, 0x56, 0x59, 0x74, 0x93, 0x37, 0x83, 0xD4, 0x44, 0xB8, 0x7C, 600 | 0xC6, 0x0A, 0x9F, 0x65, 0x50, 0x22, 0x12, 0x63, 0xF2, 0x8D, 0x87, 0x75, 0x76, 0x7F, 0x59, 0x46, 601 | 0x95, 0x40, 0xF2, 0x94, 0x86, 0x40, 0x89, 0xA3, 0xC6, 0xF6, 0xDF, 0x33, 0x58, 0xF3, 0x3F, 0x19, 602 | 0xC9, 0xA0, 0x8A, 0xAA, 0xEA, 0xC1, 0x3C, 0x15, 0x4D, 0x69, 0xD0, 0x4B, 0x6E, 0xD2, 0xEC, 0x06, 603 | 0x27, 0xDB, 0x71, 0xAD, 0x89, 0x8F, 0x62, 0xA2, 0xF7, 0xD2, 0xA7, 0x8F, 0x34, 0x51, 0x9A, 0xB9, 604 | 0x79, 0x40, 0x97, 0x63, 0x65, 0x31, 0x6C, 0x25, 0xBA, 0xEF, 0xC9, 0x33, 0xB1, 0x21, 0x2C, 0x89, 605 | 0x62, 0xC2, 0x88, 0x3C, 0x6D, 0xF8, 0x47, 0xB7, 0x82, 0x72, 0x68, 0x97, 0x68, 0x42, 0xB5, 0x95, 606 | 0xE4, 0x0E, 0x91, 0xE4, 0x4B, 0x8B, 0xFE, 0x3C, 0xAE, 0x44, 0x74, 0xF9, 0xCA, 0xC8, 0x06, 0xC6, 607 | 0x61, 0xD3, 0xFF, 0x5A, 0xFE, 0xC5, 0xB3, 0x7F, 0xA8, 0xCB, 0x4A, 0xF6, 0x4F, 0xC5, 0x32, 0x89, 608 | 0xF3, 0xC8, 0x79, 0x50, 0x26, 0xE5, 0x27, 0xCB, 0x21, 0x86, 0x3E, 0xE5, 0xC7, 0x42, 0x51, 0x42, 609 | 0x17, 0x6E, 0x50, 0x00, 0x9F, 0x4F, 0x49, 0x9D, 0x7E, 0x26, 0x57, 0x0F, 0xAA, 0x5B, 0x4B, 0x9C, 610 | 0xAE, 0xEF, 0x95, 0x3C, 0xDC, 0xF2, 0x52, 0xBF, 0x07, 0xB2, 0x98, 0x6C, 0xDA, 0xE3, 0x17, 0xF9, 611 | 0xC6, 0x1F, 0xB5, 0xCF, 0xE8, 0x8C, 0xA6, 0x93, 0x63, 0xAB, 0x68, 0xFE, 0xB6, 0x82, 0x3D, 0x47, 612 | 0x91, 0x09, 0x29, 0x96, 0x5D, 0x3D, 0xF6, 0x50, 0x88, 0x29, 0x38, 0xA3, 0x63, 0xC9, 0x52, 0x2B, 613 | 0xF3, 0x14, 0x28, 0xB6, 0xBB, 0x30, 0x25, 0xB6, 0x67, 0x44, 0x0C, 0x1D, 0x98, 0x75, 0x9F, 0x67, 614 | 0xB6, 0xBA, 0x6F, 0xA1, 0xF8, 0x4F, 0x58, 0xBA, 0xEB, 0x22, 0x79, 0x22, 0x50, 0x17, 0x61, 0x68, 615 | 0x07, 0xD9, 0x88, 0x1D, 0x7F, 0xA0, 0x70, 0x11, 0xB6, 0xDF, 0x9F, 0x31, 0x99, 0x0B, 0x5F, 0xB2, 616 | 0xD0, 0x82, 0xC1, 0x16, 0xCB, 0x93, 0x34, 0xAE, 0x84, 0xE6, 0x9E, 0x8A, 0x3A, 0x6A, 0x7C, 0x31, 617 | 0x22, 0x30, 0xD2, 0xA8, 0xB6, 0x8C, 0x9E, 0xEC, 0xEE, 0xC5, 0x05, 0xB9, 0x8C, 0x8F, 0xC4, 0x01, 618 | 0x9E, 0x8B, 0xEB, 0x2A, 0xD8, 0xAB, 0x0E, 0x9F, 0xD3, 0x92, 0xC8, 0x1D, 0x1D, 0xEE, 0xF3, 0x45, 619 | 0xAB, 0x20, 0x74, 0xA5, 0xF0, 0xE8, 0x53, 0x8E, 0x63, 0x8C, 0x82, 0xB0, 0xCA, 0x67, 0x53, 0x0A, 620 | 0x01, 0xD9, 0x3A, 0x0B, 0x92, 0x3A, 0x2A, 0xD6, 0xB8, 0x33, 0x14, 0x39, 0xAC, 0x0C, 0x95, 0x20, 621 | 0x45, 0x19, 0x1C, 0x22, 0x69, 0x82, 0xDA, 0xB4, 0x50, 0xED, 0xF3, 0x67, 0xDE, 0x37, 0x54, 0x08, 622 | 0x2B, 0x7C, 0x3D, 0xF3, 0xCA, 0x2D, 0xF9, 0x02, 0xFE, 0x34, 0xD2, 0x1C, 0xD9, 0xFF, 0x8C, 0xB3, 623 | 0x2C, 0x5E, 0x1D, 0x87, 0x60, 0x32, 0x71, 0xB9, 0x8E, 0x89, 0xB5, 0xFB, 0x79, 0xF6, 0x5C, 0xBA, 624 | 0x27, 0x77, 0x46, 0xB6, 0x8C, 0x0F, 0xBE, 0x2B, 0x99, 0xD2, 0xB5, 0x04 625 | }; 626 | 627 | 628 | 629 | unsigned sm_size = sizeof(sm); 630 | -------------------------------------------------------------------------------- /sm.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | extern unsigned char sm[]; 4 | extern unsigned sm_size; 5 | -------------------------------------------------------------------------------- /smsched.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 Ilya Zhuravlev 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining 5 | * a copy of this software and associated documentation files 6 | * (the "Software"), to deal in the Software without restriction, 7 | * including without limitation the rights to use, copy, modify, merge, 8 | * publish, distribute, sublicense, and/or sell copies of the Software, 9 | * and to permit persons to whom the Software is furnished to do so, 10 | * subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be 13 | * included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 19 | * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 20 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 21 | * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | */ 23 | 24 | #include "smsched.h" 25 | 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | #include 35 | #include 36 | #include 37 | #include 38 | 39 | #include "rvk.h" 40 | 41 | static shared_buffer_t shared_buffer; 42 | static uint8_t f00d_0x80_block[0x80]; 43 | static task_t *g_current_task; 44 | 45 | static volatile unsigned int *regs = (void *)F00D_REG_BASE; 46 | 47 | static void set_kernel_enp(void) { 48 | unsigned int x; 49 | 50 | void *enp_buf = (void *)(SCRATCH_BASE + 0x850000); 51 | TRACEF("wait 1...\n"); 52 | while (!((x = regs[0]) & 0x100)); 53 | TRACEF("wait 1 done: 0x%08X.\n", x); 54 | x &= 0x600; 55 | 56 | TRACEF("check 1...\n"); 57 | if (x == 0x400) { 58 | TRACEF("check 1 failed.\n"); 59 | return; // SCE_SBL_ERROR_SERV_ETIMEDOUT 0x800f0427 60 | } 61 | 62 | TRACEF("check 2...\n"); 63 | if (x == 0x200) { 64 | TRACEF("check 2 special case\n"); 65 | x = regs[0]; 66 | regs[0] = x; 67 | } else if (x == 0x600) { 68 | regs[0x10000/4] = 1; 69 | regs[0x10000/4] = 0; 70 | 71 | TRACEF("wait 2...\n"); 72 | while (regs[0x10000/4]); 73 | TRACEF("wait 2 done.\n"); 74 | 75 | TRACEF("wait 3...\n"); 76 | while ((regs[0x10004/4] & 0x80000000) == 0); 77 | TRACEF("wait 3 done.\n"); 78 | 79 | TRACEF("set addr.\n"); 80 | regs[0x10/4] = ((uint32_t)enp_buf & ~3) | 1; 81 | TRACEF("set addr done.\n"); 82 | 83 | TRACEF("wait 4...\n"); 84 | while (1) { 85 | x = regs[0]; 86 | if (x == 2) { 87 | TRACEF("wait 4 failed\n"); // SCE_SBL_ERROR_SERV_ETIMEDOUT 0x800f0427 88 | return; 89 | } else if (x == 1) { 90 | regs[0] = 1; 91 | TRACEF("wait 4 done\n"); 92 | break; 93 | } 94 | } 95 | } else { 96 | TRACEF("check 2 special case2 x = 0x%x\n", x); 97 | } 98 | 99 | TRACEF("wait 5\n"); 100 | while ((uint16_t)regs[0] != 257); 101 | regs[0] = 257; 102 | TRACEF("wait 5 done\n"); 103 | 104 | TRACEF("init shared_buffer\n"); 105 | regs[0x10/4] = (uint32_t)&shared_buffer; 106 | regs[0x10/4] = 1; 107 | TRACEF("wait 6\n"); 108 | while ((uint16_t)regs[0] != 258); 109 | regs[0] = 258; 110 | TRACEF("wait 6 done\n"); 111 | } 112 | 113 | static void set_rvk(void *rvk_buf, size_t rvk_size) { 114 | TRACEF("f00d_set_rvk\n"); 115 | 116 | uint32_t paddr_list[2] = { (uint32_t)rvk_buf, rvk_size }; 117 | shared_buffer.rvk_init.unk1 = 1; 118 | shared_buffer.rvk_init.rvk_paddr_list = paddr_list; 119 | arch_clean_cache_range((addr_t)&shared_buffer, sizeof(shared_buffer)); 120 | arch_clean_cache_range((addr_t)paddr_list, sizeof(paddr_list)); 121 | arch_clean_cache_range((addr_t)rvk_buf, rvk_size); 122 | 123 | TRACEF("wait 1\n"); 124 | regs[0x10/4] = 0x80A01; 125 | while (regs[0x10/4]); 126 | TRACEF("wait 1 done\n"); 127 | 128 | TRACEF("wait 2\n"); 129 | uint32_t ret = 0; 130 | do { 131 | ret = regs[0]; 132 | } while(!(uint16_t)ret); 133 | regs[0] = ret; 134 | TRACEF("wait 2 done ret=0x%x\n", ret); 135 | if (ret & 0x8000) 136 | TRACEF("wait 2 error: 0x%x\n", 0x800F0300 | (ret & 0xFF)); 137 | } 138 | 139 | static void set_0x80_block(void) { 140 | TRACEF("f00d_set_0x80_block\n"); 141 | 142 | shared_buffer.buf_0x80_init.paddr = f00d_0x80_block; 143 | shared_buffer.buf_0x80_init.len = sizeof(f00d_0x80_block); 144 | arch_clean_cache_range((addr_t)f00d_0x80_block, sizeof(f00d_0x80_block)); 145 | arch_clean_cache_range((addr_t)&shared_buffer, sizeof(shared_buffer)); 146 | 147 | TRACEF("wait 1\n"); 148 | regs[0x10/4] = 0x80901; 149 | while (regs[0x10/4]); 150 | TRACEF("wait 1 done\n"); 151 | 152 | TRACEF("wait 2\n"); 153 | uint32_t ret = 0; 154 | do { 155 | ret = regs[0]; 156 | } while(!(uint16_t)ret); 157 | regs[0] = ret; 158 | TRACEF("wait 2 done ret=0x%x\n", ret); 159 | if (ret & 0x8000) 160 | TRACEF("wait 2 error: 0x%x\n", 0x800F0300 | (ret & 0xFF)); 161 | } 162 | 163 | static enum handler_return cry2arm0(void *arg) { 164 | bool resched = false; 165 | 166 | TRACEF("cry2arm0\n"); 167 | 168 | uint32_t ret = regs[0]; 169 | TRACEF("ret = 0x%x\n", ret); 170 | if (ret & 0x40000) { 171 | regs[0] = 0x40000; 172 | return resched ? INT_RESCHEDULE : INT_NO_RESCHEDULE; 173 | } else if (ret & 0x20000) { 174 | regs[0] = 0x20000; 175 | TRACEF("(vita would kernel panic)\n"); 176 | return resched ? INT_RESCHEDULE : INT_NO_RESCHEDULE; 177 | } 178 | 179 | if (ret & 0x10000) { 180 | ret = 0x10000; 181 | } else { 182 | ret = ret & 0xFFFF; 183 | if (!ret) 184 | TRACEF("(vita would kernel panic)\n"); 185 | } 186 | regs[0] = ret; 187 | 188 | task_t *t = g_current_task; 189 | if (!t) { 190 | TRACEF("panic: current_task is null\n"); 191 | return resched ? INT_RESCHEDULE : INT_NO_RESCHEDULE; 192 | } 193 | 194 | TRACEF("old state: %d => ", t->state); 195 | 196 | if (t->some_0x40_buffer) 197 | arch_invalidate_cache_range((addr_t)t->some_0x40_buffer, 0x40); 198 | 199 | switch (t->state) { 200 | case 12: 201 | if (ret == 0x10000) { 202 | t->state = 10; 203 | t->field_28 = t->some_0x40_buffer[0]; 204 | } else if (ret == 0x108) { 205 | t->state = 9; 206 | } else { 207 | t->state = 3; 208 | t->field_28 = ret; 209 | } 210 | break; 211 | case 11: 212 | if (ret == 0x10000) { 213 | t->state = 10; 214 | t->field_28 = t->some_0x40_buffer[0]; 215 | } else if (ret == 0x107) { 216 | t->state = 7; 217 | } else { 218 | t->state = 3; 219 | t->field_28 = ret; 220 | } 221 | break; 222 | case 10: 223 | if (ret == 0x103) { 224 | t->state = 3; 225 | } else { 226 | TRACEF("panic: unknown transition from state=11 with ret=0x%x\n", ret); 227 | return resched ? INT_RESCHEDULE : INT_NO_RESCHEDULE; 228 | } 229 | break; 230 | case 9: 231 | if (ret == 0x104) { 232 | t->state = 4; 233 | } else { 234 | t->state = 3; 235 | t->field_28 = ret; 236 | } 237 | break; 238 | case 2: 239 | if (ret == 0x10000) { 240 | t->state = 3; 241 | } else if (ret == 0x104) { 242 | t->state = 4; 243 | } 244 | break; 245 | case 1: 246 | case 3: 247 | case 4: 248 | case 5: 249 | g_current_task = NULL; 250 | break; 251 | case 7: 252 | if (ret == 0x104) { 253 | t->state = 1; 254 | } else { 255 | t->state = 3; 256 | t->field_28 = ret; 257 | } 258 | break; 259 | case 6: 260 | if (t->field_34 == 3) { 261 | if (t->suspendbuf) { 262 | free(t->suspendbuf); 263 | t->suspendbuf = NULL; 264 | } 265 | if (t->suspendbuf_plist) { 266 | free(t->suspendbuf_plist); 267 | t->suspendbuf_plist = NULL; 268 | } 269 | t->field_34 = 1; 270 | } 271 | if (ret == 0x10000) { 272 | t->state = 10; 273 | // some other BS 274 | } else if (ret == 0x103) { 275 | t->state = 2; 276 | } else { 277 | t->state = 3; 278 | t->field_28 = ret; 279 | } 280 | break; 281 | case 8: 282 | if (ret == 0x10000) { 283 | t->state = 10; 284 | t->field_28 = t->some_0x40_buffer[0]; 285 | } else if (ret == 0x104) { 286 | t->state = 5; 287 | } else { 288 | t->state = 3; 289 | t->field_28 = ret; 290 | } 291 | break; 292 | } 293 | 294 | TRACEF("new state: %d\n", t->state); 295 | 296 | return resched ? INT_RESCHEDULE : INT_NO_RESCHEDULE; 297 | } 298 | 299 | static enum handler_return cry2arm123(void *argv) { 300 | uint32_t arg = (uint32_t)argv; 301 | bool resched = false; 302 | 303 | TRACEF("cry2arm123 %d\n", arg); 304 | 305 | // ack result 306 | uint32_t ret = regs[0x4/4]; 307 | regs[0x4/4] = ret; 308 | 309 | // 1 = good 310 | // 3 = 0x800F0002 = SCE_SBL_ERROR_COMMON_ENOENT (invalid cmd id) 311 | // 5 = 0x800F0001 = SCE_SBL_ERROR_COMMON_EPERM (trying to pass secure memory as command buffer) 312 | // 9 = 0x800F0005 = SCE_SBL_ERROR_COMMON_EIO = ??? 313 | 314 | TRACEF("ret = 0x%x\n", ret); 315 | 316 | if (g_current_task) 317 | g_current_task->cry123 = 1; 318 | 319 | return resched ? INT_RESCHEDULE : INT_NO_RESCHEDULE; 320 | } 321 | 322 | static void init_int(void) { 323 | register_int_handler(200, cry2arm0, NULL); 324 | unmask_interrupt(200); 325 | for (int i = 201; i < 204; ++i) { 326 | register_int_handler(i, cry2arm123, (void*)i); 327 | unmask_interrupt(i); 328 | } 329 | } 330 | 331 | void smsched_init(void) { 332 | set_kernel_enp(); 333 | 334 | // this is optional in vita firmware 335 | // (but nothing will work if it's not set) 336 | set_rvk(g_rvk_buf, g_rvk_size); 337 | 338 | set_0x80_block(); 339 | 340 | init_int(); 341 | } 342 | 343 | task_t *smsched_create_task(void *sm, size_t sm_size, int partition_id) { 344 | task_t *t = calloc(1, sizeof(*t)); 345 | 346 | t->num_paddrs = 1; 347 | t->paddr_list = malloc(8); 348 | t->paddr_list[0] = (uint32_t)sm; 349 | t->paddr_list[1] = sm_size; 350 | arch_clean_cache_range((addr_t)sm, sm_size); 351 | 352 | t->state = 1; 353 | t->some_0x40_buffer = calloc(1, 0x40); 354 | t->field_60 = 2; 355 | t->partition_id = partition_id; 356 | t->auth_id = 0x2808000000000001ULL; 357 | t->part_0xF00C = 0xF000C000000080ULL; 358 | t->part_0xFFFF = 0xFFFFFFFF00000000ULL; 359 | 360 | t->field_34 = 1; 361 | 362 | t->delayed_cmd = calloc(1, DELAYED_CMD_SIZE); 363 | arch_clean_cache_range((addr_t)t->delayed_cmd, DELAYED_CMD_SIZE); 364 | 365 | return t; 366 | } 367 | 368 | int smsched_suspend_current_task(void) { 369 | int ret = 0; 370 | 371 | if (!g_current_task) { 372 | TRACEF("g_current_task is NULL\n"); 373 | return -1; 374 | } 375 | if (g_current_task->state != 2) { 376 | TRACEF("g_current_task->state is not RUNNING\n"); 377 | return -1; 378 | } 379 | 380 | task_t *t = g_current_task; 381 | TRACEF("2 => 11\n"); 382 | t->state = 11; 383 | 384 | uint8_t *suspendbuf = calloc(1, SUSPENDBUF_SIZE); 385 | uint32_t *plist = calloc(1, 0x80); 386 | plist[0] = (uint32_t)suspendbuf; 387 | plist[1] = SUSPENDBUF_SIZE; 388 | 389 | t->field_34 = 3; // suspended 390 | t->suspendbuf = suspendbuf; 391 | t->suspendbuf_plist = plist; 392 | t->suspendbuf_plist_cnt = 1; 393 | 394 | memset(&shared_buffer, 0, sizeof(shared_buffer)); 395 | shared_buffer.sm2.num_paddrs = t->suspendbuf_plist_cnt; 396 | shared_buffer.sm2.paddr_list = t->suspendbuf_plist; 397 | shared_buffer.sm2.buf_0x40 = t->some_0x40_buffer; 398 | shared_buffer.sm2.delayed_cmd = t->delayed_cmd; 399 | 400 | arch_clean_cache_range((addr_t)&shared_buffer, sizeof(shared_buffer)); 401 | arch_clean_cache_range((addr_t)t->suspendbuf, SUSPENDBUF_SIZE); 402 | arch_clean_cache_range((addr_t)t->some_0x40_buffer, 0x40); 403 | arch_clean_cache_range((addr_t)t->suspendbuf_plist, 0x80); 404 | arch_clean_cache_range((addr_t)t->delayed_cmd, DELAYED_CMD_SIZE); 405 | 406 | TRACEF("wait\n"); 407 | regs[0x10/4] = 0x100401; 408 | do { 409 | ret = regs[0x10/4]; 410 | if (ret < 0) 411 | TRACEF("ret: 0x%x\n", ret); 412 | } while (ret); 413 | TRACEF("wait done\n"); 414 | 415 | return 0; 416 | } 417 | 418 | int smsched_load_task(task_t *t) { 419 | int ret = 0; 420 | 421 | if (g_current_task) { 422 | TRACEF("cannot load: a task is already running\n"); 423 | return -1; 424 | } 425 | 426 | TRACEF("reschedule: %d => 6\n", t->state); 427 | t->state = 6; 428 | 429 | // on vita this is done after the following submit, which actually is racy 430 | g_current_task = t; 431 | 432 | if (t->field_34 == 2 || t->field_34 == 3) { 433 | TRACEF("resuming previously suspended task\n"); 434 | 435 | regs[0x54/4] = -1; 436 | regs[0x58/4] = -1; 437 | regs[0x5C/4] = -1; 438 | regs[0x14/4] = t->delayed_cmd[0]; 439 | regs[0x18/4] = t->delayed_cmd[1]; 440 | regs[0x1C/4] = t->delayed_cmd[2]; 441 | 442 | // submit_f00d_2 443 | memset(&shared_buffer, 0, sizeof(shared_buffer)); 444 | shared_buffer.sm2.num_paddrs = 1; 445 | shared_buffer.sm2.paddr_list = t->suspendbuf_plist; 446 | shared_buffer.sm2.buf_0x40 = t->some_0x40_buffer; 447 | shared_buffer.sm2.delayed_cmd = t->delayed_cmd; 448 | 449 | arch_clean_cache_range((addr_t)&shared_buffer, sizeof(shared_buffer)); 450 | arch_clean_cache_range((addr_t)t->suspendbuf, SUSPENDBUF_SIZE); 451 | arch_clean_cache_range((addr_t)t->some_0x40_buffer, 0x40); 452 | arch_clean_cache_range((addr_t)t->suspendbuf_plist, 0x80); 453 | arch_clean_cache_range((addr_t)t->delayed_cmd, 0x40); 454 | 455 | TRACEF("wait (using suspendbuf)\n"); 456 | regs[0x10/4] = 0x100301; 457 | do { 458 | ret = regs[0x10/4]; 459 | if (ret < 0) { 460 | TRACEF("ret: 0x%x\n", ret); 461 | return ret; 462 | } 463 | } while (ret); 464 | TRACEF("wait done\n"); 465 | } else if (t->field_34 == 1 || t->field_34 == 4) { 466 | TRACEF("starting task\n"); 467 | 468 | regs[0x54/4] = -1; 469 | regs[0x58/4] = -1; 470 | regs[0x5C/4] = -1; 471 | regs[0x14/4] = t->delayed_cmd[0]; 472 | regs[0x18/4] = t->delayed_cmd[1]; 473 | regs[0x1C/4] = t->delayed_cmd[2]; 474 | regs[0x04/4] = t->delayed_cmd[3]; 475 | regs[0x08/4] = t->delayed_cmd[4]; 476 | regs[0x0C/4] = t->delayed_cmd[5]; 477 | 478 | memset(t->delayed_cmd, 0, 6 * 4); 479 | arch_clean_cache_range((addr_t)t->delayed_cmd, 0x40); 480 | 481 | // submit_f00d 482 | memset(&shared_buffer, 0, sizeof(shared_buffer)); 483 | 484 | shared_buffer.sm.num_paddrs = t->num_paddrs; 485 | shared_buffer.sm.paddr_list = t->paddr_list; 486 | shared_buffer.sm.buf_0x40 = t->some_0x40_buffer; // change = error SCE_SBL_ERROR_DRV_EINVAL 0x800f0316 487 | shared_buffer.sm.field_60 = t->field_60; // change = error SCE_SBL_ERROR_DRV_ESYSEXVER 0x800f0338 488 | shared_buffer.sm.partition_id = t->partition_id; // change = error SCE_SBL_ERROR_DRV_ENOTINITIALIZED 0x800f0332 489 | shared_buffer.sm.auth_id = t->auth_id; // change = no effect 490 | shared_buffer.sm.part_0xF00C = t->part_0xF00C; // change = no effect 491 | shared_buffer.sm.part_0xFFFF = t->part_0xFFFF; // change = no effect 492 | 493 | arch_clean_cache_range((addr_t)&shared_buffer, sizeof(shared_buffer)); 494 | arch_clean_cache_range((addr_t)t->paddr_list, 8 * t->num_paddrs); 495 | arch_clean_cache_range((addr_t)t->some_0x40_buffer, 0x40); 496 | 497 | TRACEF("wait 1\n"); 498 | regs[0x10/4] = 0x500201; 499 | do { 500 | ret = regs[0x10/4]; 501 | if (ret < 0) { 502 | TRACEF("ret: 0x%x\n", ret); 503 | return ret; 504 | } 505 | } while (ret); 506 | 507 | TRACEF("wait 1 done\n"); 508 | } else { 509 | g_current_task = NULL; 510 | TRACEF("panic: t->field_34 == %d\n", t->field_34); 511 | return -1; 512 | } 513 | 514 | return 0; 515 | } 516 | 517 | int smsched_submit_command(command_t *cmd) { 518 | if (!g_current_task) { 519 | TRACEF("g_current_task is NULL\n"); 520 | return -1; 521 | } 522 | 523 | task_t *t = g_current_task; 524 | if (t->state != 2) { 525 | TRACEF("state != RUNNING\n"); 526 | return -1; 527 | } 528 | 529 | arch_clean_cache_range((addr_t)cmd, sizeof(*cmd)); 530 | regs[0x14/4] = (uint32_t)cmd | 1; 531 | } 532 | -------------------------------------------------------------------------------- /smsched.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 Ilya Zhuravlev 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining 5 | * a copy of this software and associated documentation files 6 | * (the "Software"), to deal in the Software without restriction, 7 | * including without limitation the rights to use, copy, modify, merge, 8 | * publish, distribute, sublicense, and/or sell copies of the Software, 9 | * and to permit persons to whom the Software is furnished to do so, 10 | * subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be 13 | * included in all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 19 | * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 20 | * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 21 | * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | */ 23 | 24 | #pragma once 25 | 26 | #include 27 | #include 28 | 29 | typedef struct { 30 | uint32_t len; 31 | uint32_t cmd; 32 | uint32_t unk1; 33 | uint32_t unk2; 34 | uint8_t pad1[48]; 35 | uint8_t data[0x1000-64]; 36 | } command_t; 37 | 38 | typedef union { 39 | struct { 40 | uint32_t unk1; 41 | void *rvk_paddr_list; 42 | } rvk_init; 43 | struct { 44 | void *paddr; 45 | size_t len; 46 | } buf_0x80_init; 47 | struct { 48 | size_t num_paddrs; 49 | void *paddr_list; 50 | void *buf_0x40; // field_30 in sm_handle 51 | int field_18; 52 | int ctx_0x4; 53 | int ctx_0x8; 54 | int ctx_0xC; 55 | int pad_unk; 56 | int field_60; 57 | int partition_id; 58 | uint64_t auth_id; 59 | uint64_t part_0xF00C; 60 | uint64_t part_0xFFFF; 61 | uint64_t part_unk; 62 | uint64_t part_unk2; 63 | } sm; 64 | struct { 65 | size_t num_paddrs; 66 | void *paddr_list; 67 | void *buf_0x40; 68 | void *delayed_cmd; 69 | } sm2; 70 | unsigned char raw[0x100]; 71 | } shared_buffer_t; 72 | 73 | typedef struct { 74 | volatile int state; 75 | int field_34; 76 | void *suspendbuf; 77 | void *suspendbuf_plist; 78 | int suspendbuf_plist_cnt; 79 | uint32_t *some_0x40_buffer; 80 | uint32_t *delayed_cmd; 81 | uint64_t auth_id; 82 | uint64_t part_0xF00C; 83 | uint64_t part_0xFFFF; 84 | 85 | int num_paddrs; 86 | uint32_t *paddr_list; 87 | 88 | int field_60; 89 | int partition_id; 90 | 91 | int field_28; 92 | 93 | volatile int cry123; 94 | } task_t; 95 | 96 | enum { 97 | F00D_REG_BASE = 0xE0000000, 98 | DELAYED_CMD_SIZE = 0x40, 99 | SUSPENDBUF_SIZE = 0x20000, 100 | }; 101 | 102 | void smsched_init(void); 103 | task_t *smsched_create_task(void *sm, size_t sm_size, int partition_id); 104 | int smsched_load_task(task_t *t); 105 | int smsched_suspend_current_task(void); 106 | int smsched_submit_command(command_t *cmd); 107 | --------------------------------------------------------------------------------