diff --git a/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/drv/drv_adc_measure.h b/board/EVB_LN882x/BSP/Inc/drv_adc_measure.h similarity index 100% rename from platform/vendor_bsp/LN/ln882x/include/driver_ln882x/drv/drv_adc_measure.h rename to board/EVB_LN882x/BSP/Inc/drv_adc_measure.h diff --git a/platform/vendor_bsp/LN/ln882x/include/serial/serial_p.h b/board/EVB_LN882x/BSP/Inc/serial_hw.h similarity index 92% rename from platform/vendor_bsp/LN/ln882x/include/serial/serial_p.h rename to board/EVB_LN882x/BSP/Inc/serial_hw.h index 353a8204ffc34234943553622b3206b3f99272a9..285336aa39acac9b7c55a3131134841fef8c6c0b 100644 --- a/platform/vendor_bsp/LN/ln882x/include/serial/serial_p.h +++ b/board/EVB_LN882x/BSP/Inc/serial_hw.h @@ -1,5 +1,5 @@ -#ifndef __SERIAL_P_H__ -#define __SERIAL_P_H__ +#ifndef __SERIAL_HW_H__ +#define __SERIAL_HW_H__ #include "hal/hal_uart.h" @@ -37,4 +37,4 @@ struct SerialHardware *serial_hw_getdesc(SerialPortID port_id); -#endif /* __SERIAL_P_H__ */ +#endif /* __SERIAL_HW_H__ */ diff --git a/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/drv/drv_adc_measure.c b/board/EVB_LN882x/BSP/Src/drv_adc_measure.c similarity index 95% rename from platform/vendor_bsp/LN/ln882x/src/driver_ln882x/drv/drv_adc_measure.c rename to board/EVB_LN882x/BSP/Src/drv_adc_measure.c index 6024b2db4891b4cb638b3b990956b25b9f83ee05..0e32227e89921b65e73a21ef2ecdd40fe650c71a 100644 --- a/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/drv/drv_adc_measure.c +++ b/board/EVB_LN882x/BSP/Src/drv_adc_measure.c @@ -1,5 +1,5 @@ #include "hal/hal_adc.h" -#include "drv/drv_adc_measure.h" +#include "drv_adc_measure.h" void drv_adc_init(void) { diff --git a/board/EVB_LN882x/BSP/Src/iot_explorer_examples.c b/board/EVB_LN882x/BSP/Src/iot_explorer_examples.c index fa77517ed9aa5cf63c717d537bda5e584ba7ff78..772f0f03626d1823324cc471780b330510ad0a88 100644 --- a/board/EVB_LN882x/BSP/Src/iot_explorer_examples.c +++ b/board/EVB_LN882x/BSP/Src/iot_explorer_examples.c @@ -8,7 +8,7 @@ #include "netif/ethernetif.h" #include "wifi_manager/wifi_manager.h" #include "lwip/tcpip.h" -#include "drv/drv_adc_measure.h" +#include "drv_adc_measure.h" #include "utils/system_parameter.h" #include "hal/hal_adc.h" @@ -161,7 +161,7 @@ void application_entry(void *arg) ART_ASSERT(1); } - reg_wifi_msg_callbcak(wifi_manager_get_handle(), WIFI_MSG_ID_STA_DHCP_GOT_IP,wifi_event_sta_got_ip_cb); + reg_wifi_msg_callbcak(WIFI_MSG_ID_STA_DHCP_GOT_IP,wifi_event_sta_got_ip_cb); wifi_mode_enum_t wifi_mode = WIFI_MODE_STATION; diff --git a/board/EVB_LN882x/BSP/Src/main.c b/board/EVB_LN882x/BSP/Src/main.c index 193cca74dbaf5886b6a4802577ec67ed86b464d3..e83afe2e460bce9a3574e1281504cd677c4c2924 100644 --- a/board/EVB_LN882x/BSP/Src/main.c +++ b/board/EVB_LN882x/BSP/Src/main.c @@ -2,7 +2,7 @@ #include "cmsis_os.h" #include "osal/osal.h" -#define APPLICATION_TASK_STK_SIZE 6*256 +#define APPLICATION_TASK_STK_SIZE (8*1024) extern void application_entry(void *arg); osThreadDef(application_entry, osPriorityLow, 1, APPLICATION_TASK_STK_SIZE);//osPriorityNormal @@ -17,7 +17,9 @@ __weak void application_entry(void *arg) #include "wifi_manager/wifi_manager.h" #include "utils/system_parameter.h" #include "atcmd/at_task.h" - +#include "ln_kv_port.h" +#include "ln_kv_api.h" +#include "flash_partition_table.h" int main(void) { @@ -28,10 +30,13 @@ int main(void) at_init(); system_parameter_init(); + if (KV_ERR_NONE != ln_kv_port_init(KV_SPACE_OFFSET, (KV_SPACE_OFFSET + KV_SPACE_SIZE))) { + LOG(LOG_LVL_ERROR, "KV init filed!\r\n"); + } wifi_init(); lwip_tcpip_init(); - wifi_manager_init(wifi_manager_get_handle()); + wifi_manager_init(); osThreadCreate(osThread(application_entry), NULL); // Create TOS Tiny task osKernelStart(); // Start TOS Tiny diff --git a/board/EVB_LN882x/BSP/Src/mcu_init.c b/board/EVB_LN882x/BSP/Src/mcu_init.c index 48b785687fd25d965b588f1c9e92dd7e60594655..30db24801ec0101ffd642061a11a3cd980a315d7 100644 --- a/board/EVB_LN882x/BSP/Src/mcu_init.c +++ b/board/EVB_LN882x/BSP/Src/mcu_init.c @@ -29,29 +29,6 @@ int fgetc(FILE *f) return ch; } - -//int flash_write(uint32_t addr, const void *buf, size_t len){ -// FLASH_Program(addr,len, (uint8_t *)buf); -//} -//int flash_read(uint32_t addr, void *buf, size_t len){ -// FLASH_ReadByCache(addr, len, (uint8_t *)buf); -//} - -//void nvds_kv_init(void) -//{ -// kv_flash_drv_t flash_drv; -// kv_flash_prop_t flash_prop; -// -// flash_drv.write = flash_write; -// flash_drv.read = flash_read; -// flash_drv.erase = FLASH_Erase; -// -// flash_prop.sector_size_log2 = 8; -// flash_prop.pgm_type = KV_FLASH_PROGRAM_TYPE_BYTE; -// flash_prop.flash_start = SYSTEM_PARAMETER_OFFSET; -// flash_prop.flash_size = SIZE_4KB*2; -//} - void board_init(void) { SetSysClock(); @@ -64,8 +41,6 @@ void board_init(void) log_init();//init log serial cm_backtrace_init("wifi app", "HD_V2", "SW_V0.8"); - -// nvds_kv_init(); } diff --git a/board/EVB_LN882x/BSP/Src/mqttclient_examples.c b/board/EVB_LN882x/BSP/Src/mqttclient_examples.c index 8ede3cbc3591f9908d1556581f018fe6f9e344f3..5ea38133be933b084519b39662ef8d734d26e5b3 100644 --- a/board/EVB_LN882x/BSP/Src/mqttclient_examples.c +++ b/board/EVB_LN882x/BSP/Src/mqttclient_examples.c @@ -8,7 +8,7 @@ #include "netif/ethernetif.h" #include "wifi_manager/wifi_manager.h" #include "lwip/tcpip.h" -#include "drv/drv_adc_measure.h" +#include "drv_adc_measure.h" #include "utils/system_parameter.h" #include "hal/hal_adc.h" @@ -161,7 +161,7 @@ void application_entry(void *arg) ART_ASSERT(1); } - reg_wifi_msg_callbcak(wifi_manager_get_handle(), WIFI_MSG_ID_STA_DHCP_GOT_IP,wifi_event_sta_got_ip_cb); + reg_wifi_msg_callbcak(WIFI_MSG_ID_STA_DHCP_GOT_IP,wifi_event_sta_got_ip_cb); wifi_mode_enum_t wifi_mode = WIFI_MODE_STATION; diff --git a/platform/vendor_bsp/LN/ln882x/src/serial/serial_hw.c b/board/EVB_LN882x/BSP/Src/serial_hw.c similarity index 97% rename from platform/vendor_bsp/LN/ln882x/src/serial/serial_hw.c rename to board/EVB_LN882x/BSP/Src/serial_hw.c index 9ad6a489b65f605b064191218472b54286d0ff5d..c6814fc337f380ac95a6aabf66243c968675e844 100644 --- a/platform/vendor_bsp/LN/ln882x/src/serial/serial_hw.c +++ b/board/EVB_LN882x/BSP/Src/serial_hw.c @@ -4,6 +4,7 @@ #include "serial/serial.h" #include "hal/hal_syscon.h" #include "hal/hal_uart.h" +//#include "hal/hal_sleep.h" #include "utils/debug/art_assert.h" #define UART0_TX_BUF_SIZE CFG_UART0_TX_BUF_SIZE @@ -158,6 +159,10 @@ static void hw_uart0_init(struct SerialHardware *_hw, struct Serial *serial, uin //enable uart master switch NVIC_EnableIRQ(UART0_IRQn); + /* + * Register with the sleep module to ensure that the serial port can be used during Light sleep + */ +// hal_sleep_register(MOD_UART0, NULL, NULL, NULL); } static void hw_uart1_init(struct SerialHardware *_hw, struct Serial *serial, uint32_t baudrate) @@ -192,6 +197,11 @@ static void hw_uart1_init(struct SerialHardware *_hw, struct Serial *serial, uin //enable uart master switch NVIC_EnableIRQ(UART1_IRQn); + + /* + * Register with the sleep module to ensure that the serial port can be used during Light sleep + */ +// hal_sleep_register(MOD_UART1, NULL, NULL, NULL); } /* diff --git a/board/EVB_LN882x/KEIL/mqtt_client/TencentOS_tiny.uvoptx b/board/EVB_LN882x/KEIL/mqtt_client/TencentOS_tiny.uvoptx index 162b6145a26002c07ac6cb43e009d2948ee80629..f2446d5c6f2f063b92c972300039e59cc39f4fe1 100644 --- a/board/EVB_LN882x/KEIL/mqtt_client/TencentOS_tiny.uvoptx +++ b/board/EVB_LN882x/KEIL/mqtt_client/TencentOS_tiny.uvoptx @@ -100,10 +100,7 @@ 1 0 0 - 1 - 0 - 0 - 4 + 6 @@ -234,19 +231,11 @@ 0 - 0 - 0 - - - - - - - - + + + 0 1 - 0 0 2 10000000 @@ -308,7 +297,7 @@ examples - 1 + 0 0 0 0 @@ -339,7 +328,7 @@ - Drivers/Drv + Drivers/HAL 0 0 0 @@ -351,34 +340,14 @@ 0 0 0 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\driver_ln882x\drv\drv_adc_measure.c - drv_adc_measure.c - 0 - 0 - - - - - Drivers/HAL - 0 - 0 - 0 - 0 - - 5 - 7 - 1 - 0 - 0 - 0 ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\driver_ln882x\hal\hal_common.c hal_common.c 0 0 - 5 - 8 + 4 + 7 1 0 0 @@ -389,8 +358,8 @@ 0 - 5 - 9 + 4 + 8 1 0 0 @@ -401,8 +370,8 @@ 0 - 5 - 10 + 4 + 9 1 0 0 @@ -413,8 +382,8 @@ 0 - 5 - 11 + 4 + 10 1 0 0 @@ -425,8 +394,8 @@ 0 - 5 - 12 + 4 + 11 1 0 0 @@ -437,8 +406,8 @@ 0 - 5 - 13 + 4 + 12 1 0 0 @@ -449,8 +418,8 @@ 0 - 5 - 14 + 4 + 13 1 0 0 @@ -461,8 +430,8 @@ 0 - 5 - 15 + 4 + 14 1 0 0 @@ -473,8 +442,8 @@ 0 - 5 - 16 + 4 + 15 1 0 0 @@ -485,8 +454,8 @@ 0 - 5 - 17 + 4 + 16 1 0 0 @@ -497,8 +466,8 @@ 0 - 5 - 18 + 4 + 17 1 0 0 @@ -509,8 +478,8 @@ 0 - 5 - 19 + 4 + 18 1 0 0 @@ -529,8 +498,8 @@ 0 0 - 6 - 20 + 5 + 19 1 0 0 @@ -541,8 +510,8 @@ 0 - 6 - 21 + 5 + 20 1 0 0 @@ -553,8 +522,8 @@ 0 - 6 - 22 + 5 + 21 1 0 0 @@ -565,8 +534,8 @@ 0 - 6 - 23 + 5 + 22 1 0 0 @@ -577,8 +546,8 @@ 0 - 6 - 24 + 5 + 23 1 0 0 @@ -589,8 +558,8 @@ 0 - 6 - 25 + 5 + 24 1 0 0 @@ -601,8 +570,8 @@ 0 - 6 - 26 + 5 + 25 1 0 0 @@ -613,8 +582,8 @@ 0 - 6 - 27 + 5 + 26 1 0 0 @@ -625,8 +594,8 @@ 0 - 6 - 28 + 5 + 27 1 0 0 @@ -637,8 +606,8 @@ 0 - 6 - 29 + 5 + 28 1 0 0 @@ -649,8 +618,8 @@ 0 - 6 - 30 + 5 + 29 1 0 0 @@ -661,8 +630,8 @@ 0 - 6 - 31 + 5 + 30 1 0 0 @@ -673,8 +642,8 @@ 0 - 6 - 32 + 5 + 31 1 0 0 @@ -685,8 +654,8 @@ 0 - 6 - 33 + 5 + 32 1 0 0 @@ -697,8 +666,8 @@ 0 - 6 - 34 + 5 + 33 1 0 0 @@ -709,8 +678,8 @@ 0 - 6 - 35 + 5 + 34 1 0 0 @@ -721,8 +690,8 @@ 0 - 6 - 36 + 5 + 35 1 0 0 @@ -733,8 +702,8 @@ 0 - 6 - 37 + 5 + 36 1 0 0 @@ -745,8 +714,8 @@ 0 - 6 - 38 + 5 + 37 1 0 0 @@ -757,8 +726,8 @@ 0 - 6 - 39 + 5 + 38 1 0 0 @@ -769,8 +738,8 @@ 0 - 6 - 40 + 5 + 39 1 0 0 @@ -781,8 +750,8 @@ 0 - 6 - 41 + 5 + 40 1 0 0 @@ -793,8 +762,8 @@ 0 - 6 - 42 + 5 + 41 1 0 0 @@ -805,8 +774,8 @@ 0 - 6 - 43 + 5 + 42 1 0 0 @@ -825,8 +794,8 @@ 0 0 - 7 - 44 + 6 + 43 1 0 0 @@ -837,8 +806,8 @@ 0 - 7 - 45 + 6 + 44 2 0 0 @@ -849,8 +818,8 @@ 0 - 7 - 46 + 6 + 45 1 0 0 @@ -869,8 +838,8 @@ 0 0 - 8 - 47 + 7 + 46 5 0 0 @@ -881,8 +850,8 @@ 0 - 8 - 48 + 7 + 47 5 0 0 @@ -901,8 +870,8 @@ 0 0 - 9 - 49 + 8 + 48 1 0 0 @@ -921,8 +890,8 @@ 0 0 - 10 - 50 + 9 + 49 1 0 0 @@ -932,35 +901,47 @@ 0 0 - - - - serial - 0 - 0 - 0 - 0 - 11 + 9 + 50 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\serial_hw.c + serial_hw.c + 0 + 0 + + + 9 51 1 0 0 0 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\serial\serial.c - serial.c + ..\..\BSP\Src\drv_adc_measure.c + drv_adc_measure.c 0 0 + + + + serial + 0 + 0 + 0 + 0 - 11 + 10 52 1 0 0 0 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\serial\serial_hw.c - serial_hw.c + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\serial\serial.c + serial.c 0 0 @@ -973,7 +954,7 @@ 0 0 - 12 + 11 53 1 0 @@ -993,7 +974,7 @@ 0 0 - 13 + 12 54 1 0 @@ -1005,7 +986,7 @@ 0 - 13 + 12 55 1 0 @@ -1017,7 +998,7 @@ 0 - 13 + 12 56 1 0 @@ -1029,7 +1010,7 @@ 0 - 13 + 12 57 1 0 @@ -1041,7 +1022,7 @@ 0 - 13 + 12 58 1 0 @@ -1053,7 +1034,7 @@ 0 - 13 + 12 59 1 0 @@ -1073,7 +1054,7 @@ 0 0 - 14 + 13 60 1 0 @@ -1085,7 +1066,7 @@ 0 - 14 + 13 61 1 0 @@ -1097,7 +1078,7 @@ 0 - 14 + 13 62 1 0 @@ -1109,7 +1090,7 @@ 0 - 14 + 13 63 1 0 @@ -1121,7 +1102,7 @@ 0 - 14 + 13 64 1 0 @@ -1133,7 +1114,7 @@ 0 - 14 + 13 65 1 0 @@ -1145,7 +1126,7 @@ 0 - 14 + 13 66 1 0 @@ -1157,7 +1138,7 @@ 0 - 14 + 13 67 1 0 @@ -1169,7 +1150,7 @@ 0 - 14 + 13 68 1 0 @@ -1181,7 +1162,7 @@ 0 - 14 + 13 69 1 0 @@ -1193,7 +1174,7 @@ 0 - 14 + 13 70 1 0 @@ -1205,7 +1186,7 @@ 0 - 14 + 13 71 1 0 @@ -1217,7 +1198,7 @@ 0 - 14 + 13 72 1 0 @@ -1237,7 +1218,7 @@ 0 0 - 15 + 14 73 5 0 @@ -1257,7 +1238,7 @@ 0 0 - 16 + 15 74 1 0 @@ -1269,7 +1250,7 @@ 0 - 16 + 15 75 1 0 @@ -1281,7 +1262,7 @@ 0 - 16 + 15 76 1 0 @@ -1293,7 +1274,7 @@ 0 - 16 + 15 77 1 0 @@ -1305,7 +1286,7 @@ 0 - 16 + 15 78 1 0 @@ -1317,7 +1298,7 @@ 0 - 16 + 15 79 1 0 @@ -1329,7 +1310,7 @@ 0 - 16 + 15 80 1 0 @@ -1349,7 +1330,7 @@ 0 0 - 17 + 16 81 4 0 @@ -1361,7 +1342,7 @@ 0 - 17 + 16 82 4 0 @@ -1373,14 +1354,14 @@ 0 - 17 + 16 83 4 0 0 0 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\wifi_driver.lib - wifi_driver.lib + ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\soc_driver.lib + soc_driver.lib 0 0 @@ -1393,7 +1374,7 @@ 0 0 - 18 + 17 84 1 0 @@ -1404,6 +1385,18 @@ 0 0 + + 17 + 85 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_port\wifi_port.c + wifi_port.c + 0 + 0 + @@ -1413,8 +1406,8 @@ 0 0 - 19 - 85 + 18 + 86 1 0 0 @@ -1425,8 +1418,8 @@ 0 - 19 - 86 + 18 + 87 1 0 0 @@ -1437,8 +1430,8 @@ 0 - 19 - 87 + 18 + 88 1 0 0 @@ -1449,8 +1442,8 @@ 0 - 19 - 88 + 18 + 89 1 0 0 @@ -1461,8 +1454,8 @@ 0 - 19 - 89 + 18 + 90 1 0 0 @@ -1473,8 +1466,8 @@ 0 - 19 - 90 + 18 + 91 1 0 0 @@ -1485,8 +1478,8 @@ 0 - 19 - 91 + 18 + 92 1 0 0 @@ -1497,8 +1490,8 @@ 0 - 19 - 92 + 18 + 93 1 0 0 @@ -1509,8 +1502,8 @@ 0 - 19 - 93 + 18 + 94 1 0 0 @@ -1521,8 +1514,8 @@ 0 - 19 - 94 + 18 + 95 1 0 0 @@ -1533,8 +1526,8 @@ 0 - 19 - 95 + 18 + 96 1 0 0 @@ -1545,8 +1538,8 @@ 0 - 19 - 96 + 18 + 97 1 0 0 @@ -1557,8 +1550,8 @@ 0 - 19 - 97 + 18 + 98 1 0 0 @@ -1569,8 +1562,8 @@ 0 - 19 - 98 + 18 + 99 1 0 0 @@ -1581,8 +1574,8 @@ 0 - 19 - 99 + 18 + 100 1 0 0 @@ -1593,8 +1586,8 @@ 0 - 19 - 100 + 18 + 101 1 0 0 @@ -1605,8 +1598,8 @@ 0 - 19 - 101 + 18 + 102 1 0 0 @@ -1617,8 +1610,8 @@ 0 - 19 - 102 + 18 + 103 1 0 0 @@ -1629,8 +1622,8 @@ 0 - 19 - 103 + 18 + 104 1 0 0 @@ -1641,8 +1634,8 @@ 0 - 19 - 104 + 18 + 105 1 0 0 @@ -1653,8 +1646,8 @@ 0 - 19 - 105 + 18 + 106 1 0 0 @@ -1665,8 +1658,8 @@ 0 - 19 - 106 + 18 + 107 1 0 0 @@ -1677,8 +1670,8 @@ 0 - 19 - 107 + 18 + 108 1 0 0 @@ -1689,8 +1682,8 @@ 0 - 19 - 108 + 18 + 109 1 0 0 @@ -1701,8 +1694,8 @@ 0 - 19 - 109 + 18 + 110 1 0 0 @@ -1721,8 +1714,8 @@ 0 0 - 20 - 110 + 19 + 111 1 0 0 @@ -1733,8 +1726,8 @@ 0 - 20 - 111 + 19 + 112 1 0 0 @@ -1745,8 +1738,8 @@ 0 - 20 - 112 + 19 + 113 1 0 0 @@ -1757,8 +1750,8 @@ 0 - 20 - 113 + 19 + 114 1 0 0 @@ -1769,8 +1762,8 @@ 0 - 20 - 114 + 19 + 115 1 0 0 @@ -1781,8 +1774,8 @@ 0 - 20 - 115 + 19 + 116 1 0 0 @@ -1793,8 +1786,8 @@ 0 - 20 - 116 + 19 + 117 1 0 0 @@ -1805,8 +1798,8 @@ 0 - 20 - 117 + 19 + 118 1 0 0 @@ -1825,8 +1818,8 @@ 0 0 - 21 - 118 + 20 + 119 1 0 0 @@ -1837,8 +1830,8 @@ 0 - 21 - 119 + 20 + 120 1 0 0 @@ -1857,8 +1850,8 @@ 0 0 - 22 - 120 + 21 + 121 1 0 0 @@ -1869,8 +1862,8 @@ 0 - 22 - 121 + 21 + 122 1 0 0 @@ -1881,8 +1874,8 @@ 0 - 22 - 122 + 21 + 123 5 0 0 @@ -1901,8 +1894,8 @@ 0 0 - 23 - 123 + 22 + 124 1 0 0 @@ -1913,8 +1906,8 @@ 0 - 23 - 124 + 22 + 125 1 0 0 @@ -1925,8 +1918,8 @@ 0 - 23 - 125 + 22 + 126 1 0 0 @@ -1937,8 +1930,8 @@ 0 - 23 - 126 + 22 + 127 1 0 0 @@ -1949,8 +1942,8 @@ 0 - 23 - 127 + 22 + 128 1 0 0 @@ -1963,39 +1956,55 @@ - tos_components + fs 0 0 0 0 - 24 - 128 + 23 + 129 1 0 0 0 - ..\..\..\..\components\fs\kv\tos_kv.c - tos_kv.c + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv\ln_kv.c + ln_kv.c 0 0 - - - - nvds - 0 - 0 - 0 - 0 - 25 - 129 + 23 + 130 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv_port\ln_kv_port.c + ln_kv_port.c + 0 + 0 + + + 23 + 131 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\partition_mgr\flash_partition_mgr.c + flash_partition_mgr.c + 0 + 0 + + + 23 + 132 1 0 0 0 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\nvds\nvds.c + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\nvds\nvds.c nvds.c 0 0 @@ -2009,8 +2018,8 @@ 0 0 - 26 - 130 + 24 + 133 1 0 0 @@ -2021,8 +2030,8 @@ 0 - 26 - 131 + 24 + 134 5 0 0 @@ -2041,8 +2050,8 @@ 0 0 - 27 - 132 + 25 + 135 1 0 0 @@ -2053,8 +2062,8 @@ 0 - 27 - 133 + 25 + 136 1 0 0 @@ -2065,8 +2074,8 @@ 0 - 27 - 134 + 25 + 137 1 0 0 @@ -2077,8 +2086,8 @@ 0 - 27 - 135 + 25 + 138 1 0 0 @@ -2089,8 +2098,8 @@ 0 - 27 - 136 + 25 + 139 1 0 0 @@ -2101,8 +2110,8 @@ 0 - 27 - 137 + 25 + 140 1 0 0 @@ -2113,8 +2122,8 @@ 0 - 27 - 138 + 25 + 141 1 0 0 @@ -2125,8 +2134,8 @@ 0 - 27 - 139 + 25 + 142 1 0 0 @@ -2137,8 +2146,8 @@ 0 - 27 - 140 + 25 + 143 1 0 0 @@ -2149,8 +2158,8 @@ 0 - 27 - 141 + 25 + 144 1 0 0 @@ -2169,8 +2178,8 @@ 0 0 - 28 - 142 + 26 + 145 1 0 0 @@ -2181,8 +2190,8 @@ 0 - 28 - 143 + 26 + 146 5 0 0 @@ -2193,8 +2202,8 @@ 0 - 28 - 144 + 26 + 147 5 0 0 @@ -2205,8 +2214,8 @@ 0 - 28 - 145 + 26 + 148 1 0 0 @@ -2225,8 +2234,8 @@ 0 0 - 29 - 146 + 27 + 149 1 0 0 @@ -2245,8 +2254,8 @@ 0 0 - 30 - 147 + 28 + 150 1 0 0 @@ -2257,8 +2266,8 @@ 0 - 30 - 148 + 28 + 151 1 0 0 @@ -2269,8 +2278,8 @@ 0 - 30 - 149 + 28 + 152 1 0 0 @@ -2281,8 +2290,8 @@ 0 - 30 - 150 + 28 + 153 1 0 0 @@ -2293,8 +2302,8 @@ 0 - 30 - 151 + 28 + 154 1 0 0 @@ -2305,8 +2314,8 @@ 0 - 30 - 152 + 28 + 155 1 0 0 @@ -2317,8 +2326,8 @@ 0 - 30 - 153 + 28 + 156 1 0 0 diff --git a/board/EVB_LN882x/KEIL/mqtt_client/TencentOS_tiny.uvprojx b/board/EVB_LN882x/KEIL/mqtt_client/TencentOS_tiny.uvprojx index e6baa5bac6798cea8b58f3d5b3565f293626c9d2..2001a48561bd89ad030e52987756e95143146663 100644 --- a/board/EVB_LN882x/KEIL/mqtt_client/TencentOS_tiny.uvprojx +++ b/board/EVB_LN882x/KEIL/mqtt_client/TencentOS_tiny.uvprojx @@ -10,8 +10,7 @@ TencentOS_tiny 0x4 ARM-ADS - 5060750::V5.06 update 6 (build 750)::ARMCC - 0 + 5060061::V5.06 update 1 (build 61)::ARMCC ARMCM4_FP @@ -70,9 +69,9 @@ 0 - 0 + 1 0 - + python ..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\user_cmd\before_build.py flash_partition_cfg.json flash_partition_table.h 0 0 @@ -81,9 +80,9 @@ 1 - 0 - .\after_build_ln882x.bat - + 1 + python ..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\user_cmd\after_build_soc.py @L + ..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\bin\mkimage.exe cmd_app ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\boot_ln882x.bin @L.bin @L.asm flashimage.bin flash_partition_cfg.json ver=1.1 0 0 0 @@ -184,7 +183,6 @@ 0 0 2 - 0 0 0 8 @@ -325,20 +323,16 @@ 0 0 1 - 0 0 1 1 1 1 - 0 - 0 - 0 LN882x,ARM_MATH_CM4 - ..\..\BSP\Inc;..\..\TOS-CONFIG;..\..\..\..\kernel\pm\include;..\..\..\..\kernel\core\include;..\..\..\..\arch\arm\arm-v7m\common\include;..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc;..\..\..\..\osal\cmsis_os;..\..\..\..\examples\helloworld;..\hello_world;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\driver_ln882x;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\driver_ln882x\ll\include;..\..\..\..\components\fs\kv\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\cpu\ARM_CM4F\ln88xx;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\kernel;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\cpu\ARM_CM4F\CMSIS_5.3.0;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\wifi_manager;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\net;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\port;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\port\arch;..\..\..\..\components\connectivity\mqttclient\common;..\..\..\..\components\connectivity\mqttclient\mqtt;..\..\..\..\components\connectivity\mqttclient\mqttclient;..\..\..\..\components\connectivity\mqttclient\network;..\..\..\..\components\connectivity\mqttclient\platform\TencentOS-tiny + ..\..\BSP\Inc;..\..\TOS-CONFIG;..\..\..\..\kernel\pm\include;..\..\..\..\kernel\core\include;..\..\..\..\arch\arm\arm-v7m\common\include;..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc;..\..\..\..\osal\cmsis_os;..\..\..\..\examples\helloworld;..\hello_world;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\driver_ln882x;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\driver_ln882x\ll\include;..\..\..\..\components\fs\kv\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\cpu\ARM_CM4F\ln88xx;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\kernel;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\cpu\ARM_CM4F\CMSIS_5.3.0;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\wifi_manager;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\net;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\port;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\port\arch;..\..\..\..\components\connectivity\mqttclient\common;..\..\..\..\components\connectivity\mqttclient\mqtt;..\..\..\..\components\connectivity\mqttclient\mqttclient;..\..\..\..\components\connectivity\mqttclient\network;..\..\..\..\components\connectivity\mqttclient\platform\TencentOS-tiny;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_port;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv_port;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\nvds;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\partition_mgr;..\mqtt_client @@ -351,7 +345,6 @@ 0 0 0 - 0 @@ -369,10 +362,10 @@ 0x08000000 0x20000000 - .\firmware_XIP_ln882x.sct + .\ln882x.sct - --no_autoat --keep=main.o(no_init_data) + --no_autoat --keep=*.o(no_init_data) @@ -419,16 +412,6 @@ - - Drivers/Drv - - - drv_adc_measure.c - 1 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\driver_ln882x\drv\drv_adc_measure.c - - - Drivers/HAL @@ -514,15 +497,11 @@ 2 2 2 - 2 2 0 0 2 2 - 2 - 2 - 2 @@ -728,6 +707,16 @@ 1 ..\..\BSP\Src\mcu_init.c + + serial_hw.c + 1 + ..\..\BSP\Src\serial_hw.c + + + drv_adc_measure.c + 1 + ..\..\BSP\Src\drv_adc_measure.c + @@ -738,11 +727,6 @@ 1 ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\serial\serial.c - - serial_hw.c - 1 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\serial\serial_hw.c - @@ -924,9 +908,9 @@ ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\wifi_mac.lib - wifi_driver.lib + soc_driver.lib 4 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\wifi_driver.lib + ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\soc_driver.lib @@ -938,6 +922,11 @@ 1 ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_manager\wifi_manager.c + + wifi_port.c + 1 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_port\wifi_port.c + @@ -1005,15 +994,11 @@ 2 2 2 - 2 2 0 0 2 2 - 2 - 2 - 2 @@ -1232,22 +1217,27 @@ - tos_components + fs - tos_kv.c + ln_kv.c 1 - ..\..\..\..\components\fs\kv\tos_kv.c + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv\ln_kv.c + + + ln_kv_port.c + 1 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv_port\ln_kv_port.c + + + flash_partition_mgr.c + 1 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\partition_mgr\flash_partition_mgr.c - - - - nvds - nvds.c 1 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\nvds\nvds.c + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\nvds\nvds.c diff --git a/board/EVB_LN882x/KEIL/mqtt_client/after_build_ln882x.bat b/board/EVB_LN882x/KEIL/mqtt_client/after_build_ln882x.bat index cc2c067869bce6aeb41969ea95991bdbc55d9ebc..60675d37f1fb6229a9d0e94ce65d4c58c7401266 100644 --- a/board/EVB_LN882x/KEIL/mqtt_client/after_build_ln882x.bat +++ b/board/EVB_LN882x/KEIL/mqtt_client/after_build_ln882x.bat @@ -1,8 +1,4 @@ - -python ..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\user_cmd\after_build_soc.py firmware_XIP - -..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\bin\mkimage.exe ln882x flashimage ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\boot_ram_ln882x.bin firmware_XIP.bin flashimage.bin release=1 crp_enable=0 app_version=10 hw_version=0 - -..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\bin\fpu_patch.exe .\firmware_XIP.asm .\flashimage.bin +python ..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\user_cmd\after_build_soc.py @L +..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\bin\mkimage.exe cmd_app ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\boot_ln882x.bin @L.bin @L.asm flashimage.bin flash_partition_cfg.json ver=1.1 diff --git a/board/EVB_LN882x/KEIL/mqtt_client/flash_partition_cfg.json b/board/EVB_LN882x/KEIL/mqtt_client/flash_partition_cfg.json new file mode 100644 index 0000000000000000000000000000000000000000..91fec5375be9f0c1e687ff9525f4c3fd7d124452 --- /dev/null +++ b/board/EVB_LN882x/KEIL/mqtt_client/flash_partition_cfg.json @@ -0,0 +1,22 @@ +{ + "Warning1":"警告,系统定义用户不可修改!!!", + "vendor_define": + [ + {"partition_type": "BOOT", "start_addr": "0x00000000", "size_KB": 36 }, + {"partition_type": "PART_TAB", "start_addr": "0x00009000", "size_KB": 4 } + ], + + + "Warning2":"以下数据,用户根据SOC flash容量以及具体需求修改,仅可以修改start_addr值和size值,且必须4KB对齐!!!", + "user_define": + [ + {"partition_type": "KV", "start_addr": "0x0000A000", "size_KB": 8 }, + {"partition_type": "SIMU_EEPROM", "start_addr": "0x0000C000", "size_KB": 8 }, + {"partition_type": "APP", "start_addr": "0x0000E000", "size_KB": 800 }, + {"partition_type": "OTA", "start_addr": "0x000D6000", "size_KB": 800 }, + {"partition_type": "NVDS", "start_addr": "0x0019E000", "size_KB": 12 }, + {"partition_type": "USER", "start_addr": "0x001A1000", "size_KB": 12 } + ] +} + + diff --git a/board/EVB_LN882x/KEIL/mqtt_client/flash_partition_table.h b/board/EVB_LN882x/KEIL/mqtt_client/flash_partition_table.h index e068e5bfed174a79bb1f7fa841d5196c0de7bbce..08788e3cd33106dc76b6e0e27e56e1f1fdac627c 100644 --- a/board/EVB_LN882x/KEIL/mqtt_client/flash_partition_table.h +++ b/board/EVB_LN882x/KEIL/mqtt_client/flash_partition_table.h @@ -1,32 +1,56 @@ -#ifndef __FLASH_PARTITION_TABLE_H__ -#define __FLASH_PARTITION_TABLE_H__ +#ifndef __FLASH_PARTITION_TABLE__ +#define __FLASH_PARTITION_TABLE__ -//#define RETENTION_MEM_BASE 0x20028000 -//#define RETENTION_MEM_SIZE 0x2000 -#ifndef FLASH_BASE -#define FLASH_BASE (0x10000000) +//flash partition map,it's generated by the script based on the json file + +#define BOOT_SPACE_OFFSET (0x00000000) +#define BOOT_SPACE_SIZE (1024*36) + +#define PART_TAB_SPACE_OFFSET (0x00009000) +#define PART_TAB_SPACE_SIZE (1024*4) +#if (PART_TAB_SPACE_OFFSET < (BOOT_SPACE_OFFSET + BOOT_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" +#endif + +#define KV_SPACE_OFFSET (0x0000A000) +#define KV_SPACE_SIZE (1024*8) +#if (KV_SPACE_OFFSET < (PART_TAB_SPACE_OFFSET + PART_TAB_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" +#endif + +#define SIMU_EEPROM_SPACE_OFFSET (0x0000C000) +#define SIMU_EEPROM_SPACE_SIZE (1024*8) +#if (SIMU_EEPROM_SPACE_OFFSET < (KV_SPACE_OFFSET + KV_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" #endif -#ifndef FLASH_SIZE -#define FLASH_SIZE (0x00200000) +#define APP_SPACE_OFFSET (0x0000E000) +#define APP_SPACE_SIZE (1024*800) +#if (APP_SPACE_OFFSET < (SIMU_EEPROM_SPACE_OFFSET + SIMU_EEPROM_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" #endif -#ifndef PRIMARY_PARTITION_OFFSET -#define PRIMARY_PARTITION_OFFSET (0x0000F000) +#define OTA_SPACE_OFFSET (0x000D6000) +#define OTA_SPACE_SIZE (1024*800) +#if (OTA_SPACE_OFFSET < (APP_SPACE_OFFSET + APP_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" #endif -#define PRIMARY_PATTITION_START 0x0000F000 -#define PRIMARY_PATTITION_SIZE 0xE1000 -//#define USERAPP_SRAM_BASE 0x1FFF0000 -#define BACKUP_PATTITION_START 0x000F0000 -#define BACKUP_PATTITION_SIZE 0xE1000 -#define USERDATA_PATTITION_START 0x001D1000 -#define USERDATA_PATTITION_SIZE 0x23000 - -//memory offset check -#if ((PRIMARY_PATTITION_START < PRIMARY_PARTITION_OFFSET) || (BACKUP_PATTITION_START < PRIMARY_PATTITION_START) || (USERDATA_PATTITION_START < BACKUP_PATTITION_START) || (PRIMARY_PATTITION_START + PRIMARY_PATTITION_SIZE > BACKUP_PATTITION_START) || (BACKUP_PATTITION_START + BACKUP_PATTITION_SIZE > USERDATA_PATTITION_START) || (USERDATA_PATTITION_START + USERDATA_PATTITION_SIZE > FLASH_SIZE)) - #error "flash partition define error!" +#define NVDS_SPACE_OFFSET (0x0019E000) +#define NVDS_SPACE_SIZE (1024*12) +#if (NVDS_SPACE_OFFSET < (OTA_SPACE_OFFSET + OTA_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" #endif -#endif /* __FLASH_PARTITION_TABLE_H__ */ +#define USER_SPACE_OFFSET (0x001A1000) +#define USER_SPACE_SIZE (1024*12) +#if (USER_SPACE_OFFSET < (NVDS_SPACE_OFFSET + NVDS_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" +#endif + + +#define IMAGE_HEADER_SIZE (0x100) + +#endif /* __FLASH_PARTITION_TABLE__ */ + diff --git a/board/EVB_LN882x/KEIL/mqtt_client/firmware_XIP_ln882x.sct b/board/EVB_LN882x/KEIL/mqtt_client/ln882x.sct similarity index 59% rename from board/EVB_LN882x/KEIL/mqtt_client/firmware_XIP_ln882x.sct rename to board/EVB_LN882x/KEIL/mqtt_client/ln882x.sct index 50c5ed54a8fbe7c3a6368808b01626c5749c6815..26dc840bfa1c7850081bad4ed3086b3fbee26d7d 100644 --- a/board/EVB_LN882x/KEIL/mqtt_client/firmware_XIP_ln882x.sct +++ b/board/EVB_LN882x/KEIL/mqtt_client/ln882x.sct @@ -1,9 +1,9 @@ #! armcc -E -#include ".\flash_partition_table.h" +#include "flash_partition_table.h" #include ".\..\..\..\..\platform\vendor_bsp\LN\ln882x\include\cpu\ARM_CM4F\ln88xx\mem_map_ln882x.h" -LR_FLASH FLASH_BASE+PRIMARY_PARTITION_OFFSET PRIMARY_PATTITION_SIZE +LR_FLASH CACHE_FLASH_BASE+APP_SPACE_OFFSET+IMAGE_HEADER_SIZE APP_SPACE_SIZE {; load region size_region ISR_VECTOR RAM_BASE ALIGN 0x100 @@ -11,7 +11,7 @@ LR_FLASH FLASH_BASE+PRIMARY_PARTITION_OFFSET PRIMARY_PATTITION_SIZE startup_*.o (RESET, +First) } - ER_FLASH FLASH_BASE+PRIMARY_PARTITION_OFFSET + ImageLength(ISR_VECTOR) PRIMARY_PATTITION_SIZE + ER_FLASH CACHE_FLASH_BASE+APP_SPACE_OFFSET+IMAGE_HEADER_SIZE + ImageLength(ISR_VECTOR) APP_SPACE_SIZE {; load address = execution address *(InRoot$$Sections) .ANY (+RO) @@ -24,15 +24,15 @@ LR_FLASH FLASH_BASE+PRIMARY_PARTITION_OFFSET PRIMARY_PATTITION_SIZE ll_cache.o(+RO) ll_dma.o(+RO) ll_syscon.o(+RO) - ll_sleep.o(+RO) - ll_rtc.o(+RO) + ;ll_sleep.o(+RO) + ;ll_rtc.o(+RO) cache.o(+RO) qspi.o(+RO) flash.o(+RO) hal_dma.o(+RO) hal_syscon.o(+RO) - hal_sleep.o(+RO) - hal_rtc.o(+RO) + ;hal_sleep.o(+RO) + ;hal_rtc.o(+RO) ;port.o(XIR) ;optional item @@ -49,16 +49,32 @@ LR_FLASH FLASH_BASE+PRIMARY_PARTITION_OFFSET PRIMARY_PATTITION_SIZE startup_ln*(+RW +ZI) } - ER_DATA +0 + ER_DATA_IN_B0 +0 RAM_BLOCK0_SIZE-ImageLength(ISR_VECTOR)-ImageLength(ER_CODE)-ImageLength(ER_STACK) { - *(.ARM.__at_0x1FFFFFFC) - .ANY (+RW +ZI) + memp.o(+RW +ZI) + imem.o(+RW +ZI) + imem_if.o(+RW +ZI) + ;cglobals_sta.o(+RW +ZI) + ;event_manager.o(+RW +ZI) + iconfig.o(+RW +ZI) + common.o(+RW +ZI) + } + + HEAP_SPACE0 +0 EMPTY RAM_BLOCK1_BASE-ImageLimit(ER_DATA_IN_B0) + {; Heap region + } + + ER_DATA_IN_B1 RAM_BLOCK1_BASE RAM_BLOCK1_SIZE + { + *(wlan_mem_pkt) + *(wlan_mem_dscr) + .ANY (+RW +ZI) } ;IQ Data area cannot be used by ER_DATA region ;ScatterAssert(ImageLimit(ER_DATA) < (0x20020300)) - HEAP_SPACE +0 EMPTY RETENTION_MEM_BASE-ImageLimit(ER_DATA) + HEAP_SPACE1 +0 EMPTY RETENTION_MEM_BASE-ImageLimit(ER_DATA_IN_B1) {; Heap region } diff --git a/board/EVB_LN882x/KEIL/qcloud_iot_explorer/TencentOS_tiny.uvoptx b/board/EVB_LN882x/KEIL/qcloud_iot_explorer/TencentOS_tiny.uvoptx index 4f505a61a725da0eb783f2e0e299144083d4a36b..b75098afb702125913485b2311433abc2e847b69 100644 --- a/board/EVB_LN882x/KEIL/qcloud_iot_explorer/TencentOS_tiny.uvoptx +++ b/board/EVB_LN882x/KEIL/qcloud_iot_explorer/TencentOS_tiny.uvoptx @@ -117,11 +117,6 @@ Segger\JL2CM3.dll - - 0 - DLGUARM - d - 0 ARMRTXEVENTFLAGS @@ -153,7 +148,24 @@ -U-O142 -O2254 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 -FP0($$Device:STM32F103VE$Flash\STM32F10x_512.FLM) - + + + 0 + 0 + 90 + 1 +
268493334
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\driver_ln882x\hal\hal_interrupt.c + + \\firmware_XIP\../../../../platform/vendor_bsp/LN/ln882x/src/driver_ln882x/hal/hal_interrupt.c\90 +
+
0 @@ -185,6 +197,11 @@ 1 phy_reg_val_table_1,0x10 + + 6 + 1 + k_curr_task + @@ -208,7 +225,7 @@ 0 1 - 1 + 0 0 0 0 @@ -288,7 +305,7 @@ Application/User - 0 + 1 0 0 0 @@ -308,7 +325,7 @@ examples - 0 + 1 0 0 0 @@ -363,7 +380,7 @@ - Drivers/Drv + Drivers/HAL 0 0 0 @@ -375,34 +392,14 @@ 0 0 0 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\driver_ln882x\drv\drv_adc_measure.c - drv_adc_measure.c - 0 - 0 - - - - - Drivers/HAL - 0 - 0 - 0 - 0 - - 5 - 9 - 1 - 0 - 0 - 0 ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\driver_ln882x\hal\hal_common.c hal_common.c 0 0 - 5 - 10 + 4 + 9 1 0 0 @@ -413,8 +410,8 @@ 0 - 5 - 11 + 4 + 10 1 0 0 @@ -425,8 +422,8 @@ 0 - 5 - 12 + 4 + 11 1 0 0 @@ -437,8 +434,8 @@ 0 - 5 - 13 + 4 + 12 1 0 0 @@ -449,8 +446,8 @@ 0 - 5 - 14 + 4 + 13 1 0 0 @@ -461,8 +458,8 @@ 0 - 5 - 15 + 4 + 14 1 0 0 @@ -473,8 +470,8 @@ 0 - 5 - 16 + 4 + 15 1 0 0 @@ -485,8 +482,8 @@ 0 - 5 - 17 + 4 + 16 1 0 0 @@ -497,8 +494,8 @@ 0 - 5 - 18 + 4 + 17 1 0 0 @@ -509,8 +506,8 @@ 0 - 5 - 19 + 4 + 18 1 0 0 @@ -521,8 +518,8 @@ 0 - 5 - 20 + 4 + 19 1 0 0 @@ -533,8 +530,8 @@ 0 - 5 - 21 + 4 + 20 1 0 0 @@ -553,8 +550,8 @@ 0 0 - 6 - 22 + 5 + 21 1 0 0 @@ -565,8 +562,8 @@ 0 - 6 - 23 + 5 + 22 1 0 0 @@ -577,8 +574,8 @@ 0 - 6 - 24 + 5 + 23 1 0 0 @@ -589,8 +586,8 @@ 0 - 6 - 25 + 5 + 24 1 0 0 @@ -601,8 +598,8 @@ 0 - 6 - 26 + 5 + 25 1 0 0 @@ -613,8 +610,8 @@ 0 - 6 - 27 + 5 + 26 1 0 0 @@ -625,8 +622,8 @@ 0 - 6 - 28 + 5 + 27 1 0 0 @@ -637,8 +634,8 @@ 0 - 6 - 29 + 5 + 28 1 0 0 @@ -649,8 +646,8 @@ 0 - 6 - 30 + 5 + 29 1 0 0 @@ -661,8 +658,8 @@ 0 - 6 - 31 + 5 + 30 1 0 0 @@ -673,8 +670,8 @@ 0 - 6 - 32 + 5 + 31 1 0 0 @@ -685,8 +682,8 @@ 0 - 6 - 33 + 5 + 32 1 0 0 @@ -697,8 +694,8 @@ 0 - 6 - 34 + 5 + 33 1 0 0 @@ -709,8 +706,8 @@ 0 - 6 - 35 + 5 + 34 1 0 0 @@ -721,8 +718,8 @@ 0 - 6 - 36 + 5 + 35 1 0 0 @@ -733,8 +730,8 @@ 0 - 6 - 37 + 5 + 36 1 0 0 @@ -745,8 +742,8 @@ 0 - 6 - 38 + 5 + 37 1 0 0 @@ -757,8 +754,8 @@ 0 - 6 - 39 + 5 + 38 1 0 0 @@ -769,8 +766,8 @@ 0 - 6 - 40 + 5 + 39 1 0 0 @@ -781,8 +778,8 @@ 0 - 6 - 41 + 5 + 40 1 0 0 @@ -793,8 +790,8 @@ 0 - 6 - 42 + 5 + 41 1 0 0 @@ -805,8 +802,8 @@ 0 - 6 - 43 + 5 + 42 1 0 0 @@ -817,8 +814,8 @@ 0 - 6 - 44 + 5 + 43 1 0 0 @@ -829,8 +826,8 @@ 0 - 6 - 45 + 5 + 44 1 0 0 @@ -849,8 +846,8 @@ 0 0 - 7 - 46 + 6 + 45 1 0 0 @@ -861,8 +858,8 @@ 0 - 7 - 47 + 6 + 46 2 0 0 @@ -873,8 +870,8 @@ 0 - 7 - 48 + 6 + 47 1 0 0 @@ -893,8 +890,8 @@ 0 0 - 8 - 49 + 7 + 48 5 0 0 @@ -905,8 +902,8 @@ 0 - 8 - 50 + 7 + 49 5 0 0 @@ -925,8 +922,8 @@ 0 0 - 9 - 51 + 8 + 50 1 0 0 @@ -945,8 +942,8 @@ 0 0 - 10 - 52 + 9 + 51 1 0 0 @@ -956,35 +953,47 @@ 0 0 - - - - serial - 0 - 0 - 0 - 0 - 11 + 9 + 52 + 1 + 0 + 0 + 0 + ..\..\BSP\Src\serial_hw.c + serial_hw.c + 0 + 0 + + + 9 53 1 0 0 0 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\serial\serial.c - serial.c + ..\..\BSP\Src\drv_adc_measure.c + drv_adc_measure.c 0 0 + + + + serial + 0 + 0 + 0 + 0 - 11 + 10 54 1 0 0 0 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\serial\serial_hw.c - serial_hw.c + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\serial\serial.c + serial.c 0 0 @@ -997,7 +1006,7 @@ 0 0 - 12 + 11 55 1 0 @@ -1017,7 +1026,7 @@ 0 0 - 13 + 12 56 1 0 @@ -1029,7 +1038,7 @@ 0 - 13 + 12 57 1 0 @@ -1041,7 +1050,7 @@ 0 - 13 + 12 58 1 0 @@ -1053,7 +1062,7 @@ 0 - 13 + 12 59 1 0 @@ -1065,7 +1074,7 @@ 0 - 13 + 12 60 1 0 @@ -1077,7 +1086,7 @@ 0 - 13 + 12 61 1 0 @@ -1097,7 +1106,7 @@ 0 0 - 14 + 13 62 1 0 @@ -1109,7 +1118,7 @@ 0 - 14 + 13 63 1 0 @@ -1121,7 +1130,7 @@ 0 - 14 + 13 64 1 0 @@ -1133,7 +1142,7 @@ 0 - 14 + 13 65 1 0 @@ -1145,7 +1154,7 @@ 0 - 14 + 13 66 1 0 @@ -1157,7 +1166,7 @@ 0 - 14 + 13 67 1 0 @@ -1169,7 +1178,7 @@ 0 - 14 + 13 68 1 0 @@ -1181,7 +1190,7 @@ 0 - 14 + 13 69 1 0 @@ -1193,7 +1202,7 @@ 0 - 14 + 13 70 1 0 @@ -1205,7 +1214,7 @@ 0 - 14 + 13 71 1 0 @@ -1217,7 +1226,7 @@ 0 - 14 + 13 72 1 0 @@ -1229,7 +1238,7 @@ 0 - 14 + 13 73 1 0 @@ -1241,7 +1250,7 @@ 0 - 14 + 13 74 1 0 @@ -1261,7 +1270,7 @@ 0 0 - 15 + 14 75 5 0 @@ -1281,7 +1290,7 @@ 0 0 - 16 + 15 76 1 0 @@ -1293,7 +1302,7 @@ 0 - 16 + 15 77 1 0 @@ -1305,7 +1314,7 @@ 0 - 16 + 15 78 1 0 @@ -1317,7 +1326,7 @@ 0 - 16 + 15 79 1 0 @@ -1329,7 +1338,7 @@ 0 - 16 + 15 80 1 0 @@ -1341,7 +1350,7 @@ 0 - 16 + 15 81 1 0 @@ -1353,7 +1362,7 @@ 0 - 16 + 15 82 1 0 @@ -1373,7 +1382,7 @@ 0 0 - 17 + 16 83 4 0 @@ -1385,7 +1394,7 @@ 0 - 17 + 16 84 4 0 @@ -1397,14 +1406,14 @@ 0 - 17 + 16 85 4 0 0 0 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\wifi_driver.lib - wifi_driver.lib + ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\soc_driver.lib + soc_driver.lib 0 0 @@ -1417,7 +1426,7 @@ 0 0 - 18 + 17 86 1 0 @@ -1428,6 +1437,18 @@ 0 0 + + 17 + 87 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_port\wifi_port.c + wifi_port.c + 0 + 0 + @@ -1437,8 +1458,8 @@ 0 0 - 19 - 87 + 18 + 88 1 0 0 @@ -1449,8 +1470,8 @@ 0 - 19 - 88 + 18 + 89 1 0 0 @@ -1461,8 +1482,8 @@ 0 - 19 - 89 + 18 + 90 1 0 0 @@ -1473,8 +1494,8 @@ 0 - 19 - 90 + 18 + 91 1 0 0 @@ -1485,8 +1506,8 @@ 0 - 19 - 91 + 18 + 92 1 0 0 @@ -1497,8 +1518,8 @@ 0 - 19 - 92 + 18 + 93 1 0 0 @@ -1509,8 +1530,8 @@ 0 - 19 - 93 + 18 + 94 1 0 0 @@ -1521,8 +1542,8 @@ 0 - 19 - 94 + 18 + 95 1 0 0 @@ -1533,8 +1554,8 @@ 0 - 19 - 95 + 18 + 96 1 0 0 @@ -1545,8 +1566,8 @@ 0 - 19 - 96 + 18 + 97 1 0 0 @@ -1557,8 +1578,8 @@ 0 - 19 - 97 + 18 + 98 1 0 0 @@ -1569,8 +1590,8 @@ 0 - 19 - 98 + 18 + 99 1 0 0 @@ -1581,8 +1602,8 @@ 0 - 19 - 99 + 18 + 100 1 0 0 @@ -1593,8 +1614,8 @@ 0 - 19 - 100 + 18 + 101 1 0 0 @@ -1605,8 +1626,8 @@ 0 - 19 - 101 + 18 + 102 1 0 0 @@ -1617,8 +1638,8 @@ 0 - 19 - 102 + 18 + 103 1 0 0 @@ -1629,8 +1650,8 @@ 0 - 19 - 103 + 18 + 104 1 0 0 @@ -1641,8 +1662,8 @@ 0 - 19 - 104 + 18 + 105 1 0 0 @@ -1653,8 +1674,8 @@ 0 - 19 - 105 + 18 + 106 1 0 0 @@ -1665,8 +1686,8 @@ 0 - 19 - 106 + 18 + 107 1 0 0 @@ -1677,8 +1698,8 @@ 0 - 19 - 107 + 18 + 108 1 0 0 @@ -1689,8 +1710,8 @@ 0 - 19 - 108 + 18 + 109 1 0 0 @@ -1701,8 +1722,8 @@ 0 - 19 - 109 + 18 + 110 1 0 0 @@ -1713,8 +1734,8 @@ 0 - 19 - 110 + 18 + 111 1 0 0 @@ -1725,8 +1746,8 @@ 0 - 19 - 111 + 18 + 112 1 0 0 @@ -1745,8 +1766,8 @@ 0 0 - 20 - 112 + 19 + 113 1 0 0 @@ -1757,8 +1778,8 @@ 0 - 20 - 113 + 19 + 114 1 0 0 @@ -1769,8 +1790,8 @@ 0 - 20 - 114 + 19 + 115 1 0 0 @@ -1781,8 +1802,8 @@ 0 - 20 - 115 + 19 + 116 1 0 0 @@ -1793,8 +1814,8 @@ 0 - 20 - 116 + 19 + 117 1 0 0 @@ -1805,8 +1826,8 @@ 0 - 20 - 117 + 19 + 118 1 0 0 @@ -1817,8 +1838,8 @@ 0 - 20 - 118 + 19 + 119 1 0 0 @@ -1829,8 +1850,8 @@ 0 - 20 - 119 + 19 + 120 1 0 0 @@ -1849,8 +1870,8 @@ 0 0 - 21 - 120 + 20 + 121 1 0 0 @@ -1861,8 +1882,8 @@ 0 - 21 - 121 + 20 + 122 1 0 0 @@ -1881,8 +1902,8 @@ 0 0 - 22 - 122 + 21 + 123 1 0 0 @@ -1893,8 +1914,8 @@ 0 - 22 - 123 + 21 + 124 1 0 0 @@ -1905,8 +1926,8 @@ 0 - 22 - 124 + 21 + 125 5 0 0 @@ -1925,8 +1946,8 @@ 0 0 - 23 - 125 + 22 + 126 1 0 0 @@ -1937,8 +1958,8 @@ 0 - 23 - 126 + 22 + 127 1 0 0 @@ -1949,8 +1970,8 @@ 0 - 23 - 127 + 22 + 128 1 0 0 @@ -1961,8 +1982,8 @@ 0 - 23 - 128 + 22 + 129 1 0 0 @@ -1973,8 +1994,8 @@ 0 - 23 - 129 + 22 + 130 1 0 0 @@ -1987,43 +2008,59 @@ - tos_components + fs 0 0 0 0 - 24 - 130 + 23 + 131 1 0 0 0 - ..\..\..\..\components\fs\kv\tos_kv.c - tos_kv.c + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv\ln_kv.c + ln_kv.c 0 0 - - - - nvds - 0 - 0 - 0 - 0 - 25 - 131 + 23 + 132 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv_port\ln_kv_port.c + ln_kv_port.c + 0 + 0 + + + 23 + 133 1 0 0 0 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\nvds\nvds.c + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\nvds\nvds.c nvds.c 0 0 + + 23 + 134 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\partition_mgr\flash_partition_mgr.c + flash_partition_mgr.c + 0 + 0 + @@ -2033,8 +2070,8 @@ 0 0 - 26 - 132 + 24 + 135 1 0 0 @@ -2045,8 +2082,8 @@ 0 - 26 - 133 + 24 + 136 1 0 0 @@ -2057,8 +2094,8 @@ 0 - 26 - 134 + 24 + 137 1 0 0 @@ -2069,8 +2106,8 @@ 0 - 26 - 135 + 24 + 138 1 0 0 @@ -2081,8 +2118,8 @@ 0 - 26 - 136 + 24 + 139 1 0 0 @@ -2093,8 +2130,8 @@ 0 - 26 - 137 + 24 + 140 1 0 0 @@ -2113,8 +2150,8 @@ 0 0 - 27 - 138 + 25 + 141 1 0 0 @@ -2125,8 +2162,8 @@ 0 - 27 - 139 + 25 + 142 1 0 0 @@ -2137,8 +2174,8 @@ 0 - 27 - 140 + 25 + 143 1 0 0 @@ -2149,8 +2186,8 @@ 0 - 27 - 141 + 25 + 144 1 0 0 @@ -2161,8 +2198,8 @@ 0 - 27 - 142 + 25 + 145 1 0 0 @@ -2173,8 +2210,8 @@ 0 - 27 - 143 + 25 + 146 1 0 0 @@ -2185,8 +2222,8 @@ 0 - 27 - 144 + 25 + 147 1 0 0 @@ -2197,8 +2234,8 @@ 0 - 27 - 145 + 25 + 148 1 0 0 @@ -2217,8 +2254,8 @@ 0 0 - 28 - 146 + 26 + 149 1 0 0 @@ -2229,8 +2266,8 @@ 0 - 28 - 147 + 26 + 150 1 0 0 @@ -2241,8 +2278,8 @@ 0 - 28 - 148 + 26 + 151 1 0 0 @@ -2253,8 +2290,8 @@ 0 - 28 - 149 + 26 + 152 1 0 0 @@ -2265,8 +2302,8 @@ 0 - 28 - 150 + 26 + 153 1 0 0 @@ -2277,8 +2314,8 @@ 0 - 28 - 151 + 26 + 154 1 0 0 @@ -2297,8 +2334,8 @@ 0 0 - 29 - 152 + 27 + 155 1 0 0 @@ -2309,8 +2346,8 @@ 0 - 29 - 153 + 27 + 156 1 0 0 @@ -2321,8 +2358,8 @@ 0 - 29 - 154 + 27 + 157 1 0 0 @@ -2333,8 +2370,8 @@ 0 - 29 - 155 + 27 + 158 1 0 0 @@ -2345,8 +2382,8 @@ 0 - 29 - 156 + 27 + 159 1 0 0 @@ -2357,8 +2394,8 @@ 0 - 29 - 157 + 27 + 160 1 0 0 @@ -2369,8 +2406,8 @@ 0 - 29 - 158 + 27 + 161 1 0 0 @@ -2381,8 +2418,8 @@ 0 - 29 - 159 + 27 + 162 1 0 0 @@ -2393,8 +2430,8 @@ 0 - 29 - 160 + 27 + 163 1 0 0 @@ -2405,8 +2442,8 @@ 0 - 29 - 161 + 27 + 164 1 0 0 @@ -2417,8 +2454,8 @@ 0 - 29 - 162 + 27 + 165 1 0 0 @@ -2429,8 +2466,8 @@ 0 - 29 - 163 + 27 + 166 1 0 0 @@ -2441,8 +2478,8 @@ 0 - 29 - 164 + 27 + 167 1 0 0 @@ -2453,8 +2490,8 @@ 0 - 29 - 165 + 27 + 168 1 0 0 @@ -2465,8 +2502,8 @@ 0 - 29 - 166 + 27 + 169 1 0 0 @@ -2485,8 +2522,8 @@ 0 0 - 30 - 167 + 28 + 170 1 0 0 @@ -2497,8 +2534,8 @@ 0 - 30 - 168 + 28 + 171 1 0 0 @@ -2509,8 +2546,8 @@ 0 - 30 - 169 + 28 + 172 1 0 0 @@ -2521,8 +2558,8 @@ 0 - 30 - 170 + 28 + 173 1 0 0 @@ -2533,8 +2570,8 @@ 0 - 30 - 171 + 28 + 174 1 0 0 @@ -2553,8 +2590,8 @@ 0 0 - 31 - 172 + 29 + 175 1 0 0 @@ -2565,8 +2602,8 @@ 0 - 31 - 173 + 29 + 176 1 0 0 @@ -2577,8 +2614,8 @@ 0 - 31 - 174 + 29 + 177 1 0 0 @@ -2589,8 +2626,8 @@ 0 - 31 - 175 + 29 + 178 1 0 0 @@ -2601,8 +2638,8 @@ 0 - 31 - 176 + 29 + 179 1 0 0 @@ -2613,8 +2650,8 @@ 0 - 31 - 177 + 29 + 180 1 0 0 @@ -2625,8 +2662,8 @@ 0 - 31 - 178 + 29 + 181 1 0 0 @@ -2637,8 +2674,8 @@ 0 - 31 - 179 + 29 + 182 1 0 0 @@ -2649,8 +2686,8 @@ 0 - 31 - 180 + 29 + 183 1 0 0 @@ -2661,8 +2698,8 @@ 0 - 31 - 181 + 29 + 184 1 0 0 @@ -2673,8 +2710,8 @@ 0 - 31 - 182 + 29 + 185 1 0 0 @@ -2685,8 +2722,8 @@ 0 - 31 - 183 + 29 + 186 1 0 0 @@ -2697,8 +2734,8 @@ 0 - 31 - 184 + 29 + 187 1 0 0 @@ -2709,8 +2746,8 @@ 0 - 31 - 185 + 29 + 188 1 0 0 @@ -2721,8 +2758,8 @@ 0 - 31 - 186 + 29 + 189 1 0 0 @@ -2733,8 +2770,8 @@ 0 - 31 - 187 + 29 + 190 1 0 0 @@ -2745,8 +2782,8 @@ 0 - 31 - 188 + 29 + 191 1 0 0 @@ -2757,8 +2794,8 @@ 0 - 31 - 189 + 29 + 192 1 0 0 @@ -2769,8 +2806,8 @@ 0 - 31 - 190 + 29 + 193 1 0 0 @@ -2781,8 +2818,8 @@ 0 - 31 - 191 + 29 + 194 1 0 0 @@ -2793,8 +2830,8 @@ 0 - 31 - 192 + 29 + 195 1 0 0 @@ -2805,8 +2842,8 @@ 0 - 31 - 193 + 29 + 196 1 0 0 @@ -2817,8 +2854,8 @@ 0 - 31 - 194 + 29 + 197 1 0 0 @@ -2829,8 +2866,8 @@ 0 - 31 - 195 + 29 + 198 1 0 0 @@ -2841,8 +2878,8 @@ 0 - 31 - 196 + 29 + 199 1 0 0 @@ -2853,8 +2890,8 @@ 0 - 31 - 197 + 29 + 200 1 0 0 @@ -2865,8 +2902,8 @@ 0 - 31 - 198 + 29 + 201 1 0 0 @@ -2877,8 +2914,8 @@ 0 - 31 - 199 + 29 + 202 1 0 0 @@ -2889,8 +2926,8 @@ 0 - 31 - 200 + 29 + 203 1 0 0 @@ -2901,8 +2938,8 @@ 0 - 31 - 201 + 29 + 204 1 0 0 @@ -2913,8 +2950,8 @@ 0 - 31 - 202 + 29 + 205 1 0 0 @@ -2925,8 +2962,8 @@ 0 - 31 - 203 + 29 + 206 1 0 0 @@ -2937,8 +2974,8 @@ 0 - 31 - 204 + 29 + 207 1 0 0 @@ -2949,8 +2986,8 @@ 0 - 31 - 205 + 29 + 208 1 0 0 @@ -2961,8 +2998,8 @@ 0 - 31 - 206 + 29 + 209 1 0 0 @@ -2973,8 +3010,8 @@ 0 - 31 - 207 + 29 + 210 1 0 0 @@ -2985,8 +3022,8 @@ 0 - 31 - 208 + 29 + 211 1 0 0 @@ -2997,8 +3034,8 @@ 0 - 31 - 209 + 29 + 212 1 0 0 @@ -3009,8 +3046,8 @@ 0 - 31 - 210 + 29 + 213 1 0 0 @@ -3021,8 +3058,8 @@ 0 - 31 - 211 + 29 + 214 1 0 0 @@ -3033,8 +3070,8 @@ 0 - 31 - 212 + 29 + 215 1 0 0 @@ -3045,8 +3082,8 @@ 0 - 31 - 213 + 29 + 216 1 0 0 @@ -3057,8 +3094,8 @@ 0 - 31 - 214 + 29 + 217 1 0 0 @@ -3069,8 +3106,8 @@ 0 - 31 - 215 + 29 + 218 1 0 0 @@ -3081,8 +3118,8 @@ 0 - 31 - 216 + 29 + 219 1 0 0 @@ -3093,8 +3130,8 @@ 0 - 31 - 217 + 29 + 220 1 0 0 @@ -3105,8 +3142,8 @@ 0 - 31 - 218 + 29 + 221 1 0 0 @@ -3117,8 +3154,8 @@ 0 - 31 - 219 + 29 + 222 1 0 0 @@ -3129,8 +3166,8 @@ 0 - 31 - 220 + 29 + 223 1 0 0 @@ -3141,8 +3178,8 @@ 0 - 31 - 221 + 29 + 224 1 0 0 @@ -3153,8 +3190,8 @@ 0 - 31 - 222 + 29 + 225 1 0 0 @@ -3165,8 +3202,8 @@ 0 - 31 - 223 + 29 + 226 1 0 0 @@ -3177,8 +3214,8 @@ 0 - 31 - 224 + 29 + 227 1 0 0 @@ -3189,8 +3226,8 @@ 0 - 31 - 225 + 29 + 228 1 0 0 @@ -3201,8 +3238,8 @@ 0 - 31 - 226 + 29 + 229 1 0 0 @@ -3213,8 +3250,8 @@ 0 - 31 - 227 + 29 + 230 1 0 0 @@ -3225,8 +3262,8 @@ 0 - 31 - 228 + 29 + 231 1 0 0 @@ -3237,8 +3274,8 @@ 0 - 31 - 229 + 29 + 232 1 0 0 @@ -3249,8 +3286,8 @@ 0 - 31 - 230 + 29 + 233 1 0 0 @@ -3261,8 +3298,8 @@ 0 - 31 - 231 + 29 + 234 1 0 0 @@ -3273,8 +3310,8 @@ 0 - 31 - 232 + 29 + 235 1 0 0 @@ -3285,8 +3322,8 @@ 0 - 31 - 233 + 29 + 236 1 0 0 @@ -3297,8 +3334,8 @@ 0 - 31 - 234 + 29 + 237 1 0 0 @@ -3309,8 +3346,8 @@ 0 - 31 - 235 + 29 + 238 1 0 0 @@ -3321,8 +3358,8 @@ 0 - 31 - 236 + 29 + 239 1 0 0 @@ -3333,8 +3370,8 @@ 0 - 31 - 237 + 29 + 240 1 0 0 @@ -3345,8 +3382,8 @@ 0 - 31 - 238 + 29 + 241 1 0 0 @@ -3357,8 +3394,8 @@ 0 - 31 - 239 + 29 + 242 1 0 0 @@ -3369,8 +3406,8 @@ 0 - 31 - 240 + 29 + 243 1 0 0 @@ -3381,8 +3418,8 @@ 0 - 31 - 241 + 29 + 244 1 0 0 @@ -3393,8 +3430,8 @@ 0 - 31 - 242 + 29 + 245 1 0 0 @@ -3405,8 +3442,8 @@ 0 - 31 - 243 + 29 + 246 1 0 0 @@ -3417,8 +3454,8 @@ 0 - 31 - 244 + 29 + 247 1 0 0 @@ -3429,8 +3466,8 @@ 0 - 31 - 245 + 29 + 248 1 0 0 @@ -3441,8 +3478,8 @@ 0 - 31 - 246 + 29 + 249 1 0 0 @@ -3453,8 +3490,8 @@ 0 - 31 - 247 + 29 + 250 1 0 0 @@ -3465,8 +3502,8 @@ 0 - 31 - 248 + 29 + 251 1 0 0 @@ -3477,8 +3514,8 @@ 0 - 31 - 249 + 29 + 252 1 0 0 @@ -3489,8 +3526,8 @@ 0 - 31 - 250 + 29 + 253 1 0 0 @@ -3509,8 +3546,8 @@ 0 0 - 32 - 251 + 30 + 254 1 0 0 @@ -3521,8 +3558,8 @@ 0 - 32 - 252 + 30 + 255 1 0 0 @@ -3533,8 +3570,8 @@ 0 - 32 - 253 + 30 + 256 1 0 0 diff --git a/board/EVB_LN882x/KEIL/qcloud_iot_explorer/TencentOS_tiny.uvprojx b/board/EVB_LN882x/KEIL/qcloud_iot_explorer/TencentOS_tiny.uvprojx index fdee40ef35b459ea91adafb8352940bf838e3b29..633711e8199edae2b2ccbb5dc2f4580d11b6e5a0 100644 --- a/board/EVB_LN882x/KEIL/qcloud_iot_explorer/TencentOS_tiny.uvprojx +++ b/board/EVB_LN882x/KEIL/qcloud_iot_explorer/TencentOS_tiny.uvprojx @@ -70,9 +70,9 @@ 0 - 0 + 1 0 - + python ..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\user_cmd\before_build.py flash_partition_cfg.json flash_partition_table.h 0 0 @@ -81,9 +81,9 @@ 1 - 0 - .\after_build_ln882x.bat - + 1 + python ..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\user_cmd\after_build_soc.py @L + ..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\bin\mkimage.exe cmd_app ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\boot_ln882x.bin @L.bin @L.asm flashimage.bin flash_partition_cfg.json ver=1.1 0 0 0 @@ -338,7 +338,7 @@ LN882x,ARM_MATH_CM4,MBEDTLS_CONFIG_FILE=<qcloud/tls_psk_config.h> - ..\..\BSP\Inc;..\..\TOS-CONFIG;..\..\..\..\kernel\pm\include;..\..\..\..\kernel\core\include;..\..\..\..\arch\arm\arm-v7m\common\include;..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc;..\..\..\..\osal\cmsis_os;..\..\..\..\examples\helloworld;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\driver_ln882x;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\driver_ln882x\ll\include;..\..\..\..\components\fs\kv\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\cpu\ARM_CM4F\ln88xx;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\kernel;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\cpu\ARM_CM4F\CMSIS_5.3.0;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\wifi_manager;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\net;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\port;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\port\arch;..\..\..\..\components\connectivity\qcloud-iot-explorer-sdk\3rdparty\include;..\..\..\..\components\connectivity\qcloud-iot-explorer-sdk\3rdparty\include\exports;..\..\..\..\components\connectivity\qcloud-iot-explorer-sdk\3rdparty\sdk_src\internal_inc;..\..\..\..\components\security\mbedtls\3rdparty\include;..\..\..\..\components\security\mbedtls\wrapper\include + ..\..\BSP\Inc;..\..\TOS-CONFIG;..\..\..\..\kernel\pm\include;..\..\..\..\kernel\core\include;..\..\..\..\arch\arm\arm-v7m\common\include;..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc;..\..\..\..\osal\cmsis_os;..\..\..\..\examples\helloworld;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\driver_ln882x;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\driver_ln882x\ll\include;..\..\..\..\components\fs\kv\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\cpu\ARM_CM4F\ln88xx;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\kernel;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\cpu\ARM_CM4F\CMSIS_5.3.0;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\wifi_manager;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\net;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\port;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\port\arch;..\..\..\..\components\connectivity\qcloud-iot-explorer-sdk\3rdparty\include;..\..\..\..\components\connectivity\qcloud-iot-explorer-sdk\3rdparty\include\exports;..\..\..\..\components\connectivity\qcloud-iot-explorer-sdk\3rdparty\sdk_src\internal_inc;..\..\..\..\components\security\mbedtls\3rdparty\include;..\..\..\..\components\security\mbedtls\wrapper\include;..\qcloud_iot_explorer;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_port;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv_port;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\nvds;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\partition_mgr @@ -369,10 +369,10 @@ 0x08000000 0x20000000 - .\firmware_XIP_ln882x.sct + .\ln882x.sct - --no_autoat --keep=main.o(no_init_data) + --no_autoat --keep=*.o(no_init_data) @@ -429,16 +429,6 @@ - - Drivers/Drv - - - drv_adc_measure.c - 1 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\driver_ln882x\drv\drv_adc_measure.c - - - Drivers/HAL @@ -738,6 +728,16 @@ 1 ..\..\BSP\Src\mcu_init.c + + serial_hw.c + 1 + ..\..\BSP\Src\serial_hw.c + + + drv_adc_measure.c + 1 + ..\..\BSP\Src\drv_adc_measure.c + @@ -748,11 +748,6 @@ 1 ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\serial\serial.c - - serial_hw.c - 1 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\serial\serial_hw.c - @@ -934,9 +929,9 @@ ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\wifi_mac.lib - wifi_driver.lib + soc_driver.lib 4 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\wifi_driver.lib + ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\soc_driver.lib @@ -948,6 +943,11 @@ 1 ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_manager\wifi_manager.c + + wifi_port.c + 1 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_port\wifi_port.c + @@ -1242,22 +1242,27 @@ - tos_components + fs - tos_kv.c + ln_kv.c 1 - ..\..\..\..\components\fs\kv\tos_kv.c + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv\ln_kv.c + + + ln_kv_port.c + 1 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv_port\ln_kv_port.c - - - - nvds - nvds.c 1 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\nvds\nvds.c + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\nvds\nvds.c + + + flash_partition_mgr.c + 1 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\partition_mgr\flash_partition_mgr.c diff --git a/board/EVB_LN882x/KEIL/qcloud_iot_explorer/after_build_ln882x.bat b/board/EVB_LN882x/KEIL/qcloud_iot_explorer/after_build_ln882x.bat index cc2c067869bce6aeb41969ea95991bdbc55d9ebc..60675d37f1fb6229a9d0e94ce65d4c58c7401266 100644 --- a/board/EVB_LN882x/KEIL/qcloud_iot_explorer/after_build_ln882x.bat +++ b/board/EVB_LN882x/KEIL/qcloud_iot_explorer/after_build_ln882x.bat @@ -1,8 +1,4 @@ - -python ..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\user_cmd\after_build_soc.py firmware_XIP - -..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\bin\mkimage.exe ln882x flashimage ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\boot_ram_ln882x.bin firmware_XIP.bin flashimage.bin release=1 crp_enable=0 app_version=10 hw_version=0 - -..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\bin\fpu_patch.exe .\firmware_XIP.asm .\flashimage.bin +python ..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\user_cmd\after_build_soc.py @L +..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\bin\mkimage.exe cmd_app ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\boot_ln882x.bin @L.bin @L.asm flashimage.bin flash_partition_cfg.json ver=1.1 diff --git a/board/EVB_LN882x/KEIL/qcloud_iot_explorer/flash_partition_cfg.json b/board/EVB_LN882x/KEIL/qcloud_iot_explorer/flash_partition_cfg.json new file mode 100644 index 0000000000000000000000000000000000000000..91fec5375be9f0c1e687ff9525f4c3fd7d124452 --- /dev/null +++ b/board/EVB_LN882x/KEIL/qcloud_iot_explorer/flash_partition_cfg.json @@ -0,0 +1,22 @@ +{ + "Warning1":"警告,系统定义用户不可修改!!!", + "vendor_define": + [ + {"partition_type": "BOOT", "start_addr": "0x00000000", "size_KB": 36 }, + {"partition_type": "PART_TAB", "start_addr": "0x00009000", "size_KB": 4 } + ], + + + "Warning2":"以下数据,用户根据SOC flash容量以及具体需求修改,仅可以修改start_addr值和size值,且必须4KB对齐!!!", + "user_define": + [ + {"partition_type": "KV", "start_addr": "0x0000A000", "size_KB": 8 }, + {"partition_type": "SIMU_EEPROM", "start_addr": "0x0000C000", "size_KB": 8 }, + {"partition_type": "APP", "start_addr": "0x0000E000", "size_KB": 800 }, + {"partition_type": "OTA", "start_addr": "0x000D6000", "size_KB": 800 }, + {"partition_type": "NVDS", "start_addr": "0x0019E000", "size_KB": 12 }, + {"partition_type": "USER", "start_addr": "0x001A1000", "size_KB": 12 } + ] +} + + diff --git a/board/EVB_LN882x/KEIL/qcloud_iot_explorer/flash_partition_table.h b/board/EVB_LN882x/KEIL/qcloud_iot_explorer/flash_partition_table.h index e068e5bfed174a79bb1f7fa841d5196c0de7bbce..08788e3cd33106dc76b6e0e27e56e1f1fdac627c 100644 --- a/board/EVB_LN882x/KEIL/qcloud_iot_explorer/flash_partition_table.h +++ b/board/EVB_LN882x/KEIL/qcloud_iot_explorer/flash_partition_table.h @@ -1,32 +1,56 @@ -#ifndef __FLASH_PARTITION_TABLE_H__ -#define __FLASH_PARTITION_TABLE_H__ +#ifndef __FLASH_PARTITION_TABLE__ +#define __FLASH_PARTITION_TABLE__ -//#define RETENTION_MEM_BASE 0x20028000 -//#define RETENTION_MEM_SIZE 0x2000 -#ifndef FLASH_BASE -#define FLASH_BASE (0x10000000) +//flash partition map,it's generated by the script based on the json file + +#define BOOT_SPACE_OFFSET (0x00000000) +#define BOOT_SPACE_SIZE (1024*36) + +#define PART_TAB_SPACE_OFFSET (0x00009000) +#define PART_TAB_SPACE_SIZE (1024*4) +#if (PART_TAB_SPACE_OFFSET < (BOOT_SPACE_OFFSET + BOOT_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" +#endif + +#define KV_SPACE_OFFSET (0x0000A000) +#define KV_SPACE_SIZE (1024*8) +#if (KV_SPACE_OFFSET < (PART_TAB_SPACE_OFFSET + PART_TAB_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" +#endif + +#define SIMU_EEPROM_SPACE_OFFSET (0x0000C000) +#define SIMU_EEPROM_SPACE_SIZE (1024*8) +#if (SIMU_EEPROM_SPACE_OFFSET < (KV_SPACE_OFFSET + KV_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" #endif -#ifndef FLASH_SIZE -#define FLASH_SIZE (0x00200000) +#define APP_SPACE_OFFSET (0x0000E000) +#define APP_SPACE_SIZE (1024*800) +#if (APP_SPACE_OFFSET < (SIMU_EEPROM_SPACE_OFFSET + SIMU_EEPROM_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" #endif -#ifndef PRIMARY_PARTITION_OFFSET -#define PRIMARY_PARTITION_OFFSET (0x0000F000) +#define OTA_SPACE_OFFSET (0x000D6000) +#define OTA_SPACE_SIZE (1024*800) +#if (OTA_SPACE_OFFSET < (APP_SPACE_OFFSET + APP_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" #endif -#define PRIMARY_PATTITION_START 0x0000F000 -#define PRIMARY_PATTITION_SIZE 0xE1000 -//#define USERAPP_SRAM_BASE 0x1FFF0000 -#define BACKUP_PATTITION_START 0x000F0000 -#define BACKUP_PATTITION_SIZE 0xE1000 -#define USERDATA_PATTITION_START 0x001D1000 -#define USERDATA_PATTITION_SIZE 0x23000 - -//memory offset check -#if ((PRIMARY_PATTITION_START < PRIMARY_PARTITION_OFFSET) || (BACKUP_PATTITION_START < PRIMARY_PATTITION_START) || (USERDATA_PATTITION_START < BACKUP_PATTITION_START) || (PRIMARY_PATTITION_START + PRIMARY_PATTITION_SIZE > BACKUP_PATTITION_START) || (BACKUP_PATTITION_START + BACKUP_PATTITION_SIZE > USERDATA_PATTITION_START) || (USERDATA_PATTITION_START + USERDATA_PATTITION_SIZE > FLASH_SIZE)) - #error "flash partition define error!" +#define NVDS_SPACE_OFFSET (0x0019E000) +#define NVDS_SPACE_SIZE (1024*12) +#if (NVDS_SPACE_OFFSET < (OTA_SPACE_OFFSET + OTA_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" #endif -#endif /* __FLASH_PARTITION_TABLE_H__ */ +#define USER_SPACE_OFFSET (0x001A1000) +#define USER_SPACE_SIZE (1024*12) +#if (USER_SPACE_OFFSET < (NVDS_SPACE_OFFSET + NVDS_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" +#endif + + +#define IMAGE_HEADER_SIZE (0x100) + +#endif /* __FLASH_PARTITION_TABLE__ */ + diff --git a/board/EVB_LN882x/KEIL/qcloud_iot_explorer/firmware_XIP_ln882x.sct b/board/EVB_LN882x/KEIL/qcloud_iot_explorer/ln882x.sct similarity index 59% rename from board/EVB_LN882x/KEIL/qcloud_iot_explorer/firmware_XIP_ln882x.sct rename to board/EVB_LN882x/KEIL/qcloud_iot_explorer/ln882x.sct index 50c5ed54a8fbe7c3a6368808b01626c5749c6815..26dc840bfa1c7850081bad4ed3086b3fbee26d7d 100644 --- a/board/EVB_LN882x/KEIL/qcloud_iot_explorer/firmware_XIP_ln882x.sct +++ b/board/EVB_LN882x/KEIL/qcloud_iot_explorer/ln882x.sct @@ -1,9 +1,9 @@ #! armcc -E -#include ".\flash_partition_table.h" +#include "flash_partition_table.h" #include ".\..\..\..\..\platform\vendor_bsp\LN\ln882x\include\cpu\ARM_CM4F\ln88xx\mem_map_ln882x.h" -LR_FLASH FLASH_BASE+PRIMARY_PARTITION_OFFSET PRIMARY_PATTITION_SIZE +LR_FLASH CACHE_FLASH_BASE+APP_SPACE_OFFSET+IMAGE_HEADER_SIZE APP_SPACE_SIZE {; load region size_region ISR_VECTOR RAM_BASE ALIGN 0x100 @@ -11,7 +11,7 @@ LR_FLASH FLASH_BASE+PRIMARY_PARTITION_OFFSET PRIMARY_PATTITION_SIZE startup_*.o (RESET, +First) } - ER_FLASH FLASH_BASE+PRIMARY_PARTITION_OFFSET + ImageLength(ISR_VECTOR) PRIMARY_PATTITION_SIZE + ER_FLASH CACHE_FLASH_BASE+APP_SPACE_OFFSET+IMAGE_HEADER_SIZE + ImageLength(ISR_VECTOR) APP_SPACE_SIZE {; load address = execution address *(InRoot$$Sections) .ANY (+RO) @@ -24,15 +24,15 @@ LR_FLASH FLASH_BASE+PRIMARY_PARTITION_OFFSET PRIMARY_PATTITION_SIZE ll_cache.o(+RO) ll_dma.o(+RO) ll_syscon.o(+RO) - ll_sleep.o(+RO) - ll_rtc.o(+RO) + ;ll_sleep.o(+RO) + ;ll_rtc.o(+RO) cache.o(+RO) qspi.o(+RO) flash.o(+RO) hal_dma.o(+RO) hal_syscon.o(+RO) - hal_sleep.o(+RO) - hal_rtc.o(+RO) + ;hal_sleep.o(+RO) + ;hal_rtc.o(+RO) ;port.o(XIR) ;optional item @@ -49,16 +49,32 @@ LR_FLASH FLASH_BASE+PRIMARY_PARTITION_OFFSET PRIMARY_PATTITION_SIZE startup_ln*(+RW +ZI) } - ER_DATA +0 + ER_DATA_IN_B0 +0 RAM_BLOCK0_SIZE-ImageLength(ISR_VECTOR)-ImageLength(ER_CODE)-ImageLength(ER_STACK) { - *(.ARM.__at_0x1FFFFFFC) - .ANY (+RW +ZI) + memp.o(+RW +ZI) + imem.o(+RW +ZI) + imem_if.o(+RW +ZI) + ;cglobals_sta.o(+RW +ZI) + ;event_manager.o(+RW +ZI) + iconfig.o(+RW +ZI) + common.o(+RW +ZI) + } + + HEAP_SPACE0 +0 EMPTY RAM_BLOCK1_BASE-ImageLimit(ER_DATA_IN_B0) + {; Heap region + } + + ER_DATA_IN_B1 RAM_BLOCK1_BASE RAM_BLOCK1_SIZE + { + *(wlan_mem_pkt) + *(wlan_mem_dscr) + .ANY (+RW +ZI) } ;IQ Data area cannot be used by ER_DATA region ;ScatterAssert(ImageLimit(ER_DATA) < (0x20020300)) - HEAP_SPACE +0 EMPTY RETENTION_MEM_BASE-ImageLimit(ER_DATA) + HEAP_SPACE1 +0 EMPTY RETENTION_MEM_BASE-ImageLimit(ER_DATA_IN_B1) {; Heap region } diff --git a/board/EVB_LN882x/KEIL/wifi_demo/.gitignore b/board/EVB_LN882x/KEIL/wifi_demo/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..31d89ac45a3ce4a91b4faef7393675c91aaa6774 --- /dev/null +++ b/board/EVB_LN882x/KEIL/wifi_demo/.gitignore @@ -0,0 +1,6 @@ +/Listings/ +/Objects/ +*.uvguix.* +JLinkLog.txt +*.bin +*.asm \ No newline at end of file diff --git a/board/EVB_LN882x/KEIL/wifi_demo/TencentOS_tiny.uvoptx b/board/EVB_LN882x/KEIL/wifi_demo/TencentOS_tiny.uvoptx index b56d87ad251dd5ef2aa7aa0486b970fd35d35074..553013ed30eeb90d6d769699e52cbfd3bb644ffe 100644 --- a/board/EVB_LN882x/KEIL/wifi_demo/TencentOS_tiny.uvoptx +++ b/board/EVB_LN882x/KEIL/wifi_demo/TencentOS_tiny.uvoptx @@ -114,11 +114,6 @@ Segger\JL2CM3.dll - - 0 - DLGUARM - - 0 ARMRTXEVENTFLAGS @@ -150,7 +145,24 @@ -U-O142 -O2254 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 -FP0($$Device:STM32F103VE$Flash\STM32F10x_512.FLM) - + + + 0 + 0 + 50 + 1 +
268506362
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\kernel\TencentOS_Adapter\TencentOS_mutex.c + + \\firmware_XIP\../../../../platform/vendor_bsp/LN/ln882x/src/kernel/TencentOS_Adapter/TencentOS_mutex.c\50 +
+
0 @@ -340,7 +352,7 @@ - Drivers/Drv + Drivers/HAL 0 0 0 @@ -352,34 +364,14 @@ 0 0 0 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\driver_ln882x\drv\drv_adc_measure.c - drv_adc_measure.c - 0 - 0 - - - - - Drivers/HAL - 0 - 0 - 0 - 0 - - 5 - 8 - 1 - 0 - 0 - 0 ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\driver_ln882x\hal\hal_common.c hal_common.c 0 0 - 5 - 9 + 4 + 8 1 0 0 @@ -390,8 +382,8 @@ 0 - 5 - 10 + 4 + 9 1 0 0 @@ -402,8 +394,8 @@ 0 - 5 - 11 + 4 + 10 1 0 0 @@ -414,8 +406,8 @@ 0 - 5 - 12 + 4 + 11 1 0 0 @@ -426,8 +418,8 @@ 0 - 5 - 13 + 4 + 12 1 0 0 @@ -438,8 +430,8 @@ 0 - 5 - 14 + 4 + 13 1 0 0 @@ -450,8 +442,8 @@ 0 - 5 - 15 + 4 + 14 1 0 0 @@ -462,8 +454,8 @@ 0 - 5 - 16 + 4 + 15 1 0 0 @@ -474,8 +466,8 @@ 0 - 5 - 17 + 4 + 16 1 0 0 @@ -486,8 +478,8 @@ 0 - 5 - 18 + 4 + 17 1 0 0 @@ -498,8 +490,8 @@ 0 - 5 - 19 + 4 + 18 1 0 0 @@ -510,8 +502,8 @@ 0 - 5 - 20 + 4 + 19 1 0 0 @@ -530,8 +522,8 @@ 0 0 - 6 - 21 + 5 + 20 1 0 0 @@ -542,8 +534,8 @@ 0 - 6 - 22 + 5 + 21 1 0 0 @@ -554,8 +546,8 @@ 0 - 6 - 23 + 5 + 22 1 0 0 @@ -566,8 +558,8 @@ 0 - 6 - 24 + 5 + 23 1 0 0 @@ -578,8 +570,8 @@ 0 - 6 - 25 + 5 + 24 1 0 0 @@ -590,8 +582,8 @@ 0 - 6 - 26 + 5 + 25 1 0 0 @@ -602,8 +594,8 @@ 0 - 6 - 27 + 5 + 26 1 0 0 @@ -614,8 +606,8 @@ 0 - 6 - 28 + 5 + 27 1 0 0 @@ -626,8 +618,8 @@ 0 - 6 - 29 + 5 + 28 1 0 0 @@ -638,8 +630,8 @@ 0 - 6 - 30 + 5 + 29 1 0 0 @@ -650,8 +642,8 @@ 0 - 6 - 31 + 5 + 30 1 0 0 @@ -662,8 +654,8 @@ 0 - 6 - 32 + 5 + 31 1 0 0 @@ -674,8 +666,8 @@ 0 - 6 - 33 + 5 + 32 1 0 0 @@ -686,8 +678,8 @@ 0 - 6 - 34 + 5 + 33 1 0 0 @@ -698,8 +690,8 @@ 0 - 6 - 35 + 5 + 34 1 0 0 @@ -710,8 +702,8 @@ 0 - 6 - 36 + 5 + 35 1 0 0 @@ -722,8 +714,8 @@ 0 - 6 - 37 + 5 + 36 1 0 0 @@ -734,8 +726,8 @@ 0 - 6 - 38 + 5 + 37 1 0 0 @@ -746,8 +738,8 @@ 0 - 6 - 39 + 5 + 38 1 0 0 @@ -758,8 +750,8 @@ 0 - 6 - 40 + 5 + 39 1 0 0 @@ -770,8 +762,8 @@ 0 - 6 - 41 + 5 + 40 1 0 0 @@ -782,8 +774,8 @@ 0 - 6 - 42 + 5 + 41 1 0 0 @@ -794,8 +786,8 @@ 0 - 6 - 43 + 5 + 42 1 0 0 @@ -806,8 +798,8 @@ 0 - 6 - 44 + 5 + 43 1 0 0 @@ -826,8 +818,8 @@ 0 0 - 7 - 45 + 6 + 44 1 0 0 @@ -838,8 +830,8 @@ 0 - 7 - 46 + 6 + 45 2 0 0 @@ -850,8 +842,8 @@ 0 - 7 - 47 + 6 + 46 1 0 0 @@ -863,6 +855,26 @@ + + cmsis + 0 + 0 + 0 + 0 + + 7 + 47 + 1 + 0 + 0 + 0 + ..\..\..\..\osal\cmsis_os\cmsis_os.c + cmsis_os.c + 0 + 0 + + + config 0 @@ -896,7 +908,7 @@ - cmsis + bsp 0 0 0 @@ -908,60 +920,52 @@ 0 0 0 - ..\..\..\..\osal\cmsis_os\cmsis_os.c - cmsis_os.c + ..\..\BSP\Src\mcu_init.c + mcu_init.c 0 0 - - - - bsp - 0 - 0 - 0 - 0 - 10 + 9 51 1 0 0 0 - ..\..\BSP\Src\mcu_init.c - mcu_init.c + ..\..\BSP\Src\serial_hw.c + serial_hw.c 0 0 - - - - serial - 0 - 0 - 0 - 0 - 11 + 9 52 1 0 0 0 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\serial\serial.c - serial.c + ..\..\BSP\Src\drv_adc_measure.c + drv_adc_measure.c 0 0 + + + + serial + 0 + 0 + 0 + 0 - 11 + 10 53 1 0 0 0 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\serial\serial_hw.c - serial_hw.c + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\serial\serial.c + serial.c 0 0 @@ -974,7 +978,7 @@ 0 0 - 12 + 11 54 1 0 @@ -994,7 +998,7 @@ 0 0 - 13 + 12 55 1 0 @@ -1006,7 +1010,7 @@ 0 - 13 + 12 56 1 0 @@ -1018,7 +1022,7 @@ 0 - 13 + 12 57 1 0 @@ -1030,7 +1034,7 @@ 0 - 13 + 12 58 1 0 @@ -1042,7 +1046,7 @@ 0 - 13 + 12 59 1 0 @@ -1054,7 +1058,7 @@ 0 - 13 + 12 60 1 0 @@ -1074,7 +1078,7 @@ 0 0 - 14 + 13 61 1 0 @@ -1086,7 +1090,7 @@ 0 - 14 + 13 62 1 0 @@ -1098,7 +1102,7 @@ 0 - 14 + 13 63 1 0 @@ -1110,7 +1114,7 @@ 0 - 14 + 13 64 1 0 @@ -1122,7 +1126,7 @@ 0 - 14 + 13 65 1 0 @@ -1134,7 +1138,7 @@ 0 - 14 + 13 66 1 0 @@ -1146,7 +1150,7 @@ 0 - 14 + 13 67 1 0 @@ -1158,7 +1162,7 @@ 0 - 14 + 13 68 1 0 @@ -1170,7 +1174,7 @@ 0 - 14 + 13 69 1 0 @@ -1182,7 +1186,7 @@ 0 - 14 + 13 70 1 0 @@ -1194,7 +1198,7 @@ 0 - 14 + 13 71 1 0 @@ -1206,7 +1210,7 @@ 0 - 14 + 13 72 1 0 @@ -1218,7 +1222,7 @@ 0 - 14 + 13 73 1 0 @@ -1238,7 +1242,7 @@ 0 0 - 15 + 14 74 5 0 @@ -1258,7 +1262,7 @@ 0 0 - 16 + 15 75 1 0 @@ -1270,7 +1274,7 @@ 0 - 16 + 15 76 1 0 @@ -1282,7 +1286,7 @@ 0 - 16 + 15 77 1 0 @@ -1294,7 +1298,7 @@ 0 - 16 + 15 78 1 0 @@ -1306,7 +1310,7 @@ 0 - 16 + 15 79 1 0 @@ -1318,7 +1322,7 @@ 0 - 16 + 15 80 1 0 @@ -1330,7 +1334,7 @@ 0 - 16 + 15 81 1 0 @@ -1350,7 +1354,7 @@ 0 0 - 17 + 16 82 4 0 @@ -1362,26 +1366,26 @@ 0 - 17 + 16 83 4 0 0 0 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\wifi_mac.lib - wifi_mac.lib + ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\soc_driver.lib + soc_driver.lib 0 0 - 17 + 16 84 4 0 0 0 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\wifi_driver.lib - wifi_driver.lib + ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\wifi_mac.lib + wifi_mac.lib 0 0 @@ -1394,7 +1398,7 @@ 0 0 - 18 + 17 85 1 0 @@ -1405,6 +1409,18 @@ 0 0 + + 17 + 86 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_port\wifi_port.c + wifi_port.c + 0 + 0 + @@ -1414,8 +1430,8 @@ 0 0 - 19 - 86 + 18 + 87 1 0 0 @@ -1426,8 +1442,8 @@ 0 - 19 - 87 + 18 + 88 1 0 0 @@ -1438,8 +1454,8 @@ 0 - 19 - 88 + 18 + 89 1 0 0 @@ -1450,8 +1466,8 @@ 0 - 19 - 89 + 18 + 90 1 0 0 @@ -1462,8 +1478,8 @@ 0 - 19 - 90 + 18 + 91 1 0 0 @@ -1474,8 +1490,8 @@ 0 - 19 - 91 + 18 + 92 1 0 0 @@ -1486,8 +1502,8 @@ 0 - 19 - 92 + 18 + 93 1 0 0 @@ -1498,8 +1514,8 @@ 0 - 19 - 93 + 18 + 94 1 0 0 @@ -1510,8 +1526,8 @@ 0 - 19 - 94 + 18 + 95 1 0 0 @@ -1522,8 +1538,8 @@ 0 - 19 - 95 + 18 + 96 1 0 0 @@ -1534,8 +1550,8 @@ 0 - 19 - 96 + 18 + 97 1 0 0 @@ -1546,8 +1562,8 @@ 0 - 19 - 97 + 18 + 98 1 0 0 @@ -1558,8 +1574,8 @@ 0 - 19 - 98 + 18 + 99 1 0 0 @@ -1570,8 +1586,8 @@ 0 - 19 - 99 + 18 + 100 1 0 0 @@ -1582,8 +1598,8 @@ 0 - 19 - 100 + 18 + 101 1 0 0 @@ -1594,8 +1610,8 @@ 0 - 19 - 101 + 18 + 102 1 0 0 @@ -1606,8 +1622,8 @@ 0 - 19 - 102 + 18 + 103 1 0 0 @@ -1618,8 +1634,8 @@ 0 - 19 - 103 + 18 + 104 1 0 0 @@ -1630,8 +1646,8 @@ 0 - 19 - 104 + 18 + 105 1 0 0 @@ -1642,8 +1658,8 @@ 0 - 19 - 105 + 18 + 106 1 0 0 @@ -1654,8 +1670,8 @@ 0 - 19 - 106 + 18 + 107 1 0 0 @@ -1666,8 +1682,8 @@ 0 - 19 - 107 + 18 + 108 1 0 0 @@ -1678,8 +1694,8 @@ 0 - 19 - 108 + 18 + 109 1 0 0 @@ -1690,8 +1706,8 @@ 0 - 19 - 109 + 18 + 110 1 0 0 @@ -1702,8 +1718,8 @@ 0 - 19 - 110 + 18 + 111 1 0 0 @@ -1722,8 +1738,8 @@ 0 0 - 20 - 111 + 19 + 112 1 0 0 @@ -1734,8 +1750,8 @@ 0 - 20 - 112 + 19 + 113 1 0 0 @@ -1746,8 +1762,8 @@ 0 - 20 - 113 + 19 + 114 1 0 0 @@ -1758,8 +1774,8 @@ 0 - 20 - 114 + 19 + 115 1 0 0 @@ -1770,8 +1786,8 @@ 0 - 20 - 115 + 19 + 116 1 0 0 @@ -1782,8 +1798,8 @@ 0 - 20 - 116 + 19 + 117 1 0 0 @@ -1794,8 +1810,8 @@ 0 - 20 - 117 + 19 + 118 1 0 0 @@ -1806,8 +1822,8 @@ 0 - 20 - 118 + 19 + 119 1 0 0 @@ -1826,8 +1842,8 @@ 0 0 - 21 - 119 + 20 + 120 1 0 0 @@ -1838,8 +1854,8 @@ 0 - 21 - 120 + 20 + 121 1 0 0 @@ -1858,8 +1874,8 @@ 0 0 - 22 - 121 + 21 + 122 1 0 0 @@ -1870,8 +1886,8 @@ 0 - 22 - 122 + 21 + 123 1 0 0 @@ -1882,8 +1898,8 @@ 0 - 22 - 123 + 21 + 124 5 0 0 @@ -1902,8 +1918,8 @@ 0 0 - 23 - 124 + 22 + 125 1 0 0 @@ -1914,8 +1930,8 @@ 0 - 23 - 125 + 22 + 126 1 0 0 @@ -1926,8 +1942,8 @@ 0 - 23 - 126 + 22 + 127 1 0 0 @@ -1938,8 +1954,8 @@ 0 - 23 - 127 + 22 + 128 1 0 0 @@ -1950,8 +1966,8 @@ 0 - 23 - 128 + 22 + 129 1 0 0 @@ -1964,40 +1980,56 @@ - tos_components + fs 0 0 0 0 - 24 - 129 + 23 + 130 1 0 0 0 - ..\..\..\..\components\fs\kv\tos_kv.c - tos_kv.c + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\nvds\nvds.c + nvds.c 0 0 - - - - nvds - 0 - 0 - 0 - 0 - 25 - 130 + 23 + 131 1 0 0 0 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\nvds\nvds.c - nvds.c + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\partition_mgr\flash_partition_mgr.c + flash_partition_mgr.c + 0 + 0 + + + 23 + 132 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv\ln_kv.c + ln_kv.c + 0 + 0 + + + 23 + 133 + 1 + 0 + 0 + 0 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv_port\ln_kv_port.c + ln_kv_port.c 0 0 diff --git a/board/EVB_LN882x/KEIL/wifi_demo/TencentOS_tiny.uvprojx b/board/EVB_LN882x/KEIL/wifi_demo/TencentOS_tiny.uvprojx index df6822f616945bb5460e71791f71fa9d4f035b8b..273f27bd7ff1b44a3dc8eb1a13dd69ca5d650f43 100644 --- a/board/EVB_LN882x/KEIL/wifi_demo/TencentOS_tiny.uvprojx +++ b/board/EVB_LN882x/KEIL/wifi_demo/TencentOS_tiny.uvprojx @@ -69,9 +69,9 @@ 0 - 0 + 1 0 - + python ..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\user_cmd\before_build.py flash_partition_cfg.json flash_partition_table.h 0 0 @@ -80,9 +80,9 @@ 1 - 0 - .\after_build_ln882x.bat - + 1 + python ..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\user_cmd\after_build_soc.py @L + ..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\bin\mkimage.exe cmd_app ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\boot_ln882x.bin @L.bin @L.asm flashimage.bin flash_partition_cfg.json ver=1.1 0 0 0 @@ -332,7 +332,7 @@ LN882x,ARM_MATH_CM4 - ..\..\BSP\Inc;..\..\TOS-CONFIG;..\..\..\..\kernel\pm\include;..\..\..\..\kernel\core\include;..\..\..\..\arch\arm\arm-v7m\common\include;..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc;..\..\..\..\osal\cmsis_os;..\..\..\..\examples\helloworld;..\hello_world;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\driver_ln882x;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\driver_ln882x\ll\include;..\..\..\..\components\fs\kv\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\cpu\ARM_CM4F\ln88xx;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\kernel;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\cpu\ARM_CM4F\CMSIS_5.3.0;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\wifi_manager;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\net;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\port;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\port\arch;..\..\..\..\examples\wifi_ln882x + ..\..\BSP\Inc;..\..\TOS-CONFIG;..\..\..\..\kernel\pm\include;..\..\..\..\kernel\core\include;..\..\..\..\arch\arm\arm-v7m\common\include;..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc;..\..\..\..\osal\cmsis_os;..\..\..\..\examples\helloworld;..\hello_world;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\driver_ln882x;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\driver_ln882x\ll\include;..\..\..\..\components\fs\kv\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\cpu\ARM_CM4F\ln88xx;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\kernel;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\cpu\ARM_CM4F\CMSIS_5.3.0;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\wifi_manager;..\..\..\..\platform\vendor_bsp\LN\ln882x\include\net;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\port;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\net\lwip-2.0.3\src\port\arch;..\..\..\..\examples\wifi_ln882x;..\wifi_demo;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv_port;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\nvds;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\partition_mgr;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\driver_ln882x\ll\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\include;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Common;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Controller\AP;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Controller\AP-STA;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Controller\ModeIF;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Controller\STA;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Controller\STA\ProtIF;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\AP-STA;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\AP-STA\M802_11e;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\AP-STA\M802_11i;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\AP-STA\M802_11n;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\AP-STA\ProtIF;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\AP-STA\M802_11e;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\AP;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\AP\M802_11e;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\AP\M802_11i;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\AP\M802_11n;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\AP\M802_1x;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\AP\ProtIF;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\STA;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\STA\M802_11e;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\STA\M802_11i;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\STA\M802_11n;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\STA\M802_1x;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\STA\ProtIF;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Core\ModeIF;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Edge\Host;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Edge\IF;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Edge\MACHW;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Edge\RF\ART2000;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Edge\PHY\PHYHW\LN;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Edge\PHY\PHYProt\P802_11n;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Edge\TEMP_CAL;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Edge\RF_HW;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Edge\RF_IMG_CAL\hw_img_cal;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Edge\RF_IMG_CAL\image_cal;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\CSL;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Test\MacSwTest;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Utils\MM;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_mac\Utils\QM;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_port;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_if;..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_cfg\include @@ -362,10 +362,10 @@ 0x08000000 0x20000000 - .\firmware_XIP_ln882x.sct + .\ln882x.sct - --no_autoat --keep=main.o(no_init_data) + --no_autoat --keep=*.o(no_init_data) @@ -417,16 +417,6 @@ - - Drivers/Drv - - - drv_adc_measure.c - 1 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\driver_ln882x\drv\drv_adc_measure.c - - - Drivers/HAL @@ -689,6 +679,16 @@ + + cmsis + + + cmsis_os.c + 1 + ..\..\..\..\osal\cmsis_os\cmsis_os.c + + + config @@ -704,16 +704,6 @@ - - cmsis - - - cmsis_os.c - 1 - ..\..\..\..\osal\cmsis_os\cmsis_os.c - - - bsp @@ -722,6 +712,16 @@ 1 ..\..\BSP\Src\mcu_init.c + + serial_hw.c + 1 + ..\..\BSP\Src\serial_hw.c + + + drv_adc_measure.c + 1 + ..\..\BSP\Src\drv_adc_measure.c + @@ -732,11 +732,6 @@ 1 ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\serial\serial.c - - serial_hw.c - 1 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\serial\serial_hw.c - @@ -913,14 +908,14 @@ ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\arm_cortexM4lf_math.lib - wifi_mac.lib + soc_driver.lib 4 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\wifi_mac.lib + ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\soc_driver.lib - wifi_driver.lib + wifi_mac.lib 4 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\wifi_driver.lib + ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\wifi_mac.lib @@ -932,6 +927,11 @@ 1 ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_manager\wifi_manager.c + + wifi_port.c + 1 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\wifi\wifi_port\wifi_port.c + @@ -1222,22 +1222,27 @@ - tos_components + fs - tos_kv.c + nvds.c 1 - ..\..\..\..\components\fs\kv\tos_kv.c + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\nvds\nvds.c - - - - nvds - - nvds.c + flash_partition_mgr.c + 1 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\partition_mgr\flash_partition_mgr.c + + + ln_kv.c + 1 + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv\ln_kv.c + + + ln_kv_port.c 1 - ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\nvds\nvds.c + ..\..\..\..\platform\vendor_bsp\LN\ln882x\src\fs\kv\kv_port\ln_kv_port.c diff --git a/board/EVB_LN882x/KEIL/wifi_demo/after_build_ln882x.bat b/board/EVB_LN882x/KEIL/wifi_demo/after_build_ln882x.bat index cc2c067869bce6aeb41969ea95991bdbc55d9ebc..60675d37f1fb6229a9d0e94ce65d4c58c7401266 100644 --- a/board/EVB_LN882x/KEIL/wifi_demo/after_build_ln882x.bat +++ b/board/EVB_LN882x/KEIL/wifi_demo/after_build_ln882x.bat @@ -1,8 +1,4 @@ - -python ..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\user_cmd\after_build_soc.py firmware_XIP - -..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\bin\mkimage.exe ln882x flashimage ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\boot_ram_ln882x.bin firmware_XIP.bin flashimage.bin release=1 crp_enable=0 app_version=10 hw_version=0 - -..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\bin\fpu_patch.exe .\firmware_XIP.asm .\flashimage.bin +python ..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\user_cmd\after_build_soc.py @L +..\..\..\..\platform\vendor_bsp\LN\ln882x\tools\bin\mkimage.exe cmd_app ..\..\..\..\platform\vendor_bsp\LN\ln882x\lib\boot_ln882x.bin @L.bin @L.asm flashimage.bin flash_partition_cfg.json ver=1.1 diff --git a/board/EVB_LN882x/KEIL/wifi_demo/flash_partition_cfg.json b/board/EVB_LN882x/KEIL/wifi_demo/flash_partition_cfg.json new file mode 100644 index 0000000000000000000000000000000000000000..91fec5375be9f0c1e687ff9525f4c3fd7d124452 --- /dev/null +++ b/board/EVB_LN882x/KEIL/wifi_demo/flash_partition_cfg.json @@ -0,0 +1,22 @@ +{ + "Warning1":"警告,系统定义用户不可修改!!!", + "vendor_define": + [ + {"partition_type": "BOOT", "start_addr": "0x00000000", "size_KB": 36 }, + {"partition_type": "PART_TAB", "start_addr": "0x00009000", "size_KB": 4 } + ], + + + "Warning2":"以下数据,用户根据SOC flash容量以及具体需求修改,仅可以修改start_addr值和size值,且必须4KB对齐!!!", + "user_define": + [ + {"partition_type": "KV", "start_addr": "0x0000A000", "size_KB": 8 }, + {"partition_type": "SIMU_EEPROM", "start_addr": "0x0000C000", "size_KB": 8 }, + {"partition_type": "APP", "start_addr": "0x0000E000", "size_KB": 800 }, + {"partition_type": "OTA", "start_addr": "0x000D6000", "size_KB": 800 }, + {"partition_type": "NVDS", "start_addr": "0x0019E000", "size_KB": 12 }, + {"partition_type": "USER", "start_addr": "0x001A1000", "size_KB": 12 } + ] +} + + diff --git a/board/EVB_LN882x/KEIL/wifi_demo/flash_partition_table.h b/board/EVB_LN882x/KEIL/wifi_demo/flash_partition_table.h index e068e5bfed174a79bb1f7fa841d5196c0de7bbce..08788e3cd33106dc76b6e0e27e56e1f1fdac627c 100644 --- a/board/EVB_LN882x/KEIL/wifi_demo/flash_partition_table.h +++ b/board/EVB_LN882x/KEIL/wifi_demo/flash_partition_table.h @@ -1,32 +1,56 @@ -#ifndef __FLASH_PARTITION_TABLE_H__ -#define __FLASH_PARTITION_TABLE_H__ +#ifndef __FLASH_PARTITION_TABLE__ +#define __FLASH_PARTITION_TABLE__ -//#define RETENTION_MEM_BASE 0x20028000 -//#define RETENTION_MEM_SIZE 0x2000 -#ifndef FLASH_BASE -#define FLASH_BASE (0x10000000) +//flash partition map,it's generated by the script based on the json file + +#define BOOT_SPACE_OFFSET (0x00000000) +#define BOOT_SPACE_SIZE (1024*36) + +#define PART_TAB_SPACE_OFFSET (0x00009000) +#define PART_TAB_SPACE_SIZE (1024*4) +#if (PART_TAB_SPACE_OFFSET < (BOOT_SPACE_OFFSET + BOOT_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" +#endif + +#define KV_SPACE_OFFSET (0x0000A000) +#define KV_SPACE_SIZE (1024*8) +#if (KV_SPACE_OFFSET < (PART_TAB_SPACE_OFFSET + PART_TAB_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" +#endif + +#define SIMU_EEPROM_SPACE_OFFSET (0x0000C000) +#define SIMU_EEPROM_SPACE_SIZE (1024*8) +#if (SIMU_EEPROM_SPACE_OFFSET < (KV_SPACE_OFFSET + KV_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" #endif -#ifndef FLASH_SIZE -#define FLASH_SIZE (0x00200000) +#define APP_SPACE_OFFSET (0x0000E000) +#define APP_SPACE_SIZE (1024*800) +#if (APP_SPACE_OFFSET < (SIMU_EEPROM_SPACE_OFFSET + SIMU_EEPROM_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" #endif -#ifndef PRIMARY_PARTITION_OFFSET -#define PRIMARY_PARTITION_OFFSET (0x0000F000) +#define OTA_SPACE_OFFSET (0x000D6000) +#define OTA_SPACE_SIZE (1024*800) +#if (OTA_SPACE_OFFSET < (APP_SPACE_OFFSET + APP_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" #endif -#define PRIMARY_PATTITION_START 0x0000F000 -#define PRIMARY_PATTITION_SIZE 0xE1000 -//#define USERAPP_SRAM_BASE 0x1FFF0000 -#define BACKUP_PATTITION_START 0x000F0000 -#define BACKUP_PATTITION_SIZE 0xE1000 -#define USERDATA_PATTITION_START 0x001D1000 -#define USERDATA_PATTITION_SIZE 0x23000 - -//memory offset check -#if ((PRIMARY_PATTITION_START < PRIMARY_PARTITION_OFFSET) || (BACKUP_PATTITION_START < PRIMARY_PATTITION_START) || (USERDATA_PATTITION_START < BACKUP_PATTITION_START) || (PRIMARY_PATTITION_START + PRIMARY_PATTITION_SIZE > BACKUP_PATTITION_START) || (BACKUP_PATTITION_START + BACKUP_PATTITION_SIZE > USERDATA_PATTITION_START) || (USERDATA_PATTITION_START + USERDATA_PATTITION_SIZE > FLASH_SIZE)) - #error "flash partition define error!" +#define NVDS_SPACE_OFFSET (0x0019E000) +#define NVDS_SPACE_SIZE (1024*12) +#if (NVDS_SPACE_OFFSET < (OTA_SPACE_OFFSET + OTA_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" #endif -#endif /* __FLASH_PARTITION_TABLE_H__ */ +#define USER_SPACE_OFFSET (0x001A1000) +#define USER_SPACE_SIZE (1024*12) +#if (USER_SPACE_OFFSET < (NVDS_SPACE_OFFSET + NVDS_SPACE_SIZE)) + #error "flash partition overlap,please check !!!" +#endif + + +#define IMAGE_HEADER_SIZE (0x100) + +#endif /* __FLASH_PARTITION_TABLE__ */ + diff --git a/board/EVB_LN882x/KEIL/wifi_demo/firmware_XIP_ln882x.sct b/board/EVB_LN882x/KEIL/wifi_demo/ln882x.sct similarity index 59% rename from board/EVB_LN882x/KEIL/wifi_demo/firmware_XIP_ln882x.sct rename to board/EVB_LN882x/KEIL/wifi_demo/ln882x.sct index 50c5ed54a8fbe7c3a6368808b01626c5749c6815..26dc840bfa1c7850081bad4ed3086b3fbee26d7d 100644 --- a/board/EVB_LN882x/KEIL/wifi_demo/firmware_XIP_ln882x.sct +++ b/board/EVB_LN882x/KEIL/wifi_demo/ln882x.sct @@ -1,9 +1,9 @@ #! armcc -E -#include ".\flash_partition_table.h" +#include "flash_partition_table.h" #include ".\..\..\..\..\platform\vendor_bsp\LN\ln882x\include\cpu\ARM_CM4F\ln88xx\mem_map_ln882x.h" -LR_FLASH FLASH_BASE+PRIMARY_PARTITION_OFFSET PRIMARY_PATTITION_SIZE +LR_FLASH CACHE_FLASH_BASE+APP_SPACE_OFFSET+IMAGE_HEADER_SIZE APP_SPACE_SIZE {; load region size_region ISR_VECTOR RAM_BASE ALIGN 0x100 @@ -11,7 +11,7 @@ LR_FLASH FLASH_BASE+PRIMARY_PARTITION_OFFSET PRIMARY_PATTITION_SIZE startup_*.o (RESET, +First) } - ER_FLASH FLASH_BASE+PRIMARY_PARTITION_OFFSET + ImageLength(ISR_VECTOR) PRIMARY_PATTITION_SIZE + ER_FLASH CACHE_FLASH_BASE+APP_SPACE_OFFSET+IMAGE_HEADER_SIZE + ImageLength(ISR_VECTOR) APP_SPACE_SIZE {; load address = execution address *(InRoot$$Sections) .ANY (+RO) @@ -24,15 +24,15 @@ LR_FLASH FLASH_BASE+PRIMARY_PARTITION_OFFSET PRIMARY_PATTITION_SIZE ll_cache.o(+RO) ll_dma.o(+RO) ll_syscon.o(+RO) - ll_sleep.o(+RO) - ll_rtc.o(+RO) + ;ll_sleep.o(+RO) + ;ll_rtc.o(+RO) cache.o(+RO) qspi.o(+RO) flash.o(+RO) hal_dma.o(+RO) hal_syscon.o(+RO) - hal_sleep.o(+RO) - hal_rtc.o(+RO) + ;hal_sleep.o(+RO) + ;hal_rtc.o(+RO) ;port.o(XIR) ;optional item @@ -49,16 +49,32 @@ LR_FLASH FLASH_BASE+PRIMARY_PARTITION_OFFSET PRIMARY_PATTITION_SIZE startup_ln*(+RW +ZI) } - ER_DATA +0 + ER_DATA_IN_B0 +0 RAM_BLOCK0_SIZE-ImageLength(ISR_VECTOR)-ImageLength(ER_CODE)-ImageLength(ER_STACK) { - *(.ARM.__at_0x1FFFFFFC) - .ANY (+RW +ZI) + memp.o(+RW +ZI) + imem.o(+RW +ZI) + imem_if.o(+RW +ZI) + ;cglobals_sta.o(+RW +ZI) + ;event_manager.o(+RW +ZI) + iconfig.o(+RW +ZI) + common.o(+RW +ZI) + } + + HEAP_SPACE0 +0 EMPTY RAM_BLOCK1_BASE-ImageLimit(ER_DATA_IN_B0) + {; Heap region + } + + ER_DATA_IN_B1 RAM_BLOCK1_BASE RAM_BLOCK1_SIZE + { + *(wlan_mem_pkt) + *(wlan_mem_dscr) + .ANY (+RW +ZI) } ;IQ Data area cannot be used by ER_DATA region ;ScatterAssert(ImageLimit(ER_DATA) < (0x20020300)) - HEAP_SPACE +0 EMPTY RETENTION_MEM_BASE-ImageLimit(ER_DATA) + HEAP_SPACE1 +0 EMPTY RETENTION_MEM_BASE-ImageLimit(ER_DATA_IN_B1) {; Heap region } diff --git a/board/EVB_LN882x/startup/startup_ln882x.S b/board/EVB_LN882x/startup/startup_ln882x.S new file mode 100644 index 0000000000000000000000000000000000000000..a112c2dd4f0cfdcf3b7888bce6f479e88aa2a5dc --- /dev/null +++ b/board/EVB_LN882x/startup/startup_ln882x.S @@ -0,0 +1,290 @@ +;/**************************************************************************//** +; * @file startup_ARMCM4.s +; * @brief CMSIS Core Device Startup File for +; * ARMCM4 Device Series +; * @version V5.00 +; * @date 02. March 2016 +; ******************************************************************************/ +;/* +; * Copyright (c) 2009-2016 ARM Limited. All rights reserved. +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Licensed under the Apache License, Version 2.0 (the License); you may +; * not use this file except in compliance with the License. +; * You may obtain a copy of the License at +; * +; * www.apache.org/licenses/LICENSE-2.0 +; * +; * Unless required by applicable law or agreed to in writing, software +; * distributed under the License is distributed on an AS IS BASIS, WITHOUT +; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; * See the License for the specific language governing permissions and +; * limitations under the License. +; */ + +;/* +;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------ +;*/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00001800 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000000 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ;(0x00)Top of Stack + DCD Reset_Handler ;(0x04)IRQ -15 Reset Handler + DCD NMI_Handler ;(0x08)IRQ -14 NMI Handler + DCD HardFault_Handler ;(0x0C)IRQ -13 Hard Fault Handler + DCD MemManage_Handler ;(0x10)IRQ -12 MPU Fault Handler + DCD BusFault_Handler ;(0x14)IRQ -11 Bus Fault Handler + DCD UsageFault_Handler ;(0x18)IRQ -10 Usage Fault Handler + DCD 0 ;(0x1C)IRQ -9 Reserved + DCD 0 ;(0x20)IRQ -8 Reserved + DCD 0 ;(0x24)IRQ -7 Reserved + DCD 0 ;(0x28)IRQ -6 Reserved + DCD SVC_Handler ;(0x2C)IRQ -5 SVCall Handler + DCD DebugMon_Handler ;(0x30)IRQ -4 Debug Monitor Handler + DCD 0 ;(0x34)IRQ -3 Reserved + DCD PendSV_Handler ;(0x38)IRQ -2 PendSV Handler + DCD SysTick_Handler ;(0x3C)IRQ -1 SysTick Handler + + ; External Interrupts + DCD WDT_IRQHandler ;(0x40)IRQ0 + DCD EXTERNAL_IRQHandler ;(0x44)IRQ1 + DCD RTC_IRQHandler ;(0x48)IRQ2 + DCD SLEEP_IRQHandler ;(0x4C)IRQ3 + DCD MAC_IRQHandler ;(0x50)IRQ4 + DCD DMA_IRQHandler ;(0x54)IRQ5 + DCD QSPI_IRQHandler ;(0x58)IRQ6 + DCD SDIO_FUN1_IRQHandler ;(0x5C)IRQ7 + DCD SDIO_FUN2_IRQHandler ;(0x60)IRQ8 + DCD SDIO_FUN3_IRQHandler ;(0x64)IRQ9 + DCD SDIO_FUN4_IRQHandler ;(0x68)IRQ10 + DCD SDIO_FUN5_IRQHandler ;(0x6C)IRQ11 + DCD SDIO_FUN6_IRQHandler ;(0x70)IRQ12 + DCD SDIO_FUN7_IRQHandler ;(0x74)IRQ13 + DCD SDIO_ASYNC_HOST_IRQHandler ;(0x78)IRQ14 + DCD SDIO_M2S_IRQHandler ;(0x7C)IRQ15 + DCD CM4_INTR0_IRQHandler ;(0x80)IRQ16 + DCD CM4_INTR1_IRQHandler ;(0x84)IRQ17 + DCD CM4_INTR2_IRQHandler ;(0x88)IRQ18 + DCD CM4_INTR3_IRQHandler ;(0x8C)IRQ19 + DCD CM4_INTR4_IRQHandler ;(0x90)IRQ20 + DCD CM4_INTR5_IRQHandler ;(0x94)IRQ21 + DCD ADC_IRQHandler ;(0x98)IRQ22 + DCD TIMER_IRQHandler ;(0x9C)IRQ23 + DCD I2C0_IRQHandler ;(0xA0)IRQ24 + DCD I2C1_IRQHandler ;(0xA4)IRQ25 + DCD SPI0_IRQHandler ;(0xA8)IRQ26 + DCD SPI2_IRQHandler ;(0xAC)IRQ27 + DCD UART0_IRQHandler ;(0xB0)IRQ28 + DCD UART1_IRQHandler ;(0xB4)IRQ29 + DCD SPI1_IRQHandler ;(0xB8)IRQ30 + DCD GPIO_IRQHandler ;(0xBC)IRQ31 + DCD I2S_IRQHandler ;(0xC0)IRQ32 + DCD PAOTD_IRQHandler ;(0xC4)IRQ33 + DCD PWM_IRQHandler ;(0xC8)IRQ34 + DCD TRNG_IRQHandler ;(0xCC)IRQ35 + DCD AES_IRQHandler ;(0xD0)IRQ36 +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + LDR R4, =SystemInit + BLX R4 + LDR R4, =__main + BX R4 + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WDT_IRQHandler [WEAK] + EXPORT EXTERNAL_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT SLEEP_IRQHandler [WEAK] + EXPORT MAC_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT QSPI_IRQHandler [WEAK] + EXPORT SDIO_FUN1_IRQHandler [WEAK] + EXPORT SDIO_FUN2_IRQHandler [WEAK] + EXPORT SDIO_FUN3_IRQHandler [WEAK] + EXPORT SDIO_FUN4_IRQHandler [WEAK] + EXPORT SDIO_FUN5_IRQHandler [WEAK] + EXPORT SDIO_FUN6_IRQHandler [WEAK] + EXPORT SDIO_FUN7_IRQHandler [WEAK] + EXPORT SDIO_ASYNC_HOST_IRQHandler [WEAK] + EXPORT SDIO_M2S_IRQHandler [WEAK] + EXPORT CM4_INTR0_IRQHandler [WEAK] + EXPORT CM4_INTR1_IRQHandler [WEAK] + EXPORT CM4_INTR2_IRQHandler [WEAK] + EXPORT CM4_INTR3_IRQHandler [WEAK] + EXPORT CM4_INTR4_IRQHandler [WEAK] + EXPORT CM4_INTR5_IRQHandler [WEAK] + EXPORT ADC_IRQHandler [WEAK] + EXPORT TIMER_IRQHandler [WEAK] + EXPORT I2C0_IRQHandler [WEAK] + EXPORT I2C1_IRQHandler [WEAK] + EXPORT SPI0_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT GPIO_IRQHandler [WEAK] + EXPORT I2S_IRQHandler [WEAK] + EXPORT PAOTD_IRQHandler [WEAK] + EXPORT PWM_IRQHandler [WEAK] + EXPORT TRNG_IRQHandler [WEAK] + EXPORT AES_IRQHandler [WEAK] +WDT_IRQHandler +EXTERNAL_IRQHandler +RTC_IRQHandler +SLEEP_IRQHandler +MAC_IRQHandler +DMA_IRQHandler +QSPI_IRQHandler +SDIO_FUN1_IRQHandler +SDIO_FUN2_IRQHandler +SDIO_FUN3_IRQHandler +SDIO_FUN4_IRQHandler +SDIO_FUN5_IRQHandler +SDIO_FUN6_IRQHandler +SDIO_FUN7_IRQHandler +SDIO_ASYNC_HOST_IRQHandler +SDIO_M2S_IRQHandler +CM4_INTR0_IRQHandler +CM4_INTR1_IRQHandler +CM4_INTR2_IRQHandler +CM4_INTR3_IRQHandler +CM4_INTR4_IRQHandler +CM4_INTR5_IRQHandler +ADC_IRQHandler +TIMER_IRQHandler +I2C0_IRQHandler +I2C1_IRQHandler +SPI0_IRQHandler +SPI2_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +SPI1_IRQHandler +GPIO_IRQHandler +I2S_IRQHandler +PAOTD_IRQHandler +PWM_IRQHandler +TRNG_IRQHandler +AES_IRQHandler + B . + ENDP + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + + END diff --git a/components/security/mbedtls/3rdparty/src/aes.c b/components/security/mbedtls/3rdparty/src/aes.c index 5c939bba479ab7989d2c8f8e2048ed484afe76b6..59728c9b51a293e77aeaa00be415a2f3d145720c 100644 --- a/components/security/mbedtls/3rdparty/src/aes.c +++ b/components/security/mbedtls/3rdparty/src/aes.c @@ -397,8 +397,8 @@ static int aes_init_done = 0; static void aes_gen_tables( void ) { int i, x, y, z; - int pow[256]; - int log[256]; + static int pow[256]; + static int log[256]; /* * compute pow and log tables over GF(2^8) diff --git a/components/security/mbedtls/3rdparty/src/ctr_drbg.c b/components/security/mbedtls/3rdparty/src/ctr_drbg.c index d0e5ba862d2c32aed6aae232e9cda5efeeab566b..56b4cd8bde53dd9b6018c89ce49e2bd7a38279f6 100644 --- a/components/security/mbedtls/3rdparty/src/ctr_drbg.c +++ b/components/security/mbedtls/3rdparty/src/ctr_drbg.c @@ -321,7 +321,7 @@ void mbedtls_ctr_drbg_update( mbedtls_ctr_drbg_context *ctx, int mbedtls_ctr_drbg_reseed( mbedtls_ctr_drbg_context *ctx, const unsigned char *additional, size_t len ) { - unsigned char seed[MBEDTLS_CTR_DRBG_MAX_SEED_INPUT]; + static unsigned char seed[MBEDTLS_CTR_DRBG_MAX_SEED_INPUT]; size_t seedlen = 0; int ret; diff --git a/examples/wifi_ln882x/tcp_client_echo.c b/examples/wifi_ln882x/tcp_client_echo.c index 743fc4bc4b2aaa8b4a32e88d96a334675933c1a0..199299a3c7d442322cbd2f3e1c887d340eb7c794 100644 --- a/examples/wifi_ln882x/tcp_client_echo.c +++ b/examples/wifi_ln882x/tcp_client_echo.c @@ -151,7 +151,7 @@ void tcp_client_echo_task_entry(void *arg) void tcp_client_echo_task_creat(uint8_t * ser_ip, uint32_t port) { - target_ser_t ser = {0}; + static target_ser_t ser = {0}; ser.ip = ser_ip; ser.port = port; diff --git a/examples/wifi_ln882x/tcp_server_echo.c b/examples/wifi_ln882x/tcp_server_echo.c index 92fc0385ca700a1d3034cb3cac51e1dffe22dd09..25ec0396b5cd75ab3cd5c4e35a2afdba9134bfb4 100644 --- a/examples/wifi_ln882x/tcp_server_echo.c +++ b/examples/wifi_ln882x/tcp_server_echo.c @@ -156,7 +156,8 @@ void tcp_server_echo_task_entry(void *arg) void tcp_server_echo_task_creat(uint32_t port) { - uint32_t server_port = port; + static uint32_t server_port; + server_port = port; osThreadCreate(osThread(tcp_server_echo_task_entry), &server_port); } diff --git a/examples/wifi_ln882x/wifi_app_ln882x.c b/examples/wifi_ln882x/wifi_app_ln882x.c index bb6f53aff489fe14303bf78b9a9f730c4eaadd26..ca1221c687c6ae577adc8d2991b065e6dff7793a 100644 --- a/examples/wifi_ln882x/wifi_app_ln882x.c +++ b/examples/wifi_ln882x/wifi_app_ln882x.c @@ -8,7 +8,7 @@ #include "netif/ethernetif.h" #include "wifi_manager/wifi_manager.h" #include "lwip/tcpip.h" -#include "drv/drv_adc_measure.h" +#include "drv_adc_measure.h" #include "utils/system_parameter.h" #include "hal/hal_adc.h" @@ -165,7 +165,7 @@ void application_entry(void *arg) ART_ASSERT(1); } - reg_wifi_msg_callbcak(wifi_manager_get_handle(), WIFI_MSG_ID_STA_DHCP_GOT_IP,wifi_event_sta_got_ip_cb); + reg_wifi_msg_callbcak(WIFI_MSG_ID_STA_DHCP_GOT_IP,wifi_event_sta_got_ip_cb); wifi_mode_enum_t wifi_mode = WIFI_MODE_STATION; @@ -198,7 +198,7 @@ void application_entry(void *arg) }; tcp_server_echo_task_creat(8087); - tcp_client_echo_task_creat((uint8_t *)"39.108.190.129", 8000);//ͨè(IP:120.76.100.197) 10002˿ +// tcp_client_echo_task_creat((uint8_t *)"39.108.190.129", 8000);//ͨè(IP:120.76.100.197) 10002˿ while(1) { diff --git a/platform/vendor_bsp/LN/ln882x/include/atcmd/at_cmd_wifi.h b/platform/vendor_bsp/LN/ln882x/include/atcmd/at_cmd_wifi.h index 0630a412c8ceb456b21750cdb504c08e48f8b915..5d3ad84e7826421c44c72b1e9cc79cc2cd71f69b 100644 --- a/platform/vendor_bsp/LN/ln882x/include/atcmd/at_cmd_wifi.h +++ b/platform/vendor_bsp/LN/ln882x/include/atcmd/at_cmd_wifi.h @@ -37,9 +37,10 @@ char at_station_disconnect(void); char at_station_set_scan_list_display_option(char *str); char at_station_scan(char *str); char at_station_scan_no_filter(char *str); -#if WIFI_SNIFFER_TEST +#if WIFI_TRACK char at_notify_aplist(void); char at_station_aplx(char *str); +char at_station_aplist(char *str); #endif //softap @@ -135,13 +136,8 @@ char at_get_cip_mux(char *str); char at_set_netconn_disconnect(char *str); char at_set_ip_close(char *str); char at_get_cip_status(char *str); - #if WIFI_SWITCH -void wifi_sniffer_deinit(void); -void wifi_sniffer_reinit(void); char at_wifi_switch(char *str); -bool wifi_init(void); -bool wifi_deinit(void); #endif char at_iperf(char *str); diff --git a/platform/vendor_bsp/LN/ln882x/include/cpu/ARM_CM4F/ln88xx/interrupt.h b/platform/vendor_bsp/LN/ln882x/include/cpu/ARM_CM4F/ln88xx/interrupt.h index a51831d10775c1366ced0b8d9cfbfedd14cd7357..95e8a16337ea4e4c4e77ba84084df408e4272386 100644 --- a/platform/vendor_bsp/LN/ln882x/include/cpu/ARM_CM4F/ln88xx/interrupt.h +++ b/platform/vendor_bsp/LN/ln882x/include/cpu/ARM_CM4F/ln88xx/interrupt.h @@ -45,39 +45,39 @@ WEAK void SysTick_Handler(void); // // Controller specific peripheral interrupts // -WEAK void WDT_IRQHandler(); -WEAK void EXTERNAL_IRQHandler(); -WEAK void RTC_IRQHandler(); -WEAK void SLEEP_IRQHandler(); -WEAK void MAC_IRQHandler(); -WEAK void DMAC_IRQHandler(); -WEAK void QSPI_IRQHandler(); -WEAK void SDIOCFUN1_IRQHandler(); -WEAK void SDIOCFUN2_IRQHandler(); -WEAK void SDIOCFUN3_IRQHandler(); -WEAK void SDIOCFUN4_IRQHandler(); -WEAK void SDIOCFUN5_IRQHandler(); -WEAK void SDIOCFUN6_IRQHandler(); -WEAK void SDIOCFUN7_IRQHandler(); -WEAK void SDIOC_ASYNC_HOST_IRQHandler(); -WEAK void SDIOC_M2S_IRQHandler(); -WEAK void CM4_INTR0_IRQHandler(); -WEAK void CM4_INTR1_IRQHandler(); -WEAK void CM4_INTR2_IRQHandler(); -WEAK void CM4_INTR3_IRQHandler(); -WEAK void CM4_INTR4_IRQHandler(); -WEAK void CM4_INTR5_IRQHandler(); -WEAK void ADCC_IRQHandler(); -WEAK void TIMER_IRQHandler(); -WEAK void I2C0_IRQHandler(); -WEAK void I2C1_IRQHandler(); -WEAK void SPIM_IRQHandler(); -WEAK void SPIS_IRQHandler(); -WEAK void UART0_IRQHandler(); -WEAK void UART1_IRQHandler(); -WEAK void SPIM2_IRQHandler(); -WEAK void GPIO_IRQHandler(); -WEAK void I2S_IRQHandler(); -WEAK void PAOTD_IRQHandler(); +WEAK void WDT_IRQHandler(void); +WEAK void EXTERNAL_IRQHandler(void); +WEAK void RTC_IRQHandler(void); +WEAK void SLEEP_IRQHandler(void); +WEAK void MAC_IRQHandler(void); +WEAK void DMAC_IRQHandler(void); +WEAK void QSPI_IRQHandler(void); +WEAK void SDIOCFUN1_IRQHandler(void); +WEAK void SDIOCFUN2_IRQHandler(void); +WEAK void SDIOCFUN3_IRQHandler(void); +WEAK void SDIOCFUN4_IRQHandler(void); +WEAK void SDIOCFUN5_IRQHandler(void); +WEAK void SDIOCFUN6_IRQHandler(void); +WEAK void SDIOCFUN7_IRQHandler(void); +WEAK void SDIOC_ASYNC_HOST_IRQHandler(void); +WEAK void SDIOC_M2S_IRQHandler(void); +WEAK void CM4_INTR0_IRQHandler(void); +WEAK void CM4_INTR1_IRQHandler(void); +WEAK void CM4_INTR2_IRQHandler(void); +WEAK void CM4_INTR3_IRQHandler(void); +WEAK void CM4_INTR4_IRQHandler(void); +WEAK void CM4_INTR5_IRQHandler(void); +WEAK void ADCC_IRQHandler(void); +WEAK void TIMER_IRQHandler(void); +WEAK void I2C0_IRQHandler(void); +WEAK void I2C1_IRQHandler(void); +WEAK void SPIM_IRQHandler(void); +WEAK void SPIS_IRQHandler(void); +WEAK void UART0_IRQHandler(void); +WEAK void UART1_IRQHandler(void); +WEAK void SPIM2_IRQHandler(void); +WEAK void GPIO_IRQHandler(void); +WEAK void I2S_IRQHandler(void); +WEAK void PAOTD_IRQHandler(void); #endif /* _INTERRUPT_H_ */ diff --git a/platform/vendor_bsp/LN/ln882x/include/cpu/ARM_CM4F/ln88xx/ln_compiler.h b/platform/vendor_bsp/LN/ln882x/include/cpu/ARM_CM4F/ln88xx/ln_compiler.h new file mode 100644 index 0000000000000000000000000000000000000000..2a5940c91ee9bbfddc84a7dc1f5c8730ef1df394 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/include/cpu/ARM_CM4F/ln88xx/ln_compiler.h @@ -0,0 +1,125 @@ +#ifndef __LN_COMPILER_H__ +#define __LN_COMPILER_H__ + +/*------------------ RealView Compiler -----------------*/ +#if defined(__CC_ARM) + +#define ARMCC_V5 + +#define __ASM__ __asm +#define __VOLATILE__ volatile + +#define __INLINE__ inline +#define __STATIC__ static + +#if (__ARMCC_VERSION < 5060750) + #define __STATIC_INLINE__ static +#else + #define __STATIC_INLINE__ static inline +#endif + +#define likely(x) __builtin_expect(!!(x), 1) +#define unlikely(x) __builtin_expect(!!(x), 0) +#define __UNUSED__ __attribute__((__unused__)) +#define __USED__ __attribute__((__used__)) +#define __PACKED__ __attribute__((packed)) +#define __ALIGNED__(x) __attribute__((aligned(x))) +#define __PURE__ __attribute__((__pure__)) +#define __CONST__ __attribute__((__const__)) +#define __NO_RETURN__ __attribute__((__noreturn__)) +#define __WEAK__ __attribute__((weak)) + +/*------------------ ARM Compiler V6 -------------------*/ +#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + +#define ARMCC_V6 + +#define __ASM__ __asm +#define __VOLATILE__ volatile + +#define __INLINE__ inline +#define __STATIC__ static +#define __STATIC_INLINE__ static inline + +#define likely(x) __builtin_expect(!!(x), 1) +#define unlikely(x) __builtin_expect(!!(x), 0) +#define __UNUSED__ __attribute__((__unused__)) +#define __USED__ __attribute__((__used__)) +#define __PACKED__ __attribute__((packed)) +#define __ALIGNED__(x) __attribute__((aligned(x))) +#define __PURE__ __attribute__((__pure__)) +#define __CONST__ __attribute__((__const__)) +#define __NO_RETURN__ __attribute__((__noreturn__)) +#define __NAKED__ __attribute__((naked)) +#define __WEAK__ __attribute__((weak)) + +/*------------------ ICC Compiler ----------------------*/ +#elif defined(__ICCARM__) || defined(__ICC430__) // __IAR_SYSTEMS_ICC__ + +#define __ASM__ __asm +#define __VOLATILE__ volatile + +#define __INLINE__ inline +#define __STATIC__ static +#define __STATIC_INLINE__ static inline + +#define likely(x) (x) +#define unlikely(x) (x) +#define __UNUSED__ +#define __USED__ +#define __PACKED__ +#define __ALIGNED__(x) +#define __PURE__ +#define __CONST__ +#define __NO_RETURN__ +#define __NAKED__ +#define __WEAK__ __weak + +/*------------------ ICC Compiler for STM8/AVR ----------------------*/ +#elif defined(__IAR_SYSTEMS_ICC__) + +#define __ASM__ __asm +#define __VOLATILE__ volatile + +#define __INLINE__ inline +#define __STATIC__ static +#define __STATIC_INLINE__ static inline + +#define likely(x) (x) +#define unlikely(x) (x) +#define __UNUSED__ +#define __USED__ +#define __PACKED__ +#define __ALIGNED__(x) +#define __PURE__ +#define __CONST__ +#define __NO_RETURN__ +#define __NAKED__ +#define __WEAK__ __weak + +/*------------------ GNU Compiler ----------------------*/ +#elif defined(__GNUC__) + +#define __ASM__ __asm +#define __VOLATILE__ volatile + +#define __INLINE__ inline +#define __STATIC__ static +#define __STATIC_INLINE__ static inline + +#define likely(x) __builtin_expect(!!(x), 1) +#define unlikely(x) __builtin_expect(!!(x), 0) +#define __UNUSED__ __attribute__((__unused__)) +#define __USED__ __attribute__((__used__)) +#define __PACKED__ __attribute__((packed)) +#define __ALIGNED__(x) __attribute__((aligned(x))) +#define __PURE__ __attribute__((__pure__)) +#define __CONST__ __attribute__((__const__)) +#define __NO_RETURN__ __attribute__((__noreturn__)) +#define __NAKED__ __attribute__((naked)) +#define __WEAK__ __attribute__((weak)) + +#endif + +#endif /* __LN_COMPILER_H__ */ + diff --git a/platform/vendor_bsp/LN/ln882x/include/cpu/ARM_CM4F/ln88xx/ln_types.h b/platform/vendor_bsp/LN/ln882x/include/cpu/ARM_CM4F/ln88xx/ln_types.h new file mode 100644 index 0000000000000000000000000000000000000000..34eda1264eb47e2a41b64ffe40d340ac46ba8723 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/include/cpu/ARM_CM4F/ln88xx/ln_types.h @@ -0,0 +1,13 @@ +#ifndef __LN_TYPES_H__ +#define __LN_TYPES_H__ + +#include +#include + + +#define LN_TRUE (1u) +#define LN_FALSE (0u) + + +#endif /* __LN_TYPES_H__ */ + diff --git a/platform/vendor_bsp/LN/ln882x/include/cpu/ARM_CM4F/ln88xx/mem_map_ln882x.h b/platform/vendor_bsp/LN/ln882x/include/cpu/ARM_CM4F/ln88xx/mem_map_ln882x.h index 4cea7a53e6a2a5d938b623694bf78979fc50ef43..bcef9a64c5e03e3a498d540329bb79a048dbab2f 100644 --- a/platform/vendor_bsp/LN/ln882x/include/cpu/ARM_CM4F/ln88xx/mem_map_ln882x.h +++ b/platform/vendor_bsp/LN/ln882x/include/cpu/ARM_CM4F/ln88xx/mem_map_ln882x.h @@ -64,32 +64,15 @@ #define BOOTROM_RW_SECTION_LIMIT (SIZE_32KB) //BOOTRAM -#define BOOTRAM_BASE (RAM_BASE) -#define BOOTRAM_LIMIT (SIZE_32KB) - +#define BOOTRAM_BASE (RAM_BASE) +#define BOOTRAM_LIMIT (SIZE_4KB*9) //FLASH -#define FLASH_BASE_OFFSET (0) - -#define BOOTRAM_HEADER_ON_FLASH_OFFSET (FLASH_BASE_OFFSET) -#define BOOTRAM_ON_FLASH_OFFSET (BOOTRAM_HEADER_ON_FLASH_OFFSET + BOOTRAM_HEADER_SIZE) -#define BOOTRAM_PARTITION_SIZE (8 * SIZE_4KB) -#define BOOTRAM_SIZE (BOOTRAM_PARTITION_SIZE - BOOTRAM_HEADER_SIZE) - -#define PARTITION_TABLE0_OFFSET (BOOTRAM_HEADER_ON_FLASH_OFFSET + BOOTRAM_PARTITION_SIZE) -#define PARTITION_TABLE0_SIZE (SIZE_4KB) +#define CACHE_FLASH_BASE (0x10000000) -#define PARTITION_TABLE1_OFFSET (PARTITION_TABLE0_OFFSET + PARTITION_TABLE0_SIZE) -#define PARTITION_TABLE1_SIZE (SIZE_4KB) -#define PARTITION_TABLE_FLAG_OFFSET (PARTITION_TABLE1_OFFSET + PARTITION_TABLE1_SIZE) -#define PARTITION_TABLE_FLAG_SIZE (SIZE_4KB) -#define SYSTEM_PARAMETER_OFFSET (PARTITION_TABLE_FLAG_OFFSET + PARTITION_TABLE_FLAG_SIZE) -#define SYSTEM_PARAMETER_SIZE (2 * SIZE_4KB) -#define USR_NVDS_PARAM_OFFSET (SIZE_2MB-(3*SIZE_4KB)) -#define USR_NVDS_PARAM_SIZE (3 * SIZE_4KB) +#endif /* __MEMORY_MAP_LN882X_H__ */ -#endif /* __MEMORY_MAP_LN882X_H__ */ diff --git a/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/hal/hal_sleep.h b/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/hal/hal_sleep.h index 19825e7266d95845df1a4d896b445e2c1c7a2428..fe50357528aea358e38b1d070c3ec7cab993c393 100644 --- a/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/hal/hal_sleep.h +++ b/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/hal/hal_sleep.h @@ -6,49 +6,60 @@ #endif // __cplusplus #include "types.h" -#include "hal/hal_gpio.h" +#include "hal/syscon_types.h" #include "ll/ll_sleep.h" -typedef enum { - SLEEP_TIMER_WAKEUP = (1 << 0), - MAC_WAKEUP = (1 << 1), - EXT_INT_WAKEUP = (1 << 2), - RTC_WAKEUP = (1 << 3), -}hal_sleep_wakeup_src_enum_t; - -typedef void (* reinitialize_phy_cb_t)(void); -typedef bool (* wifi_is_slept_cb_t)(void); -typedef struct -{ - GPIO_Num gpio; - SYSTEM_EXT_INT_Triggle_Type triggle_type; -}ext_irq_cfg_t ; -typedef struct { - sleep_mode_enum_t sleep_mode; - uint32_t wakeup_src;//bit[0]--SLEEP_IRQn; bit[1]--MAC_IRQn;bit[2]--EXTERNAL_IRQn;bit[3]--RTC_IRQn - ext_irq_cfg_t ext_irq_cfg; -}hal_sleep_config_t; - -typedef struct +typedef enum { - bool flag; - hal_sleep_config_t sleep_config; - uint32_t nvic_int_en[2]; - uint64_t compensation; - uint32_t msec; - wifi_is_slept_cb_t wifi_is_slept_cb; - reinitialize_phy_cb_t reinit_phy_cb; - bool inited; -}hal_sleep_ctrl_t ; - -void hal_sleep_init(hal_sleep_config_t *sleep_config); -void hal_sleep_deinit(void); -void hal_sleep_set_config(hal_sleep_config_t *sleep_config); + ACTIVE = 0, + LIGHT_SLEEP, + DEEP_SLEEP, + RETENTION_SLEEP, + FROZEN_SLEEP +}sleep_mode_enum_t; + +typedef enum { + MOD_QSPI = SW_CLKGATE_QSPI, + MOD_ADDC = SW_CLKGATE_ADCC, + MOD_I2S = SW_CLKGATE_I2S, + MOD_GPIO = SW_CLKGATE_GPIO, + MOD_SPIM = SW_CLKGATE_SPIM, + MOD_SPIS = SW_CLKGATE_SPIS, + MOD_I2C0 = SW_CLKGATE_I2C0, + MOD_I2C1 = SW_CLKGATE_I2C1, + MOD_UART0 = SW_CLKGATE_UART0, + MOD_UART1 = SW_CLKGATE_UART1, + MOD_SPIM2 = SW_CLKGATE_SPIM2, + MOD_WDT = SW_CLKGATE_WDT, + MOD_TIMER0 = SW_CLKGATE_TIMER, + MOD_TIMER1 = SW_CLKGATE_TIMER_1, + MOD_TIMER2 = SW_CLKGATE_TIMER_2, + MOD_TIMER3 = SW_CLKGATE_TIMER_3, + MOD_TIMER4 = SW_CLKGATE_TIMER_4, + MOD_DGBH = SW_CLKGATE_DBGH, + MOD_SDIO = SW_CLKGATE_SDIO, + MOD_MAC = SW_CLKGATE_MAC, + MOD_CACHE = SW_CLKGATE_CACHE, + MOD_DMA = SW_CLKGATE_DMA, + MOD_RFREG = SW_CLKGATE_RFREG, + MOD_PWM = SW_CLKGATE_PWM, + MOD_EF = SW_CLKGATE_EF, + MOD_TRNG = SW_CLKGATE_TRNG, + MOD_AES = SW_CLKGATE_AES, + MOD_EXT_INT, + MOD_MAX, +}hal_peripheral_module_t; + +typedef bool (*sleep_condition_cb_t)(void); +typedef void (*sleep_processing_cb_t)(void); + +int hal_sleep_set_mode(sleep_mode_enum_t sleep_mode); sleep_mode_enum_t hal_sleep_get_mode(void); +int hal_sleep_register(hal_peripheral_module_t peripheral_module, sleep_condition_cb_t sleep_condition, sleep_processing_cb_t pre_sleep_proc, sleep_processing_cb_t post_sleep_proc); +int hal_sleep_unregister(hal_peripheral_module_t peripheral_module); void hal_pre_sleep_processing(uint32_t *ticks); uint32_t hal_post_sleep_processing(uint32_t ticks); -void hal_sleep_register_callback(reinitialize_phy_cb_t reinit_phy_cb, wifi_is_slept_cb_t wifi_is_slept_cb); -void hal_sleep_wakeup_source_set(hal_sleep_wakeup_src_enum_t wakeup_src); + #ifdef __cplusplus } #endif // __cplusplus diff --git a/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/hal/hal_syscon.h b/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/hal/hal_syscon.h index c9ac2be9b2e937c94c120fcc104ecd3dbcc3f833..e3a24b61904e8caa0267603f38fded82c01150b0 100644 --- a/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/hal/hal_syscon.h +++ b/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/hal/hal_syscon.h @@ -316,7 +316,26 @@ void HAL_SYSCON_RCO32K_Bitsel_Set(uint8_t bitsel); void HAL_SYSCON_RCO32K_Cbit_Set(uint8_t cbit); void HAL_SYSCON_Xtal40MCap_Set(uint8_t cap); void HAL_SYSCON_PmuCfg(void); - +void HAL_SYSCON_AWO_phy_pd_en(uint8_t en); +void HAL_SYSCON_AWO_phy_po_en(uint8_t en); +void HAL_SYSCON_AWO_ldo18_po_en(uint8_t en); +void HAL_SYSCON_AWO_sram_pd_en(uint8_t en); +void HAL_SYSCON_AWO_sram_po_en(uint8_t en); +void HAL_SYSCON_AWO_pmu_ret_en(uint8_t en); +void HAL_SYSCON_AWO_pmu_unret_en(uint8_t en); +void HAL_SYSCON_AWO_pdcmp_po(uint8_t po); +void HAL_SYSCON_AWO_cpucore_retreg_po(uint8_t po); +void HAL_SYSCON_AWO_idle_reg_set(uint32_t val); +void HAL_SYSCON_AWO_lp_mode_awo(uint8_t lp_mode_awo); +void HAL_SYSCON_AWO_clk_sel_set(uint32_t val); +void HAL_SYSCON_CMP_rfreg_len(uint16_t rfreg_len); +void HAL_SYSCON_CMP_rfreg_base_addr(uint16_t rfreg_base_addr); +void HAL_SYSCON_CMP_rfreg_action_set(uint32_t val); +uint8_t HAL_SYSCON_CMP_save_done_get(void); +void HAL_SYSCON_AWO_sw_pwr_ctrl_set(uint32_t value); +uint8_t HAL_SYSCON_AWO_pmu_fsm_get(void); +uint8_t HAL_SYSCON_CMP_restore_done_get(void); +void HAL_SYSCON_CMP_sw_clkg_set(uint32_t value); #ifdef __cplusplus } #endif diff --git a/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/hal/hal_timer.h b/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/hal/hal_timer.h index c2acff5a053d8118fe3491b2ef147d6a401dd0db..738d158cbddde9e481f7a0a660f6217e23fdd51a 100644 --- a/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/hal/hal_timer.h +++ b/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/hal/hal_timer.h @@ -7,6 +7,11 @@ extern "C" { #endif /* __cplusplus */ + +/** @brief Timer expire callback function definition*/ +typedef void (*timer_cb_func_t)(void); + + /** * @brief There are totally 4 hardware timers. * @@ -39,7 +44,7 @@ typedef enum typedef enum { TIMER_MODE_FREERUNNING = 0, /**< TIMER_MODE_FREE_RUNNING: Use this mode if you want a single timed interrupt. */ - TIMER_MODE_USERDEFINED /**< TIMER_MODE_USER_DEFINED: Use this mode if you want a fixed, timed interrupt. */ + TIMER_MODE_USERDEFINED /**< TIMER_MODE_USER_DEFINED: Use this mode if you want a periodic timer, timed interrupt. */ } TIMER_Mode; @@ -62,6 +67,7 @@ typedef struct TIMER_Mask mask; /**< mask: mask or unmask the timer interrupt */ TIMER_Mode mode; /**< mode: select the running mode of timer, free-running or user define mode */ uint32_t user_freq; /**< user_freq: user-defined timer clock frequency fx, which must meet the request: 321.5KHz <= fx <= 80MHz */ + timer_cb_func_t cb_func;/**< cb_func: call back function when timer is expired */ } TIMER_InitTypeDef; @@ -189,6 +195,7 @@ void HAL_TIMER_LoadCount2_Set(TIMER_Index index, uint32_t loadCount2); */ uint32_t HAL_TIMER_LoadCount2_Get(TIMER_Index index); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/hal/syscon_types.h b/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/hal/syscon_types.h index 61107f616cecc02e546c3685de8da4714512337f..a88b0be6b94271987b8c572c3a8def1b642afe07 100644 --- a/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/hal/syscon_types.h +++ b/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/hal/syscon_types.h @@ -175,7 +175,6 @@ typedef enum typedef enum { - SW_CLKGATE_PATCH = 0, SW_CLKGATE_QSPI = 1, SW_CLKGATE_ADCC = 2, SW_CLKGATE_I2S = 3, @@ -198,7 +197,11 @@ typedef enum SW_CLKGATE_MAC = 20, SW_CLKGATE_CACHE = 21, SW_CLKGATE_DMA = 22, - SW_CLKGATE_RFREG = 23 + SW_CLKGATE_RFREG = 23, + SW_CLKGATE_PWM = 24, + SW_CLKGATE_EF = 25, + SW_CLKGATE_TRNG = 26, + SW_CLKGATE_AES = 27, } SYSCON_ClkGate_Peripheral; typedef enum @@ -339,8 +342,7 @@ typedef enum (clkgate) == SW_CLKGATE_CORE_MAC40M || \ (clkgate) == SW_CLKGATE_CORE_MAC80M) -#define IS_CLKGATE_PERIPHERAL(clkgate) ((clkgate) == SW_CLKGATE_PATCH || \ - (clkgate) == SW_CLKGATE_QSPI || \ +#define IS_CLKGATE_PERIPHERAL(clkgate) ((clkgate) == SW_CLKGATE_QSPI || \ (clkgate) == SW_CLKGATE_ADCC || \ (clkgate) == SW_CLKGATE_I2S || \ (clkgate) == SW_CLKGATE_GPIO || \ @@ -362,7 +364,11 @@ typedef enum (clkgate) == SW_CLKGATE_MAC || \ (clkgate) == SW_CLKGATE_CACHE || \ (clkgate) == SW_CLKGATE_DMA || \ - (clkgate) == SW_CLKGATE_RFREG) + (clkgate) == SW_CLKGATE_RFREG || \ + (clkgate) == SW_CLKGATE_PWM || \ + (clkgate) == SW_CLKGATE_EF || \ + (clkgate) == SW_CLKGATE_TRNG || \ + (clkgate) == SW_CLKGATE_AES) #define IS_SPIM_INDEX(index) ((index) == SPIM_IO_EN0 || (index) == SPIM_IO_EN1 || (index) == SPIM_IO_EN2) diff --git a/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/ll/ll_sleep.h b/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/ll/ll_sleep.h index c88b67714786076a8f4bb4049380f8e12ac0616e..40bdaa93a68e976a047c576462220ed6b35f5db6 100644 --- a/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/ll/ll_sleep.h +++ b/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/ll/ll_sleep.h @@ -1,23 +1,12 @@ #ifndef __LL_SLEEP_H__ #define __LL_SLEEP_H__ -#include "types.h" #ifdef __cplusplus extern "C" { #endif // __cplusplus -typedef enum -{ - ACTIVE = 0, - LIGHT_SLEEP, - DEEP_SLEEP, - RETENTION_SLEEP, - FROZEN_SLEEP -}sleep_mode_enum_t; - -void ll_pre_sleep_processing(sleep_mode_enum_t sleep_mode, uint8_t sram_powerdown); -void ll_post_sleep_processing(sleep_mode_enum_t sleep_mode); +void ll_sleep_mac_tsf_clk_switch(uint8_t ps_clk_switch); #ifdef __cplusplus } diff --git a/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/ll/ll_syscon.h b/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/ll/ll_syscon.h index ead9033e1d84af0aa558a32daa8e57b8f75a42ac..ed258e7c97227fad2783d93aeef4edbbc432a832 100644 --- a/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/ll/ll_syscon.h +++ b/platform/vendor_bsp/LN/ln882x/include/driver_ln882x/ll/ll_syscon.h @@ -332,7 +332,26 @@ void LL_SYSCON_EXT_INTR_Set_Triggle_Condition(SYSTEM_EXT_INT_Wakeup_Index ext_in uint8_t LL_SYSCON_EXT_INTR_Stat(void); uint8_t LL_SYSCON_EXT_INTR_Stat_Raw(void); void LL_SYSCON_EXT_INTR_Clear(void); - +void LL_SYSCON_AWO_phy_pd_en(uint8_t en); +void LL_SYSCON_AWO_phy_po_en(uint8_t en); +void LL_SYSCON_AWO_ldo18_po_en(uint8_t en); +void LL_SYSCON_AWO_sram_pd_en(uint8_t en); +void LL_SYSCON_AWO_sram_po_en(uint8_t en); +void LL_SYSCON_AWO_pmu_ret_en(uint8_t en); +void LL_SYSCON_AWO_pmu_unret_en(uint8_t en); +void LL_SYSCON_AWO_pdcmp_po(uint8_t po); +void LL_SYSCON_AWO_cpucore_retreg_po(uint8_t po); +void LL_SYSCON_AWO_idle_reg_set(uint32_t val); +void LL_SYSCON_AWO_lp_mode_awo(uint8_t lp_mode_awo); +void LL_SYSCON_AWO_clk_sel_set(uint32_t val); +void LL_SYSCON_CMP_rfreg_len(uint16_t rfreg_len); +void LL_SYSCON_CMP_rfreg_base_addr(uint16_t rfreg_base_addr); +void LL_SYSCON_CMP_rfreg_action_set(uint32_t val); +uint8_t LL_SYSCON_CMP_save_done_get(void); +void LL_SYSCON_AWO_sw_pwr_ctrl_set(uint32_t val); +uint8_t LL_SYSCON_AWO_pmu_fsm_get(void); +uint8_t LL_SYSCON_CMP_restore_done_get(void); +void LL_SYSCON_CMP_sw_clkg_set(uint32_t value); #ifdef __cplusplus } #endif diff --git a/platform/vendor_bsp/LN/ln882x/include/kernel/FreeRTOS_Adapter/freertos_queue.h b/platform/vendor_bsp/LN/ln882x/include/kernel/FreeRTOS_Adapter/freertos_queue.h index f91a3ad48b499a6e84d2ff84cdfcf5bc63bd5592..ba8c3c99631c537c7f57a1aae02b9e5037afeb62 100644 --- a/platform/vendor_bsp/LN/ln882x/include/kernel/FreeRTOS_Adapter/freertos_queue.h +++ b/platform/vendor_bsp/LN/ln882x/include/kernel/FreeRTOS_Adapter/freertos_queue.h @@ -25,7 +25,6 @@ OS_Status OS_QueueCreate(OS_Queue_t *queue, uint32_t queueLen, uint32_t itemSize OS_Status OS_QueueDelete(OS_Queue_t *queue); OS_Status OS_QueueSend(OS_Queue_t *queue, const void *item, OS_Time_t waitMS); OS_Status OS_QueueReceive(OS_Queue_t *queue, void *item, OS_Time_t waitMS); -OS_Status OS_QueueFlush(OS_Queue_t *queue); /** diff --git a/platform/vendor_bsp/LN/ln882x/include/serial/serial.h b/platform/vendor_bsp/LN/ln882x/include/serial/serial.h index 80898fb92ec1937741f9d1f5ac6935252f23ce58..d29cf1273878ff464353379b9bc2e4a3c9023b95 100644 --- a/platform/vendor_bsp/LN/ln882x/include/serial/serial.h +++ b/platform/vendor_bsp/LN/ln882x/include/serial/serial.h @@ -2,7 +2,7 @@ #define __SERIAL_H__ #include "proj_config.h" -#include "serial/serial_p.h" +#include "serial_hw.h" #include "utils/fifo/fifobuf.h" /** Human-readable serial error descriptions */ diff --git a/platform/vendor_bsp/LN/ln882x/include/utils/crc32.h b/platform/vendor_bsp/LN/ln882x/include/utils/crc32.h index 75f028d21d26eb1e5990dde917bcb86da5f30958..d94660362e62f19cb506139b8bbb6ee6c9f073c6 100644 --- a/platform/vendor_bsp/LN/ln882x/include/utils/crc32.h +++ b/platform/vendor_bsp/LN/ln882x/include/utils/crc32.h @@ -1,13 +1,20 @@ -#ifndef CRC32_H -#define CRC32_H +#ifndef ___CRC32_H__ +#define ___CRC32_H__ #include -uint32_t GetCrc32(uint8_t *ptr, int len); +typedef struct { + uint32_t crc; +} crc32_ctx_t; +void ln_crc32_init(crc32_ctx_t *ctx); +void ln_crc32_update(crc32_ctx_t *ctx, uint8_t *data, uint32_t len); +uint32_t ln_crc32_final(crc32_ctx_t *ctx); +uint32_t ln_crc32_signle_cal(uint8_t *ptr, int len); -#endif + +#endif /* ___CRC32_H__ */ diff --git a/platform/vendor_bsp/LN/ln882x/include/utils/system_parameter.h b/platform/vendor_bsp/LN/ln882x/include/utils/system_parameter.h index 65bc583af6d508e759f0a3f890fed23452f34796..2821589f459a453b3ee45bccfc76ae272d209772 100644 --- a/platform/vendor_bsp/LN/ln882x/include/utils/system_parameter.h +++ b/platform/vendor_bsp/LN/ln882x/include/utils/system_parameter.h @@ -15,7 +15,6 @@ typedef struct { #define NETIF_HOSTNAME_LEN_MAX (8) -#define WIFI_PSK_INFO_LIST_SIZE (2) int system_parameter_init(void); int system_parameter_deinit(void); @@ -35,11 +34,10 @@ uint8_t system_parameter_get_dhcp_enable(void); //ap_hostname config int system_parameter_set_hostname(wifi_interface_enum_t if_index, uint8_t *hostname); int system_parameter_get_hostname(wifi_interface_enum_t if_index, uint8_t *hostname); -////PSK info -int system_parameter_set_psk_info( wifi_psk_info_t *psk_info); -int system_parameter_get_psk_info(wifi_psk_info_t *psk_info); + int system_parameter_set_wifi_mode(wifi_mode_enum_t wifi_mode); wifi_mode_enum_t system_parameter_get_wifi_mode(void); + int system_parameter_set_dhcpd_config(server_config_t *server_config); int system_parameter_get_dhcpd_config(server_config_t *server_config); diff --git a/platform/vendor_bsp/LN/ln882x/include/wifi/wifi.h b/platform/vendor_bsp/LN/ln882x/include/wifi/wifi.h index 79a33b7f1ee57939a0ec73ac1f55ad176aafff59..8c2fabd5e434225d2ddaca797d02b55b939bb620 100644 --- a/platform/vendor_bsp/LN/ln882x/include/wifi/wifi.h +++ b/platform/vendor_bsp/LN/ln882x/include/wifi/wifi.h @@ -183,7 +183,8 @@ void wifi_do_temp_cal_period(uint16_t adc_ch0_val); //STA bool wifi_station_scan(wifi_scan_config_t *config); -int wifi_station_get_scan_ap_list(list_t **ap_list, bool sort); +int wifi_station_get_scan_list_size(void); +int wifi_station_get_scan_list(list_t *out_list, int out_list_size, bool sort); void wifi_station_connect(wifi_sta_config_t *sta_config); bool wifi_station_disconnect(void); int8_t wifi_station_get_rssi(void); diff --git a/platform/vendor_bsp/LN/ln882x/include/wifi_manager/wifi_manager.h b/platform/vendor_bsp/LN/ln882x/include/wifi_manager/wifi_manager.h index 375682801df95a7efa1812e9bb487bf305b59276..2f8e17a384acae8c4accf5e3b3f0e2f120af3733 100644 --- a/platform/vendor_bsp/LN/ln882x/include/wifi_manager/wifi_manager.h +++ b/platform/vendor_bsp/LN/ln882x/include/wifi_manager/wifi_manager.h @@ -102,12 +102,10 @@ typedef struct wifi_manager_ctrl wifi_manager_ctrl_t; //wifi get mode api (需要wifi_cfg 提供) -bool reg_wifi_msg_callbcak(wifi_manager_ctrl_t *manager_ctrl, wifi_msg_id_enum_t msg_id, wifi_msg_callback_fun callback_fun); +bool reg_wifi_msg_callbcak(wifi_msg_id_enum_t msg_id, wifi_msg_callback_fun callback_fun); void notify_wifi_manager_task(wifi_msg_t * pWifiMsg); -bool wifi_manager_init(wifi_manager_ctrl_t *manager_ctrl); -bool wifi_manager_deinit(wifi_manager_ctrl_t *manager_ctrl); -wifi_manager_ctrl_t *wifi_manager_get_handle(void); - +bool wifi_manager_init(void); +bool wifi_manager_deinit(void); #ifdef __cplusplus } diff --git a/platform/vendor_bsp/LN/ln882x/lib/boot_ln882x.bin b/platform/vendor_bsp/LN/ln882x/lib/boot_ln882x.bin new file mode 100644 index 0000000000000000000000000000000000000000..c88d035069670c5d0c4bf332e8719a2eea9c92f2 Binary files /dev/null and b/platform/vendor_bsp/LN/ln882x/lib/boot_ln882x.bin differ diff --git a/platform/vendor_bsp/LN/ln882x/lib/boot_ram_ln882x.bin b/platform/vendor_bsp/LN/ln882x/lib/boot_ram_ln882x.bin deleted file mode 100644 index a9d195ca2d654c268d3600beb087b408e1ea4910..0000000000000000000000000000000000000000 Binary files a/platform/vendor_bsp/LN/ln882x/lib/boot_ram_ln882x.bin and /dev/null differ diff --git a/platform/vendor_bsp/LN/ln882x/lib/wifi_driver.lib b/platform/vendor_bsp/LN/ln882x/lib/soc_driver.lib similarity index 56% rename from platform/vendor_bsp/LN/ln882x/lib/wifi_driver.lib rename to platform/vendor_bsp/LN/ln882x/lib/soc_driver.lib index 9f689b91f941d9885b13a5290fbba5bfe0cf48a0..0ce28005995caecac1ce7965deded7c4a3d4c0dd 100644 Binary files a/platform/vendor_bsp/LN/ln882x/lib/wifi_driver.lib and b/platform/vendor_bsp/LN/ln882x/lib/soc_driver.lib differ diff --git a/platform/vendor_bsp/LN/ln882x/lib/wifi_mac.lib b/platform/vendor_bsp/LN/ln882x/lib/wifi_mac.lib index 27097e2f63a86f6a04011ab9e866c8fa7b64d9ab..dfe2a7ad0d075c87439971330a483475ff72ff0b 100644 Binary files a/platform/vendor_bsp/LN/ln882x/lib/wifi_mac.lib and b/platform/vendor_bsp/LN/ln882x/lib/wifi_mac.lib differ diff --git a/platform/vendor_bsp/LN/ln882x/src/atcmd/at_cmd_wifi.c b/platform/vendor_bsp/LN/ln882x/src/atcmd/at_cmd_wifi.c index ee68e987da2133fcc4a23faf3d09a8053bd3ab15..e351f25d9bdd6de521cb570d08e4b56213af7212 100644 --- a/platform/vendor_bsp/LN/ln882x/src/atcmd/at_cmd_wifi.c +++ b/platform/vendor_bsp/LN/ln882x/src/atcmd/at_cmd_wifi.c @@ -17,7 +17,7 @@ #include "ping/ping.h" #include "iperf/iperf.h" #include "dhcpd/dhcpd.h" -#include "nvds/nvds.h" +#include "nvds.h" #include "hal/hal_efuse.h" #define RET_OK_STR ("\r\nOK\r\n") @@ -673,7 +673,7 @@ char at_station_scan_no_filter(char *str) scan_list_dsiplay_option_t *display_option = &g_scan_list_dsiplay_option; int ap_count = 0; ap_info_t *item_iterator = NULL; - list_t *ap_list = NULL, *iterator; + list_t scan_list, *iterator, *prev; #if WIFI_TRACK at_printf("\r\n+CWLAPLN\r\n"); @@ -681,21 +681,40 @@ char at_station_scan_no_filter(char *str) at_printf("\r\n+CWLAP\r\n"); #endif - ap_count = wifi_station_get_scan_ap_list(&ap_list, (display_option->sort_enable == 1)? true : false); - if(ap_list && ap_count > 0) - { + ap_count = wifi_station_get_scan_list_size(); + if(ap_count > 0){ + //prepare scan_list space + list_init(&scan_list); + for(i = 0; i < ap_count; i++){ + item_iterator = OS_Malloc(sizeof(ap_info_t)); + if(item_iterator){ + list_add(&scan_list, &(item_iterator->list)); + } + } + + //get ap list + wifi_station_get_scan_list(&scan_list, ap_count, (display_option->sort_enable == 1)? true : false); at_printf("Auth{ 0: Open, 1: WEP, 2: WPA_PSK, 3:WPA2_PSK, 4:WPA_WPA2_PSK, 5: WPA2_ENTERPRISE}\r\n"); at_printf ("\r\nAP_num SSID RSSI Channel Auth_mode BSSID IMODE WPS Freq_offset FreqCal\r\n"); - - for (iterator = ap_list->next, i = 1; iterator != ap_list; iterator = iterator->next, i++) { + for (iterator = scan_list.next, i = 0; iterator != &scan_list; iterator = iterator->next, i++) { item_iterator = list_entry(iterator, ap_info_t, list); at_printf ("%6d %-31s %4d %7d %9d "MACSTR" %2X %3d %11d %7d\r\n", - i, item_iterator->ssid, item_iterator->rssi, item_iterator->channel, item_iterator->authmode, + (i + 1), item_iterator->ssid, item_iterator->rssi, item_iterator->channel, item_iterator->authmode, MAC2STR(item_iterator->bssid), item_iterator->imode, item_iterator->wps, item_iterator->freq_offset, item_iterator->freqcal_val ); } + //free scan_list space + for (iterator = scan_list.next; iterator != &scan_list; iterator = iterator->next) { + prev = iterator->prev; + item_iterator = list_entry(iterator, ap_info_t, list); + list_rm(iterator); + if(item_iterator){ + OS_Free(item_iterator); + } + iterator = prev; + } } at_printf(RET_OK_STR); @@ -710,53 +729,119 @@ char at_notify_aplist(void) int i=0; int ap_count = 0; ap_info_t *item_iterator = NULL; - list_t *ap_list = NULL, *iterator; + list_t scan_list, *iterator, *prev; + + ap_count = wifi_station_get_scan_list_size(); + if(ap_count > 0){ + //prepare scan_list space + list_init(&scan_list); + for(i = 0; i < ap_count; i++){ + item_iterator = OS_Malloc(sizeof(ap_info_t)); + if(item_iterator){ + list_add(&scan_list, &(item_iterator->list)); + } + } - ap_count = wifi_station_get_scan_ap_list(&ap_list, true); - at_printf("\r\nAT+ScanAp\r\n",ap_count); - for (iterator = ap_list->next, i = 0; (i < 10) && (iterator != ap_list); iterator = iterator->next, i++) - { - item_iterator = list_entry(iterator, ap_info_t, list); - at_printf(MACSTR";%d;%s\r\n", MAC2STR(item_iterator->bssid), item_iterator->rssi, item_iterator->ssid); + //get ap list + wifi_station_get_scan_list(&scan_list, ap_count, true); + at_printf("\r\nAT+ScanAp\r\n",ap_count); + for (iterator = scan_list.next, i = 0; (i < 10) && iterator != &scan_list; iterator = iterator->next, i++) { + item_iterator = list_entry(iterator, ap_info_t, list); + at_printf(MACSTR";%d;%s\r\n", MAC2STR(item_iterator->bssid), item_iterator->rssi, item_iterator->ssid); + } + + //free scan_list space + for (iterator = scan_list.next; iterator != &scan_list; iterator = iterator->next) { + prev = iterator->prev; + item_iterator = list_entry(iterator, ap_info_t, list); + list_rm(iterator); + if(item_iterator){ + OS_Free(item_iterator); + } + iterator = prev; + } } return AT_OK; } char at_station_aplx(char *str) { - int ap_count = 0; + int ap_count = 0, i; ap_info_t *item_iterator = NULL; - list_t *ap_list = NULL, *iterator; + list_t scan_list, *iterator, *prev; + + ap_count = wifi_station_get_scan_list_size(); + if(ap_count > 0){ + //prepare scan_list space + list_init(&scan_list); + for(i = 0; i < ap_count; i++){ + item_iterator = OS_Malloc(sizeof(ap_info_t)); + if(item_iterator){ + list_add(&scan_list, &(item_iterator->list)); + } + } - ap_count = wifi_station_get_scan_ap_list(&ap_list, true); - for (iterator = ap_list->next; iterator != ap_list; iterator = iterator->next) - { - item_iterator = list_entry(iterator, ap_info_t, list); - at_printf("\r\n+CWLAP:%d,\"%s\",%d,\""MACSTR"\",%d", + //get ap list + wifi_station_get_scan_list(&scan_list, ap_count, true); + for (iterator = scan_list.next; iterator != &scan_list; iterator = iterator->next) { + item_iterator = list_entry(iterator, ap_info_t, list); + at_printf("\r\n+CWLAP:%d,\"%s\",%d,\""MACSTR"\",%d", item_iterator->authmode, item_iterator->ssid, item_iterator->rssi, MAC2STR(item_iterator->bssid), item_iterator->channel); + } + + //free scan_list space + for (iterator = scan_list.next; iterator != &scan_list; iterator = iterator->next) { + prev = iterator->prev; + item_iterator = list_entry(iterator, ap_info_t, list); + list_rm(iterator); + if(item_iterator){ + OS_Free(item_iterator); + } + iterator = prev; + } } at_printf("\r\n\r\nOK\r\n",ap_count); return AT_OK; } char at_station_aplist(char *str) { - int ap_count = 0; + int ap_count = 0, i; ap_info_t *item_iterator = NULL; - list_t *ap_list = NULL, *iterator; + list_t scan_list, *iterator, *prev; + + ap_count = wifi_station_get_scan_list_size(); + if(ap_count > 0){ + //prepare scan_list space + list_init(&scan_list); + for(i = 0; i < ap_count; i++){ + item_iterator = OS_Malloc(sizeof(ap_info_t)); + if(item_iterator){ + list_add(&scan_list, &(item_iterator->list)); + } + } - ap_count = wifi_station_get_scan_ap_list(&ap_list, true); - if(ap_count > 0) - { + //get ap list + wifi_station_get_scan_list(&scan_list, ap_count, true); at_printf("\r\n+CWLAPLST: %d, ",ap_count); - for (iterator = ap_list->next; iterator != ap_list; iterator = iterator->next) - { + for (iterator = scan_list.next; iterator != &scan_list; iterator = iterator->next) { item_iterator = list_entry(iterator, ap_info_t, list); at_printf(MACSTR" @ %d, ", MAC2STR(item_iterator->bssid), item_iterator->rssi); } + + //free scan_list space + for (iterator = scan_list.next; iterator != &scan_list; iterator = iterator->next) { + prev = iterator->prev; + item_iterator = list_entry(iterator, ap_info_t, list); + list_rm(iterator); + if(item_iterator){ + OS_Free(item_iterator); + } + iterator = prev; + } at_printf("\r\n\r\nOK\r\n"); } else @@ -3032,23 +3117,25 @@ char at_iperf(char *str) #if WIFI_SWITCH uint8_t wifi_en=1; +extern void wifi_track_init(void); +extern void wifi_track_reinit(void); +extern void wifi_track_deinit(void); +extern bool wifi_manager_init(void); +extern bool wifi_manager_deinit(void); char at_wifi_switch(char *str) { uint8_t en; en=atoi(str); - LOG(LOG_LVL_ERROR, "%s() 000 en=%d\r\n",__func__,en); if(en&&wifi_en==0){ wifi_en=1; - LOG(LOG_LVL_ERROR, "%s() 111 \r\n",__func__); - wifi_init(); - wifi_manager_init(wifi_manager_get_handle()); - wifi_sniffer_reinit();//wifi_sniffer_init();//wifi_start(&init_param); + //wifi_init(); + //wifi_manager_init(); + wifi_track_reinit(); }else if(0==en&&wifi_en){ wifi_en=0; - LOG(LOG_LVL_ERROR, "%s() 222 \r\n",__func__); - wifi_sniffer_deinit();//call wifi_stop() - wifi_manager_deinit(wifi_manager_get_handle()); - wifi_deinit(); + wifi_track_deinit();//call wifi_stop() + //wifi_manager_deinit(); + //wifi_deinit(); } at_printf("OK\r\n"); diff --git a/platform/vendor_bsp/LN/ln882x/src/console/console.c b/platform/vendor_bsp/LN/ln882x/src/console/console.c index 37fc48b3960c9ddc1d7f9702b24386147620c91b..17e4228421c260a9e10fd1be68927ff43b3d1338 100644 --- a/platform/vendor_bsp/LN/ln882x/src/console/console.c +++ b/platform/vendor_bsp/LN/ln882x/src/console/console.c @@ -8,9 +8,8 @@ #include "ln88xx.h" #include "utils/debug/log.h" #include "utils/debug/art_assert.h" -#if WIFI_TRACK -#include "ll/ll_gpio.h" -#endif +#include "hal/hal_gpio.h" + #if (CHIP_ROLE == CHIP_MCU) #include "serial/serial.h" @@ -132,17 +131,21 @@ void serial_rx_callbcak(void){ OS_SemaphoreRelease(&g_rx_sem); } #endif /*__CONFIG_OS_KERNEL */ -#if WIFI_TRACK -extern GPIO_Value get_gpio_value(GPIO_Num gpio); -#endif + void console_init(void) { CONSOLE_CTRL_T *console = &console_ctrl; Serial_t *fd = NULL; #if WIFI_TRACK + GPIO_InitTypeDef gpio_config = { + .dir = GPIO_INPUT, + .debounce = GPIO_DEBOUNCE_YES, + }; + + HAL_GPIO_Init(GPIOA_8, gpio_config); int bd = 115200; - if(get_gpio_value(GPIOA_8) == GPIO_VALUE_LOW) + if(HAL_GPIO_ReadPin(GPIOA_8) == GPIO_VALUE_LOW) bd = CONSOLE_PORT_BAUDRATE; else bd = 9600; diff --git a/platform/vendor_bsp/LN/ln882x/src/cpu/ARM_CM4F/ln88xx/system_ln88xx.c b/platform/vendor_bsp/LN/ln882x/src/cpu/ARM_CM4F/ln88xx/system_ln88xx.c index 4ef8bb98b87147337fddf83a15c69ea4bc0a2b88..4c7f6b613a51fd4f2cf33f02855b0b662c49c1cc 100644 --- a/platform/vendor_bsp/LN/ln882x/src/cpu/ARM_CM4F/ln88xx/system_ln88xx.c +++ b/platform/vendor_bsp/LN/ln882x/src/cpu/ARM_CM4F/ln88xx/system_ln88xx.c @@ -16,9 +16,6 @@ extern uint32_t __Vectors[]; #define vector_table __Vectors #endif -/* This variable is a placeholder, defined at the junction of two blocks memory(SRAM0 and SRAM1) */ -int placeholder_between_sram0_and_sram1 __attribute__ ((section(".ARM.__at_0x1FFFFFFC"), zero_init)); - /*---------------------------------------------------------------------------- System Core Clock Variable *----------------------------------------------------------------------------*/ diff --git a/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/hal/hal_sdio.c b/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/hal/hal_sdio.c index 6c9ceaf4e821c55e907eb1c78f22e7ef276ec663..729f0c9917db62a6e12fc7d4ae5976ba44ed9372 100644 --- a/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/hal/hal_sdio.c +++ b/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/hal/hal_sdio.c @@ -4,7 +4,7 @@ #include "hal/hal_syscon.h" #include "utils/debug/log.h" -static hal_sdio_ctrl_t g_hal_sdio_ctrl __attribute__((section("wlan_shared_mem"))) = {0,}; +static hal_sdio_ctrl_t g_hal_sdio_ctrl; static hal_sdio_ctrl_t *hal_sdio_ctrl_get_handle(void) { return &g_hal_sdio_ctrl; diff --git a/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/hal/hal_sleep.c b/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/hal/hal_sleep.c index 8f591d62f2e70cf62c36d59c61a393f53a46786f..41e4d00749fe6911ab454a51adb37581a3b23fcf 100644 --- a/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/hal/hal_sleep.c +++ b/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/hal/hal_sleep.c @@ -14,7 +14,30 @@ #define SLEEP_TIMER_EXTRA_COMPENSATION_MSEC (0) #define RTC_TIMER_EXTRA_COMPENSATION_MSEC (0) -hal_sleep_ctrl_t g_sleep_ctrl __attribute__((section("retention_data"))) = {0}; +typedef struct +{ + int irq_num; + sleep_condition_cb_t sleep_condition; + sleep_processing_cb_t pre_sleep; + sleep_processing_cb_t post_sleep; +}hal_sleep_action_t ; + +typedef struct { + sleep_mode_enum_t sleep_mode; + uint32_t peripheral_mod; + hal_sleep_action_t actions[29]; +}hal_sleep_config_t; + +typedef struct +{ + bool flag; + hal_sleep_config_t sleep_config; + uint32_t nvic_int_en[2]; + uint64_t compensation; + uint32_t msec; +}hal_sleep_ctrl_t ; + +hal_sleep_ctrl_t g_sleep_ctrl __attribute__((section("retention_data"))); static hal_sleep_ctrl_t *hal_sleep_get_handle(void) { @@ -24,15 +47,9 @@ static hal_sleep_ctrl_t *hal_sleep_get_handle(void) void EXTERNAL_IRQHandler(void) { HAL_SYSCON_EXT_INTR_Clear(); - hal_sleep_wakeup_source_set(EXT_INT_WAKEUP); } -static void hal_sleep_external_irq_wakeup_init(SYSTEM_EXT_INT_Wakeup_Index ext_int_idx, SYSTEM_EXT_INT_Triggle_Type triggle) -{ - HAL_SYSCON_EXT_INTR_Set_Triggle_Condition(ext_int_idx, triggle); - HAL_SYSCON_EXT_INTR_Enable(ext_int_idx, true); - NVIC_EnableIRQ(EXTERNAL_IRQn); -} -void hal_sleep_rtc_wakeup_init(uint32_t counter_match) + +static int hal_sleep_rtc_init(uint32_t counter_match) { RTC_InitTypeDef rtcConfig; @@ -44,11 +61,13 @@ void hal_sleep_rtc_wakeup_init(uint32_t counter_match) HAL_RTC_Init(rtcConfig); HAL_RTC_Enable(RTC_ENABLE); NVIC_EnableIRQ(RTC_IRQn); + return 0; } -void hal_sleep_rtc_wakeup_deinit(void) +static int hal_sleep_rtc_deinit(void) { HAL_RTC_Enable(RTC_DISABLE); NVIC_DisableIRQ(RTC_IRQn); + return 0; } void RTC_IRQHandler(void) { @@ -59,122 +78,316 @@ void RTC_IRQHandler(void) HAL_RTC_ClearInt(); //disable RTC - hal_sleep_rtc_wakeup_deinit(); - - //set wakeup src - hal_sleep_wakeup_source_set(RTC_WAKEUP); + hal_sleep_rtc_deinit(); } } +void SLEEP_IRQHandler(void) +{ + NVIC_DisableIRQ(SLEEP_IRQn); + //do nothing +} + +#if 0 +#define RAM_RETENTION (1 << 0) +#define RAM_MAC (1 << 1) +#define RAM_CPU (1 << 2) +#endif -void hal_sleep_init(hal_sleep_config_t *sleep_config) +#define PRE_SLEEP_LOOP_COUNT 10 +static void pre_sleep_processing_hardware(sleep_mode_enum_t sleep_mode, uint8_t sram_powerdown) { + int i = 0; hal_sleep_ctrl_t *sleep_ctrl = hal_sleep_get_handle(); + hal_sleep_config_t *sleep_config = &(sleep_ctrl->sleep_config); - if(sleep_ctrl->inited){ - LOG(LOG_LVL_EMERG, "Function hal_sleep_init(*sleep_config) has been called, If you want to reconfigure, please call hal_sleep_deinit() and re-call hal_sleep_init(*sleep_config)\r\n"); + if(sleep_mode < LIGHT_SLEEP || sleep_mode > FROZEN_SLEEP){ return; } - memset(sleep_ctrl, 0, sizeof(hal_sleep_ctrl_t)); - sleep_ctrl->inited = true; - memcpy(&(sleep_ctrl->sleep_config), sleep_config, sizeof(hal_sleep_config_t)); + + if(sleep_mode >= RETENTION_SLEEP){ + HAL_SYSCON_AWO_sram_pd_en(sram_powerdown); + HAL_SYSCON_AWO_sram_po_en(0x07); + HAL_SYSCON_AWO_pmu_ret_en(1); + HAL_SYSCON_AWO_pmu_unret_en(1); + HAL_SYSCON_AWO_pdcmp_po(0); + if(sleep_mode == FROZEN_SLEEP){ + HAL_SYSCON_AWO_cpucore_retreg_po(0);//set 0 to enter frozon mode + HAL_SYSCON_AWO_idle_reg_set(0x52); + }else{ + HAL_SYSCON_AWO_cpucore_retreg_po(1); + HAL_SYSCON_AWO_lp_mode_awo(1); + } + }else{//sleep_mode <= DEEP_SLEEP + HAL_SYSCON_AWO_sram_pd_en(sram_powerdown); + HAL_SYSCON_AWO_pmu_ret_en(0); + HAL_SYSCON_AWO_pmu_unret_en(0); + + // if phy needs power down, then save phy reg to cmp + HAL_SYSCON_CMP_rfreg_len(0x158); + HAL_SYSCON_CMP_rfreg_base_addr(0x0); + HAL_SYSCON_CMP_rfreg_action_set(0x1);//bit 0 is save rf register + while(HAL_SYSCON_CMP_save_done_get() != 1); + } + + if((sleep_mode >= DEEP_SLEEP) && (sleep_mode <= RETENTION_SLEEP)){ + ll_sleep_mac_tsf_clk_switch(1);//switch to 32k and power saving + } + + //set CM4 sleep mode + if(sleep_mode >= DEEP_SLEEP){ + SCB->SCR |= (1<<2); + }else{ + SCB->SCR &= ~(1<<2); + } + if(sleep_mode == LIGHT_SLEEP){ + HAL_SYSCON_AWO_sw_pwr_ctrl_set(0x02); + while(i++ < PRE_SLEEP_LOOP_COUNT){ + __NOP(); + } + while(HAL_SYSCON_AWO_pmu_fsm_get() != 0); + HAL_SYSCON_CMP_sw_clkg_set(sleep_config->peripheral_mod|(1< FROZEN_SLEEP){ + return; + } + + if(sleep_mode <= DEEP_SLEEP){ + if(sleep_mode == LIGHT_SLEEP){ + HAL_SYSCON_AWO_sw_pwr_ctrl_set(0x01); + HAL_SYSCON_CMP_sw_clkg_set(0xFFFFFFFF); + while(HAL_SYSCON_AWO_pmu_fsm_get() != 0); + } + HAL_SYSCON_AWO_pmu_ret_en(0); + HAL_SYSCON_AWO_pmu_unret_en(0); + //restore RF register firstly + HAL_SYSCON_CMP_rfreg_len(0x158); + HAL_SYSCON_CMP_rfreg_base_addr(0x0); + HAL_SYSCON_CMP_rfreg_action_set(0x2);//bit 1 is restore rf register + while(HAL_SYSCON_CMP_restore_done_get() != 1); + } + + if((sleep_mode >= DEEP_SLEEP) && (sleep_mode <= RETENTION_SLEEP)){ + ll_sleep_mac_tsf_clk_switch(0);//switch to 40M + } } -static void hal_sleep_wakeup_source_clear_all(void) +static int hal_sleep_peripheral_module_to_IRQn(hal_peripheral_module_t peripheral_module) { - hal_sleep_ctrl_t *sleep_ctrl = hal_sleep_get_handle(); - hal_sleep_config_t *sleep_config = &(sleep_ctrl->sleep_config); - sleep_config->wakeup_src = 0; + int ret = 0; + + switch(peripheral_module){ + case MOD_QSPI: + ret = QSPI_IRQn; + break; + case MOD_ADDC: + ret = ADC_IRQn; + break; + case MOD_I2S: + ret = I2S_IRQn; + break; + case MOD_GPIO: + ret = GPIO_IRQn; + break; + case MOD_SPIM: + ret = SPI0_IRQn; + break; + case MOD_SPIS: + ret = SPI2_IRQn; + break; + case MOD_I2C0: + ret = I2C0_IRQn; + break; + case MOD_I2C1: + ret = I2C1_IRQn; + break; + case MOD_UART0: + ret = UART0_IRQn; + break; + case MOD_UART1: + ret = UART1_IRQn; + break; + case MOD_SPIM2: + ret = SPI1_IRQn; + break; + case MOD_WDT: + ret = WDT_IRQn; + break; + case MOD_TIMER0: + ret = TIMER_IRQn; + break; + case MOD_TIMER1: + ret = TIMER_IRQn; + break; + case MOD_TIMER2: + ret = TIMER_IRQn; + break; + case MOD_TIMER3: + ret = TIMER_IRQn; + break; + case MOD_TIMER4: + ret = TIMER_IRQn; + break; + case MOD_SDIO: + ret = SDIO_FUN1_IRQn; + break; + case MOD_MAC: + ret = MAC_IRQn; + break; + case MOD_DMA: + ret = DMA_IRQn; + break; + case MOD_PWM: + ret = PWM_IRQn; + break; + case MOD_TRNG: + ret = TRNG_IRQn; + break; + case MOD_AES: + ret = AES_IRQn; + break; + case MOD_EXT_INT: + ret = EXTERNAL_IRQn; + break; + case MOD_DGBH: + case MOD_CACHE: + case MOD_RFREG: + case MOD_EF: + default: + break; + } + return ret; } -static void hal_sleep_wakeup_source_update(void) -{ - hal_sleep_ctrl_t *sleep_ctrl = hal_sleep_get_handle(); - hal_sleep_config_t *sleep_config = &(sleep_ctrl->sleep_config); - sleep_mode_enum_t sleep_mode = sleep_config->sleep_mode; - //clear wakeup source - hal_sleep_wakeup_source_clear_all(); - if(sleep_mode >= LIGHT_SLEEP) +static int log2(uint32_t val) +{ + int ret = 0; + switch(val) { - //жʹܼĴֵ - sleep_ctrl->nvic_int_en[0] = NVIC->ISER[0]; - sleep_ctrl->nvic_int_en[1] = NVIC->ISER[1]; - - //жʹܼĴ - //disable all interrupts - NVIC->ICER[0] = 0xFFFFFFFF; - NVIC->ICER[1] = 0xFFFFFFFF; + case 0x1: ret = 0; break; + case 0x2: ret = 1; break; + case 0x4: ret = 2; break; + case 0x8: ret = 3; break; + case 0x10: ret = 4; break; + case 0x20: ret = 5; break; + case 0x40: ret = 6; break; + case 0x80: ret = 7; break; + case 0x100: ret = 8; break; + case 0x200: ret = 9; break; + case 0x400: ret = 10; break; + case 0x800: ret = 11; break; + case 0x1000: ret = 12; break; + case 0x2000: ret = 13; break; + case 0x4000: ret = 14; break; + case 0x8000: ret = 15; break; + case 0x10000: ret = 16; break; + case 0x20000: ret = 17; break; + case 0x40000: ret = 18; break; + case 0x80000: ret = 19; break; + case 0x100000: ret = 20; break; + case 0x200000: ret = 21; break; + case 0x400000: ret = 22; break; + case 0x800000: ret = 23; break; + case 0x1000000: ret = 24; break; + case 0x2000000: ret = 25; break; + case 0x4000000: ret = 26; break; + case 0x8000000: ret = 27; break; + case 0x10000000: ret = 28; break; + case 0x20000000: ret = 29; break; + case 0x40000000: ret = 30; break; + case 0x80000000: ret = 31; break; + default: break; } + return ret; +} - //enable wakeup IRQ - if(sleep_mode >= LIGHT_SLEEP){ - if(sleep_mode == LIGHT_SLEEP){ - NVIC_EnableIRQ(UART0_IRQn); - NVIC_EnableIRQ(UART1_IRQn); - }else{ - NVIC_EnableIRQ(SLEEP_IRQn); - } - - #if WIFI_SWITCH==0 - if(sleep_mode <= DEEP_SLEEP){ - NVIC_EnableIRQ(MAC_IRQn); - } - #endif +/** + * @brief Check whether can sleep + * + * @param none + * + * @note If can sleep, return true; else return flase. + */ +static bool hal_sleep_condition_check(hal_sleep_config_t *sleep_config) +{ + bool ret = true; + hal_sleep_action_t *action; + uint32_t value, tmp, idx; - if(sleep_config->wakeup_src & EXT_INT_WAKEUP){ - //ext int wakeup init - hal_sleep_external_irq_wakeup_init(HAL_GPIO_Mapping_To_Ext_Int(sleep_config->ext_irq_cfg.gpio), sleep_config->ext_irq_cfg.triggle_type); + if(!sleep_config){ + return false; + } + value = sleep_config->peripheral_mod; + while(value){ + tmp = value & (value - 1); + idx = log2(value - tmp); + action = &(sleep_config->actions[idx]); + if(action->sleep_condition){ + ret = ret && action->sleep_condition(); } + value = tmp; } + return ret; } -void hal_sleep_set_config(hal_sleep_config_t *sleep_config) +static void hal_pre_sleep_processing_registered_cb(hal_sleep_config_t *sleep_config) { - hal_sleep_ctrl_t *sleep_ctrl = hal_sleep_get_handle(); + hal_sleep_action_t *action; + uint32_t value, tmp, idx; - if(!sleep_ctrl->inited){ - LOG(LOG_LVL_EMERG, "Function hal_sleep_init(*sleep_config) has not been called before, so you can't set sleep_config!\r\n"); + if(!sleep_config){ return; } - memcpy(&(sleep_ctrl->sleep_config), sleep_config, sizeof(hal_sleep_config_t)); + value = sleep_config->peripheral_mod; + while(value){ + tmp = value & (value - 1); + idx = log2(value - tmp); + action = &(sleep_config->actions[idx]); + NVIC_EnableIRQ((IRQn_Type)action->irq_num); + if(action->pre_sleep){ + action->pre_sleep(); + } + value = tmp; + } } - -sleep_mode_enum_t hal_sleep_get_mode(void) +static void hal_post_sleep_processing_registered_cb(hal_sleep_config_t *sleep_config) { - hal_sleep_ctrl_t *sleep_ctrl = hal_sleep_get_handle(); - return sleep_ctrl->sleep_config.sleep_mode; + hal_sleep_action_t *action; + uint32_t value, tmp, idx; + + if(!sleep_config){ + return; + } + value = sleep_config->peripheral_mod; + while(value){ + tmp = value & (value - 1); + idx = log2(value - tmp); + action = &(sleep_config->actions[idx]); + if(action->post_sleep){ + action->post_sleep(); + } + value = tmp; + } } -extern bool is_sta_sleeping(void); -extern void initialize_phy(void); -#define RAM_RETENTION (1 << 0) -#define RAM_MAC (1 << 1) -#define RAM_CPU (1 << 2) -#if WIFI_SWITCH -extern uint8_t wifi_en; -#endif + void hal_pre_sleep_processing(uint32_t *ticks) { hal_sleep_ctrl_t *sleep_ctrl = hal_sleep_get_handle(); sleep_mode_enum_t sleep_mode = hal_sleep_get_mode(); uint64_t u64val = (uint64_t)(*ticks) * 1000 / configTICK_RATE_HZ; uint8_t sram_powerdown = 0x00;//RAM_RETENTION | RAM_MAC | RAM_CPU + hal_sleep_config_t *sleep_config = &(sleep_ctrl->sleep_config); -#if WIFI_SWITCH - if(sleep_mode < LIGHT_SLEEP || sleep_ctrl->flag || (wifi_en==1)){ + if(sleep_mode < LIGHT_SLEEP || sleep_ctrl->flag){ *ticks = 0; return; } - //LOG(LOG_LVL_INFO, "\r\n%s() line:%d\r\n",__func__,__LINE__); -#else - if(sleep_mode < LIGHT_SLEEP || sleep_ctrl->flag || (sleep_ctrl->wifi_is_slept_cb && !sleep_ctrl->wifi_is_slept_cb())){ + + if(!hal_sleep_condition_check(sleep_config)){ *ticks = 0; return; } -#endif if(u64val >> 32){ LOG(LOG_LVL_EMERG, "[%s, %d]ticks(%d) expected overflow!\r\n", __func__, __LINE__, *ticks); @@ -187,22 +400,24 @@ void hal_pre_sleep_processing(uint32_t *ticks) sleep_ctrl->flag = true; - //set wakeup source - hal_sleep_wakeup_source_update(); + hal_pre_sleep_processing_registered_cb(sleep_config); if(sleep_mode == LIGHT_SLEEP){ // LIGHT_SLEEP˯ģʽʱʹRTC u64val = ((uint64_t)1000000 * (sleep_ctrl->msec - RTC_TIMER_EXTRA_COMPENSATION_MSEC))/HAL_SYSCON_Get32KPeriodNs(); - if(u64val >> 32){ - LOG(LOG_LVL_EMERG, "[%s, %d]RTC counter_match(%lld) overflow!\r\n", __func__, __LINE__, u64val); - u64val = u64val & 0xFFFFFFFFULL; - } - hal_sleep_rtc_wakeup_init(u64val); + hal_sleep_rtc_init((uint32_t)u64val); }else{ // ˯ģʽʱʹרŵsleep timer sleep_ctrl->compensation = HAL_SYSCON_CalculateCompensateNs() + (uint64_t)SLEEP_TIMER_EXTRA_COMPENSATION_MSEC*1000000; HAL_SYSCON_CPUSleepDurationEnable(((uint64_t)*ticks * 1000000000 / configTICK_RATE_HZ) - sleep_ctrl->compensation); + NVIC_EnableIRQ(SLEEP_IRQn); } - ll_pre_sleep_processing(sleep_mode, sram_powerdown); + //ll_pre_sleep_processing(sleep_mode, sram_powerdown); + pre_sleep_processing_hardware(sleep_mode, sram_powerdown); + + HAL_SYSCON_AWO_clk_sel_set(0); // switch to crystal clock + + + } uint32_t hal_post_sleep_processing(uint32_t ticks) { @@ -225,7 +440,7 @@ uint32_t hal_post_sleep_processing(uint32_t ticks) } sleep_ctrl->flag = false; - ll_post_sleep_processing(mode); + post_sleep_processing_hardware(mode); if(mode == LIGHT_SLEEP){ ticks = (((uint64_t)HAL_RTC_GetCurValue() * HAL_SYSCON_Get32KPeriodNs() / 1000000 + RTC_TIMER_EXTRA_COMPENSATION_MSEC) * configTICK_RATE_HZ) / 1000; @@ -243,28 +458,67 @@ uint32_t hal_post_sleep_processing(uint32_t ticks) NVIC->ISER[0] = sleep_ctrl->nvic_int_en[0]; NVIC->ISER[1] = sleep_ctrl->nvic_int_en[1]; } - if(sleep_ctrl->reinit_phy_cb) - { - sleep_ctrl->reinit_phy_cb(); - } + hal_post_sleep_processing_registered_cb(&(sleep_ctrl->sleep_config)); + + HAL_SYSCON_AWO_clk_sel_set(1); // switch to system pll clock return ticks; } -void hal_sleep_wakeup_source_set(hal_sleep_wakeup_src_enum_t wakeup_src) + +int hal_sleep_set_mode(sleep_mode_enum_t sleep_mode) { hal_sleep_ctrl_t *sleep_ctrl = hal_sleep_get_handle(); - hal_sleep_config_t *sleep_config = &(sleep_ctrl->sleep_config); - sleep_config->wakeup_src |= wakeup_src; + + sleep_ctrl->sleep_config.sleep_mode = sleep_mode; + + return 0; } -void hal_sleep_register_callback(reinitialize_phy_cb_t reinit_phy_cb, wifi_is_slept_cb_t wifi_is_slept_cb) + +sleep_mode_enum_t hal_sleep_get_mode(void) { hal_sleep_ctrl_t *sleep_ctrl = hal_sleep_get_handle(); - sleep_ctrl->reinit_phy_cb = reinit_phy_cb; - sleep_ctrl->wifi_is_slept_cb = wifi_is_slept_cb; + return sleep_ctrl->sleep_config.sleep_mode; } -void SLEEP_IRQHandler(void) +int hal_sleep_register(hal_peripheral_module_t peripheral_module, sleep_condition_cb_t sleep_condition, sleep_processing_cb_t pre_sleep, sleep_processing_cb_t post_sleep) { - //do nothing - hal_sleep_wakeup_source_set(SLEEP_TIMER_WAKEUP); + hal_sleep_ctrl_t *sleep_ctrl = hal_sleep_get_handle(); + hal_sleep_config_t *sleep_config = &(sleep_ctrl->sleep_config); + hal_sleep_action_t *action; + + if(peripheral_module >= MOD_MAX || peripheral_module < MOD_QSPI){ + return -1; + } + + action = &(sleep_config->actions[peripheral_module]); + SET_BIT(sleep_config->peripheral_mod, peripheral_module); + action->irq_num = hal_sleep_peripheral_module_to_IRQn(peripheral_module); + if(sleep_condition){ + action->sleep_condition = sleep_condition; + } + if(pre_sleep){ + action->pre_sleep = pre_sleep; + } + if(post_sleep){ + action->post_sleep = post_sleep; + } + return 0; +} +int hal_sleep_unregister(hal_peripheral_module_t peripheral_module) +{ + hal_sleep_ctrl_t *sleep_ctrl = hal_sleep_get_handle(); + hal_sleep_config_t *sleep_config = &(sleep_ctrl->sleep_config); + hal_sleep_action_t *action; + + if(peripheral_module >= MOD_MAX || peripheral_module < MOD_QSPI){ + return -1; + } + + action = &(sleep_config->actions[peripheral_module]); + CLR_BIT(sleep_config->peripheral_mod, peripheral_module); + action->irq_num = 0; + action->sleep_condition = NULL; + action->pre_sleep = NULL; + action->post_sleep = NULL; + return 0; } diff --git a/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/hal/hal_syscon.c b/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/hal/hal_syscon.c index d1b0cd26ba03160d87b948be23229d3f1a95c6d0..9e38e16cb8f46a1c19793a1b3183dd248630a5ca 100644 --- a/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/hal/hal_syscon.c +++ b/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/hal/hal_syscon.c @@ -498,6 +498,7 @@ void HAL_SYSCON_EXT_INTR_Clear(void) LL_SYSCON_EXT_INTR_Clear(); } + /** * @brief Reset the mcu by software * @@ -526,13 +527,104 @@ void HAL_SYSCON_Xtal40MCap_Set(uint8_t cap) LL_SYSCON_Xtal40MCap_Set(cap); } - void HAL_SYSCON_PmuCfg(void) { LL_SYSCON_PMUReg_Set(0x8B050900);// (BUCK) r_vtrim: bit[9:8]=0b01 //00: 1.195 / 01: 1.202 / 10: 1.210 / 11: 1.218 - LL_SYSCON_PMUCfg_Set(0x20001603);// o_digldo_norvdd: bit[10:8]=0b100; o_digldo_retvdd: bit[14:12]=0b001 + //LL_SYSCON_PMUCfg_Set(0x20001603);// o_digldo_norvdd: bit[10:8]=0b100; o_digldo_retvdd: bit[14:12]=0b001 + LL_SYSCON_PMUCfg_Set(0x310746fd);// o_digldo_norvdd: bit[10:8]=0b100; o_digldo_retvdd: bit[14:12]=0b110 LL_SYSCON_Misc_Set(0x00002C0D); LL_SYSCON_PMUAvdd_Set(0x00055DB6);// Avdd & PLL & RF voltage 55B75 } +void HAL_SYSCON_AWO_phy_pd_en(uint8_t en) +{ + LL_SYSCON_AWO_phy_pd_en(en); +} +void HAL_SYSCON_AWO_phy_po_en(uint8_t en) +{ + LL_SYSCON_AWO_phy_po_en(en); +} +void HAL_SYSCON_AWO_ldo18_po_en(uint8_t en) +{ + LL_SYSCON_AWO_ldo18_po_en(en); +} +void HAL_SYSCON_AWO_sram_pd_en(uint8_t en) +{ + LL_SYSCON_AWO_sram_pd_en(en); +} +void HAL_SYSCON_AWO_sram_po_en(uint8_t en) +{ + LL_SYSCON_AWO_sram_po_en(en); +} + +void HAL_SYSCON_AWO_pmu_ret_en(uint8_t en) +{ + LL_SYSCON_AWO_pmu_ret_en(en); +} +void HAL_SYSCON_AWO_pmu_unret_en(uint8_t en) +{ + LL_SYSCON_AWO_pmu_unret_en(en); +} +void HAL_SYSCON_AWO_pdcmp_po(uint8_t po) +{ + LL_SYSCON_AWO_pdcmp_po(po); +} + +void HAL_SYSCON_AWO_cpucore_retreg_po(uint8_t po) +{ + LL_SYSCON_AWO_cpucore_retreg_po(po); +} +void HAL_SYSCON_AWO_idle_reg_set(uint32_t val) +{ + LL_SYSCON_AWO_idle_reg_set(val); +} + +void HAL_SYSCON_AWO_lp_mode_awo(uint8_t lp_mode_awo) +{ + LL_SYSCON_AWO_lp_mode_awo(lp_mode_awo); +} + +void HAL_SYSCON_AWO_clk_sel_set(uint32_t val) +{ + LL_SYSCON_AWO_clk_sel_set(val); +} + +void HAL_SYSCON_CMP_rfreg_len(uint16_t rfreg_len) +{ + LL_SYSCON_CMP_rfreg_len(rfreg_len); +} +void HAL_SYSCON_CMP_rfreg_base_addr(uint16_t rfreg_base_addr) +{ + LL_SYSCON_CMP_rfreg_base_addr(rfreg_base_addr); +} + +void HAL_SYSCON_CMP_rfreg_action_set(uint32_t val) +{ + LL_SYSCON_CMP_rfreg_action_set(val); +} + +uint8_t HAL_SYSCON_CMP_save_done_get(void) +{ + return LL_SYSCON_CMP_save_done_get(); +} + +void HAL_SYSCON_AWO_sw_pwr_ctrl_set(uint32_t value) +{ + LL_SYSCON_AWO_sw_pwr_ctrl_set(value); +} + +uint8_t HAL_SYSCON_AWO_pmu_fsm_get(void) +{ + return LL_SYSCON_AWO_pmu_fsm_get(); +} + +uint8_t HAL_SYSCON_CMP_restore_done_get(void) +{ + return LL_SYSCON_CMP_restore_done_get(); +} + +void HAL_SYSCON_CMP_sw_clkg_set(uint32_t value) +{ + LL_SYSCON_CMP_sw_clkg_set(value); +} diff --git a/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/hal/hal_timer.c b/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/hal/hal_timer.c index fdd1822b02938f40d7741afdec06e3865ea69980..a3cb4c4e9ffc5008eff6f3595397c3815c8698ee 100644 --- a/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/hal/hal_timer.c +++ b/platform/vendor_bsp/LN/ln882x/src/driver_ln882x/hal/hal_timer.c @@ -4,6 +4,7 @@ #include "ll/ll_syscon.h" #include "hal/hal_common.h" +timer_cb_func_t Timer_cb_func[4]={NULL}; /** * @brief Initialize the timer according to the input param config. @@ -16,6 +17,7 @@ void HAL_TIMER_Init(TIMER_InitTypeDef config) assert_param(IS_TIMER_MODE(config.mode)); assert_param(IS_TIMER_MASK(config.mask)); assert_param( ((APBUS0_CLOCK / config.user_freq) >= 1 ) && ( (APBUS0_CLOCK / config.user_freq) <= 256 )); + assert_param(config.cb_func); HAL_TIMER_Enable(config.index, TIMER_DISABLE); @@ -52,6 +54,10 @@ void HAL_TIMER_Init(TIMER_InitTypeDef config) default: break; } + if(config.cb_func) + { + Timer_cb_func[config.index-1]=config.cb_func; + } } @@ -233,4 +239,14 @@ uint32_t HAL_TIMER_LoadCount2_Get(TIMER_Index index) return LL_TIMER_LoadCount2_Get(index); } - +void TIMER_IRQHandler() +{ + TIMER_Index index; + for(index=TIMER_1;index<=TIMER_4;index++) + { + if(HAL_TIMER_Int_Status(index)&&Timer_cb_func[index-1]) + { + Timer_cb_func[index-1](); + } + } +} diff --git a/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_agent.c b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_agent.c new file mode 100644 index 0000000000000000000000000000000000000000..5e5a4736c348e6c9facbecebdf30424e7e009f3f --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_agent.c @@ -0,0 +1,316 @@ +#include "string.h" +#include "xz_decompress.h" +#include "flash_partition_mgr.h" + +#include "ota_image.h" +#include "ota_agent.h" +#include "ota_port.h" + + +static uint8_t temp_buf[LEN_4KB]; + +static image_hdr_t app_header; +static image_hdr_t ota_header; +static partition_info_t partition_info_app; +static partition_info_t partition_info_ota; + +static int verify_total_img_partition(partition_type_t type, \ + partition_info_t *info, image_hdr_t *hdr) +{ + int err; + + if (LN_TRUE != ln_fetch_partition_info(type, info)) { + return OTA_ERR_PARTITION_TAB; + } + + if (OTA_ERR_NONE != (err = image_header_read(type, hdr))) { + return err; + } + + if (OTA_ERR_NONE != (err = image_header_verify(hdr))) { + return err; + } + + if (OTA_ERR_NONE != (err = image_body_verify(info->start_addr, hdr))) { + return err; + } + + return OTA_ERR_NONE; +} + +static int orig_image_do_restore(uint32_t app_body_offset, \ + uint32_t ota_body_offset, uint32_t size) +{ + uint32_t i = 0; + uint32_t count_4k = size / LEN_4KB; + uint32_t remainder_4k = size % LEN_4KB; + ota_port_ctx_t * port = ota_get_port_ctx(); + + for (i = 0; i < count_4k; i++) { + port->flash_drv.read(ota_body_offset, temp_buf, LEN_4KB); + port->flash_drv.write(app_body_offset, temp_buf, LEN_4KB); + ota_body_offset += LEN_4KB; + app_body_offset += LEN_4KB; + } + + if (remainder_4k) { + port->flash_drv.read(ota_body_offset, temp_buf, remainder_4k); + port->flash_drv.write(app_body_offset, temp_buf, remainder_4k); + } + + return OTA_ERR_NONE; +} + +static int decompress_read_cb(uint8_t **buf, uint32_t *buf_len) +{ + int32_t tmp_len; + uint32_t ota_xz_size = ota_header.img_size_orig_xz; + uint32_t ota_img_body_offset = partition_info_ota.start_addr + sizeof(image_hdr_t); + ota_port_ctx_t * port = ota_get_port_ctx(); + + static uint32_t xz_already_read = 0; + + tmp_len = ota_xz_size - xz_already_read; + if (tmp_len > LEN_4KB) { + tmp_len = LEN_4KB; + } + + *buf = temp_buf; + + port->flash_drv.read(ota_img_body_offset + xz_already_read, *buf, tmp_len); + + *buf_len = tmp_len; + xz_already_read += tmp_len; + + return XZ_RET_OK; +} + +static int decompress_write_cb(uint32_t offset, uint8_t *buf, uint32_t buf_len) +{ + uint32_t app_img_body_offset = partition_info_app.start_addr + sizeof(image_hdr_t); + ota_port_ctx_t * port = ota_get_port_ctx(); + static uint32_t xz_already_write = 0; + + port->flash_drv.write(app_img_body_offset + xz_already_write, buf, buf_len); + + xz_already_write += buf_len; + + return XZ_RET_OK; +} + +static int xz_image_do_restore(uint32_t ota_body_offset, uint32_t size) +{ + write_cb_t out; + read_cb_t in; + xz_header_t xz_header = {0,}; + ota_port_ctx_t * port = ota_get_port_ctx(); + + out.Write = decompress_write_cb; + in.Read = decompress_read_cb; + + port->flash_drv.read(ota_body_offset, &xz_header, sizeof(xz_header_t)); + + if (XZ_RET_OK != xz_decompress_buf_to_buf(xz_header.header, &out, &in)) { + return OTA_ERR_DECOMPRESS; + } + + return OTA_ERR_NONE; +} + +static int restore_image(jump_to_app_t jump_to_app) +{ + static image_hdr_t img_hdr_temp; + upg_state_t upgrade_state; + uint32_t app_body_offset = 0; + uint32_t ota_body_offset = 0; + uint32_t size = 0; + ota_port_ctx_t * port = ota_get_port_ctx(); + int err = OTA_ERR_NONE; + + switch(ota_header.image_type) + { + case IMAGE_TYPE_ORIGINAL: + // copy header + port->flash_drv.write(partition_info_app.start_addr, &ota_header, sizeof(image_hdr_t)); + + // copy image + app_body_offset = partition_info_app.start_addr + sizeof(image_hdr_t); + ota_body_offset = partition_info_ota.start_addr + sizeof(image_hdr_t); + size = ota_header.img_size_orig; + if (OTA_ERR_NONE != (err = orig_image_do_restore(app_body_offset, \ + ota_body_offset, size))) { + return err; + } + + // verify app partition(new image) + if (OTA_ERR_NONE != (err = verify_total_img_partition(PARTITION_TYPE_APP, \ + &partition_info_app, &app_header))) { + //TODO:HOOK + return err; + } + + // update OTA upg state + upgrade_state = UPG_STATE_RESTORE_OK; + + if (LN_TRUE != port->kv_ops.kv_set(KV_OTA_UPG_STATE, &upgrade_state, sizeof(upg_state_t))) { + //TODO:HOOK + return OTA_ERR_KV_RW; + } + + jump_to_app(partition_info_app.start_addr + sizeof(image_hdr_t)); + return OTA_ERR_NONE; + + case IMAGE_TYPE_ORIGINAL_XZ: + // copy header + memcpy(&img_hdr_temp, &ota_header, sizeof(image_hdr_t)); + img_hdr_temp.image_type = IMAGE_TYPE_ORIGINAL; + img_hdr_temp.header_crc32 = ln_crc32_signle_cal((uint8_t *)&img_hdr_temp, \ + sizeof(image_hdr_t) - sizeof(uint32_t)); + + port->flash_drv.write(partition_info_app.start_addr, &img_hdr_temp, sizeof(image_hdr_t)); + + // copy image + ota_body_offset = partition_info_ota.start_addr + sizeof(image_hdr_t); + size = ota_header.img_size_orig_xz; + + // it takes a lot of time. + if (OTA_ERR_NONE != (err = xz_image_do_restore(ota_body_offset, size))) { + return err; + } + + // verify app partition(new image) + if (OTA_ERR_NONE != (err = verify_total_img_partition(PARTITION_TYPE_APP, \ + &partition_info_app, &app_header))) { + //TODO:HOOK + return err; + } + + // update OTA upg state + upgrade_state = UPG_STATE_RESTORE_OK; + + if (LN_TRUE != port->kv_ops.kv_set(KV_OTA_UPG_STATE, &upgrade_state, sizeof(upg_state_t))) { + //TODO:HOOK + return OTA_ERR_KV_RW; + } + + jump_to_app(partition_info_app.start_addr + sizeof(image_hdr_t)); + return OTA_ERR_NONE; + + case IMAGE_TYPE_DIFF: + case IMAGE_TYPE_DIFF_XZ: + if ((app_header.ver.ver_major == ota_header.ver_diff_depend.ver_major) && \ + (app_header.ver.ver_minor == ota_header.ver_diff_depend.ver_minor)) + { + // this feature is not supported yet. + return OTA_ERR_NOT_SUPPORT; + } + /* why? it's impossible to go into this branch */ + else + { + // download ok! why? App should check it! + return OTA_ERR_IMPOSSIBLE_VER; + } + + default: + return OTA_ERR_IMG_TYPE; + } +} + +int ota_boot_upgrade_agent(jump_to_app_t jump_to_app) +{ + ota_port_ctx_t * port = ota_get_port_ctx(); + upg_state_t upgrade_state; + uint32_t v_len = 0; + int err = OTA_ERR_NONE; + + if (LN_TRUE != port->kv_ops.kv_get(KV_OTA_UPG_STATE, &upgrade_state, sizeof(upg_state_t), &v_len)) + { + /* upg state param error,may be first startup or KV damaged */ + if (OTA_ERR_NONE != (err = verify_total_img_partition(PARTITION_TYPE_APP, \ + &partition_info_app, &app_header))) { + //TODO:HOOK + return err; + } + + jump_to_app(partition_info_app.start_addr + sizeof(image_hdr_t)); + return OTA_ERR_NONE; + } + + if (UPG_STATE_DOWNLOAD_OK != upgrade_state) + { + if (OTA_ERR_NONE != (err = verify_total_img_partition(PARTITION_TYPE_APP, \ + &partition_info_app, &app_header))) { + //TODO:HOOK + return err; + } + + jump_to_app(partition_info_app.start_addr + sizeof(image_hdr_t)); + return OTA_ERR_NONE; + } + else + { + if (OTA_ERR_NONE != (err = verify_total_img_partition(PARTITION_TYPE_APP, \ + &partition_info_app, &app_header))) { + //last time copy err case. + + //return errno + } + else + { + if (OTA_ERR_NONE != (err = verify_total_img_partition(PARTITION_TYPE_OTA, \ + &partition_info_ota, &ota_header))) { + //update OTA upg state [upg restory filed] + + //jump to app! + jump_to_app(partition_info_app.start_addr + sizeof(image_hdr_t)); + + return err;//ota err image but wo also jump to app + } + + //version compare + if ((ota_header.ver.ver_major + ota_header.ver.ver_minor) > \ + (app_header.ver.ver_major + app_header.ver.ver_minor)) + { + port->flash_drv.erase(partition_info_app.start_addr, partition_info_app.size); + return restore_image(jump_to_app); + + } + else if ((ota_header.ver.ver_major + ota_header.ver.ver_minor) == \ + (app_header.ver.ver_major + app_header.ver.ver_minor)) + { + /* a power loss may have occurred after the last restore before the UPG STATE update. */ + if ((app_header.img_size_orig == ota_header.img_size_orig) && \ + (app_header.img_crc32_orig == ota_header.img_crc32_orig)) + { + //update OTA param + upgrade_state = UPG_STATE_RESTORE_OK; + + if (LN_TRUE != port->kv_ops.kv_set(KV_OTA_UPG_STATE, &upgrade_state, sizeof(upg_state_t))) { + //TODO:HOOK + return OTA_ERR_KV_RW; + } + + jump_to_app(partition_info_app.start_addr + sizeof(image_hdr_t)); + return OTA_ERR_NONE; + } + /* why? it's impossible to go into this branch */ + else + { + //TODO:HOOK + return OTA_ERR_IMPOSSIBLE_VER; + } + } + /* why? it's impossible to go into this branch */ + else + { + //TODO:HOOK + return OTA_ERR_IMPOSSIBLE_VER; + } + } + } + + return 0; +} + + + diff --git a/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_agent.h b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_agent.h new file mode 100644 index 0000000000000000000000000000000000000000..14a0941f5630b36a4412f7b34b8ddf922cb1d4eb --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_agent.h @@ -0,0 +1,15 @@ +#ifndef __OTA_API_H__ +#define __OTA_API_H__ + +#include "ota_err.h" +#include "ota_types.h" +#include "ota_port.h" + +typedef void (*jump_to_app_t)(uint32_t app_entity_offset); + +int ota_boot_upgrade_agent(jump_to_app_t jump_to_app); + + + +#endif /* __OTA_API_H__ */ + diff --git a/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_err.h b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_err.h new file mode 100644 index 0000000000000000000000000000000000000000..925af6b01f45dd293c95dfd7876edc0d7474bad0 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_err.h @@ -0,0 +1,24 @@ +#ifndef __OTA_ERR_H__ +#define __OTA_ERR_H__ + +typedef enum { + OTA_ERR_NONE = 0u, + OTA_ERR_INVALID_PARAM, + + OTA_ERR_KV_RW = 10u, + OTA_ERR_UPG_STATE, + OTA_ERR_PARTITION_TAB, + OTA_ERR_DECOMPRESS, + + OTA_ERR_IMG_TYPE = 20u, + OTA_ERR_IMG_HEADER_READ, + OTA_ERR_IMG_HEADER_VERIFY, + OTA_ERR_IMG_ENTITY_VERIFY, + + OTA_ERR_IMPOSSIBLE_VER = 30u, + OTA_ERR_NOT_SUPPORT, + +} ota_err_t; + +#endif /* __OTA_ERR_H__ */ + diff --git a/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_image.c b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_image.c new file mode 100644 index 0000000000000000000000000000000000000000..a3314d2ffcc9a1424475b7030b98dc0aa51b7c75 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_image.c @@ -0,0 +1,113 @@ +#include "ota_image.h" +#include "ota_port.h" + + +#define TEMP_BUF_LEN (128) +static uint8_t temp_buf[TEMP_BUF_LEN]; + +int image_header_read(partition_type_t type, image_hdr_t *header) +{ + partition_info_t info; + ota_port_ctx_t * port = ota_get_port_ctx(); + + if ((type != PARTITION_TYPE_APP) && (type != PARTITION_TYPE_OTA)) { + return OTA_ERR_INVALID_PARAM; + } + + if (LN_TRUE == ln_fetch_partition_info(type, &info)) { + port->flash_drv.read(info.start_addr, (uint8_t*)header, sizeof(image_hdr_t)); + return OTA_ERR_NONE; + } + + return OTA_ERR_IMG_HEADER_READ; +} + +int image_header_fast_read(uint32_t start_addr, image_hdr_t *header) +{ + ota_port_ctx_t * port = ota_get_port_ctx(); + + port->flash_drv.read(start_addr, (uint8_t*)header, sizeof(image_hdr_t)); + + return OTA_ERR_NONE; +} + +int image_header_verify(image_hdr_t *header) +{ + if (header->header_crc32 == ln_crc32_signle_cal((uint8_t *)header, sizeof(image_hdr_t) - sizeof(uint32_t))) { + return OTA_ERR_NONE; + } + + return OTA_ERR_IMG_HEADER_VERIFY; +} + +int image_body_verify(uint32_t start_addr, image_hdr_t *header) +{ + uint32_t offset = 0; + uint32_t size = 0; + uint32_t i = 0; + uint32_t crc32_result = 0; + crc32_ctx_t crc_ctx = {0,}; + ota_port_ctx_t * port = ota_get_port_ctx(); + + if (!header) { + return OTA_ERR_INVALID_PARAM; + } + + offset = start_addr + sizeof(image_hdr_t); + + switch (header->image_type) + { + case IMAGE_TYPE_ORIGINAL: + size = header->img_size_orig; + break; + case IMAGE_TYPE_ORIGINAL_XZ: + size = header->img_size_orig_xz; + break; + case IMAGE_TYPE_DIFF: + size = header->img_size_diff; + break; + case IMAGE_TYPE_DIFF_XZ: + size = header->img_size_diff_xz; + break; + default: + return OTA_ERR_IMG_TYPE; + } + + /* calculate CRC32 checksum of flash image segment by segment */ + ln_crc32_init(&crc_ctx); + + for (i = 0; i < size/TEMP_BUF_LEN; i++) { + port->flash_drv.read(offset, temp_buf, TEMP_BUF_LEN); + + ln_crc32_update(&crc_ctx, temp_buf, TEMP_BUF_LEN); + + offset += TEMP_BUF_LEN; + } + + port->flash_drv.read(offset, temp_buf, size % TEMP_BUF_LEN); + ln_crc32_update(&crc_ctx, temp_buf, size % TEMP_BUF_LEN); + crc32_result = ln_crc32_final(&crc_ctx); + + /* check the CRC32 checksum */ + switch (header->image_type) + { + case IMAGE_TYPE_ORIGINAL: + return ((crc32_result == header->img_crc32_orig) ? OTA_ERR_NONE : OTA_ERR_IMG_ENTITY_VERIFY); + + case IMAGE_TYPE_ORIGINAL_XZ: + return ((crc32_result == header->img_crc32_orig_xz) ? OTA_ERR_NONE : OTA_ERR_IMG_ENTITY_VERIFY); + + case IMAGE_TYPE_DIFF: + return ((crc32_result == header->img_crc32_diff) ? OTA_ERR_NONE : OTA_ERR_IMG_ENTITY_VERIFY); + + case IMAGE_TYPE_DIFF_XZ: + return ((crc32_result == header->img_crc32_diff_xz) ? OTA_ERR_NONE : OTA_ERR_IMG_ENTITY_VERIFY); + + default: + return OTA_ERR_IMG_TYPE; + } +} + + + + diff --git a/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_image.h b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_image.h new file mode 100644 index 0000000000000000000000000000000000000000..0ed4381047cf6fd36b8c7debaeaf188ccf74eff0 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_image.h @@ -0,0 +1,17 @@ +#ifndef __OTA_IMAGE_H__ +#define __OTA_IMAGE_H__ + +#include "flash_partition_mgr.h" +#include "ota_types.h" +#include "ota_err.h" + + +int image_header_read(partition_type_t type, image_hdr_t * header); +int image_header_fast_read(uint32_t start_addr, image_hdr_t *header); +int image_header_verify(image_hdr_t * header); +int image_body_verify(uint32_t start_addr, image_hdr_t *header); + + +#endif /* __OTA_IMAGE_H__ */ + + diff --git a/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_port.c b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_port.c new file mode 100644 index 0000000000000000000000000000000000000000..12c027eb8069ff717a20f2e822fcb1f9bdeb9583 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_port.c @@ -0,0 +1,72 @@ +#include "ota_port.h" +#include "ota_err.h" +#include "hal/flash.h" +#include "ln_kv_api.h" +#include "ln_kv_err.h" + +static ota_port_ctx_t ota_port; + +static int flash_read(uint32_t offset, void *buf, uint32_t len) +{ + return FLASH_Read(offset, len, buf); +} + +static int flash_write(uint32_t offset, const void *buf, uint32_t len) +{ + return FLASH_Program(offset, len, (uint8_t*)buf); +} + +static int flash_erase(uint32_t offset, uint32_t len) +{ + FLASH_Erase(offset, len); + return 0; +} + +static int ota_kv_set(const char *key, const void *value, size_t v_len) +{ + if (KV_ERR_NONE == ln_kv_set(key,value,v_len)) { + return LN_TRUE; + } + return LN_FALSE; +} + +static int ota_kv_get(const char *key, void *value_buf, size_t value_buf_size, size_t *v_len) +{ + if (KV_ERR_NONE == ln_kv_get(key,value_buf,value_buf_size,v_len)) { + return LN_TRUE; + } + return LN_FALSE; +} + +static void chip_reboot(void) +{ + +} + +ota_err_t ota_port_init(void) +{ + ota_port.flash_drv.read = flash_read; + ota_port.flash_drv.write = flash_write; + ota_port.flash_drv.erase = flash_erase; + + ota_port.kv_ops.kv_set = ota_kv_set; + ota_port.kv_ops.kv_get = ota_kv_get; + + ota_port.chip_reboot = chip_reboot; + + return OTA_ERR_NONE; +} + +ota_port_ctx_t * ota_get_port_ctx(void) +{ + return &ota_port; +} + + + + + + + + + diff --git a/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_port.h b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_port.h new file mode 100644 index 0000000000000000000000000000000000000000..1d43e16bb0e8e1f93cfe7c91a3c1346fbc30f3af --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_port.h @@ -0,0 +1,60 @@ +#ifndef __OTA_PORT_H__ +#define __OTA_PORT_H__ + +#include "ln_types.h" +#include "ln_kv_err.h" +#include "ota_err.h" +#include "utils/crc32.h" + +#define LEN_4KB (1024*4) + +typedef int (*ota_flash_write_t)(uint32_t addr, const void *buf, uint32_t len); +typedef int (*ota_flash_read_t)(uint32_t addr, void *buf, uint32_t len); +typedef int (*ota_flash_erase_t)(uint32_t addr, uint32_t len); +typedef int (*ota_kv_set_t)(const char *key, const void *value, size_t v_len); +typedef int (*ota_kv_get_t)(const char *key, void *value_buf, size_t value_buf_size, size_t *v_len); +typedef void (*chip_reboot_t)(void); + +typedef struct { + ota_flash_write_t write; + ota_flash_read_t read; + ota_flash_erase_t erase; +} ota_flash_drv_t; + +typedef struct { + ota_kv_set_t kv_set; + ota_kv_get_t kv_get; +} ota_kv_ops_t; + +typedef struct { + ota_flash_drv_t flash_drv; + ota_kv_ops_t kv_ops; + chip_reboot_t chip_reboot; +} ota_port_ctx_t; + + +/** + * @brief ota port init. + * initialize some hardware api that ota module depend on. + * + * @attention None. + * + * @return errcode + * @retval #OTA_ERR_NONE initialize ok. + * @retval #OTA_ERR_* initialize failed. + */ +ota_err_t ota_port_init(void); + +/** + * @brief get ota port context. + * get ota port context. + * + * @attention None. + * + * @return the pointer of ota port context. + */ +ota_port_ctx_t * ota_get_port_ctx(void); + + +#endif /* __OTA_PORT_H__ */ + diff --git a/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_types.h b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_types.h new file mode 100644 index 0000000000000000000000000000000000000000..b64b9965ee16b7d4d02e737acc0b511217fb0556 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/ota_types.h @@ -0,0 +1,50 @@ +#ifndef __OTA_TYPES_H__ +#define __OTA_TYPES_H__ + +#include "ln_types.h" + +typedef enum { + IMAGE_ATTACHE = 0u, /*< it's an attache drvice image */ + IMAGE_TYPE_ORIGINAL = 1u, /*< it's an original image */ + IMAGE_TYPE_ORIGINAL_XZ = 2u, /*< it's an original image which is zipped */ + IMAGE_TYPE_DIFF = 3u, /*< it's a diff image */ + IMAGE_TYPE_DIFF_XZ = 4u, /*< it's a diff image which is zipped */ + IMAGE_TYPE_PLACE = 0x12345678, /*< make different IDEs compatible */ +} image_type_t; + +typedef struct { + uint8_t ver_major; /*< major version number */ + uint8_t ver_minor; /*< minor version number */ +} image_ver_t; + +typedef struct { + image_type_t image_type; /*< what's the image type */ + image_ver_t ver; /*< image version number */ + image_ver_t ver_diff_depend; /*< which version of the file that diff image depend on */ + uint32_t img_size_orig; /*< size of original image */ + uint32_t img_size_orig_xz; /*< size of original image which is zipped */ + uint32_t img_size_diff; /*< size of diff image */ + uint32_t img_size_diff_xz; /*< size of diff image which is zippede */ + uint32_t img_crc32_orig; /*< checksum of original image */ + uint32_t img_crc32_orig_xz; /*< checksum of original image which is zipped */ + uint32_t img_crc32_diff; /*< checksum of diff image */ + uint32_t img_crc32_diff_xz; /*< checksum of diff image which is zippede */ + uint8_t res[212]; /*< reserved space */ + uint32_t header_crc32; /*< checksum of the image header except for itself */ +} image_hdr_t; + +typedef enum { + UPG_STATE_DOWNLOAD_ING = 0u, /*< ota image downloading */ + UPG_STATE_DOWNLOAD_OK = 1u, /*< ota image download finish and check success */ + UPG_STATE_RESTORE_ING = 2u, /*< ota image restoring */ + UPG_STATE_RESTORE_OK = 3u, /*< ota image restore finish and check success */ + UPG_STATE_RESTORE_FILED = 4u, /*< ota image restore filed */ + UPG_STATE_PLACE = 0x12345678, /*< make different IDEs compatible */ +} upg_state_t; + +#define KV_OTA_UPG_STATE "kv_ota_upg_state" + + +#endif /*< __OTA_TYPES_H__ */ + + diff --git a/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/xz_decompress.c b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/xz_decompress.c new file mode 100644 index 0000000000000000000000000000000000000000..a6e2426e6add421a3c50c1d6dcc66c3138432ed6 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/xz_decompress.c @@ -0,0 +1,593 @@ + +#include "xz_decompress.h" +#include +#include +#include + +#define XZ_BASE_SIZE 1846 +#define XZ_LIT_SIZE 768 + +#define kNumTopBits 24 +#define kTopValue ((uint32_t)1 << kNumTopBits) +#define kNumBitModelTotalBits 11 +#define kBitModelTotal (1 << kNumBitModelTotalBits) +#define kNumMoveBits 5 + +typedef struct +{ + uint8_t* Buffer; + uint8_t* BufferLim; + uint32_t Range; + uint32_t Code; + read_cb_t* InCallback; + int read_cb_ret; + int ExtraBytes; +} CRangeDecoder; + +typedef struct +{ + CRangeDecoder RangeDecoder; + uint8_t* Dictionary; + uint32_t DictionarySize; + uint32_t DictionaryPos; + uint32_t GlobalPos; + uint32_t Reps[4]; + int lc; + int lp; + int pb; + int State; + int PreviousIsMatch; + int RemainLen; +} XzVarState; + +uint8_t RangeDecoderReadByte(CRangeDecoder* rd) +{ + uint32_t size = 0; + if (rd->Buffer == rd->BufferLim) + { + rd->read_cb_ret = rd->InCallback->Read(&rd->Buffer, &size); + rd->BufferLim = rd->Buffer + size; + if (size == 0) { + rd->ExtraBytes = 1; + return 0xFF; + } + } + return (*rd->Buffer++); +} + +#define ReadByte (RangeDecoderReadByte(rd)) + +void RangeDecoderInit(CRangeDecoder* rd, read_cb_t* in_cb) +{ + rd->InCallback = in_cb; + rd->Buffer = rd->BufferLim = 0; + rd->ExtraBytes = 0; + rd->Code = 0; + rd->Range = (0xFFFFFFFF); + for (int i = 0; i < 5; i++) { + rd->Code = (rd->Code << 8) | ReadByte; + } +} + +uint32_t RangeDecoderDecodeDirectBits(CRangeDecoder* rd, int numTotalBits) +{ + uint32_t range = rd->Range; + uint32_t code = rd->Code; + uint32_t result = 0; + + for (int i = numTotalBits; i > 0; i--) + { + range >>= 1; + result <<= 1; + + if (code >= range) { + code -= range; + result |= 1; + } + + /* uint32_t t; */ + /* + t = (code - range) >> 31; + t &= 1; + code -= range & (t - 1); + result = (result + result) | (1 - t); + */ + + if (range < kTopValue) { + range <<= 8; + code = (code << 8) | ReadByte; + } + } + + rd->Range = range; + rd->Code = code; + return result; +} + +int RangeDecoderBitDecode(prob_t* prob, CRangeDecoder* rd) +{ + uint32_t bound = (rd->Range >> kNumBitModelTotalBits)* (*prob); + if (rd->Code < bound) + { + rd->Range = bound; + *prob += (kBitModelTotal - *prob) >> kNumMoveBits; + if (rd->Range < kTopValue) + { + rd->Code = (rd->Code << 8) | ReadByte; + rd->Range <<= 8; + } + return 0; + } + else + { + rd->Range -= bound; + rd->Code -= bound; + *prob -= (*prob) >> kNumMoveBits; + if (rd->Range < kTopValue) + { + rd->Code = (rd->Code << 8) | ReadByte; + rd->Range <<= 8; + } + return 1; + } +} + +int RangeDecoderBitTreeDecode(prob_t* probs, int numLevels, CRangeDecoder* rd) +{ + int mi = 1; + for (int i = numLevels; i > 0; i--) { + mi = (mi + mi) + RangeDecoderBitDecode(probs + mi, rd); + } + return mi - (1 << numLevels); +} + +int RangeDecoderReverseBitTreeDecode(prob_t* probs, int numLevels, CRangeDecoder* rd) +{ + int mi = 1; + int symbol = 0; + for (int i = 0; i < numLevels; i++) + { + int bit = RangeDecoderBitDecode(probs + mi, rd); + mi = mi + mi + bit; + symbol |= (bit << i); + } + return symbol; +} + +static uint8_t xz_literal_decode(prob_t* probs, CRangeDecoder* rd) +{ + int symbol = 1; + do + { + symbol = (symbol + symbol) | RangeDecoderBitDecode(probs + symbol, rd); + } while (symbol < 0x100); + + return symbol; +} + +static uint8_t xz_literal_decode_match(prob_t* probs, CRangeDecoder* rd, uint8_t matchByte) +{ + int symbol = 1; + int bit = 0, matchBit = 0; + do + { + matchBit = (matchByte >> 7) & 1; + matchByte <<= 1; + bit = RangeDecoderBitDecode(probs + ((1 + matchBit) << 8) + symbol, rd); + symbol = (symbol << 1) | bit; + + if (matchBit != bit) + { + while (symbol < 0x100) { + symbol = (symbol + symbol) | RangeDecoderBitDecode(probs + symbol, rd); + } + break; + } + } while (symbol < 0x100); + + return symbol; +} + +#define kNumPosBitsMax 4 +#define kNumPosStatesMax (1 << kNumPosBitsMax) +#define kLenNumLowBits 3 +#define kLenNumLowSymbols (1 << kLenNumLowBits) +#define kLenNumMidBits 3 +#define kLenNumMidSymbols (1 << kLenNumMidBits) +#define kLenNumHighBits 8 +#define kLenNumHighSymbols (1 << kLenNumHighBits) + +#define LenChoice 0 +#define LenChoice2 (LenChoice + 1) +#define LenLow (LenChoice2 + 1) +#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits)) +#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits)) +#define kNumLenProbs (LenHigh + kLenNumHighSymbols) + +static int xz_len_decode(prob_t* p, CRangeDecoder* rd, int posState) +{ + if (RangeDecoderBitDecode(p + LenChoice, rd) == 0) + return RangeDecoderBitTreeDecode(p + LenLow + (posState << kLenNumLowBits), kLenNumLowBits, rd); + if (RangeDecoderBitDecode(p + LenChoice2, rd) == 0) + return (kLenNumLowSymbols + RangeDecoderBitTreeDecode(p + LenMid + (posState << kLenNumMidBits), kLenNumMidBits, rd)); + + return (kLenNumLowSymbols + kLenNumMidSymbols + RangeDecoderBitTreeDecode(p + LenHigh, kLenNumHighBits, rd)); +} + +#define kNumStates 12 +#define kStartPosModelIndex 4 +#define kEndPosModelIndex 14 +#define kNumFullDistances (1 << (kEndPosModelIndex >> 1)) + +#define kNumPosSlotBits 6 +#define kNumLenToPosStates 4 +#define kNumAlignBits 4 +#define kAlignTableSize (1 << kNumAlignBits) +#define kMatchMinLen 2 + +#define IsMatch 0 +#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax)) +#define IsRepG0 (IsRep + kNumStates) +#define IsRepG1 (IsRepG0 + kNumStates) +#define IsRepG2 (IsRepG1 + kNumStates) +#define IsRep0Long (IsRepG2 + kNumStates) +#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax)) +#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits)) +#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex) +#define LenCoder (Align + kAlignTableSize) +#define RepLenCoder (LenCoder + kNumLenProbs) +#define Literal (RepLenCoder + kNumLenProbs) + +#if Literal != XZ_BASE_SIZE + #error +#endif + + +static int xz_decode(uint8_t* buf, uint8_t* out_stream, uint32_t out_size, uint32_t* out_size_processed) +{ + XzVarState* vs = (XzVarState*)buf; + prob_t* p = (prob_t*)(buf + sizeof(XzVarState)); + CRangeDecoder rd = vs->RangeDecoder; + int state = vs->State; + int previousIsMatch = vs->PreviousIsMatch; + uint32_t rep0 = vs->Reps[0], rep1 = vs->Reps[1], rep2 = vs->Reps[2], rep3 = vs->Reps[3]; + uint32_t nowPos = 0, pos = 0; + uint8_t previousByte = 0; + + uint32_t posStateMask = (1 << (vs->pb)) - 1; + uint32_t literalPosMask = (1 << (vs->lp)) - 1; + int lc = vs->lc; + int remain_len = vs->RemainLen; + uint32_t globalPos = vs->GlobalPos; + + uint8_t* dict = vs->Dictionary; + uint32_t dict_size = vs->DictionarySize; + uint32_t dictionaryPos = vs->DictionaryPos; + + if (remain_len == -1) { + *out_size_processed = 0; + return XZ_RET_OK; + } + + while ((remain_len > 0) && (nowPos < out_size)) + { + pos = dictionaryPos - rep0; + if (pos >= dict_size) + pos += dict_size; + + out_stream[nowPos++] = dict[dictionaryPos] = dict[pos]; + + if (++dictionaryPos == dict_size) + dictionaryPos = 0; + + remain_len--; + } + + if (dictionaryPos == 0) + previousByte = dict[dict_size - 1]; + else + previousByte = dict[dictionaryPos - 1]; + + *out_size_processed = 0; + while (nowPos < out_size) + { + int posState = (int)((nowPos + globalPos) & posStateMask); + + if (rd.read_cb_ret != XZ_RET_OK) + return rd.read_cb_ret; + + if (rd.ExtraBytes != 0) + return XZ_RET_DATA_ERR; + + if (RangeDecoderBitDecode(p + IsMatch + (state << kNumPosBitsMax) + posState, &rd) == 0) + { + prob_t* probs = p + Literal + (XZ_LIT_SIZE * ((((nowPos + globalPos) & literalPosMask) << lc) + (previousByte >> (8 - lc)))); + + if (state < 4) { + state = 0; + } + else if (state < 10) { + state -= 3; + } + else { + state -= 6; + } + + if (previousIsMatch) + { + pos = dictionaryPos - rep0; + if (pos >= dict_size) + pos += dict_size; + + uint8_t matchByte = dict[pos]; + previousByte = xz_literal_decode_match(probs, &rd, matchByte); + previousIsMatch = 0; + } + else { + previousByte = xz_literal_decode(probs, &rd); + } + + out_stream[nowPos++] = previousByte; + + dict[dictionaryPos] = previousByte; + + if (++dictionaryPos == dict_size) + dictionaryPos = 0; + } + else + { + previousIsMatch = 1; + if (RangeDecoderBitDecode(p + IsRep + state, &rd) == 1) + { + if (RangeDecoderBitDecode(p + IsRepG0 + state, &rd) == 0) + { + if (RangeDecoderBitDecode(p + IsRep0Long + (state << kNumPosBitsMax) + posState, &rd) == 0) + { + if ((nowPos + globalPos) == 0) + return XZ_RET_DATA_ERR; + + state = state < 7 ? 9 : 11; + + pos = dictionaryPos - rep0; + if (pos >= dict_size) + pos += dict_size; + + previousByte = dict[pos]; + dict[dictionaryPos] = previousByte; + + if (++dictionaryPos == dict_size) + dictionaryPos = 0; + + out_stream[nowPos++] = previousByte; + continue; + } + } + else + { + uint32_t distance; + if (RangeDecoderBitDecode(p + IsRepG1 + state, &rd) == 0) + distance = rep1; + else + { + if (RangeDecoderBitDecode(p + IsRepG2 + state, &rd) == 0) + distance = rep2; + else + { + distance = rep3; + rep3 = rep2; + } + + rep2 = rep1; + } + rep1 = rep0; + rep0 = distance; + } + remain_len = xz_len_decode(p + RepLenCoder, &rd, posState); + state = state < 7 ? 8 : 11; + } + else + { + int posSlot; + rep3 = rep2; + rep2 = rep1; + rep1 = rep0; + state = (state < 7) ? 7 : 10; + remain_len = xz_len_decode(p + LenCoder, &rd, posState); + + posSlot = RangeDecoderBitTreeDecode(p + PosSlot + \ + ((remain_len < kNumLenToPosStates ? remain_len : kNumLenToPosStates - 1) << kNumPosSlotBits), kNumPosSlotBits, &rd); + + if (posSlot >= kStartPosModelIndex) + { + int numDirectBits = ((posSlot >> 1) - 1); + rep0 = ((2 | ((uint32_t)posSlot & 1)) << numDirectBits); + + if (posSlot < kEndPosModelIndex) { + rep0 += RangeDecoderReverseBitTreeDecode((p + SpecPos + rep0 - posSlot - 1), numDirectBits, &rd); + } + else { + rep0 += RangeDecoderDecodeDirectBits(&rd, numDirectBits - kNumAlignBits) << kNumAlignBits; + rep0 += RangeDecoderReverseBitTreeDecode(p + Align, kNumAlignBits, &rd); + } + } + else { + rep0 = posSlot; + } + + rep0++; + } + + if (rep0 == (uint32_t)(0)) { + remain_len = -1;/* it's for stream version */ + break; + } + + if (rep0 > nowPos + globalPos) { + return XZ_RET_DATA_ERR; + } + + remain_len += kMatchMinLen; + + do + { + pos = dictionaryPos - rep0; + if (pos >= dict_size) { + pos += dict_size; + } + + previousByte = dict[pos]; + dict[dictionaryPos] = previousByte; + + if (++dictionaryPos == dict_size) { + dictionaryPos = 0; + } + + out_stream[nowPos++] = previousByte; + remain_len--; + } while ((remain_len > 0) && (nowPos < out_size)); + } + } + + vs->RangeDecoder = rd; + vs->DictionaryPos = dictionaryPos; + vs->GlobalPos = globalPos + nowPos; + vs->Reps[0] = rep0; + vs->Reps[1] = rep1; + vs->Reps[2] = rep2; + vs->Reps[3] = rep3; + vs->State = state; + vs->PreviousIsMatch = previousIsMatch; + vs->RemainLen = remain_len; + + *out_size_processed = nowPos; + return XZ_RET_OK; +} + +char XZINTERNALDATA_MEMORY_ADDR[INTERNAL_DATA_BUF_SIZE] = { 0 }; +char DICTIONARY_MEMORY_ADDR[DICT_BUF_SIZE] = { 0 }; +char BLOCK_MEMORY_ADDR[BLOCK_BUF_SIZE] = { 0 }; + +int xz_decompress_buf_to_buf(uint8_t* header, write_cb_t* out_cb, read_cb_t* in_cb) +{ + uint32_t nowPos = 0, out_size = 0, out_size_processed = 0; + uint8_t properties[5]; + uint8_t prop0; + int lc, lp, pb; + uint8_t b = 0; + int ret = 0; + + uint8_t* dict = NULL; + uint32_t dict_size = 0; + uint8_t* xzInternalData = NULL; + uint32_t xzInternalSize = 0; + + memcpy(properties, header, sizeof(properties)); + header += sizeof(properties); + + for (int i = 0; i < 4; i++) + { + b = *(uint8_t*)header; + header += sizeof(b); + out_size += (uint32_t)(b) << (i * 8); + } + + if (out_size == 0xFFFFFFFF) { + return XZ_RET_STREAM_VER_NOT_SUPP; + } + + for (int i = 0; i < 4; i++) + { + b = *(uint8_t*)header; + header += sizeof(b); + if (b != 0) { + return XZ_RET_FILE_TOO_LONG; + } + } + + prop0 = properties[0]; + if (prop0 >= (9 * 5 * 5)) { + return XZ_RET_PROPERTIES_ERR; + } + + for (pb = 0; prop0 >= (9 * 5); pb++, prop0 -= (9 * 5)); + for (lp = 0; prop0 >= 9; lp++, prop0 -= 9); + lc = prop0; + + for (int i = 0; i < 4; i++) { + dict_size += (uint32_t)(properties[1 + i]) << (i * 8); + } + + //os_malloc(dict_size); + dict = (void*)DICTIONARY_MEMORY_ADDR; + if (dict == NULL) { + return XZ_RET_MEM_ALLOC_FILED; + } + if (dict_size > sizeof(DICTIONARY_MEMORY_ADDR)) { + return XZ_RET_NOT_ENOUGH_MEM; + } + memset(dict, 0, sizeof(DICTIONARY_MEMORY_ADDR)); + + //os_malloc(xzInternalSize); + xzInternalData = (void*)XZINTERNALDATA_MEMORY_ADDR; + if (xzInternalData == NULL) { + return XZ_RET_MEM_ALLOC_FILED; + } + xzInternalSize = (XZ_BASE_SIZE + (XZ_LIT_SIZE << (lc + lp))) * sizeof(prob_t); + xzInternalSize += sizeof(XzVarState); + if (xzInternalSize >= sizeof(XZINTERNALDATA_MEMORY_ADDR)) { + return XZ_RET_NOT_ENOUGH_MEM; + } + memset(xzInternalData, 0, sizeof(XZINTERNALDATA_MEMORY_ADDR)); + + //init param + { + XzVarState * vs = (XzVarState*)xzInternalData; + prob_t * p = (prob_t*)(xzInternalData + sizeof(XzVarState)); + uint32_t numProbs = Literal + ((uint32_t)XZ_LIT_SIZE << (lc + lp)); + + vs->Dictionary = dict; + vs->DictionarySize = dict_size; + vs->DictionaryPos = 0; + vs->GlobalPos = 0; + vs->Reps[0] = vs->Reps[1] = vs->Reps[2] = vs->Reps[3] = 1; + vs->lc = lc; + vs->lp = lp; + vs->pb = pb; + vs->State = 0; + vs->PreviousIsMatch = 0; + vs->RemainLen = 0; + + for (uint32_t i = 0; i < numProbs; i++) { + p[i] = kBitModelTotal >> 1; + } + RangeDecoderInit(&vs->RangeDecoder, in_cb); + } + + //decode + for (nowPos = 0; nowPos < out_size;) + { + uint8_t* dest = (uint8_t*)BLOCK_MEMORY_ADDR; + uint32_t blockSize = out_size - nowPos; + if (blockSize > sizeof(BLOCK_MEMORY_ADDR)) { + blockSize = sizeof(BLOCK_MEMORY_ADDR); + } + + if (XZ_RET_OK != (ret = xz_decode((uint8_t*)xzInternalData, ((uint8_t*)dest), blockSize, &out_size_processed))) { + return ret; + } + if (out_size_processed == 0) { + out_size = nowPos; + break; + } + out_cb->Write(nowPos, dest, out_size_processed); + + nowPos += out_size_processed; + } + + return 0; +} + + + + + diff --git a/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/xz_decompress.h b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/xz_decompress.h new file mode 100644 index 0000000000000000000000000000000000000000..641cbcba03bc0ad2bff06e4175351f3dac0cd5f0 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fota/ota_agent/xz_decompress.h @@ -0,0 +1,43 @@ + +#ifndef __XZ_DECOMPRESS_H__ +#define __XZ_DECOMPRESS_H__ + +#include "stdint.h" + +#define prob_t uint16_t //uint32_t + +#define INTERNAL_DATA_BUF_SIZE (16*1024) +#define DICT_BUF_SIZE (4*1024) +#define BLOCK_BUF_SIZE (1*1024) + +typedef enum { + XZ_RET_OK = 0, + XZ_RET_DATA_ERR = -1, + XZ_RET_NOT_ENOUGH_MEM = -2, + XZ_RET_STREAM_VER_NOT_SUPP = -3, + XZ_RET_FILE_TOO_LONG = -4, + XZ_RET_PROPERTIES_ERR = -5, + XZ_RET_MEM_ALLOC_FILED = -6, +}xz_errno_t; + + +typedef struct +{ + int(*Read)(uint8_t** buf, uint32_t* buf_len); +} read_cb_t; + +typedef struct +{ + int(*Write)(uint32_t offset, uint8_t* buf, uint32_t buf_len); +} write_cb_t; + +typedef struct +{ + uint8_t header[13]; +} xz_header_t; + + +int xz_decompress_buf_to_buf(uint8_t* header, write_cb_t* out_cb, read_cb_t* in_cb); + +#endif /* __XZ_DECOMPRESS_H__ */ + diff --git a/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv/ln_kv.c b/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv/ln_kv.c new file mode 100644 index 0000000000000000000000000000000000000000..d06470664fdcf8da2477588b6a6f57001eb0b971 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv/ln_kv.c @@ -0,0 +1,1110 @@ +#include "ln_kv.h" +#include "string.h" +#include "ln_kv_api.h" + +static kv_ctl_t kv_ctl; +static kv_err_t kv_gc(void); + +static uint8_t kv_checksum_crc8(uint8_t *buf, int nbyte) +{ + int i; + uint8_t crc = 0; + +#define POLY 0x31 +#define WIDTH 8 +#define TOP_BIT 0x80 + + while (nbyte--) { + crc ^= *buf++; + for (i = 0; i < WIDTH; ++i) { + if (crc & TOP_BIT) { + crc = (crc << 1) ^ POLY; + } else { + crc <<= 1; + } + } + crc &= 0xFF; + } + + return crc; +} + +__STATIC_INLINE__ void kv_lock(void) +{ +#ifndef KV_CONFIG_OS_NONE + if (ln_kv_is_os_running()) { + ln_kv_mutex_lock(KV_MGR_LOCK); + } +#endif +} + +__STATIC_INLINE__ void kv_unlock(void) +{ +#ifndef KV_CONFIG_OS_NONE + if (ln_kv_is_os_running()) { + ln_kv_mutex_unlock(KV_MGR_LOCK); + } +#endif +} + +static kv_err_t kv_flash_read(uint32_t addr, void *buf, size_t buf_size) +{ + if (KV_FLASH_READ(addr, buf, buf_size) < 0) { + return KV_ERR_FLASH_READ_FAILED; + } + return KV_ERR_NONE; +} + +static kv_err_t kv_flash_write(uint32_t addr, void *buf, size_t buf_size) +{ + if (KV_FLASH_WRITE(addr, buf, buf_size) < 0) { + return KV_ERR_FLASH_WRITE_FAILED; + } + return KV_ERR_NONE; +} + +static kv_err_t kv_flash_erase(uint32_t start, size_t len) +{ + if (KV_FLASH_ERASE(start, len) < 0) { + return KV_ERR_FLASH_ERASE_FAILED; + } + return KV_ERR_NONE; +} + +static kv_err_t kv_flash_wunit_modify(uint32_t addr, kv_wunit_t data) +{ + return kv_flash_write(addr, &data, sizeof(kv_wunit_t)); +} + +static kv_err_t kv_flash_blk_erase(uint32_t blk_start) +{ + return kv_flash_erase(blk_start, KV_BLK_SIZE); +} + +static void kv_flash_ctl_init(uint32_t flash_start, uint32_t flash_end, kv_flash_drv_t *flash_drv, kv_flash_prop_t *flash_prop) +{ + memcpy(&kv_ctl.flash_ctl.flash_drv, flash_drv, sizeof(kv_flash_drv_t)); + + KV_FLASH_START = flash_start; + KV_FLASH_END = flash_end; + KV_FLASH_SECTOR_SIZE_LOG2 = flash_prop->sector_size_log2; + + KV_FLASH_WRITE_ALIGN = sizeof(kv_byte_t); +} + +static kv_err_t kv_blk_hdr_read(uint32_t blk_start, kv_blk_hdr_t *blk_hdr) +{ + return kv_flash_read(blk_start, blk_hdr, sizeof(kv_blk_hdr_t)); +} + +static kv_err_t kv_blk_format(uint32_t blk_start) +{ + if (kv_flash_blk_erase(blk_start) != KV_ERR_NONE) { + return KV_ERR_FLASH_ERASE_FAILED; + } + + if (kv_flash_wunit_modify(KV_ADDR_OF_FIELD(blk_start, kv_blk_hdr_t, magic), + KV_BLK_HDR_MAGIC) != KV_ERR_NONE) { + return KV_ERR_FLASH_WRITE_FAILED; + } + + kv_blk_set_fresh(blk_start); + + return KV_ERR_NONE; +} + +static uint32_t kv_blk_next_fresh(void) +{ + uint32_t cur_blk; + + KV_BLK_FOR_EACH_FROM(cur_blk, KV_MGR_WORKSPACE) { + if (kv_blk_is_fresh(cur_blk)) { + return cur_blk; + } + } + + return KV_BLK_INVALID; +} + +static uint32_t kv_blk_search_inuse(uint32_t item_size) +{ + uint32_t cur_blk; + + KV_BLK_FOR_EACH_FROM(cur_blk, KV_MGR_WORKSPACE) { + if (kv_blk_is_inuse(cur_blk) && + kv_blk_freesz_get(cur_blk) >= item_size) { + return cur_blk; + } + } + + return KV_BLK_INVALID; +} + +static uint32_t kv_blk_search_suitable(uint32_t item_size) +{ + uint32_t the_blk; + + // no more writeable block, no need to do the next logic + if (KV_NO_WRITEABLE_BLK()) { + return KV_BLK_INVALID; + } + + // no more blocks with sufficient space, searched before + if (KV_MGR_WORKSPACE == KV_BLK_INVALID) { + return KV_BLK_INVALID; + } + + do { + // current workspace is just ok(workspace is kinda cache) + if (kv_blk_freesz_get(KV_MGR_WORKSPACE) >= item_size) { + return KV_MGR_WORKSPACE; + } + + // first we should search in inuse blocks + the_blk = kv_blk_search_inuse(item_size); + if (the_blk != KV_BLK_INVALID) { + KV_MGR_WORKSPACE = the_blk; + return KV_MGR_WORKSPACE; + } + + // no more fresh block, cannot allocate new block and cannot do gc neither. + if (KV_MGR_BLK_NUM_FRESH < 1) { + return KV_BLK_INVALID; + } + + // if we have more than one fresh block, just give it out + if (KV_MGR_BLK_NUM_FRESH > 1) { + KV_MGR_WORKSPACE = kv_blk_next_fresh(); + return KV_MGR_WORKSPACE; + } + + // no more block inuse has sufficient space, and only one fresh block left, we should try gc + if (KV_MGR_BLK_NUM_FRESH == 1) { + if (kv_gc() != KV_ERR_NONE) { + // no more dirty block to gc, we give out the last precious fresh block(no more gc any more) + KV_MGR_WORKSPACE = kv_blk_next_fresh(); + return KV_MGR_WORKSPACE; + } + } + } while (LN_TRUE); +} + +static kv_err_t kv_item_hdr_write(uint32_t item_start, kv_item_hdr_t *item_hdr) +{ + if (kv_flash_write(KV_ADDR_OF_FIELD(item_start, kv_item_hdr_t, checksum), + &item_hdr->checksum, + KV_ITEM_HDR_SIZE - sizeof(kv_wunit_t) * 2) != KV_ERR_NONE) { + return KV_ERR_FLASH_WRITE_FAILED; + } + + return kv_flash_wunit_modify(KV_ADDR_OF_FIELD(item_start, kv_item_hdr_t, magic), + item_hdr->magic); +} + +static kv_err_t kv_item_write(uint32_t item_start, kv_item_hdr_t *item_hdr, const uint8_t *item_body, uint32_t item_body_len) +{ + // write header, if a power down happen here, we can know it by header magic verify. + if (kv_item_hdr_write(item_start, item_hdr) != KV_ERR_NONE) { + return KV_ERR_FLASH_WRITE_FAILED; + } + + // if a power down happen here, we can know it by checksum verify. + + // write body(key & value) + return kv_flash_write(item_start + KV_ITEM_HDR_SIZE, (void *)item_body, item_body_len); +} + +static kv_err_t kv_item_hdr_read(uint32_t item_start, kv_item_hdr_t *item_hdr) +{ + return kv_flash_read(item_start, item_hdr, sizeof(kv_item_hdr_t)); +} + +static kv_err_t kv_item_body_read(kv_item_t *item) +{ + uint8_t *kv_buf = NULL; + + kv_buf = (uint8_t *)ln_kv_malloc(KV_ITEM_SIZE_OF_BODY(item)); + if (!kv_buf) { + return KV_ERR_OUT_OF_MEMORY; + } + + if (kv_flash_read(KV_ITEM_ADDR_OF_BODY(item), kv_buf, + KV_ITEM_SIZE_OF_BODY(item)) != KV_ERR_NONE) { + ln_kv_free(kv_buf); + return KV_ERR_FLASH_READ_FAILED; + } + + item->body = kv_buf; + + return KV_ERR_NONE; +} + +static kv_err_t kv_item_do_delete(uint32_t item_start) +{ + // set the discarded_flag on the flash + return kv_flash_wunit_modify(KV_ADDR_OF_FIELD(item_start, kv_item_hdr_t, discarded_flag), KV_ITEM_DISCARDED); +} + +static kv_err_t kv_item_delete_aux(uint32_t item_start) +{ + if (kv_item_do_delete(item_start) != KV_ERR_NONE) { + return KV_ERR_FLASH_WRITE_FAILED; + } + + kv_blk_set_dirty(KV_ITEM_ADDR2BLK(item_start)); + + return KV_ERR_NONE; +} + +static kv_err_t kv_item_delete(kv_item_t *item) +{ + return kv_item_delete_aux(item->pos); +} + +static kv_err_t kv_item_try_delete(kv_item_t *item) +{ + uint8_t *prev_key; + uint32_t prev_pos; + uint8_t prev_k_len, k_len; + kv_item_hdr_t prev_item_hdr; + + prev_pos = item->hdr.prev_pos; + + if (kv_item_hdr_read(prev_pos, &prev_item_hdr) != KV_ERR_NONE) { + return KV_ERR_FLASH_READ_FAILED; + } + + if (!KV_ITEM_IS_LEGAL(&prev_item_hdr) || + KV_ITEM_IS_DISCARDED(&prev_item_hdr)) { + /* situation 1 in kv_item_update, the prev_pos is in a fresh block now(for gc sake), + no need to delete the previous one. + */ + return KV_ERR_NONE; + } + + // test if situation 2 in kv_item_update happened + + k_len = item->hdr.k_len; + prev_k_len = prev_item_hdr.k_len; + + if (k_len != prev_k_len) { + return KV_ERR_NONE; + } + + prev_key = (uint8_t *)ln_kv_malloc(k_len); + if (!prev_key) { + return KV_ERR_OUT_OF_MEMORY; + } + + if (kv_flash_read(prev_pos + KV_ITEM_HDR_SIZE, prev_key, k_len) != KV_ERR_NONE) { + ln_kv_free(prev_key); + return KV_ERR_FLASH_READ_FAILED; + } + + // key changes, means another turn of gc happened, the previous block is filled with new item. + if (memcmp(prev_key, (void *)KV_ITEM_ADDR_OF_BODY(item), k_len) != 0) { + ln_kv_free(prev_key); + return KV_ERR_NONE; + } + + // the previous item is still there, delete it. + return kv_item_delete_aux(prev_pos); +} + +__STATIC_INLINE__ void kv_item_free(kv_item_t *item) +{ + if (item->body) { + ln_kv_free(item->body); + } + ln_kv_free(item); +} + +static int kv_item_hdr_verify(kv_item_hdr_t *item_hdr, uint32_t item_start, uint32_t blk_start) +{ + uint8_t k_len; + uint16_t v_len; + + k_len = item_hdr->k_len; + v_len = item_hdr->v_len; + + // 1. test key/value size + if (k_len == 0 || \ + v_len == 0 || \ + k_len == (uint8_t)-1 || \ + v_len == (uint16_t)-1) { + return LN_FALSE; + } + + // 2. test the flash address range + if (item_start + KV_ITEM_SIZE(k_len, v_len) > KV_BLK_END(blk_start)) { + return LN_FALSE; + } + + if (item_start + KV_ITEM_SIZE(k_len, v_len) > KV_FLASH_END) { + return LN_FALSE; + } + + return LN_TRUE; +} + +__STATIC_INLINE__ int kv_item_body_verify(kv_item_t *item) +{ + return item->hdr.checksum == kv_checksum_crc8(item->body, item->hdr.k_len + item->hdr.v_len); +} + +__STATIC_INLINE__ int kv_item_is_updated_one(kv_item_t *item) +{ + return item->hdr.prev_pos != 0 && item->pos != item->hdr.prev_pos; +} + +static int kv_item_is_moved(kv_item_t *item) +{ + kv_err_t err; + int is_moved = LN_FALSE; + kv_item_hdr_t item_hdr; + uint8_t *body_backup = NULL; + + // drag the header out of the flash + err = kv_item_hdr_read(item->pos, &item_hdr); + if (err != KV_ERR_NONE) { + return LN_FALSE; + } + + // compare the header + if (memcmp(&item_hdr, &item->hdr, sizeof(kv_item_hdr_t)) != 0) { + return LN_TRUE; + } + + // backup the body + body_backup = item->body; + + // drag the body out of the flash + err = kv_item_body_read(item); + if (err != KV_ERR_NONE) { + return LN_FALSE; + } + + // compare the body + if (memcmp(body_backup, item->body, item->hdr.k_len + item->hdr.v_len) != 0) { + is_moved = LN_TRUE; + } + + ln_kv_free(item->body); + item->body = body_backup; + + return is_moved; +} + +static kv_err_t kv_item_do_gc(kv_item_t *item, const void *dummy) +{ + kv_err_t err; + + err = kv_item_body_read(item); + if (err != KV_ERR_NONE) { + return err; + } + + if (kv_item_write(KV_BLK_USABLE_ADDR(KV_MGR_WORKSPACE), + &item->hdr, item->body, + KV_ITEM_SIZE_OF_BODY(item)) != KV_ERR_NONE) { + return KV_ERR_FLASH_WRITE_FAILED; + } + + // reduce the free_size + kv_blk_freesz_reduce(KV_MGR_WORKSPACE, KV_ITEM_SIZE_OF_ITEM(item)); + + return KV_ERR_NEXT_LOOP; +} + +static kv_err_t kv_item_do_fetch_new_copy(kv_item_t *item, const void *the_item) +{ + kv_err_t err; + kv_item_t *dst_item; + uint8_t k_len, dst_k_len; + uint16_t v_len, dst_v_len; + + dst_item = (kv_item_t *)the_item; + dst_k_len = dst_item->hdr.k_len; + dst_v_len = dst_item->hdr.v_len; + + k_len = item->hdr.k_len; + v_len = item->hdr.v_len; + + if (k_len != dst_k_len || + v_len != dst_v_len) { + return KV_ERR_NEXT_LOOP; + } + + err = kv_item_body_read(item); + if (err != KV_ERR_NONE) { + return err; + } + + if (memcmp(item->body, dst_item->body, k_len + v_len) == 0) { + return KV_ERR_NONE; + } + + return KV_ERR_NEXT_LOOP; +} + +static kv_err_t kv_item_do_fetch(kv_item_t *item, const void *key) +{ + kv_err_t err; + uint8_t k_len; + + k_len = item->hdr.k_len; + + if (strlen((const char *)key) != k_len) { + return KV_ERR_NEXT_LOOP; + } + + err = kv_item_body_read(item); + if (err != KV_ERR_NONE) { + return err; + } + + if (memcmp(item->body, key, k_len) == 0) { + return KV_ERR_NONE; + } + + return KV_ERR_NEXT_LOOP; +} + +static kv_err_t kv_item_do_recovery(kv_item_t *item, const void *dummy) +{ + kv_err_t err; + + err = kv_item_body_read(item); + if (err != KV_ERR_NONE) { + return err; + } + + if (!kv_item_body_verify(item)) { + err = kv_item_delete(item); + } else if (kv_item_is_updated_one(item)) { + err = kv_item_try_delete(item); + } + + if (err != KV_ERR_NONE) { + return err; + } + + return KV_ERR_NEXT_LOOP; +} + +static kv_err_t kv_item_walkthru(uint32_t blk_start,kv_item_walker_t walker, + const void *patten, + kv_item_t **item_out) +{ + kv_err_t err; + uint32_t cur_item; + kv_item_t *item; + kv_item_hdr_t *item_hdr; + int is_item_integral = LN_TRUE; + + if (item_out) { + *item_out = NULL; + } + + cur_item = KV_BLK_FIRST_ITEM(blk_start); + + do { + is_item_integral = LN_TRUE; + + item = (kv_item_t *)ln_kv_malloc(sizeof(kv_item_t)); + if (!item) { + return KV_ERR_OUT_OF_MEMORY; + } + + item->body = NULL; + item_hdr = &item->hdr; + + // drag the item header out of the flash to see whether is a legal item + err = kv_item_hdr_read(cur_item, item_hdr); + if (err != KV_ERR_NONE) { + kv_item_free(item); + return err; + } + + if (!KV_ITEM_IS_LEGAL(item_hdr)) { + if (KV_ITEM_IS_FRESH(item_hdr)) { + // situation 1, it's a fresh item slot, meet the ending + kv_item_free(item); + break; + } + + // situation 2, meet power down, probably broken, just mark the item as discarded + is_item_integral = LN_FALSE; + } + + if (!is_item_integral || + !kv_item_hdr_verify(item_hdr, cur_item, blk_start)) { + // it's no integral item, or header verify illegal + if (kv_item_do_delete(cur_item) == KV_ERR_NONE) { + kv_blk_set_dirty(blk_start); + } + + cur_item += KV_ITEM_HDR_SIZE; + kv_item_free(item); + + continue; + } + + if (!KV_ITEM_IS_DISCARDED(item_hdr)) { + // tell the item where he is, he does not know yet. + item->pos = cur_item; + + err = walker(item, patten); + if (err == KV_ERR_NONE) { + if (item_out) { + *item_out = item; + } + return KV_ERR_NONE; + } else if (err != KV_ERR_NEXT_LOOP) { + kv_item_free(item); + return err; + } + } else { + // it's a discarded item, deleted before + kv_blk_set_dirty(blk_start); + } + + cur_item += KV_ITEM_SIZE(item_hdr->k_len, item_hdr->v_len); + kv_item_free(item); + } while (cur_item + KV_ITEM_HDR_SIZE < KV_BLK_END(blk_start)); + + // have walked through all the items, get enough information to refresh the index(blk_info). + if (cur_item == KV_BLK_FIRST_ITEM(blk_start)) { + // come from fresh block break + kv_blk_set_fresh(blk_start); + } else if (cur_item + KV_ITEM_HDR_SIZE < KV_BLK_END(blk_start)) { + // come from while ending + kv_blk_freesz_set(blk_start, KV_BLK_END(blk_start) - cur_item); + kv_blk_set_inuse(blk_start); + } else { + // go across the boarder, means the space left is insufficient + kv_blk_freesz_set(blk_start, 0); + kv_blk_reset_inuse(blk_start); + } + + return KV_ERR_NONE; +} + +static kv_item_t *kv_item_do_find(uint32_t blk_start, const char *key) +{ + kv_item_t *the_item; + + if (kv_item_walkthru(blk_start, kv_item_do_fetch, key, &the_item) == KV_ERR_NONE) { + return the_item; + } + + return NULL; +} + +static kv_item_t *kv_item_find(const char *key) +{ + uint32_t cur_blk; + kv_item_t *item; + + KV_BLK_FOR_EACH(cur_blk) { + if (kv_blk_is_bad(cur_blk) || + kv_blk_is_fresh(cur_blk)) { + continue; + } + + item = kv_item_do_find(cur_blk, key); + if (item) { + return item; + } + } + return NULL; +} + +static kv_item_t *kv_item_do_find_new_copy(uint32_t blk_start, kv_item_t *item) +{ + kv_item_t *the_item; + + if (kv_item_walkthru(blk_start, kv_item_do_fetch_new_copy, + item, &the_item) == KV_ERR_NONE) { + return the_item; + } + + return NULL; +} + +static kv_item_t *kv_item_find_new_copy(kv_item_t *the_item) +{ + uint32_t cur_blk; + kv_item_t *item; + + KV_BLK_FOR_EACH(cur_blk) { + if (kv_blk_is_bad(cur_blk) || + kv_blk_is_fresh(cur_blk)) { + continue; + } + + item = kv_item_do_find_new_copy(cur_blk, the_item); + if (item) { + return item; + } + } + return NULL; +} + +static kv_err_t kv_item_do_save(uint32_t item_start, const char *k, const void *v, size_t v_len, uint32_t prev_pos) +{ + kv_err_t err; + uint8_t k_len; + uint32_t kv_len; + kv_item_hdr_t item_hdr; + uint8_t *kv_buf = NULL; + + k_len = strlen(k); + kv_len = KV_ITEM_BODY_SIZE(k_len, v_len); + + kv_buf = (uint8_t *)ln_kv_malloc(kv_len); + if (!kv_buf) { + return KV_ERR_OUT_OF_MEMORY; + } + + memset(kv_buf, 0, kv_len); + memcpy(kv_buf, k, k_len); + memcpy(kv_buf + k_len, v, v_len); + + item_hdr.magic = KV_ITEM_HDR_MAGIC; + item_hdr.checksum = kv_checksum_crc8(kv_buf, k_len + v_len); + + item_hdr.k_len = k_len; + item_hdr.v_len = v_len; + item_hdr.prev_pos = prev_pos; + + // we donnot deal with the discarded_flag here + err = kv_item_write(item_start, &item_hdr, kv_buf, kv_len); + + ln_kv_free(kv_buf); + + return err; +} + +static int kv_item_value_is_match(kv_item_t *item, const void *value, size_t value_len) +{ + uint8_t k_len; + uint16_t v_len; + + k_len = item->hdr.k_len; + v_len = item->hdr.v_len; + + if (value_len != v_len) { + return LN_FALSE; + } + + if (memcmp(item->body + k_len, value, v_len) != 0) { + return LN_FALSE; + } + + return LN_TRUE; +} + +static kv_err_t kv_item_fix(kv_item_t *item) +{ + kv_item_t *moved_item; + + moved_item = kv_item_find_new_copy(item); + if (!moved_item) { + return KV_ERR_POS_FIX_FAILED; + } + + item->pos = moved_item->pos; + + kv_item_free(moved_item); + + return KV_ERR_NONE; +} + +static kv_err_t kv_item_save(const char *k, const void *v, size_t v_len, kv_item_t *prev_item) +{ + kv_err_t err; + uint32_t blk_start, k_len, item_size; + + k_len = strlen(k); + item_size = KV_ITEM_SIZE(k_len, v_len); + + blk_start = kv_blk_search_suitable(item_size); + if (blk_start == KV_BLK_INVALID) { + return KV_ERR_INSUFFICIENT_SPACE; + } + + if (prev_item && kv_item_is_moved(prev_item)) { + err = kv_item_fix(prev_item); + if (err != KV_ERR_NONE) { + return err; + } + } + + err = kv_item_do_save(KV_BLK_USABLE_ADDR(blk_start), k, v, v_len, prev_item ? prev_item->pos : 0); + if (err != KV_ERR_NONE) { + return err; + } + + // reduce the free_size + kv_blk_freesz_reduce(blk_start, item_size); + + if (kv_blk_is_fresh(blk_start)) { + kv_blk_reset_fresh(blk_start); + + if (!kv_blk_is_full(blk_start)) { + kv_blk_set_inuse(blk_start); + } + } else if (kv_blk_is_full(blk_start)) { + kv_blk_reset_inuse(blk_start); + } + + return KV_ERR_NONE; +} + +static kv_err_t kv_item_update(kv_item_t *item, const char *key, const void *value, size_t value_len) +{ + kv_err_t err; + + if (kv_item_value_is_match(item, value, value_len)) { + return KV_ERR_NONE; + } + + /* save first, then delete, is trying best to keep data integrality. */ + + err = kv_item_save(key, value, value_len, item); + if (err != KV_ERR_NONE) { + return err; + } + + return kv_item_delete(item); +} + +static kv_err_t kv_param_verify(uint32_t flash_start, uint32_t flash_end, kv_flash_drv_t *flash_drv, kv_flash_prop_t *flash_prop) +{ + if (!flash_drv || !flash_prop) { + return KV_ERR_INVALID_PARAM; + } + + if (!KV_IS_ALINGED_LOG2(flash_start, flash_prop->sector_size_log2)) { + return KV_ERR_INVALID_PARAM; + } + + if (!KV_IS_ALINGED_LOG2(flash_end, flash_prop->sector_size_log2)) { + return KV_ERR_INVALID_PARAM; + } + + return KV_ERR_NONE; +} + +__STATIC_INLINE__ kv_err_t kv_mgr_index_build(uint32_t blk_start) +{ + return kv_item_walkthru(blk_start, kv_item_do_recovery, NULL, NULL); +} + +static int kv_mgr_blk_index_rebuild(void) +{ + uint32_t cur_blk; + int is_rebuild_done = LN_FALSE; + + KV_BLK_FOR_EACH(cur_blk) { + if (kv_blk_is_hanging(cur_blk)) { + if (kv_mgr_index_build(cur_blk) == KV_ERR_NONE) { + kv_blk_reset_hanging(cur_blk); + is_rebuild_done = LN_TRUE; + } + } + } + + return is_rebuild_done; +} + +static kv_err_t kv_mgr_workspace_locate(void) +{ + uint32_t cur_blk; + + /* we give blocks with KV_BLK_FLAG_HANGING a chance to rebuild index */ + if (KV_MGR_BLK_NUM_HANGING > 0) { + kv_mgr_blk_index_rebuild(); + } + + if (KV_NO_WRITEABLE_BLK()) { + return KV_ERR_NO_WRITEABLE_BLK; + } + + KV_BLK_FOR_EACH(cur_blk) { + if (KV_MGR_BLK_NUM_INUSE == 0) { + if (kv_blk_is_fresh(cur_blk)) { + KV_MGR_WORKSPACE = cur_blk; + return KV_ERR_NONE; + } + } else if (kv_blk_is_inuse(cur_blk)) { + KV_MGR_WORKSPACE = cur_blk; + return KV_ERR_NONE; + } + } + + return KV_ERR_NONE; +} + +static void kv_mgr_ctl_build(void) +{ + uint32_t cur_blk; + kv_blk_hdr_t blk_hdr; + + KV_BLK_FOR_EACH(cur_blk) { + if (kv_blk_hdr_read(cur_blk, &blk_hdr) != KV_ERR_NONE) { + // sth must be wrong seriously with this block + kv_blk_set_bad(cur_blk); + continue; + } + + if (!KV_BLK_IS_LEGAL(&blk_hdr)) { + if (kv_blk_format(cur_blk) != KV_ERR_NONE) { + // sth must be wrong seriously with this block + kv_blk_set_bad(cur_blk); + } + // we get a fresh block + continue; + } + + // do index building + if (kv_mgr_index_build(cur_blk) != KV_ERR_NONE) { + // sth goes wrong while index building, we give it a mark + kv_blk_set_hanging(cur_blk); + continue; + } + } +} + +static kv_err_t kv_mgr_ctl_init(void) +{ + kv_blk_detail_t *blk_detail; + + KV_MGR_BLK_NUM_TOTAL = KV_FLASH_SIZE / KV_FLASH_SECTOR_SIZE; + + blk_detail = (kv_blk_detail_t *)ln_kv_malloc(sizeof(kv_blk_detail_t) * KV_MGR_BLK_NUM_TOTAL); + if (!blk_detail) { + return KV_ERR_OUT_OF_MEMORY; + } + + memset(blk_detail, 0, sizeof(kv_blk_detail_t) * KV_MGR_BLK_NUM_TOTAL); + KV_MGR_BLK_DETAIL = blk_detail; + +#ifndef KV_CONFIG_OS_NONE + if (ln_kv_mutex_create(KV_MGR_LOCK) != LN_TRUE) { + return KV_ERR_INTERNAL_ERROR; + } +#endif + + return KV_ERR_NONE; +} + +static void kv_mgr_ctl_deinit(void) +{ +#ifndef KV_CONFIG_OS_NONE + ln_kv_mutex_delete(KV_MGR_LOCK); +#endif + ln_kv_free(KV_MGR_BLK_DETAIL); + KV_MGR_BLK_DETAIL = NULL; + + memset(&kv_ctl, 0, sizeof(kv_ctl)); +} + +static kv_err_t kv_do_gc(uint32_t dirty_blk) +{ + return kv_item_walkthru(dirty_blk, kv_item_do_gc, NULL, NULL); +} + +static kv_err_t kv_gc(void) +{ + uint32_t cur_blk, workspace_backup; + int is_gc_done = LN_FALSE, is_rebuild_done = LN_FALSE; + + /* we give blocks with KV_BLK_FLAG_HANGING a chance to rebuild index */ + if (KV_MGR_BLK_NUM_HANGING > 0) { + is_rebuild_done = kv_mgr_blk_index_rebuild(); + } + + workspace_backup = KV_MGR_WORKSPACE; + + // there must be at least one fresh block left, make workspace pointer to the fresh one + KV_MGR_WORKSPACE = kv_blk_next_fresh(); + + KV_BLK_FOR_EACH(cur_blk) { + if (kv_blk_is_dirty(cur_blk)) { + if (kv_do_gc(cur_blk) != KV_ERR_NONE) { + // cannot do gc for this block, give others a try + continue; + } + + kv_blk_reset_inuse(cur_blk); + + if (kv_blk_format(cur_blk) != KV_ERR_NONE) { + kv_blk_set_bad(cur_blk); + } + + kv_blk_reset_fresh(KV_MGR_WORKSPACE); + + if (!kv_blk_is_full(KV_MGR_WORKSPACE)) { + kv_blk_set_inuse(KV_MGR_WORKSPACE); + } + + is_gc_done = LN_TRUE; + + break; + } + } + + if (!is_gc_done) { + // if do nothing, should restore the workspace; + KV_MGR_WORKSPACE = workspace_backup; + } + + return (is_gc_done || is_rebuild_done) ? KV_ERR_NONE : KV_ERR_GC_NOTHING; +} + +kv_err_t ln_kv_init(uint32_t flash_start, uint32_t flash_end, kv_flash_drv_t *flash_drv, kv_flash_prop_t *flash_prop) +{ + kv_err_t err; + + if (kv_param_verify(flash_start, flash_end, flash_drv, flash_prop) != KV_ERR_NONE) { + return KV_ERR_INVALID_PARAM; + } + + memset(&kv_ctl, 0, sizeof(kv_ctl)); + + kv_flash_ctl_init(flash_start, flash_end, flash_drv, flash_prop); + + err = kv_mgr_ctl_init(); + if (err != KV_ERR_NONE) { + return err; + } + + kv_mgr_ctl_build(); + + return kv_mgr_workspace_locate(); +} + +kv_err_t ln_kv_deinit(void) +{ + kv_mgr_ctl_deinit(); + return KV_ERR_NONE; +} + +kv_err_t ln_kv_set(const char *key, const void *value, size_t value_len) +{ + kv_err_t err; + kv_item_t *item; + + if (!key || !value) { + return KV_ERR_INVALID_PARAM; + } + + if (strlen(key) >= (uint8_t)-1 || + value_len >= (uint16_t)-1) { + return KV_ERR_SIZE_EXCEEDED; + } + + kv_lock(); + + item = kv_item_find(key); + if (item) { // already exist + err = kv_item_update(item, key, value, value_len); + kv_item_free(item); + } else { + err = kv_item_save(key, value, value_len, NULL); + } + + kv_unlock(); + + return err; +} + +kv_err_t ln_kv_get(const char *key, void *value_buf, size_t value_buf_size, size_t *value_len) +{ + uint8_t k_len; + uint16_t v_len; + kv_item_t *item; + + if (!key || !value_buf || !value_len) { + return KV_ERR_INVALID_PARAM; + } + + if (strlen(key) >= (uint8_t)-1) { + return KV_ERR_SIZE_EXCEEDED; + } + + kv_lock(); + + item = kv_item_find(key); + if (!item) { + kv_unlock(); + return KV_ERR_NOT_EXIST; + } + + kv_unlock(); + + k_len = item->hdr.k_len; + v_len = item->hdr.v_len; + *value_len = v_len; + + if (value_buf_size < v_len) { + kv_item_free(item); + return KV_ERR_BUF_TOO_SHORT; + } + + memcpy(value_buf, item->body + k_len, v_len); + kv_item_free(item); + + return KV_ERR_NONE; +} + +int ln_kv_has_key(const char *key) +{ + int has_key; + + if (!key) { + return KV_ERR_INVALID_PARAM; + } + + if (strlen(key) >= (uint8_t)-1) { + return KV_ERR_SIZE_EXCEEDED; + } + + kv_lock(); + has_key = kv_item_find(key) ? LN_TRUE : LN_FALSE; + kv_unlock(); + + return has_key; +} + +kv_err_t ln_kv_del(const char *key) +{ + kv_err_t err; + kv_item_t *item; + + if (!key) { + return KV_ERR_INVALID_PARAM; + } + + if (strlen(key) >= (uint8_t)-1) { + return KV_ERR_SIZE_EXCEEDED; + } + + kv_lock(); + + item = kv_item_find(key); + if (!item) { + kv_unlock(); + return KV_ERR_NOT_EXIST; + } + + err = kv_item_delete(item); + kv_item_free(item); + + kv_unlock(); + + return err; +} + diff --git a/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv/ln_kv.h b/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv/ln_kv.h new file mode 100644 index 0000000000000000000000000000000000000000..59119408778ce178499bd97b7f3347eaf1bb987d --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv/ln_kv.h @@ -0,0 +1,291 @@ +#ifndef __LN_KV_H__ +#define __LN_KV_H__ + +#include "ln_compiler.h" +#include "ln_types.h" +#include "ln_kv_err.h" +#include "ln_kv_flash.h" +#include "ln_kv_port.h" +#include "ln_kv_api.h" + +typedef uint64_t kv_wunit_t; + +typedef uint8_t kv_byte_t; // byte +typedef uint16_t kv_hword_t; // half word +typedef uint32_t kv_word_t; // word +typedef uint64_t kv_dword_t; // double word + +#define KV_BLK_FLAG_FRESH 0x01 /* a totally virgin block */ +#define KV_BLK_FLAG_INUSE 0x02 /* in-use */ +#define KV_BLK_FLAG_DIRTY 0x04 /* has discarded item inside */ +#define KV_BLK_FLAG_BAD 0x08 /* bad block, maybe device error */ +#define KV_BLK_FLAG_HANGING 0x10 /* index building failed, we mark a hanging flag here, and will give another chance to do a retry */ + +#define KV_FLASH_START (kv_ctl.flash_ctl.flash_start) +#define KV_FLASH_END (kv_ctl.flash_ctl.flash_end) +#define KV_FLASH_SIZE (KV_FLASH_END - KV_FLASH_START) +#define KV_FLASH_SECTOR_SIZE_LOG2 (kv_ctl.flash_ctl.sector_size_log2) +#define KV_FLASH_SECTOR_SIZE (1 << KV_FLASH_SECTOR_SIZE_LOG2) +#define KV_FLASH_WRITE_ALIGN (kv_ctl.flash_ctl.flash_write_align) + +#define KV_FLASH_WRITE ((kv_flash_write_t)(kv_ctl.flash_ctl.flash_drv.write)) +#define KV_FLASH_READ ((kv_flash_read_t)(kv_ctl.flash_ctl.flash_drv.read)) +#define KV_FLASH_ERASE ((kv_flash_erase_t)(kv_ctl.flash_ctl.flash_drv.erase)) + +#define KV_IS_ALINGED(v, align) ((v) % (align) == 0) +#define KV_IS_ALINGED_LOG2(v, align_log2) KV_IS_ALINGED(v, (1 << (align_log2))) +#define KV_ALIGN_UP(v, align) (((v) + ((align) - 1)) & ~((align) - 1)) +#define KV_ALIGN_DOWN(v, align) ((v) - ((v) & ((align) - 1))) +#define KV_OFFSET_OF_FIELD(type, field) ((uint32_t)&(((type *)0)->field)) +#define KV_ADDR_OF_FIELD(addr, type, field) (addr + KV_OFFSET_OF_FIELD(type, field)) + +#define KV_ALIGNED_SIZE(len) KV_ALIGN_UP(len, KV_FLASH_WRITE_ALIGN) + +#ifndef KV_CONFIG_OS_NONE + #define KV_MGR_LOCK (&kv_ctl.mgr_ctl.kv_lock) +#endif +#define KV_MGR_BLK_NUM_FRESH (kv_ctl.mgr_ctl.blk_info.num_fresh) +#define KV_MGR_BLK_NUM_INUSE (kv_ctl.mgr_ctl.blk_info.num_inuse) +#define KV_MGR_BLK_NUM_HANGING (kv_ctl.mgr_ctl.blk_info.num_hanging) +#define KV_MGR_BLK_NUM_TOTAL (kv_ctl.mgr_ctl.blk_info.num_total) +#define KV_MGR_BLK_DETAIL (kv_ctl.mgr_ctl.blk_info.blk_detail) +#define KV_MGR_WORKSPACE (kv_ctl.mgr_ctl.workspace) + +#define KV_NO_WRITEABLE_BLK() (KV_MGR_BLK_NUM_INUSE == 0 && KV_MGR_BLK_NUM_FRESH == 0) + +#define KV_ITEM_HDR_MAGIC 0xABCD1234DCBA4321 +#define KV_ITEM_DISCARDED 0x0F0F0F0F0F0F0F0F +#define KV_ITEM_IS_DISCARDED(item_hdr) ((item_hdr)->discarded_flag == KV_ITEM_DISCARDED) +#define KV_ITEM_IS_LEGAL(item_hdr) ((item_hdr)->magic == KV_ITEM_HDR_MAGIC) +#define KV_ITEM_IS_FRESH(item_hdr) ((item_hdr)->magic == (kv_wunit_t)-1 && \ + (item_hdr)->discarded_flag == (kv_wunit_t)-1 && \ + (item_hdr)->checksum == (uint8_t)-1 && \ + (item_hdr)->k_len == (uint8_t)-1 && \ + (item_hdr)->v_len == (uint16_t)-1 && \ + (item_hdr)->prev_pos == (uint32_t)-1) + +#define KV_ITEM_ADDR2BLK(item_start) (KV_ALIGN_DOWN((item_start) - KV_FLASH_START, KV_BLK_SIZE) + KV_FLASH_START) +#define KV_ITEM_HDR_SIZE KV_ALIGNED_SIZE(sizeof(kv_item_hdr_t)) +#define KV_ITEM_BODY_SIZE(k_len, v_len) KV_ALIGNED_SIZE(k_len + v_len) +#define KV_ITEM_SIZE(k_len, v_len) (KV_ITEM_HDR_SIZE + KV_ITEM_BODY_SIZE(k_len, v_len)) +#define KV_ITEM_SIZE_OF_ITEM(item) KV_ITEM_SIZE(item->hdr.k_len, item->hdr.v_len) +#define KV_ITEM_SIZE_OF_BODY(item) KV_ITEM_BODY_SIZE(item->hdr.k_len, item->hdr.v_len) +#define KV_ITEM_ADDR_OF_BODY(item) (item->pos + KV_ITEM_HDR_SIZE) + +#define KV_BLK_HDR_MAGIC 0x1234ABCD4321DCBA +#define KV_BLK_IS_LEGAL(blk_hdr) ((blk_hdr)->magic == KV_BLK_HDR_MAGIC) +#define KV_BLK_INVALID ((uint32_t)-1) +#define KV_BLK_HDR_SIZE KV_ALIGNED_SIZE(sizeof(kv_blk_hdr_t)) +#define KV_BLK_SIZE (KV_FLASH_SECTOR_SIZE) +#define KV_BLK_FRESH_SIZE (KV_BLK_SIZE - KV_BLK_HDR_SIZE) +#define KV_BLK_END(blk_start) (blk_start + KV_BLK_SIZE) +#define KV_BLK_USABLE_ADDR(blk_start) (KV_BLK_END(blk_start) - kv_blk_freesz_get(blk_start)) +#define KV_BLK_ADDR2IDX(blk_start) ((blk_start - KV_FLASH_START) / KV_BLK_SIZE) +#define KV_BLK_FIRST_ITEM(blk_start) (blk_start + KV_BLK_HDR_SIZE) +#define KV_BLK_NEXT(blk_start) (blk_start + KV_BLK_SIZE >= KV_FLASH_END ? KV_FLASH_START : blk_start + KV_BLK_SIZE) + +#define KV_BLK_FOR_EACH_FROM(cur_blk, start_blk) \ + for (cur_blk = KV_BLK_NEXT(start_blk); \ + cur_blk != start_blk; \ + cur_blk = KV_BLK_NEXT(cur_blk)) + +#define KV_BLK_FOR_EACH(cur_blk) \ + for (cur_blk = KV_FLASH_START; \ + cur_blk < KV_FLASH_END; \ + cur_blk += KV_BLK_SIZE) + +typedef struct kv_flash_control_st { + uint8_t sector_size_log2; + uint8_t flash_write_align; + uint32_t flash_start; + uint32_t flash_end; + + kv_flash_drv_t flash_drv; +} kv_flash_ctl_t; + +typedef struct kv_blk_detail_st { + uint8_t blk_flags; /*< flags indicating the status of the blk, see KV_BLK_FLAG_* */ + uint32_t free_size; /*< how many usable flash left */ +} kv_blk_detail_t; + +typedef struct kv_blk_info_st { + uint16_t num_inuse; + uint16_t num_fresh; + uint16_t num_hanging; + uint16_t num_total; + + kv_blk_detail_t *blk_detail; +} kv_blk_info_t; + +typedef struct kv_manager_control_st { + uint32_t workspace; + kv_blk_info_t blk_info; + +#ifndef KV_CONFIG_OS_NONE + kv_mutex_t kv_lock; +#endif +} kv_mgr_ctl_t; + +typedef struct kv_control_st { + kv_flash_ctl_t flash_ctl; + kv_mgr_ctl_t mgr_ctl; +} kv_ctl_t; + +typedef struct kv_block_header_st { + kv_wunit_t magic; /*< is this block formatted? */ +} __PACKED__ kv_blk_hdr_t; + +typedef struct kv_item_header_st { + kv_wunit_t discarded_flag; /*< is this item a discarded one, deleted or updated */ + kv_wunit_t magic; /*< for item header integrity verification */ + uint8_t checksum; /*< checksum for key/value buffer */ + uint8_t k_len; /*< key length */ + uint16_t v_len; /*< value length */ + uint32_t prev_pos; /*< previous position of this item */ +} __PACKED__ kv_item_hdr_t; + +typedef struct kv_item_st { + kv_item_hdr_t hdr; /*< item header */ + uint32_t pos; /*< where this item is */ + uint8_t *body; /*< item body: key/value buffer */ +} kv_item_t; + +static kv_ctl_t kv_ctl; + +__STATIC_INLINE__ void kv_blk_freesz_set(uint32_t blk_start, uint32_t free_size) +{ + KV_MGR_BLK_DETAIL[KV_BLK_ADDR2IDX(blk_start)].free_size = free_size; +} + +__STATIC_INLINE__ uint32_t kv_blk_freesz_get(uint32_t blk_start) +{ + return KV_MGR_BLK_DETAIL[KV_BLK_ADDR2IDX(blk_start)].free_size; +} + +__STATIC_INLINE__ void kv_blk_freesz_reduce(uint32_t blk_start, uint32_t size_reduced) +{ + kv_blk_freesz_set(blk_start, kv_blk_freesz_get(blk_start) - size_reduced); +} + +__STATIC_INLINE__ int kv_blk_is_full(uint32_t blk_start) +{ + return kv_blk_freesz_get(blk_start) <= KV_ITEM_HDR_SIZE; +} + +__STATIC_INLINE__ void kv_blk_flags_set(uint32_t blk_start, uint8_t blk_flags) +{ + KV_MGR_BLK_DETAIL[KV_BLK_ADDR2IDX(blk_start)].blk_flags = blk_flags; +} + +__STATIC_INLINE__ uint8_t kv_blk_flags_get(uint32_t blk_start) +{ + return KV_MGR_BLK_DETAIL[KV_BLK_ADDR2IDX(blk_start)].blk_flags; +} + +__STATIC_INLINE__ void kv_blk_flags_add(uint32_t blk_start, uint8_t blk_flags) +{ + KV_MGR_BLK_DETAIL[KV_BLK_ADDR2IDX(blk_start)].blk_flags |= blk_flags; +} + +__STATIC_INLINE__ void kv_blk_flags_rmv(uint32_t blk_start, uint8_t blk_flags) +{ + KV_MGR_BLK_DETAIL[KV_BLK_ADDR2IDX(blk_start)].blk_flags &= ~blk_flags; +} + +__STATIC_INLINE__ int kv_blk_is_fresh(uint32_t blk_start) +{ + return kv_blk_flags_get(blk_start) & KV_BLK_FLAG_FRESH; +} + +__STATIC_INLINE__ int kv_blk_is_inuse(uint32_t blk_start) +{ + return kv_blk_flags_get(blk_start) & KV_BLK_FLAG_INUSE; +} + +__STATIC_INLINE__ int kv_blk_is_dirty(uint32_t blk_start) +{ + return kv_blk_flags_get(blk_start) & KV_BLK_FLAG_DIRTY; +} + +__STATIC_INLINE__ int kv_blk_is_bad(uint32_t blk_start) +{ + return kv_blk_flags_get(blk_start) & KV_BLK_FLAG_BAD; +} + +__STATIC_INLINE__ int kv_blk_is_hanging(uint32_t blk_start) +{ + return kv_blk_flags_get(blk_start) & KV_BLK_FLAG_HANGING; +} + +__STATIC_INLINE__ void kv_blk_set_fresh(uint32_t blk_start) +{ + if (!kv_blk_is_fresh(blk_start)) { + ++KV_MGR_BLK_NUM_FRESH; + } + + kv_blk_freesz_set(blk_start, KV_BLK_FRESH_SIZE); + kv_blk_flags_set(blk_start, KV_BLK_FLAG_FRESH); +} + +__STATIC_INLINE__ void kv_blk_set_inuse(uint32_t blk_start) +{ + if (!kv_blk_is_inuse(blk_start)) { + ++KV_MGR_BLK_NUM_INUSE; + } + + kv_blk_flags_add(blk_start, KV_BLK_FLAG_INUSE); +} + +__STATIC_INLINE__ void kv_blk_set_dirty(uint32_t blk_start) +{ + kv_blk_flags_add(blk_start, KV_BLK_FLAG_DIRTY); +} + +__STATIC_INLINE__ void kv_blk_set_bad(uint32_t blk_start) +{ + kv_blk_flags_set(blk_start, KV_BLK_FLAG_BAD); +} + +__STATIC_INLINE__ void kv_blk_set_hanging(uint32_t blk_start) +{ + if (!kv_blk_is_hanging(blk_start)) { + ++KV_MGR_BLK_NUM_HANGING; + } + + kv_blk_flags_add(blk_start, KV_BLK_FLAG_HANGING); +} + +__STATIC_INLINE__ void kv_blk_reset_fresh(uint32_t blk_start) +{ + if (kv_blk_is_fresh(blk_start)) { + --KV_MGR_BLK_NUM_FRESH; + } + + kv_blk_flags_rmv(blk_start, KV_BLK_FLAG_FRESH); +} + +__STATIC_INLINE__ void kv_blk_reset_inuse(uint32_t blk_start) +{ + if (kv_blk_is_inuse(blk_start)) { + --KV_MGR_BLK_NUM_INUSE; + } + + kv_blk_flags_rmv(blk_start, KV_BLK_FLAG_INUSE); +} + +__STATIC_INLINE__ void kv_blk_reset_hanging(uint32_t blk_start) +{ + if (kv_blk_is_hanging(blk_start)) { + --KV_MGR_BLK_NUM_HANGING; + } + + kv_blk_flags_rmv(blk_start, KV_BLK_FLAG_HANGING); +} + +typedef kv_err_t (*kv_item_walker_t)(kv_item_t *item, const void *patten); + +kv_err_t ln_kv_init(uint32_t flash_start, uint32_t flash_end, kv_flash_drv_t *flash_drv, kv_flash_prop_t *flash_prop); + + +#endif /* __LN_KV_H__ */ + diff --git a/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv/ln_kv_api.h b/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv/ln_kv_api.h new file mode 100644 index 0000000000000000000000000000000000000000..be0c08f5e3d20d10cdf91f0b8d02aea3793379a6 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv/ln_kv_api.h @@ -0,0 +1,16 @@ +#ifndef __LN_KV_API_H__ +#define __LN_KV_API_H__ + +#include "ln_types.h" +#include "ln_kv_err.h" +#include "ln_kv_api.h" + +kv_err_t ln_kv_port_init(uint32_t flash_start, uint32_t flash_end); +kv_err_t ln_kv_deinit(void); +kv_err_t ln_kv_set(const char *key, const void *value, size_t v_len); +kv_err_t ln_kv_get(const char *key, void *value_buf, size_t value_buf_size, size_t *v_len); +int ln_kv_has_key(const char *key); +kv_err_t ln_kv_del(const char *key); + +#endif /* __LN_KV_API_H__ */ + diff --git a/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv/ln_kv_err.h b/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv/ln_kv_err.h new file mode 100644 index 0000000000000000000000000000000000000000..3a892140d2d2a608808144376431ca9cf30608af --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv/ln_kv_err.h @@ -0,0 +1,36 @@ +#ifndef __LN_KV_ERR_H__ +#define __LN_KV_ERR_H__ + +typedef enum kv_err_en { + KV_ERR_NONE = 0u, + + KV_ERR_BUF_TOO_SHORT = 10u, + KV_ERR_BLK_STATUS_ERROR, + + KV_ERR_DATA_FETCH_FAILED = 20u, + + KV_ERR_FLASH_ERASE_FAILED = 30u, + KV_ERR_FLASH_READ_FAILED, + KV_ERR_FLASH_WRITE_FAILED, + + KV_ERR_GC_NOTHING = 40u, + + KV_ERR_INTERNAL_ERROR = 50u, + KV_ERR_INSUFFICIENT_SPACE, + KV_ERR_INVALID_PARAM, + KV_ERR_INVALID_ITEM, + + KV_ERR_NEXT_LOOP = 60u, + KV_ERR_NOT_EXIST, + KV_ERR_NO_WRITEABLE_BLK, + + KV_ERR_OUT_OF_MEMORY = 70u, + + KV_ERR_POS_FIX_FAILED =80u, + + KV_ERR_SIZE_EXCEEDED = 90u, +} kv_err_t; + + +#endif /* __LN_KV_ERR_H__ */ + diff --git a/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv/ln_kv_flash.h b/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv/ln_kv_flash.h new file mode 100644 index 0000000000000000000000000000000000000000..13184bd2559f36db33b2fbefee7684a951988717 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv/ln_kv_flash.h @@ -0,0 +1,21 @@ +#ifndef __LN_KV_FLASH_H__ +#define __LN_KV_FLASH_H__ + +#include "ln_types.h" + +typedef int (*kv_flash_write_t)(uint32_t addr, const void *buf, size_t len); +typedef int (*kv_flash_read_t)(uint32_t addr, void *buf, size_t len); +typedef int (*kv_flash_erase_t)(uint32_t addr, size_t len); + +typedef struct kv_flash_drv_st { + kv_flash_write_t write; + kv_flash_read_t read; + kv_flash_erase_t erase; +} kv_flash_drv_t; + +typedef struct kv_flash_property_st { + uint8_t sector_size_log2; +} kv_flash_prop_t; + +#endif /* __LN_KV_FLASH_H__ */ + diff --git a/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv_port/ln_kv_port.c b/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv_port/ln_kv_port.c new file mode 100644 index 0000000000000000000000000000000000000000..0c2cb38fa0691372e6faec687a27d727f6248567 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv_port/ln_kv_port.c @@ -0,0 +1,37 @@ +#include "ln_kv_port.h" +#include "ln_kv_flash.h" +#include "ln_kv.h" +#include "hal/flash.h" + + +static kv_flash_drv_t flash_drv; +static kv_flash_prop_t flash_prop; + +static int flash_read(uint32_t offset, void *buf, uint32_t len) +{ + return FLASH_Read(offset, len, buf); +} + +static int flash_write(uint32_t offset, const void *buf, uint32_t len) +{ + return FLASH_Program(offset, len, (uint8_t*)buf); +} + +static int flash_erase(uint32_t offset, uint32_t len) +{ + FLASH_Erase(offset, len); + return 0; +} + +kv_err_t ln_kv_port_init(uint32_t flash_start, uint32_t flash_end) +{ + flash_drv.read = flash_read; + flash_drv.write = flash_write; + flash_drv.erase = flash_erase; + + flash_prop.sector_size_log2 = KV_CONFIG_FLASH_SECT_SIZE_LOG2; + + return ln_kv_init(flash_start, flash_end, &flash_drv, &flash_prop); +} + + diff --git a/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv_port/ln_kv_port.h b/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv_port/ln_kv_port.h new file mode 100644 index 0000000000000000000000000000000000000000..8f317f6f16a9bed49cfb6e9e8c01110384a06164 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fs/kv/kv_port/ln_kv_port.h @@ -0,0 +1,80 @@ +#ifndef __LN_KV_PORT_H__ +#define __LN_KV_PORT_H__ + +#include "proj_config.h" +#include "ln_types.h" +#include "ln_kv_err.h" +#include "ln_compiler.h" +#include "mem_map_ln882x.h" + + +#ifndef __CONFIG_OS_KERNEL + #define KV_CONFIG_OS_NONE +#endif +#define KV_CONFIG_FLASH_SECT_SIZE_LOG2 (12) + + +#if defined(KV_CONFIG_OS_NONE) + #include "stdlib.h" + + __STATIC_INLINE__ void *ln_kv_malloc(size_t size) + { + return malloc(size); + } + + __STATIC_INLINE__ void ln_kv_free(void *ptr) + { + free(ptr); + } + +#else /* KV_CONFIG_OS_NONE */ + #include "osal/osal.h" + + typedef OS_Mutex_t kv_mutex_t; + + __STATIC_INLINE__ int ln_kv_is_os_running(void) + { + if (OS_ThreadIsSchedulerRunning()){ + return LN_TRUE; + } + return LN_FALSE; + } + + __STATIC_INLINE__ int ln_kv_mutex_create(kv_mutex_t *mutex) + { + if (OS_OK == OS_MutexCreate(mutex)) { + return LN_TRUE; + } + return LN_FALSE; + } + + __STATIC_INLINE__ void ln_kv_mutex_delete(kv_mutex_t *mutex) + { + OS_MutexDelete(mutex); + } + + __STATIC_INLINE__ void ln_kv_mutex_lock(kv_mutex_t *mutex) + { + OS_MutexLock(mutex, OS_WAIT_FOREVER); + } + + __STATIC_INLINE__ void ln_kv_mutex_unlock(kv_mutex_t *mutex) + { + OS_MutexUnlock(mutex); + } + + __STATIC_INLINE__ void *ln_kv_malloc(size_t size) + { + return OS_Malloc(size); + } + + __STATIC_INLINE__ void ln_kv_free(void *ptr) + { + OS_Free(ptr); + } +#endif /* KV_CONFIG_OS_NONE */ + + + +#endif /* __LN_KV_PORT_H__ */ + diff --git a/platform/vendor_bsp/LN/ln882x/src/nvds/nvds.c b/platform/vendor_bsp/LN/ln882x/src/fs/nvds/nvds.c similarity index 99% rename from platform/vendor_bsp/LN/ln882x/src/nvds/nvds.c rename to platform/vendor_bsp/LN/ln882x/src/fs/nvds/nvds.c index 8e83545d3523cef50965d49d85d0608457bb7939..c0a1a06265f63e04c33896ddf378045f91c843d3 100644 --- a/platform/vendor_bsp/LN/ln882x/src/nvds/nvds.c +++ b/platform/vendor_bsp/LN/ln882x/src/fs/nvds/nvds.c @@ -1,4 +1,4 @@ -#include "nvds/nvds.h" +#include "nvds.h" #include "hal/flash.h" diff --git a/platform/vendor_bsp/LN/ln882x/include/nvds/nvds.h b/platform/vendor_bsp/LN/ln882x/src/fs/nvds/nvds.h similarity index 94% rename from platform/vendor_bsp/LN/ln882x/include/nvds/nvds.h rename to platform/vendor_bsp/LN/ln882x/src/fs/nvds/nvds.h index b9030c5bcf0b281a97d1b7a71bde4a709e99f157..515f5fc2b7404c6e6c6e0f2032509fb7a93a45ad 100644 --- a/platform/vendor_bsp/LN/ln882x/include/nvds/nvds.h +++ b/platform/vendor_bsp/LN/ln882x/src/fs/nvds/nvds.h @@ -2,8 +2,9 @@ #define __NVDS_H__ #include "ln88xx.h" +#include "flash_partition_table.h" -#define USR_NVDS_SECT1_OFFSET (USR_NVDS_PARAM_OFFSET) +#define USR_NVDS_SECT1_OFFSET (NVDS_SPACE_OFFSET) #define USR_NVDS_SECT2_OFFSET (USR_NVDS_SECT1_OFFSET + SIZE_4KB) #define USR_NVDS_FLAG_OFFSET (USR_NVDS_SECT2_OFFSET + SIZE_4KB) diff --git a/platform/vendor_bsp/LN/ln882x/src/fs/partition_mgr/flash_partition_mgr.c b/platform/vendor_bsp/LN/ln882x/src/fs/partition_mgr/flash_partition_mgr.c new file mode 100644 index 0000000000000000000000000000000000000000..56068cfd3f35c2f7e627bedae6b6e786f98874e0 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fs/partition_mgr/flash_partition_mgr.c @@ -0,0 +1,61 @@ +#include "flash_partition_mgr.h" + +#include "hal/flash.h" +#include "utils/crc32.h" + + +int ln_verify_partition_table(void) +{ + partition_info_t rd_info; + + for (uint32_t i = 0; i < PARTITION_TAB_SIZE; i += sizeof(partition_info_t)) + { + FLASH_Read((PARTITION_TAB_BASE + i), sizeof(partition_info_t), (uint8_t *)&rd_info); + + if ((rd_info.type == 0) && \ + (rd_info.start_addr == 0) && \ + (rd_info.size == 0) && \ + (rd_info.crc32 == 0)) + { + return LN_TRUE; + } + else + { + if (rd_info.crc32 != ln_crc32_signle_cal((uint8_t *)&rd_info, sizeof(partition_info_t) - sizeof(uint32_t))) { + return LN_FALSE; + } + } + } + return LN_FALSE; +} + +int ln_fetch_partition_info(partition_type_t type, partition_info_t *info) +{ + if (!info) { + return LN_FALSE; + } + + for (uint32_t i = 0; i < PARTITION_TAB_SIZE; i += sizeof(partition_info_t)) + { + FLASH_Read((PARTITION_TAB_BASE + i), sizeof(partition_info_t), (uint8_t *)info); + + if (info->type == type) + { + if (info->crc32 == ln_crc32_signle_cal((uint8_t *)info, sizeof(partition_info_t) - sizeof(uint32_t))) { + return LN_TRUE; + } else { + return LN_FALSE; + } + } + else if ((info->type == 0) && \ + (info->start_addr == 0) && \ + (info->size == 0) && \ + (info->crc32 == 0)) + { + return LN_FALSE; + } + } + return LN_FALSE; +} + + diff --git a/platform/vendor_bsp/LN/ln882x/src/fs/partition_mgr/flash_partition_mgr.h b/platform/vendor_bsp/LN/ln882x/src/fs/partition_mgr/flash_partition_mgr.h new file mode 100644 index 0000000000000000000000000000000000000000..de37b4d9894294a516a3fe3e5439faabf815b3c3 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/fs/partition_mgr/flash_partition_mgr.h @@ -0,0 +1,58 @@ +#ifndef __FLASH_PARTITION_MGR_H__ +#define __FLASH_PARTITION_MGR_H__ +#include "ln_types.h" + + +#define PARTITION_TAB_BASE (1024*36)/* < Warning: Do not change it! */ +#define PARTITION_TAB_SIZE (1024*4) /* < Warning: Do not change it! */ + +typedef enum { + PARTITION_TYPE_APP = 0u, /*< application */ + PARTITION_TYPE_OTA = 1u, /*< ota temp*/ + PARTITION_TYPE_KV = 2u, /*< Key-Value */ + PARTITION_TYPE_NVDS = 3u, /*< nvds(NVRAM) */ + PARTITION_TYPE_SIMU_EEPROM = 4u, /*< simulation eeprom*/ + PARTITION_TYPE_USER = 5u, /*< user defined */ + PARTITION_TYPE_PLACE = 0x12345678, /*< make different IDEs compatible */ +} partition_type_t; + +typedef struct { + partition_type_t type; /*< what's the type of partition */ + uint32_t start_addr; /*< start address */ + uint32_t size; /*< partition size */ + uint32_t crc32; /*< checksum of the partition info except itself */ +} partition_info_t; + + +/** + * @brief Verify partition table. + * verify the main partition table of flash. + * + * @attention None + * + * @return whether the verification is successful. + * @retval #LN_TRUE successful. + * @retval #LN_FALSE failed. + */ +int ln_verify_partition_table(void); + +/** + * @brief fetch partition info. + * Fetch partition information for a specified type partition. + * + * @attention None + * + * @param[in] type types indicating the type of the partition entity, see PARTITION_TYPE_*. + * @param[out] info pointer to a partition info struct. + * + * @return Whether to fetch info successfully. + * @retval #LN_TRUE successful. + * @retval #LN_FALSE failed. + */ +int ln_fetch_partition_info(partition_type_t type, partition_info_t * info); + + + +#endif /* __FLASH_PARTITION_MGR_H__ */ + + diff --git a/platform/vendor_bsp/LN/ln882x/src/kernel/FreeRTOS_Adapter/freertos_common.c b/platform/vendor_bsp/LN/ln882x/src/kernel/FreeRTOS_Adapter/freertos_common.c index 50f4cee7cacac7cc10e0ef2271aff75bb906a670..782720f8b6d4a5239060b91dba2210ea41043a67 100644 --- a/platform/vendor_bsp/LN/ln882x/src/kernel/FreeRTOS_Adapter/freertos_common.c +++ b/platform/vendor_bsp/LN/ln882x/src/kernel/FreeRTOS_Adapter/freertos_common.c @@ -8,10 +8,14 @@ #include "ln88xx.h" #ifdef __CC_ARM - extern unsigned int Image$$HEAP_SPACE$$ZI$$Base; - extern unsigned int Image$$HEAP_SPACE$$ZI$$Limit; - #define HEAP_START (&Image$$HEAP_SPACE$$ZI$$Base) - #define HEAP_END (&Image$$HEAP_SPACE$$ZI$$Limit) + extern unsigned int Image$$HEAP_SPACE0$$ZI$$Base; + extern unsigned int Image$$HEAP_SPACE0$$ZI$$Limit; + extern unsigned int Image$$HEAP_SPACE1$$ZI$$Base; + extern unsigned int Image$$HEAP_SPACE1$$ZI$$Limit; + #define HEAP0_START (&Image$$HEAP_SPACE0$$ZI$$Base) + #define HEAP0_END (&Image$$HEAP_SPACE0$$ZI$$Limit) + #define HEAP1_START (&Image$$HEAP_SPACE1$$ZI$$Base) + #define HEAP1_END (&Image$$HEAP_SPACE1$$ZI$$Limit) #elif __ICCARM__ #error "TODO: support iar compiler!!!" #elif __GNUC__ @@ -29,11 +33,14 @@ static HeapRegion_t xHeapRegions[] = { void OS_HeapSizeConfig(void) { - xHeapRegions[0].pucStartAddress = (uint8_t *)(HEAP_START); - xHeapRegions[0].xSizeInBytes = (size_t) ((uint8_t *)HEAP_END - (uint8_t *)HEAP_START); + xHeapRegions[0].pucStartAddress = (uint8_t *)(HEAP0_START); + xHeapRegions[0].xSizeInBytes = (size_t) ((uint8_t *)HEAP0_END - (uint8_t *)HEAP0_START); - xHeapRegions[1].pucStartAddress = NULL; - xHeapRegions[1].xSizeInBytes = 0; + xHeapRegions[1].pucStartAddress = (uint8_t *)(HEAP1_START); + xHeapRegions[1].xSizeInBytes = (size_t) ((uint8_t *)HEAP1_END - (uint8_t *)HEAP1_START); + + xHeapRegions[2].pucStartAddress = NULL; + xHeapRegions[2].xSizeInBytes = 0; } void OS_DefineHeapRegions(void) diff --git a/platform/vendor_bsp/LN/ln882x/src/kernel/FreeRTOS_Adapter/freertos_mutex.c b/platform/vendor_bsp/LN/ln882x/src/kernel/FreeRTOS_Adapter/freertos_mutex.c index 875c49dd4b92f3b603a9bfedd1bc5ece4bb0648e..eb0ed1fc98c088ac5c7ee56b317de29699f28c1e 100644 --- a/platform/vendor_bsp/LN/ln882x/src/kernel/FreeRTOS_Adapter/freertos_mutex.c +++ b/platform/vendor_bsp/LN/ln882x/src/kernel/FreeRTOS_Adapter/freertos_mutex.c @@ -50,7 +50,7 @@ OS_Status OS_MutexDelete(OS_Mutex_t *mutex) * @param[in] waitMS The maximum amount of time (in millisecond) the thread * should remain in the blocked state to wait for the mutex * to become unlocked. - * HAL_WAIT_FOREVER for waiting forever, zero for no waiting. + * OS_WAIT_FOREVER for waiting forever, zero for no waiting. * @retval OS_Status, OS_OK on success */ OS_Status OS_MutexLock(OS_Mutex_t *mutex, OS_Time_t waitMS) diff --git a/platform/vendor_bsp/LN/ln882x/src/kernel/FreeRTOS_Adapter/freertos_queue.c b/platform/vendor_bsp/LN/ln882x/src/kernel/FreeRTOS_Adapter/freertos_queue.c index 2e02bf55387f9db166fc0f554aa5814350fe3368..aa0ffc3ae5cb5994bb44fe1ce8e56f01abcbd318 100644 --- a/platform/vendor_bsp/LN/ln882x/src/kernel/FreeRTOS_Adapter/freertos_queue.c +++ b/platform/vendor_bsp/LN/ln882x/src/kernel/FreeRTOS_Adapter/freertos_queue.c @@ -36,16 +36,9 @@ OS_Status OS_QueueCreate(OS_Queue_t *queue, uint32_t queueLen, uint32_t itemSize */ OS_Status OS_QueueDelete(OS_Queue_t *queue) { - UBaseType_t ret; OS_HANDLE_ASSERT(OS_QueueIsValid(queue), queue->handle); - ret = uxQueueMessagesWaiting(queue->handle); - if (ret > 0) { - OS_ERR("queue %"OS_HANDLE_F" is not empty\r\n", queue->handle); - return OS_FAIL; - } - vQueueDelete(queue->handle); OS_QueueSetInvalid(queue); return OS_OK; @@ -134,13 +127,3 @@ OS_Status OS_QueueReceive(OS_Queue_t *queue, void *item, OS_Time_t waitMS) return OS_OK; } -OS_Status OS_QueueFlush(OS_Queue_t *queue) -{ - void *item; - - OS_HANDLE_ASSERT(OS_QueueIsValid(queue), queue->handle); - while(uxQueueMessagesWaiting(queue->handle)){ - OS_QueueReceive(queue,item,OS_WAIT_FOREVER); - } - return OS_OK; -} diff --git a/platform/vendor_bsp/LN/ln882x/src/kernel/TencentOS_Adapter/TencentOS_common.c b/platform/vendor_bsp/LN/ln882x/src/kernel/TencentOS_Adapter/TencentOS_common.c index 400aab84e2de4f8e3ed1a0dcc7d276237b2fcf73..e6ffa37080f791f0df6d032594c78b2180105e7d 100644 --- a/platform/vendor_bsp/LN/ln882x/src/kernel/TencentOS_Adapter/TencentOS_common.c +++ b/platform/vendor_bsp/LN/ln882x/src/kernel/TencentOS_Adapter/TencentOS_common.c @@ -8,10 +8,14 @@ #include "ln88xx.h" #ifdef __CC_ARM - extern unsigned int Image$$HEAP_SPACE$$ZI$$Base; - extern unsigned int Image$$HEAP_SPACE$$ZI$$Limit; - #define HEAP_START (&Image$$HEAP_SPACE$$ZI$$Base) - #define HEAP_END (&Image$$HEAP_SPACE$$ZI$$Limit) + extern unsigned int Image$$HEAP_SPACE0$$ZI$$Base; + extern unsigned int Image$$HEAP_SPACE0$$ZI$$Limit; + #define HEAP0_START (&Image$$HEAP_SPACE0$$ZI$$Base) + #define HEAP0_END (&Image$$HEAP_SPACE0$$ZI$$Limit) + extern unsigned int Image$$HEAP_SPACE1$$ZI$$Base; + extern unsigned int Image$$HEAP_SPACE1$$ZI$$Limit; + #define HEAP1_START (&Image$$HEAP_SPACE1$$ZI$$Base) + #define HEAP1_END (&Image$$HEAP_SPACE1$$ZI$$Limit) #elif __ICCARM__ #error "TODO: support iar compiler!!!" #elif __GNUC__ @@ -25,12 +29,18 @@ void os_heap_mem_add_pool(void) { - uint8_t * heap_pool0_base = (uint8_t *)((((uint32_t)HEAP_START) + sizeof(size_t) - 1U) & ~(sizeof(size_t)-1U)); - - size_t pool0_size = ((uint32_t)HEAP_END - (uint32_t)heap_pool0_base); + uint8_t * heap_pool0_base = (uint8_t *)((((uint32_t)HEAP0_START) + sizeof(size_t) - 1U) & ~(sizeof(size_t)-1U)); + size_t pool0_size = ((uint32_t)HEAP0_END - (uint32_t)heap_pool0_base); + + uint8_t * heap_pool1_base = (uint8_t *)((((uint32_t)HEAP1_START) + sizeof(size_t) - 1U) & ~(sizeof(size_t)-1U)); + size_t pool1_size = ((uint32_t)HEAP1_END - (uint32_t)heap_pool1_base); if(K_ERR_NONE != tos_mmheap_pool_add(heap_pool0_base, pool0_size)){ - LOG(LOG_LVL_ERROR,"[%s, %d]add pool fail.\r\n", __func__, __LINE__); + LOG(LOG_LVL_ERROR,"[%s, %d]add pool0 fail.\r\n", __func__, __LINE__); + }; + + if(K_ERR_NONE != tos_mmheap_pool_add(heap_pool1_base, pool1_size)){ + LOG(LOG_LVL_ERROR,"[%s, %d]add pool1 fail.\r\n", __func__, __LINE__); }; } diff --git a/platform/vendor_bsp/LN/ln882x/src/kernel/TencentOS_Adapter/TencentOS_semaphore.c b/platform/vendor_bsp/LN/ln882x/src/kernel/TencentOS_Adapter/TencentOS_semaphore.c index 12f5e0b01a268084f03dd5c4ac3525acace5b2dd..acca0d61780c0e13fb3381581859cde97514f295 100644 --- a/platform/vendor_bsp/LN/ln882x/src/kernel/TencentOS_Adapter/TencentOS_semaphore.c +++ b/platform/vendor_bsp/LN/ln882x/src/kernel/TencentOS_Adapter/TencentOS_semaphore.c @@ -72,7 +72,7 @@ OS_Status OS_SemaphoreWait(OS_Semaphore_t *sem, OS_Time_t waitMS) if (err == K_ERR_NONE) { return OS_OK; } else { - OS_ERR("err:%d,OS_SemaphoreWait filed.\r\n", err); +// OS_ERR("err:%d,OS_SemaphoreWait filed.\r\n", err); return OS_FAIL; } } diff --git a/platform/vendor_bsp/LN/ln882x/src/net/lwip-2.0.3/src/port/lwipopts.h b/platform/vendor_bsp/LN/ln882x/src/net/lwip-2.0.3/src/port/lwipopts.h index 5318d47b292bf862fdf733c339c4ab3289bc8d7d..2506459fd36259858e42dd83b86b4bece6af0a2f 100644 --- a/platform/vendor_bsp/LN/ln882x/src/net/lwip-2.0.3/src/port/lwipopts.h +++ b/platform/vendor_bsp/LN/ln882x/src/net/lwip-2.0.3/src/port/lwipopts.h @@ -53,7 +53,7 @@ a lot of data that needs to be copied, this should be set high. */ /* ---------- Pbuf options ---------- */ /* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */ -#define PBUF_POOL_SIZE 35 +#define PBUF_POOL_SIZE 25 /* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */ #define PBUF_POOL_BUFSIZE 500//(NETIF_MTU + PBUF_LINK_HLEN) @@ -68,7 +68,7 @@ a lot of data that needs to be copied, this should be set high. */ /* TCP sender buffer space (bytes). */ #define TCP_SND_BUF (7 * TCP_MSS) /* TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. */ -#define TCP_SND_QUEUELEN (42)//(5 * TCP_SND_BUF/TCP_MSS) +#define TCP_SND_QUEUELEN (5 * TCP_SND_BUF/TCP_MSS) /* TCP receive window. */ #define TCP_WND (6 * TCP_MSS) /* Maximum number of retransmissions of data segments. */ diff --git a/platform/vendor_bsp/LN/ln882x/src/serial/serial.c b/platform/vendor_bsp/LN/ln882x/src/serial/serial.c index a6707250a89d15dac97ea0a9e5b353038624d552..0c149cb775b06991c0f91e4595017b533f332f08 100644 --- a/platform/vendor_bsp/LN/ln882x/src/serial/serial.c +++ b/platform/vendor_bsp/LN/ln882x/src/serial/serial.c @@ -1,6 +1,6 @@ #include #include "serial/serial.h" -#include "serial/serial_p.h" +#include "serial_hw.h" #include "utils/fifo/fifobuf.h" #include "utils/debug/art_assert.h" diff --git a/platform/vendor_bsp/LN/ln882x/src/utils/art_string.c b/platform/vendor_bsp/LN/ln882x/src/utils/art_string.c index 5407db6e75a42b8422139a6ea464f3e0343f3306..dd417e0dda587bbd41e8fe7c1a0ca717cd2c6124 100644 --- a/platform/vendor_bsp/LN/ln882x/src/utils/art_string.c +++ b/platform/vendor_bsp/LN/ln882x/src/utils/art_string.c @@ -5,6 +5,8 @@ #include "utils/debug/log.h" #include "utils/debug/art_assert.h" +#define LN_MAC_OUI "00-50-C2" + /*************************************************************** * substring * ܣַָλõӴ @@ -250,12 +252,26 @@ int generate_mac_randomly(unsigned char *addr) HAL_TRNG_Init(TRNG, initStruct); HAL_TRNG_Start(TRNG); while(!HAL_TRNG_isDataReady(TRNG) || HAL_TRNG_isBusy(TRNG)); +#ifdef LN_MAC_OUI + uint32_t addr0, addr1, addr2; + sscanf(LN_MAC_OUI, "%X-%X-%X", &addr0, &addr1, &addr2); + *addr = addr0 & 0xFF; + *(addr + 1) = addr1 & 0xFF; + *(addr + 2) = addr2 & 0xFF; + for (int i = 0; i < 1; i++) { + trngNumber[i] = HAL_TRNG_GetRandomNumber(TRNG, i); + } + HAL_TRNG_Stop(TRNG); + memcpy(addr + 3, trngNumber, 3); +#else for (int i = 0; i < 2; i++) { trngNumber[i] = HAL_TRNG_GetRandomNumber(TRNG, i); } HAL_TRNG_Stop(TRNG); memcpy(addr, trngNumber, 6); CLR_BIT(addr[0],0); + CLR_BIT(addr[0],1); +#endif return 0; } diff --git a/platform/vendor_bsp/LN/ln882x/src/utils/crc32.c b/platform/vendor_bsp/LN/ln882x/src/utils/crc32.c index 38d2eab79af0fe38e40136ee75177cf9a5211567..02ccdeaab21e734eb7041f203cc0c291dfc783ee 100644 --- a/platform/vendor_bsp/LN/ln882x/src/utils/crc32.c +++ b/platform/vendor_bsp/LN/ln882x/src/utils/crc32.c @@ -1,7 +1,7 @@ #include "utils/crc32.h" -const uint32_t Crc32Table[256] = { +static const uint32_t Crc32Table[256] = { 0x00000000,0x77073096,0xEE0E612C,0x990951BA, 0x076DC419,0x706AF48F,0xE963A535,0x9E6495A3, 0x0EDB8832,0x79DCB8A4,0xE0D5E91E,0x97D2D988, @@ -69,9 +69,27 @@ const uint32_t Crc32Table[256] = { }; -uint32_t GetCrc32(uint8_t *ptr, int len) + +void ln_crc32_init(crc32_ctx_t *ctx) +{ + ctx->crc = 0xFFFFFFFFL; +} + +void ln_crc32_update(crc32_ctx_t *ctx, uint8_t *data, uint32_t len) +{ + for (uint32_t i = 0; i < len; i++) + { + ctx->crc = (ctx->crc >> 8) ^ Crc32Table[(ctx->crc & 0xFF) ^ *data++]; + } +} + +uint32_t ln_crc32_final(crc32_ctx_t *ctx) +{ + return ctx->crc ^= 0xFFFFFFFFUL; +} + +uint32_t ln_crc32_signle_cal(uint8_t *ptr, int len) { - uint32_t crc = 0xFFFFFFFF; while (len > 0) { @@ -80,7 +98,6 @@ uint32_t GetCrc32(uint8_t *ptr, int len) len--; } return crc^0xffffffff; - } diff --git a/platform/vendor_bsp/LN/ln882x/src/utils/eeprom.c b/platform/vendor_bsp/LN/ln882x/src/utils/eeprom.c index 2caaa8304594022a4af3238a95a56c50536c55c4..1a48b30b9332daee51ca89cbdb9128024d0c458d 100644 --- a/platform/vendor_bsp/LN/ln882x/src/utils/eeprom.c +++ b/platform/vendor_bsp/LN/ln882x/src/utils/eeprom.c @@ -8,11 +8,12 @@ #include "osal/osal.h" #include "utils/eeprom.h" #include "utils/system_parameter.h" +#include "flash_partition_table.h" #define PAGE_SIZE (1*SIZE_4KB) /* EEPROM start address in Flash */ -#define EEPROM_START_ADDRESS ((uint32_t)(SYSTEM_PARAMETER_OFFSET)) +#define EEPROM_START_ADDRESS ((uint32_t)(SIMU_EEPROM_SPACE_OFFSET)) /* Pages 0 and 1 base and end addresses */ #define PAGE0_BASE_ADDRESS ((uint32_t)(EEPROM_START_ADDRESS)) diff --git a/platform/vendor_bsp/LN/ln882x/src/utils/gbk_to_unicode.c b/platform/vendor_bsp/LN/ln882x/src/utils/gbk_to_unicode.c index 2b359ffad18234d5b64e9c2bb80fba3967b1ffc4..19c003c80425eb7929ba3aac3a94ee3586c20438 100644 --- a/platform/vendor_bsp/LN/ln882x/src/utils/gbk_to_unicode.c +++ b/platform/vendor_bsp/LN/ln882x/src/utils/gbk_to_unicode.c @@ -3,7 +3,14 @@ #include "utils/debug/art_assert.h" #include "utils/gbk_to_unicode.h" #include "utils/debug/log.h" - +#if WIFI_TRACK +static const unsigned short table_GBK_to_UCS2[][2] = { + {0,0}, +}; +static const unsigned short table_BIG5_to_UCS2[][2] = { + {0,0}, +}; +#else static const unsigned short table_GBK_to_UCS2[][2] = { #if ZH_CN_WHOLE_SET_SUPPORT {0xD2BB, 0X4E00}, //{0xE4, 0xB8, 0x80}, //一 @@ -6771,3498 +6778,3498 @@ static const unsigned short table_GBK_to_UCS2[][2] = { {0xD9DF, 0X9FA0}, //{0xE9, 0xBE, 0xA0}, //龠 #else {0xD2BB, 0x4E00}, //{0xE4, 0xB8, 0x80}, // һ - {0xB6A1, 0x4E01}, //{0xE4, 0xB8, 0x81}, // - {0xC6DF, 0x4E03}, //{0xE4, 0xB8, 0x83}, // - {0xCDF2, 0x4E07}, //{0xE4, 0xB8, 0x87}, // - {0xD5C9, 0x4E08}, //{0xE4, 0xB8, 0x88}, // - {0xC8FD, 0x4E09}, //{0xE4, 0xB8, 0x89}, // - {0xC9CF, 0x4E0A}, //{0xE4, 0xB8, 0x8A}, // - {0xCFC2, 0x4E0B}, //{0xE4, 0xB8, 0x8B}, // - {0xB2BB, 0x4E0D}, //{0xE4, 0xB8, 0x8D}, // - {0xD3EB, 0x4E0E}, //{0xE4, 0xB8, 0x8E}, // + {0xB6A1, 0x4E01}, //{0xE4, 0xB8, 0x81}, // �� + {0xC6DF, 0x4E03}, //{0xE4, 0xB8, 0x83}, // �� + {0xCDF2, 0x4E07}, //{0xE4, 0xB8, 0x87}, // �� + {0xD5C9, 0x4E08}, //{0xE4, 0xB8, 0x88}, // �� + {0xC8FD, 0x4E09}, //{0xE4, 0xB8, 0x89}, // �� + {0xC9CF, 0x4E0A}, //{0xE4, 0xB8, 0x8A}, // �� + {0xCFC2, 0x4E0B}, //{0xE4, 0xB8, 0x8B}, // �� + {0xB2BB, 0x4E0D}, //{0xE4, 0xB8, 0x8D}, // �� + {0xD3EB, 0x4E0E}, //{0xE4, 0xB8, 0x8E}, // �� {0xD8A4, 0x4E10}, //{0xE4, 0xB8, 0x90}, // ؤ - {0xB3F3, 0x4E11}, //{0xE4, 0xB8, 0x91}, // + {0xB3F3, 0x4E11}, //{0xE4, 0xB8, 0x91}, // �� {0xD7A8, 0x4E13}, //{0xE4, 0xB8, 0x93}, // ר - {0xC7D2, 0x4E14}, //{0xE4, 0xB8, 0x94}, // - {0xCAC0, 0x4E16}, //{0xE4, 0xB8, 0x96}, // - {0xC7F0, 0x4E18}, //{0xE4, 0xB8, 0x98}, // - {0xB1FB, 0x4E19}, //{0xE4, 0xB8, 0x99}, // + {0xC7D2, 0x4E14}, //{0xE4, 0xB8, 0x94}, // �� + {0xCAC0, 0x4E16}, //{0xE4, 0xB8, 0x96}, // �� + {0xC7F0, 0x4E18}, //{0xE4, 0xB8, 0x98}, // �� + {0xB1FB, 0x4E19}, //{0xE4, 0xB8, 0x99}, // �� {0xD2B5, 0x4E1A}, //{0xE4, 0xB8, 0x9A}, // ҵ - {0xB4D4, 0x4E1B}, //{0xE4, 0xB8, 0x9B}, // - {0xB6AB, 0x4E1C}, //{0xE4, 0xB8, 0x9C}, // + {0xB4D4, 0x4E1B}, //{0xE4, 0xB8, 0x9B}, // �� + {0xB6AB, 0x4E1C}, //{0xE4, 0xB8, 0x9C}, // �� {0xCBBF, 0x4E1D}, //{0xE4, 0xB8, 0x9D}, // ˿ - {0xB6AA, 0x4E22}, //{0xE4, 0xB8, 0xA2}, // - {0xC1BD, 0x4E24}, //{0xE4, 0xB8, 0xA4}, // - {0xD1CF, 0x4E25}, //{0xE4, 0xB8, 0xA5}, // + {0xB6AA, 0x4E22}, //{0xE4, 0xB8, 0xA2}, // �� + {0xC1BD, 0x4E24}, //{0xE4, 0xB8, 0xA4}, // } + {0xD1CF, 0x4E25}, //{0xE4, 0xB8, 0xA5}, // �� {0xC9A5, 0x4E27}, //{0xE4, 0xB8, 0xA7}, // ɥ - {0xB8F6, 0x4E2A}, //{0xE4, 0xB8, 0xAA}, // - {0xD6D0, 0x4E2D}, //{0xE4, 0xB8, 0xAD}, // - {0xB7E1, 0x4E30}, //{0xE4, 0xB8, 0xB0}, // - {0xB4AE, 0x4E32}, //{0xE4, 0xB8, 0xB2}, // - {0xC1D9, 0x4E34}, //{0xE4, 0xB8, 0xB4}, // - {0xCDE8, 0x4E38}, //{0xE4, 0xB8, 0xB8}, // - {0xB5A4, 0x4E39}, //{0xE4, 0xB8, 0xB9}, // + {0xB8F6, 0x4E2A}, //{0xE4, 0xB8, 0xAA}, // �� + {0xD6D0, 0x4E2D}, //{0xE4, 0xB8, 0xAD}, // �� + {0xB7E1, 0x4E30}, //{0xE4, 0xB8, 0xB0}, // �� + {0xB4AE, 0x4E32}, //{0xE4, 0xB8, 0xB2}, // �� + {0xC1D9, 0x4E34}, //{0xE4, 0xB8, 0xB4}, // �� + {0xCDE8, 0x4E38}, //{0xE4, 0xB8, 0xB8}, // �� + {0xB5A4, 0x4E39}, //{0xE4, 0xB8, 0xB9}, // �� {0xCEAA, 0x4E3A}, //{0xE4, 0xB8, 0xBA}, // Ϊ - {0xD6F7, 0x4E3B}, //{0xE4, 0xB8, 0xBB}, // - {0xC0F6, 0x4E3D}, //{0xE4, 0xB8, 0xBD}, // - {0xBED9, 0x4E3E}, //{0xE4, 0xB8, 0xBE}, // - {0xC4CB, 0x4E43}, //{0xE4, 0xB9, 0x83}, // - {0xBEC3, 0x4E45}, //{0xE4, 0xB9, 0x85}, // + {0xD6F7, 0x4E3B}, //{0xE4, 0xB8, 0xBB}, // �� + {0xC0F6, 0x4E3D}, //{0xE4, 0xB8, 0xBD}, // �� + {0xBED9, 0x4E3E}, //{0xE4, 0xB8, 0xBE}, // �� + {0xC4CB, 0x4E43}, //{0xE4, 0xB9, 0x83}, // �� + {0xBEC3, 0x4E45}, //{0xE4, 0xB9, 0x85}, // �� {0xC3B4, 0x4E48}, //{0xE4, 0xB9, 0x88}, // ô - {0xD2E5, 0x4E49}, //{0xE4, 0xB9, 0x89}, // + {0xD2E5, 0x4E49}, //{0xE4, 0xB9, 0x89}, // �� {0xD6AE, 0x4E4B}, //{0xE4, 0xB9, 0x8B}, // ֮ - {0xCEDA, 0x4E4C}, //{0xE4, 0xB9, 0x8C}, // + {0xCEDA, 0x4E4C}, //{0xE4, 0xB9, 0x8C}, // �� {0xD5A7, 0x4E4D}, //{0xE4, 0xB9, 0x8D}, // է - {0xBAF5, 0x4E4E}, //{0xE4, 0xB9, 0x8E}, // - {0xB7A6, 0x4E4F}, //{0xE4, 0xB9, 0x8F}, // - {0xC0D6, 0x4E50}, //{0xE4, 0xB9, 0x90}, // + {0xBAF5, 0x4E4E}, //{0xE4, 0xB9, 0x8E}, // �� + {0xB7A6, 0x4E4F}, //{0xE4, 0xB9, 0x8F}, // �� + {0xC0D6, 0x4E50}, //{0xE4, 0xB9, 0x90}, // �� {0xC6B9, 0x4E52}, //{0xE4, 0xB9, 0x92}, // ƹ - {0xC5D2, 0x4E53}, //{0xE4, 0xB9, 0x93}, // - {0xC7C7, 0x4E54}, //{0xE4, 0xB9, 0x94}, // - {0xB9D4, 0x4E56}, //{0xE4, 0xB9, 0x96}, // - {0xB3CB, 0x4E58}, //{0xE4, 0xB9, 0x98}, // - {0xD2D2, 0x4E59}, //{0xE4, 0xB9, 0x99}, // - {0xBEC5, 0x4E5D}, //{0xE4, 0xB9, 0x9D}, // - {0xC6F2, 0x4E5E}, //{0xE4, 0xB9, 0x9E}, // + {0xC5D2, 0x4E53}, //{0xE4, 0xB9, 0x93}, // �� + {0xC7C7, 0x4E54}, //{0xE4, 0xB9, 0x94}, // �� + {0xB9D4, 0x4E56}, //{0xE4, 0xB9, 0x96}, // �� + {0xB3CB, 0x4E58}, //{0xE4, 0xB9, 0x98}, // �� + {0xD2D2, 0x4E59}, //{0xE4, 0xB9, 0x99}, // �� + {0xBEC5, 0x4E5D}, //{0xE4, 0xB9, 0x9D}, // �� + {0xC6F2, 0x4E5E}, //{0xE4, 0xB9, 0x9E}, // �� {0xD2B2, 0x4E5F}, //{0xE4, 0xB9, 0x9F}, // Ҳ {0xCFB0, 0x4E60}, //{0xE4, 0xB9, 0xA0}, // ϰ - {0xCFE7, 0x4E61}, //{0xE4, 0xB9, 0xA1}, // - {0xCAE9, 0x4E66}, //{0xE4, 0xB9, 0xA6}, // - {0xC2F2, 0x4E70}, //{0xE4, 0xB9, 0xB0}, // - {0xC2D2, 0x4E71}, //{0xE4, 0xB9, 0xB1}, // - {0xC8E9, 0x4E73}, //{0xE4, 0xB9, 0xB3}, // - {0xC1CB, 0x4E86}, //{0xE4, 0xBA, 0x86}, // - {0xD3E8, 0x4E88}, //{0xE4, 0xBA, 0x88}, // - {0xD5F9, 0x4E89}, //{0xE4, 0xBA, 0x89}, // - {0xCAC2, 0x4E8B}, //{0xE4, 0xBA, 0x8B}, // - {0xB6FE, 0x4E8C}, //{0xE4, 0xBA, 0x8C}, // - {0xD3DA, 0x4E8E}, //{0xE4, 0xBA, 0x8E}, // - {0xBFF7, 0x4E8F}, //{0xE4, 0xBA, 0x8F}, // - {0xD4C6, 0x4E91}, //{0xE4, 0xBA, 0x91}, // - {0xBBA5, 0x4E92}, //{0xE4, 0xBA, 0x92}, // - {0xCEE5, 0x4E94}, //{0xE4, 0xBA, 0x94}, // - {0xBEAE, 0x4E95}, //{0xE4, 0xBA, 0x95}, // - {0xD1C7, 0x4E9A}, //{0xE4, 0xBA, 0x9A}, // + {0xCFE7, 0x4E61}, //{0xE4, 0xB9, 0xA1}, // �� + {0xCAE9, 0x4E66}, //{0xE4, 0xB9, 0xA6}, // �� + {0xC2F2, 0x4E70}, //{0xE4, 0xB9, 0xB0}, // �� + {0xC2D2, 0x4E71}, //{0xE4, 0xB9, 0xB1}, // �� + {0xC8E9, 0x4E73}, //{0xE4, 0xB9, 0xB3}, // �� + {0xC1CB, 0x4E86}, //{0xE4, 0xBA, 0x86}, // �� + {0xD3E8, 0x4E88}, //{0xE4, 0xBA, 0x88}, // �� + {0xD5F9, 0x4E89}, //{0xE4, 0xBA, 0x89}, // �� + {0xCAC2, 0x4E8B}, //{0xE4, 0xBA, 0x8B}, // �� + {0xB6FE, 0x4E8C}, //{0xE4, 0xBA, 0x8C}, // �� + {0xD3DA, 0x4E8E}, //{0xE4, 0xBA, 0x8E}, // �� + {0xBFF7, 0x4E8F}, //{0xE4, 0xBA, 0x8F}, // �� + {0xD4C6, 0x4E91}, //{0xE4, 0xBA, 0x91}, // �� + {0xBBA5, 0x4E92}, //{0xE4, 0xBA, 0x92}, // �� + {0xCEE5, 0x4E94}, //{0xE4, 0xBA, 0x94}, // �� + {0xBEAE, 0x4E95}, //{0xE4, 0xBA, 0x95}, // �� + {0xD1C7, 0x4E9A}, //{0xE4, 0xBA, 0x9A}, // �� {0xD0A9, 0x4E9B}, //{0xE4, 0xBA, 0x9B}, // Щ - {0xCDF6, 0x4EA1}, //{0xE4, 0xBA, 0xA1}, // - {0xBDBB, 0x4EA4}, //{0xE4, 0xBA, 0xA4}, // - {0xBAA5, 0x4EA5}, //{0xE4, 0xBA, 0xA5}, // - {0xD2E0, 0x4EA6}, //{0xE4, 0xBA, 0xA6}, // - {0xB2FA, 0x4EA7}, //{0xE4, 0xBA, 0xA7}, // + {0xCDF6, 0x4EA1}, //{0xE4, 0xBA, 0xA1}, // �� + {0xBDBB, 0x4EA4}, //{0xE4, 0xBA, 0xA4}, // �� + {0xBAA5, 0x4EA5}, //{0xE4, 0xBA, 0xA5}, // �� + {0xD2E0, 0x4EA6}, //{0xE4, 0xBA, 0xA6}, // �� + {0xB2FA, 0x4EA7}, //{0xE4, 0xBA, 0xA7}, // �� {0xC4B6, 0x4EA9}, //{0xE4, 0xBA, 0xA9}, // Ķ - {0xCFED, 0x4EAB}, //{0xE4, 0xBA, 0xAB}, // - {0xBEA9, 0x4EAC}, //{0xE4, 0xBA, 0xAC}, // + {0xCFED, 0x4EAB}, //{0xE4, 0xBA, 0xAB}, // �� + {0xBEA9, 0x4EAC}, //{0xE4, 0xBA, 0xAC}, // �� {0xCDA4, 0x4EAD}, //{0xE4, 0xBA, 0xAD}, // ͤ - {0xC1C1, 0x4EAE}, //{0xE4, 0xBA, 0xAE}, // - {0xC7D7, 0x4EB2}, //{0xE4, 0xBA, 0xB2}, // - {0xC8CB, 0x4EBA}, //{0xE4, 0xBA, 0xBA}, // - {0xD2DA, 0x4EBF}, //{0xE4, 0xBA, 0xBF}, // + {0xC1C1, 0x4EAE}, //{0xE4, 0xBA, 0xAE}, // �� + {0xC7D7, 0x4EB2}, //{0xE4, 0xBA, 0xB2}, // �� + {0xC8CB, 0x4EBA}, //{0xE4, 0xBA, 0xBA}, // �� + {0xD2DA, 0x4EBF}, //{0xE4, 0xBA, 0xBF}, // �� {0xCAB2, 0x4EC0}, //{0xE4, 0xBB, 0x80}, // ʲ - {0xC8CA, 0x4EC1}, //{0xE4, 0xBB, 0x81}, // - {0xBDF6, 0x4EC5}, //{0xE4, 0xBB, 0x85}, // - {0xC6CD, 0x4EC6}, //{0xE4, 0xBB, 0x86}, // - {0xB3F0, 0x4EC7}, //{0xE4, 0xBB, 0x87}, // - {0xBDF1, 0x4ECA}, //{0xE4, 0xBB, 0x8A}, // - {0xBDE9, 0x4ECB}, //{0xE4, 0xBB, 0x8B}, // - {0xC8D4, 0x4ECD}, //{0xE4, 0xBB, 0x8D}, // - {0xB4D3, 0x4ECE}, //{0xE4, 0xBB, 0x8E}, // - {0xC2D8, 0x4ED1}, //{0xE4, 0xBB, 0x91}, // - {0xB2D6, 0x4ED3}, //{0xE4, 0xBB, 0x93}, // - {0xD7D0, 0x4ED4}, //{0xE4, 0xBB, 0x94}, // - {0xCBFB, 0x4ED6}, //{0xE4, 0xBB, 0x96}, // - {0xD5CC, 0x4ED7}, //{0xE4, 0xBB, 0x97}, // - {0xB8B6, 0x4ED8}, //{0xE4, 0xBB, 0x98}, // - {0xCFC9, 0x4ED9}, //{0xE4, 0xBB, 0x99}, // - {0xB4FA, 0x4EE3}, //{0xE4, 0xBB, 0xA3}, // - {0xC1EE, 0x4EE4}, //{0xE4, 0xBB, 0xA4}, // - {0xD2D4, 0x4EE5}, //{0xE4, 0xBB, 0xA5}, // - {0xD2C7, 0x4EEA}, //{0xE4, 0xBB, 0xAA}, // - {0xC3C7, 0x4EEC}, //{0xE4, 0xBB, 0xAC}, // - {0xD1F6, 0x4EF0}, //{0xE4, 0xBB, 0xB0}, // - {0xD6D9, 0x4EF2}, //{0xE4, 0xBB, 0xB2}, // - {0xBCFE, 0x4EF6}, //{0xE4, 0xBB, 0xB6}, // - {0xBCDB, 0x4EF7}, //{0xE4, 0xBB, 0xB7}, // - {0xC8CE, 0x4EFB}, //{0xE4, 0xBB, 0xBB}, // - {0xB7DD, 0x4EFD}, //{0xE4, 0xBB, 0xBD}, // - {0xB7C2, 0x4EFF}, //{0xE4, 0xBB, 0xBF}, // - {0xC6F3, 0x4F01}, //{0xE4, 0xBC, 0x81}, // - {0xD2C1, 0x4F0A}, //{0xE4, 0xBC, 0x8A}, // - {0xCEE9, 0x4F0D}, //{0xE4, 0xBC, 0x8D}, // - {0xB7FC, 0x4F0F}, //{0xE4, 0xBC, 0x8F}, // - {0xB7A5, 0x4F10}, //{0xE4, 0xBC, 0x90}, // - {0xD0DD, 0x4F11}, //{0xE4, 0xBC, 0x91}, // - {0xD6DA, 0x4F17}, //{0xE4, 0xBC, 0x97}, // - {0xD3C5, 0x4F18}, //{0xE4, 0xBC, 0x98}, // - {0xBBEF, 0x4F19}, //{0xE4, 0xBC, 0x99}, // - {0xBBE1, 0x4F1A}, //{0xE4, 0xBC, 0x9A}, // + {0xC8CA, 0x4EC1}, //{0xE4, 0xBB, 0x81}, // �� + {0xBDF6, 0x4EC5}, //{0xE4, 0xBB, 0x85}, // �� + {0xC6CD, 0x4EC6}, //{0xE4, 0xBB, 0x86}, // �� + {0xB3F0, 0x4EC7}, //{0xE4, 0xBB, 0x87}, // �� + {0xBDF1, 0x4ECA}, //{0xE4, 0xBB, 0x8A}, // �� + {0xBDE9, 0x4ECB}, //{0xE4, 0xBB, 0x8B}, // �� + {0xC8D4, 0x4ECD}, //{0xE4, 0xBB, 0x8D}, // �� + {0xB4D3, 0x4ECE}, //{0xE4, 0xBB, 0x8E}, // �� + {0xC2D8, 0x4ED1}, //{0xE4, 0xBB, 0x91}, // �� + {0xB2D6, 0x4ED3}, //{0xE4, 0xBB, 0x93}, // �� + {0xD7D0, 0x4ED4}, //{0xE4, 0xBB, 0x94}, // �� + {0xCBFB, 0x4ED6}, //{0xE4, 0xBB, 0x96}, // �� + {0xD5CC, 0x4ED7}, //{0xE4, 0xBB, 0x97}, // �� + {0xB8B6, 0x4ED8}, //{0xE4, 0xBB, 0x98}, // �� + {0xCFC9, 0x4ED9}, //{0xE4, 0xBB, 0x99}, // �� + {0xB4FA, 0x4EE3}, //{0xE4, 0xBB, 0xA3}, // �� + {0xC1EE, 0x4EE4}, //{0xE4, 0xBB, 0xA4}, // �� + {0xD2D4, 0x4EE5}, //{0xE4, 0xBB, 0xA5}, // �� + {0xD2C7, 0x4EEA}, //{0xE4, 0xBB, 0xAA}, // �� + {0xC3C7, 0x4EEC}, //{0xE4, 0xBB, 0xAC}, // �� + {0xD1F6, 0x4EF0}, //{0xE4, 0xBB, 0xB0}, // �� + {0xD6D9, 0x4EF2}, //{0xE4, 0xBB, 0xB2}, // �� + {0xBCFE, 0x4EF6}, //{0xE4, 0xBB, 0xB6}, // �� + {0xBCDB, 0x4EF7}, //{0xE4, 0xBB, 0xB7}, // �� + {0xC8CE, 0x4EFB}, //{0xE4, 0xBB, 0xBB}, // �� + {0xB7DD, 0x4EFD}, //{0xE4, 0xBB, 0xBD}, // �� + {0xB7C2, 0x4EFF}, //{0xE4, 0xBB, 0xBF}, // �� + {0xC6F3, 0x4F01}, //{0xE4, 0xBC, 0x81}, // �� + {0xD2C1, 0x4F0A}, //{0xE4, 0xBC, 0x8A}, // �� + {0xCEE9, 0x4F0D}, //{0xE4, 0xBC, 0x8D}, // �� + {0xB7FC, 0x4F0F}, //{0xE4, 0xBC, 0x8F}, // �� + {0xB7A5, 0x4F10}, //{0xE4, 0xBC, 0x90}, // �� + {0xD0DD, 0x4F11}, //{0xE4, 0xBC, 0x91}, // �� + {0xD6DA, 0x4F17}, //{0xE4, 0xBC, 0x97}, // �� + {0xD3C5, 0x4F18}, //{0xE4, 0xBC, 0x98}, // �� + {0xBBEF, 0x4F19}, //{0xE4, 0xBC, 0x99}, // �� + {0xBBE1, 0x4F1A}, //{0xE4, 0xBC, 0x9A}, // �� {0xC9A1, 0x4F1E}, //{0xE4, 0xBC, 0x9E}, // ɡ {0xCEB0, 0x4F1F}, //{0xE4, 0xBC, 0x9F}, // ΰ - {0xB4AB, 0x4F20}, //{0xE4, 0xBC, 0xA0}, // - {0xC9CB, 0x4F24}, //{0xE4, 0xBC, 0xA4}, // - {0xC2D7, 0x4F26}, //{0xE4, 0xBC, 0xA6}, // + {0xB4AB, 0x4F20}, //{0xE4, 0xBC, 0xA0}, // �� + {0xC9CB, 0x4F24}, //{0xE4, 0xBC, 0xA4}, // �� + {0xC2D7, 0x4F26}, //{0xE4, 0xBC, 0xA6}, // �� {0xCEB1, 0x4F2A}, //{0xE4, 0xBC, 0xAA}, // α - {0xB2AE, 0x4F2F}, //{0xE4, 0xBC, 0xAF}, // - {0xB9C0, 0x4F30}, //{0xE4, 0xBC, 0xB0}, // - {0xB0E9, 0x4F34}, //{0xE4, 0xBC, 0xB4}, // - {0xC1E6, 0x4F36}, //{0xE4, 0xBC, 0xB6}, // - {0xC9EC, 0x4F38}, //{0xE4, 0xBC, 0xB8}, // - {0xCBC5, 0x4F3A}, //{0xE4, 0xBC, 0xBA}, // - {0xCBC6, 0x4F3C}, //{0xE4, 0xBC, 0xBC}, // - {0xB5E8, 0x4F43}, //{0xE4, 0xBD, 0x83}, // - {0xB5AB, 0x4F46}, //{0xE4, 0xBD, 0x86}, // + {0xB2AE, 0x4F2F}, //{0xE4, 0xBC, 0xAF}, // �� + {0xB9C0, 0x4F30}, //{0xE4, 0xBC, 0xB0}, // �� + {0xB0E9, 0x4F34}, //{0xE4, 0xBC, 0xB4}, // �� + {0xC1E6, 0x4F36}, //{0xE4, 0xBC, 0xB6}, // �� + {0xC9EC, 0x4F38}, //{0xE4, 0xBC, 0xB8}, // �� + {0xCBC5, 0x4F3A}, //{0xE4, 0xBC, 0xBA}, // �� + {0xCBC6, 0x4F3C}, //{0xE4, 0xBC, 0xBC}, // �� + {0xB5E8, 0x4F43}, //{0xE4, 0xBD, 0x83}, // �� + {0xB5AB, 0x4F46}, //{0xE4, 0xBD, 0x86}, // �� {0xCEBB, 0x4F4D}, //{0xE4, 0xBD, 0x8D}, // λ - {0xB5CD, 0x4F4E}, //{0xE4, 0xBD, 0x8E}, // + {0xB5CD, 0x4F4E}, //{0xE4, 0xBD, 0x8E}, // �� {0xD7A1, 0x4F4F}, //{0xE4, 0xBD, 0x8F}, // ס - {0xD3D3, 0x4F51}, //{0xE4, 0xBD, 0x91}, // - {0xCCE5, 0x4F53}, //{0xE4, 0xBD, 0x93}, // - {0xBACE, 0x4F55}, //{0xE4, 0xBD, 0x95}, // - {0xD3E0, 0x4F59}, //{0xE4, 0xBD, 0x99}, // - {0xB7F0, 0x4F5B}, //{0xE4, 0xBD, 0x9B}, // - {0xD7F7, 0x4F5C}, //{0xE4, 0xBD, 0x9C}, // - {0xC4E3, 0x4F60}, //{0xE4, 0xBD, 0xA0}, // + {0xD3D3, 0x4F51}, //{0xE4, 0xBD, 0x91}, // �� + {0xCCE5, 0x4F53}, //{0xE4, 0xBD, 0x93}, // �� + {0xBACE, 0x4F55}, //{0xE4, 0xBD, 0x95}, // �� + {0xD3E0, 0x4F59}, //{0xE4, 0xBD, 0x99}, // �� + {0xB7F0, 0x4F5B}, //{0xE4, 0xBD, 0x9B}, // �� + {0xD7F7, 0x4F5C}, //{0xE4, 0xBD, 0x9C}, // �� + {0xC4E3, 0x4F60}, //{0xE4, 0xBD, 0xA0}, // �� {0xD3B6, 0x4F63}, //{0xE4, 0xBD, 0xA3}, // Ӷ - {0xC5E5, 0x4F69}, //{0xE4, 0xBD, 0xA9}, // - {0xBCD1, 0x4F73}, //{0xE4, 0xBD, 0xB3}, // + {0xC5E5, 0x4F69}, //{0xE4, 0xBD, 0xA9}, // �� + {0xBCD1, 0x4F73}, //{0xE4, 0xBD, 0xB3}, // �� {0xCAB9, 0x4F7F}, //{0xE4, 0xBD, 0xBF}, // ʹ {0xD6B6, 0x4F84}, //{0xE4, 0xBE, 0x84}, // ֶ - {0xB3DE, 0x4F88}, //{0xE4, 0xBE, 0x88}, // - {0xC0FD, 0x4F8B}, //{0xE4, 0xBE, 0x8B}, // - {0xCACC, 0x4F8D}, //{0xE4, 0xBE, 0x8D}, // - {0xB9A9, 0x4F9B}, //{0xE4, 0xBE, 0x9B}, // - {0xD2C0, 0x4F9D}, //{0xE4, 0xBE, 0x9D}, // - {0xCFC0, 0x4FA0}, //{0xE4, 0xBE, 0xA0}, // - {0xC2C2, 0x4FA3}, //{0xE4, 0xBE, 0xA3}, // - {0xBDC4, 0x4FA5}, //{0xE4, 0xBE, 0xA5}, // - {0xD5EC, 0x4FA6}, //{0xE4, 0xBE, 0xA6}, // - {0xB2E0, 0x4FA7}, //{0xE4, 0xBE, 0xA7}, // - {0xC7C8, 0x4FA8}, //{0xE4, 0xBE, 0xA8}, // - {0xCEEA, 0x4FAE}, //{0xE4, 0xBE, 0xAE}, // - {0xBAEE, 0x4FAF}, //{0xE4, 0xBE, 0xAF}, // - {0xC7D6, 0x4FB5}, //{0xE4, 0xBE, 0xB5}, // - {0xB1E3, 0x4FBF}, //{0xE4, 0xBE, 0xBF}, // - {0xB4D9, 0x4FC3}, //{0xE4, 0xBF, 0x83}, // - {0xB6ED, 0x4FC4}, //{0xE4, 0xBF, 0x84}, // - {0xBFA1, 0x4FCA}, //{0xE4, 0xBF, 0x8A}, // - {0xC7CE, 0x4FCF}, //{0xE4, 0xBF, 0x8F}, // - {0xC0FE, 0x4FD0}, //{0xE4, 0xBF, 0x90}, // - {0xCBD7, 0x4FD7}, //{0xE4, 0xBF, 0x97}, // - {0xB7FD, 0x4FD8}, //{0xE4, 0xBF, 0x98}, // - {0xB1A3, 0x4FDD}, //{0xE4, 0xBF, 0x9D}, // - {0xD0C5, 0x4FE1}, //{0xE4, 0xBF, 0xA1}, // - {0xC1A9, 0x4FE9}, //{0xE4, 0xBF, 0xA9}, // - {0xBCF3, 0x4FED}, //{0xE4, 0xBF, 0xAD}, // - {0xD0DE, 0x4FEE}, //{0xE4, 0xBF, 0xAE}, // - {0xB8A9, 0x4FEF}, //{0xE4, 0xBF, 0xAF}, // - {0xBEE3, 0x4FF1}, //{0xE4, 0xBF, 0xB1}, // - {0xB0B3, 0x4FFA}, //{0xE4, 0xBF, 0xBA}, // - {0xB1B6, 0x500D}, //{0xE5, 0x80, 0x8D}, // - {0xB5B9, 0x5012}, //{0xE5, 0x80, 0x92}, // - {0xBEF3, 0x5014}, //{0xE5, 0x80, 0x94}, // - {0xCCC8, 0x5018}, //{0xE5, 0x80, 0x98}, // - {0xBAF2, 0x5019}, //{0xE5, 0x80, 0x99}, // - {0xD2D0, 0x501A}, //{0xE5, 0x80, 0x9A}, // - {0xBDE8, 0x501F}, //{0xE5, 0x80, 0x9F}, // - {0xB3AB, 0x5021}, //{0xE5, 0x80, 0xA1}, // - {0xBEEB, 0x5026}, //{0xE5, 0x80, 0xA6}, // + {0xB3DE, 0x4F88}, //{0xE4, 0xBE, 0x88}, // �� + {0xC0FD, 0x4F8B}, //{0xE4, 0xBE, 0x8B}, // �� + {0xCACC, 0x4F8D}, //{0xE4, 0xBE, 0x8D}, // �� + {0xB9A9, 0x4F9B}, //{0xE4, 0xBE, 0x9B}, // �� + {0xD2C0, 0x4F9D}, //{0xE4, 0xBE, 0x9D}, // �� + {0xCFC0, 0x4FA0}, //{0xE4, 0xBE, 0xA0}, // �� + {0xC2C2, 0x4FA3}, //{0xE4, 0xBE, 0xA3}, // �� + {0xBDC4, 0x4FA5}, //{0xE4, 0xBE, 0xA5}, // �� + {0xD5EC, 0x4FA6}, //{0xE4, 0xBE, 0xA6}, // �� + {0xB2E0, 0x4FA7}, //{0xE4, 0xBE, 0xA7}, // �� + {0xC7C8, 0x4FA8}, //{0xE4, 0xBE, 0xA8}, // �� + {0xCEEA, 0x4FAE}, //{0xE4, 0xBE, 0xAE}, // �� + {0xBAEE, 0x4FAF}, //{0xE4, 0xBE, 0xAF}, // �� + {0xC7D6, 0x4FB5}, //{0xE4, 0xBE, 0xB5}, // �� + {0xB1E3, 0x4FBF}, //{0xE4, 0xBE, 0xBF}, // �� + {0xB4D9, 0x4FC3}, //{0xE4, 0xBF, 0x83}, // �� + {0xB6ED, 0x4FC4}, //{0xE4, 0xBF, 0x84}, // �� + {0xBFA1, 0x4FCA}, //{0xE4, 0xBF, 0x8A}, // �� + {0xC7CE, 0x4FCF}, //{0xE4, 0xBF, 0x8F}, // �� + {0xC0FE, 0x4FD0}, //{0xE4, 0xBF, 0x90}, // �� + {0xCBD7, 0x4FD7}, //{0xE4, 0xBF, 0x97}, // �� + {0xB7FD, 0x4FD8}, //{0xE4, 0xBF, 0x98}, // �� + {0xB1A3, 0x4FDD}, //{0xE4, 0xBF, 0x9D}, // �� + {0xD0C5, 0x4FE1}, //{0xE4, 0xBF, 0xA1}, // �� + {0xC1A9, 0x4FE9}, //{0xE4, 0xBF, 0xA9}, // i + {0xBCF3, 0x4FED}, //{0xE4, 0xBF, 0xAD}, // �� + {0xD0DE, 0x4FEE}, //{0xE4, 0xBF, 0xAE}, // �� + {0xB8A9, 0x4FEF}, //{0xE4, 0xBF, 0xAF}, // �� + {0xBEE3, 0x4FF1}, //{0xE4, 0xBF, 0xB1}, // �� + {0xB0B3, 0x4FFA}, //{0xE4, 0xBF, 0xBA}, // �� + {0xB1B6, 0x500D}, //{0xE5, 0x80, 0x8D}, // �� + {0xB5B9, 0x5012}, //{0xE5, 0x80, 0x92}, // �� + {0xBEF3, 0x5014}, //{0xE5, 0x80, 0x94}, // �� + {0xCCC8, 0x5018}, //{0xE5, 0x80, 0x98}, // �� + {0xBAF2, 0x5019}, //{0xE5, 0x80, 0x99}, // �� + {0xD2D0, 0x501A}, //{0xE5, 0x80, 0x9A}, // �� + {0xBDE8, 0x501F}, //{0xE5, 0x80, 0x9F}, // �� + {0xB3AB, 0x5021}, //{0xE5, 0x80, 0xA1}, // �� + {0xBEEB, 0x5026}, //{0xE5, 0x80, 0xA6}, // �� {0xD5AE, 0x503A}, //{0xE5, 0x80, 0xBA}, // ծ {0xD6B5, 0x503C}, //{0xE5, 0x80, 0xBC}, // ֵ - {0xC7E3, 0x503E}, //{0xE5, 0x80, 0xBE}, // - {0xBCD9, 0x5047}, //{0xE5, 0x81, 0x87}, // - {0xD9CB, 0x504E}, //{0xE5, 0x81, 0x8E}, // + {0xC7E3, 0x503E}, //{0xE5, 0x80, 0xBE}, // �� + {0xBCD9, 0x5047}, //{0xE5, 0x81, 0x87}, // �� + {0xD9CB, 0x504E}, //{0xE5, 0x81, 0x8E}, // �� {0xC6AB, 0x504F}, //{0xE5, 0x81, 0x8F}, // ƫ - {0xD7F6, 0x505A}, //{0xE5, 0x81, 0x9A}, // + {0xD7F6, 0x505A}, //{0xE5, 0x81, 0x9A}, // �� {0xCDA3, 0x505C}, //{0xE5, 0x81, 0x9C}, // ͣ - {0xBDA1, 0x5065}, //{0xE5, 0x81, 0xA5}, // + {0xBDA1, 0x5065}, //{0xE5, 0x81, 0xA5}, // �� {0xC5BC, 0x5076}, //{0xE5, 0x81, 0xB6}, // ż {0xCDB5, 0x5077}, //{0xE5, 0x81, 0xB7}, // ͵ - {0xB3A5, 0x507F}, //{0xE5, 0x81, 0xBF}, // - {0xBFFE, 0x5080}, //{0xE5, 0x82, 0x80}, // - {0xB8B5, 0x5085}, //{0xE5, 0x82, 0x85}, // - {0xB0F8, 0x508D}, //{0xE5, 0x82, 0x8D}, // - {0xB4A2, 0x50A8}, //{0xE5, 0x82, 0xA8}, // - {0xB4DF, 0x50AC}, //{0xE5, 0x82, 0xAC}, // - {0xB0C1, 0x50B2}, //{0xE5, 0x82, 0xB2}, // + {0xB3A5, 0x507F}, //{0xE5, 0x81, 0xBF}, // �� + {0xBFFE, 0x5080}, //{0xE5, 0x82, 0x80}, // �� + {0xB8B5, 0x5085}, //{0xE5, 0x82, 0x85}, // �� + {0xB0F8, 0x508D}, //{0xE5, 0x82, 0x8D}, // �� + {0xB4A2, 0x50A8}, //{0xE5, 0x82, 0xA8}, // �� + {0xB4DF, 0x50AC}, //{0xE5, 0x82, 0xAC}, // �� + {0xB0C1, 0x50B2}, //{0xE5, 0x82, 0xB2}, // �� {0xC9B5, 0x50BB}, //{0xE5, 0x82, 0xBB}, // ɵ - {0xCFF1, 0x50CF}, //{0xE5, 0x83, 0x8F}, // - {0xC1C5, 0x50DA}, //{0xE5, 0x83, 0x9A}, // + {0xCFF1, 0x50CF}, //{0xE5, 0x83, 0x8F}, // �� + {0xC1C5, 0x50DA}, //{0xE5, 0x83, 0x9A}, // �� {0xC9AE, 0x50E7}, //{0xE5, 0x83, 0xA7}, // ɮ - {0xBDA9, 0x50F5}, //{0xE5, 0x83, 0xB5}, // + {0xBDA9, 0x50F5}, //{0xE5, 0x83, 0xB5}, // �� {0xC6A7, 0x50FB}, //{0xE5, 0x83, 0xBB}, // Ƨ - {0xC8E5, 0x5112}, //{0xE5, 0x84, 0x92}, // - {0xC0DC, 0x5121}, //{0xE5, 0x84, 0xA1}, // - {0xB6F9, 0x513F}, //{0xE5, 0x84, 0xBF}, // - {0xD4CA, 0x5141}, //{0xE5, 0x85, 0x81}, // + {0xC8E5, 0x5112}, //{0xE5, 0x84, 0x92}, // �� + {0xC0DC, 0x5121}, //{0xE5, 0x84, 0xA1}, // �� + {0xB6F9, 0x513F}, //{0xE5, 0x84, 0xBF}, // �� + {0xD4CA, 0x5141}, //{0xE5, 0x85, 0x81}, // �� {0xD4AA, 0x5143}, //{0xE5, 0x85, 0x83}, // Ԫ - {0xD0D6, 0x5144}, //{0xE5, 0x85, 0x84}, // - {0xB3E4, 0x5145}, //{0xE5, 0x85, 0x85}, // - {0xD5D7, 0x5146}, //{0xE5, 0x85, 0x86}, // - {0xCFC8, 0x5148}, //{0xE5, 0x85, 0x88}, // - {0xB9E2, 0x5149}, //{0xE5, 0x85, 0x89}, // - {0xBFCB, 0x514B}, //{0xE5, 0x85, 0x8B}, // - {0xC3E2, 0x514D}, //{0xE5, 0x85, 0x8D}, // - {0xB6D2, 0x5151}, //{0xE5, 0x85, 0x91}, // - {0xCDC3, 0x5154}, //{0xE5, 0x85, 0x94}, // - {0xB5B3, 0x515A}, //{0xE5, 0x85, 0x9A}, // - {0xB6B5, 0x515C}, //{0xE5, 0x85, 0x9C}, // - {0xBEA4, 0x5162}, //{0xE5, 0x85, 0xA2}, // - {0xC8EB, 0x5165}, //{0xE5, 0x85, 0xA5}, // + {0xD0D6, 0x5144}, //{0xE5, 0x85, 0x84}, // �� + {0xB3E4, 0x5145}, //{0xE5, 0x85, 0x85}, // �� + {0xD5D7, 0x5146}, //{0xE5, 0x85, 0x86}, // �� + {0xCFC8, 0x5148}, //{0xE5, 0x85, 0x88}, // �� + {0xB9E2, 0x5149}, //{0xE5, 0x85, 0x89}, // �� + {0xBFCB, 0x514B}, //{0xE5, 0x85, 0x8B}, // �� + {0xC3E2, 0x514D}, //{0xE5, 0x85, 0x8D}, // �� + {0xB6D2, 0x5151}, //{0xE5, 0x85, 0x91}, // �� + {0xCDC3, 0x5154}, //{0xE5, 0x85, 0x94}, // �� + {0xB5B3, 0x515A}, //{0xE5, 0x85, 0x9A}, // �� + {0xB6B5, 0x515C}, //{0xE5, 0x85, 0x9C}, // �� + {0xBEA4, 0x5162}, //{0xE5, 0x85, 0xA2}, // �� + {0xC8EB, 0x5165}, //{0xE5, 0x85, 0xA5}, // �� {0xC8AB, 0x5168}, //{0xE5, 0x85, 0xA8}, // ȫ - {0xB0CB, 0x516B}, //{0xE5, 0x85, 0xAB}, // - {0xB9AB, 0x516C}, //{0xE5, 0x85, 0xAC}, // - {0xC1F9, 0x516D}, //{0xE5, 0x85, 0xAD}, // - {0xC0BC, 0x5170}, //{0xE5, 0x85, 0xB0}, // - {0xB9B2, 0x5171}, //{0xE5, 0x85, 0xB1}, // - {0xB9D8, 0x5173}, //{0xE5, 0x85, 0xB3}, // - {0xD0CB, 0x5174}, //{0xE5, 0x85, 0xB4}, // - {0xB1F8, 0x5175}, //{0xE5, 0x85, 0xB5}, // - {0xC6E4, 0x5176}, //{0xE5, 0x85, 0xB6}, // - {0xBEDF, 0x5177}, //{0xE5, 0x85, 0xB7}, // - {0xB5E4, 0x5178}, //{0xE5, 0x85, 0xB8}, // - {0xD1F8, 0x517B}, //{0xE5, 0x85, 0xBB}, // - {0xBCE6, 0x517C}, //{0xE5, 0x85, 0xBC}, // - {0xCADE, 0x517D}, //{0xE5, 0x85, 0xBD}, // - {0xBCBD, 0x5180}, //{0xE5, 0x86, 0x80}, // - {0xC4DA, 0x5185}, //{0xE5, 0x86, 0x85}, // - {0xB8D4, 0x5188}, //{0xE5, 0x86, 0x88}, // - {0xB2E1, 0x518C}, //{0xE5, 0x86, 0x8C}, // - {0xD4D9, 0x518D}, //{0xE5, 0x86, 0x8D}, // + {0xB0CB, 0x516B}, //{0xE5, 0x85, 0xAB}, // �� + {0xB9AB, 0x516C}, //{0xE5, 0x85, 0xAC}, // �� + {0xC1F9, 0x516D}, //{0xE5, 0x85, 0xAD}, // �� + {0xC0BC, 0x5170}, //{0xE5, 0x85, 0xB0}, // < + {0xB9B2, 0x5171}, //{0xE5, 0x85, 0xB1}, // �� + {0xB9D8, 0x5173}, //{0xE5, 0x85, 0xB3}, // �� + {0xD0CB, 0x5174}, //{0xE5, 0x85, 0xB4}, // �� + {0xB1F8, 0x5175}, //{0xE5, 0x85, 0xB5}, // �� + {0xC6E4, 0x5176}, //{0xE5, 0x85, 0xB6}, // �� + {0xBEDF, 0x5177}, //{0xE5, 0x85, 0xB7}, // �� + {0xB5E4, 0x5178}, //{0xE5, 0x85, 0xB8}, // �� + {0xD1F8, 0x517B}, //{0xE5, 0x85, 0xBB}, // �� + {0xBCE6, 0x517C}, //{0xE5, 0x85, 0xBC}, // �� + {0xCADE, 0x517D}, //{0xE5, 0x85, 0xBD}, // �� + {0xBCBD, 0x5180}, //{0xE5, 0x86, 0x80}, // �� + {0xC4DA, 0x5185}, //{0xE5, 0x86, 0x85}, // �� + {0xB8D4, 0x5188}, //{0xE5, 0x86, 0x88}, // �� + {0xB2E1, 0x518C}, //{0xE5, 0x86, 0x8C}, // �� + {0xD4D9, 0x518D}, //{0xE5, 0x86, 0x8D}, // �� {0xC3B0, 0x5192}, //{0xE5, 0x86, 0x92}, // ð - {0xC3E1, 0x5195}, //{0xE5, 0x86, 0x95}, // - {0xC8DF, 0x5197}, //{0xE5, 0x86, 0x97}, // + {0xC3E1, 0x5195}, //{0xE5, 0x86, 0x95}, // �� + {0xC8DF, 0x5197}, //{0xE5, 0x86, 0x97}, // �� {0xD0B4, 0x5199}, //{0xE5, 0x86, 0x99}, // д - {0xBEFC, 0x519B}, //{0xE5, 0x86, 0x9B}, // + {0xBEFC, 0x519B}, //{0xE5, 0x86, 0x9B}, // �� {0xC5A9, 0x519C}, //{0xE5, 0x86, 0x9C}, // ũ - {0xB9DA, 0x51A0}, //{0xE5, 0x86, 0xA0}, // + {0xB9DA, 0x51A0}, //{0xE5, 0x86, 0xA0}, // �� {0xD4A9, 0x51A4}, //{0xE5, 0x86, 0xA4}, // ԩ - {0xB6AC, 0x51AC}, //{0xE5, 0x86, 0xAC}, // - {0xB7EB, 0x51AF}, //{0xE5, 0x86, 0xAF}, // - {0xB1F9, 0x51B0}, //{0xE5, 0x86, 0xB0}, // - {0xB3E5, 0x51B2}, //{0xE5, 0x86, 0xB2}, // - {0xBEF6, 0x51B3}, //{0xE5, 0x86, 0xB3}, // - {0xBFF6, 0x51B5}, //{0xE5, 0x86, 0xB5}, // + {0xB6AC, 0x51AC}, //{0xE5, 0x86, 0xAC}, // �� + {0xB7EB, 0x51AF}, //{0xE5, 0x86, 0xAF}, // �� + {0xB1F9, 0x51B0}, //{0xE5, 0x86, 0xB0}, // �� + {0xB3E5, 0x51B2}, //{0xE5, 0x86, 0xB2}, // �� + {0xBEF6, 0x51B3}, //{0xE5, 0x86, 0xB3}, // �� + {0xBFF6, 0x51B5}, //{0xE5, 0x86, 0xB5}, // �� {0xD2B1, 0x51B6}, //{0xE5, 0x86, 0xB6}, // ұ - {0xC0E4, 0x51B7}, //{0xE5, 0x86, 0xB7}, // - {0xB6B3, 0x51BB}, //{0xE5, 0x86, 0xBB}, // - {0xBEBB, 0x51C0}, //{0xE5, 0x87, 0x80}, // - {0xC6E0, 0x51C4}, //{0xE5, 0x87, 0x84}, // + {0xC0E4, 0x51B7}, //{0xE5, 0x86, 0xB7}, // �� + {0xB6B3, 0x51BB}, //{0xE5, 0x86, 0xBB}, // �� + {0xBEBB, 0x51C0}, //{0xE5, 0x87, 0x80}, // �� + {0xC6E0, 0x51C4}, //{0xE5, 0x87, 0x84}, // �� {0xD7BC, 0x51C6}, //{0xE5, 0x87, 0x86}, // ׼ - {0xC1B9, 0x51C9}, //{0xE5, 0x87, 0x89}, // - {0xC1E8, 0x51CC}, //{0xE5, 0x87, 0x8C}, // - {0xBCF5, 0x51CF}, //{0xE5, 0x87, 0x8F}, // - {0xB4D5, 0x51D1}, //{0xE5, 0x87, 0x91}, // - {0xC1DD, 0x51DB}, //{0xE5, 0x87, 0x9B}, // - {0xC4FD, 0x51DD}, //{0xE5, 0x87, 0x9D}, // - {0xBCB8, 0x51E0}, //{0xE5, 0x87, 0xA0}, // - {0xB7B2, 0x51E1}, //{0xE5, 0x87, 0xA1}, // - {0xB7EF, 0x51E4}, //{0xE5, 0x87, 0xA4}, // - {0xD9EC, 0x51EB}, //{0xE5, 0x87, 0xAB}, // + {0xC1B9, 0x51C9}, //{0xE5, 0x87, 0x89}, // y + {0xC1E8, 0x51CC}, //{0xE5, 0x87, 0x8C}, // �� + {0xBCF5, 0x51CF}, //{0xE5, 0x87, 0x8F}, // �� + {0xB4D5, 0x51D1}, //{0xE5, 0x87, 0x91}, // �� + {0xC1DD, 0x51DB}, //{0xE5, 0x87, 0x9B}, // �� + {0xC4FD, 0x51DD}, //{0xE5, 0x87, 0x9D}, // �� + {0xBCB8, 0x51E0}, //{0xE5, 0x87, 0xA0}, // �� + {0xB7B2, 0x51E1}, //{0xE5, 0x87, 0xA1}, // �� + {0xB7EF, 0x51E4}, //{0xE5, 0x87, 0xA4}, // �� + {0xD9EC, 0x51EB}, //{0xE5, 0x87, 0xAB}, // �� {0xC6BE, 0x51ED}, //{0xE5, 0x87, 0xAD}, // ƾ - {0xBFAD, 0x51EF}, //{0xE5, 0x87, 0xAF}, // - {0xBBCB, 0x51F0}, //{0xE5, 0x87, 0xB0}, // - {0xB5CA, 0x51F3}, //{0xE5, 0x87, 0xB3}, // - {0xD0D7, 0x51F6}, //{0xE5, 0x87, 0xB6}, // + {0xBFAD, 0x51EF}, //{0xE5, 0x87, 0xAF}, // �� + {0xBBCB, 0x51F0}, //{0xE5, 0x87, 0xB0}, // �� + {0xB5CA, 0x51F3}, //{0xE5, 0x87, 0xB3}, // �� + {0xD0D7, 0x51F6}, //{0xE5, 0x87, 0xB6}, // �� {0xCDB9, 0x51F8}, //{0xE5, 0x87, 0xB8}, // ͹ - {0xB0BC, 0x51F9}, //{0xE5, 0x87, 0xB9}, // - {0xB3F6, 0x51FA}, //{0xE5, 0x87, 0xBA}, // - {0xBBF7, 0x51FB}, //{0xE5, 0x87, 0xBB}, // - {0xBAAF, 0x51FD}, //{0xE5, 0x87, 0xBD}, // - {0xD4E4, 0x51FF}, //{0xE5, 0x87, 0xBF}, // - {0xB5B6, 0x5200}, //{0xE5, 0x88, 0x80}, // - {0xB5F3, 0x5201}, //{0xE5, 0x88, 0x81}, // - {0xC8D0, 0x5203}, //{0xE5, 0x88, 0x83}, // - {0xB7D6, 0x5206}, //{0xE5, 0x88, 0x86}, // - {0xC7D0, 0x5207}, //{0xE5, 0x88, 0x87}, // - {0xBFAF, 0x520A}, //{0xE5, 0x88, 0x8A}, // - {0xD0CC, 0x5211}, //{0xE5, 0x88, 0x91}, // - {0xBBAE, 0x5212}, //{0xE5, 0x88, 0x92}, // - {0xC1D0, 0x5217}, //{0xE5, 0x88, 0x97}, // - {0xC1F5, 0x5218}, //{0xE5, 0x88, 0x98}, // - {0xD4F2, 0x5219}, //{0xE5, 0x88, 0x99}, // - {0xB8D5, 0x521A}, //{0xE5, 0x88, 0x9A}, // - {0xB4B4, 0x521B}, //{0xE5, 0x88, 0x9B}, // - {0xB3F5, 0x521D}, //{0xE5, 0x88, 0x9D}, // + {0xB0BC, 0x51F9}, //{0xE5, 0x87, 0xB9}, // �� + {0xB3F6, 0x51FA}, //{0xE5, 0x87, 0xBA}, // �� + {0xBBF7, 0x51FB}, //{0xE5, 0x87, 0xBB}, // �� + {0xBAAF, 0x51FD}, //{0xE5, 0x87, 0xBD}, // �� + {0xD4E4, 0x51FF}, //{0xE5, 0x87, 0xBF}, // �� + {0xB5B6, 0x5200}, //{0xE5, 0x88, 0x80}, // �� + {0xB5F3, 0x5201}, //{0xE5, 0x88, 0x81}, // �� + {0xC8D0, 0x5203}, //{0xE5, 0x88, 0x83}, // �� + {0xB7D6, 0x5206}, //{0xE5, 0x88, 0x86}, // �� + {0xC7D0, 0x5207}, //{0xE5, 0x88, 0x87}, // �� + {0xBFAF, 0x520A}, //{0xE5, 0x88, 0x8A}, // �� + {0xD0CC, 0x5211}, //{0xE5, 0x88, 0x91}, // �� + {0xBBAE, 0x5212}, //{0xE5, 0x88, 0x92}, // �� + {0xC1D0, 0x5217}, //{0xE5, 0x88, 0x97}, // �� + {0xC1F5, 0x5218}, //{0xE5, 0x88, 0x98}, // �� + {0xD4F2, 0x5219}, //{0xE5, 0x88, 0x99}, // �� + {0xB8D5, 0x521A}, //{0xE5, 0x88, 0x9A}, // �� + {0xB4B4, 0x521B}, //{0xE5, 0x88, 0x9B}, // �� + {0xB3F5, 0x521D}, //{0xE5, 0x88, 0x9D}, // �� {0xC9BE, 0x5220}, //{0xE5, 0x88, 0xA0}, // ɾ - {0xC5D0, 0x5224}, //{0xE5, 0x88, 0xA4}, // - {0xC5D9, 0x5228}, //{0xE5, 0x88, 0xA8}, // - {0xC0FB, 0x5229}, //{0xE5, 0x88, 0xA9}, // - {0xB1F0, 0x522B}, //{0xE5, 0x88, 0xAB}, // - {0xB9CE, 0x522E}, //{0xE5, 0x88, 0xAE}, // - {0xB5BD, 0x5230}, //{0xE5, 0x88, 0xB0}, // - {0xD6C6, 0x5236}, //{0xE5, 0x88, 0xB6}, // + {0xC5D0, 0x5224}, //{0xE5, 0x88, 0xA4}, // �� + {0xC5D9, 0x5228}, //{0xE5, 0x88, 0xA8}, // �� + {0xC0FB, 0x5229}, //{0xE5, 0x88, 0xA9}, // �� + {0xB1F0, 0x522B}, //{0xE5, 0x88, 0xAB}, // �� + {0xB9CE, 0x522E}, //{0xE5, 0x88, 0xAE}, // �� + {0xB5BD, 0x5230}, //{0xE5, 0x88, 0xB0}, // �� + {0xD6C6, 0x5236}, //{0xE5, 0x88, 0xB6}, // �� {0xCBA2, 0x5237}, //{0xE5, 0x88, 0xB7}, // ˢ {0xC8AF, 0x5238}, //{0xE5, 0x88, 0xB8}, // ȯ {0xC9B2, 0x5239}, //{0xE5, 0x88, 0xB9}, // ɲ - {0xB4CC, 0x523A}, //{0xE5, 0x88, 0xBA}, // - {0xBFCC, 0x523B}, //{0xE5, 0x88, 0xBB}, // - {0xB9F4, 0x523D}, //{0xE5, 0x88, 0xBD}, // - {0xBCC1, 0x5242}, //{0xE5, 0x89, 0x82}, // - {0xCCEA, 0x5243}, //{0xE5, 0x89, 0x83}, // - {0xCFF7, 0x524A}, //{0xE5, 0x89, 0x8A}, // + {0xB4CC, 0x523A}, //{0xE5, 0x88, 0xBA}, // �� + {0xBFCC, 0x523B}, //{0xE5, 0x88, 0xBB}, // �� + {0xB9F4, 0x523D}, //{0xE5, 0x88, 0xBD}, // �� + {0xBCC1, 0x5242}, //{0xE5, 0x89, 0x82}, // �� + {0xCCEA, 0x5243}, //{0xE5, 0x89, 0x83}, // �� + {0xCFF7, 0x524A}, //{0xE5, 0x89, 0x8A}, // �� {0xC7B0, 0x524D}, //{0xE5, 0x89, 0x8D}, // ǰ - {0xBDA3, 0x5251}, //{0xE5, 0x89, 0x91}, // - {0xCCDE, 0x5254}, //{0xE5, 0x89, 0x94}, // - {0xC6CA, 0x5256}, //{0xE5, 0x89, 0x96}, // - {0xB0FE, 0x5265}, //{0xE5, 0x89, 0xA5}, // - {0xBEE7, 0x5267}, //{0xE5, 0x89, 0xA7}, // + {0xBDA3, 0x5251}, //{0xE5, 0x89, 0x91}, // �� + {0xCCDE, 0x5254}, //{0xE5, 0x89, 0x94}, // �� + {0xC6CA, 0x5256}, //{0xE5, 0x89, 0x96}, // �� + {0xB0FE, 0x5265}, //{0xE5, 0x89, 0xA5}, // �� + {0xBEE7, 0x5267}, //{0xE5, 0x89, 0xA7}, // �� {0xCAA3, 0x5269}, //{0xE5, 0x89, 0xA9}, // ʣ - {0xBCF4, 0x526A}, //{0xE5, 0x89, 0xAA}, // - {0xB8B1, 0x526F}, //{0xE5, 0x89, 0xAF}, // - {0xB8EE, 0x5272}, //{0xE5, 0x89, 0xB2}, // - {0xBDCB, 0x527F}, //{0xE5, 0x89, 0xBF}, // - {0xC5FC, 0x5288}, //{0xE5, 0x8A, 0x88}, // - {0xC1A6, 0x529B}, //{0xE5, 0x8A, 0x9B}, // + {0xBCF4, 0x526A}, //{0xE5, 0x89, 0xAA}, // �� + {0xB8B1, 0x526F}, //{0xE5, 0x89, 0xAF}, // �� + {0xB8EE, 0x5272}, //{0xE5, 0x89, 0xB2}, // �� + {0xBDCB, 0x527F}, //{0xE5, 0x89, 0xBF}, // �� + {0xC5FC, 0x5288}, //{0xE5, 0x8A, 0x88}, // �� + {0xC1A6, 0x529B}, //{0xE5, 0x8A, 0x9B}, // f {0xC8B0, 0x529D}, //{0xE5, 0x8A, 0x9D}, // Ȱ - {0xB0EC, 0x529E}, //{0xE5, 0x8A, 0x9E}, // - {0xB9A6, 0x529F}, //{0xE5, 0x8A, 0x9F}, // - {0xBCD3, 0x52A0}, //{0xE5, 0x8A, 0xA0}, // - {0xCEF1, 0x52A1}, //{0xE5, 0x8A, 0xA1}, // - {0xC1D3, 0x52A3}, //{0xE5, 0x8A, 0xA3}, // - {0xB6AF, 0x52A8}, //{0xE5, 0x8A, 0xA8}, // - {0xD6FA, 0x52A9}, //{0xE5, 0x8A, 0xA9}, // + {0xB0EC, 0x529E}, //{0xE5, 0x8A, 0x9E}, // �� + {0xB9A6, 0x529F}, //{0xE5, 0x8A, 0x9F}, // �� + {0xBCD3, 0x52A0}, //{0xE5, 0x8A, 0xA0}, // �� + {0xCEF1, 0x52A1}, //{0xE5, 0x8A, 0xA1}, // �� + {0xC1D3, 0x52A3}, //{0xE5, 0x8A, 0xA3}, // �� + {0xB6AF, 0x52A8}, //{0xE5, 0x8A, 0xA8}, // �� + {0xD6FA, 0x52A9}, //{0xE5, 0x8A, 0xA9}, // �� {0xC5AC, 0x52AA}, //{0xE5, 0x8A, 0xAA}, // Ŭ - {0xBDD9, 0x52AB}, //{0xE5, 0x8A, 0xAB}, // - {0xC0F8, 0x52B1}, //{0xE5, 0x8A, 0xB1}, // - {0xBEA2, 0x52B2}, //{0xE5, 0x8A, 0xB2}, // - {0xC0CD, 0x52B3}, //{0xE5, 0x8A, 0xB3}, // - {0xCAC6, 0x52BF}, //{0xE5, 0x8A, 0xBF}, // - {0xB2AA, 0x52C3}, //{0xE5, 0x8B, 0x83}, // - {0xD3C2, 0x52C7}, //{0xE5, 0x8B, 0x87}, // - {0xC3E3, 0x52C9}, //{0xE5, 0x8B, 0x89}, // + {0xBDD9, 0x52AB}, //{0xE5, 0x8A, 0xAB}, // �� + {0xC0F8, 0x52B1}, //{0xE5, 0x8A, 0xB1}, // �� + {0xBEA2, 0x52B2}, //{0xE5, 0x8A, 0xB2}, // �� + {0xC0CD, 0x52B3}, //{0xE5, 0x8A, 0xB3}, // �� + {0xCAC6, 0x52BF}, //{0xE5, 0x8A, 0xBF}, // �� + {0xB2AA, 0x52C3}, //{0xE5, 0x8B, 0x83}, // �� + {0xD3C2, 0x52C7}, //{0xE5, 0x8B, 0x87}, // �� + {0xC3E3, 0x52C9}, //{0xE5, 0x8B, 0x89}, // �� {0xD1AB, 0x52CB}, //{0xE5, 0x8B, 0x8B}, // ѫ - {0xC0D5, 0x52D2}, //{0xE5, 0x8B, 0x92}, // - {0xBFB1, 0x52D8}, //{0xE5, 0x8B, 0x98}, // + {0xC0D5, 0x52D2}, //{0xE5, 0x8B, 0x92}, // �� + {0xBFB1, 0x52D8}, //{0xE5, 0x8B, 0x98}, // �� {0xC4BC, 0x52DF}, //{0xE5, 0x8B, 0x9F}, // ļ - {0xC7DA, 0x52E4}, //{0xE5, 0x8B, 0xA4}, // - {0xC9D7, 0x52FA}, //{0xE5, 0x8B, 0xBA}, // - {0xB9B4, 0x52FE}, //{0xE5, 0x8B, 0xBE}, // - {0xCEF0, 0x52FF}, //{0xE5, 0x8B, 0xBF}, // - {0xD4C8, 0x5300}, //{0xE5, 0x8C, 0x80}, // - {0xB0FC, 0x5305}, //{0xE5, 0x8C, 0x85}, // - {0xB4D2, 0x5306}, //{0xE5, 0x8C, 0x86}, // - {0xD0D9, 0x5308}, //{0xE5, 0x8C, 0x88}, // + {0xC7DA, 0x52E4}, //{0xE5, 0x8B, 0xA4}, // �� + {0xC9D7, 0x52FA}, //{0xE5, 0x8B, 0xBA}, // �� + {0xB9B4, 0x52FE}, //{0xE5, 0x8B, 0xBE}, // �� + {0xCEF0, 0x52FF}, //{0xE5, 0x8B, 0xBF}, // �� + {0xD4C8, 0x5300}, //{0xE5, 0x8C, 0x80}, // �� + {0xB0FC, 0x5305}, //{0xE5, 0x8C, 0x85}, // �� + {0xB4D2, 0x5306}, //{0xE5, 0x8C, 0x86}, // �� + {0xD0D9, 0x5308}, //{0xE5, 0x8C, 0x88}, // �� {0xD8B0, 0x5315}, //{0xE5, 0x8C, 0x95}, // ذ - {0xBBAF, 0x5316}, //{0xE5, 0x8C, 0x96}, // - {0xB1B1, 0x5317}, //{0xE5, 0x8C, 0x97}, // - {0xB3D7, 0x5319}, //{0xE5, 0x8C, 0x99}, // - {0xBDB3, 0x5320}, //{0xE5, 0x8C, 0xA0}, // + {0xBBAF, 0x5316}, //{0xE5, 0x8C, 0x96}, // �� + {0xB1B1, 0x5317}, //{0xE5, 0x8C, 0x97}, // �� + {0xB3D7, 0x5319}, //{0xE5, 0x8C, 0x99}, // �� + {0xBDB3, 0x5320}, //{0xE5, 0x8C, 0xA0}, // �� {0xCFBB, 0x5323}, //{0xE5, 0x8C, 0xA3}, // ϻ - {0xB7CB, 0x532A}, //{0xE5, 0x8C, 0xAA}, // + {0xB7CB, 0x532A}, //{0xE5, 0x8C, 0xAA}, // �� {0xC6A5, 0x5339}, //{0xE5, 0x8C, 0xB9}, // ƥ - {0xC7F8, 0x533A}, //{0xE5, 0x8C, 0xBA}, // + {0xC7F8, 0x533A}, //{0xE5, 0x8C, 0xBA}, // �� {0xD2BD, 0x533B}, //{0xE5, 0x8C, 0xBB}, // ҽ - {0xD8D2, 0x533E}, //{0xE5, 0x8C, 0xBE}, // - {0xC4E4, 0x533F}, //{0xE5, 0x8C, 0xBF}, // + {0xD8D2, 0x533E}, //{0xE5, 0x8C, 0xBE}, // �� + {0xC4E4, 0x533F}, //{0xE5, 0x8C, 0xBF}, // �� {0xCAAE, 0x5341}, //{0xE5, 0x8D, 0x81}, // ʮ {0xC7A7, 0x5343}, //{0xE5, 0x8D, 0x83}, // ǧ - {0xC9FD, 0x5347}, //{0xE5, 0x8D, 0x87}, // - {0xCEE7, 0x5348}, //{0xE5, 0x8D, 0x88}, // - {0xB0EB, 0x534A}, //{0xE5, 0x8D, 0x8A}, // - {0xBBAA, 0x534E}, //{0xE5, 0x8D, 0x8E}, // + {0xC9FD, 0x5347}, //{0xE5, 0x8D, 0x87}, // �� + {0xCEE7, 0x5348}, //{0xE5, 0x8D, 0x88}, // �� + {0xB0EB, 0x534A}, //{0xE5, 0x8D, 0x8A}, // �� + {0xBBAA, 0x534E}, //{0xE5, 0x8D, 0x8E}, // �� {0xD0AD, 0x534F}, //{0xE5, 0x8D, 0x8F}, // Э - {0xB1B0, 0x5351}, //{0xE5, 0x8D, 0x91}, // - {0xD7E4, 0x5352}, //{0xE5, 0x8D, 0x92}, // + {0xB1B0, 0x5351}, //{0xE5, 0x8D, 0x91}, // �� + {0xD7E4, 0x5352}, //{0xE5, 0x8D, 0x92}, // �� {0xD7BF, 0x5353}, //{0xE5, 0x8D, 0x93}, // ׿ - {0xB5A5, 0x5355}, //{0xE5, 0x8D, 0x95}, // - {0xC2F4, 0x5356}, //{0xE5, 0x8D, 0x96}, // - {0xC4CF, 0x5357}, //{0xE5, 0x8D, 0x97}, // - {0xB2A9, 0x535A}, //{0xE5, 0x8D, 0x9A}, // - {0xB2B7, 0x535C}, //{0xE5, 0x8D, 0x9C}, // + {0xB5A5, 0x5355}, //{0xE5, 0x8D, 0x95}, // �� + {0xC2F4, 0x5356}, //{0xE5, 0x8D, 0x96}, // �� + {0xC4CF, 0x5357}, //{0xE5, 0x8D, 0x97}, // �� + {0xB2A9, 0x535A}, //{0xE5, 0x8D, 0x9A}, // �� + {0xB2B7, 0x535C}, //{0xE5, 0x8D, 0x9C}, // �� {0xD5BC, 0x5360}, //{0xE5, 0x8D, 0xA0}, // ռ - {0xBFA8, 0x5361}, //{0xE5, 0x8D, 0xA1}, // + {0xBFA8, 0x5361}, //{0xE5, 0x8D, 0xA1}, // �� {0xC2AC, 0x5362}, //{0xE5, 0x8D, 0xA2}, // ¬ {0xC2B1, 0x5364}, //{0xE5, 0x8D, 0xA4}, // ± - {0xD8D4, 0x5366}, //{0xE5, 0x8D, 0xA6}, // - {0xCED4, 0x5367}, //{0xE5, 0x8D, 0xA7}, // - {0xCEC0, 0x536B}, //{0xE5, 0x8D, 0xAB}, // + {0xD8D4, 0x5366}, //{0xE5, 0x8D, 0xA6}, // �� + {0xCED4, 0x5367}, //{0xE5, 0x8D, 0xA7}, // �� + {0xCEC0, 0x536B}, //{0xE5, 0x8D, 0xAB}, // �� {0xD3A1, 0x5370}, //{0xE5, 0x8D, 0xB0}, // ӡ {0xCEA3, 0x5371}, //{0xE5, 0x8D, 0xB1}, // Σ - {0xBCB4, 0x5373}, //{0xE5, 0x8D, 0xB3}, // + {0xBCB4, 0x5373}, //{0xE5, 0x8D, 0xB3}, // �� {0xC8B4, 0x5374}, //{0xE5, 0x8D, 0xB4}, // ȴ - {0xC2D1, 0x5375}, //{0xE5, 0x8D, 0xB5}, // - {0xBEED, 0x5377}, //{0xE5, 0x8D, 0xB7}, // + {0xC2D1, 0x5375}, //{0xE5, 0x8D, 0xB5}, // �� + {0xBEED, 0x5377}, //{0xE5, 0x8D, 0xB7}, // �� {0xD0B6, 0x5378}, //{0xE5, 0x8D, 0xB8}, // ж - {0xC7E4, 0x537F}, //{0xE5, 0x8D, 0xBF}, // - {0xB3A7, 0x5382}, //{0xE5, 0x8E, 0x82}, // - {0xCCFC, 0x5385}, //{0xE5, 0x8E, 0x85}, // - {0xC0FA, 0x5386}, //{0xE5, 0x8E, 0x86}, // - {0xC0F7, 0x5389}, //{0xE5, 0x8E, 0x89}, // + {0xC7E4, 0x537F}, //{0xE5, 0x8D, 0xBF}, // �� + {0xB3A7, 0x5382}, //{0xE5, 0x8E, 0x82}, // �� + {0xCCFC, 0x5385}, //{0xE5, 0x8E, 0x85}, // �� + {0xC0FA, 0x5386}, //{0xE5, 0x8E, 0x86}, // �� + {0xC0F7, 0x5389}, //{0xE5, 0x8E, 0x89}, // �� {0xD1B9, 0x538B}, //{0xE5, 0x8E, 0x8B}, // ѹ - {0xD1E1, 0x538C}, //{0xE5, 0x8E, 0x8C}, // - {0xB2DE, 0x5395}, //{0xE5, 0x8E, 0x95}, // - {0xC0E5, 0x5398}, //{0xE5, 0x8E, 0x98}, // - {0xBAF1, 0x539A}, //{0xE5, 0x8E, 0x9A}, // + {0xD1E1, 0x538C}, //{0xE5, 0x8E, 0x8C}, // �� + {0xB2DE, 0x5395}, //{0xE5, 0x8E, 0x95}, // �� + {0xC0E5, 0x5398}, //{0xE5, 0x8E, 0x98}, // �� + {0xBAF1, 0x539A}, //{0xE5, 0x8E, 0x9A}, // �� {0xD4AD, 0x539F}, //{0xE5, 0x8E, 0x9F}, // ԭ - {0xCFE1, 0x53A2}, //{0xE5, 0x8E, 0xA2}, // - {0xCFC3, 0x53A6}, //{0xE5, 0x8E, 0xA6}, // - {0xB3F8, 0x53A8}, //{0xE5, 0x8E, 0xA8}, // + {0xCFE1, 0x53A2}, //{0xE5, 0x8E, 0xA2}, // �� + {0xCFC3, 0x53A6}, //{0xE5, 0x8E, 0xA6}, // �� + {0xB3F8, 0x53A8}, //{0xE5, 0x8E, 0xA8}, // �� {0xC8A5, 0x53BB}, //{0xE5, 0x8E, 0xBB}, // ȥ - {0xCFD8, 0x53BF}, //{0xE5, 0x8E, 0xBF}, // - {0xB2CE, 0x53C2}, //{0xE5, 0x8F, 0x82}, // - {0xD3D6, 0x53C8}, //{0xE5, 0x8F, 0x88}, // - {0xB2E6, 0x53C9}, //{0xE5, 0x8F, 0x89}, // - {0xBCB0, 0x53CA}, //{0xE5, 0x8F, 0x8A}, // - {0xD3D1, 0x53CB}, //{0xE5, 0x8F, 0x8B}, // + {0xCFD8, 0x53BF}, //{0xE5, 0x8E, 0xBF}, // �� + {0xB2CE, 0x53C2}, //{0xE5, 0x8F, 0x82}, // �� + {0xD3D6, 0x53C8}, //{0xE5, 0x8F, 0x88}, // �� + {0xB2E6, 0x53C9}, //{0xE5, 0x8F, 0x89}, // �� + {0xBCB0, 0x53CA}, //{0xE5, 0x8F, 0x8A}, // �� + {0xD3D1, 0x53CB}, //{0xE5, 0x8F, 0x8B}, // �� {0xCBAB, 0x53CC}, //{0xE5, 0x8F, 0x8C}, // ˫ - {0xB7B4, 0x53CD}, //{0xE5, 0x8F, 0x8D}, // - {0xB7A2, 0x53D1}, //{0xE5, 0x8F, 0x91}, // - {0xCAE5, 0x53D4}, //{0xE5, 0x8F, 0x94}, // + {0xB7B4, 0x53CD}, //{0xE5, 0x8F, 0x8D}, // �� + {0xB7A2, 0x53D1}, //{0xE5, 0x8F, 0x91}, // �� + {0xCAE5, 0x53D4}, //{0xE5, 0x8F, 0x94}, // �� {0xC8A1, 0x53D6}, //{0xE5, 0x8F, 0x96}, // ȡ - {0xCADC, 0x53D7}, //{0xE5, 0x8F, 0x97}, // - {0xB1E4, 0x53D8}, //{0xE5, 0x8F, 0x98}, // - {0xD0F0, 0x53D9}, //{0xE5, 0x8F, 0x99}, // - {0xC5D1, 0x53DB}, //{0xE5, 0x8F, 0x9B}, // - {0xB5FE, 0x53E0}, //{0xE5, 0x8F, 0xA0}, // - {0xBFDA, 0x53E3}, //{0xE5, 0x8F, 0xA3}, // - {0xB9C5, 0x53E4}, //{0xE5, 0x8F, 0xA4}, // - {0xBEE4, 0x53E5}, //{0xE5, 0x8F, 0xA5}, // - {0xC1ED, 0x53E6}, //{0xE5, 0x8F, 0xA6}, // + {0xCADC, 0x53D7}, //{0xE5, 0x8F, 0x97}, // �� + {0xB1E4, 0x53D8}, //{0xE5, 0x8F, 0x98}, // �� + {0xD0F0, 0x53D9}, //{0xE5, 0x8F, 0x99}, // �� + {0xC5D1, 0x53DB}, //{0xE5, 0x8F, 0x9B}, // �� + {0xB5FE, 0x53E0}, //{0xE5, 0x8F, 0xA0}, // �� + {0xBFDA, 0x53E3}, //{0xE5, 0x8F, 0xA3}, // �� + {0xB9C5, 0x53E4}, //{0xE5, 0x8F, 0xA4}, // �� + {0xBEE4, 0x53E5}, //{0xE5, 0x8F, 0xA5}, // �� + {0xC1ED, 0x53E6}, //{0xE5, 0x8F, 0xA6}, // �� {0xDFB6, 0x53E8}, //{0xE5, 0x8F, 0xA8}, // ߶ {0xD6BB, 0x53EA}, //{0xE5, 0x8F, 0xAA}, // ֻ - {0xBDD0, 0x53EB}, //{0xE5, 0x8F, 0xAB}, // - {0xD5D9, 0x53EC}, //{0xE5, 0x8F, 0xAC}, // - {0xB0C8, 0x53ED}, //{0xE5, 0x8F, 0xAD}, // - {0xB6A3, 0x53EE}, //{0xE5, 0x8F, 0xAE}, // - {0xBFC9, 0x53EF}, //{0xE5, 0x8F, 0xAF}, // + {0xBDD0, 0x53EB}, //{0xE5, 0x8F, 0xAB}, // �� + {0xD5D9, 0x53EC}, //{0xE5, 0x8F, 0xAC}, // �� + {0xB0C8, 0x53ED}, //{0xE5, 0x8F, 0xAD}, // �� + {0xB6A3, 0x53EE}, //{0xE5, 0x8F, 0xAE}, // �� + {0xBFC9, 0x53EF}, //{0xE5, 0x8F, 0xAF}, // �� {0xCCA8, 0x53F0}, //{0xE5, 0x8F, 0xB0}, // ̨ {0xCAB7, 0x53F2}, //{0xE5, 0x8F, 0xB2}, // ʷ - {0xD3D2, 0x53F3}, //{0xE5, 0x8F, 0xB3}, // + {0xD3D2, 0x53F3}, //{0xE5, 0x8F, 0xB3}, // �� {0xD2B6, 0x53F6}, //{0xE5, 0x8F, 0xB6}, // Ҷ - {0xBAC5, 0x53F7}, //{0xE5, 0x8F, 0xB7}, // + {0xBAC5, 0x53F7}, //{0xE5, 0x8F, 0xB7}, // �� {0xCBBE, 0x53F8}, //{0xE5, 0x8F, 0xB8}, // ˾ {0xCCBE, 0x53F9}, //{0xE5, 0x8F, 0xB9}, // ̾ - {0xB5F0, 0x53FC}, //{0xE5, 0x8F, 0xBC}, // + {0xB5F0, 0x53FC}, //{0xE5, 0x8F, 0xBC}, // �� {0xDFB4, 0x53FD}, //{0xE5, 0x8F, 0xBD}, // ߴ - {0xD3F5, 0x5401}, //{0xE5, 0x90, 0x81}, // - {0xB3D4, 0x5403}, //{0xE5, 0x90, 0x83}, // - {0xB8F7, 0x5404}, //{0xE5, 0x90, 0x84}, // + {0xD3F5, 0x5401}, //{0xE5, 0x90, 0x81}, // �� + {0xB3D4, 0x5403}, //{0xE5, 0x90, 0x83}, // �� + {0xB8F7, 0x5404}, //{0xE5, 0x90, 0x84}, // �� {0xDFBA, 0x5406}, //{0xE5, 0x90, 0x86}, // ߺ - {0xBACF, 0x5408}, //{0xE5, 0x90, 0x88}, // - {0xBCAA, 0x5409}, //{0xE5, 0x90, 0x89}, // - {0xB5F5, 0x540A}, //{0xE5, 0x90, 0x8A}, // + {0xBACF, 0x5408}, //{0xE5, 0x90, 0x88}, // �� + {0xBCAA, 0x5409}, //{0xE5, 0x90, 0x89}, // �� + {0xB5F5, 0x540A}, //{0xE5, 0x90, 0x8A}, // �� {0xCDAC, 0x540C}, //{0xE5, 0x90, 0x8C}, // ͬ - {0xC3FB, 0x540D}, //{0xE5, 0x90, 0x8D}, // - {0xBAF3, 0x540E}, //{0xE5, 0x90, 0x8E}, // - {0xC0F4, 0x540F}, //{0xE5, 0x90, 0x8F}, // - {0xCDC2, 0x5410}, //{0xE5, 0x90, 0x90}, // - {0xCFF2, 0x5411}, //{0xE5, 0x90, 0x91}, // - {0xCFC5, 0x5413}, //{0xE5, 0x90, 0x93}, // - {0xC2C0, 0x5415}, //{0xE5, 0x90, 0x95}, // - {0xC2F0, 0x5417}, //{0xE5, 0x90, 0x97}, // - {0xBEFD, 0x541B}, //{0xE5, 0x90, 0x9B}, // - {0xC1DF, 0x541D}, //{0xE5, 0x90, 0x9D}, // - {0xCDCC, 0x541E}, //{0xE5, 0x90, 0x9E}, // - {0xD2F7, 0x541F}, //{0xE5, 0x90, 0x9F}, // - {0xB7CD, 0x5420}, //{0xE5, 0x90, 0xA0}, // - {0xB7F1, 0x5426}, //{0xE5, 0x90, 0xA6}, // - {0xB0C9, 0x5427}, //{0xE5, 0x90, 0xA7}, // - {0xB6D6, 0x5428}, //{0xE5, 0x90, 0xA8}, // - {0xB7D4, 0x5429}, //{0xE5, 0x90, 0xA9}, // - {0xBAAC, 0x542B}, //{0xE5, 0x90, 0xAB}, // - {0xCCFD, 0x542C}, //{0xE5, 0x90, 0xAC}, // - {0xBFD4, 0x542D}, //{0xE5, 0x90, 0xAD}, // + {0xC3FB, 0x540D}, //{0xE5, 0x90, 0x8D}, // �� + {0xBAF3, 0x540E}, //{0xE5, 0x90, 0x8E}, // �� + {0xC0F4, 0x540F}, //{0xE5, 0x90, 0x8F}, // �� + {0xCDC2, 0x5410}, //{0xE5, 0x90, 0x90}, // �� + {0xCFF2, 0x5411}, //{0xE5, 0x90, 0x91}, // �� + {0xCFC5, 0x5413}, //{0xE5, 0x90, 0x93}, // �� + {0xC2C0, 0x5415}, //{0xE5, 0x90, 0x95}, // �� + {0xC2F0, 0x5417}, //{0xE5, 0x90, 0x97}, // �� + {0xBEFD, 0x541B}, //{0xE5, 0x90, 0x9B}, // �� + {0xC1DF, 0x541D}, //{0xE5, 0x90, 0x9D}, // �� + {0xCDCC, 0x541E}, //{0xE5, 0x90, 0x9E}, // �� + {0xD2F7, 0x541F}, //{0xE5, 0x90, 0x9F}, // �� + {0xB7CD, 0x5420}, //{0xE5, 0x90, 0xA0}, // �� + {0xB7F1, 0x5426}, //{0xE5, 0x90, 0xA6}, // �� + {0xB0C9, 0x5427}, //{0xE5, 0x90, 0xA7}, // �� + {0xB6D6, 0x5428}, //{0xE5, 0x90, 0xA8}, // �� + {0xB7D4, 0x5429}, //{0xE5, 0x90, 0xA9}, // �� + {0xBAAC, 0x542B}, //{0xE5, 0x90, 0xAB}, // �� + {0xCCFD, 0x542C}, //{0xE5, 0x90, 0xAC}, // �� + {0xBFD4, 0x542D}, //{0xE5, 0x90, 0xAD}, // �� {0xCBB1, 0x542E}, //{0xE5, 0x90, 0xAE}, // ˱ - {0xC6F4, 0x542F}, //{0xE5, 0x90, 0xAF}, // + {0xC6F4, 0x542F}, //{0xE5, 0x90, 0xAF}, // �� {0xD6A8, 0x5431}, //{0xE5, 0x90, 0xB1}, // ֨ - {0xCEE2, 0x5434}, //{0xE5, 0x90, 0xB4}, // - {0xB3B3, 0x5435}, //{0xE5, 0x90, 0xB5}, // - {0xCEFC, 0x5438}, //{0xE5, 0x90, 0xB8}, // - {0xB4B5, 0x5439}, //{0xE5, 0x90, 0xB9}, // - {0xCEC7, 0x543B}, //{0xE5, 0x90, 0xBB}, // - {0xBAF0, 0x543C}, //{0xE5, 0x90, 0xBC}, // + {0xCEE2, 0x5434}, //{0xE5, 0x90, 0xB4}, // �� + {0xB3B3, 0x5435}, //{0xE5, 0x90, 0xB5}, // �� + {0xCEFC, 0x5438}, //{0xE5, 0x90, 0xB8}, // �� + {0xB4B5, 0x5439}, //{0xE5, 0x90, 0xB9}, // �� + {0xCEC7, 0x543B}, //{0xE5, 0x90, 0xBB}, // �� + {0xBAF0, 0x543C}, //{0xE5, 0x90, 0xBC}, // �� {0xD1BD, 0x5440}, //{0xE5, 0x91, 0x80}, // ѽ - {0xB4F4, 0x5446}, //{0xE5, 0x91, 0x86}, // - {0xB3CA, 0x5448}, //{0xE5, 0x91, 0x88}, // - {0xB8E6, 0x544A}, //{0xE5, 0x91, 0x8A}, // - {0xC4C5, 0x5450}, //{0xE5, 0x91, 0x90}, // + {0xB4F4, 0x5446}, //{0xE5, 0x91, 0x86}, // �� + {0xB3CA, 0x5448}, //{0xE5, 0x91, 0x88}, // �� + {0xB8E6, 0x544A}, //{0xE5, 0x91, 0x8A}, // �� + {0xC4C5, 0x5450}, //{0xE5, 0x91, 0x90}, // �� {0xC5BB, 0x5455}, //{0xE5, 0x91, 0x95}, // Ż {0xD4B1, 0x5458}, //{0xE5, 0x91, 0x98}, // Ա {0xC7BA, 0x545B}, //{0xE5, 0x91, 0x9B}, // Ǻ - {0xCED8, 0x545C}, //{0xE5, 0x91, 0x9C}, // - {0xC4D8, 0x5462}, //{0xE5, 0x91, 0xA2}, // - {0xD6DC, 0x5468}, //{0xE5, 0x91, 0xA8}, // + {0xCED8, 0x545C}, //{0xE5, 0x91, 0x9C}, // �� + {0xC4D8, 0x5462}, //{0xE5, 0x91, 0xA2}, // �� + {0xD6DC, 0x5468}, //{0xE5, 0x91, 0xA8}, // �� {0xCEB6, 0x5473}, //{0xE5, 0x91, 0xB3}, // ζ - {0xBAC7, 0x5475}, //{0xE5, 0x91, 0xB5}, // - {0xC9EB, 0x547B}, //{0xE5, 0x91, 0xBB}, // - {0xBAF4, 0x547C}, //{0xE5, 0x91, 0xBC}, // - {0xC3FC, 0x547D}, //{0xE5, 0x91, 0xBD}, // - {0xC5D8, 0x5486}, //{0xE5, 0x92, 0x86}, // - {0xBACD, 0x548C}, //{0xE5, 0x92, 0x8C}, // + {0xBAC7, 0x5475}, //{0xE5, 0x91, 0xB5}, // �� + {0xC9EB, 0x547B}, //{0xE5, 0x91, 0xBB}, // �� + {0xBAF4, 0x547C}, //{0xE5, 0x91, 0xBC}, // �� + {0xC3FC, 0x547D}, //{0xE5, 0x91, 0xBD}, // �� + {0xC5D8, 0x5486}, //{0xE5, 0x92, 0x86}, // �� + {0xBACD, 0x548C}, //{0xE5, 0x92, 0x8C}, // �� {0xD3BD, 0x548F}, //{0xE5, 0x92, 0x8F}, // ӽ - {0xB8C0, 0x5490}, //{0xE5, 0x92, 0x90}, // - {0xD6E4, 0x5492}, //{0xE5, 0x92, 0x92}, // - {0xB9BE, 0x5495}, //{0xE5, 0x92, 0x95}, // - {0xBFA7, 0x5496}, //{0xE5, 0x92, 0x96}, // - {0xC1FC, 0x5499}, //{0xE5, 0x92, 0x99}, // - {0xDFD6, 0x54A7}, //{0xE5, 0x92, 0xA7}, // - {0xD7C9, 0x54A8}, //{0xE5, 0x92, 0xA8}, // - {0xDFE4, 0x54AA}, //{0xE5, 0x92, 0xAA}, // + {0xB8C0, 0x5490}, //{0xE5, 0x92, 0x90}, // �� + {0xD6E4, 0x5492}, //{0xE5, 0x92, 0x92}, // �� + {0xB9BE, 0x5495}, //{0xE5, 0x92, 0x95}, // �� + {0xBFA7, 0x5496}, //{0xE5, 0x92, 0x96}, // �� + {0xC1FC, 0x5499}, //{0xE5, 0x92, 0x99}, // �� + {0xDFD6, 0x54A7}, //{0xE5, 0x92, 0xA7}, // �� + {0xD7C9, 0x54A8}, //{0xE5, 0x92, 0xA8}, // �� + {0xDFE4, 0x54AA}, //{0xE5, 0x92, 0xAA}, // �� {0xD2A7, 0x54AC}, //{0xE5, 0x92, 0xAC}, // ҧ - {0xD4DB, 0x54B1}, //{0xE5, 0x92, 0xB1}, // - {0xBFC8, 0x54B3}, //{0xE5, 0x92, 0xB3}, // - {0xCFCC, 0x54B8}, //{0xE5, 0x92, 0xB8}, // - {0xD1CA, 0x54BD}, //{0xE5, 0x92, 0xBD}, // - {0xB0A7, 0x54C0}, //{0xE5, 0x93, 0x80}, // + {0xD4DB, 0x54B1}, //{0xE5, 0x92, 0xB1}, // �� + {0xBFC8, 0x54B3}, //{0xE5, 0x92, 0xB3}, // �� + {0xCFCC, 0x54B8}, //{0xE5, 0x92, 0xB8}, // �� + {0xD1CA, 0x54BD}, //{0xE5, 0x92, 0xBD}, // �� + {0xB0A7, 0x54C0}, //{0xE5, 0x93, 0x80}, // �� {0xC6B7, 0x54C1}, //{0xE5, 0x93, 0x81}, // Ʒ - {0xBAE5, 0x54C4}, //{0xE5, 0x93, 0x84}, // - {0xB6DF, 0x54C6}, //{0xE5, 0x93, 0x86}, // - {0xB9FE, 0x54C8}, //{0xE5, 0x93, 0x88}, // - {0xCFEC, 0x54CD}, //{0xE5, 0x93, 0x8D}, // - {0xB0A5, 0x54CE}, //{0xE5, 0x93, 0x8E}, // - {0xD1C6, 0x54D1}, //{0xE5, 0x93, 0x91}, // - {0xBBA9, 0x54D7}, //{0xE5, 0x93, 0x97}, // + {0xBAE5, 0x54C4}, //{0xE5, 0x93, 0x84}, // �� + {0xB6DF, 0x54C6}, //{0xE5, 0x93, 0x86}, // �� + {0xB9FE, 0x54C8}, //{0xE5, 0x93, 0x88}, // �� + {0xCFEC, 0x54CD}, //{0xE5, 0x93, 0x8D}, // �� + {0xB0A5, 0x54CE}, //{0xE5, 0x93, 0x8E}, // �� + {0xD1C6, 0x54D1}, //{0xE5, 0x93, 0x91}, // �� + {0xBBA9, 0x54D7}, //{0xE5, 0x93, 0x97}, // �� {0xD3B4, 0x54DF}, //{0xE5, 0x93, 0x9F}, // Ӵ - {0xB8E7, 0x54E5}, //{0xE5, 0x93, 0xA5}, // - {0xC9DA, 0x54E8}, //{0xE5, 0x93, 0xA8}, // - {0xC1A8, 0x54E9}, //{0xE5, 0x93, 0xA9}, // - {0xC4C4, 0x54EA}, //{0xE5, 0x93, 0xAA}, // - {0xBFDE, 0x54ED}, //{0xE5, 0x93, 0xAD}, // - {0xCFF8, 0x54EE}, //{0xE5, 0x93, 0xAE}, // - {0xD5DC, 0x54F2}, //{0xE5, 0x93, 0xB2}, // - {0xB2B8, 0x54FA}, //{0xE5, 0x93, 0xBA}, // - {0xBADF, 0x54FC}, //{0xE5, 0x93, 0xBC}, // - {0xD1E4, 0x5501}, //{0xE5, 0x94, 0x81}, // - {0xCBF4, 0x5506}, //{0xE5, 0x94, 0x86}, // - {0xB4BD, 0x5507}, //{0xE5, 0x94, 0x87}, // - {0xB0A6, 0x5509}, //{0xE5, 0x94, 0x89}, // - {0xCCC6, 0x5510}, //{0xE5, 0x94, 0x90}, // - {0xDFEB, 0x5520}, //{0xE5, 0x94, 0xA0}, // - {0xBBBD, 0x5524}, //{0xE5, 0x94, 0xA4}, // - {0xDFF3, 0x5527}, //{0xE5, 0x94, 0xA7}, // - {0xBBA3, 0x552C}, //{0xE5, 0x94, 0xAC}, // - {0xCADB, 0x552E}, //{0xE5, 0x94, 0xAE}, // + {0xB8E7, 0x54E5}, //{0xE5, 0x93, 0xA5}, // �� + {0xC9DA, 0x54E8}, //{0xE5, 0x93, 0xA8}, // �� + {0xC1A8, 0x54E9}, //{0xE5, 0x93, 0xA9}, // h + {0xC4C4, 0x54EA}, //{0xE5, 0x93, 0xAA}, // �� + {0xBFDE, 0x54ED}, //{0xE5, 0x93, 0xAD}, // �� + {0xCFF8, 0x54EE}, //{0xE5, 0x93, 0xAE}, // �� + {0xD5DC, 0x54F2}, //{0xE5, 0x93, 0xB2}, // �� + {0xB2B8, 0x54FA}, //{0xE5, 0x93, 0xBA}, // �� + {0xBADF, 0x54FC}, //{0xE5, 0x93, 0xBC}, // �� + {0xD1E4, 0x5501}, //{0xE5, 0x94, 0x81}, // �� + {0xCBF4, 0x5506}, //{0xE5, 0x94, 0x86}, // �� + {0xB4BD, 0x5507}, //{0xE5, 0x94, 0x87}, // �� + {0xB0A6, 0x5509}, //{0xE5, 0x94, 0x89}, // �� + {0xCCC6, 0x5510}, //{0xE5, 0x94, 0x90}, // �� + {0xDFEB, 0x5520}, //{0xE5, 0x94, 0xA0}, // �� + {0xBBBD, 0x5524}, //{0xE5, 0x94, 0xA4}, // �� + {0xDFF3, 0x5527}, //{0xE5, 0x94, 0xA7}, // �� + {0xBBA3, 0x552C}, //{0xE5, 0x94, 0xAC}, // �� + {0xCADB, 0x552E}, //{0xE5, 0x94, 0xAE}, // �� {0xCEA8, 0x552F}, //{0xE5, 0x94, 0xAF}, // Ψ - {0xB3AA, 0x5531}, //{0xE5, 0x94, 0xB1}, // - {0xCDD9, 0x553E}, //{0xE5, 0x94, 0xBE}, // - {0xBFD0, 0x5543}, //{0xE5, 0x95, 0x83}, // - {0xD7C4, 0x5544}, //{0xE5, 0x95, 0x84}, // - {0xC9CC, 0x5546}, //{0xE5, 0x95, 0x86}, // - {0xB0A1, 0x554A}, //{0xE5, 0x95, 0x8A}, // - {0xB7C8, 0x5561}, //{0xE5, 0x95, 0xA1}, // + {0xB3AA, 0x5531}, //{0xE5, 0x94, 0xB1}, // �� + {0xCDD9, 0x553E}, //{0xE5, 0x94, 0xBE}, // �� + {0xBFD0, 0x5543}, //{0xE5, 0x95, 0x83}, // �� + {0xD7C4, 0x5544}, //{0xE5, 0x95, 0x84}, // �� + {0xC9CC, 0x5546}, //{0xE5, 0x95, 0x86}, // �� + {0xB0A1, 0x554A}, //{0xE5, 0x95, 0x8A}, // �� + {0xB7C8, 0x5561}, //{0xE5, 0x95, 0xA1}, // �� {0xC6A1, 0x5564}, //{0xE5, 0x95, 0xA4}, // ơ {0xC9B6, 0x5565}, //{0xE5, 0x95, 0xA5}, // ɶ - {0xC0B2, 0x5566}, //{0xE5, 0x95, 0xA6}, // + {0xC0B2, 0x5566}, //{0xE5, 0x95, 0xA6}, // 2 {0xD0A5, 0x5578}, //{0xE5, 0x95, 0xB8}, // Х - {0xCCE4, 0x557C}, //{0xE5, 0x95, 0xBC}, // + {0xCCE4, 0x557C}, //{0xE5, 0x95, 0xBC}, // �� {0xCEB9, 0x5582}, //{0xE5, 0x96, 0x82}, // ι - {0xC9C6, 0x5584}, //{0xE5, 0x96, 0x84}, // - {0xC0AE, 0x5587}, //{0xE5, 0x96, 0x87}, // - {0xBAED, 0x5589}, //{0xE5, 0x96, 0x89}, // - {0xBAB0, 0x558A}, //{0xE5, 0x96, 0x8A}, // - {0xB4AD, 0x5598}, //{0xE5, 0x96, 0x98}, // + {0xC9C6, 0x5584}, //{0xE5, 0x96, 0x84}, // �� + {0xC0AE, 0x5587}, //{0xE5, 0x96, 0x87}, // . + {0xBAED, 0x5589}, //{0xE5, 0x96, 0x89}, // �� + {0xBAB0, 0x558A}, //{0xE5, 0x96, 0x8A}, // �� + {0xB4AD, 0x5598}, //{0xE5, 0x96, 0x98}, // �� {0xCFB2, 0x559C}, //{0xE5, 0x96, 0x9C}, // ϲ - {0xBAC8, 0x559D}, //{0xE5, 0x96, 0x9D}, // - {0xD0FA, 0x55A7}, //{0xE5, 0x96, 0xA7}, // - {0xD4FB, 0x55B3}, //{0xE5, 0x96, 0xB3}, // - {0xC5E7, 0x55B7}, //{0xE5, 0x96, 0xB7}, // - {0xD3F7, 0x55BB}, //{0xE5, 0x96, 0xBB}, // - {0xD0E1, 0x55C5}, //{0xE5, 0x97, 0x85}, // + {0xBAC8, 0x559D}, //{0xE5, 0x96, 0x9D}, // �� + {0xD0FA, 0x55A7}, //{0xE5, 0x96, 0xA7}, // �� + {0xD4FB, 0x55B3}, //{0xE5, 0x96, 0xB3}, // �� + {0xC5E7, 0x55B7}, //{0xE5, 0x96, 0xB7}, // �� + {0xD3F7, 0x55BB}, //{0xE5, 0x96, 0xBB}, // �� + {0xD0E1, 0x55C5}, //{0xE5, 0x97, 0x85}, // �� {0xC9A4, 0x55D3}, //{0xE5, 0x97, 0x93}, // ɤ - {0xCAC8, 0x55DC}, //{0xE5, 0x97, 0x9C}, // - {0xCECB, 0x55E1}, //{0xE5, 0x97, 0xA1}, // - {0xE0CD, 0x55E4}, //{0xE5, 0x97, 0xA4}, // - {0xE0C2, 0x55E6}, //{0xE5, 0x97, 0xA6}, // - {0xCBD4, 0x55FD}, //{0xE5, 0x97, 0xBD}, // - {0xE0D6, 0x5600}, //{0xE5, 0x98, 0x80}, // - {0xE0D2, 0x5601}, //{0xE5, 0x98, 0x81}, // - {0xBCCE, 0x5609}, //{0xE5, 0x98, 0x89}, // - {0xD6F6, 0x5631}, //{0xE5, 0x98, 0xB1}, // - {0xB3B0, 0x5632}, //{0xE5, 0x98, 0xB2}, // - {0xD7EC, 0x5634}, //{0xE5, 0x98, 0xB4}, // + {0xCAC8, 0x55DC}, //{0xE5, 0x97, 0x9C}, // �� + {0xCECB, 0x55E1}, //{0xE5, 0x97, 0xA1}, // �� + {0xE0CD, 0x55E4}, //{0xE5, 0x97, 0xA4}, // �� + {0xE0C2, 0x55E6}, //{0xE5, 0x97, 0xA6}, // �� + {0xCBD4, 0x55FD}, //{0xE5, 0x97, 0xBD}, // �� + {0xE0D6, 0x5600}, //{0xE5, 0x98, 0x80}, // �� + {0xE0D2, 0x5601}, //{0xE5, 0x98, 0x81}, // �� + {0xBCCE, 0x5609}, //{0xE5, 0x98, 0x89}, // �� + {0xD6F6, 0x5631}, //{0xE5, 0x98, 0xB1}, // �� + {0xB3B0, 0x5632}, //{0xE5, 0x98, 0xB2}, // �� + {0xD7EC, 0x5634}, //{0xE5, 0x98, 0xB4}, // �� {0xCBBB, 0x5636}, //{0xE5, 0x98, 0xB6}, // ˻ - {0xE0DA, 0x5639}, //{0xE5, 0x98, 0xB9}, // - {0xBAD9, 0x563F}, //{0xE5, 0x98, 0xBF}, // - {0xC6F7, 0x5668}, //{0xE5, 0x99, 0xA8}, // + {0xE0DA, 0x5639}, //{0xE5, 0x98, 0xB9}, // �� + {0xBAD9, 0x563F}, //{0xE5, 0x98, 0xBF}, // �� + {0xC6F7, 0x5668}, //{0xE5, 0x99, 0xA8}, // �� {0xD8AC, 0x5669}, //{0xE5, 0x99, 0xA9}, // ج - {0xD4EB, 0x566A}, //{0xE5, 0x99, 0xAA}, // - {0xBABF, 0x568E}, //{0xE5, 0x9A, 0x8E}, // - {0xCFF9, 0x56A3}, //{0xE5, 0x9A, 0xA3}, // - {0xC8C2, 0x56B7}, //{0xE5, 0x9A, 0xB7}, // - {0xBDC0, 0x56BC}, //{0xE5, 0x9A, 0xBC}, // - {0xC4D2, 0x56CA}, //{0xE5, 0x9B, 0x8A}, // - {0xC7F4, 0x56DA}, //{0xE5, 0x9B, 0x9A}, // - {0xCBC4, 0x56DB}, //{0xE5, 0x9B, 0x9B}, // - {0xBBD8, 0x56DE}, //{0xE5, 0x9B, 0x9E}, // - {0xD2F2, 0x56E0}, //{0xE5, 0x9B, 0xA0}, // - {0xCDC5, 0x56E2}, //{0xE5, 0x9B, 0xA2}, // - {0xB6DA, 0x56E4}, //{0xE5, 0x9B, 0xA4}, // + {0xD4EB, 0x566A}, //{0xE5, 0x99, 0xAA}, // �� + {0xBABF, 0x568E}, //{0xE5, 0x9A, 0x8E}, // �� + {0xCFF9, 0x56A3}, //{0xE5, 0x9A, 0xA3}, // �� + {0xC8C2, 0x56B7}, //{0xE5, 0x9A, 0xB7}, // �� + {0xBDC0, 0x56BC}, //{0xE5, 0x9A, 0xBC}, // �� + {0xC4D2, 0x56CA}, //{0xE5, 0x9B, 0x8A}, // �� + {0xC7F4, 0x56DA}, //{0xE5, 0x9B, 0x9A}, // �� + {0xCBC4, 0x56DB}, //{0xE5, 0x9B, 0x9B}, // �� + {0xBBD8, 0x56DE}, //{0xE5, 0x9B, 0x9E}, // �� + {0xD2F2, 0x56E0}, //{0xE5, 0x9B, 0xA0}, // �� + {0xCDC5, 0x56E2}, //{0xE5, 0x9B, 0xA2}, // �� + {0xB6DA, 0x56E4}, //{0xE5, 0x9B, 0xA4}, // �� {0xD4B0, 0x56ED}, //{0xE5, 0x9B, 0xAD}, // ԰ - {0xC0A7, 0x56F0}, //{0xE5, 0x9B, 0xB0}, // - {0xB4D1, 0x56F1}, //{0xE5, 0x9B, 0xB1}, // + {0xC0A7, 0x56F0}, //{0xE5, 0x9B, 0xB0}, // ' + {0xB4D1, 0x56F1}, //{0xE5, 0x9B, 0xB1}, // �� {0xCEA7, 0x56F4}, //{0xE5, 0x9B, 0xB4}, // Χ - {0xB9CC, 0x56FA}, //{0xE5, 0x9B, 0xBA}, // - {0xB9FA, 0x56FD}, //{0xE5, 0x9B, 0xBD}, // + {0xB9CC, 0x56FA}, //{0xE5, 0x9B, 0xBA}, // �� + {0xB9FA, 0x56FD}, //{0xE5, 0x9B, 0xBD}, // �� {0xCDBC, 0x56FE}, //{0xE5, 0x9B, 0xBE}, // ͼ - {0xC6D4, 0x5703}, //{0xE5, 0x9C, 0x83}, // + {0xC6D4, 0x5703}, //{0xE5, 0x9C, 0x83}, // �� {0xD4B2, 0x5706}, //{0xE5, 0x9C, 0x86}, // Բ {0xC8A6, 0x5708}, //{0xE5, 0x9C, 0x88}, // Ȧ - {0xCDC1, 0x571F}, //{0xE5, 0x9C, 0x9F}, // + {0xCDC1, 0x571F}, //{0xE5, 0x9C, 0x9F}, // �� {0xCAA5, 0x5723}, //{0xE5, 0x9C, 0xA3}, // ʥ - {0xD4DA, 0x5728}, //{0xE5, 0x9C, 0xA8}, // - {0xB5D8, 0x5730}, //{0xE5, 0x9C, 0xB0}, // - {0xB3A1, 0x573A}, //{0xE5, 0x9C, 0xBA}, // - {0xBBF8, 0x573E}, //{0xE5, 0x9C, 0xBE}, // + {0xD4DA, 0x5728}, //{0xE5, 0x9C, 0xA8}, // �� + {0xB5D8, 0x5730}, //{0xE5, 0x9C, 0xB0}, // �� + {0xB3A1, 0x573A}, //{0xE5, 0x9C, 0xBA}, // �� + {0xBBF8, 0x573E}, //{0xE5, 0x9C, 0xBE}, // �� {0xD6B7, 0x5740}, //{0xE5, 0x9D, 0x80}, // ַ - {0xBEF9, 0x5747}, //{0xE5, 0x9D, 0x87}, // - {0xB7BB, 0x574A}, //{0xE5, 0x9D, 0x8A}, // - {0xBFB2, 0x574E}, //{0xE5, 0x9D, 0x8E}, // - {0xBBB5, 0x574F}, //{0xE5, 0x9D, 0x8F}, // - {0xD7F8, 0x5750}, //{0xE5, 0x9D, 0x90}, // - {0xBFD3, 0x5751}, //{0xE5, 0x9D, 0x91}, // - {0xBFE9, 0x5757}, //{0xE5, 0x9D, 0x97}, // - {0xBCE1, 0x575A}, //{0xE5, 0x9D, 0x9A}, // + {0xBEF9, 0x5747}, //{0xE5, 0x9D, 0x87}, // �� + {0xB7BB, 0x574A}, //{0xE5, 0x9D, 0x8A}, // �� + {0xBFB2, 0x574E}, //{0xE5, 0x9D, 0x8E}, // �� + {0xBBB5, 0x574F}, //{0xE5, 0x9D, 0x8F}, // �� + {0xD7F8, 0x5750}, //{0xE5, 0x9D, 0x90}, // �� + {0xBFD3, 0x5751}, //{0xE5, 0x9D, 0x91}, // �� + {0xBFE9, 0x5757}, //{0xE5, 0x9D, 0x97}, // �� + {0xBCE1, 0x575A}, //{0xE5, 0x9D, 0x9A}, // �� {0xCCB3, 0x575B}, //{0xE5, 0x9D, 0x9B}, // ̳ - {0xB0D3, 0x575D}, //{0xE5, 0x9D, 0x9D}, // - {0xCEEB, 0x575E}, //{0xE5, 0x9D, 0x9E}, // - {0xB7D8, 0x575F}, //{0xE5, 0x9D, 0x9F}, // + {0xB0D3, 0x575D}, //{0xE5, 0x9D, 0x9D}, // �� + {0xCEEB, 0x575E}, //{0xE5, 0x9D, 0x9E}, // �� + {0xB7D8, 0x575F}, //{0xE5, 0x9D, 0x9F}, // �� {0xD7B9, 0x5760}, //{0xE5, 0x9D, 0xA0}, // ׹ - {0xC6C2, 0x5761}, //{0xE5, 0x9D, 0xA1}, // - {0xC0A4, 0x5764}, //{0xE5, 0x9D, 0xA4}, // + {0xC6C2, 0x5761}, //{0xE5, 0x9D, 0xA1}, // �� + {0xC0A4, 0x5764}, //{0xE5, 0x9D, 0xA4}, // $ {0xCCB9, 0x5766}, //{0xE5, 0x9D, 0xA6}, // ̹ {0xC6BA, 0x576A}, //{0xE5, 0x9D, 0xAA}, // ƺ - {0xC5F7, 0x576F}, //{0xE5, 0x9D, 0xAF}, // - {0xBFC0, 0x5777}, //{0xE5, 0x9D, 0xB7}, // - {0xB4B9, 0x5782}, //{0xE5, 0x9E, 0x82}, // - {0xC0AC, 0x5783}, //{0xE5, 0x9E, 0x83}, // + {0xC5F7, 0x576F}, //{0xE5, 0x9D, 0xAF}, // �� + {0xBFC0, 0x5777}, //{0xE5, 0x9D, 0xB7}, // �� + {0xB4B9, 0x5782}, //{0xE5, 0x9E, 0x82}, // �� + {0xC0AC, 0x5783}, //{0xE5, 0x9E, 0x83}, // , {0xC2A2, 0x5784}, //{0xE5, 0x9E, 0x84}, // ¢ - {0xD0CD, 0x578B}, //{0xE5, 0x9E, 0x8B}, // - {0xC0DD, 0x5792}, //{0xE5, 0x9E, 0x92}, // - {0xB6E2, 0x579B}, //{0xE5, 0x9E, 0x9B}, // - {0xB9B8, 0x57A2}, //{0xE5, 0x9E, 0xA2}, // - {0xBFD1, 0x57A6}, //{0xE5, 0x9E, 0xA6}, // - {0xB5E6, 0x57AB}, //{0xE5, 0x9E, 0xAB}, // - {0xBFE5, 0x57AE}, //{0xE5, 0x9E, 0xAE}, // - {0xB9A1, 0x57C2}, //{0xE5, 0x9F, 0x82}, // - {0xB0A3, 0x57C3}, //{0xE5, 0x9F, 0x83}, // - {0xC2F1, 0x57CB}, //{0xE5, 0x9F, 0x8B}, // - {0xB3C7, 0x57CE}, //{0xE5, 0x9F, 0x8E}, // - {0xD3F2, 0x57DF}, //{0xE5, 0x9F, 0x9F}, // - {0xB2BA, 0x57E0}, //{0xE5, 0x9F, 0xA0}, // - {0xC5E0, 0x57F9}, //{0xE5, 0x9F, 0xB9}, // - {0xBBF9, 0x57FA}, //{0xE5, 0x9F, 0xBA}, // - {0xCCC3, 0x5802}, //{0xE5, 0xA0, 0x82}, // - {0xB6D1, 0x5806}, //{0xE5, 0xA0, 0x86}, // - {0xB6E9, 0x5815}, //{0xE5, 0xA0, 0x95}, // - {0xB1A4, 0x5821}, //{0xE5, 0xA0, 0xA1}, // - {0xB5CC, 0x5824}, //{0xE5, 0xA0, 0xA4}, // - {0xBFB0, 0x582A}, //{0xE5, 0xA0, 0xAA}, // - {0xD1DF, 0x5830}, //{0xE5, 0xA0, 0xB0}, // - {0xB6C2, 0x5835}, //{0xE5, 0xA0, 0xB5}, // - {0xCBFA, 0x584C}, //{0xE5, 0xA1, 0x8C}, // - {0xCBDC, 0x5851}, //{0xE5, 0xA1, 0x91}, // - {0xCBFE, 0x5854}, //{0xE5, 0xA1, 0x94}, // - {0xCCC1, 0x5858}, //{0xE5, 0xA1, 0x98}, // - {0xC8FB, 0x585E}, //{0xE5, 0xA1, 0x9E}, // - {0xCCEE, 0x586B}, //{0xE5, 0xA1, 0xAB}, // - {0xBEB3, 0x5883}, //{0xE5, 0xA2, 0x83}, // - {0xCAFB, 0x5885}, //{0xE5, 0xA2, 0x85}, // + {0xD0CD, 0x578B}, //{0xE5, 0x9E, 0x8B}, // �� + {0xC0DD, 0x5792}, //{0xE5, 0x9E, 0x92}, // �� + {0xB6E2, 0x579B}, //{0xE5, 0x9E, 0x9B}, // �� + {0xB9B8, 0x57A2}, //{0xE5, 0x9E, 0xA2}, // �� + {0xBFD1, 0x57A6}, //{0xE5, 0x9E, 0xA6}, // �� + {0xB5E6, 0x57AB}, //{0xE5, 0x9E, 0xAB}, // �� + {0xBFE5, 0x57AE}, //{0xE5, 0x9E, 0xAE}, // �� + {0xB9A1, 0x57C2}, //{0xE5, 0x9F, 0x82}, // �� + {0xB0A3, 0x57C3}, //{0xE5, 0x9F, 0x83}, // �� + {0xC2F1, 0x57CB}, //{0xE5, 0x9F, 0x8B}, // �� + {0xB3C7, 0x57CE}, //{0xE5, 0x9F, 0x8E}, // �� + {0xD3F2, 0x57DF}, //{0xE5, 0x9F, 0x9F}, // �� + {0xB2BA, 0x57E0}, //{0xE5, 0x9F, 0xA0}, // �� + {0xC5E0, 0x57F9}, //{0xE5, 0x9F, 0xB9}, // �� + {0xBBF9, 0x57FA}, //{0xE5, 0x9F, 0xBA}, // �� + {0xCCC3, 0x5802}, //{0xE5, 0xA0, 0x82}, // �� + {0xB6D1, 0x5806}, //{0xE5, 0xA0, 0x86}, // �� + {0xB6E9, 0x5815}, //{0xE5, 0xA0, 0x95}, // �� + {0xB1A4, 0x5821}, //{0xE5, 0xA0, 0xA1}, // �� + {0xB5CC, 0x5824}, //{0xE5, 0xA0, 0xA4}, // �� + {0xBFB0, 0x582A}, //{0xE5, 0xA0, 0xAA}, // �� + {0xD1DF, 0x5830}, //{0xE5, 0xA0, 0xB0}, // �� + {0xB6C2, 0x5835}, //{0xE5, 0xA0, 0xB5}, // �� + {0xCBFA, 0x584C}, //{0xE5, 0xA1, 0x8C}, // �� + {0xCBDC, 0x5851}, //{0xE5, 0xA1, 0x91}, // �� + {0xCBFE, 0x5854}, //{0xE5, 0xA1, 0x94}, // �� + {0xCCC1, 0x5858}, //{0xE5, 0xA1, 0x98}, // �� + {0xC8FB, 0x585E}, //{0xE5, 0xA1, 0x9E}, // �� + {0xCCEE, 0x586B}, //{0xE5, 0xA1, 0xAB}, // �� + {0xBEB3, 0x5883}, //{0xE5, 0xA2, 0x83}, // �� + {0xCAFB, 0x5885}, //{0xE5, 0xA2, 0x85}, // �� {0xC4B9, 0x5893}, //{0xE5, 0xA2, 0x93}, // Ĺ {0xC7BD, 0x5899}, //{0xE5, 0xA2, 0x99}, // ǽ - {0xD4F6, 0x589E}, //{0xE5, 0xA2, 0x9E}, // + {0xD4F6, 0x589E}, //{0xE5, 0xA2, 0x9E}, // �� {0xC4AB, 0x58A8}, //{0xE5, 0xA2, 0xA8}, // ī - {0xB6D5, 0x58A9}, //{0xE5, 0xA2, 0xA9}, // - {0xB1DA, 0x58C1}, //{0xE5, 0xA3, 0x81}, // - {0xBABE, 0x58D5}, //{0xE5, 0xA3, 0x95}, // - {0xC8C0, 0x58E4}, //{0xE5, 0xA3, 0xA4}, // + {0xB6D5, 0x58A9}, //{0xE5, 0xA2, 0xA9}, // �� + {0xB1DA, 0x58C1}, //{0xE5, 0xA3, 0x81}, // �� + {0xBABE, 0x58D5}, //{0xE5, 0xA3, 0x95}, // �� + {0xC8C0, 0x58E4}, //{0xE5, 0xA3, 0xA4}, // �� {0xCABF, 0x58EB}, //{0xE5, 0xA3, 0xAB}, // ʿ {0xD7B3, 0x58EE}, //{0xE5, 0xA3, 0xAE}, // ׳ - {0xC9F9, 0x58F0}, //{0xE5, 0xA3, 0xB0}, // - {0xBFC7, 0x58F3}, //{0xE5, 0xA3, 0xB3}, // - {0xBAF8, 0x58F6}, //{0xE5, 0xA3, 0xB6}, // + {0xC9F9, 0x58F0}, //{0xE5, 0xA3, 0xB0}, // �� + {0xBFC7, 0x58F3}, //{0xE5, 0xA3, 0xB3}, // �� + {0xBAF8, 0x58F6}, //{0xE5, 0xA3, 0xB6}, // �� {0xD2BC, 0x58F9}, //{0xE5, 0xA3, 0xB9}, // Ҽ - {0xB4A6, 0x5904}, //{0xE5, 0xA4, 0x84}, // - {0xB1B8, 0x5907}, //{0xE5, 0xA4, 0x87}, // - {0xB8B4, 0x590D}, //{0xE5, 0xA4, 0x8D}, // - {0xCFC4, 0x590F}, //{0xE5, 0xA4, 0x8F}, // + {0xB4A6, 0x5904}, //{0xE5, 0xA4, 0x84}, // �� + {0xB1B8, 0x5907}, //{0xE5, 0xA4, 0x87}, // �� + {0xB8B4, 0x590D}, //{0xE5, 0xA4, 0x8D}, // �� + {0xCFC4, 0x590F}, //{0xE5, 0xA4, 0x8F}, // �� {0xCFA6, 0x5915}, //{0xE5, 0xA4, 0x95}, // Ϧ - {0xCDE2, 0x5916}, //{0xE5, 0xA4, 0x96}, // - {0xB6E0, 0x591A}, //{0xE5, 0xA4, 0x9A}, // + {0xCDE2, 0x5916}, //{0xE5, 0xA4, 0x96}, // �� + {0xB6E0, 0x591A}, //{0xE5, 0xA4, 0x9A}, // �� {0xD2B9, 0x591C}, //{0xE5, 0xA4, 0x9C}, // ҹ - {0xB9BB, 0x591F}, //{0xE5, 0xA4, 0x9F}, // - {0xB4F3, 0x5927}, //{0xE5, 0xA4, 0xA7}, // - {0xCCEC, 0x5929}, //{0xE5, 0xA4, 0xA9}, // + {0xB9BB, 0x591F}, //{0xE5, 0xA4, 0x9F}, // �� + {0xB4F3, 0x5927}, //{0xE5, 0xA4, 0xA7}, // �� + {0xCCEC, 0x5929}, //{0xE5, 0xA4, 0xA9}, // �� {0xCCAB, 0x592A}, //{0xE5, 0xA4, 0xAA}, // ̫ - {0xB7F2, 0x592B}, //{0xE5, 0xA4, 0xAB}, // + {0xB7F2, 0x592B}, //{0xE5, 0xA4, 0xAB}, // �� {0xD8B2, 0x592D}, //{0xE5, 0xA4, 0xAD}, // ز - {0xD1EB, 0x592E}, //{0xE5, 0xA4, 0xAE}, // - {0xBABB, 0x592F}, //{0xE5, 0xA4, 0xAF}, // + {0xD1EB, 0x592E}, //{0xE5, 0xA4, 0xAE}, // �� + {0xBABB, 0x592F}, //{0xE5, 0xA4, 0xAF}, // �� {0xCAA7, 0x5931}, //{0xE5, 0xA4, 0xB1}, // ʧ {0xCDB7, 0x5934}, //{0xE5, 0xA4, 0xB4}, // ͷ - {0xD2C4, 0x5937}, //{0xE5, 0xA4, 0xB7}, // - {0xBFE4, 0x5938}, //{0xE5, 0xA4, 0xB8}, // - {0xBCD0, 0x5939}, //{0xE5, 0xA4, 0xB9}, // - {0xB6E1, 0x593A}, //{0xE5, 0xA4, 0xBA}, // - {0xD1D9, 0x5944}, //{0xE5, 0xA5, 0x84}, // - {0xC6E6, 0x5947}, //{0xE5, 0xA5, 0x87}, // - {0xC4CE, 0x5948}, //{0xE5, 0xA5, 0x88}, // - {0xB7EE, 0x5949}, //{0xE5, 0xA5, 0x89}, // - {0xB7DC, 0x594B}, //{0xE5, 0xA5, 0x8B}, // - {0xD7E0, 0x594F}, //{0xE5, 0xA5, 0x8F}, // - {0xC6F5, 0x5951}, //{0xE5, 0xA5, 0x91}, // - {0xB1BC, 0x5954}, //{0xE5, 0xA5, 0x94}, // - {0xDEC8, 0x5955}, //{0xE5, 0xA5, 0x95}, // - {0xBDB1, 0x5956}, //{0xE5, 0xA5, 0x96}, // - {0xCCD7, 0x5957}, //{0xE5, 0xA5, 0x97}, // - {0xB5EC, 0x5960}, //{0xE5, 0xA5, 0xA0}, // - {0xC9DD, 0x5962}, //{0xE5, 0xA5, 0xA2}, // - {0xB0C2, 0x5965}, //{0xE5, 0xA5, 0xA5}, // + {0xD2C4, 0x5937}, //{0xE5, 0xA4, 0xB7}, // �� + {0xBFE4, 0x5938}, //{0xE5, 0xA4, 0xB8}, // �� + {0xBCD0, 0x5939}, //{0xE5, 0xA4, 0xB9}, // �� + {0xB6E1, 0x593A}, //{0xE5, 0xA4, 0xBA}, // �� + {0xD1D9, 0x5944}, //{0xE5, 0xA5, 0x84}, // �� + {0xC6E6, 0x5947}, //{0xE5, 0xA5, 0x87}, // �� + {0xC4CE, 0x5948}, //{0xE5, 0xA5, 0x88}, // �� + {0xB7EE, 0x5949}, //{0xE5, 0xA5, 0x89}, // �� + {0xB7DC, 0x594B}, //{0xE5, 0xA5, 0x8B}, // �� + {0xD7E0, 0x594F}, //{0xE5, 0xA5, 0x8F}, // �� + {0xC6F5, 0x5951}, //{0xE5, 0xA5, 0x91}, // �� + {0xB1BC, 0x5954}, //{0xE5, 0xA5, 0x94}, // �� + {0xDEC8, 0x5955}, //{0xE5, 0xA5, 0x95}, // �� + {0xBDB1, 0x5956}, //{0xE5, 0xA5, 0x96}, // �� + {0xCCD7, 0x5957}, //{0xE5, 0xA5, 0x97}, // �� + {0xB5EC, 0x5960}, //{0xE5, 0xA5, 0xA0}, // �� + {0xC9DD, 0x5962}, //{0xE5, 0xA5, 0xA2}, // �� + {0xB0C2, 0x5965}, //{0xE5, 0xA5, 0xA5}, // �� {0xC5AE, 0x5973}, //{0xE5, 0xA5, 0xB3}, // Ů {0xC5AB, 0x5974}, //{0xE5, 0xA5, 0xB4}, // ū - {0xC4CC, 0x5976}, //{0xE5, 0xA5, 0xB6}, // - {0xBCE9, 0x5978}, //{0xE5, 0xA5, 0xB8}, // - {0xCBFD, 0x5979}, //{0xE5, 0xA5, 0xB9}, // - {0xBAC3, 0x597D}, //{0xE5, 0xA5, 0xBD}, // - {0xC8E7, 0x5982}, //{0xE5, 0xA6, 0x82}, // - {0xCDFD, 0x5984}, //{0xE5, 0xA6, 0x84}, // + {0xC4CC, 0x5976}, //{0xE5, 0xA5, 0xB6}, // �� + {0xBCE9, 0x5978}, //{0xE5, 0xA5, 0xB8}, // �� + {0xCBFD, 0x5979}, //{0xE5, 0xA5, 0xB9}, // �� + {0xBAC3, 0x597D}, //{0xE5, 0xA5, 0xBD}, // �� + {0xC8E7, 0x5982}, //{0xE5, 0xA6, 0x82}, // �� + {0xCDFD, 0x5984}, //{0xE5, 0xA6, 0x84}, // �� {0xD7B1, 0x5986}, //{0xE5, 0xA6, 0x86}, // ױ - {0xB8BE, 0x5987}, //{0xE5, 0xA6, 0x87}, // - {0xC2E8, 0x5988}, //{0xE5, 0xA6, 0x88}, // - {0xB6CA, 0x5992}, //{0xE5, 0xA6, 0x92}, // - {0xBCCB, 0x5993}, //{0xE5, 0xA6, 0x93}, // - {0xD1FD, 0x5996}, //{0xE5, 0xA6, 0x96}, // - {0xC3EE, 0x5999}, //{0xE5, 0xA6, 0x99}, // - {0xCDD7, 0x59A5}, //{0xE5, 0xA6, 0xA5}, // - {0xB7C1, 0x59A8}, //{0xE5, 0xA6, 0xA8}, // - {0xC3C3, 0x59B9}, //{0xE5, 0xA6, 0xB9}, // - {0xC6DE, 0x59BB}, //{0xE5, 0xA6, 0xBB}, // + {0xB8BE, 0x5987}, //{0xE5, 0xA6, 0x87}, // �� + {0xC2E8, 0x5988}, //{0xE5, 0xA6, 0x88}, // �� + {0xB6CA, 0x5992}, //{0xE5, 0xA6, 0x92}, // �� + {0xBCCB, 0x5993}, //{0xE5, 0xA6, 0x93}, // �� + {0xD1FD, 0x5996}, //{0xE5, 0xA6, 0x96}, // �� + {0xC3EE, 0x5999}, //{0xE5, 0xA6, 0x99}, // �� + {0xCDD7, 0x59A5}, //{0xE5, 0xA6, 0xA5}, // �� + {0xB7C1, 0x59A8}, //{0xE5, 0xA6, 0xA8}, // �� + {0xC3C3, 0x59B9}, //{0xE5, 0xA6, 0xB9}, // �� + {0xC6DE, 0x59BB}, //{0xE5, 0xA6, 0xBB}, // �� {0xC4B7, 0x59C6}, //{0xE5, 0xA7, 0x86}, // ķ - {0xE6A2, 0x59CA}, //{0xE5, 0xA7, 0x8A}, // + {0xE6A2, 0x59CA}, //{0xE5, 0xA7, 0x8A}, // � {0xCABC, 0x59CB}, //{0xE5, 0xA7, 0x8B}, // ʼ - {0xBDE3, 0x59D0}, //{0xE5, 0xA7, 0x90}, // - {0xB9C3, 0x59D1}, //{0xE5, 0xA7, 0x91}, // - {0xD0D5, 0x59D3}, //{0xE5, 0xA7, 0x93}, // + {0xBDE3, 0x59D0}, //{0xE5, 0xA7, 0x90}, // �� + {0xB9C3, 0x59D1}, //{0xE5, 0xA7, 0x91}, // �� + {0xD0D5, 0x59D3}, //{0xE5, 0xA7, 0x93}, // �� {0xCEAF, 0x59D4}, //{0xE5, 0xA7, 0x94}, // ί {0xD2A6, 0x59DA}, //{0xE5, 0xA7, 0x9A}, // Ҧ - {0xBDAA, 0x59DC}, //{0xE5, 0xA7, 0x9C}, // - {0xC0D1, 0x59E5}, //{0xE5, 0xA7, 0xA5}, // - {0xD2CC, 0x59E8}, //{0xE5, 0xA7, 0xA8}, // - {0xD2F6, 0x59FB}, //{0xE5, 0xA7, 0xBB}, // - {0xD7CB, 0x59FF}, //{0xE5, 0xA7, 0xBF}, // - {0xCDFE, 0x5A01}, //{0xE5, 0xA8, 0x81}, // - {0xCDDE, 0x5A03}, //{0xE5, 0xA8, 0x83}, // + {0xBDAA, 0x59DC}, //{0xE5, 0xA7, 0x9C}, // �� + {0xC0D1, 0x59E5}, //{0xE5, 0xA7, 0xA5}, // �� + {0xD2CC, 0x59E8}, //{0xE5, 0xA7, 0xA8}, // �� + {0xD2F6, 0x59FB}, //{0xE5, 0xA7, 0xBB}, // �� + {0xD7CB, 0x59FF}, //{0xE5, 0xA7, 0xBF}, // �� + {0xCDFE, 0x5A01}, //{0xE5, 0xA8, 0x81}, // �� + {0xCDDE, 0x5A03}, //{0xE5, 0xA8, 0x83}, // �� {0xC2A6, 0x5A04}, //{0xE5, 0xA8, 0x84}, // ¦ - {0xBDBF, 0x5A07}, //{0xE5, 0xA8, 0x87}, // - {0xC4EF, 0x5A18}, //{0xE5, 0xA8, 0x98}, // - {0xC4C8, 0x5A1C}, //{0xE5, 0xA8, 0x9C}, // - {0xC3E4, 0x5A29}, //{0xE5, 0xA8, 0xA9}, // - {0xD3E9, 0x5A31}, //{0xE5, 0xA8, 0xB1}, // + {0xBDBF, 0x5A07}, //{0xE5, 0xA8, 0x87}, // �� + {0xC4EF, 0x5A18}, //{0xE5, 0xA8, 0x98}, // �� + {0xC4C8, 0x5A1C}, //{0xE5, 0xA8, 0x9C}, // �� + {0xC3E4, 0x5A29}, //{0xE5, 0xA8, 0xA9}, // �� + {0xD3E9, 0x5A31}, //{0xE5, 0xA8, 0xB1}, // �� {0xC8A2, 0x5A36}, //{0xE5, 0xA8, 0xB6}, // Ȣ - {0xC6C5, 0x5A46}, //{0xE5, 0xA9, 0x86}, // - {0xCDF1, 0x5A49}, //{0xE5, 0xA9, 0x89}, // - {0xBBE9, 0x5A5A}, //{0xE5, 0xA9, 0x9A}, // + {0xC6C5, 0x5A46}, //{0xE5, 0xA9, 0x86}, // �� + {0xCDF1, 0x5A49}, //{0xE5, 0xA9, 0x89}, // �� + {0xBBE9, 0x5A5A}, //{0xE5, 0xA9, 0x9A}, // �� {0xD3A4, 0x5A74}, //{0xE5, 0xA9, 0xB4}, // Ӥ - {0xC9F4, 0x5A76}, //{0xE5, 0xA9, 0xB6}, // - {0xD0F6, 0x5A7F}, //{0xE5, 0xA9, 0xBF}, // + {0xC9F4, 0x5A76}, //{0xE5, 0xA9, 0xB6}, // �� + {0xD0F6, 0x5A7F}, //{0xE5, 0xA9, 0xBF}, // �� {0xC3BD, 0x5A92}, //{0xE5, 0xAA, 0x92}, // ý - {0xC3C4, 0x5A9A}, //{0xE5, 0xAA, 0x9A}, // + {0xC3C4, 0x5A9A}, //{0xE5, 0xAA, 0x9A}, // �� {0xCFB1, 0x5AB3}, //{0xE5, 0xAA, 0xB3}, // ϱ - {0xBCDE, 0x5AC1}, //{0xE5, 0xAB, 0x81}, // + {0xBCDE, 0x5AC1}, //{0xE5, 0xAB, 0x81}, // �� {0xC9A9, 0x5AC2}, //{0xE5, 0xAB, 0x82}, // ɩ - {0xBCB5, 0x5AC9}, //{0xE5, 0xAB, 0x89}, // - {0xCFD3, 0x5ACC}, //{0xE5, 0xAB, 0x8C}, // - {0xB5D5, 0x5AE1}, //{0xE5, 0xAB, 0xA1}, // - {0xC4DB, 0x5AE9}, //{0xE5, 0xAB, 0xA9}, // - {0xE6D2, 0x5B09}, //{0xE5, 0xAC, 0x89}, // - {0xD7D3, 0x5B50}, //{0xE5, 0xAD, 0x90}, // - {0xBFD7, 0x5B54}, //{0xE5, 0xAD, 0x94}, // - {0xD4D0, 0x5B55}, //{0xE5, 0xAD, 0x95}, // - {0xD7D6, 0x5B57}, //{0xE5, 0xAD, 0x97}, // - {0xB4E6, 0x5B58}, //{0xE5, 0xAD, 0x98}, // - {0xCBEF, 0x5B59}, //{0xE5, 0xAD, 0x99}, // + {0xBCB5, 0x5AC9}, //{0xE5, 0xAB, 0x89}, // �� + {0xCFD3, 0x5ACC}, //{0xE5, 0xAB, 0x8C}, // �� + {0xB5D5, 0x5AE1}, //{0xE5, 0xAB, 0xA1}, // �� + {0xC4DB, 0x5AE9}, //{0xE5, 0xAB, 0xA9}, // �� + {0xE6D2, 0x5B09}, //{0xE5, 0xAC, 0x89}, // �� + {0xD7D3, 0x5B50}, //{0xE5, 0xAD, 0x90}, // �� + {0xBFD7, 0x5B54}, //{0xE5, 0xAD, 0x94}, // �� + {0xD4D0, 0x5B55}, //{0xE5, 0xAD, 0x95}, // �� + {0xD7D6, 0x5B57}, //{0xE5, 0xAD, 0x97}, // �� + {0xB4E6, 0x5B58}, //{0xE5, 0xAD, 0x98}, // �� + {0xCBEF, 0x5B59}, //{0xE5, 0xAD, 0x99}, // �� {0xD0A2, 0x5B5D}, //{0xE5, 0xAD, 0x9D}, // Т - {0xC3CF, 0x5B5F}, //{0xE5, 0xAD, 0x9F}, // - {0xBCBE, 0x5B63}, //{0xE5, 0xAD, 0xA3}, // - {0xB9C2, 0x5B64}, //{0xE5, 0xAD, 0xA4}, // + {0xC3CF, 0x5B5F}, //{0xE5, 0xAD, 0x9F}, // �� + {0xBCBE, 0x5B63}, //{0xE5, 0xAD, 0xA3}, // �� + {0xB9C2, 0x5B64}, //{0xE5, 0xAD, 0xA4}, // �� {0xD1A7, 0x5B66}, //{0xE5, 0xAD, 0xA6}, // ѧ - {0xBAA2, 0x5B69}, //{0xE5, 0xAD, 0xA9}, // - {0xB7F5, 0x5B75}, //{0xE5, 0xAD, 0xB5}, // - {0xC4F5, 0x5B7D}, //{0xE5, 0xAD, 0xBD}, // - {0xC4FE, 0x5B81}, //{0xE5, 0xAE, 0x81}, // - {0xCBFC, 0x5B83}, //{0xE5, 0xAE, 0x83}, // + {0xBAA2, 0x5B69}, //{0xE5, 0xAD, 0xA9}, // �� + {0xB7F5, 0x5B75}, //{0xE5, 0xAD, 0xB5}, // �� + {0xC4F5, 0x5B7D}, //{0xE5, 0xAD, 0xBD}, // �� + {0xC4FE, 0x5B81}, //{0xE5, 0xAE, 0x81}, // �� + {0xCBFC, 0x5B83}, //{0xE5, 0xAE, 0x83}, // �� {0xD5AC, 0x5B85}, //{0xE5, 0xAE, 0x85}, // լ - {0xD3EE, 0x5B87}, //{0xE5, 0xAE, 0x87}, // - {0xCAD8, 0x5B88}, //{0xE5, 0xAE, 0x88}, // - {0xB0B2, 0x5B89}, //{0xE5, 0xAE, 0x89}, // - {0xCBCE, 0x5B8B}, //{0xE5, 0xAE, 0x8B}, // - {0xCDEA, 0x5B8C}, //{0xE5, 0xAE, 0x8C}, // - {0xBAEA, 0x5B8F}, //{0xE5, 0xAE, 0x8F}, // - {0xD7DA, 0x5B97}, //{0xE5, 0xAE, 0x97}, // - {0xB9D9, 0x5B98}, //{0xE5, 0xAE, 0x98}, // - {0xD6E6, 0x5B99}, //{0xE5, 0xAE, 0x99}, // - {0xB6A8, 0x5B9A}, //{0xE5, 0xAE, 0x9A}, // - {0xCDF0, 0x5B9B}, //{0xE5, 0xAE, 0x9B}, // - {0xD2CB, 0x5B9C}, //{0xE5, 0xAE, 0x9C}, // - {0xB1A6, 0x5B9D}, //{0xE5, 0xAE, 0x9D}, // + {0xD3EE, 0x5B87}, //{0xE5, 0xAE, 0x87}, // �� + {0xCAD8, 0x5B88}, //{0xE5, 0xAE, 0x88}, // �� + {0xB0B2, 0x5B89}, //{0xE5, 0xAE, 0x89}, // �� + {0xCBCE, 0x5B8B}, //{0xE5, 0xAE, 0x8B}, // �� + {0xCDEA, 0x5B8C}, //{0xE5, 0xAE, 0x8C}, // �� + {0xBAEA, 0x5B8F}, //{0xE5, 0xAE, 0x8F}, // �� + {0xD7DA, 0x5B97}, //{0xE5, 0xAE, 0x97}, // �� + {0xB9D9, 0x5B98}, //{0xE5, 0xAE, 0x98}, // �� + {0xD6E6, 0x5B99}, //{0xE5, 0xAE, 0x99}, // �� + {0xB6A8, 0x5B9A}, //{0xE5, 0xAE, 0x9A}, // �� + {0xCDF0, 0x5B9B}, //{0xE5, 0xAE, 0x9B}, // �� + {0xD2CB, 0x5B9C}, //{0xE5, 0xAE, 0x9C}, // �� + {0xB1A6, 0x5B9D}, //{0xE5, 0xAE, 0x9D}, // �� {0xCAB5, 0x5B9E}, //{0xE5, 0xAE, 0x9E}, // ʵ - {0xB3E8, 0x5BA0}, //{0xE5, 0xAE, 0xA0}, // - {0xC9F3, 0x5BA1}, //{0xE5, 0xAE, 0xA1}, // - {0xBFCD, 0x5BA2}, //{0xE5, 0xAE, 0xA2}, // - {0xD0FB, 0x5BA3}, //{0xE5, 0xAE, 0xA3}, // - {0xCAD2, 0x5BA4}, //{0xE5, 0xAE, 0xA4}, // - {0xBBC2, 0x5BA6}, //{0xE5, 0xAE, 0xA6}, // - {0xCFDC, 0x5BAA}, //{0xE5, 0xAE, 0xAA}, // - {0xB9AC, 0x5BAB}, //{0xE5, 0xAE, 0xAB}, // - {0xD4D7, 0x5BB0}, //{0xE5, 0xAE, 0xB0}, // - {0xBAA6, 0x5BB3}, //{0xE5, 0xAE, 0xB3}, // - {0xD1E7, 0x5BB4}, //{0xE5, 0xAE, 0xB4}, // - {0xCFFC, 0x5BB5}, //{0xE5, 0xAE, 0xB5}, // - {0xBCD2, 0x5BB6}, //{0xE5, 0xAE, 0xB6}, // - {0xC8DD, 0x5BB9}, //{0xE5, 0xAE, 0xB9}, // - {0xBFED, 0x5BBD}, //{0xE5, 0xAE, 0xBD}, // - {0xB1F6, 0x5BBE}, //{0xE5, 0xAE, 0xBE}, // - {0xCBDE, 0x5BBF}, //{0xE5, 0xAE, 0xBF}, // - {0xBCC5, 0x5BC2}, //{0xE5, 0xAF, 0x82}, // - {0xBCC4, 0x5BC4}, //{0xE5, 0xAF, 0x84}, // - {0xC3DC, 0x5BC6}, //{0xE5, 0xAF, 0x86}, // - {0xBFDC, 0x5BC7}, //{0xE5, 0xAF, 0x87}, // - {0xB8BB, 0x5BCC}, //{0xE5, 0xAF, 0x8C}, // - {0xBAAE, 0x5BD2}, //{0xE5, 0xAF, 0x92}, // + {0xB3E8, 0x5BA0}, //{0xE5, 0xAE, 0xA0}, // �� + {0xC9F3, 0x5BA1}, //{0xE5, 0xAE, 0xA1}, // �� + {0xBFCD, 0x5BA2}, //{0xE5, 0xAE, 0xA2}, // �� + {0xD0FB, 0x5BA3}, //{0xE5, 0xAE, 0xA3}, // �� + {0xCAD2, 0x5BA4}, //{0xE5, 0xAE, 0xA4}, // �� + {0xBBC2, 0x5BA6}, //{0xE5, 0xAE, 0xA6}, // �� + {0xCFDC, 0x5BAA}, //{0xE5, 0xAE, 0xAA}, // �� + {0xB9AC, 0x5BAB}, //{0xE5, 0xAE, 0xAB}, // �� + {0xD4D7, 0x5BB0}, //{0xE5, 0xAE, 0xB0}, // �� + {0xBAA6, 0x5BB3}, //{0xE5, 0xAE, 0xB3}, // �� + {0xD1E7, 0x5BB4}, //{0xE5, 0xAE, 0xB4}, // �� + {0xCFFC, 0x5BB5}, //{0xE5, 0xAE, 0xB5}, // �� + {0xBCD2, 0x5BB6}, //{0xE5, 0xAE, 0xB6}, // �� + {0xC8DD, 0x5BB9}, //{0xE5, 0xAE, 0xB9}, // �� + {0xBFED, 0x5BBD}, //{0xE5, 0xAE, 0xBD}, // �� + {0xB1F6, 0x5BBE}, //{0xE5, 0xAE, 0xBE}, // �� + {0xCBDE, 0x5BBF}, //{0xE5, 0xAE, 0xBF}, // �� + {0xBCC5, 0x5BC2}, //{0xE5, 0xAF, 0x82}, // �� + {0xBCC4, 0x5BC4}, //{0xE5, 0xAF, 0x84}, // �� + {0xC3DC, 0x5BC6}, //{0xE5, 0xAF, 0x86}, // �� + {0xBFDC, 0x5BC7}, //{0xE5, 0xAF, 0x87}, // �� + {0xB8BB, 0x5BCC}, //{0xE5, 0xAF, 0x8C}, // �� + {0xBAAE, 0x5BD2}, //{0xE5, 0xAF, 0x92}, // �� {0xD4A2, 0x5BD3}, //{0xE5, 0xAF, 0x93}, // Ԣ - {0xC7DE, 0x5BDD}, //{0xE5, 0xAF, 0x9D}, // + {0xC7DE, 0x5BDD}, //{0xE5, 0xAF, 0x9D}, // �� {0xC4AF, 0x5BDE}, //{0xE5, 0xAF, 0x9E}, // į - {0xB2EC, 0x5BDF}, //{0xE5, 0xAF, 0x9F}, // - {0xB9D1, 0x5BE1}, //{0xE5, 0xAF, 0xA1}, // - {0xC1C8, 0x5BE5}, //{0xE5, 0xAF, 0xA5}, // + {0xB2EC, 0x5BDF}, //{0xE5, 0xAF, 0x9F}, // �� + {0xB9D1, 0x5BE1}, //{0xE5, 0xAF, 0xA1}, // �� + {0xC1C8, 0x5BE5}, //{0xE5, 0xAF, 0xA5}, // �� {0xD5AF, 0x5BE8}, //{0xE5, 0xAF, 0xA8}, // կ - {0xB4E7, 0x5BF8}, //{0xE5, 0xAF, 0xB8}, // - {0xB6D4, 0x5BF9}, //{0xE5, 0xAF, 0xB9}, // - {0xCBC2, 0x5BFA}, //{0xE5, 0xAF, 0xBA}, // + {0xB4E7, 0x5BF8}, //{0xE5, 0xAF, 0xB8}, // �� + {0xB6D4, 0x5BF9}, //{0xE5, 0xAF, 0xB9}, // �� + {0xCBC2, 0x5BFA}, //{0xE5, 0xAF, 0xBA}, // �� {0xD1B0, 0x5BFB}, //{0xE5, 0xAF, 0xBB}, // Ѱ - {0xB5BC, 0x5BFC}, //{0xE5, 0xAF, 0xBC}, // - {0xCAD9, 0x5BFF}, //{0xE5, 0xAF, 0xBF}, // - {0xB7E2, 0x5C01}, //{0xE5, 0xB0, 0x81}, // - {0xC9E4, 0x5C04}, //{0xE5, 0xB0, 0x84}, // - {0xBDAB, 0x5C06}, //{0xE5, 0xB0, 0x86}, // + {0xB5BC, 0x5BFC}, //{0xE5, 0xAF, 0xBC}, // �� + {0xCAD9, 0x5BFF}, //{0xE5, 0xAF, 0xBF}, // �� + {0xB7E2, 0x5C01}, //{0xE5, 0xB0, 0x81}, // �� + {0xC9E4, 0x5C04}, //{0xE5, 0xB0, 0x84}, // �� + {0xBDAB, 0x5C06}, //{0xE5, 0xB0, 0x86}, // �� {0xCEBE, 0x5C09}, //{0xE5, 0xB0, 0x89}, // ξ - {0xD7F0, 0x5C0A}, //{0xE5, 0xB0, 0x8A}, // + {0xD7F0, 0x5C0A}, //{0xE5, 0xB0, 0x8A}, // �� {0xD0A1, 0x5C0F}, //{0xE5, 0xB0, 0x8F}, // С - {0xC9D9, 0x5C11}, //{0xE5, 0xB0, 0x91}, // - {0xB6FB, 0x5C14}, //{0xE5, 0xB0, 0x94}, // - {0xBCE2, 0x5C16}, //{0xE5, 0xB0, 0x96}, // - {0xB3BE, 0x5C18}, //{0xE5, 0xB0, 0x98}, // - {0xC9D0, 0x5C1A}, //{0xE5, 0xB0, 0x9A}, // - {0xB3A2, 0x5C1D}, //{0xE5, 0xB0, 0x9D}, // - {0xD3C8, 0x5C24}, //{0xE5, 0xB0, 0xA4}, // - {0xBECD, 0x5C31}, //{0xE5, 0xB0, 0xB1}, // + {0xC9D9, 0x5C11}, //{0xE5, 0xB0, 0x91}, // �� + {0xB6FB, 0x5C14}, //{0xE5, 0xB0, 0x94}, // �� + {0xBCE2, 0x5C16}, //{0xE5, 0xB0, 0x96}, // �� + {0xB3BE, 0x5C18}, //{0xE5, 0xB0, 0x98}, // �� + {0xC9D0, 0x5C1A}, //{0xE5, 0xB0, 0x9A}, // �� + {0xB3A2, 0x5C1D}, //{0xE5, 0xB0, 0x9D}, // �� + {0xD3C8, 0x5C24}, //{0xE5, 0xB0, 0xA4}, // �� + {0xBECD, 0x5C31}, //{0xE5, 0xB0, 0xB1}, // �� {0xCAAC, 0x5C38}, //{0xE5, 0xB0, 0xB8}, // ʬ - {0xB3DF, 0x5C3A}, //{0xE5, 0xB0, 0xBA}, // - {0xC4E1, 0x5C3C}, //{0xE5, 0xB0, 0xBC}, // - {0xBEA1, 0x5C3D}, //{0xE5, 0xB0, 0xBD}, // + {0xB3DF, 0x5C3A}, //{0xE5, 0xB0, 0xBA}, // �� + {0xC4E1, 0x5C3C}, //{0xE5, 0xB0, 0xBC}, // �� + {0xBEA1, 0x5C3D}, //{0xE5, 0xB0, 0xBD}, // �� {0xCEB2, 0x5C3E}, //{0xE5, 0xB0, 0xBE}, // β - {0xC4F2, 0x5C3F}, //{0xE5, 0xB0, 0xBF}, // - {0xBED6, 0x5C40}, //{0xE5, 0xB1, 0x80}, // + {0xC4F2, 0x5C3F}, //{0xE5, 0xB0, 0xBF}, // �� + {0xBED6, 0x5C40}, //{0xE5, 0xB1, 0x80}, // �� {0xC6A8, 0x5C41}, //{0xE5, 0xB1, 0x81}, // ƨ - {0xB2E3, 0x5C42}, //{0xE5, 0xB1, 0x82}, // - {0xBED3, 0x5C45}, //{0xE5, 0xB1, 0x85}, // - {0xC7FC, 0x5C48}, //{0xE5, 0xB1, 0x88}, // - {0xCCEB, 0x5C49}, //{0xE5, 0xB1, 0x89}, // - {0xBDEC, 0x5C4A}, //{0xE5, 0xB1, 0x8A}, // - {0xCEDD, 0x5C4B}, //{0xE5, 0xB1, 0x8B}, // + {0xB2E3, 0x5C42}, //{0xE5, 0xB1, 0x82}, // �� + {0xBED3, 0x5C45}, //{0xE5, 0xB1, 0x85}, // �� + {0xC7FC, 0x5C48}, //{0xE5, 0xB1, 0x88}, // �� + {0xCCEB, 0x5C49}, //{0xE5, 0xB1, 0x89}, // �� + {0xBDEC, 0x5C4A}, //{0xE5, 0xB1, 0x8A}, // �� + {0xCEDD, 0x5C4B}, //{0xE5, 0xB1, 0x8B}, // �� {0xCABA, 0x5C4E}, //{0xE5, 0xB1, 0x8E}, // ʺ - {0xC6C1, 0x5C4F}, //{0xE5, 0xB1, 0x8F}, // + {0xC6C1, 0x5C4F}, //{0xE5, 0xB1, 0x8F}, // �� {0xD0BC, 0x5C51}, //{0xE5, 0xB1, 0x91}, // м {0xD5B9, 0x5C55}, //{0xE5, 0xB1, 0x95}, // չ - {0xCAF4, 0x5C5E}, //{0xE5, 0xB1, 0x9E}, // - {0xCDC0, 0x5C60}, //{0xE5, 0xB1, 0xA0}, // - {0xC2C5, 0x5C61}, //{0xE5, 0xB1, 0xA1}, // - {0xC2C4, 0x5C65}, //{0xE5, 0xB1, 0xA5}, // - {0xCDCD, 0x5C6F}, //{0xE5, 0xB1, 0xAF}, // + {0xCAF4, 0x5C5E}, //{0xE5, 0xB1, 0x9E}, // �� + {0xCDC0, 0x5C60}, //{0xE5, 0xB1, 0xA0}, // �� + {0xC2C5, 0x5C61}, //{0xE5, 0xB1, 0xA1}, // �� + {0xC2C4, 0x5C65}, //{0xE5, 0xB1, 0xA5}, // �� + {0xCDCD, 0x5C6F}, //{0xE5, 0xB1, 0xAF}, // �� {0xC9BD, 0x5C71}, //{0xE5, 0xB1, 0xB1}, // ɽ - {0xD2D9, 0x5C79}, //{0xE5, 0xB1, 0xB9}, // - {0xD3EC, 0x5C7F}, //{0xE5, 0xB1, 0xBF}, // - {0xCBEA, 0x5C81}, //{0xE5, 0xB2, 0x81}, // - {0xC6F1, 0x5C82}, //{0xE5, 0xB2, 0x82}, // - {0xB2ED, 0x5C94}, //{0xE5, 0xB2, 0x94}, // - {0xE1AB, 0x5C96}, //{0xE5, 0xB2, 0x96}, // - {0xB8DA, 0x5C97}, //{0xE5, 0xB2, 0x97}, // - {0xB5BA, 0x5C9B}, //{0xE5, 0xB2, 0x9B}, // - {0xD1D2, 0x5CA9}, //{0xE5, 0xB2, 0xA9}, // - {0xC1EB, 0x5CAD}, //{0xE5, 0xB2, 0xAD}, // - {0xD4C0, 0x5CB3}, //{0xE5, 0xB2, 0xB3}, // - {0xB0B6, 0x5CB8}, //{0xE5, 0xB2, 0xB8}, // + {0xD2D9, 0x5C79}, //{0xE5, 0xB1, 0xB9}, // �� + {0xD3EC, 0x5C7F}, //{0xE5, 0xB1, 0xBF}, // �� + {0xCBEA, 0x5C81}, //{0xE5, 0xB2, 0x81}, // �� + {0xC6F1, 0x5C82}, //{0xE5, 0xB2, 0x82}, // �� + {0xB2ED, 0x5C94}, //{0xE5, 0xB2, 0x94}, // �� + {0xE1AB, 0x5C96}, //{0xE5, 0xB2, 0x96}, // � + {0xB8DA, 0x5C97}, //{0xE5, 0xB2, 0x97}, // �� + {0xB5BA, 0x5C9B}, //{0xE5, 0xB2, 0x9B}, // �� + {0xD1D2, 0x5CA9}, //{0xE5, 0xB2, 0xA9}, // �� + {0xC1EB, 0x5CAD}, //{0xE5, 0xB2, 0xAD}, // �� + {0xD4C0, 0x5CB3}, //{0xE5, 0xB2, 0xB3}, // �� + {0xB0B6, 0x5CB8}, //{0xE5, 0xB2, 0xB8}, // �� {0xCFBF, 0x5CE1}, //{0xE5, 0xB3, 0xA1}, // Ͽ - {0xC2CD, 0x5CE6}, //{0xE5, 0xB3, 0xA6}, // - {0xC7CD, 0x5CED}, //{0xE5, 0xB3, 0xAD}, // - {0xB7E5, 0x5CF0}, //{0xE5, 0xB3, 0xB0}, // - {0xBEFE, 0x5CFB}, //{0xE5, 0xB3, 0xBB}, // - {0xB3E7, 0x5D07}, //{0xE5, 0xB4, 0x87}, // - {0xC6E9, 0x5D0E}, //{0xE5, 0xB4, 0x8E}, // - {0xB4DE, 0x5D14}, //{0xE5, 0xB4, 0x94}, // - {0xD1C2, 0x5D16}, //{0xE5, 0xB4, 0x96}, // - {0xB1C0, 0x5D29}, //{0xE5, 0xB4, 0xA9}, // + {0xC2CD, 0x5CE6}, //{0xE5, 0xB3, 0xA6}, // �� + {0xC7CD, 0x5CED}, //{0xE5, 0xB3, 0xAD}, // �� + {0xB7E5, 0x5CF0}, //{0xE5, 0xB3, 0xB0}, // �� + {0xBEFE, 0x5CFB}, //{0xE5, 0xB3, 0xBB}, // �� + {0xB3E7, 0x5D07}, //{0xE5, 0xB4, 0x87}, // �� + {0xC6E9, 0x5D0E}, //{0xE5, 0xB4, 0x8E}, // �� + {0xB4DE, 0x5D14}, //{0xE5, 0xB4, 0x94}, // �� + {0xD1C2, 0x5D16}, //{0xE5, 0xB4, 0x96}, // �� + {0xB1C0, 0x5D29}, //{0xE5, 0xB4, 0xA9}, // �� {0xD5B8, 0x5D2D}, //{0xE5, 0xB4, 0xAD}, // ո {0xC7B6, 0x5D4C}, //{0xE5, 0xB5, 0x8C}, // Ƕ {0xCEA1, 0x5DCD}, //{0xE5, 0xB7, 0x8D}, // Ρ - {0xB4A8, 0x5DDD}, //{0xE5, 0xB7, 0x9D}, // - {0xD6DD, 0x5DDE}, //{0xE5, 0xB7, 0x9E}, // + {0xB4A8, 0x5DDD}, //{0xE5, 0xB7, 0x9D}, // �� + {0xD6DD, 0x5DDE}, //{0xE5, 0xB7, 0x9E}, // �� {0xD1B2, 0x5DE1}, //{0xE5, 0xB7, 0xA1}, // Ѳ - {0xB3B2, 0x5DE2}, //{0xE5, 0xB7, 0xA2}, // - {0xB9A4, 0x5DE5}, //{0xE5, 0xB7, 0xA5}, // - {0xD7F3, 0x5DE6}, //{0xE5, 0xB7, 0xA6}, // - {0xC7C9, 0x5DE7}, //{0xE5, 0xB7, 0xA7}, // - {0xBEDE, 0x5DE8}, //{0xE5, 0xB7, 0xA8}, // - {0xB9AE, 0x5DE9}, //{0xE5, 0xB7, 0xA9}, // - {0xCED7, 0x5DEB}, //{0xE5, 0xB7, 0xAB}, // - {0xB2EE, 0x5DEE}, //{0xE5, 0xB7, 0xAE}, // - {0xBCBA, 0x5DF1}, //{0xE5, 0xB7, 0xB1}, // - {0xD2D1, 0x5DF2}, //{0xE5, 0xB7, 0xB2}, // - {0xB0CD, 0x5DF4}, //{0xE5, 0xB7, 0xB4}, // - {0xCFEF, 0x5DF7}, //{0xE5, 0xB7, 0xB7}, // - {0xBDED, 0x5DFE}, //{0xE5, 0xB7, 0xBE}, // - {0xB1D2, 0x5E01}, //{0xE5, 0xB8, 0x81}, // - {0xCAD0, 0x5E02}, //{0xE5, 0xB8, 0x82}, // - {0xB2BC, 0x5E03}, //{0xE5, 0xB8, 0x83}, // + {0xB3B2, 0x5DE2}, //{0xE5, 0xB7, 0xA2}, // �� + {0xB9A4, 0x5DE5}, //{0xE5, 0xB7, 0xA5}, // �� + {0xD7F3, 0x5DE6}, //{0xE5, 0xB7, 0xA6}, // �� + {0xC7C9, 0x5DE7}, //{0xE5, 0xB7, 0xA7}, // �� + {0xBEDE, 0x5DE8}, //{0xE5, 0xB7, 0xA8}, // �� + {0xB9AE, 0x5DE9}, //{0xE5, 0xB7, 0xA9}, // �� + {0xCED7, 0x5DEB}, //{0xE5, 0xB7, 0xAB}, // �� + {0xB2EE, 0x5DEE}, //{0xE5, 0xB7, 0xAE}, // �� + {0xBCBA, 0x5DF1}, //{0xE5, 0xB7, 0xB1}, // �� + {0xD2D1, 0x5DF2}, //{0xE5, 0xB7, 0xB2}, // �� + {0xB0CD, 0x5DF4}, //{0xE5, 0xB7, 0xB4}, // �� + {0xCFEF, 0x5DF7}, //{0xE5, 0xB7, 0xB7}, // �� + {0xBDED, 0x5DFE}, //{0xE5, 0xB7, 0xBE}, // �� + {0xB1D2, 0x5E01}, //{0xE5, 0xB8, 0x81}, // �� + {0xCAD0, 0x5E02}, //{0xE5, 0xB8, 0x82}, // �� + {0xB2BC, 0x5E03}, //{0xE5, 0xB8, 0x83}, // �� {0xCBA7, 0x5E05}, //{0xE5, 0xB8, 0x85}, // ˧ - {0xB7AB, 0x5E06}, //{0xE5, 0xB8, 0x86}, // + {0xB7AB, 0x5E06}, //{0xE5, 0xB8, 0x86}, // �� {0xCAA6, 0x5E08}, //{0xE5, 0xB8, 0x88}, // ʦ {0xCFA3, 0x5E0C}, //{0xE5, 0xB8, 0x8C}, // ϣ - {0xD5CA, 0x5E10}, //{0xE5, 0xB8, 0x90}, // - {0xC5C1, 0x5E15}, //{0xE5, 0xB8, 0x95}, // - {0xCCFB, 0x5E16}, //{0xE5, 0xB8, 0x96}, // - {0xC1B1, 0x5E18}, //{0xE5, 0xB8, 0x98}, // - {0xD6E3, 0x5E1A}, //{0xE5, 0xB8, 0x9A}, // - {0xD6C4, 0x5E1C}, //{0xE5, 0xB8, 0x9C}, // - {0xB5DB, 0x5E1D}, //{0xE5, 0xB8, 0x9D}, // - {0xB4F8, 0x5E26}, //{0xE5, 0xB8, 0xA6}, // + {0xD5CA, 0x5E10}, //{0xE5, 0xB8, 0x90}, // �� + {0xC5C1, 0x5E15}, //{0xE5, 0xB8, 0x95}, // �� + {0xCCFB, 0x5E16}, //{0xE5, 0xB8, 0x96}, // �� + {0xC1B1, 0x5E18}, //{0xE5, 0xB8, 0x98}, // q + {0xD6E3, 0x5E1A}, //{0xE5, 0xB8, 0x9A}, // �� + {0xD6C4, 0x5E1C}, //{0xE5, 0xB8, 0x9C}, // �� + {0xB5DB, 0x5E1D}, //{0xE5, 0xB8, 0x9D}, // �� + {0xB4F8, 0x5E26}, //{0xE5, 0xB8, 0xA6}, // �� {0xCFAF, 0x5E2D}, //{0xE5, 0xB8, 0xAD}, // ϯ - {0xB0EF, 0x5E2E}, //{0xE5, 0xB8, 0xAE}, // - {0xB3A3, 0x5E38}, //{0xE5, 0xB8, 0xB8}, // + {0xB0EF, 0x5E2E}, //{0xE5, 0xB8, 0xAE}, // �� + {0xB3A3, 0x5E38}, //{0xE5, 0xB8, 0xB8}, // �� {0xC3B1, 0x5E3D}, //{0xE5, 0xB8, 0xBD}, // ñ - {0xB7F9, 0x5E45}, //{0xE5, 0xB9, 0x85}, // - {0xBBCF, 0x5E4C}, //{0xE5, 0xB9, 0x8C}, // - {0xE1A3, 0x5E54}, //{0xE5, 0xB9, 0x94}, // + {0xB7F9, 0x5E45}, //{0xE5, 0xB9, 0x85}, // �� + {0xBBCF, 0x5E4C}, //{0xE5, 0xB9, 0x8C}, // �� + {0xE1A3, 0x5E54}, //{0xE5, 0xB9, 0x94}, // � {0xC4BB, 0x5E55}, //{0xE5, 0xB9, 0x95}, // Ļ - {0xB4B1, 0x5E62}, //{0xE5, 0xB9, 0xA2}, // - {0xB8C9, 0x5E72}, //{0xE5, 0xB9, 0xB2}, // + {0xB4B1, 0x5E62}, //{0xE5, 0xB9, 0xA2}, // �� + {0xB8C9, 0x5E72}, //{0xE5, 0xB9, 0xB2}, // �� {0xC6BD, 0x5E73}, //{0xE5, 0xB9, 0xB3}, // ƽ - {0xC4EA, 0x5E74}, //{0xE5, 0xB9, 0xB4}, // - {0xB2A2, 0x5E76}, //{0xE5, 0xB9, 0xB6}, // - {0xD0D2, 0x5E78}, //{0xE5, 0xB9, 0xB8}, // - {0xBBC3, 0x5E7B}, //{0xE5, 0xB9, 0xBB}, // - {0xD3D7, 0x5E7C}, //{0xE5, 0xB9, 0xBC}, // - {0xD3C4, 0x5E7D}, //{0xE5, 0xB9, 0xBD}, // - {0xB9E3, 0x5E7F}, //{0xE5, 0xB9, 0xBF}, // + {0xC4EA, 0x5E74}, //{0xE5, 0xB9, 0xB4}, // �� + {0xB2A2, 0x5E76}, //{0xE5, 0xB9, 0xB6}, // �� + {0xD0D2, 0x5E78}, //{0xE5, 0xB9, 0xB8}, // �� + {0xBBC3, 0x5E7B}, //{0xE5, 0xB9, 0xBB}, // �� + {0xD3D7, 0x5E7C}, //{0xE5, 0xB9, 0xBC}, // �� + {0xD3C4, 0x5E7D}, //{0xE5, 0xB9, 0xBD}, // �� + {0xB9E3, 0x5E7F}, //{0xE5, 0xB9, 0xBF}, // �� {0xD7AF, 0x5E84}, //{0xE5, 0xBA, 0x84}, // ׯ - {0xC7EC, 0x5E86}, //{0xE5, 0xBA, 0x86}, // - {0xB1D3, 0x5E87}, //{0xE5, 0xBA, 0x87}, // - {0xB4B2, 0x5E8A}, //{0xE5, 0xBA, 0x8A}, // - {0xD0F2, 0x5E8F}, //{0xE5, 0xBA, 0x8F}, // + {0xC7EC, 0x5E86}, //{0xE5, 0xBA, 0x86}, // �� + {0xB1D3, 0x5E87}, //{0xE5, 0xBA, 0x87}, // �� + {0xB4B2, 0x5E8A}, //{0xE5, 0xBA, 0x8A}, // �� + {0xD0F2, 0x5E8F}, //{0xE5, 0xBA, 0x8F}, // �� {0xC2AE, 0x5E90}, //{0xE5, 0xBA, 0x90}, // ® - {0xBFE2, 0x5E93}, //{0xE5, 0xBA, 0x93}, // + {0xBFE2, 0x5E93}, //{0xE5, 0xBA, 0x93}, // �� {0xD3A6, 0x5E94}, //{0xE5, 0xBA, 0x94}, // Ӧ - {0xB5D7, 0x5E95}, //{0xE5, 0xBA, 0x95}, // - {0xB5EA, 0x5E97}, //{0xE5, 0xBA, 0x97}, // - {0xC3ED, 0x5E99}, //{0xE5, 0xBA, 0x99}, // - {0xB8AE, 0x5E9C}, //{0xE5, 0xBA, 0x9C}, // - {0xC5D3, 0x5E9E}, //{0xE5, 0xBA, 0x9E}, // - {0xB7CF, 0x5E9F}, //{0xE5, 0xBA, 0x9F}, // - {0xB6C8, 0x5EA6}, //{0xE5, 0xBA, 0xA6}, // - {0xD7F9, 0x5EA7}, //{0xE5, 0xBA, 0xA7}, // + {0xB5D7, 0x5E95}, //{0xE5, 0xBA, 0x95}, // �� + {0xB5EA, 0x5E97}, //{0xE5, 0xBA, 0x97}, // �� + {0xC3ED, 0x5E99}, //{0xE5, 0xBA, 0x99}, // �� + {0xB8AE, 0x5E9C}, //{0xE5, 0xBA, 0x9C}, // �� + {0xC5D3, 0x5E9E}, //{0xE5, 0xBA, 0x9E}, // �� + {0xB7CF, 0x5E9F}, //{0xE5, 0xBA, 0x9F}, // �� + {0xB6C8, 0x5EA6}, //{0xE5, 0xBA, 0xA6}, // �� + {0xD7F9, 0x5EA7}, //{0xE5, 0xBA, 0xA7}, // �� {0xCDA5, 0x5EAD}, //{0xE5, 0xBA, 0xAD}, // ͥ - {0xE2D6, 0x5EB5}, //{0xE5, 0xBA, 0xB5}, // - {0xCAFC, 0x5EB6}, //{0xE5, 0xBA, 0xB6}, // - {0xBFB5, 0x5EB7}, //{0xE5, 0xBA, 0xB7}, // + {0xE2D6, 0x5EB5}, //{0xE5, 0xBA, 0xB5}, // �� + {0xCAFC, 0x5EB6}, //{0xE5, 0xBA, 0xB6}, // �� + {0xBFB5, 0x5EB7}, //{0xE5, 0xBA, 0xB7}, // �� {0xD3B9, 0x5EB8}, //{0xE5, 0xBA, 0xB8}, // ӹ - {0xC1AE, 0x5EC9}, //{0xE5, 0xBB, 0x89}, // - {0xC0C8, 0x5ECA}, //{0xE5, 0xBB, 0x8A}, // - {0xC0AA, 0x5ED3}, //{0xE5, 0xBB, 0x93}, // - {0xD1D3, 0x5EF6}, //{0xE5, 0xBB, 0xB6}, // + {0xC1AE, 0x5EC9}, //{0xE5, 0xBB, 0x89}, // n + {0xC0C8, 0x5ECA}, //{0xE5, 0xBB, 0x8A}, // �� + {0xC0AA, 0x5ED3}, //{0xE5, 0xBB, 0x93}, // * + {0xD1D3, 0x5EF6}, //{0xE5, 0xBB, 0xB6}, // �� {0xCDA2, 0x5EF7}, //{0xE5, 0xBB, 0xB7}, // ͢ - {0xBDA8, 0x5EFA}, //{0xE5, 0xBB, 0xBA}, // - {0xBFAA, 0x5F00}, //{0xE5, 0xBC, 0x80}, // - {0xD2EC, 0x5F02}, //{0xE5, 0xBC, 0x82}, // - {0xC6FA, 0x5F03}, //{0xE5, 0xBC, 0x83}, // + {0xBDA8, 0x5EFA}, //{0xE5, 0xBB, 0xBA}, // �� + {0xBFAA, 0x5F00}, //{0xE5, 0xBC, 0x80}, // �� + {0xD2EC, 0x5F02}, //{0xE5, 0xBC, 0x82}, // �� + {0xC6FA, 0x5F03}, //{0xE5, 0xBC, 0x83}, // �� {0xC5AA, 0x5F04}, //{0xE5, 0xBC, 0x84}, // Ū - {0xB1D7, 0x5F0A}, //{0xE5, 0xBC, 0x8A}, // + {0xB1D7, 0x5F0A}, //{0xE5, 0xBC, 0x8A}, // �� {0xCABD, 0x5F0F}, //{0xE5, 0xBC, 0x8F}, // ʽ - {0xB9AD, 0x5F13}, //{0xE5, 0xBC, 0x93}, // - {0xD2FD, 0x5F15}, //{0xE5, 0xBC, 0x95}, // - {0xB3DA, 0x5F1B}, //{0xE5, 0xBC, 0x9B}, // - {0xB5DC, 0x5F1F}, //{0xE5, 0xBC, 0x9F}, // - {0xD5C5, 0x5F20}, //{0xE5, 0xBC, 0xA0}, // - {0xC3D6, 0x5F25}, //{0xE5, 0xBC, 0xA5}, // - {0xCFD2, 0x5F26}, //{0xE5, 0xBC, 0xA6}, // - {0xBBA1, 0x5F27}, //{0xE5, 0xBC, 0xA7}, // - {0xCDE4, 0x5F2F}, //{0xE5, 0xBC, 0xAF}, // - {0xC8F5, 0x5F31}, //{0xE5, 0xBC, 0xB1}, // - {0xB5AF, 0x5F39}, //{0xE5, 0xBC, 0xB9}, // + {0xB9AD, 0x5F13}, //{0xE5, 0xBC, 0x93}, // �� + {0xD2FD, 0x5F15}, //{0xE5, 0xBC, 0x95}, // �� + {0xB3DA, 0x5F1B}, //{0xE5, 0xBC, 0x9B}, // �� + {0xB5DC, 0x5F1F}, //{0xE5, 0xBC, 0x9F}, // �� + {0xD5C5, 0x5F20}, //{0xE5, 0xBC, 0xA0}, // �� + {0xC3D6, 0x5F25}, //{0xE5, 0xBC, 0xA5}, // �� + {0xCFD2, 0x5F26}, //{0xE5, 0xBC, 0xA6}, // �� + {0xBBA1, 0x5F27}, //{0xE5, 0xBC, 0xA7}, // �� + {0xCDE4, 0x5F2F}, //{0xE5, 0xBC, 0xAF}, // �� + {0xC8F5, 0x5F31}, //{0xE5, 0xBC, 0xB1}, // �� + {0xB5AF, 0x5F39}, //{0xE5, 0xBC, 0xB9}, // �� {0xC7BF, 0x5F3A}, //{0xE5, 0xBC, 0xBA}, // ǿ - {0xB9E9, 0x5F52}, //{0xE5, 0xBD, 0x92}, // - {0xB5B1, 0x5F53}, //{0xE5, 0xBD, 0x93}, // + {0xB9E9, 0x5F52}, //{0xE5, 0xBD, 0x92}, // �� + {0xB5B1, 0x5F53}, //{0xE5, 0xBD, 0x93}, // �� {0xC2BC, 0x5F55}, //{0xE5, 0xBD, 0x95}, // ¼ - {0xD0CE, 0x5F62}, //{0xE5, 0xBD, 0xA2}, // + {0xD0CE, 0x5F62}, //{0xE5, 0xBD, 0xA2}, // �� {0xCDAE, 0x5F64}, //{0xE5, 0xBD, 0xA4}, // ͮ - {0xB2CA, 0x5F69}, //{0xE5, 0xBD, 0xA9}, // - {0xB1EB, 0x5F6A}, //{0xE5, 0xBD, 0xAA}, // - {0xB1F2, 0x5F6C}, //{0xE5, 0xBD, 0xAC}, // - {0xC5ED, 0x5F6D}, //{0xE5, 0xBD, 0xAD}, // - {0xD5C3, 0x5F70}, //{0xE5, 0xBD, 0xB0}, // + {0xB2CA, 0x5F69}, //{0xE5, 0xBD, 0xA9}, // �� + {0xB1EB, 0x5F6A}, //{0xE5, 0xBD, 0xAA}, // �� + {0xB1F2, 0x5F6C}, //{0xE5, 0xBD, 0xAC}, // �� + {0xC5ED, 0x5F6D}, //{0xE5, 0xBD, 0xAD}, // �� + {0xD5C3, 0x5F70}, //{0xE5, 0xBD, 0xB0}, // �� {0xD3B0, 0x5F71}, //{0xE5, 0xBD, 0xB1}, // Ӱ - {0xD2DB, 0x5F79}, //{0xE5, 0xBD, 0xB9}, // - {0xB3B9, 0x5F7B}, //{0xE5, 0xBD, 0xBB}, // - {0xB1CB, 0x5F7C}, //{0xE5, 0xBD, 0xBC}, // - {0xCDF9, 0x5F80}, //{0xE5, 0xBE, 0x80}, // - {0xD5F7, 0x5F81}, //{0xE5, 0xBE, 0x81}, // - {0xBEB6, 0x5F84}, //{0xE5, 0xBE, 0x84}, // - {0xB4FD, 0x5F85}, //{0xE5, 0xBE, 0x85}, // - {0xBADC, 0x5F88}, //{0xE5, 0xBE, 0x88}, // - {0xBBB2, 0x5F8A}, //{0xE5, 0xBE, 0x8A}, // - {0xC2C9, 0x5F8B}, //{0xE5, 0xBE, 0x8B}, // - {0xD0EC, 0x5F90}, //{0xE5, 0xBE, 0x90}, // + {0xD2DB, 0x5F79}, //{0xE5, 0xBD, 0xB9}, // �� + {0xB3B9, 0x5F7B}, //{0xE5, 0xBD, 0xBB}, // �� + {0xB1CB, 0x5F7C}, //{0xE5, 0xBD, 0xBC}, // �� + {0xCDF9, 0x5F80}, //{0xE5, 0xBE, 0x80}, // �� + {0xD5F7, 0x5F81}, //{0xE5, 0xBE, 0x81}, // �� + {0xBEB6, 0x5F84}, //{0xE5, 0xBE, 0x84}, // �� + {0xB4FD, 0x5F85}, //{0xE5, 0xBE, 0x85}, // �� + {0xBADC, 0x5F88}, //{0xE5, 0xBE, 0x88}, // �� + {0xBBB2, 0x5F8A}, //{0xE5, 0xBE, 0x8A}, // �� + {0xC2C9, 0x5F8B}, //{0xE5, 0xBE, 0x8B}, // �� + {0xD0EC, 0x5F90}, //{0xE5, 0xBE, 0x90}, // �� {0xCDBD, 0x5F92}, //{0xE5, 0xBE, 0x92}, // ͽ - {0xB5C3, 0x5F97}, //{0xE5, 0xBE, 0x97}, // - {0xC5C7, 0x5F98}, //{0xE5, 0xBE, 0x98}, // - {0xD3F9, 0x5FA1}, //{0xE5, 0xBE, 0xA1}, // + {0xB5C3, 0x5F97}, //{0xE5, 0xBE, 0x97}, // �� + {0xC5C7, 0x5F98}, //{0xE5, 0xBE, 0x98}, // �� + {0xD3F9, 0x5FA1}, //{0xE5, 0xBE, 0xA1}, // �� {0xD1AD, 0x5FAA}, //{0xE5, 0xBE, 0xAA}, // ѭ {0xCEA2, 0x5FAE}, //{0xE5, 0xBE, 0xAE}, // ΢ - {0xB5C2, 0x5FB7}, //{0xE5, 0xBE, 0xB7}, // - {0xBBD5, 0x5FBD}, //{0xE5, 0xBE, 0xBD}, // - {0xD0C4, 0x5FC3}, //{0xE5, 0xBF, 0x83}, // - {0xB1D8, 0x5FC5}, //{0xE5, 0xBF, 0x85}, // - {0xD2E4, 0x5FC6}, //{0xE5, 0xBF, 0x86}, // - {0xBCC9, 0x5FCC}, //{0xE5, 0xBF, 0x8C}, // - {0xC8CC, 0x5FCD}, //{0xE5, 0xBF, 0x8D}, // + {0xB5C2, 0x5FB7}, //{0xE5, 0xBE, 0xB7}, // �� + {0xBBD5, 0x5FBD}, //{0xE5, 0xBE, 0xBD}, // �� + {0xD0C4, 0x5FC3}, //{0xE5, 0xBF, 0x83}, // �� + {0xB1D8, 0x5FC5}, //{0xE5, 0xBF, 0x85}, // �� + {0xD2E4, 0x5FC6}, //{0xE5, 0xBF, 0x86}, // �� + {0xBCC9, 0x5FCC}, //{0xE5, 0xBF, 0x8C}, // �� + {0xC8CC, 0x5FCD}, //{0xE5, 0xBF, 0x8D}, // �� {0xD6BE, 0x5FD7}, //{0xE5, 0xBF, 0x97}, // ־ - {0xCDFC, 0x5FD8}, //{0xE5, 0xBF, 0x98}, // + {0xCDFC, 0x5FD8}, //{0xE5, 0xBF, 0x98}, // �� {0xC3A6, 0x5FD9}, //{0xE5, 0xBF, 0x99}, // æ - {0xD6D2, 0x5FE0}, //{0xE5, 0xBF, 0xA0}, // - {0xD3C7, 0x5FE7}, //{0xE5, 0xBF, 0xA7}, // - {0xBFEC, 0x5FEB}, //{0xE5, 0xBF, 0xAB}, // - {0xB3C0, 0x5FF1}, //{0xE5, 0xBF, 0xB1}, // - {0xC4EE, 0x5FF5}, //{0xE5, 0xBF, 0xB5}, // - {0xBAF6, 0x5FFD}, //{0xE5, 0xBF, 0xBD}, // - {0xB7DE, 0x5FFF}, //{0xE5, 0xBF, 0xBF}, // - {0xBBB3, 0x6000}, //{0xE6, 0x80, 0x80}, // + {0xD6D2, 0x5FE0}, //{0xE5, 0xBF, 0xA0}, // �� + {0xD3C7, 0x5FE7}, //{0xE5, 0xBF, 0xA7}, // �� + {0xBFEC, 0x5FEB}, //{0xE5, 0xBF, 0xAB}, // �� + {0xB3C0, 0x5FF1}, //{0xE5, 0xBF, 0xB1}, // �� + {0xC4EE, 0x5FF5}, //{0xE5, 0xBF, 0xB5}, // �� + {0xBAF6, 0x5FFD}, //{0xE5, 0xBF, 0xBD}, // �� + {0xB7DE, 0x5FFF}, //{0xE5, 0xBF, 0xBF}, // �� + {0xBBB3, 0x6000}, //{0xE6, 0x80, 0x80}, // �� {0xCCAC, 0x6001}, //{0xE6, 0x80, 0x81}, // ̬ - {0xD4F5, 0x600E}, //{0xE6, 0x80, 0x8E}, // + {0xD4F5, 0x600E}, //{0xE6, 0x80, 0x8E}, // �� {0xC5AD, 0x6012}, //{0xE6, 0x80, 0x92}, // ŭ - {0xD5FA, 0x6014}, //{0xE6, 0x80, 0x94}, // - {0xC5C2, 0x6015}, //{0xE6, 0x80, 0x95}, // - {0xB2C0, 0x6016}, //{0xE6, 0x80, 0x96}, // - {0xC1AF, 0x601C}, //{0xE6, 0x80, 0x9C}, // + {0xD5FA, 0x6014}, //{0xE6, 0x80, 0x94}, // �� + {0xC5C2, 0x6015}, //{0xE6, 0x80, 0x95}, // �� + {0xB2C0, 0x6016}, //{0xE6, 0x80, 0x96}, // �� + {0xC1AF, 0x601C}, //{0xE6, 0x80, 0x9C}, // o {0xCBBC, 0x601D}, //{0xE6, 0x80, 0x9D}, // ˼ - {0xB5A1, 0x6020}, //{0xE6, 0x80, 0xA0}, // - {0xBCB1, 0x6025}, //{0xE6, 0x80, 0xA5}, // - {0xD0D4, 0x6027}, //{0xE6, 0x80, 0xA7}, // + {0xB5A1, 0x6020}, //{0xE6, 0x80, 0xA0}, // �� + {0xBCB1, 0x6025}, //{0xE6, 0x80, 0xA5}, // �� + {0xD0D4, 0x6027}, //{0xE6, 0x80, 0xA7}, // �� {0xD4B9, 0x6028}, //{0xE6, 0x80, 0xA8}, // Թ - {0xB9D6, 0x602A}, //{0xE6, 0x80, 0xAA}, // - {0xC7D3, 0x602F}, //{0xE6, 0x80, 0xAF}, // - {0xD7DC, 0x603B}, //{0xE6, 0x80, 0xBB}, // - {0xCAD1, 0x6043}, //{0xE6, 0x81, 0x83}, // - {0xC1B5, 0x604B}, //{0xE6, 0x81, 0x8B}, // - {0xBBD0, 0x604D}, //{0xE6, 0x81, 0x8D}, // - {0xBFD6, 0x6050}, //{0xE6, 0x81, 0x90}, // - {0xBAE3, 0x6052}, //{0xE6, 0x81, 0x92}, // + {0xB9D6, 0x602A}, //{0xE6, 0x80, 0xAA}, // �� + {0xC7D3, 0x602F}, //{0xE6, 0x80, 0xAF}, // �� + {0xD7DC, 0x603B}, //{0xE6, 0x80, 0xBB}, // �� + {0xCAD1, 0x6043}, //{0xE6, 0x81, 0x83}, // �� + {0xC1B5, 0x604B}, //{0xE6, 0x81, 0x8B}, // u + {0xBBD0, 0x604D}, //{0xE6, 0x81, 0x8D}, // �� + {0xBFD6, 0x6050}, //{0xE6, 0x81, 0x90}, // �� + {0xBAE3, 0x6052}, //{0xE6, 0x81, 0x92}, // �� {0xCBA1, 0x6055}, //{0xE6, 0x81, 0x95}, // ˡ - {0xBBD6, 0x6062}, //{0xE6, 0x81, 0xA2}, // - {0xD0F4, 0x6064}, //{0xE6, 0x81, 0xA4}, // - {0xBADE, 0x6068}, //{0xE6, 0x81, 0xA8}, // - {0xB6F7, 0x6069}, //{0xE6, 0x81, 0xA9}, // - {0xCCF1, 0x606C}, //{0xE6, 0x81, 0xAC}, // - {0xB9A7, 0x606D}, //{0xE6, 0x81, 0xAD}, // + {0xBBD6, 0x6062}, //{0xE6, 0x81, 0xA2}, // �� + {0xD0F4, 0x6064}, //{0xE6, 0x81, 0xA4}, // �� + {0xBADE, 0x6068}, //{0xE6, 0x81, 0xA8}, // �� + {0xB6F7, 0x6069}, //{0xE6, 0x81, 0xA9}, // �� + {0xCCF1, 0x606C}, //{0xE6, 0x81, 0xAC}, // �� + {0xB9A7, 0x606D}, //{0xE6, 0x81, 0xAD}, // �� {0xCFA2, 0x606F}, //{0xE6, 0x81, 0xAF}, // Ϣ {0xC7A1, 0x6070}, //{0xE6, 0x81, 0xB0}, // ǡ - {0xBFD2, 0x6073}, //{0xE6, 0x81, 0xB3}, // - {0xB6F1, 0x6076}, //{0xE6, 0x81, 0xB6}, // - {0xC4D5, 0x607C}, //{0xE6, 0x81, 0xBC}, // - {0xC7C4, 0x6084}, //{0xE6, 0x82, 0x84}, // + {0xBFD2, 0x6073}, //{0xE6, 0x81, 0xB3}, // �� + {0xB6F1, 0x6076}, //{0xE6, 0x81, 0xB6}, // �� + {0xC4D5, 0x607C}, //{0xE6, 0x81, 0xBC}, // �� + {0xC7C4, 0x6084}, //{0xE6, 0x82, 0x84}, // �� {0xCFA4, 0x6089}, //{0xE6, 0x82, 0x89}, // Ϥ - {0xBAB7, 0x608D}, //{0xE6, 0x82, 0x8D}, // - {0xBBDA, 0x6094}, //{0xE6, 0x82, 0x94}, // - {0xCEF2, 0x609F}, //{0xE6, 0x82, 0x9F}, // - {0xD3C6, 0x60A0}, //{0xE6, 0x82, 0xA0}, // - {0xBBBC, 0x60A3}, //{0xE6, 0x82, 0xA3}, // - {0xD4C3, 0x60A6}, //{0xE6, 0x82, 0xA6}, // - {0xC4FA, 0x60A8}, //{0xE6, 0x82, 0xA8}, // - {0xD0FC, 0x60AC}, //{0xE6, 0x82, 0xAC}, // - {0xC3F5, 0x60AF}, //{0xE6, 0x82, 0xAF}, // - {0xB1AF, 0x60B2}, //{0xE6, 0x82, 0xB2}, // - {0xE3B2, 0x60B4}, //{0xE6, 0x82, 0xB4}, // - {0xB5BF, 0x60BC}, //{0xE6, 0x82, 0xBC}, // - {0xC7E9, 0x60C5}, //{0xE6, 0x83, 0x85}, // - {0xBEAA, 0x60CA}, //{0xE6, 0x83, 0x8A}, // - {0xCDEF, 0x60CB}, //{0xE6, 0x83, 0x8B}, // - {0xBBF3, 0x60D1}, //{0xE6, 0x83, 0x91}, // - {0xCCE8, 0x60D5}, //{0xE6, 0x83, 0x95}, // + {0xBAB7, 0x608D}, //{0xE6, 0x82, 0x8D}, // �� + {0xBBDA, 0x6094}, //{0xE6, 0x82, 0x94}, // �� + {0xCEF2, 0x609F}, //{0xE6, 0x82, 0x9F}, // �� + {0xD3C6, 0x60A0}, //{0xE6, 0x82, 0xA0}, // �� + {0xBBBC, 0x60A3}, //{0xE6, 0x82, 0xA3}, // �� + {0xD4C3, 0x60A6}, //{0xE6, 0x82, 0xA6}, // �� + {0xC4FA, 0x60A8}, //{0xE6, 0x82, 0xA8}, // �� + {0xD0FC, 0x60AC}, //{0xE6, 0x82, 0xAC}, // �� + {0xC3F5, 0x60AF}, //{0xE6, 0x82, 0xAF}, // �� + {0xB1AF, 0x60B2}, //{0xE6, 0x82, 0xB2}, // �� + {0xE3B2, 0x60B4}, //{0xE6, 0x82, 0xB4}, // � + {0xB5BF, 0x60BC}, //{0xE6, 0x82, 0xBC}, // �� + {0xC7E9, 0x60C5}, //{0xE6, 0x83, 0x85}, // �� + {0xBEAA, 0x60CA}, //{0xE6, 0x83, 0x8A}, // �� + {0xCDEF, 0x60CB}, //{0xE6, 0x83, 0x8B}, // �� + {0xBBF3, 0x60D1}, //{0xE6, 0x83, 0x91}, // �� + {0xCCE8, 0x60D5}, //{0xE6, 0x83, 0x95}, // �� {0xCFA7, 0x60DC}, //{0xE6, 0x83, 0x9C}, // ϧ - {0xBBDD, 0x60E0}, //{0xE6, 0x83, 0xA0}, // - {0xB5EB, 0x60E6}, //{0xE6, 0x83, 0xA6}, // - {0xBEE5, 0x60E7}, //{0xE6, 0x83, 0xA7}, // - {0xB2D2, 0x60E8}, //{0xE6, 0x83, 0xA8}, // - {0xB3CD, 0x60E9}, //{0xE6, 0x83, 0xA9}, // - {0xB1B9, 0x60EB}, //{0xE6, 0x83, 0xAB}, // - {0xB2D1, 0x60ED}, //{0xE6, 0x83, 0xAD}, // - {0xB9DF, 0x60EF}, //{0xE6, 0x83, 0xAF}, // - {0xB6E8, 0x60F0}, //{0xE6, 0x83, 0xB0}, // - {0xCFEB, 0x60F3}, //{0xE6, 0x83, 0xB3}, // - {0xBBCC, 0x60F6}, //{0xE6, 0x83, 0xB6}, // - {0xC8C7, 0x60F9}, //{0xE6, 0x83, 0xB9}, // - {0xB3EE, 0x6101}, //{0xE6, 0x84, 0x81}, // - {0xD3FA, 0x6108}, //{0xE6, 0x84, 0x88}, // - {0xD3E4, 0x6109}, //{0xE6, 0x84, 0x89}, // - {0xD2E2, 0x610F}, //{0xE6, 0x84, 0x8F}, // - {0xE3B5, 0x6115}, //{0xE6, 0x84, 0x95}, // - {0xD3DE, 0x611A}, //{0xE6, 0x84, 0x9A}, // - {0xB8D0, 0x611F}, //{0xE6, 0x84, 0x9F}, // - {0xB7DF, 0x6124}, //{0xE6, 0x84, 0xA4}, // - {0xC0A2, 0x6127}, //{0xE6, 0x84, 0xA7}, // + {0xBBDD, 0x60E0}, //{0xE6, 0x83, 0xA0}, // �� + {0xB5EB, 0x60E6}, //{0xE6, 0x83, 0xA6}, // �� + {0xBEE5, 0x60E7}, //{0xE6, 0x83, 0xA7}, // �� + {0xB2D2, 0x60E8}, //{0xE6, 0x83, 0xA8}, // �� + {0xB3CD, 0x60E9}, //{0xE6, 0x83, 0xA9}, // �� + {0xB1B9, 0x60EB}, //{0xE6, 0x83, 0xAB}, // �� + {0xB2D1, 0x60ED}, //{0xE6, 0x83, 0xAD}, // �� + {0xB9DF, 0x60EF}, //{0xE6, 0x83, 0xAF}, // �� + {0xB6E8, 0x60F0}, //{0xE6, 0x83, 0xB0}, // �� + {0xCFEB, 0x60F3}, //{0xE6, 0x83, 0xB3}, // �� + {0xBBCC, 0x60F6}, //{0xE6, 0x83, 0xB6}, // �� + {0xC8C7, 0x60F9}, //{0xE6, 0x83, 0xB9}, // �� + {0xB3EE, 0x6101}, //{0xE6, 0x84, 0x81}, // �� + {0xD3FA, 0x6108}, //{0xE6, 0x84, 0x88}, // �� + {0xD3E4, 0x6109}, //{0xE6, 0x84, 0x89}, // �� + {0xD2E2, 0x610F}, //{0xE6, 0x84, 0x8F}, // �� + {0xE3B5, 0x6115}, //{0xE6, 0x84, 0x95}, // � + {0xD3DE, 0x611A}, //{0xE6, 0x84, 0x9A}, // �� + {0xB8D0, 0x611F}, //{0xE6, 0x84, 0x9F}, // �� + {0xB7DF, 0x6124}, //{0xE6, 0x84, 0xA4}, // �� + {0xC0A2, 0x6127}, //{0xE6, 0x84, 0xA7}, // " {0xD4B8, 0x613F}, //{0xE6, 0x84, 0xBF}, // Ը - {0xB4C8, 0x6148}, //{0xE6, 0x85, 0x88}, // - {0xBBC5, 0x614C}, //{0xE6, 0x85, 0x8C}, // - {0xC9F7, 0x614E}, //{0xE6, 0x85, 0x8E}, // + {0xB4C8, 0x6148}, //{0xE6, 0x85, 0x88}, // �� + {0xBBC5, 0x614C}, //{0xE6, 0x85, 0x8C}, // �� + {0xC9F7, 0x614E}, //{0xE6, 0x85, 0x8E}, // �� {0xC4BD, 0x6155}, //{0xE6, 0x85, 0x95}, // Ľ - {0xC2FD, 0x6162}, //{0xE6, 0x85, 0xA2}, // - {0xBBDB, 0x6167}, //{0xE6, 0x85, 0xA7}, // - {0xBFAE, 0x6168}, //{0xE6, 0x85, 0xA8}, // + {0xC2FD, 0x6162}, //{0xE6, 0x85, 0xA2}, // �� + {0xBBDB, 0x6167}, //{0xE6, 0x85, 0xA7}, // �� + {0xBFAE, 0x6168}, //{0xE6, 0x85, 0xA8}, // �� {0xCEBF, 0x6170}, //{0xE6, 0x85, 0xB0}, // ο - {0xBFB6, 0x6177}, //{0xE6, 0x85, 0xB7}, // - {0xB1EF, 0x618B}, //{0xE6, 0x86, 0x8B}, // - {0xD4F7, 0x618E}, //{0xE6, 0x86, 0x8E}, // - {0xE3BE, 0x6194}, //{0xE6, 0x86, 0x94}, // - {0xBAA9, 0x61A8}, //{0xE6, 0x86, 0xA8}, // - {0xBAB6, 0x61BE}, //{0xE6, 0x86, 0xBE}, // - {0xB6AE, 0x61C2}, //{0xE6, 0x87, 0x82}, // + {0xBFB6, 0x6177}, //{0xE6, 0x85, 0xB7}, // �� + {0xB1EF, 0x618B}, //{0xE6, 0x86, 0x8B}, // �� + {0xD4F7, 0x618E}, //{0xE6, 0x86, 0x8E}, // �� + {0xE3BE, 0x6194}, //{0xE6, 0x86, 0x94}, // � + {0xBAA9, 0x61A8}, //{0xE6, 0x86, 0xA8}, // �� + {0xBAB6, 0x61BE}, //{0xE6, 0x86, 0xBE}, // �� + {0xB6AE, 0x61C2}, //{0xE6, 0x87, 0x82}, // �� {0xD0B8, 0x61C8}, //{0xE6, 0x87, 0x88}, // и - {0xB0C3, 0x61CA}, //{0xE6, 0x87, 0x8A}, // - {0xC0C1, 0x61D2}, //{0xE6, 0x87, 0x92}, // + {0xB0C3, 0x61CA}, //{0xE6, 0x87, 0x8A}, // �� + {0xC0C1, 0x61D2}, //{0xE6, 0x87, 0x92}, // �� {0xC5B3, 0x61E6}, //{0xE6, 0x87, 0xA6}, // ų - {0xB8EA, 0x6208}, //{0xE6, 0x88, 0x88}, // + {0xB8EA, 0x6208}, //{0xE6, 0x88, 0x88}, // �� {0xCFB7, 0x620F}, //{0xE6, 0x88, 0x8F}, // Ϸ - {0xB3C9, 0x6210}, //{0xE6, 0x88, 0x90}, // - {0xCED2, 0x6211}, //{0xE6, 0x88, 0x91}, // - {0xBDE4, 0x6212}, //{0xE6, 0x88, 0x92}, // - {0xBBF2, 0x6216}, //{0xE6, 0x88, 0x96}, // + {0xB3C9, 0x6210}, //{0xE6, 0x88, 0x90}, // �� + {0xCED2, 0x6211}, //{0xE6, 0x88, 0x91}, // �� + {0xBDE4, 0x6212}, //{0xE6, 0x88, 0x92}, // �� + {0xBBF2, 0x6216}, //{0xE6, 0x88, 0x96}, // �� {0xD5BD, 0x6218}, //{0xE6, 0x88, 0x98}, // ս - {0xC6DD, 0x621A}, //{0xE6, 0x88, 0x9A}, // - {0xBDD8, 0x622A}, //{0xE6, 0x88, 0xAA}, // - {0xB4C1, 0x6233}, //{0xE6, 0x88, 0xB3}, // - {0xB4F7, 0x6234}, //{0xE6, 0x88, 0xB4}, // - {0xBBA7, 0x6237}, //{0xE6, 0x88, 0xB7}, // - {0xB7BF, 0x623F}, //{0xE6, 0x88, 0xBF}, // - {0xCBF9, 0x6240}, //{0xE6, 0x89, 0x80}, // - {0xB1E2, 0x6241}, //{0xE6, 0x89, 0x81}, // - {0xC9C8, 0x6247}, //{0xE6, 0x89, 0x87}, // - {0xCAD6, 0x624B}, //{0xE6, 0x89, 0x8B}, // - {0xB2C5, 0x624D}, //{0xE6, 0x89, 0x8D}, // - {0xD4FA, 0x624E}, //{0xE6, 0x89, 0x8E}, // - {0xC6CB, 0x6251}, //{0xE6, 0x89, 0x91}, // - {0xB0C7, 0x6252}, //{0xE6, 0x89, 0x92}, // - {0xB4F2, 0x6253}, //{0xE6, 0x89, 0x93}, // - {0xC8D3, 0x6254}, //{0xE6, 0x89, 0x94}, // - {0xCDD0, 0x6258}, //{0xE6, 0x89, 0x98}, // - {0xBFB8, 0x625B}, //{0xE6, 0x89, 0x9B}, // - {0xBFDB, 0x6263}, //{0xE6, 0x89, 0xA3}, // + {0xC6DD, 0x621A}, //{0xE6, 0x88, 0x9A}, // �� + {0xBDD8, 0x622A}, //{0xE6, 0x88, 0xAA}, // �� + {0xB4C1, 0x6233}, //{0xE6, 0x88, 0xB3}, // �� + {0xB4F7, 0x6234}, //{0xE6, 0x88, 0xB4}, // �� + {0xBBA7, 0x6237}, //{0xE6, 0x88, 0xB7}, // �� + {0xB7BF, 0x623F}, //{0xE6, 0x88, 0xBF}, // �� + {0xCBF9, 0x6240}, //{0xE6, 0x89, 0x80}, // �� + {0xB1E2, 0x6241}, //{0xE6, 0x89, 0x81}, // �� + {0xC9C8, 0x6247}, //{0xE6, 0x89, 0x87}, // �� + {0xCAD6, 0x624B}, //{0xE6, 0x89, 0x8B}, // �� + {0xB2C5, 0x624D}, //{0xE6, 0x89, 0x8D}, // �� + {0xD4FA, 0x624E}, //{0xE6, 0x89, 0x8E}, // �� + {0xC6CB, 0x6251}, //{0xE6, 0x89, 0x91}, // �� + {0xB0C7, 0x6252}, //{0xE6, 0x89, 0x92}, // �� + {0xB4F2, 0x6253}, //{0xE6, 0x89, 0x93}, // �� + {0xC8D3, 0x6254}, //{0xE6, 0x89, 0x94}, // �� + {0xCDD0, 0x6258}, //{0xE6, 0x89, 0x98}, // �� + {0xBFB8, 0x625B}, //{0xE6, 0x89, 0x9B}, // �� + {0xBFDB, 0x6263}, //{0xE6, 0x89, 0xA3}, // �� {0xD6B4, 0x6267}, //{0xE6, 0x89, 0xA7}, // ִ - {0xC0A9, 0x6269}, //{0xE6, 0x89, 0xA9}, // + {0xC0A9, 0x6269}, //{0xE6, 0x89, 0xA9}, // ) {0xC9A8, 0x626B}, //{0xE6, 0x89, 0xAB}, // ɨ - {0xD1EF, 0x626C}, //{0xE6, 0x89, 0xAC}, // + {0xD1EF, 0x626C}, //{0xE6, 0x89, 0xAC}, // �� {0xC5A4, 0x626D}, //{0xE6, 0x89, 0xAD}, // Ť - {0xB0E7, 0x626E}, //{0xE6, 0x89, 0xAE}, // - {0xB3B6, 0x626F}, //{0xE6, 0x89, 0xAF}, // - {0xC8C5, 0x6270}, //{0xE6, 0x89, 0xB0}, // - {0xB0E2, 0x6273}, //{0xE6, 0x89, 0xB3}, // - {0xB7F6, 0x6276}, //{0xE6, 0x89, 0xB6}, // - {0xC5FA, 0x6279}, //{0xE6, 0x89, 0xB9}, // - {0xB6F3, 0x627C}, //{0xE6, 0x89, 0xBC}, // - {0xD5D2, 0x627E}, //{0xE6, 0x89, 0xBE}, // - {0xB3D0, 0x627F}, //{0xE6, 0x89, 0xBF}, // - {0xBCBC, 0x6280}, //{0xE6, 0x8A, 0x80}, // - {0xB3AD, 0x6284}, //{0xE6, 0x8A, 0x84}, // - {0xB0D1, 0x628A}, //{0xE6, 0x8A, 0x8A}, // - {0xD2D6, 0x6291}, //{0xE6, 0x8A, 0x91}, // - {0xCAE3, 0x6292}, //{0xE6, 0x8A, 0x92}, // + {0xB0E7, 0x626E}, //{0xE6, 0x89, 0xAE}, // �� + {0xB3B6, 0x626F}, //{0xE6, 0x89, 0xAF}, // �� + {0xC8C5, 0x6270}, //{0xE6, 0x89, 0xB0}, // �� + {0xB0E2, 0x6273}, //{0xE6, 0x89, 0xB3}, // �� + {0xB7F6, 0x6276}, //{0xE6, 0x89, 0xB6}, // �� + {0xC5FA, 0x6279}, //{0xE6, 0x89, 0xB9}, // �� + {0xB6F3, 0x627C}, //{0xE6, 0x89, 0xBC}, // �� + {0xD5D2, 0x627E}, //{0xE6, 0x89, 0xBE}, // �� + {0xB3D0, 0x627F}, //{0xE6, 0x89, 0xBF}, // �� + {0xBCBC, 0x6280}, //{0xE6, 0x8A, 0x80}, // �� + {0xB3AD, 0x6284}, //{0xE6, 0x8A, 0x84}, // �� + {0xB0D1, 0x628A}, //{0xE6, 0x8A, 0x8A}, // �� + {0xD2D6, 0x6291}, //{0xE6, 0x8A, 0x91}, // �� + {0xCAE3, 0x6292}, //{0xE6, 0x8A, 0x92}, // �� {0xD7A5, 0x6293}, //{0xE6, 0x8A, 0x93}, // ץ {0xCDB6, 0x6295}, //{0xE6, 0x8A, 0x95}, // Ͷ - {0xB6B6, 0x6296}, //{0xE6, 0x8A, 0x96}, // - {0xBFB9, 0x6297}, //{0xE6, 0x8A, 0x97}, // - {0xD5DB, 0x6298}, //{0xE6, 0x8A, 0x98}, // - {0xB8A7, 0x629A}, //{0xE6, 0x8A, 0x9A}, // - {0xC5D7, 0x629B}, //{0xE6, 0x8A, 0x9B}, // - {0xBFD9, 0x62A0}, //{0xE6, 0x8A, 0xA0}, // - {0xC2D5, 0x62A1}, //{0xE6, 0x8A, 0xA1}, // - {0xC7C0, 0x62A2}, //{0xE6, 0x8A, 0xA2}, // - {0xBBA4, 0x62A4}, //{0xE6, 0x8A, 0xA4}, // - {0xB1A8, 0x62A5}, //{0xE6, 0x8A, 0xA5}, // - {0xC5FB, 0x62AB}, //{0xE6, 0x8A, 0xAB}, // + {0xB6B6, 0x6296}, //{0xE6, 0x8A, 0x96}, // �� + {0xBFB9, 0x6297}, //{0xE6, 0x8A, 0x97}, // �� + {0xD5DB, 0x6298}, //{0xE6, 0x8A, 0x98}, // �� + {0xB8A7, 0x629A}, //{0xE6, 0x8A, 0x9A}, // �� + {0xC5D7, 0x629B}, //{0xE6, 0x8A, 0x9B}, // �� + {0xBFD9, 0x62A0}, //{0xE6, 0x8A, 0xA0}, // �� + {0xC2D5, 0x62A1}, //{0xE6, 0x8A, 0xA1}, // �� + {0xC7C0, 0x62A2}, //{0xE6, 0x8A, 0xA2}, // �� + {0xBBA4, 0x62A4}, //{0xE6, 0x8A, 0xA4}, // �� + {0xB1A8, 0x62A5}, //{0xE6, 0x8A, 0xA5}, // �� + {0xC5FB, 0x62AB}, //{0xE6, 0x8A, 0xAB}, // �� {0xCCA7, 0x62AC}, //{0xE6, 0x8A, 0xAC}, // ̧ - {0xB1A7, 0x62B1}, //{0xE6, 0x8A, 0xB1}, // - {0xB5D6, 0x62B5}, //{0xE6, 0x8A, 0xB5}, // + {0xB1A7, 0x62B1}, //{0xE6, 0x8A, 0xB1}, // �� + {0xB5D6, 0x62B5}, //{0xE6, 0x8A, 0xB5}, // �� {0xC4A8, 0x62B9}, //{0xE6, 0x8A, 0xB9}, // Ĩ {0xD1BA, 0x62BC}, //{0xE6, 0x8A, 0xBC}, // Ѻ - {0xB3E9, 0x62BD}, //{0xE6, 0x8A, 0xBD}, // - {0xB7F7, 0x62C2}, //{0xE6, 0x8B, 0x82}, // - {0xD6F4, 0x62C4}, //{0xE6, 0x8B, 0x84}, // - {0xB5A3, 0x62C5}, //{0xE6, 0x8B, 0x85}, // - {0xB2F0, 0x62C6}, //{0xE6, 0x8B, 0x86}, // + {0xB3E9, 0x62BD}, //{0xE6, 0x8A, 0xBD}, // �� + {0xB7F7, 0x62C2}, //{0xE6, 0x8B, 0x82}, // �� + {0xD6F4, 0x62C4}, //{0xE6, 0x8B, 0x84}, // �� + {0xB5A3, 0x62C5}, //{0xE6, 0x8B, 0x85}, // �� + {0xB2F0, 0x62C6}, //{0xE6, 0x8B, 0x86}, // �� {0xC4B4, 0x62C7}, //{0xE6, 0x8B, 0x87}, // Ĵ - {0xC0AD, 0x62C9}, //{0xE6, 0x8B, 0x89}, // - {0xB0E8, 0x62CC}, //{0xE6, 0x8B, 0x8C}, // - {0xC5C4, 0x62CD}, //{0xE6, 0x8B, 0x8D}, // - {0xB9D5, 0x62D0}, //{0xE6, 0x8B, 0x90}, // - {0xBEDC, 0x62D2}, //{0xE6, 0x8B, 0x92}, // - {0xCDD8, 0x62D3}, //{0xE6, 0x8B, 0x93}, // - {0xB0CE, 0x62D4}, //{0xE6, 0x8B, 0x94}, // - {0xCDCF, 0x62D6}, //{0xE6, 0x8B, 0x96}, // - {0xDED6, 0x62D7}, //{0xE6, 0x8B, 0x97}, // - {0xBED0, 0x62D8}, //{0xE6, 0x8B, 0x98}, // + {0xC0AD, 0x62C9}, //{0xE6, 0x8B, 0x89}, // - + {0xB0E8, 0x62CC}, //{0xE6, 0x8B, 0x8C}, // �� + {0xC5C4, 0x62CD}, //{0xE6, 0x8B, 0x8D}, // �� + {0xB9D5, 0x62D0}, //{0xE6, 0x8B, 0x90}, // �� + {0xBEDC, 0x62D2}, //{0xE6, 0x8B, 0x92}, // �� + {0xCDD8, 0x62D3}, //{0xE6, 0x8B, 0x93}, // �� + {0xB0CE, 0x62D4}, //{0xE6, 0x8B, 0x94}, // �� + {0xCDCF, 0x62D6}, //{0xE6, 0x8B, 0x96}, // �� + {0xDED6, 0x62D7}, //{0xE6, 0x8B, 0x97}, // �� + {0xBED0, 0x62D8}, //{0xE6, 0x8B, 0x98}, // �� {0xD7BE, 0x62D9}, //{0xE6, 0x8B, 0x99}, // ׾ - {0xD5D0, 0x62DB}, //{0xE6, 0x8B, 0x9B}, // - {0xB0DD, 0x62DC}, //{0xE6, 0x8B, 0x9C}, // - {0xC4E2, 0x62DF}, //{0xE6, 0x8B, 0x9F}, // + {0xD5D0, 0x62DB}, //{0xE6, 0x8B, 0x9B}, // �� + {0xB0DD, 0x62DC}, //{0xE6, 0x8B, 0x9C}, // �� + {0xC4E2, 0x62DF}, //{0xE6, 0x8B, 0x9F}, // �� {0xC2A3, 0x62E2}, //{0xE6, 0x8B, 0xA2}, // £ - {0xBCF0, 0x62E3}, //{0xE6, 0x8B, 0xA3}, // + {0xBCF0, 0x62E3}, //{0xE6, 0x8B, 0xA3}, // �� {0xD3B5, 0x62E5}, //{0xE6, 0x8B, 0xA5}, // ӵ - {0xC0B9, 0x62E6}, //{0xE6, 0x8B, 0xA6}, // + {0xC0B9, 0x62E6}, //{0xE6, 0x8B, 0xA6}, // 9 {0xC5A1, 0x62E7}, //{0xE6, 0x8B, 0xA7}, // š - {0xB2A6, 0x62E8}, //{0xE6, 0x8B, 0xA8}, // - {0xD4F1, 0x62E9}, //{0xE6, 0x8B, 0xA9}, // - {0xC0A8, 0x62EC}, //{0xE6, 0x8B, 0xAC}, // - {0xCAC3, 0x62ED}, //{0xE6, 0x8B, 0xAD}, // - {0xD5FC, 0x62EF}, //{0xE6, 0x8B, 0xAF}, // - {0xB9B0, 0x62F1}, //{0xE6, 0x8B, 0xB1}, // + {0xB2A6, 0x62E8}, //{0xE6, 0x8B, 0xA8}, // �� + {0xD4F1, 0x62E9}, //{0xE6, 0x8B, 0xA9}, // �� + {0xC0A8, 0x62EC}, //{0xE6, 0x8B, 0xAC}, // ( + {0xCAC3, 0x62ED}, //{0xE6, 0x8B, 0xAD}, // �� + {0xD5FC, 0x62EF}, //{0xE6, 0x8B, 0xAF}, // �� + {0xB9B0, 0x62F1}, //{0xE6, 0x8B, 0xB1}, // �� {0xC8AD, 0x62F3}, //{0xE6, 0x8B, 0xB3}, // ȭ {0xCBA9, 0x62F4}, //{0xE6, 0x8B, 0xB4}, // ˩ - {0xBFBD, 0x62F7}, //{0xE6, 0x8B, 0xB7}, // + {0xBFBD, 0x62F7}, //{0xE6, 0x8B, 0xB7}, // �� {0xC6B4, 0x62FC}, //{0xE6, 0x8B, 0xBC}, // ƴ {0xCAB0, 0x62FE}, //{0xE6, 0x8B, 0xBE}, // ʰ - {0xC4C3, 0x62FF}, //{0xE6, 0x8B, 0xBF}, // - {0xB3D6, 0x6301}, //{0xE6, 0x8C, 0x81}, // - {0xB9D2, 0x6302}, //{0xE6, 0x8C, 0x82}, // + {0xC4C3, 0x62FF}, //{0xE6, 0x8B, 0xBF}, // �� + {0xB3D6, 0x6301}, //{0xE6, 0x8C, 0x81}, // �� + {0xB9D2, 0x6302}, //{0xE6, 0x8C, 0x82}, // �� {0xD6B8, 0x6307}, //{0xE6, 0x8C, 0x87}, // ָ - {0xB0B4, 0x6309}, //{0xE6, 0x8C, 0x89}, // - {0xBFE6, 0x630E}, //{0xE6, 0x8C, 0x8E}, // - {0xCCF4, 0x6311}, //{0xE6, 0x8C, 0x91}, // - {0xCDDA, 0x6316}, //{0xE6, 0x8C, 0x96}, // + {0xB0B4, 0x6309}, //{0xE6, 0x8C, 0x89}, // �� + {0xBFE6, 0x630E}, //{0xE6, 0x8C, 0x8E}, // �� + {0xCCF4, 0x6311}, //{0xE6, 0x8C, 0x91}, // �� + {0xCDDA, 0x6316}, //{0xE6, 0x8C, 0x96}, // �� {0xD6BF, 0x631A}, //{0xE6, 0x8C, 0x9A}, // ֿ {0xD0AE, 0x631F}, //{0xE6, 0x8C, 0x9F}, // Ю - {0xC4D3, 0x6320}, //{0xE6, 0x8C, 0xA0}, // - {0xB5B2, 0x6321}, //{0xE6, 0x8C, 0xA1}, // - {0xD5F5, 0x6323}, //{0xE6, 0x8C, 0xA3}, // - {0xBCB7, 0x6324}, //{0xE6, 0x8C, 0xA4}, // - {0xBBD3, 0x6325}, //{0xE6, 0x8C, 0xA5}, // - {0xB0A4, 0x6328}, //{0xE6, 0x8C, 0xA8}, // + {0xC4D3, 0x6320}, //{0xE6, 0x8C, 0xA0}, // �� + {0xB5B2, 0x6321}, //{0xE6, 0x8C, 0xA1}, // �� + {0xD5F5, 0x6323}, //{0xE6, 0x8C, 0xA3}, // �� + {0xBCB7, 0x6324}, //{0xE6, 0x8C, 0xA4}, // �� + {0xBBD3, 0x6325}, //{0xE6, 0x8C, 0xA5}, // �� + {0xB0A4, 0x6328}, //{0xE6, 0x8C, 0xA8}, // �� {0xC5B2, 0x632A}, //{0xE6, 0x8C, 0xAA}, // Ų - {0xB4EC, 0x632B}, //{0xE6, 0x8C, 0xAB}, // - {0xD5F1, 0x632F}, //{0xE6, 0x8C, 0xAF}, // + {0xB4EC, 0x632B}, //{0xE6, 0x8C, 0xAB}, // �� + {0xD5F1, 0x632F}, //{0xE6, 0x8C, 0xAF}, // �� {0xCDA6, 0x633A}, //{0xE6, 0x8C, 0xBA}, // ͦ - {0xCDEC, 0x633D}, //{0xE6, 0x8C, 0xBD}, // - {0xCEE6, 0x6342}, //{0xE6, 0x8D, 0x82}, // + {0xCDEC, 0x633D}, //{0xE6, 0x8C, 0xBD}, // �� + {0xCEE6, 0x6342}, //{0xE6, 0x8D, 0x82}, // �� {0xCDB1, 0x6345}, //{0xE6, 0x8D, 0x85}, // ͱ - {0xC0A6, 0x6346}, //{0xE6, 0x8D, 0x86}, // + {0xC0A6, 0x6346}, //{0xE6, 0x8D, 0x86}, // & {0xD7BD, 0x6349}, //{0xE6, 0x8D, 0x89}, // ׽ - {0xB0C6, 0x634C}, //{0xE6, 0x8D, 0x8C}, // - {0xBAB4, 0x634D}, //{0xE6, 0x8D, 0x8D}, // - {0xC9D3, 0x634E}, //{0xE6, 0x8D, 0x8E}, // - {0xC4F3, 0x634F}, //{0xE6, 0x8D, 0x8F}, // - {0xBEE8, 0x6350}, //{0xE6, 0x8D, 0x90}, // - {0xB2B6, 0x6355}, //{0xE6, 0x8D, 0x95}, // - {0xC0CC, 0x635E}, //{0xE6, 0x8D, 0x9E}, // - {0xCBF0, 0x635F}, //{0xE6, 0x8D, 0x9F}, // - {0xBCF1, 0x6361}, //{0xE6, 0x8D, 0xA1}, // - {0xBBBB, 0x6362}, //{0xE6, 0x8D, 0xA2}, // - {0xB5B7, 0x6363}, //{0xE6, 0x8D, 0xA3}, // - {0xC5F5, 0x6367}, //{0xE6, 0x8D, 0xA7}, // - {0xBEDD, 0x636E}, //{0xE6, 0x8D, 0xAE}, // - {0xB4B7, 0x6376}, //{0xE6, 0x8D, 0xB6}, // - {0xBDDD, 0x6377}, //{0xE6, 0x8D, 0xB7}, // - {0xDEE0, 0x637A}, //{0xE6, 0x8D, 0xBA}, // - {0xC4ED, 0x637B}, //{0xE6, 0x8D, 0xBB}, // - {0xCFC6, 0x6380}, //{0xE6, 0x8E, 0x80}, // - {0xB5E0, 0x6382}, //{0xE6, 0x8E, 0x82}, // - {0xCADA, 0x6388}, //{0xE6, 0x8E, 0x88}, // - {0xB5F4, 0x6389}, //{0xE6, 0x8E, 0x89}, // - {0xD5C6, 0x638C}, //{0xE6, 0x8E, 0x8C}, // - {0xCCCD, 0x638F}, //{0xE6, 0x8E, 0x8F}, // - {0xC6FE, 0x6390}, //{0xE6, 0x8E, 0x90}, // - {0xC5C5, 0x6392}, //{0xE6, 0x8E, 0x92}, // + {0xB0C6, 0x634C}, //{0xE6, 0x8D, 0x8C}, // �� + {0xBAB4, 0x634D}, //{0xE6, 0x8D, 0x8D}, // �� + {0xC9D3, 0x634E}, //{0xE6, 0x8D, 0x8E}, // �� + {0xC4F3, 0x634F}, //{0xE6, 0x8D, 0x8F}, // �� + {0xBEE8, 0x6350}, //{0xE6, 0x8D, 0x90}, // �� + {0xB2B6, 0x6355}, //{0xE6, 0x8D, 0x95}, // �� + {0xC0CC, 0x635E}, //{0xE6, 0x8D, 0x9E}, // �� + {0xCBF0, 0x635F}, //{0xE6, 0x8D, 0x9F}, // �� + {0xBCF1, 0x6361}, //{0xE6, 0x8D, 0xA1}, // �� + {0xBBBB, 0x6362}, //{0xE6, 0x8D, 0xA2}, // �� + {0xB5B7, 0x6363}, //{0xE6, 0x8D, 0xA3}, // �� + {0xC5F5, 0x6367}, //{0xE6, 0x8D, 0xA7}, // �� + {0xBEDD, 0x636E}, //{0xE6, 0x8D, 0xAE}, // �� + {0xB4B7, 0x6376}, //{0xE6, 0x8D, 0xB6}, // �� + {0xBDDD, 0x6377}, //{0xE6, 0x8D, 0xB7}, // �� + {0xDEE0, 0x637A}, //{0xE6, 0x8D, 0xBA}, // �� + {0xC4ED, 0x637B}, //{0xE6, 0x8D, 0xBB}, // �� + {0xCFC6, 0x6380}, //{0xE6, 0x8E, 0x80}, // �� + {0xB5E0, 0x6382}, //{0xE6, 0x8E, 0x82}, // �� + {0xCADA, 0x6388}, //{0xE6, 0x8E, 0x88}, // �� + {0xB5F4, 0x6389}, //{0xE6, 0x8E, 0x89}, // �� + {0xD5C6, 0x638C}, //{0xE6, 0x8E, 0x8C}, // �� + {0xCCCD, 0x638F}, //{0xE6, 0x8E, 0x8F}, // �� + {0xC6FE, 0x6390}, //{0xE6, 0x8E, 0x90}, // �� + {0xC5C5, 0x6392}, //{0xE6, 0x8E, 0x92}, // �� {0xD2B4, 0x6396}, //{0xE6, 0x8E, 0x96}, // Ҵ - {0xBEF2, 0x6398}, //{0xE6, 0x8E, 0x98}, // - {0xC2D3, 0x63A0}, //{0xE6, 0x8E, 0xA0}, // + {0xBEF2, 0x6398}, //{0xE6, 0x8E, 0x98}, // �� + {0xC2D3, 0x63A0}, //{0xE6, 0x8E, 0xA0}, // �� {0xCCBD, 0x63A2}, //{0xE6, 0x8E, 0xA2}, // ̽ - {0xBDD3, 0x63A5}, //{0xE6, 0x8E, 0xA5}, // - {0xBFD8, 0x63A7}, //{0xE6, 0x8E, 0xA7}, // - {0xCDC6, 0x63A8}, //{0xE6, 0x8E, 0xA8}, // - {0xD1DA, 0x63A9}, //{0xE6, 0x8E, 0xA9}, // - {0xB4EB, 0x63AA}, //{0xE6, 0x8E, 0xAA}, // - {0xEAFE, 0x63B0}, //{0xE6, 0x8E, 0xB0}, // - {0xD6C0, 0x63B7}, //{0xE6, 0x8E, 0xB7}, // - {0xB5A7, 0x63B8}, //{0xE6, 0x8E, 0xB8}, // - {0xB2F4, 0x63BA}, //{0xE6, 0x8E, 0xBA}, // - {0xC8E0, 0x63C9}, //{0xE6, 0x8F, 0x89}, // - {0xD7E1, 0x63CD}, //{0xE6, 0x8F, 0x8D}, // - {0xC3E8, 0x63CF}, //{0xE6, 0x8F, 0x8F}, // - {0xCCE1, 0x63D0}, //{0xE6, 0x8F, 0x90}, // - {0xB2E5, 0x63D2}, //{0xE6, 0x8F, 0x92}, // + {0xBDD3, 0x63A5}, //{0xE6, 0x8E, 0xA5}, // �� + {0xBFD8, 0x63A7}, //{0xE6, 0x8E, 0xA7}, // �� + {0xCDC6, 0x63A8}, //{0xE6, 0x8E, 0xA8}, // �� + {0xD1DA, 0x63A9}, //{0xE6, 0x8E, 0xA9}, // �� + {0xB4EB, 0x63AA}, //{0xE6, 0x8E, 0xAA}, // �� + {0xEAFE, 0x63B0}, //{0xE6, 0x8E, 0xB0}, // �� + {0xD6C0, 0x63B7}, //{0xE6, 0x8E, 0xB7}, // �� + {0xB5A7, 0x63B8}, //{0xE6, 0x8E, 0xB8}, // �� + {0xB2F4, 0x63BA}, //{0xE6, 0x8E, 0xBA}, // �� + {0xC8E0, 0x63C9}, //{0xE6, 0x8F, 0x89}, // �� + {0xD7E1, 0x63CD}, //{0xE6, 0x8F, 0x8D}, // �� + {0xC3E8, 0x63CF}, //{0xE6, 0x8F, 0x8F}, // �� + {0xCCE1, 0x63D0}, //{0xE6, 0x8F, 0x90}, // �� + {0xB2E5, 0x63D2}, //{0xE6, 0x8F, 0x92}, // �� {0xD2BE, 0x63D6}, //{0xE6, 0x8F, 0x96}, // Ҿ - {0xCED5, 0x63E1}, //{0xE6, 0x8F, 0xA1}, // - {0xB4A7, 0x63E3}, //{0xE6, 0x8F, 0xA3}, // - {0xBFAB, 0x63E9}, //{0xE6, 0x8F, 0xA9}, // - {0xBEBE, 0x63EA}, //{0xE6, 0x8F, 0xAA}, // - {0xBDD2, 0x63ED}, //{0xE6, 0x8F, 0xAD}, // + {0xCED5, 0x63E1}, //{0xE6, 0x8F, 0xA1}, // �� + {0xB4A7, 0x63E3}, //{0xE6, 0x8F, 0xA3}, // �� + {0xBFAB, 0x63E9}, //{0xE6, 0x8F, 0xA9}, // �� + {0xBEBE, 0x63EA}, //{0xE6, 0x8F, 0xAA}, // �� + {0xBDD2, 0x63ED}, //{0xE6, 0x8F, 0xAD}, // �� {0xD4AE, 0x63F4}, //{0xE6, 0x8F, 0xB4}, // Ԯ - {0xC0BF, 0x63FD}, //{0xE6, 0x8F, 0xBD}, // - {0xB2F3, 0x6400}, //{0xE6, 0x90, 0x80}, // - {0xB8E9, 0x6401}, //{0xE6, 0x90, 0x81}, // + {0xC0BF, 0x63FD}, //{0xE6, 0x8F, 0xBD}, // ? + {0xB2F3, 0x6400}, //{0xE6, 0x90, 0x80}, // �� + {0xB8E9, 0x6401}, //{0xE6, 0x90, 0x81}, // �� {0xC2A7, 0x6402}, //{0xE6, 0x90, 0x82}, // § - {0xBDC1, 0x6405}, //{0xE6, 0x90, 0x85}, // - {0xB2AB, 0x640F}, //{0xE6, 0x90, 0x8F}, // - {0xB4EA, 0x6413}, //{0xE6, 0x90, 0x93}, // + {0xBDC1, 0x6405}, //{0xE6, 0x90, 0x85}, // �� + {0xB2AB, 0x640F}, //{0xE6, 0x90, 0x8F}, // �� + {0xB4EA, 0x6413}, //{0xE6, 0x90, 0x93}, // �� {0xC9A6, 0x6414}, //{0xE6, 0x90, 0x94}, // ɦ - {0xCBD1, 0x641C}, //{0xE6, 0x90, 0x9C}, // - {0xB8E3, 0x641E}, //{0xE6, 0x90, 0x9E}, // - {0xCCC2, 0x642A}, //{0xE6, 0x90, 0xAA}, // - {0xB0E1, 0x642C}, //{0xE6, 0x90, 0xAC}, // - {0xB4EE, 0x642D}, //{0xE6, 0x90, 0xAD}, // + {0xCBD1, 0x641C}, //{0xE6, 0x90, 0x9C}, // �� + {0xB8E3, 0x641E}, //{0xE6, 0x90, 0x9E}, // �� + {0xCCC2, 0x642A}, //{0xE6, 0x90, 0xAA}, // �� + {0xB0E1, 0x642C}, //{0xE6, 0x90, 0xAC}, // �� + {0xB4EE, 0x642D}, //{0xE6, 0x90, 0xAD}, // �� {0xD0AF, 0x643A}, //{0xE6, 0x90, 0xBA}, // Я - {0xC9E3, 0x6444}, //{0xE6, 0x91, 0x84}, // - {0xB0DA, 0x6446}, //{0xE6, 0x91, 0x86}, // + {0xC9E3, 0x6444}, //{0xE6, 0x91, 0x84}, // �� + {0xB0DA, 0x6446}, //{0xE6, 0x91, 0x86}, // �� {0xD2A1, 0x6447}, //{0xE6, 0x91, 0x87}, // ҡ {0xCCAF, 0x644A}, //{0xE6, 0x91, 0x8A}, // ̯ {0xCBA4, 0x6454}, //{0xE6, 0x91, 0x94}, // ˤ {0xD5AA, 0x6458}, //{0xE6, 0x91, 0x98}, // ժ - {0xB4DD, 0x6467}, //{0xE6, 0x91, 0xA7}, // + {0xB4DD, 0x6467}, //{0xE6, 0x91, 0xA7}, // �� {0xC4A6, 0x6469}, //{0xE6, 0x91, 0xA9}, // Ħ - {0xC3FE, 0x6478}, //{0xE6, 0x91, 0xB8}, // + {0xC3FE, 0x6478}, //{0xE6, 0x91, 0xB8}, // �� {0xC4A1, 0x6479}, //{0xE6, 0x91, 0xB9}, // ġ {0xC6B2, 0x6487}, //{0xE6, 0x92, 0x87}, // Ʋ - {0xB3C5, 0x6491}, //{0xE6, 0x92, 0x91}, // - {0xC8F6, 0x6492}, //{0xE6, 0x92, 0x92}, // + {0xB3C5, 0x6491}, //{0xE6, 0x92, 0x91}, // �� + {0xC8F6, 0x6492}, //{0xE6, 0x92, 0x92}, // �� {0xCBBA, 0x6495}, //{0xE6, 0x92, 0x95}, // ˺ {0xD7B2, 0x649E}, //{0xE6, 0x92, 0x9E}, // ײ - {0xB3B7, 0x64A4}, //{0xE6, 0x92, 0xA4}, // - {0xC1C3, 0x64A9}, //{0xE6, 0x92, 0xA9}, // - {0xC7CB, 0x64AC}, //{0xE6, 0x92, 0xAC}, // - {0xB2A5, 0x64AD}, //{0xE6, 0x92, 0xAD}, // - {0xB4E9, 0x64AE}, //{0xE6, 0x92, 0xAE}, // + {0xB3B7, 0x64A4}, //{0xE6, 0x92, 0xA4}, // �� + {0xC1C3, 0x64A9}, //{0xE6, 0x92, 0xA9}, // �� + {0xC7CB, 0x64AC}, //{0xE6, 0x92, 0xAC}, // �� + {0xB2A5, 0x64AD}, //{0xE6, 0x92, 0xAD}, // �� + {0xB4E9, 0x64AE}, //{0xE6, 0x92, 0xAE}, // �� {0xD7AB, 0x64B0}, //{0xE6, 0x92, 0xB0}, // ׫ - {0xC4EC, 0x64B5}, //{0xE6, 0x92, 0xB5}, // - {0xBAB3, 0x64BC}, //{0xE6, 0x92, 0xBC}, // - {0xC0DE, 0x64C2}, //{0xE6, 0x93, 0x82}, // - {0xC9C3, 0x64C5}, //{0xE6, 0x93, 0x85}, // - {0xB2D9, 0x64CD}, //{0xE6, 0x93, 0x8D}, // - {0xC7E6, 0x64CE}, //{0xE6, 0x93, 0x8E}, // - {0xC7DC, 0x64D2}, //{0xE6, 0x93, 0x92}, // - {0xB2C1, 0x64E6}, //{0xE6, 0x93, 0xA6}, // - {0xC5CA, 0x6500}, //{0xE6, 0x94, 0x80}, // - {0xD4DC, 0x6512}, //{0xE6, 0x94, 0x92}, // - {0xC8C1, 0x6518}, //{0xE6, 0x94, 0x98}, // + {0xC4EC, 0x64B5}, //{0xE6, 0x92, 0xB5}, // �� + {0xBAB3, 0x64BC}, //{0xE6, 0x92, 0xBC}, // �� + {0xC0DE, 0x64C2}, //{0xE6, 0x93, 0x82}, // �� + {0xC9C3, 0x64C5}, //{0xE6, 0x93, 0x85}, // �� + {0xB2D9, 0x64CD}, //{0xE6, 0x93, 0x8D}, // �� + {0xC7E6, 0x64CE}, //{0xE6, 0x93, 0x8E}, // �� + {0xC7DC, 0x64D2}, //{0xE6, 0x93, 0x92}, // �� + {0xB2C1, 0x64E6}, //{0xE6, 0x93, 0xA6}, // �� + {0xC5CA, 0x6500}, //{0xE6, 0x94, 0x80}, // �� + {0xD4DC, 0x6512}, //{0xE6, 0x94, 0x92}, // �� + {0xC8C1, 0x6518}, //{0xE6, 0x94, 0x98}, // �� {0xD6A7, 0x652F}, //{0xE6, 0x94, 0xAF}, // ֧ - {0xCAD5, 0x6536}, //{0xE6, 0x94, 0xB6}, // - {0xB8C4, 0x6539}, //{0xE6, 0x94, 0xB9}, // - {0xB9A5, 0x653B}, //{0xE6, 0x94, 0xBB}, // - {0xB7C5, 0x653E}, //{0xE6, 0x94, 0xBE}, // - {0xD5FE, 0x653F}, //{0xE6, 0x94, 0xBF}, // - {0xB9CA, 0x6545}, //{0xE6, 0x95, 0x85}, // + {0xCAD5, 0x6536}, //{0xE6, 0x94, 0xB6}, // �� + {0xB8C4, 0x6539}, //{0xE6, 0x94, 0xB9}, // �� + {0xB9A5, 0x653B}, //{0xE6, 0x94, 0xBB}, // �� + {0xB7C5, 0x653E}, //{0xE6, 0x94, 0xBE}, // �� + {0xD5FE, 0x653F}, //{0xE6, 0x94, 0xBF}, // �� + {0xB9CA, 0x6545}, //{0xE6, 0x95, 0x85}, // �� {0xD0A7, 0x6548}, //{0xE6, 0x95, 0x88}, // Ч - {0xB5D0, 0x654C}, //{0xE6, 0x95, 0x8C}, // - {0xC3F4, 0x654F}, //{0xE6, 0x95, 0x8F}, // - {0xBEC8, 0x6551}, //{0xE6, 0x95, 0x91}, // - {0xBDCC, 0x6559}, //{0xE6, 0x95, 0x99}, // - {0xC1B2, 0x655B}, //{0xE6, 0x95, 0x9B}, // - {0xB3A8, 0x655E}, //{0xE6, 0x95, 0x9E}, // - {0xB8D2, 0x6562}, //{0xE6, 0x95, 0xA2}, // + {0xB5D0, 0x654C}, //{0xE6, 0x95, 0x8C}, // �� + {0xC3F4, 0x654F}, //{0xE6, 0x95, 0x8F}, // �� + {0xBEC8, 0x6551}, //{0xE6, 0x95, 0x91}, // �� + {0xBDCC, 0x6559}, //{0xE6, 0x95, 0x99}, // �� + {0xC1B2, 0x655B}, //{0xE6, 0x95, 0x9B}, // r + {0xB3A8, 0x655E}, //{0xE6, 0x95, 0x9E}, // �� + {0xB8D2, 0x6562}, //{0xE6, 0x95, 0xA2}, // �� {0xC9A2, 0x6563}, //{0xE6, 0x95, 0xA3}, // ɢ - {0xB6D8, 0x6566}, //{0xE6, 0x95, 0xA6}, // - {0xBEB4, 0x656C}, //{0xE6, 0x95, 0xAC}, // - {0xCAFD, 0x6570}, //{0xE6, 0x95, 0xB0}, // - {0xC7C3, 0x6572}, //{0xE6, 0x95, 0xB2}, // - {0xD5FB, 0x6574}, //{0xE6, 0x95, 0xB4}, // - {0xB7F3, 0x6577}, //{0xE6, 0x95, 0xB7}, // - {0xCEC4, 0x6587}, //{0xE6, 0x96, 0x87}, // + {0xB6D8, 0x6566}, //{0xE6, 0x95, 0xA6}, // �� + {0xBEB4, 0x656C}, //{0xE6, 0x95, 0xAC}, // �� + {0xCAFD, 0x6570}, //{0xE6, 0x95, 0xB0}, // �� + {0xC7C3, 0x6572}, //{0xE6, 0x95, 0xB2}, // �� + {0xD5FB, 0x6574}, //{0xE6, 0x95, 0xB4}, // �� + {0xB7F3, 0x6577}, //{0xE6, 0x95, 0xB7}, // �� + {0xCEC4, 0x6587}, //{0xE6, 0x96, 0x87}, // �� {0xD5AB, 0x658B}, //{0xE6, 0x96, 0x8B}, // ի - {0xB0DF, 0x6591}, //{0xE6, 0x96, 0x91}, // - {0xB6B7, 0x6597}, //{0xE6, 0x96, 0x97}, // - {0xC1CF, 0x6599}, //{0xE6, 0x96, 0x99}, // + {0xB0DF, 0x6591}, //{0xE6, 0x96, 0x91}, // �� + {0xB6B7, 0x6597}, //{0xE6, 0x96, 0x97}, // �� + {0xC1CF, 0x6599}, //{0xE6, 0x96, 0x99}, // �� {0xD0B1, 0x659C}, //{0xE6, 0x96, 0x9C}, // б - {0xD5E5, 0x659F}, //{0xE6, 0x96, 0x9F}, // - {0xBDEF, 0x65A4}, //{0xE6, 0x96, 0xA4}, // - {0xB3E2, 0x65A5}, //{0xE6, 0x96, 0xA5}, // - {0xB8AB, 0x65A7}, //{0xE6, 0x96, 0xA7}, // + {0xD5E5, 0x659F}, //{0xE6, 0x96, 0x9F}, // �� + {0xBDEF, 0x65A4}, //{0xE6, 0x96, 0xA4}, // �� + {0xB3E2, 0x65A5}, //{0xE6, 0x96, 0xA5}, // �� + {0xB8AB, 0x65A7}, //{0xE6, 0x96, 0xA7}, // �� {0xD5B6, 0x65A9}, //{0xE6, 0x96, 0xA9}, // ն - {0xB6CF, 0x65AD}, //{0xE6, 0x96, 0xAD}, // + {0xB6CF, 0x65AD}, //{0xE6, 0x96, 0xAD}, // �� {0xCBB9, 0x65AF}, //{0xE6, 0x96, 0xAF}, // ˹ - {0xD0C2, 0x65B0}, //{0xE6, 0x96, 0xB0}, // - {0xB7BD, 0x65B9}, //{0xE6, 0x96, 0xB9}, // + {0xD0C2, 0x65B0}, //{0xE6, 0x96, 0xB0}, // �� + {0xB7BD, 0x65B9}, //{0xE6, 0x96, 0xB9}, // �� {0xCAA9, 0x65BD}, //{0xE6, 0x96, 0xBD}, // ʩ - {0xC5D4, 0x65C1}, //{0xE6, 0x97, 0x81}, // - {0xC2C3, 0x65C5}, //{0xE6, 0x97, 0x85}, // - {0xD0FD, 0x65CB}, //{0xE6, 0x97, 0x8B}, // - {0xD7E5, 0x65CF}, //{0xE6, 0x97, 0x8F}, // - {0xC6EC, 0x65D7}, //{0xE6, 0x97, 0x97}, // - {0xCEDE, 0x65E0}, //{0xE6, 0x97, 0xA0}, // - {0xBCC8, 0x65E2}, //{0xE6, 0x97, 0xA2}, // - {0xC8D5, 0x65E5}, //{0xE6, 0x97, 0xA5}, // - {0xB5A9, 0x65E6}, //{0xE6, 0x97, 0xA6}, // - {0xBEC9, 0x65E7}, //{0xE6, 0x97, 0xA7}, // + {0xC5D4, 0x65C1}, //{0xE6, 0x97, 0x81}, // �� + {0xC2C3, 0x65C5}, //{0xE6, 0x97, 0x85}, // �� + {0xD0FD, 0x65CB}, //{0xE6, 0x97, 0x8B}, // �� + {0xD7E5, 0x65CF}, //{0xE6, 0x97, 0x8F}, // �� + {0xC6EC, 0x65D7}, //{0xE6, 0x97, 0x97}, // �� + {0xCEDE, 0x65E0}, //{0xE6, 0x97, 0xA0}, // �� + {0xBCC8, 0x65E2}, //{0xE6, 0x97, 0xA2}, // �� + {0xC8D5, 0x65E5}, //{0xE6, 0x97, 0xA5}, // �� + {0xB5A9, 0x65E6}, //{0xE6, 0x97, 0xA6}, // �� + {0xBEC9, 0x65E7}, //{0xE6, 0x97, 0xA7}, // �� {0xD6BC, 0x65E8}, //{0xE6, 0x97, 0xA8}, // ּ - {0xD4E7, 0x65E9}, //{0xE6, 0x97, 0xA9}, // + {0xD4E7, 0x65E9}, //{0xE6, 0x97, 0xA9}, // �� {0xD1AE, 0x65EC}, //{0xE6, 0x97, 0xAC}, // Ѯ - {0xD0F1, 0x65ED}, //{0xE6, 0x97, 0xAD}, // - {0xBAB5, 0x65F1}, //{0xE6, 0x97, 0xB1}, // + {0xD0F1, 0x65ED}, //{0xE6, 0x97, 0xAD}, // �� + {0xBAB5, 0x65F1}, //{0xE6, 0x97, 0xB1}, // �� {0xCAB1, 0x65F6}, //{0xE6, 0x97, 0xB6}, // ʱ - {0xBFF5, 0x65F7}, //{0xE6, 0x97, 0xB7}, // - {0xCDFA, 0x65FA}, //{0xE6, 0x97, 0xBA}, // - {0xB0BA, 0x6602}, //{0xE6, 0x98, 0x82}, // - {0xC0A5, 0x6606}, //{0xE6, 0x98, 0x86}, // - {0xB2FD, 0x660C}, //{0xE6, 0x98, 0x8C}, // - {0xC3F7, 0x660E}, //{0xE6, 0x98, 0x8E}, // - {0xBBE8, 0x660F}, //{0xE6, 0x98, 0x8F}, // - {0xD2D7, 0x6613}, //{0xE6, 0x98, 0x93}, // - {0xCEF4, 0x6614}, //{0xE6, 0x98, 0x94}, // - {0xEABC, 0x6619}, //{0xE6, 0x98, 0x99}, // - {0xD0C7, 0x661F}, //{0xE6, 0x98, 0x9F}, // + {0xBFF5, 0x65F7}, //{0xE6, 0x97, 0xB7}, // �� + {0xCDFA, 0x65FA}, //{0xE6, 0x97, 0xBA}, // �� + {0xB0BA, 0x6602}, //{0xE6, 0x98, 0x82}, // �� + {0xC0A5, 0x6606}, //{0xE6, 0x98, 0x86}, // % + {0xB2FD, 0x660C}, //{0xE6, 0x98, 0x8C}, // �� + {0xC3F7, 0x660E}, //{0xE6, 0x98, 0x8E}, // �� + {0xBBE8, 0x660F}, //{0xE6, 0x98, 0x8F}, // �� + {0xD2D7, 0x6613}, //{0xE6, 0x98, 0x93}, // �� + {0xCEF4, 0x6614}, //{0xE6, 0x98, 0x94}, // �� + {0xEABC, 0x6619}, //{0xE6, 0x98, 0x99}, // � + {0xD0C7, 0x661F}, //{0xE6, 0x98, 0x9F}, // �� {0xD3B3, 0x6620}, //{0xE6, 0x98, 0xA0}, // ӳ - {0xB4BA, 0x6625}, //{0xE6, 0x98, 0xA5}, // - {0xC3C1, 0x6627}, //{0xE6, 0x98, 0xA7}, // - {0xD7F2, 0x6628}, //{0xE6, 0x98, 0xA8}, // - {0xD5D1, 0x662D}, //{0xE6, 0x98, 0xAD}, // - {0xCAC7, 0x662F}, //{0xE6, 0x98, 0xAF}, // - {0xEAC7, 0x6635}, //{0xE6, 0x98, 0xB5}, // - {0xD6E7, 0x663C}, //{0xE6, 0x98, 0xBC}, // - {0xCFD4, 0x663E}, //{0xE6, 0x98, 0xBE}, // - {0xBBCE, 0x6643}, //{0xE6, 0x99, 0x83}, // - {0xBDFA, 0x664B}, //{0xE6, 0x99, 0x8B}, // - {0xC9CE, 0x664C}, //{0xE6, 0x99, 0x8C}, // + {0xB4BA, 0x6625}, //{0xE6, 0x98, 0xA5}, // �� + {0xC3C1, 0x6627}, //{0xE6, 0x98, 0xA7}, // �� + {0xD7F2, 0x6628}, //{0xE6, 0x98, 0xA8}, // �� + {0xD5D1, 0x662D}, //{0xE6, 0x98, 0xAD}, // �� + {0xCAC7, 0x662F}, //{0xE6, 0x98, 0xAF}, // �� + {0xEAC7, 0x6635}, //{0xE6, 0x98, 0xB5}, // �� + {0xD6E7, 0x663C}, //{0xE6, 0x98, 0xBC}, // �� + {0xCFD4, 0x663E}, //{0xE6, 0x98, 0xBE}, // �� + {0xBBCE, 0x6643}, //{0xE6, 0x99, 0x83}, // �� + {0xBDFA, 0x664B}, //{0xE6, 0x99, 0x8B}, // �� + {0xC9CE, 0x664C}, //{0xE6, 0x99, 0x8C}, // �� {0xC9B9, 0x6652}, //{0xE6, 0x99, 0x92}, // ɹ - {0xCFFE, 0x6653}, //{0xE6, 0x99, 0x93}, // - {0xD4CE, 0x6655}, //{0xE6, 0x99, 0x95}, // - {0xCDED, 0x665A}, //{0xE6, 0x99, 0x9A}, // - {0xCEEE, 0x6664}, //{0xE6, 0x99, 0xA4}, // - {0xBBDE, 0x6666}, //{0xE6, 0x99, 0xA6}, // - {0xB3BF, 0x6668}, //{0xE6, 0x99, 0xA8}, // - {0xC6D5, 0x666E}, //{0xE6, 0x99, 0xAE}, // - {0xBEB0, 0x666F}, //{0xE6, 0x99, 0xAF}, // - {0xCEFA, 0x6670}, //{0xE6, 0x99, 0xB0}, // - {0xC7E7, 0x6674}, //{0xE6, 0x99, 0xB4}, // - {0xBEA7, 0x6676}, //{0xE6, 0x99, 0xB6}, // - {0xD6C7, 0x667A}, //{0xE6, 0x99, 0xBA}, // - {0xC1C0, 0x667E}, //{0xE6, 0x99, 0xBE}, // - {0xD4DD, 0x6682}, //{0xE6, 0x9A, 0x82}, // + {0xCFFE, 0x6653}, //{0xE6, 0x99, 0x93}, // �� + {0xD4CE, 0x6655}, //{0xE6, 0x99, 0x95}, // �� + {0xCDED, 0x665A}, //{0xE6, 0x99, 0x9A}, // �� + {0xCEEE, 0x6664}, //{0xE6, 0x99, 0xA4}, // �� + {0xBBDE, 0x6666}, //{0xE6, 0x99, 0xA6}, // �� + {0xB3BF, 0x6668}, //{0xE6, 0x99, 0xA8}, // �� + {0xC6D5, 0x666E}, //{0xE6, 0x99, 0xAE}, // �� + {0xBEB0, 0x666F}, //{0xE6, 0x99, 0xAF}, // �� + {0xCEFA, 0x6670}, //{0xE6, 0x99, 0xB0}, // �� + {0xC7E7, 0x6674}, //{0xE6, 0x99, 0xB4}, // �� + {0xBEA7, 0x6676}, //{0xE6, 0x99, 0xB6}, // �� + {0xD6C7, 0x667A}, //{0xE6, 0x99, 0xBA}, // �� + {0xC1C0, 0x667E}, //{0xE6, 0x99, 0xBE}, // �� + {0xD4DD, 0x6682}, //{0xE6, 0x9A, 0x82}, // �� {0xCFBE, 0x6687}, //{0xE6, 0x9A, 0x87}, // Ͼ - {0xCAEE, 0x6691}, //{0xE6, 0x9A, 0x91}, // + {0xCAEE, 0x6691}, //{0xE6, 0x9A, 0x91}, // �� {0xC5AF, 0x6696}, //{0xE6, 0x9A, 0x96}, // ů - {0xB0B5, 0x6697}, //{0xE6, 0x9A, 0x97}, // + {0xB0B5, 0x6697}, //{0xE6, 0x9A, 0x97}, // �� {0xC4BA, 0x66AE}, //{0xE6, 0x9A, 0xAE}, // ĺ - {0xB1A9, 0x66B4}, //{0xE6, 0x9A, 0xB4}, // - {0xCAEF, 0x66D9}, //{0xE6, 0x9B, 0x99}, // - {0xC7FA, 0x66F2}, //{0xE6, 0x9B, 0xB2}, // - {0xB8FC, 0x66F4}, //{0xE6, 0x9B, 0xB4}, // - {0xB2DC, 0x66F9}, //{0xE6, 0x9B, 0xB9}, // - {0xC2FC, 0x66FC}, //{0xE6, 0x9B, 0xBC}, // - {0xD4F8, 0x66FE}, //{0xE6, 0x9B, 0xBE}, // - {0xCCE6, 0x66FF}, //{0xE6, 0x9B, 0xBF}, // - {0xD7EE, 0x6700}, //{0xE6, 0x9C, 0x80}, // - {0xD4C2, 0x6708}, //{0xE6, 0x9C, 0x88}, // - {0xD3D0, 0x6709}, //{0xE6, 0x9C, 0x89}, // - {0xC5F3, 0x670B}, //{0xE6, 0x9C, 0x8B}, // - {0xB7FE, 0x670D}, //{0xE6, 0x9C, 0x8D}, // - {0xC0CA, 0x6717}, //{0xE6, 0x9C, 0x97}, // - {0xCDFB, 0x671B}, //{0xE6, 0x9C, 0x9B}, // - {0xB3AF, 0x671D}, //{0xE6, 0x9C, 0x9D}, // - {0xC6DA, 0x671F}, //{0xE6, 0x9C, 0x9F}, // - {0xEBFC, 0x6726}, //{0xE6, 0x9C, 0xA6}, // + {0xB1A9, 0x66B4}, //{0xE6, 0x9A, 0xB4}, // �� + {0xCAEF, 0x66D9}, //{0xE6, 0x9B, 0x99}, // �� + {0xC7FA, 0x66F2}, //{0xE6, 0x9B, 0xB2}, // �� + {0xB8FC, 0x66F4}, //{0xE6, 0x9B, 0xB4}, // �� + {0xB2DC, 0x66F9}, //{0xE6, 0x9B, 0xB9}, // �� + {0xC2FC, 0x66FC}, //{0xE6, 0x9B, 0xBC}, // �� + {0xD4F8, 0x66FE}, //{0xE6, 0x9B, 0xBE}, // �� + {0xCCE6, 0x66FF}, //{0xE6, 0x9B, 0xBF}, // �� + {0xD7EE, 0x6700}, //{0xE6, 0x9C, 0x80}, // �� + {0xD4C2, 0x6708}, //{0xE6, 0x9C, 0x88}, // �� + {0xD3D0, 0x6709}, //{0xE6, 0x9C, 0x89}, // �� + {0xC5F3, 0x670B}, //{0xE6, 0x9C, 0x8B}, // �� + {0xB7FE, 0x670D}, //{0xE6, 0x9C, 0x8D}, // �� + {0xC0CA, 0x6717}, //{0xE6, 0x9C, 0x97}, // �� + {0xCDFB, 0x671B}, //{0xE6, 0x9C, 0x9B}, // �� + {0xB3AF, 0x671D}, //{0xE6, 0x9C, 0x9D}, // �� + {0xC6DA, 0x671F}, //{0xE6, 0x9C, 0x9F}, // �� + {0xEBFC, 0x6726}, //{0xE6, 0x9C, 0xA6}, // �� {0xC4BE, 0x6728}, //{0xE6, 0x9C, 0xA8}, // ľ {0xCEB4, 0x672A}, //{0xE6, 0x9C, 0xAA}, // δ {0xC4A9, 0x672B}, //{0xE6, 0x9C, 0xAB}, // ĩ - {0xB1BE, 0x672C}, //{0xE6, 0x9C, 0xAC}, // - {0xCAF5, 0x672F}, //{0xE6, 0x9C, 0xAF}, // - {0xD6EC, 0x6731}, //{0xE6, 0x9C, 0xB1}, // - {0xC6D3, 0x6734}, //{0xE6, 0x9C, 0xB4}, // - {0xB6E4, 0x6735}, //{0xE6, 0x9C, 0xB5}, // - {0xBBFA, 0x673A}, //{0xE6, 0x9C, 0xBA}, // - {0xD0E0, 0x673D}, //{0xE6, 0x9C, 0xBD}, // + {0xB1BE, 0x672C}, //{0xE6, 0x9C, 0xAC}, // �� + {0xCAF5, 0x672F}, //{0xE6, 0x9C, 0xAF}, // �� + {0xD6EC, 0x6731}, //{0xE6, 0x9C, 0xB1}, // �� + {0xC6D3, 0x6734}, //{0xE6, 0x9C, 0xB4}, // �� + {0xB6E4, 0x6735}, //{0xE6, 0x9C, 0xB5}, // �� + {0xBBFA, 0x673A}, //{0xE6, 0x9C, 0xBA}, // �� + {0xD0E0, 0x673D}, //{0xE6, 0x9C, 0xBD}, // �� {0xC9B1, 0x6740}, //{0xE6, 0x9D, 0x80}, // ɱ - {0xD4D3, 0x6742}, //{0xE6, 0x9D, 0x82}, // + {0xD4D3, 0x6742}, //{0xE6, 0x9D, 0x82}, // �� {0xC8A8, 0x6743}, //{0xE6, 0x9D, 0x83}, // Ȩ - {0xB8CB, 0x6746}, //{0xE6, 0x9D, 0x86}, // - {0xE8BE, 0x6748}, //{0xE6, 0x9D, 0x88}, // + {0xB8CB, 0x6746}, //{0xE6, 0x9D, 0x86}, // �� + {0xE8BE, 0x6748}, //{0xE6, 0x9D, 0x88}, // � {0xC9BC, 0x6749}, //{0xE6, 0x9D, 0x89}, // ɼ - {0xC0EE, 0x674E}, //{0xE6, 0x9D, 0x8E}, // - {0xD0D3, 0x674F}, //{0xE6, 0x9D, 0x8F}, // - {0xB2C4, 0x6750}, //{0xE6, 0x9D, 0x90}, // - {0xB4E5, 0x6751}, //{0xE6, 0x9D, 0x91}, // - {0xD5C8, 0x6756}, //{0xE6, 0x9D, 0x96}, // - {0xB6C5, 0x675C}, //{0xE6, 0x9D, 0x9C}, // - {0xCAF8, 0x675F}, //{0xE6, 0x9D, 0x9F}, // - {0xB8DC, 0x6760}, //{0xE6, 0x9D, 0xA0}, // - {0xCCF5, 0x6761}, //{0xE6, 0x9D, 0xA1}, // - {0xC0B4, 0x6765}, //{0xE6, 0x9D, 0xA5}, // - {0xD1EE, 0x6768}, //{0xE6, 0x9D, 0xA8}, // - {0xBABC, 0x676D}, //{0xE6, 0x9D, 0xAD}, // - {0xB1AD, 0x676F}, //{0xE6, 0x9D, 0xAF}, // - {0xBDDC, 0x6770}, //{0xE6, 0x9D, 0xB0}, // - {0xCBC9, 0x677E}, //{0xE6, 0x9D, 0xBE}, // - {0xB0E5, 0x677F}, //{0xE6, 0x9D, 0xBF}, // - {0xBCAB, 0x6781}, //{0xE6, 0x9E, 0x81}, // - {0xB9B9, 0x6784}, //{0xE6, 0x9E, 0x84}, // - {0xCDF7, 0x6789}, //{0xE6, 0x9E, 0x89}, // - {0xCEF6, 0x6790}, //{0xE6, 0x9E, 0x90}, // - {0xD5ED, 0x6795}, //{0xE6, 0x9E, 0x95}, // - {0xC1D6, 0x6797}, //{0xE6, 0x9E, 0x97}, // + {0xC0EE, 0x674E}, //{0xE6, 0x9D, 0x8E}, // �� + {0xD0D3, 0x674F}, //{0xE6, 0x9D, 0x8F}, // �� + {0xB2C4, 0x6750}, //{0xE6, 0x9D, 0x90}, // �� + {0xB4E5, 0x6751}, //{0xE6, 0x9D, 0x91}, // �� + {0xD5C8, 0x6756}, //{0xE6, 0x9D, 0x96}, // �� + {0xB6C5, 0x675C}, //{0xE6, 0x9D, 0x9C}, // �� + {0xCAF8, 0x675F}, //{0xE6, 0x9D, 0x9F}, // �� + {0xB8DC, 0x6760}, //{0xE6, 0x9D, 0xA0}, // �� + {0xCCF5, 0x6761}, //{0xE6, 0x9D, 0xA1}, // �� + {0xC0B4, 0x6765}, //{0xE6, 0x9D, 0xA5}, // 4 + {0xD1EE, 0x6768}, //{0xE6, 0x9D, 0xA8}, // �� + {0xBABC, 0x676D}, //{0xE6, 0x9D, 0xAD}, // �� + {0xB1AD, 0x676F}, //{0xE6, 0x9D, 0xAF}, // �� + {0xBDDC, 0x6770}, //{0xE6, 0x9D, 0xB0}, // �� + {0xCBC9, 0x677E}, //{0xE6, 0x9D, 0xBE}, // �� + {0xB0E5, 0x677F}, //{0xE6, 0x9D, 0xBF}, // �� + {0xBCAB, 0x6781}, //{0xE6, 0x9E, 0x81}, // �� + {0xB9B9, 0x6784}, //{0xE6, 0x9E, 0x84}, // �� + {0xCDF7, 0x6789}, //{0xE6, 0x9E, 0x89}, // �� + {0xCEF6, 0x6790}, //{0xE6, 0x9E, 0x90}, // �� + {0xD5ED, 0x6795}, //{0xE6, 0x9E, 0x95}, // �� + {0xC1D6, 0x6797}, //{0xE6, 0x9E, 0x97}, // �� {0xC3B6, 0x679A}, //{0xE6, 0x9E, 0x9A}, // ö - {0xB9FB, 0x679C}, //{0xE6, 0x9E, 0x9C}, // + {0xB9FB, 0x679C}, //{0xE6, 0x9E, 0x9C}, // �� {0xD6A6, 0x679D}, //{0xE6, 0x9E, 0x9D}, // ֦ - {0xCAE0, 0x67A2}, //{0xE6, 0x9E, 0xA2}, // - {0xD4E6, 0x67A3}, //{0xE6, 0x9E, 0xA3}, // + {0xCAE0, 0x67A2}, //{0xE6, 0x9E, 0xA2}, // �� + {0xD4E6, 0x67A3}, //{0xE6, 0x9E, 0xA3}, // �� {0xC7B9, 0x67AA}, //{0xE6, 0x9E, 0xAA}, // ǹ - {0xB7E3, 0x67AB}, //{0xE6, 0x9E, 0xAB}, // - {0xBFDD, 0x67AF}, //{0xE6, 0x9E, 0xAF}, // - {0xBCDC, 0x67B6}, //{0xE6, 0x9E, 0xB6}, // - {0xBCCF, 0x67B7}, //{0xE6, 0x9E, 0xB7}, // - {0xB1FA, 0x67C4}, //{0xE6, 0x9F, 0x84}, // - {0xB0D8, 0x67CF}, //{0xE6, 0x9F, 0x8F}, // + {0xB7E3, 0x67AB}, //{0xE6, 0x9E, 0xAB}, // �� + {0xBFDD, 0x67AF}, //{0xE6, 0x9E, 0xAF}, // �� + {0xBCDC, 0x67B6}, //{0xE6, 0x9E, 0xB6}, // �� + {0xBCCF, 0x67B7}, //{0xE6, 0x9E, 0xB7}, // �� + {0xB1FA, 0x67C4}, //{0xE6, 0x9F, 0x84}, // �� + {0xB0D8, 0x67CF}, //{0xE6, 0x9F, 0x8F}, // �� {0xC4B3, 0x67D0}, //{0xE6, 0x9F, 0x90}, // ij - {0xB8CC, 0x67D1}, //{0xE6, 0x9F, 0x91}, // - {0xC6E2, 0x67D2}, //{0xE6, 0x9F, 0x92}, // + {0xB8CC, 0x67D1}, //{0xE6, 0x9F, 0x91}, // �� + {0xC6E2, 0x67D2}, //{0xE6, 0x9F, 0x92}, // �� {0xC8BE, 0x67D3}, //{0xE6, 0x9F, 0x93}, // Ⱦ - {0xC8E1, 0x67D4}, //{0xE6, 0x9F, 0x94}, // - {0xB9F1, 0x67DC}, //{0xE6, 0x9F, 0x9C}, // - {0xC4FB, 0x67E0}, //{0xE6, 0x9F, 0xA0}, // - {0xB2E9, 0x67E5}, //{0xE6, 0x9F, 0xA5}, // - {0xBCED, 0x67EC}, //{0xE6, 0x9F, 0xAC}, // - {0xD6F9, 0x67F1}, //{0xE6, 0x9F, 0xB1}, // - {0xC1F8, 0x67F3}, //{0xE6, 0x9F, 0xB3}, // - {0xB2F1, 0x67F4}, //{0xE6, 0x9F, 0xB4}, // - {0xCAC1, 0x67FF}, //{0xE6, 0x9F, 0xBF}, // + {0xC8E1, 0x67D4}, //{0xE6, 0x9F, 0x94}, // �� + {0xB9F1, 0x67DC}, //{0xE6, 0x9F, 0x9C}, // �� + {0xC4FB, 0x67E0}, //{0xE6, 0x9F, 0xA0}, // �� + {0xB2E9, 0x67E5}, //{0xE6, 0x9F, 0xA5}, // �� + {0xBCED, 0x67EC}, //{0xE6, 0x9F, 0xAC}, // �� + {0xD6F9, 0x67F1}, //{0xE6, 0x9F, 0xB1}, // �� + {0xC1F8, 0x67F3}, //{0xE6, 0x9F, 0xB3}, // �� + {0xB2F1, 0x67F4}, //{0xE6, 0x9F, 0xB4}, // �� + {0xCAC1, 0x67FF}, //{0xE6, 0x9F, 0xBF}, // �� {0xD5A4, 0x6805}, //{0xE6, 0xA0, 0x85}, // դ - {0xB1EA, 0x6807}, //{0xE6, 0xA0, 0x87}, // + {0xB1EA, 0x6807}, //{0xE6, 0xA0, 0x87}, // �� {0xD5BB, 0x6808}, //{0xE6, 0xA0, 0x88}, // ջ - {0xB6B0, 0x680B}, //{0xE6, 0xA0, 0x8B}, // - {0xC0B8, 0x680F}, //{0xE6, 0xA0, 0x8F}, // - {0xCAF7, 0x6811}, //{0xE6, 0xA0, 0x91}, // + {0xB6B0, 0x680B}, //{0xE6, 0xA0, 0x8B}, // �� + {0xC0B8, 0x680F}, //{0xE6, 0xA0, 0x8F}, // 8 + {0xCAF7, 0x6811}, //{0xE6, 0xA0, 0x91}, // �� {0xCBA8, 0x6813}, //{0xE6, 0xA0, 0x93}, // ˨ - {0xC6DC, 0x6816}, //{0xE6, 0xA0, 0x96}, // - {0xC0F5, 0x6817}, //{0xE6, 0xA0, 0x97}, // + {0xC6DC, 0x6816}, //{0xE6, 0xA0, 0x96}, // �� + {0xC0F5, 0x6817}, //{0xE6, 0xA0, 0x97}, // �� {0xD0A3, 0x6821}, //{0xE6, 0xA0, 0xA1}, // У - {0xD6EA, 0x682A}, //{0xE6, 0xA0, 0xAA}, // - {0xD1F9, 0x6837}, //{0xE6, 0xA0, 0xB7}, // - {0xBACB, 0x6838}, //{0xE6, 0xA0, 0xB8}, // - {0xB8F9, 0x6839}, //{0xE6, 0xA0, 0xB9}, // - {0xB8F1, 0x683C}, //{0xE6, 0xA0, 0xBC}, // - {0xD4D4, 0x683D}, //{0xE6, 0xA0, 0xBD}, // - {0xB9F0, 0x6842}, //{0xE6, 0xA1, 0x82}, // - {0xCCD2, 0x6843}, //{0xE6, 0xA1, 0x83}, // + {0xD6EA, 0x682A}, //{0xE6, 0xA0, 0xAA}, // �� + {0xD1F9, 0x6837}, //{0xE6, 0xA0, 0xB7}, // �� + {0xBACB, 0x6838}, //{0xE6, 0xA0, 0xB8}, // �� + {0xB8F9, 0x6839}, //{0xE6, 0xA0, 0xB9}, // �� + {0xB8F1, 0x683C}, //{0xE6, 0xA0, 0xBC}, // �� + {0xD4D4, 0x683D}, //{0xE6, 0xA0, 0xBD}, // �� + {0xB9F0, 0x6842}, //{0xE6, 0xA1, 0x82}, // �� + {0xCCD2, 0x6843}, //{0xE6, 0xA1, 0x83}, // �� {0xCEA6, 0x6845}, //{0xE6, 0xA1, 0x85}, // Φ - {0xBFF2, 0x6846}, //{0xE6, 0xA1, 0x86}, // - {0xB0B8, 0x6848}, //{0xE6, 0xA1, 0x88}, // - {0xD7C0, 0x684C}, //{0xE6, 0xA1, 0x8C}, // + {0xBFF2, 0x6846}, //{0xE6, 0xA1, 0x86}, // �� + {0xB0B8, 0x6848}, //{0xE6, 0xA1, 0x88}, // �� + {0xD7C0, 0x684C}, //{0xE6, 0xA1, 0x8C}, // �� {0xCDA9, 0x6850}, //{0xE6, 0xA1, 0x90}, // ͩ {0xC9A3, 0x6851}, //{0xE6, 0xA1, 0x91}, // ɣ - {0xB5B5, 0x6863}, //{0xE6, 0xA1, 0xA3}, // - {0xC7C5, 0x6865}, //{0xE6, 0xA1, 0xA5}, // - {0xE8EB, 0x6866}, //{0xE6, 0xA1, 0xA6}, // - {0xBDB0, 0x6868}, //{0xE6, 0xA1, 0xA8}, // + {0xB5B5, 0x6863}, //{0xE6, 0xA1, 0xA3}, // �� + {0xC7C5, 0x6865}, //{0xE6, 0xA1, 0xA5}, // �� + {0xE8EB, 0x6866}, //{0xE6, 0xA1, 0xA6}, // �� + {0xBDB0, 0x6868}, //{0xE6, 0xA1, 0xA8}, // �� {0xD7AE, 0x6869}, //{0xE6, 0xA1, 0xA9}, // ׮ {0xCDB0, 0x6876}, //{0xE6, 0xA1, 0xB6}, // Ͱ - {0xC1BA, 0x6881}, //{0xE6, 0xA2, 0x81}, // + {0xC1BA, 0x6881}, //{0xE6, 0xA2, 0x81}, // z {0xC3B7, 0x6885}, //{0xE6, 0xA2, 0x85}, // ÷ - {0xB0F0, 0x6886}, //{0xE6, 0xA2, 0x86}, // - {0xB9A3, 0x6897}, //{0xE6, 0xA2, 0x97}, // - {0xC9D2, 0x68A2}, //{0xE6, 0xA2, 0xA2}, // - {0xC3CE, 0x68A6}, //{0xE6, 0xA2, 0xA6}, // - {0xCEE0, 0x68A7}, //{0xE6, 0xA2, 0xA7}, // - {0xC0E6, 0x68A8}, //{0xE6, 0xA2, 0xA8}, // - {0xCBF3, 0x68AD}, //{0xE6, 0xA2, 0xAD}, // - {0xCCDD, 0x68AF}, //{0xE6, 0xA2, 0xAF}, // + {0xB0F0, 0x6886}, //{0xE6, 0xA2, 0x86}, // �� + {0xB9A3, 0x6897}, //{0xE6, 0xA2, 0x97}, // �� + {0xC9D2, 0x68A2}, //{0xE6, 0xA2, 0xA2}, // �� + {0xC3CE, 0x68A6}, //{0xE6, 0xA2, 0xA6}, // �� + {0xCEE0, 0x68A7}, //{0xE6, 0xA2, 0xA7}, // �� + {0xC0E6, 0x68A8}, //{0xE6, 0xA2, 0xA8}, // �� + {0xCBF3, 0x68AD}, //{0xE6, 0xA2, 0xAD}, // �� + {0xCCDD, 0x68AF}, //{0xE6, 0xA2, 0xAF}, // �� {0xD0B5, 0x68B0}, //{0xE6, 0xA2, 0xB0}, // е - {0xCAE1, 0x68B3}, //{0xE6, 0xA2, 0xB3}, // - {0xBCEC, 0x68C0}, //{0xE6, 0xA3, 0x80}, // - {0xC3DE, 0x68C9}, //{0xE6, 0xA3, 0x89}, // - {0xC6E5, 0x68CB}, //{0xE6, 0xA3, 0x8B}, // - {0xB9F7, 0x68CD}, //{0xE6, 0xA3, 0x8D}, // - {0xB0F4, 0x68D2}, //{0xE6, 0xA3, 0x92}, // - {0xD7D8, 0x68D5}, //{0xE6, 0xA3, 0x95}, // - {0xBCAC, 0x68D8}, //{0xE6, 0xA3, 0x98}, // - {0xC5EF, 0x68DA}, //{0xE6, 0xA3, 0x9A}, // - {0xCCC4, 0x68E0}, //{0xE6, 0xA3, 0xA0}, // + {0xCAE1, 0x68B3}, //{0xE6, 0xA2, 0xB3}, // �� + {0xBCEC, 0x68C0}, //{0xE6, 0xA3, 0x80}, // �� + {0xC3DE, 0x68C9}, //{0xE6, 0xA3, 0x89}, // �� + {0xC6E5, 0x68CB}, //{0xE6, 0xA3, 0x8B}, // �� + {0xB9F7, 0x68CD}, //{0xE6, 0xA3, 0x8D}, // �� + {0xB0F4, 0x68D2}, //{0xE6, 0xA3, 0x92}, // �� + {0xD7D8, 0x68D5}, //{0xE6, 0xA3, 0x95}, // �� + {0xBCAC, 0x68D8}, //{0xE6, 0xA3, 0x98}, // �� + {0xC5EF, 0x68DA}, //{0xE6, 0xA3, 0x9A}, // �� + {0xCCC4, 0x68E0}, //{0xE6, 0xA3, 0xA0}, // �� {0xC9AD, 0x68EE}, //{0xE6, 0xA3, 0xAE}, // ɭ - {0xC0E2, 0x68F1}, //{0xE6, 0xA3, 0xB1}, // - {0xBFC3, 0x68F5}, //{0xE6, 0xA3, 0xB5}, // - {0xB9D7, 0x68FA}, //{0xE6, 0xA3, 0xBA}, // - {0xD2CE, 0x6905}, //{0xE6, 0xA4, 0x85}, // + {0xC0E2, 0x68F1}, //{0xE6, 0xA3, 0xB1}, // �� + {0xBFC3, 0x68F5}, //{0xE6, 0xA3, 0xB5}, // �� + {0xB9D7, 0x68FA}, //{0xE6, 0xA3, 0xBA}, // �� + {0xD2CE, 0x6905}, //{0xE6, 0xA4, 0x85}, // �� {0xD6B2, 0x690D}, //{0xE6, 0xA4, 0x8D}, // ֲ {0xD7B5, 0x690E}, //{0xE6, 0xA4, 0x8E}, // ׵ - {0xBDB7, 0x6912}, //{0xE6, 0xA4, 0x92}, // - {0xCDD6, 0x692D}, //{0xE6, 0xA4, 0xAD}, // + {0xBDB7, 0x6912}, //{0xE6, 0xA4, 0x92}, // �� + {0xCDD6, 0x692D}, //{0xE6, 0xA4, 0xAD}, // �� {0xD2AC, 0x6930}, //{0xE6, 0xA4, 0xB0}, // Ҭ - {0xB4BB, 0x693F}, //{0xE6, 0xA4, 0xBF}, // + {0xB4BB, 0x693F}, //{0xE6, 0xA4, 0xBF}, // �� {0xD0A8, 0x6954}, //{0xE6, 0xA5, 0x94}, // Ш - {0xB3FE, 0x695A}, //{0xE6, 0xA5, 0x9A}, // - {0xC0E3, 0x695E}, //{0xE6, 0xA5, 0x9E}, // - {0xE9B9, 0x6963}, //{0xE6, 0xA5, 0xA3}, // - {0xBFAC, 0x6977}, //{0xE6, 0xA5, 0xB7}, // + {0xB3FE, 0x695A}, //{0xE6, 0xA5, 0x9A}, // �� + {0xC0E3, 0x695E}, //{0xE6, 0xA5, 0x9E}, // �� + {0xE9B9, 0x6963}, //{0xE6, 0xA5, 0xA3}, // � + {0xBFAC, 0x6977}, //{0xE6, 0xA5, 0xB7}, // �� {0xC2A5, 0x697C}, //{0xE6, 0xA5, 0xBC}, // ¥ - {0xB8C5, 0x6982}, //{0xE6, 0xA6, 0x82}, // - {0xE9AD, 0x6984}, //{0xE6, 0xA6, 0x84}, // - {0xD3DC, 0x6986}, //{0xE6, 0xA6, 0x86}, // - {0xC0C6, 0x6994}, //{0xE6, 0xA6, 0x94}, // - {0xE9C5, 0x6995}, //{0xE6, 0xA6, 0x95}, // - {0xE9BB, 0x699B}, //{0xE6, 0xA6, 0x9B}, // - {0xB0F1, 0x699C}, //{0xE6, 0xA6, 0x9C}, // + {0xB8C5, 0x6982}, //{0xE6, 0xA6, 0x82}, // �� + {0xE9AD, 0x6984}, //{0xE6, 0xA6, 0x84}, // � + {0xD3DC, 0x6986}, //{0xE6, 0xA6, 0x86}, // �� + {0xC0C6, 0x6994}, //{0xE6, 0xA6, 0x94}, // �� + {0xE9C5, 0x6995}, //{0xE6, 0xA6, 0x95}, // �� + {0xE9BB, 0x699B}, //{0xE6, 0xA6, 0x9B}, // � + {0xB0F1, 0x699C}, //{0xE6, 0xA6, 0x9C}, // �� {0xD5A5, 0x69A8}, //{0xE6, 0xA6, 0xA8}, // ե - {0xC1F1, 0x69B4}, //{0xE6, 0xA6, 0xB4}, // - {0xBBB1, 0x69D0}, //{0xE6, 0xA7, 0x90}, // - {0xB2DB, 0x69FD}, //{0xE6, 0xA7, 0xBD}, // - {0xB7AE, 0x6A0A}, //{0xE6, 0xA8, 0x8A}, // - {0xD5C1, 0x6A1F}, //{0xE6, 0xA8, 0x9F}, // + {0xC1F1, 0x69B4}, //{0xE6, 0xA6, 0xB4}, // �� + {0xBBB1, 0x69D0}, //{0xE6, 0xA7, 0x90}, // �� + {0xB2DB, 0x69FD}, //{0xE6, 0xA7, 0xBD}, // �� + {0xB7AE, 0x6A0A}, //{0xE6, 0xA8, 0x8A}, // �� + {0xD5C1, 0x6A1F}, //{0xE6, 0xA8, 0x9F}, // �� {0xC4A3, 0x6A21}, //{0xE6, 0xA8, 0xA1}, // ģ - {0xBAE1, 0x6A2A}, //{0xE6, 0xA8, 0xAA}, // + {0xBAE1, 0x6A2A}, //{0xE6, 0xA8, 0xAA}, // �� {0xD3A3, 0x6A31}, //{0xE6, 0xA8, 0xB1}, // ӣ - {0xE9CF, 0x6A44}, //{0xE6, 0xA9, 0x84}, // - {0xE9D9, 0x6A58}, //{0xE6, 0xA9, 0x98}, // - {0xB3C8, 0x6A59}, //{0xE6, 0xA9, 0x99}, // - {0xCFF0, 0x6A61}, //{0xE6, 0xA9, 0xA1}, // - {0xB3F7, 0x6A71}, //{0xE6, 0xA9, 0xB1}, // + {0xE9CF, 0x6A44}, //{0xE6, 0xA9, 0x84}, // �� + {0xE9D9, 0x6A58}, //{0xE6, 0xA9, 0x98}, // �� + {0xB3C8, 0x6A59}, //{0xE6, 0xA9, 0x99}, // �� + {0xCFF0, 0x6A61}, //{0xE6, 0xA9, 0xA1}, // �� + {0xB3F7, 0x6A71}, //{0xE6, 0xA9, 0xB1}, // �� {0xCCB4, 0x6A80}, //{0xE6, 0xAA, 0x80}, // ̴ - {0xE9DC, 0x6A90}, //{0xE6, 0xAA, 0x90}, // - {0xE9DD, 0x6AA9}, //{0xE6, 0xAA, 0xA9}, // - {0xC3CA, 0x6AAC}, //{0xE6, 0xAA, 0xAC}, // + {0xE9DC, 0x6A90}, //{0xE6, 0xAA, 0x90}, // �� + {0xE9DD, 0x6AA9}, //{0xE6, 0xAA, 0xA9}, // �� + {0xC3CA, 0x6AAC}, //{0xE6, 0xAA, 0xAC}, // �� {0xC7B7, 0x6B20}, //{0xE6, 0xAC, 0xA0}, // Ƿ - {0xB4CE, 0x6B21}, //{0xE6, 0xAC, 0xA1}, // - {0xBBB6, 0x6B22}, //{0xE6, 0xAC, 0xA2}, // - {0xD0C0, 0x6B23}, //{0xE6, 0xAC, 0xA3}, // + {0xB4CE, 0x6B21}, //{0xE6, 0xAC, 0xA1}, // �� + {0xBBB6, 0x6B22}, //{0xE6, 0xAC, 0xA2}, // �� + {0xD0C0, 0x6B23}, //{0xE6, 0xAC, 0xA3}, // �� {0xC5B7, 0x6B27}, //{0xE6, 0xAC, 0xA7}, // ŷ - {0xD3FB, 0x6B32}, //{0xE6, 0xAC, 0xB2}, // - {0xC6DB, 0x6B3A}, //{0xE6, 0xAC, 0xBA}, // - {0xBFEE, 0x6B3E}, //{0xE6, 0xAC, 0xBE}, // + {0xD3FB, 0x6B32}, //{0xE6, 0xAC, 0xB2}, // �� + {0xC6DB, 0x6B3A}, //{0xE6, 0xAC, 0xBA}, // �� + {0xBFEE, 0x6B3E}, //{0xE6, 0xAC, 0xBE}, // �� {0xD0AA, 0x6B47}, //{0xE6, 0xAD, 0x87}, // Ъ {0xC7B8, 0x6B49}, //{0xE6, 0xAD, 0x89}, // Ǹ - {0xB8E8, 0x6B4C}, //{0xE6, 0xAD, 0x8C}, // + {0xB8E8, 0x6B4C}, //{0xE6, 0xAD, 0x8C}, // �� {0xD6B9, 0x6B62}, //{0xE6, 0xAD, 0xA2}, // ֹ - {0xD5FD, 0x6B63}, //{0xE6, 0xAD, 0xA3}, // - {0xB4CB, 0x6B64}, //{0xE6, 0xAD, 0xA4}, // - {0xB2BD, 0x6B65}, //{0xE6, 0xAD, 0xA5}, // - {0xCEE4, 0x6B66}, //{0xE6, 0xAD, 0xA6}, // - {0xC6E7, 0x6B67}, //{0xE6, 0xAD, 0xA7}, // - {0xCDE1, 0x6B6A}, //{0xE6, 0xAD, 0xAA}, // - {0xB4F5, 0x6B79}, //{0xE6, 0xAD, 0xB9}, // - {0xCBC0, 0x6B7B}, //{0xE6, 0xAD, 0xBB}, // - {0xBCDF, 0x6B7C}, //{0xE6, 0xAD, 0xBC}, // - {0xD1EA, 0x6B83}, //{0xE6, 0xAE, 0x83}, // + {0xD5FD, 0x6B63}, //{0xE6, 0xAD, 0xA3}, // �� + {0xB4CB, 0x6B64}, //{0xE6, 0xAD, 0xA4}, // �� + {0xB2BD, 0x6B65}, //{0xE6, 0xAD, 0xA5}, // �� + {0xCEE4, 0x6B66}, //{0xE6, 0xAD, 0xA6}, // �� + {0xC6E7, 0x6B67}, //{0xE6, 0xAD, 0xA7}, // �� + {0xCDE1, 0x6B6A}, //{0xE6, 0xAD, 0xAA}, // �� + {0xB4F5, 0x6B79}, //{0xE6, 0xAD, 0xB9}, // �� + {0xCBC0, 0x6B7B}, //{0xE6, 0xAD, 0xBB}, // �� + {0xBCDF, 0x6B7C}, //{0xE6, 0xAD, 0xBC}, // �� + {0xD1EA, 0x6B83}, //{0xE6, 0xAE, 0x83}, // �� {0xD1B3, 0x6B89}, //{0xE6, 0xAE, 0x89}, // ѳ - {0xCAE2, 0x6B8A}, //{0xE6, 0xAE, 0x8A}, // - {0xB2D0, 0x6B8B}, //{0xE6, 0xAE, 0x8B}, // + {0xCAE2, 0x6B8A}, //{0xE6, 0xAE, 0x8A}, // �� + {0xB2D0, 0x6B8B}, //{0xE6, 0xAE, 0x8B}, // �� {0xD6B3, 0x6B96}, //{0xE6, 0xAE, 0x96}, // ֳ {0xC5B9, 0x6BB4}, //{0xE6, 0xAE, 0xB4}, // Ź - {0xB6CE, 0x6BB5}, //{0xE6, 0xAE, 0xB5}, // - {0xD2F3, 0x6BB7}, //{0xE6, 0xAE, 0xB7}, // - {0xB5EE, 0x6BBF}, //{0xE6, 0xAE, 0xBF}, // - {0xBBD9, 0x6BC1}, //{0xE6, 0xAF, 0x81}, // - {0xD2E3, 0x6BC5}, //{0xE6, 0xAF, 0x85}, // + {0xB6CE, 0x6BB5}, //{0xE6, 0xAE, 0xB5}, // �� + {0xD2F3, 0x6BB7}, //{0xE6, 0xAE, 0xB7}, // �� + {0xB5EE, 0x6BBF}, //{0xE6, 0xAE, 0xBF}, // �� + {0xBBD9, 0x6BC1}, //{0xE6, 0xAF, 0x81}, // �� + {0xD2E3, 0x6BC5}, //{0xE6, 0xAF, 0x85}, // �� {0xC4B8, 0x6BCD}, //{0xE6, 0xAF, 0x8D}, // ĸ {0xC3BF, 0x6BCF}, //{0xE6, 0xAF, 0x8F}, // ÿ - {0xB6BE, 0x6BD2}, //{0xE6, 0xAF, 0x92}, // - {0xB1C8, 0x6BD4}, //{0xE6, 0xAF, 0x94}, // - {0xB1CF, 0x6BD5}, //{0xE6, 0xAF, 0x95}, // - {0xB1D0, 0x6BD9}, //{0xE6, 0xAF, 0x99}, // + {0xB6BE, 0x6BD2}, //{0xE6, 0xAF, 0x92}, // �� + {0xB1C8, 0x6BD4}, //{0xE6, 0xAF, 0x94}, // �� + {0xB1CF, 0x6BD5}, //{0xE6, 0xAF, 0x95}, // �� + {0xB1D0, 0x6BD9}, //{0xE6, 0xAF, 0x99}, // �� {0xC3AB, 0x6BDB}, //{0xE6, 0xAF, 0x9B}, // ë {0xD5B1, 0x6BE1}, //{0xE6, 0xAF, 0xA1}, // ձ - {0xBAC1, 0x6BEB}, //{0xE6, 0xAF, 0xAB}, // + {0xBAC1, 0x6BEB}, //{0xE6, 0xAF, 0xAB}, // �� {0xCCBA, 0x6BEF}, //{0xE6, 0xAF, 0xAF}, // ̺ - {0xCACF, 0x6C0F}, //{0xE6, 0xB0, 0x8F}, // - {0xC3F1, 0x6C11}, //{0xE6, 0xB0, 0x91}, // + {0xCACF, 0x6C0F}, //{0xE6, 0xB0, 0x8F}, // �� + {0xC3F1, 0x6C11}, //{0xE6, 0xB0, 0x91}, // �� {0xC3A5, 0x6C13}, //{0xE6, 0xB0, 0x93}, // å - {0xC6F8, 0x6C14}, //{0xE6, 0xB0, 0x94}, // - {0xB7D5, 0x6C1B}, //{0xE6, 0xB0, 0x9B}, // - {0xC7E2, 0x6C22}, //{0xE6, 0xB0, 0xA2}, // - {0xD1F5, 0x6C27}, //{0xE6, 0xB0, 0xA7}, // - {0xB0B1, 0x6C28}, //{0xE6, 0xB0, 0xA8}, // - {0xB5AA, 0x6C2E}, //{0xE6, 0xB0, 0xAE}, // - {0xC2C8, 0x6C2F}, //{0xE6, 0xB0, 0xAF}, // + {0xC6F8, 0x6C14}, //{0xE6, 0xB0, 0x94}, // �� + {0xB7D5, 0x6C1B}, //{0xE6, 0xB0, 0x9B}, // �� + {0xC7E2, 0x6C22}, //{0xE6, 0xB0, 0xA2}, // �� + {0xD1F5, 0x6C27}, //{0xE6, 0xB0, 0xA7}, // �� + {0xB0B1, 0x6C28}, //{0xE6, 0xB0, 0xA8}, // �� + {0xB5AA, 0x6C2E}, //{0xE6, 0xB0, 0xAE}, // �� + {0xC2C8, 0x6C2F}, //{0xE6, 0xB0, 0xAF}, // �� {0xCBAE, 0x6C34}, //{0xE6, 0xB0, 0xB4}, // ˮ - {0xD3C0, 0x6C38}, //{0xE6, 0xB0, 0xB8}, // + {0xD3C0, 0x6C38}, //{0xE6, 0xB0, 0xB8}, // �� {0xD6AD, 0x6C41}, //{0xE6, 0xB1, 0x81}, // ֭ - {0xC7F3, 0x6C42}, //{0xE6, 0xB1, 0x82}, // - {0xBBE3, 0x6C47}, //{0xE6, 0xB1, 0x87}, // - {0xBABA, 0x6C49}, //{0xE6, 0xB1, 0x89}, // - {0xBAB9, 0x6C57}, //{0xE6, 0xB1, 0x97}, // + {0xC7F3, 0x6C42}, //{0xE6, 0xB1, 0x82}, // �� + {0xBBE3, 0x6C47}, //{0xE6, 0xB1, 0x87}, // �� + {0xBABA, 0x6C49}, //{0xE6, 0xB1, 0x89}, // �� + {0xBAB9, 0x6C57}, //{0xE6, 0xB1, 0x97}, // �� {0xD1B4, 0x6C5B}, //{0xE6, 0xB1, 0x9B}, // Ѵ - {0xB9AF, 0x6C5E}, //{0xE6, 0xB1, 0x9E}, // - {0xBDAD, 0x6C5F}, //{0xE6, 0xB1, 0x9F}, // - {0xB3D8, 0x6C60}, //{0xE6, 0xB1, 0xA0}, // - {0xCEDB, 0x6C61}, //{0xE6, 0xB1, 0xA1}, // - {0xCCC0, 0x6C64}, //{0xE6, 0xB1, 0xA4}, // - {0xCDF4, 0x6C6A}, //{0xE6, 0xB1, 0xAA}, // + {0xB9AF, 0x6C5E}, //{0xE6, 0xB1, 0x9E}, // �� + {0xBDAD, 0x6C5F}, //{0xE6, 0xB1, 0x9F}, // �� + {0xB3D8, 0x6C60}, //{0xE6, 0xB1, 0xA0}, // �� + {0xCEDB, 0x6C61}, //{0xE6, 0xB1, 0xA1}, // �� + {0xCCC0, 0x6C64}, //{0xE6, 0xB1, 0xA4}, // �� + {0xCDF4, 0x6C6A}, //{0xE6, 0xB1, 0xAA}, // �� {0xCCAD, 0x6C70}, //{0xE6, 0xB1, 0xB0}, // ̭ - {0xD0DA, 0x6C79}, //{0xE6, 0xB1, 0xB9}, // - {0xC6FB, 0x6C7D}, //{0xE6, 0xB1, 0xBD}, // - {0xCED6, 0x6C83}, //{0xE6, 0xB2, 0x83}, // - {0xC9F2, 0x6C88}, //{0xE6, 0xB2, 0x88}, // - {0xB3C1, 0x6C89}, //{0xE6, 0xB2, 0x89}, // - {0xE3E5, 0x6C90}, //{0xE6, 0xB2, 0x90}, // + {0xD0DA, 0x6C79}, //{0xE6, 0xB1, 0xB9}, // �� + {0xC6FB, 0x6C7D}, //{0xE6, 0xB1, 0xBD}, // �� + {0xCED6, 0x6C83}, //{0xE6, 0xB2, 0x83}, // �� + {0xC9F2, 0x6C88}, //{0xE6, 0xB2, 0x88}, // �� + {0xB3C1, 0x6C89}, //{0xE6, 0xB2, 0x89}, // �� + {0xE3E5, 0x6C90}, //{0xE6, 0xB2, 0x90}, // �� {0xC9B3, 0x6C99}, //{0xE6, 0xB2, 0x99}, // ɳ - {0xC5E6, 0x6C9B}, //{0xE6, 0xB2, 0x9B}, // - {0xB9B5, 0x6C9F}, //{0xE6, 0xB2, 0x9F}, // + {0xC5E6, 0x6C9B}, //{0xE6, 0xB2, 0x9B}, // �� + {0xB9B5, 0x6C9F}, //{0xE6, 0xB2, 0x9F}, // �� {0xC3BB, 0x6CA1}, //{0xE6, 0xB2, 0xA1}, // û - {0xC1A4, 0x6CA5}, //{0xE6, 0xB2, 0xA5}, // - {0xC2D9, 0x6CA6}, //{0xE6, 0xB2, 0xA6}, // - {0xB2D7, 0x6CA7}, //{0xE6, 0xB2, 0xA7}, // - {0xBBA6, 0x6CAA}, //{0xE6, 0xB2, 0xAA}, // + {0xC1A4, 0x6CA5}, //{0xE6, 0xB2, 0xA5}, // d + {0xC2D9, 0x6CA6}, //{0xE6, 0xB2, 0xA6}, // �� + {0xB2D7, 0x6CA7}, //{0xE6, 0xB2, 0xA7}, // �� + {0xBBA6, 0x6CAA}, //{0xE6, 0xB2, 0xAA}, // �� {0xC4AD, 0x6CAB}, //{0xE6, 0xB2, 0xAB}, // ĭ - {0xBEDA, 0x6CAE}, //{0xE6, 0xB2, 0xAE}, // - {0xBAD3, 0x6CB3}, //{0xE6, 0xB2, 0xB3}, // - {0xB7D0, 0x6CB8}, //{0xE6, 0xB2, 0xB8}, // - {0xD3CD, 0x6CB9}, //{0xE6, 0xB2, 0xB9}, // - {0xD6CE, 0x6CBB}, //{0xE6, 0xB2, 0xBB}, // - {0xD5D3, 0x6CBC}, //{0xE6, 0xB2, 0xBC}, // - {0xB9C1, 0x6CBD}, //{0xE6, 0xB2, 0xBD}, // + {0xBEDA, 0x6CAE}, //{0xE6, 0xB2, 0xAE}, // �� + {0xBAD3, 0x6CB3}, //{0xE6, 0xB2, 0xB3}, // �� + {0xB7D0, 0x6CB8}, //{0xE6, 0xB2, 0xB8}, // �� + {0xD3CD, 0x6CB9}, //{0xE6, 0xB2, 0xB9}, // �� + {0xD6CE, 0x6CBB}, //{0xE6, 0xB2, 0xBB}, // �� + {0xD5D3, 0x6CBC}, //{0xE6, 0xB2, 0xBC}, // �� + {0xB9C1, 0x6CBD}, //{0xE6, 0xB2, 0xBD}, // �� {0xD5B4, 0x6CBE}, //{0xE6, 0xB2, 0xBE}, // մ - {0xD1D8, 0x6CBF}, //{0xE6, 0xB2, 0xBF}, // + {0xD1D8, 0x6CBF}, //{0xE6, 0xB2, 0xBF}, // �� {0xD0B9, 0x6CC4}, //{0xE6, 0xB3, 0x84}, // й {0xC8AA, 0x6CC9}, //{0xE6, 0xB3, 0x89}, // Ȫ - {0xB2B4, 0x6CCA}, //{0xE6, 0xB3, 0x8A}, // - {0xC3DA, 0x6CCC}, //{0xE6, 0xB3, 0x8C}, // - {0xB7A8, 0x6CD5}, //{0xE6, 0xB3, 0x95}, // - {0xB7BA, 0x6CDB}, //{0xE6, 0xB3, 0x9B}, // + {0xB2B4, 0x6CCA}, //{0xE6, 0xB3, 0x8A}, // �� + {0xC3DA, 0x6CCC}, //{0xE6, 0xB3, 0x8C}, // �� + {0xB7A8, 0x6CD5}, //{0xE6, 0xB3, 0x95}, // �� + {0xB7BA, 0x6CDB}, //{0xE6, 0xB3, 0x9B}, // �� {0xC5A2, 0x6CDE}, //{0xE6, 0xB3, 0x9E}, // Ţ - {0xC5DD, 0x6CE1}, //{0xE6, 0xB3, 0xA1}, // - {0xB2A8, 0x6CE2}, //{0xE6, 0xB3, 0xA2}, // - {0xC6FC, 0x6CE3}, //{0xE6, 0xB3, 0xA3}, // - {0xC4E0, 0x6CE5}, //{0xE6, 0xB3, 0xA5}, // + {0xC5DD, 0x6CE1}, //{0xE6, 0xB3, 0xA1}, // �� + {0xB2A8, 0x6CE2}, //{0xE6, 0xB3, 0xA2}, // �� + {0xC6FC, 0x6CE3}, //{0xE6, 0xB3, 0xA3}, // �� + {0xC4E0, 0x6CE5}, //{0xE6, 0xB3, 0xA5}, // �� {0xD7A2, 0x6CE8}, //{0xE6, 0xB3, 0xA8}, // ע - {0xC0E1, 0x6CEA}, //{0xE6, 0xB3, 0xAA}, // + {0xC0E1, 0x6CEA}, //{0xE6, 0xB3, 0xAA}, // �� {0xCCA9, 0x6CF0}, //{0xE6, 0xB3, 0xB0}, // ̩ {0xD3BE, 0x6CF3}, //{0xE6, 0xB3, 0xB3}, // Ӿ - {0xB1C3, 0x6CF5}, //{0xE6, 0xB3, 0xB5}, // + {0xB1C3, 0x6CF5}, //{0xE6, 0xB3, 0xB5}, // �� {0xD0BA, 0x6CFB}, //{0xE6, 0xB3, 0xBB}, // к - {0xC6C3, 0x6CFC}, //{0xE6, 0xB3, 0xBC}, // - {0xD4F3, 0x6CFD}, //{0xE6, 0xB3, 0xBD}, // - {0xBDE0, 0x6D01}, //{0xE6, 0xB4, 0x81}, // - {0xD1F3, 0x6D0B}, //{0xE6, 0xB4, 0x8B}, // - {0xC8F7, 0x6D12}, //{0xE6, 0xB4, 0x92}, // + {0xC6C3, 0x6CFC}, //{0xE6, 0xB3, 0xBC}, // �� + {0xD4F3, 0x6CFD}, //{0xE6, 0xB3, 0xBD}, // �� + {0xBDE0, 0x6D01}, //{0xE6, 0xB4, 0x81}, // �� + {0xD1F3, 0x6D0B}, //{0xE6, 0xB4, 0x8B}, // �� + {0xC8F7, 0x6D12}, //{0xE6, 0xB4, 0x92}, // �� {0xCFB4, 0x6D17}, //{0xE6, 0xB4, 0x97}, // ϴ - {0xC2E5, 0x6D1B}, //{0xE6, 0xB4, 0x9B}, // - {0xB6B4, 0x6D1E}, //{0xE6, 0xB4, 0x9E}, // - {0xBDF2, 0x6D25}, //{0xE6, 0xB4, 0xA5}, // - {0xBAE9, 0x6D2A}, //{0xE6, 0xB4, 0xAA}, // - {0xD6DE, 0x6D32}, //{0xE6, 0xB4, 0xB2}, // - {0xBBEE, 0x6D3B}, //{0xE6, 0xB4, 0xBB}, // - {0xCDDD, 0x6D3C}, //{0xE6, 0xB4, 0xBC}, // + {0xC2E5, 0x6D1B}, //{0xE6, 0xB4, 0x9B}, // �� + {0xB6B4, 0x6D1E}, //{0xE6, 0xB4, 0x9E}, // �� + {0xBDF2, 0x6D25}, //{0xE6, 0xB4, 0xA5}, // �� + {0xBAE9, 0x6D2A}, //{0xE6, 0xB4, 0xAA}, // �� + {0xD6DE, 0x6D32}, //{0xE6, 0xB4, 0xB2}, // �� + {0xBBEE, 0x6D3B}, //{0xE6, 0xB4, 0xBB}, // �� + {0xCDDD, 0x6D3C}, //{0xE6, 0xB4, 0xBC}, // �� {0xC7A2, 0x6D3D}, //{0xE6, 0xB4, 0xBD}, // Ǣ - {0xC5C9, 0x6D3E}, //{0xE6, 0xB4, 0xBE}, // - {0xC1F7, 0x6D41}, //{0xE6, 0xB5, 0x81}, // + {0xC5C9, 0x6D3E}, //{0xE6, 0xB4, 0xBE}, // �� + {0xC1F7, 0x6D41}, //{0xE6, 0xB5, 0x81}, // �� {0xC7B3, 0x6D45}, //{0xE6, 0xB5, 0x85}, // dz - {0xBDAC, 0x6D46}, //{0xE6, 0xB5, 0x86}, // - {0xBDBD, 0x6D47}, //{0xE6, 0xB5, 0x87}, // - {0xD7C7, 0x6D4A}, //{0xE6, 0xB5, 0x8A}, // - {0xB2E2, 0x6D4B}, //{0xE6, 0xB5, 0x8B}, // - {0xBCC3, 0x6D4E}, //{0xE6, 0xB5, 0x8E}, // - {0xBBEB, 0x6D51}, //{0xE6, 0xB5, 0x91}, // + {0xBDAC, 0x6D46}, //{0xE6, 0xB5, 0x86}, // �� + {0xBDBD, 0x6D47}, //{0xE6, 0xB5, 0x87}, // �� + {0xD7C7, 0x6D4A}, //{0xE6, 0xB5, 0x8A}, // �� + {0xB2E2, 0x6D4B}, //{0xE6, 0xB5, 0x8B}, // �� + {0xBCC3, 0x6D4E}, //{0xE6, 0xB5, 0x8E}, // �� + {0xBBEB, 0x6D51}, //{0xE6, 0xB5, 0x91}, // �� {0xC5A8, 0x6D53}, //{0xE6, 0xB5, 0x93}, // Ũ - {0xD5E3, 0x6D59}, //{0xE6, 0xB5, 0x99}, // - {0xC6D6, 0x6D66}, //{0xE6, 0xB5, 0xA6}, // - {0xBAC6, 0x6D69}, //{0xE6, 0xB5, 0xA9}, // - {0xC0CB, 0x6D6A}, //{0xE6, 0xB5, 0xAA}, // - {0xB8A1, 0x6D6E}, //{0xE6, 0xB5, 0xAE}, // + {0xD5E3, 0x6D59}, //{0xE6, 0xB5, 0x99}, // �� + {0xC6D6, 0x6D66}, //{0xE6, 0xB5, 0xA6}, // �� + {0xBAC6, 0x6D69}, //{0xE6, 0xB5, 0xA9}, // �� + {0xC0CB, 0x6D6A}, //{0xE6, 0xB5, 0xAA}, // �� + {0xB8A1, 0x6D6E}, //{0xE6, 0xB5, 0xAE}, // �� {0xD4A1, 0x6D74}, //{0xE6, 0xB5, 0xB4}, // ԡ - {0xBAA3, 0x6D77}, //{0xE6, 0xB5, 0xB7}, // - {0xBDFE, 0x6D78}, //{0xE6, 0xB5, 0xB8}, // + {0xBAA3, 0x6D77}, //{0xE6, 0xB5, 0xB7}, // �� + {0xBDFE, 0x6D78}, //{0xE6, 0xB5, 0xB8}, // �� {0xCDBF, 0x6D82}, //{0xE6, 0xB6, 0x82}, // Ϳ - {0xCFFB, 0x6D88}, //{0xE6, 0xB6, 0x88}, // - {0xC9E6, 0x6D89}, //{0xE6, 0xB6, 0x89}, // + {0xCFFB, 0x6D88}, //{0xE6, 0xB6, 0x88}, // �� + {0xC9E6, 0x6D89}, //{0xE6, 0xB6, 0x89}, // �� {0xD3BF, 0x6D8C}, //{0xE6, 0xB6, 0x8C}, // ӿ - {0xCFD1, 0x6D8E}, //{0xE6, 0xB6, 0x8E}, // - {0xCCE9, 0x6D95}, //{0xE6, 0xB6, 0x95}, // - {0xCCCE, 0x6D9B}, //{0xE6, 0xB6, 0x9B}, // - {0xC0D4, 0x6D9D}, //{0xE6, 0xB6, 0x9D}, // - {0xCED0, 0x6DA1}, //{0xE6, 0xB6, 0xA1}, // - {0xBBC1, 0x6DA3}, //{0xE6, 0xB6, 0xA3}, // - {0xB5D3, 0x6DA4}, //{0xE6, 0xB6, 0xA4}, // - {0xC8F3, 0x6DA6}, //{0xE6, 0xB6, 0xA6}, // - {0xBDA7, 0x6DA7}, //{0xE6, 0xB6, 0xA7}, // - {0xD5C7, 0x6DA8}, //{0xE6, 0xB6, 0xA8}, // + {0xCFD1, 0x6D8E}, //{0xE6, 0xB6, 0x8E}, // �� + {0xCCE9, 0x6D95}, //{0xE6, 0xB6, 0x95}, // �� + {0xCCCE, 0x6D9B}, //{0xE6, 0xB6, 0x9B}, // �� + {0xC0D4, 0x6D9D}, //{0xE6, 0xB6, 0x9D}, // �� + {0xCED0, 0x6DA1}, //{0xE6, 0xB6, 0xA1}, // �� + {0xBBC1, 0x6DA3}, //{0xE6, 0xB6, 0xA3}, // �� + {0xB5D3, 0x6DA4}, //{0xE6, 0xB6, 0xA4}, // �� + {0xC8F3, 0x6DA6}, //{0xE6, 0xB6, 0xA6}, // �� + {0xBDA7, 0x6DA7}, //{0xE6, 0xB6, 0xA7}, // �� + {0xD5C7, 0x6DA8}, //{0xE6, 0xB6, 0xA8}, // �� {0xC9AC, 0x6DA9}, //{0xE6, 0xB6, 0xA9}, // ɬ - {0xE4CC, 0x6DAE}, //{0xE6, 0xB6, 0xAE}, // - {0xD1C4, 0x6DAF}, //{0xE6, 0xB6, 0xAF}, // + {0xE4CC, 0x6DAE}, //{0xE6, 0xB6, 0xAE}, // �� + {0xD1C4, 0x6DAF}, //{0xE6, 0xB6, 0xAF}, // �� {0xD2BA, 0x6DB2}, //{0xE6, 0xB6, 0xB2}, // Һ - {0xBAAD, 0x6DB5}, //{0xE6, 0xB6, 0xB5}, // - {0xB5ED, 0x6DC0}, //{0xE6, 0xB7, 0x80}, // - {0xCFFD, 0x6DC6}, //{0xE6, 0xB7, 0x86}, // - {0xC1DC, 0x6DCB}, //{0xE6, 0xB7, 0x8B}, // - {0xCCCA, 0x6DCC}, //{0xE6, 0xB7, 0x8C}, // - {0xCAE7, 0x6DD1}, //{0xE6, 0xB7, 0x91}, // - {0xCCD4, 0x6DD8}, //{0xE6, 0xB7, 0x98}, // - {0xB5AD, 0x6DE1}, //{0xE6, 0xB7, 0xA1}, // - {0xD3D9, 0x6DE4}, //{0xE6, 0xB7, 0xA4}, // - {0xD2F9, 0x6DEB}, //{0xE6, 0xB7, 0xAB}, // - {0xBBB4, 0x6DEE}, //{0xE6, 0xB7, 0xAE}, // - {0xC9EE, 0x6DF1}, //{0xE6, 0xB7, 0xB1}, // - {0xB4BE, 0x6DF3}, //{0xE6, 0xB7, 0xB3}, // - {0xBBEC, 0x6DF7}, //{0xE6, 0xB7, 0xB7}, // - {0xD1CD, 0x6DF9}, //{0xE6, 0xB7, 0xB9}, // - {0xCCED, 0x6DFB}, //{0xE6, 0xB7, 0xBB}, // - {0xC7E5, 0x6E05}, //{0xE6, 0xB8, 0x85}, // + {0xBAAD, 0x6DB5}, //{0xE6, 0xB6, 0xB5}, // �� + {0xB5ED, 0x6DC0}, //{0xE6, 0xB7, 0x80}, // �� + {0xCFFD, 0x6DC6}, //{0xE6, 0xB7, 0x86}, // �� + {0xC1DC, 0x6DCB}, //{0xE6, 0xB7, 0x8B}, // �� + {0xCCCA, 0x6DCC}, //{0xE6, 0xB7, 0x8C}, // �� + {0xCAE7, 0x6DD1}, //{0xE6, 0xB7, 0x91}, // �� + {0xCCD4, 0x6DD8}, //{0xE6, 0xB7, 0x98}, // �� + {0xB5AD, 0x6DE1}, //{0xE6, 0xB7, 0xA1}, // �� + {0xD3D9, 0x6DE4}, //{0xE6, 0xB7, 0xA4}, // �� + {0xD2F9, 0x6DEB}, //{0xE6, 0xB7, 0xAB}, // �� + {0xBBB4, 0x6DEE}, //{0xE6, 0xB7, 0xAE}, // �� + {0xC9EE, 0x6DF1}, //{0xE6, 0xB7, 0xB1}, // �� + {0xB4BE, 0x6DF3}, //{0xE6, 0xB7, 0xB3}, // �� + {0xBBEC, 0x6DF7}, //{0xE6, 0xB7, 0xB7}, // �� + {0xD1CD, 0x6DF9}, //{0xE6, 0xB7, 0xB9}, // �� + {0xCCED, 0x6DFB}, //{0xE6, 0xB7, 0xBB}, // �� + {0xC7E5, 0x6E05}, //{0xE6, 0xB8, 0x85}, // �� {0xD4A8, 0x6E0A}, //{0xE6, 0xB8, 0x8A}, // Ԩ - {0xBDA5, 0x6E10}, //{0xE6, 0xB8, 0x90}, // - {0xD3E6, 0x6E14}, //{0xE6, 0xB8, 0x94}, // - {0xC9F8, 0x6E17}, //{0xE6, 0xB8, 0x97}, // - {0xC7FE, 0x6E20}, //{0xE6, 0xB8, 0xA0}, // - {0xB6C9, 0x6E21}, //{0xE6, 0xB8, 0xA1}, // - {0xD4FC, 0x6E23}, //{0xE6, 0xB8, 0xA3}, // - {0xB2B3, 0x6E24}, //{0xE6, 0xB8, 0xA4}, // - {0xCEC2, 0x6E29}, //{0xE6, 0xB8, 0xA9}, // - {0xB8DB, 0x6E2F}, //{0xE6, 0xB8, 0xAF}, // - {0xBFCA, 0x6E34}, //{0xE6, 0xB8, 0xB4}, // - {0xD3CE, 0x6E38}, //{0xE6, 0xB8, 0xB8}, // - {0xC3EC, 0x6E3A}, //{0xE6, 0xB8, 0xBA}, // - {0xC5C8, 0x6E43}, //{0xE6, 0xB9, 0x83}, // - {0xBAFE, 0x6E56}, //{0xE6, 0xB9, 0x96}, // - {0xCFE6, 0x6E58}, //{0xE6, 0xB9, 0x98}, // - {0xCDE5, 0x6E7E}, //{0xE6, 0xB9, 0xBE}, // + {0xBDA5, 0x6E10}, //{0xE6, 0xB8, 0x90}, // �� + {0xD3E6, 0x6E14}, //{0xE6, 0xB8, 0x94}, // �� + {0xC9F8, 0x6E17}, //{0xE6, 0xB8, 0x97}, // �� + {0xC7FE, 0x6E20}, //{0xE6, 0xB8, 0xA0}, // �� + {0xB6C9, 0x6E21}, //{0xE6, 0xB8, 0xA1}, // �� + {0xD4FC, 0x6E23}, //{0xE6, 0xB8, 0xA3}, // �� + {0xB2B3, 0x6E24}, //{0xE6, 0xB8, 0xA4}, // �� + {0xCEC2, 0x6E29}, //{0xE6, 0xB8, 0xA9}, // �� + {0xB8DB, 0x6E2F}, //{0xE6, 0xB8, 0xAF}, // �� + {0xBFCA, 0x6E34}, //{0xE6, 0xB8, 0xB4}, // �� + {0xD3CE, 0x6E38}, //{0xE6, 0xB8, 0xB8}, // �� + {0xC3EC, 0x6E3A}, //{0xE6, 0xB8, 0xBA}, // �� + {0xC5C8, 0x6E43}, //{0xE6, 0xB9, 0x83}, // �� + {0xBAFE, 0x6E56}, //{0xE6, 0xB9, 0x96}, // �� + {0xCFE6, 0x6E58}, //{0xE6, 0xB9, 0x98}, // �� + {0xCDE5, 0x6E7E}, //{0xE6, 0xB9, 0xBE}, // �� {0xCAAA, 0x6E7F}, //{0xE6, 0xB9, 0xBF}, // ʪ - {0xC0A3, 0x6E83}, //{0xE6, 0xBA, 0x83}, // - {0xBDA6, 0x6E85}, //{0xE6, 0xBA, 0x85}, // - {0xB8C8, 0x6E89}, //{0xE6, 0xBA, 0x89}, // + {0xC0A3, 0x6E83}, //{0xE6, 0xBA, 0x83}, // # + {0xBDA6, 0x6E85}, //{0xE6, 0xBA, 0x85}, // �� + {0xB8C8, 0x6E89}, //{0xE6, 0xBA, 0x89}, // �� {0xD4B4, 0x6E90}, //{0xE6, 0xBA, 0x90}, // Դ - {0xC1EF, 0x6E9C}, //{0xE6, 0xBA, 0x9C}, // - {0xD2E7, 0x6EA2}, //{0xE6, 0xBA, 0xA2}, // + {0xC1EF, 0x6E9C}, //{0xE6, 0xBA, 0x9C}, // �� + {0xD2E7, 0x6EA2}, //{0xE6, 0xBA, 0xA2}, // �� {0xCFAA, 0x6EAA}, //{0xE6, 0xBA, 0xAA}, // Ϫ - {0xCBDD, 0x6EAF}, //{0xE6, 0xBA, 0xAF}, // - {0xC8DC, 0x6EB6}, //{0xE6, 0xBA, 0xB6}, // - {0xC4E7, 0x6EBA}, //{0xE6, 0xBA, 0xBA}, // - {0xD7CC, 0x6ECB}, //{0xE6, 0xBB, 0x8B}, // - {0xBBAC, 0x6ED1}, //{0xE6, 0xBB, 0x91}, // - {0xD7D2, 0x6ED3}, //{0xE6, 0xBB, 0x93}, // - {0xCCCF, 0x6ED4}, //{0xE6, 0xBB, 0x94}, // - {0xB9F6, 0x6EDA}, //{0xE6, 0xBB, 0x9A}, // - {0xD6CD, 0x6EDE}, //{0xE6, 0xBB, 0x9E}, // - {0xC2FA, 0x6EE1}, //{0xE6, 0xBB, 0xA1}, // - {0xC2CB, 0x6EE4}, //{0xE6, 0xBB, 0xA4}, // - {0xC0C4, 0x6EE5}, //{0xE6, 0xBB, 0xA5}, // - {0xB1F5, 0x6EE8}, //{0xE6, 0xBB, 0xA8}, // + {0xCBDD, 0x6EAF}, //{0xE6, 0xBA, 0xAF}, // �� + {0xC8DC, 0x6EB6}, //{0xE6, 0xBA, 0xB6}, // �� + {0xC4E7, 0x6EBA}, //{0xE6, 0xBA, 0xBA}, // �� + {0xD7CC, 0x6ECB}, //{0xE6, 0xBB, 0x8B}, // �� + {0xBBAC, 0x6ED1}, //{0xE6, 0xBB, 0x91}, // �� + {0xD7D2, 0x6ED3}, //{0xE6, 0xBB, 0x93}, // �� + {0xCCCF, 0x6ED4}, //{0xE6, 0xBB, 0x94}, // �� + {0xB9F6, 0x6EDA}, //{0xE6, 0xBB, 0x9A}, // �� + {0xD6CD, 0x6EDE}, //{0xE6, 0xBB, 0x9E}, // �� + {0xC2FA, 0x6EE1}, //{0xE6, 0xBB, 0xA1}, // �� + {0xC2CB, 0x6EE4}, //{0xE6, 0xBB, 0xA4}, // �� + {0xC0C4, 0x6EE5}, //{0xE6, 0xBB, 0xA5}, // �� + {0xB1F5, 0x6EE8}, //{0xE6, 0xBB, 0xA8}, // �� {0xCCB2, 0x6EE9}, //{0xE6, 0xBB, 0xA9}, // ̲ - {0xB5CE, 0x6EF4}, //{0xE6, 0xBB, 0xB4}, // + {0xB5CE, 0x6EF4}, //{0xE6, 0xBB, 0xB4}, // �� {0xC6AF, 0x6F02}, //{0xE6, 0xBC, 0x82}, // Ư - {0xC6E1, 0x6F06}, //{0xE6, 0xBC, 0x86}, // + {0xC6E1, 0x6F06}, //{0xE6, 0xBC, 0x86}, // �� {0xC2A9, 0x6F0F}, //{0xE6, 0xBC, 0x8F}, // © - {0xC0EC, 0x6F13}, //{0xE6, 0xBC, 0x93}, // - {0xD1DD, 0x6F14}, //{0xE6, 0xBC, 0x94}, // + {0xC0EC, 0x6F13}, //{0xE6, 0xBC, 0x93}, // �� + {0xD1DD, 0x6F14}, //{0xE6, 0xBC, 0x94}, // �� {0xC4AE, 0x6F20}, //{0xE6, 0xBC, 0xA0}, // Į - {0xE4F6, 0x6F29}, //{0xE6, 0xBC, 0xA9}, // - {0xC2FE, 0x6F2B}, //{0xE6, 0xBC, 0xAB}, // - {0xCAFE, 0x6F31}, //{0xE6, 0xBC, 0xB1}, // - {0xD1FA, 0x6F3E}, //{0xE6, 0xBC, 0xBE}, // - {0xC5CB, 0x6F58}, //{0xE6, 0xBD, 0x98}, // + {0xE4F6, 0x6F29}, //{0xE6, 0xBC, 0xA9}, // �� + {0xC2FE, 0x6F2B}, //{0xE6, 0xBC, 0xAB}, // �� + {0xCAFE, 0x6F31}, //{0xE6, 0xBC, 0xB1}, // �� + {0xD1FA, 0x6F3E}, //{0xE6, 0xBC, 0xBE}, // �� + {0xC5CB, 0x6F58}, //{0xE6, 0xBD, 0x98}, // �� {0xC7B1, 0x6F5C}, //{0xE6, 0xBD, 0x9C}, // DZ - {0xC1CA, 0x6F66}, //{0xE6, 0xBD, 0xA6}, // + {0xC1CA, 0x6F66}, //{0xE6, 0xBD, 0xA6}, // �� {0xCCB6, 0x6F6D}, //{0xE6, 0xBD, 0xAD}, // ̶ - {0xB3B1, 0x6F6E}, //{0xE6, 0xBD, 0xAE}, // - {0xB3CE, 0x6F84}, //{0xE6, 0xBE, 0x84}, // - {0xB3BA, 0x6F88}, //{0xE6, 0xBE, 0x88}, // - {0xC5EC, 0x6F8E}, //{0xE6, 0xBE, 0x8E}, // - {0xC0BD, 0x6F9C}, //{0xE6, 0xBE, 0x9C}, // - {0xD4E8, 0x6FA1}, //{0xE6, 0xBE, 0xA1}, // - {0xB0C4, 0x6FB3}, //{0xE6, 0xBE, 0xB3}, // - {0xBCA4, 0x6FC0}, //{0xE6, 0xBF, 0x80}, // - {0xB1F4, 0x6FD2}, //{0xE6, 0xBF, 0x92}, // - {0xC6D9, 0x7011}, //{0xE7, 0x80, 0x91}, // - {0xB9E0, 0x704C}, //{0xE7, 0x81, 0x8C}, // - {0xBBF0, 0x706B}, //{0xE7, 0x81, 0xAB}, // - {0xC3F0, 0x706D}, //{0xE7, 0x81, 0xAD}, // - {0xB5C6, 0x706F}, //{0xE7, 0x81, 0xAF}, // - {0xBBD2, 0x7070}, //{0xE7, 0x81, 0xB0}, // - {0xC1E9, 0x7075}, //{0xE7, 0x81, 0xB5}, // - {0xD4EE, 0x7076}, //{0xE7, 0x81, 0xB6}, // - {0xBEC4, 0x7078}, //{0xE7, 0x81, 0xB8}, // - {0xD7C6, 0x707C}, //{0xE7, 0x81, 0xBC}, // - {0xD4D6, 0x707E}, //{0xE7, 0x81, 0xBE}, // - {0xB2D3, 0x707F}, //{0xE7, 0x81, 0xBF}, // + {0xB3B1, 0x6F6E}, //{0xE6, 0xBD, 0xAE}, // �� + {0xB3CE, 0x6F84}, //{0xE6, 0xBE, 0x84}, // �� + {0xB3BA, 0x6F88}, //{0xE6, 0xBE, 0x88}, // �� + {0xC5EC, 0x6F8E}, //{0xE6, 0xBE, 0x8E}, // �� + {0xC0BD, 0x6F9C}, //{0xE6, 0xBE, 0x9C}, // = + {0xD4E8, 0x6FA1}, //{0xE6, 0xBE, 0xA1}, // �� + {0xB0C4, 0x6FB3}, //{0xE6, 0xBE, 0xB3}, // �� + {0xBCA4, 0x6FC0}, //{0xE6, 0xBF, 0x80}, // �� + {0xB1F4, 0x6FD2}, //{0xE6, 0xBF, 0x92}, // �� + {0xC6D9, 0x7011}, //{0xE7, 0x80, 0x91}, // �� + {0xB9E0, 0x704C}, //{0xE7, 0x81, 0x8C}, // �� + {0xBBF0, 0x706B}, //{0xE7, 0x81, 0xAB}, // �� + {0xC3F0, 0x706D}, //{0xE7, 0x81, 0xAD}, // �� + {0xB5C6, 0x706F}, //{0xE7, 0x81, 0xAF}, // �� + {0xBBD2, 0x7070}, //{0xE7, 0x81, 0xB0}, // �� + {0xC1E9, 0x7075}, //{0xE7, 0x81, 0xB5}, // �� + {0xD4EE, 0x7076}, //{0xE7, 0x81, 0xB6}, // �� + {0xBEC4, 0x7078}, //{0xE7, 0x81, 0xB8}, // �� + {0xD7C6, 0x707C}, //{0xE7, 0x81, 0xBC}, // �� + {0xD4D6, 0x707E}, //{0xE7, 0x81, 0xBE}, // �� + {0xB2D3, 0x707F}, //{0xE7, 0x81, 0xBF}, // �� {0xC2AF, 0x7089}, //{0xE7, 0x82, 0x89}, // ¯ - {0xB4B6, 0x708A}, //{0xE7, 0x82, 0x8A}, // - {0xD1D7, 0x708E}, //{0xE7, 0x82, 0x8E}, // - {0xB3B4, 0x7092}, //{0xE7, 0x82, 0x92}, // - {0xBFBB, 0x7095}, //{0xE7, 0x82, 0x95}, // - {0xECC5, 0x70AB}, //{0xE7, 0x82, 0xAB}, // - {0xBEE6, 0x70AC}, //{0xE7, 0x82, 0xAC}, // + {0xB4B6, 0x708A}, //{0xE7, 0x82, 0x8A}, // �� + {0xD1D7, 0x708E}, //{0xE7, 0x82, 0x8E}, // �� + {0xB3B4, 0x7092}, //{0xE7, 0x82, 0x92}, // �� + {0xBFBB, 0x7095}, //{0xE7, 0x82, 0x95}, // �� + {0xECC5, 0x70AB}, //{0xE7, 0x82, 0xAB}, // �� + {0xBEE6, 0x70AC}, //{0xE7, 0x82, 0xAC}, // �� {0xCCBF, 0x70AD}, //{0xE7, 0x82, 0xAD}, // ̿ - {0xC5DA, 0x70AE}, //{0xE7, 0x82, 0xAE}, // + {0xC5DA, 0x70AE}, //{0xE7, 0x82, 0xAE}, // �� {0xD5A8, 0x70B8}, //{0xE7, 0x82, 0xB8}, // ը - {0xB5E3, 0x70B9}, //{0xE7, 0x82, 0xB9}, // - {0xC1B6, 0x70BC}, //{0xE7, 0x82, 0xBC}, // + {0xB5E3, 0x70B9}, //{0xE7, 0x82, 0xB9}, // �� + {0xC1B6, 0x70BC}, //{0xE7, 0x82, 0xBC}, // �� {0xCBB8, 0x70C1}, //{0xE7, 0x83, 0x81}, // ˸ - {0xC0C3, 0x70C2}, //{0xE7, 0x83, 0x82}, // - {0xC1D2, 0x70C8}, //{0xE7, 0x83, 0x88}, // - {0xBAE6, 0x70D8}, //{0xE7, 0x83, 0x98}, // - {0xC0D3, 0x70D9}, //{0xE7, 0x83, 0x99}, // - {0xD6F2, 0x70DB}, //{0xE7, 0x83, 0x9B}, // - {0xD1CC, 0x70DF}, //{0xE7, 0x83, 0x9F}, // - {0xBFBE, 0x70E4}, //{0xE7, 0x83, 0xA4}, // - {0xB7B3, 0x70E6}, //{0xE7, 0x83, 0xA6}, // - {0xC9D5, 0x70E7}, //{0xE7, 0x83, 0xA7}, // - {0xCCCC, 0x70EB}, //{0xE7, 0x83, 0xAB}, // - {0xC8C8, 0x70ED}, //{0xE7, 0x83, 0xAD}, // - {0xC5EB, 0x70F9}, //{0xE7, 0x83, 0xB9}, // - {0xBAB8, 0x710A}, //{0xE7, 0x84, 0x8A}, // - {0xBBC0, 0x7115}, //{0xE7, 0x84, 0x95}, // - {0xB1BA, 0x7119}, //{0xE7, 0x84, 0x99}, // - {0xB7D9, 0x711A}, //{0xE7, 0x84, 0x9A}, // - {0xBDB9, 0x7126}, //{0xE7, 0x84, 0xA6}, // - {0xD1E6, 0x7130}, //{0xE7, 0x84, 0xB0}, // + {0xC0C3, 0x70C2}, //{0xE7, 0x83, 0x82}, // �� + {0xC1D2, 0x70C8}, //{0xE7, 0x83, 0x88}, // �� + {0xBAE6, 0x70D8}, //{0xE7, 0x83, 0x98}, // �� + {0xC0D3, 0x70D9}, //{0xE7, 0x83, 0x99}, // �� + {0xD6F2, 0x70DB}, //{0xE7, 0x83, 0x9B}, // �� + {0xD1CC, 0x70DF}, //{0xE7, 0x83, 0x9F}, // �� + {0xBFBE, 0x70E4}, //{0xE7, 0x83, 0xA4}, // �� + {0xB7B3, 0x70E6}, //{0xE7, 0x83, 0xA6}, // �� + {0xC9D5, 0x70E7}, //{0xE7, 0x83, 0xA7}, // �� + {0xCCCC, 0x70EB}, //{0xE7, 0x83, 0xAB}, // �� + {0xC8C8, 0x70ED}, //{0xE7, 0x83, 0xAD}, // �� + {0xC5EB, 0x70F9}, //{0xE7, 0x83, 0xB9}, // �� + {0xBAB8, 0x710A}, //{0xE7, 0x84, 0x8A}, // �� + {0xBBC0, 0x7115}, //{0xE7, 0x84, 0x95}, // �� + {0xB1BA, 0x7119}, //{0xE7, 0x84, 0x99}, // �� + {0xB7D9, 0x711A}, //{0xE7, 0x84, 0x9A}, // �� + {0xBDB9, 0x7126}, //{0xE7, 0x84, 0xA6}, // �� + {0xD1E6, 0x7130}, //{0xE7, 0x84, 0xB0}, // �� {0xC8BB, 0x7136}, //{0xE7, 0x84, 0xB6}, // Ȼ - {0xBBCD, 0x714C}, //{0xE7, 0x85, 0x8C}, // - {0xBCE5, 0x714E}, //{0xE7, 0x85, 0x8E}, // + {0xBBCD, 0x714C}, //{0xE7, 0x85, 0x8C}, // �� + {0xBCE5, 0x714E}, //{0xE7, 0x85, 0x8E}, // �� {0xC9B7, 0x715E}, //{0xE7, 0x85, 0x9E}, // ɷ {0xC3BA, 0x7164}, //{0xE7, 0x85, 0xA4}, // ú - {0xD5D5, 0x7167}, //{0xE7, 0x85, 0xA7}, // - {0xD6F3, 0x716E}, //{0xE7, 0x85, 0xAE}, // + {0xD5D5, 0x7167}, //{0xE7, 0x85, 0xA7}, // �� + {0xD6F3, 0x716E}, //{0xE7, 0x85, 0xAE}, // �� {0xCFA8, 0x7184}, //{0xE7, 0x86, 0x84}, // Ϩ - {0xD0DC, 0x718A}, //{0xE7, 0x86, 0x8A}, // + {0xD0DC, 0x718A}, //{0xE7, 0x86, 0x8A}, // �� {0xD1AC, 0x718F}, //{0xE7, 0x86, 0x8F}, // Ѭ - {0xC8DB, 0x7194}, //{0xE7, 0x86, 0x94}, // - {0xCEF5, 0x7199}, //{0xE7, 0x86, 0x99}, // - {0xCAEC, 0x719F}, //{0xE7, 0x86, 0x9F}, // - {0xB0BE, 0x71AC}, //{0xE7, 0x86, 0xAC}, // + {0xC8DB, 0x7194}, //{0xE7, 0x86, 0x94}, // �� + {0xCEF5, 0x7199}, //{0xE7, 0x86, 0x99}, // �� + {0xCAEC, 0x719F}, //{0xE7, 0x86, 0x9F}, // �� + {0xB0BE, 0x71AC}, //{0xE7, 0x86, 0xAC}, // �� {0xC8BC, 0x71C3}, //{0xE7, 0x87, 0x83}, // ȼ - {0xC1C7, 0x71CE}, //{0xE7, 0x87, 0x8E}, // - {0xD1E0, 0x71D5}, //{0xE7, 0x87, 0x95}, // - {0xD4EF, 0x71E5}, //{0xE7, 0x87, 0xA5}, // - {0xB1AC, 0x7206}, //{0xE7, 0x88, 0x86}, // + {0xC1C7, 0x71CE}, //{0xE7, 0x87, 0x8E}, // �� + {0xD1E0, 0x71D5}, //{0xE7, 0x87, 0x95}, // �� + {0xD4EF, 0x71E5}, //{0xE7, 0x87, 0xA5}, // �� + {0xB1AC, 0x7206}, //{0xE7, 0x88, 0x86}, // �� {0xD7A6, 0x722A}, //{0xE7, 0x88, 0xAA}, // צ - {0xC5C0, 0x722C}, //{0xE7, 0x88, 0xAC}, // - {0xB0AE, 0x7231}, //{0xE7, 0x88, 0xB1}, // - {0xBEF4, 0x7235}, //{0xE7, 0x88, 0xB5}, // - {0xB8B8, 0x7236}, //{0xE7, 0x88, 0xB6}, // + {0xC5C0, 0x722C}, //{0xE7, 0x88, 0xAC}, // �� + {0xB0AE, 0x7231}, //{0xE7, 0x88, 0xB1}, // �� + {0xBEF4, 0x7235}, //{0xE7, 0x88, 0xB5}, // �� + {0xB8B8, 0x7236}, //{0xE7, 0x88, 0xB6}, // �� {0xD2AF, 0x7237}, //{0xE7, 0x88, 0xB7}, // ү - {0xB0D6, 0x7238}, //{0xE7, 0x88, 0xB8}, // - {0xB5F9, 0x7239}, //{0xE7, 0x88, 0xB9}, // + {0xB0D6, 0x7238}, //{0xE7, 0x88, 0xB8}, // �� + {0xB5F9, 0x7239}, //{0xE7, 0x88, 0xB9}, // �� {0xCBAC, 0x723D}, //{0xE7, 0x88, 0xBD}, // ˬ {0xC6AC, 0x7247}, //{0xE7, 0x89, 0x87}, // Ƭ - {0xB0E6, 0x7248}, //{0xE7, 0x89, 0x88}, // - {0xC5C6, 0x724C}, //{0xE7, 0x89, 0x8C}, // - {0xEBB9, 0x724D}, //{0xE7, 0x89, 0x8D}, // - {0xD1C0, 0x7259}, //{0xE7, 0x89, 0x99}, // + {0xB0E6, 0x7248}, //{0xE7, 0x89, 0x88}, // �� + {0xC5C6, 0x724C}, //{0xE7, 0x89, 0x8C}, // �� + {0xEBB9, 0x724D}, //{0xE7, 0x89, 0x8D}, // � + {0xD1C0, 0x7259}, //{0xE7, 0x89, 0x99}, // �� {0xC5A3, 0x725B}, //{0xE7, 0x89, 0x9B}, // ţ {0xC4B5, 0x7261}, //{0xE7, 0x89, 0xA1}, // ĵ - {0xC0CE, 0x7262}, //{0xE7, 0x89, 0xA2}, // - {0xC4C1, 0x7267}, //{0xE7, 0x89, 0xA7}, // - {0xCEEF, 0x7269}, //{0xE7, 0x89, 0xA9}, // - {0xC9FC, 0x7272}, //{0xE7, 0x89, 0xB2}, // + {0xC0CE, 0x7262}, //{0xE7, 0x89, 0xA2}, // �� + {0xC4C1, 0x7267}, //{0xE7, 0x89, 0xA7}, // �� + {0xCEEF, 0x7269}, //{0xE7, 0x89, 0xA9}, // �� + {0xC9FC, 0x7272}, //{0xE7, 0x89, 0xB2}, // �� {0xC7A3, 0x7275}, //{0xE7, 0x89, 0xB5}, // ǣ - {0xCCD8, 0x7279}, //{0xE7, 0x89, 0xB9}, // - {0xCEFE, 0x727A}, //{0xE7, 0x89, 0xBA}, // + {0xCCD8, 0x7279}, //{0xE7, 0x89, 0xB9}, // �� + {0xCEFE, 0x727A}, //{0xE7, 0x89, 0xBA}, // �� {0xCFAC, 0x7280}, //{0xE7, 0x8A, 0x80}, // Ϭ - {0xC0E7, 0x7281}, //{0xE7, 0x8A, 0x81}, // + {0xC0E7, 0x7281}, //{0xE7, 0x8A, 0x81}, // �� {0xC8AE, 0x72AC}, //{0xE7, 0x8A, 0xAC}, // Ȯ - {0xB7B8, 0x72AF}, //{0xE7, 0x8A, 0xAF}, // + {0xB7B8, 0x72AF}, //{0xE7, 0x8A, 0xAF}, // �� {0xD7B4, 0x72B6}, //{0xE7, 0x8A, 0xB6}, // ״ - {0xD3CC, 0x72B9}, //{0xE7, 0x8A, 0xB9}, // - {0xBFF1, 0x72C2}, //{0xE7, 0x8B, 0x82}, // - {0xB1B7, 0x72C8}, //{0xE7, 0x8B, 0x88}, // - {0xBAFC, 0x72D0}, //{0xE7, 0x8B, 0x90}, // - {0xB9B7, 0x72D7}, //{0xE7, 0x8B, 0x97}, // - {0xC4FC, 0x72DE}, //{0xE7, 0x8B, 0x9E}, // - {0xBADD, 0x72E0}, //{0xE7, 0x8B, 0xA0}, // - {0xBDC6, 0x72E1}, //{0xE7, 0x8B, 0xA1}, // - {0xB6C0, 0x72EC}, //{0xE7, 0x8B, 0xAC}, // - {0xCFC1, 0x72ED}, //{0xE7, 0x8B, 0xAD}, // + {0xD3CC, 0x72B9}, //{0xE7, 0x8A, 0xB9}, // �� + {0xBFF1, 0x72C2}, //{0xE7, 0x8B, 0x82}, // �� + {0xB1B7, 0x72C8}, //{0xE7, 0x8B, 0x88}, // �� + {0xBAFC, 0x72D0}, //{0xE7, 0x8B, 0x90}, // �� + {0xB9B7, 0x72D7}, //{0xE7, 0x8B, 0x97}, // �� + {0xC4FC, 0x72DE}, //{0xE7, 0x8B, 0x9E}, // �� + {0xBADD, 0x72E0}, //{0xE7, 0x8B, 0xA0}, // �� + {0xBDC6, 0x72E1}, //{0xE7, 0x8B, 0xA1}, // �� + {0xB6C0, 0x72EC}, //{0xE7, 0x8B, 0xAC}, // �� + {0xCFC1, 0x72ED}, //{0xE7, 0x8B, 0xAD}, // �� {0xCAA8, 0x72EE}, //{0xE7, 0x8B, 0xAE}, // ʨ - {0xD5F8, 0x72F0}, //{0xE7, 0x8B, 0xB0}, // - {0xD3FC, 0x72F1}, //{0xE7, 0x8B, 0xB1}, // - {0xC0EA, 0x72F8}, //{0xE7, 0x8B, 0xB8}, // - {0xC0C7, 0x72FC}, //{0xE7, 0x8B, 0xBC}, // - {0xC1D4, 0x730E}, //{0xE7, 0x8C, 0x8E}, // - {0xB2FE, 0x7316}, //{0xE7, 0x8C, 0x96}, // - {0xC3CD, 0x731B}, //{0xE7, 0x8C, 0x9B}, // - {0xB2C2, 0x731C}, //{0xE7, 0x8C, 0x9C}, // - {0xD0C9, 0x7329}, //{0xE7, 0x8C, 0xA9}, // - {0xD6ED, 0x732A}, //{0xE7, 0x8C, 0xAA}, // + {0xD5F8, 0x72F0}, //{0xE7, 0x8B, 0xB0}, // �� + {0xD3FC, 0x72F1}, //{0xE7, 0x8B, 0xB1}, // �� + {0xC0EA, 0x72F8}, //{0xE7, 0x8B, 0xB8}, // �� + {0xC0C7, 0x72FC}, //{0xE7, 0x8B, 0xBC}, // �� + {0xC1D4, 0x730E}, //{0xE7, 0x8C, 0x8E}, // �� + {0xB2FE, 0x7316}, //{0xE7, 0x8C, 0x96}, // �� + {0xC3CD, 0x731B}, //{0xE7, 0x8C, 0x9B}, // �� + {0xB2C2, 0x731C}, //{0xE7, 0x8C, 0x9C}, // �� + {0xD0C9, 0x7329}, //{0xE7, 0x8C, 0xA9}, // �� + {0xD6ED, 0x732A}, //{0xE7, 0x8C, 0xAA}, // �� {0xC3A8, 0x732B}, //{0xE7, 0x8C, 0xAB}, // è - {0xE2AC, 0x732C}, //{0xE7, 0x8C, 0xAC}, // - {0xCFD7, 0x732E}, //{0xE7, 0x8C, 0xAE}, // - {0xBAEF, 0x7334}, //{0xE7, 0x8C, 0xB4}, // - {0xBBAB, 0x733E}, //{0xE7, 0x8C, 0xBE}, // + {0xE2AC, 0x732C}, //{0xE7, 0x8C, 0xAC}, // � + {0xCFD7, 0x732E}, //{0xE7, 0x8C, 0xAE}, // �� + {0xBAEF, 0x7334}, //{0xE7, 0x8C, 0xB4}, // �� + {0xBBAB, 0x733E}, //{0xE7, 0x8C, 0xBE}, // �� {0xD4B3, 0x733F}, //{0xE7, 0x8C, 0xBF}, // Գ - {0xD0FE, 0x7384}, //{0xE7, 0x8E, 0x84}, // - {0xC2CA, 0x7387}, //{0xE7, 0x8E, 0x87}, // - {0xD3F1, 0x7389}, //{0xE7, 0x8E, 0x89}, // - {0xCDF5, 0x738B}, //{0xE7, 0x8E, 0x8B}, // - {0xBEC1, 0x7396}, //{0xE7, 0x8E, 0x96}, // - {0xC2EA, 0x739B}, //{0xE7, 0x8E, 0x9B}, // - {0xCDE6, 0x73A9}, //{0xE7, 0x8E, 0xA9}, // + {0xD0FE, 0x7384}, //{0xE7, 0x8E, 0x84}, // �� + {0xC2CA, 0x7387}, //{0xE7, 0x8E, 0x87}, // �� + {0xD3F1, 0x7389}, //{0xE7, 0x8E, 0x89}, // �� + {0xCDF5, 0x738B}, //{0xE7, 0x8E, 0x8B}, // �� + {0xBEC1, 0x7396}, //{0xE7, 0x8E, 0x96}, // �� + {0xC2EA, 0x739B}, //{0xE7, 0x8E, 0x9B}, // �� + {0xCDE6, 0x73A9}, //{0xE7, 0x8E, 0xA9}, // �� {0xC3B5, 0x73AB}, //{0xE7, 0x8E, 0xAB}, // õ - {0xBBB7, 0x73AF}, //{0xE7, 0x8E, 0xAF}, // - {0xCFD6, 0x73B0}, //{0xE7, 0x8E, 0xB0}, // - {0xC1E1, 0x73B2}, //{0xE7, 0x8E, 0xB2}, // - {0xE7E8, 0x73B7}, //{0xE7, 0x8E, 0xB7}, // - {0xB2A3, 0x73BB}, //{0xE7, 0x8E, 0xBB}, // + {0xBBB7, 0x73AF}, //{0xE7, 0x8E, 0xAF}, // �� + {0xCFD6, 0x73B0}, //{0xE7, 0x8E, 0xB0}, // �� + {0xC1E1, 0x73B2}, //{0xE7, 0x8E, 0xB2}, // �� + {0xE7E8, 0x73B7}, //{0xE7, 0x8E, 0xB7}, // �� + {0xB2A3, 0x73BB}, //{0xE7, 0x8E, 0xBB}, // �� {0xC9BA, 0x73CA}, //{0xE7, 0x8F, 0x8A}, // ɺ - {0xD5E4, 0x73CD}, //{0xE7, 0x8F, 0x8D}, // - {0xD6E9, 0x73E0}, //{0xE7, 0x8F, 0xA0}, // - {0xB0E0, 0x73ED}, //{0xE7, 0x8F, 0xAD}, // - {0xC7F2, 0x7403}, //{0xE7, 0x90, 0x83}, // - {0xC0C5, 0x7405}, //{0xE7, 0x90, 0x85}, // - {0xC0ED, 0x7406}, //{0xE7, 0x90, 0x86}, // - {0xC1F0, 0x7409}, //{0xE7, 0x90, 0x89}, // - {0xCBF6, 0x7410}, //{0xE7, 0x90, 0x90}, // - {0xD7C1, 0x7422}, //{0xE7, 0x90, 0xA2}, // - {0xC1D5, 0x7433}, //{0xE7, 0x90, 0xB3}, // - {0xC7D9, 0x7434}, //{0xE7, 0x90, 0xB4}, // - {0xC7ED, 0x743C}, //{0xE7, 0x90, 0xBC}, // - {0xC8F0, 0x745E}, //{0xE7, 0x91, 0x9E}, // + {0xD5E4, 0x73CD}, //{0xE7, 0x8F, 0x8D}, // �� + {0xD6E9, 0x73E0}, //{0xE7, 0x8F, 0xA0}, // �� + {0xB0E0, 0x73ED}, //{0xE7, 0x8F, 0xAD}, // �� + {0xC7F2, 0x7403}, //{0xE7, 0x90, 0x83}, // �� + {0xC0C5, 0x7405}, //{0xE7, 0x90, 0x85}, // �� + {0xC0ED, 0x7406}, //{0xE7, 0x90, 0x86}, // �� + {0xC1F0, 0x7409}, //{0xE7, 0x90, 0x89}, // �� + {0xCBF6, 0x7410}, //{0xE7, 0x90, 0x90}, // �� + {0xD7C1, 0x7422}, //{0xE7, 0x90, 0xA2}, // �� + {0xC1D5, 0x7433}, //{0xE7, 0x90, 0xB3}, // �� + {0xC7D9, 0x7434}, //{0xE7, 0x90, 0xB4}, // �� + {0xC7ED, 0x743C}, //{0xE7, 0x90, 0xBC}, // �� + {0xC8F0, 0x745E}, //{0xE7, 0x91, 0x9E}, // �� {0xC9AA, 0x745F}, //{0xE7, 0x91, 0x9F}, // ɪ - {0xB9E5, 0x7470}, //{0xE7, 0x91, 0xB0}, // - {0xC1A7, 0x7483}, //{0xE7, 0x92, 0x83}, // - {0xE8B5, 0x74A7}, //{0xE7, 0x92, 0xA7}, // - {0xB9CF, 0x74DC}, //{0xE7, 0x93, 0x9C}, // + {0xB9E5, 0x7470}, //{0xE7, 0x91, 0xB0}, // �� + {0xC1A7, 0x7483}, //{0xE7, 0x92, 0x83}, // �� + {0xE8B5, 0x74A7}, //{0xE7, 0x92, 0xA7}, // � + {0xB9CF, 0x74DC}, //{0xE7, 0x93, 0x9C}, // �� {0xC6B0, 0x74E2}, //{0xE7, 0x93, 0xA2}, // ư - {0xB0EA, 0x74E3}, //{0xE7, 0x93, 0xA3}, // + {0xB0EA, 0x74E3}, //{0xE7, 0x93, 0xA3}, // �� {0xC8BF, 0x74E4}, //{0xE7, 0x93, 0xA4}, // ȿ - {0xCDDF, 0x74E6}, //{0xE7, 0x93, 0xA6}, // - {0xCECD, 0x74EE}, //{0xE7, 0x93, 0xAE}, // + {0xCDDF, 0x74E6}, //{0xE7, 0x93, 0xA6}, // �� + {0xCECD, 0x74EE}, //{0xE7, 0x93, 0xAE}, // �� {0xC6BF, 0x74F6}, //{0xE7, 0x93, 0xB6}, // ƿ - {0xB4C9, 0x74F7}, //{0xE7, 0x93, 0xB7}, // - {0xB8CA, 0x7518}, //{0xE7, 0x94, 0x98}, // - {0xC9F5, 0x751A}, //{0xE7, 0x94, 0x9A}, // - {0xCCF0, 0x751C}, //{0xE7, 0x94, 0x9C}, // - {0xC9FA, 0x751F}, //{0xE7, 0x94, 0x9F}, // - {0xC9FB, 0x7525}, //{0xE7, 0x94, 0xA5}, // - {0xD3C3, 0x7528}, //{0xE7, 0x94, 0xA8}, // + {0xB4C9, 0x74F7}, //{0xE7, 0x93, 0xB7}, // �� + {0xB8CA, 0x7518}, //{0xE7, 0x94, 0x98}, // �� + {0xC9F5, 0x751A}, //{0xE7, 0x94, 0x9A}, // �� + {0xCCF0, 0x751C}, //{0xE7, 0x94, 0x9C}, // �� + {0xC9FA, 0x751F}, //{0xE7, 0x94, 0x9F}, // �� + {0xC9FB, 0x7525}, //{0xE7, 0x94, 0xA5}, // �� + {0xD3C3, 0x7528}, //{0xE7, 0x94, 0xA8}, // �� {0xCBA6, 0x7529}, //{0xE7, 0x94, 0xA9}, // ˦ - {0xB8A6, 0x752B}, //{0xE7, 0x94, 0xAB}, // - {0xCCEF, 0x7530}, //{0xE7, 0x94, 0xB0}, // - {0xD3C9, 0x7531}, //{0xE7, 0x94, 0xB1}, // - {0xBCD7, 0x7532}, //{0xE7, 0x94, 0xB2}, // - {0xC9EA, 0x7533}, //{0xE7, 0x94, 0xB3}, // - {0xB5E7, 0x7535}, //{0xE7, 0x94, 0xB5}, // - {0xC4D0, 0x7537}, //{0xE7, 0x94, 0xB7}, // - {0xB5E9, 0x7538}, //{0xE7, 0x94, 0xB8}, // - {0xBBAD, 0x753B}, //{0xE7, 0x94, 0xBB}, // - {0xB3A9, 0x7545}, //{0xE7, 0x95, 0x85}, // - {0xBDE7, 0x754C}, //{0xE7, 0x95, 0x8C}, // + {0xB8A6, 0x752B}, //{0xE7, 0x94, 0xAB}, // �� + {0xCCEF, 0x7530}, //{0xE7, 0x94, 0xB0}, // �� + {0xD3C9, 0x7531}, //{0xE7, 0x94, 0xB1}, // �� + {0xBCD7, 0x7532}, //{0xE7, 0x94, 0xB2}, // �� + {0xC9EA, 0x7533}, //{0xE7, 0x94, 0xB3}, // �� + {0xB5E7, 0x7535}, //{0xE7, 0x94, 0xB5}, // �� + {0xC4D0, 0x7537}, //{0xE7, 0x94, 0xB7}, // �� + {0xB5E9, 0x7538}, //{0xE7, 0x94, 0xB8}, // �� + {0xBBAD, 0x753B}, //{0xE7, 0x94, 0xBB}, // �� + {0xB3A9, 0x7545}, //{0xE7, 0x95, 0x85}, // �� + {0xBDE7, 0x754C}, //{0xE7, 0x95, 0x8C}, // �� {0xCEB7, 0x754F}, //{0xE7, 0x95, 0x8F}, // η - {0xC5CF, 0x7554}, //{0xE7, 0x95, 0x94}, // - {0xC1F4, 0x7559}, //{0xE7, 0x95, 0x99}, // - {0xD0F3, 0x755C}, //{0xE7, 0x95, 0x9C}, // - {0xC2D4, 0x7565}, //{0xE7, 0x95, 0xA5}, // - {0xC6E8, 0x7566}, //{0xE7, 0x95, 0xA6}, // - {0xB7AC, 0x756A}, //{0xE7, 0x95, 0xAA}, // - {0xB3EB, 0x7574}, //{0xE7, 0x95, 0xB4}, // - {0xBBFB, 0x7578}, //{0xE7, 0x95, 0xB8}, // - {0xBDAE, 0x7586}, //{0xE7, 0x96, 0x86}, // - {0xCAE8, 0x758F}, //{0xE7, 0x96, 0x8F}, // - {0xD2C9, 0x7591}, //{0xE7, 0x96, 0x91}, // - {0xC1C6, 0x7597}, //{0xE7, 0x96, 0x97}, // - {0xB8ED, 0x7599}, //{0xE7, 0x96, 0x99}, // - {0xBECE, 0x759A}, //{0xE7, 0x96, 0x9A}, // + {0xC5CF, 0x7554}, //{0xE7, 0x95, 0x94}, // �� + {0xC1F4, 0x7559}, //{0xE7, 0x95, 0x99}, // �� + {0xD0F3, 0x755C}, //{0xE7, 0x95, 0x9C}, // �� + {0xC2D4, 0x7565}, //{0xE7, 0x95, 0xA5}, // �� + {0xC6E8, 0x7566}, //{0xE7, 0x95, 0xA6}, // �� + {0xB7AC, 0x756A}, //{0xE7, 0x95, 0xAA}, // �� + {0xB3EB, 0x7574}, //{0xE7, 0x95, 0xB4}, // �� + {0xBBFB, 0x7578}, //{0xE7, 0x95, 0xB8}, // �� + {0xBDAE, 0x7586}, //{0xE7, 0x96, 0x86}, // �� + {0xCAE8, 0x758F}, //{0xE7, 0x96, 0x8F}, // �� + {0xD2C9, 0x7591}, //{0xE7, 0x96, 0x91}, // �� + {0xC1C6, 0x7597}, //{0xE7, 0x96, 0x97}, // �� + {0xB8ED, 0x7599}, //{0xE7, 0x96, 0x99}, // �� + {0xBECE, 0x759A}, //{0xE7, 0x96, 0x9A}, // �� {0xC5B1, 0x759F}, //{0xE7, 0x96, 0x9F}, // ű - {0xB0CC, 0x75A4}, //{0xE7, 0x96, 0xA4}, // - {0xD2DF, 0x75AB}, //{0xE7, 0x96, 0xAB}, // - {0xB4AF, 0x75AE}, //{0xE7, 0x96, 0xAE}, // - {0xB7E8, 0x75AF}, //{0xE7, 0x96, 0xAF}, // + {0xB0CC, 0x75A4}, //{0xE7, 0x96, 0xA4}, // �� + {0xD2DF, 0x75AB}, //{0xE7, 0x96, 0xAB}, // �� + {0xB4AF, 0x75AE}, //{0xE7, 0x96, 0xAE}, // �� + {0xB7E8, 0x75AF}, //{0xE7, 0x96, 0xAF}, // �� {0xC6A3, 0x75B2}, //{0xE7, 0x96, 0xB2}, // ƣ - {0xD5EE, 0x75B9}, //{0xE7, 0x96, 0xB9}, // - {0xCCDB, 0x75BC}, //{0xE7, 0x96, 0xBC}, // - {0xBCB2, 0x75BE}, //{0xE7, 0x96, 0xBE}, // - {0xB2A1, 0x75C5}, //{0xE7, 0x97, 0x85}, // + {0xD5EE, 0x75B9}, //{0xE7, 0x96, 0xB9}, // �� + {0xCCDB, 0x75BC}, //{0xE7, 0x96, 0xBC}, // �� + {0xBCB2, 0x75BE}, //{0xE7, 0x96, 0xBE}, // �� + {0xB2A1, 0x75C5}, //{0xE7, 0x97, 0x85}, // �� {0xD6A2, 0x75C7}, //{0xE7, 0x97, 0x87}, // ֢ {0xC8AC, 0x75CA}, //{0xE7, 0x97, 0x8A}, // Ȭ - {0xD1F7, 0x75D2}, //{0xE7, 0x97, 0x92}, // - {0xBADB, 0x75D5}, //{0xE7, 0x97, 0x95}, // - {0xB6BB, 0x75D8}, //{0xE7, 0x97, 0x98}, // + {0xD1F7, 0x75D2}, //{0xE7, 0x97, 0x92}, // �� + {0xBADB, 0x75D5}, //{0xE7, 0x97, 0x95}, // �� + {0xB6BB, 0x75D8}, //{0xE7, 0x97, 0x98}, // �� {0xCDB4, 0x75DB}, //{0xE7, 0x97, 0x9B}, // ʹ - {0xC1A1, 0x75E2}, //{0xE7, 0x97, 0xA2}, // - {0xBBBE, 0x75EA}, //{0xE7, 0x97, 0xAA}, // + {0xC1A1, 0x75E2}, //{0xE7, 0x97, 0xA2}, // a + {0xBBBE, 0x75EA}, //{0xE7, 0x97, 0xAA}, // �� {0xCCB5, 0x75F0}, //{0xE7, 0x97, 0xB0}, // ̵ - {0xB3D5, 0x75F4}, //{0xE7, 0x97, 0xB4}, // - {0xB1D4, 0x75F9}, //{0xE7, 0x97, 0xB9}, // - {0xCEC1, 0x761F}, //{0xE7, 0x98, 0x9F}, // - {0xC1F6, 0x7624}, //{0xE7, 0x98, 0xA4}, // - {0xCADD, 0x7626}, //{0xE7, 0x98, 0xA6}, // - {0xB4F1, 0x7629}, //{0xE7, 0x98, 0xA9}, // - {0xB1F1, 0x762A}, //{0xE7, 0x98, 0xAA}, // + {0xB3D5, 0x75F4}, //{0xE7, 0x97, 0xB4}, // �� + {0xB1D4, 0x75F9}, //{0xE7, 0x97, 0xB9}, // �� + {0xCEC1, 0x761F}, //{0xE7, 0x98, 0x9F}, // �� + {0xC1F6, 0x7624}, //{0xE7, 0x98, 0xA4}, // �� + {0xCADD, 0x7626}, //{0xE7, 0x98, 0xA6}, // �� + {0xB4F1, 0x7629}, //{0xE7, 0x98, 0xA9}, // �� + {0xB1F1, 0x762A}, //{0xE7, 0x98, 0xAA}, // �� {0xCCB1, 0x762B}, //{0xE7, 0x98, 0xAB}, // ̱ {0xC8B3, 0x7638}, //{0xE7, 0x98, 0xB8}, // ȳ - {0xF1AB, 0x763E}, //{0xE7, 0x98, 0xBE}, // - {0xB0A9, 0x764C}, //{0xE7, 0x99, 0x8C}, // - {0xF1AE, 0x765E}, //{0xE7, 0x99, 0x9E}, // + {0xF1AB, 0x763E}, //{0xE7, 0x98, 0xBE}, // � + {0xB0A9, 0x764C}, //{0xE7, 0x99, 0x8C}, // �� + {0xF1AE, 0x765E}, //{0xE7, 0x99, 0x9E}, // � {0xD1A2, 0x7663}, //{0xE7, 0x99, 0xA3}, // Ѣ - {0xB5C7, 0x767B}, //{0xE7, 0x99, 0xBB}, // - {0xB0D7, 0x767D}, //{0xE7, 0x99, 0xBD}, // - {0xB0D9, 0x767E}, //{0xE7, 0x99, 0xBE}, // - {0xD4ED, 0x7682}, //{0xE7, 0x9A, 0x82}, // - {0xB5C4, 0x7684}, //{0xE7, 0x9A, 0x84}, // - {0xBDD4, 0x7686}, //{0xE7, 0x9A, 0x86}, // - {0xBBCA, 0x7687}, //{0xE7, 0x9A, 0x87}, // + {0xB5C7, 0x767B}, //{0xE7, 0x99, 0xBB}, // �� + {0xB0D7, 0x767D}, //{0xE7, 0x99, 0xBD}, // �� + {0xB0D9, 0x767E}, //{0xE7, 0x99, 0xBE}, // �� + {0xD4ED, 0x7682}, //{0xE7, 0x9A, 0x82}, // �� + {0xB5C4, 0x7684}, //{0xE7, 0x9A, 0x84}, // �� + {0xBDD4, 0x7686}, //{0xE7, 0x9A, 0x86}, // �� + {0xBBCA, 0x7687}, //{0xE7, 0x9A, 0x87}, // �� {0xC6A4, 0x76AE}, //{0xE7, 0x9A, 0xAE}, // Ƥ - {0xD6E5, 0x76B1}, //{0xE7, 0x9A, 0xB1}, // - {0xC3F3, 0x76BF}, //{0xE7, 0x9A, 0xBF}, // - {0xD6D1, 0x76C5}, //{0xE7, 0x9B, 0x85}, // - {0xC5E8, 0x76C6}, //{0xE7, 0x9B, 0x86}, // + {0xD6E5, 0x76B1}, //{0xE7, 0x9A, 0xB1}, // �� + {0xC3F3, 0x76BF}, //{0xE7, 0x9A, 0xBF}, // �� + {0xD6D1, 0x76C5}, //{0xE7, 0x9B, 0x85}, // �� + {0xC5E8, 0x76C6}, //{0xE7, 0x9B, 0x86}, // �� {0xD3AF, 0x76C8}, //{0xE7, 0x9B, 0x88}, // ӯ - {0xD2E6, 0x76CA}, //{0xE7, 0x9B, 0x8A}, // + {0xD2E6, 0x76CA}, //{0xE7, 0x9B, 0x8A}, // �� {0xD5B5, 0x76CF}, //{0xE7, 0x9B, 0x8F}, // յ - {0xD1CE, 0x76D0}, //{0xE7, 0x9B, 0x90}, // - {0xBCE0, 0x76D1}, //{0xE7, 0x9B, 0x91}, // - {0xBAD0, 0x76D2}, //{0xE7, 0x9B, 0x92}, // - {0xBFF8, 0x76D4}, //{0xE7, 0x9B, 0x94}, // - {0xB8C7, 0x76D6}, //{0xE7, 0x9B, 0x96}, // - {0xB5C1, 0x76D7}, //{0xE7, 0x9B, 0x97}, // - {0xC5CC, 0x76D8}, //{0xE7, 0x9B, 0x98}, // + {0xD1CE, 0x76D0}, //{0xE7, 0x9B, 0x90}, // �� + {0xBCE0, 0x76D1}, //{0xE7, 0x9B, 0x91}, // �� + {0xBAD0, 0x76D2}, //{0xE7, 0x9B, 0x92}, // �� + {0xBFF8, 0x76D4}, //{0xE7, 0x9B, 0x94}, // �� + {0xB8C7, 0x76D6}, //{0xE7, 0x9B, 0x96}, // �� + {0xB5C1, 0x76D7}, //{0xE7, 0x9B, 0x97}, // �� + {0xC5CC, 0x76D8}, //{0xE7, 0x9B, 0x98}, // �� {0xCAA2, 0x76DB}, //{0xE7, 0x9B, 0x9B}, // ʢ - {0xC3CB, 0x76DF}, //{0xE7, 0x9B, 0x9F}, // + {0xC3CB, 0x76DF}, //{0xE7, 0x9B, 0x9F}, // �� {0xC4BF, 0x76EE}, //{0xE7, 0x9B, 0xAE}, // Ŀ - {0xB6A2, 0x76EF}, //{0xE7, 0x9B, 0xAF}, // + {0xB6A2, 0x76EF}, //{0xE7, 0x9B, 0xAF}, // �� {0xC3A4, 0x76F2}, //{0xE7, 0x9B, 0xB2}, // ä {0xD6B1, 0x76F4}, //{0xE7, 0x9B, 0xB4}, // ֱ - {0xCFE0, 0x76F8}, //{0xE7, 0x9B, 0xB8}, // - {0xEDEF, 0x76F9}, //{0xE7, 0x9B, 0xB9}, // - {0xC5CE, 0x76FC}, //{0xE7, 0x9B, 0xBC}, // - {0xB6DC, 0x76FE}, //{0xE7, 0x9B, 0xBE}, // + {0xCFE0, 0x76F8}, //{0xE7, 0x9B, 0xB8}, // �� + {0xEDEF, 0x76F9}, //{0xE7, 0x9B, 0xB9}, // �� + {0xC5CE, 0x76FC}, //{0xE7, 0x9B, 0xBC}, // �� + {0xB6DC, 0x76FE}, //{0xE7, 0x9B, 0xBE}, // �� {0xCAA1, 0x7701}, //{0xE7, 0x9C, 0x81}, // ʡ {0xC3BC, 0x7709}, //{0xE7, 0x9C, 0x89}, // ü - {0xBFB4, 0x770B}, //{0xE7, 0x9C, 0x8B}, // - {0xD5E6, 0x771F}, //{0xE7, 0x9C, 0x9F}, // - {0xC3DF, 0x7720}, //{0xE7, 0x9C, 0xA0}, // + {0xBFB4, 0x770B}, //{0xE7, 0x9C, 0x8B}, // �� + {0xD5E6, 0x771F}, //{0xE7, 0x9C, 0x9F}, // �� + {0xC3DF, 0x7720}, //{0xE7, 0x9C, 0xA0}, // �� {0xD5A3, 0x7728}, //{0xE7, 0x9C, 0xA8}, // գ - {0xC3D0, 0x772F}, //{0xE7, 0x9C, 0xAF}, // - {0xBFF4, 0x7736}, //{0xE7, 0x9C, 0xB6}, // - {0xBEEC, 0x7737}, //{0xE7, 0x9C, 0xB7}, // - {0xD1DB, 0x773C}, //{0xE7, 0x9C, 0xBC}, // - {0xD7C5, 0x7740}, //{0xE7, 0x9D, 0x80}, // - {0xD5F6, 0x7741}, //{0xE7, 0x9D, 0x81}, // - {0xBEA6, 0x775B}, //{0xE7, 0x9D, 0x9B}, // + {0xC3D0, 0x772F}, //{0xE7, 0x9C, 0xAF}, // �� + {0xBFF4, 0x7736}, //{0xE7, 0x9C, 0xB6}, // �� + {0xBEEC, 0x7737}, //{0xE7, 0x9C, 0xB7}, // �� + {0xD1DB, 0x773C}, //{0xE7, 0x9C, 0xBC}, // �� + {0xD7C5, 0x7740}, //{0xE7, 0x9D, 0x80}, // �� + {0xD5F6, 0x7741}, //{0xE7, 0x9D, 0x81}, // �� + {0xBEA6, 0x775B}, //{0xE7, 0x9D, 0x9B}, // �� {0xCBAF, 0x7761}, //{0xE7, 0x9D, 0xA1}, // ˯ - {0xB6BD, 0x7763}, //{0xE7, 0x9D, 0xA3}, // - {0xC4C0, 0x7766}, //{0xE7, 0x9D, 0xA6}, // - {0xB2C7, 0x776C}, //{0xE7, 0x9D, 0xAC}, // - {0xB6C3, 0x7779}, //{0xE7, 0x9D, 0xB9}, // - {0xC3E9, 0x7784}, //{0xE7, 0x9E, 0x84}, // + {0xB6BD, 0x7763}, //{0xE7, 0x9D, 0xA3}, // �� + {0xC4C0, 0x7766}, //{0xE7, 0x9D, 0xA6}, // �� + {0xB2C7, 0x776C}, //{0xE7, 0x9D, 0xAC}, // �� + {0xB6C3, 0x7779}, //{0xE7, 0x9D, 0xB9}, // �� + {0xC3E9, 0x7784}, //{0xE7, 0x9E, 0x84}, // �� {0xCFB9, 0x778E}, //{0xE7, 0x9E, 0x8E}, // Ϲ - {0xC2F7, 0x7792}, //{0xE7, 0x9E, 0x92}, // - {0xC7C6, 0x77A7}, //{0xE7, 0x9E, 0xA7}, // - {0xB5C9, 0x77AA}, //{0xE7, 0x9E, 0xAA}, // + {0xC2F7, 0x7792}, //{0xE7, 0x9E, 0x92}, // �� + {0xC7C6, 0x77A7}, //{0xE7, 0x9E, 0xA7}, // �� + {0xB5C9, 0x77AA}, //{0xE7, 0x9E, 0xAA}, // �� {0xCBB2, 0x77AC}, //{0xE7, 0x9E, 0xAC}, // ˲ {0xCDAB, 0x77B3}, //{0xE7, 0x9E, 0xB3}, // ͫ {0xD5B0, 0x77BB}, //{0xE7, 0x9E, 0xBB}, // հ - {0xB4A3, 0x77D7}, //{0xE7, 0x9F, 0x97}, // + {0xB4A3, 0x77D7}, //{0xE7, 0x9F, 0x97}, // �� {0xC3AC, 0x77DB}, //{0xE7, 0x9F, 0x9B}, // ì {0xCAB8, 0x77E2}, //{0xE7, 0x9F, 0xA2}, // ʸ {0xD6AA, 0x77E5}, //{0xE7, 0x9F, 0xA5}, // ֪ - {0xBED8, 0x77E9}, //{0xE7, 0x9F, 0xA9}, // - {0xBDC3, 0x77EB}, //{0xE7, 0x9F, 0xAB}, // - {0xB6CC, 0x77ED}, //{0xE7, 0x9F, 0xAD}, // - {0xB0AB, 0x77EE}, //{0xE7, 0x9F, 0xAE}, // + {0xBED8, 0x77E9}, //{0xE7, 0x9F, 0xA9}, // �� + {0xBDC3, 0x77EB}, //{0xE7, 0x9F, 0xAB}, // �� + {0xB6CC, 0x77ED}, //{0xE7, 0x9F, 0xAD}, // �� + {0xB0AB, 0x77EE}, //{0xE7, 0x9F, 0xAE}, // �� {0xCAAF, 0x77F3}, //{0xE7, 0x9F, 0xB3}, // ʯ - {0xB7AF, 0x77FE}, //{0xE7, 0x9F, 0xBE}, // - {0xBFF3, 0x77FF}, //{0xE7, 0x9F, 0xBF}, // - {0xC2EB, 0x7801}, //{0xE7, 0xA0, 0x81}, // + {0xB7AF, 0x77FE}, //{0xE7, 0x9F, 0xBE}, // �� + {0xBFF3, 0x77FF}, //{0xE7, 0x9F, 0xBF}, // �� + {0xC2EB, 0x7801}, //{0xE7, 0xA0, 0x81}, // �� {0xC9B0, 0x7802}, //{0xE7, 0xA0, 0x82}, // ɰ - {0xC6F6, 0x780C}, //{0xE7, 0xA0, 0x8C}, // - {0xBFB3, 0x780D}, //{0xE7, 0xA0, 0x8D}, // - {0xD1D0, 0x7814}, //{0xE7, 0xA0, 0x94}, // + {0xC6F6, 0x780C}, //{0xE7, 0xA0, 0x8C}, // �� + {0xBFB3, 0x780D}, //{0xE7, 0xA0, 0x8D}, // �� + {0xD1D0, 0x7814}, //{0xE7, 0xA0, 0x94}, // �� {0xD7A9, 0x7816}, //{0xE7, 0xA0, 0x96}, // ש - {0xD1E2, 0x781A}, //{0xE7, 0xA0, 0x9A}, // - {0xC5E9, 0x7830}, //{0xE7, 0xA0, 0xB0}, // - {0xC6C6, 0x7834}, //{0xE7, 0xA0, 0xB4}, // - {0xD4D2, 0x7838}, //{0xE7, 0xA0, 0xB8}, // - {0xC0F9, 0x783E}, //{0xE7, 0xA0, 0xBE}, // - {0xB4A1, 0x7840}, //{0xE7, 0xA1, 0x80}, // - {0xB9E8, 0x7845}, //{0xE7, 0xA1, 0x85}, // + {0xD1E2, 0x781A}, //{0xE7, 0xA0, 0x9A}, // �� + {0xC5E9, 0x7830}, //{0xE7, 0xA0, 0xB0}, // �� + {0xC6C6, 0x7834}, //{0xE7, 0xA0, 0xB4}, // �� + {0xD4D2, 0x7838}, //{0xE7, 0xA0, 0xB8}, // �� + {0xC0F9, 0x783E}, //{0xE7, 0xA0, 0xBE}, // �� + {0xB4A1, 0x7840}, //{0xE7, 0xA1, 0x80}, // �� + {0xB9E8, 0x7845}, //{0xE7, 0xA1, 0x85}, // �� {0xCBB6, 0x7855}, //{0xE7, 0xA1, 0x95}, // ˶ - {0xCFF5, 0x785D}, //{0xE7, 0xA1, 0x9D}, // - {0xC1F2, 0x786B}, //{0xE7, 0xA1, 0xAB}, // + {0xCFF5, 0x785D}, //{0xE7, 0xA1, 0x9D}, // �� + {0xC1F2, 0x786B}, //{0xE7, 0xA1, 0xAB}, // �� {0xD3B2, 0x786C}, //{0xE7, 0xA1, 0xAC}, // Ӳ {0xC8B7, 0x786E}, //{0xE7, 0xA1, 0xAE}, // ȷ - {0xC5F0, 0x787C}, //{0xE7, 0xA1, 0xBC}, // - {0xB5EF, 0x7889}, //{0xE7, 0xA2, 0x89}, // + {0xC5F0, 0x787C}, //{0xE7, 0xA1, 0xBC}, // �� + {0xB5EF, 0x7889}, //{0xE7, 0xA2, 0x89}, // �� {0xC2B5, 0x788C}, //{0xE7, 0xA2, 0x8C}, // µ - {0xB0AD, 0x788D}, //{0xE7, 0xA2, 0x8D}, // - {0xCBE9, 0x788E}, //{0xE7, 0xA2, 0x8E}, // - {0xB1AE, 0x7891}, //{0xE7, 0xA2, 0x91}, // - {0xCDEB, 0x7897}, //{0xE7, 0xA2, 0x97}, // - {0xB5E2, 0x7898}, //{0xE7, 0xA2, 0x98}, // - {0xB5FA, 0x789F}, //{0xE7, 0xA2, 0x9F}, // - {0xB1CC, 0x78A7}, //{0xE7, 0xA2, 0xA7}, // - {0xC5F6, 0x78B0}, //{0xE7, 0xA2, 0xB0}, // - {0xBCEE, 0x78B1}, //{0xE7, 0xA2, 0xB1}, // + {0xB0AD, 0x788D}, //{0xE7, 0xA2, 0x8D}, // �� + {0xCBE9, 0x788E}, //{0xE7, 0xA2, 0x8E}, // �� + {0xB1AE, 0x7891}, //{0xE7, 0xA2, 0x91}, // �� + {0xCDEB, 0x7897}, //{0xE7, 0xA2, 0x97}, // �� + {0xB5E2, 0x7898}, //{0xE7, 0xA2, 0x98}, // �� + {0xB5FA, 0x789F}, //{0xE7, 0xA2, 0x9F}, // �� + {0xB1CC, 0x78A7}, //{0xE7, 0xA2, 0xA7}, // �� + {0xC5F6, 0x78B0}, //{0xE7, 0xA2, 0xB0}, // �� + {0xBCEE, 0x78B1}, //{0xE7, 0xA2, 0xB1}, // �� {0xCCBC, 0x78B3}, //{0xE7, 0xA2, 0xB3}, // ̼ - {0xB2EA, 0x78B4}, //{0xE7, 0xA2, 0xB4}, // - {0xC4EB, 0x78BE}, //{0xE7, 0xA2, 0xBE}, // - {0xB4C5, 0x78C1}, //{0xE7, 0xA3, 0x81}, // - {0xB0F5, 0x78C5}, //{0xE7, 0xA3, 0x85}, // - {0xBFC4, 0x78D5}, //{0xE7, 0xA3, 0x95}, // + {0xB2EA, 0x78B4}, //{0xE7, 0xA2, 0xB4}, // �� + {0xC4EB, 0x78BE}, //{0xE7, 0xA2, 0xBE}, // �� + {0xB4C5, 0x78C1}, //{0xE7, 0xA3, 0x81}, // �� + {0xB0F5, 0x78C5}, //{0xE7, 0xA3, 0x85}, // �� + {0xBFC4, 0x78D5}, //{0xE7, 0xA3, 0x95}, // �� {0xC4A5, 0x78E8}, //{0xE7, 0xA3, 0xA8}, // ĥ - {0xC1D7, 0x78F7}, //{0xE7, 0xA3, 0xB7}, // - {0xBBC7, 0x78FA}, //{0xE7, 0xA3, 0xBA}, // - {0xBDB8, 0x7901}, //{0xE7, 0xA4, 0x81}, // + {0xC1D7, 0x78F7}, //{0xE7, 0xA3, 0xB7}, // �� + {0xBBC7, 0x78FA}, //{0xE7, 0xA3, 0xBA}, // �� + {0xBDB8, 0x7901}, //{0xE7, 0xA4, 0x81}, // �� {0xCABE, 0x793A}, //{0xE7, 0xA4, 0xBA}, // ʾ - {0xC0F1, 0x793C}, //{0xE7, 0xA4, 0xBC}, // - {0xC9E7, 0x793E}, //{0xE7, 0xA4, 0xBE}, // - {0xC6ED, 0x7948}, //{0xE7, 0xA5, 0x88}, // - {0xD7E6, 0x7956}, //{0xE7, 0xA5, 0x96}, // + {0xC0F1, 0x793C}, //{0xE7, 0xA4, 0xBC}, // �� + {0xC9E7, 0x793E}, //{0xE7, 0xA4, 0xBE}, // �� + {0xC6ED, 0x7948}, //{0xE7, 0xA5, 0x88}, // �� + {0xD7E6, 0x7956}, //{0xE7, 0xA5, 0x96}, // �� {0xD7A3, 0x795D}, //{0xE7, 0xA5, 0x9D}, // ף - {0xC9F1, 0x795E}, //{0xE7, 0xA5, 0x9E}, // - {0xCBEE, 0x795F}, //{0xE7, 0xA5, 0x9F}, // - {0xECF4, 0x7960}, //{0xE7, 0xA5, 0xA0}, // - {0xCFE9, 0x7965}, //{0xE7, 0xA5, 0xA5}, // + {0xC9F1, 0x795E}, //{0xE7, 0xA5, 0x9E}, // �� + {0xCBEE, 0x795F}, //{0xE7, 0xA5, 0x9F}, // �� + {0xECF4, 0x7960}, //{0xE7, 0xA5, 0xA0}, // �� + {0xCFE9, 0x7965}, //{0xE7, 0xA5, 0xA5}, // �� {0xC6B1, 0x7968}, //{0xE7, 0xA5, 0xA8}, // Ʊ - {0xBCC0, 0x796D}, //{0xE7, 0xA5, 0xAD}, // - {0xB5BB, 0x7977}, //{0xE7, 0xA5, 0xB7}, // - {0xBBF6, 0x7978}, //{0xE7, 0xA5, 0xB8}, // - {0xD9F7, 0x7980}, //{0xE7, 0xA6, 0x80}, // - {0xBDFB, 0x7981}, //{0xE7, 0xA6, 0x81}, // - {0xB8A3, 0x798F}, //{0xE7, 0xA6, 0x8F}, // - {0xC0EB, 0x79BB}, //{0xE7, 0xA6, 0xBB}, // - {0xC7DD, 0x79BD}, //{0xE7, 0xA6, 0xBD}, // - {0xBACC, 0x79BE}, //{0xE7, 0xA6, 0xBE}, // - {0xD0E3, 0x79C0}, //{0xE7, 0xA7, 0x80}, // + {0xBCC0, 0x796D}, //{0xE7, 0xA5, 0xAD}, // �� + {0xB5BB, 0x7977}, //{0xE7, 0xA5, 0xB7}, // �� + {0xBBF6, 0x7978}, //{0xE7, 0xA5, 0xB8}, // �� + {0xD9F7, 0x7980}, //{0xE7, 0xA6, 0x80}, // �� + {0xBDFB, 0x7981}, //{0xE7, 0xA6, 0x81}, // �� + {0xB8A3, 0x798F}, //{0xE7, 0xA6, 0x8F}, // �� + {0xC0EB, 0x79BB}, //{0xE7, 0xA6, 0xBB}, // �� + {0xC7DD, 0x79BD}, //{0xE7, 0xA6, 0xBD}, // �� + {0xBACC, 0x79BE}, //{0xE7, 0xA6, 0xBE}, // �� + {0xD0E3, 0x79C0}, //{0xE7, 0xA7, 0x80}, // �� {0xCBBD, 0x79C1}, //{0xE7, 0xA7, 0x81}, // ˽ {0xCDBA, 0x79C3}, //{0xE7, 0xA7, 0x83}, // ͺ - {0xB8D1, 0x79C6}, //{0xE7, 0xA7, 0x86}, // - {0xB1FC, 0x79C9}, //{0xE7, 0xA7, 0x89}, // - {0xC7EF, 0x79CB}, //{0xE7, 0xA7, 0x8B}, // - {0xD6D6, 0x79CD}, //{0xE7, 0xA7, 0x8D}, // - {0xBFC6, 0x79D1}, //{0xE7, 0xA7, 0x91}, // - {0xC3EB, 0x79D2}, //{0xE7, 0xA7, 0x92}, // - {0xEFF5, 0x79D5}, //{0xE7, 0xA7, 0x95}, // - {0xC3D8, 0x79D8}, //{0xE7, 0xA7, 0x98}, // - {0xD7E2, 0x79DF}, //{0xE7, 0xA7, 0x9F}, // - {0xB3D3, 0x79E4}, //{0xE7, 0xA7, 0xA4}, // - {0xC7D8, 0x79E6}, //{0xE7, 0xA7, 0xA6}, // - {0xD1ED, 0x79E7}, //{0xE7, 0xA7, 0xA7}, // - {0xD6C8, 0x79E9}, //{0xE7, 0xA7, 0xA9}, // - {0xEFF8, 0x79EB}, //{0xE7, 0xA7, 0xAB}, // - {0xBBFD, 0x79EF}, //{0xE7, 0xA7, 0xAF}, // - {0xB3C6, 0x79F0}, //{0xE7, 0xA7, 0xB0}, // - {0xBDD5, 0x79F8}, //{0xE7, 0xA7, 0xB8}, // - {0xD2C6, 0x79FB}, //{0xE7, 0xA7, 0xBB}, // - {0xBBE0, 0x79FD}, //{0xE7, 0xA7, 0xBD}, // + {0xB8D1, 0x79C6}, //{0xE7, 0xA7, 0x86}, // �� + {0xB1FC, 0x79C9}, //{0xE7, 0xA7, 0x89}, // �� + {0xC7EF, 0x79CB}, //{0xE7, 0xA7, 0x8B}, // �� + {0xD6D6, 0x79CD}, //{0xE7, 0xA7, 0x8D}, // �� + {0xBFC6, 0x79D1}, //{0xE7, 0xA7, 0x91}, // �� + {0xC3EB, 0x79D2}, //{0xE7, 0xA7, 0x92}, // �� + {0xEFF5, 0x79D5}, //{0xE7, 0xA7, 0x95}, // �� + {0xC3D8, 0x79D8}, //{0xE7, 0xA7, 0x98}, // �� + {0xD7E2, 0x79DF}, //{0xE7, 0xA7, 0x9F}, // �� + {0xB3D3, 0x79E4}, //{0xE7, 0xA7, 0xA4}, // �� + {0xC7D8, 0x79E6}, //{0xE7, 0xA7, 0xA6}, // �� + {0xD1ED, 0x79E7}, //{0xE7, 0xA7, 0xA7}, // �� + {0xD6C8, 0x79E9}, //{0xE7, 0xA7, 0xA9}, // �� + {0xEFF8, 0x79EB}, //{0xE7, 0xA7, 0xAB}, // �� + {0xBBFD, 0x79EF}, //{0xE7, 0xA7, 0xAF}, // �� + {0xB3C6, 0x79F0}, //{0xE7, 0xA7, 0xB0}, // �� + {0xBDD5, 0x79F8}, //{0xE7, 0xA7, 0xB8}, // �� + {0xD2C6, 0x79FB}, //{0xE7, 0xA7, 0xBB}, // �� + {0xBBE0, 0x79FD}, //{0xE7, 0xA7, 0xBD}, // �� {0xCFA1, 0x7A00}, //{0xE7, 0xA8, 0x80}, // ϡ - {0xB3CC, 0x7A0B}, //{0xE7, 0xA8, 0x8B}, // - {0xC9D4, 0x7A0D}, //{0xE7, 0xA8, 0x8D}, // + {0xB3CC, 0x7A0B}, //{0xE7, 0xA8, 0x8B}, // �� + {0xC9D4, 0x7A0D}, //{0xE7, 0xA8, 0x8D}, // �� {0xCBB0, 0x7A0E}, //{0xE7, 0xA8, 0x8E}, // ˰ - {0xD6C9, 0x7A1A}, //{0xE7, 0xA8, 0x9A}, // - {0xB3ED, 0x7A20}, //{0xE7, 0xA8, 0xA0}, // - {0xCEC8, 0x7A33}, //{0xE7, 0xA8, 0xB3}, // - {0xB5BE, 0x7A3B}, //{0xE7, 0xA8, 0xBB}, // - {0xBCDA, 0x7A3C}, //{0xE7, 0xA8, 0xBC}, // - {0xBBFC, 0x7A3D}, //{0xE7, 0xA8, 0xBD}, // - {0xB8E5, 0x7A3F}, //{0xE7, 0xA8, 0xBF}, // - {0xC4C2, 0x7A46}, //{0xE7, 0xA9, 0x86}, // - {0xCBEB, 0x7A57}, //{0xE7, 0xA9, 0x97}, // + {0xD6C9, 0x7A1A}, //{0xE7, 0xA8, 0x9A}, // �� + {0xB3ED, 0x7A20}, //{0xE7, 0xA8, 0xA0}, // �� + {0xCEC8, 0x7A33}, //{0xE7, 0xA8, 0xB3}, // �� + {0xB5BE, 0x7A3B}, //{0xE7, 0xA8, 0xBB}, // �� + {0xBCDA, 0x7A3C}, //{0xE7, 0xA8, 0xBC}, // �� + {0xBBFC, 0x7A3D}, //{0xE7, 0xA8, 0xBD}, // �� + {0xB8E5, 0x7A3F}, //{0xE7, 0xA8, 0xBF}, // �� + {0xC4C2, 0x7A46}, //{0xE7, 0xA9, 0x86}, // �� + {0xCBEB, 0x7A57}, //{0xE7, 0xA9, 0x97}, // �� {0xD1A8, 0x7A74}, //{0xE7, 0xA9, 0xB4}, // Ѩ - {0xBEBF, 0x7A76}, //{0xE7, 0xA9, 0xB6}, // - {0xC7EE, 0x7A77}, //{0xE7, 0xA9, 0xB7}, // - {0xBFD5, 0x7A7A}, //{0xE7, 0xA9, 0xBA}, // - {0xB4A9, 0x7A7F}, //{0xE7, 0xA9, 0xBF}, // + {0xBEBF, 0x7A76}, //{0xE7, 0xA9, 0xB6}, // �� + {0xC7EE, 0x7A77}, //{0xE7, 0xA9, 0xB7}, // �� + {0xBFD5, 0x7A7A}, //{0xE7, 0xA9, 0xBA}, // �� + {0xB4A9, 0x7A7F}, //{0xE7, 0xA9, 0xBF}, // �� {0xCDBB, 0x7A81}, //{0xE7, 0xAA, 0x81}, // ͻ - {0xC7D4, 0x7A83}, //{0xE7, 0xAA, 0x83}, // + {0xC7D4, 0x7A83}, //{0xE7, 0xAA, 0x83}, // �� {0xD5AD, 0x7A84}, //{0xE7, 0xAA, 0x84}, // խ - {0xC7CF, 0x7A8D}, //{0xE7, 0xAA, 0x8D}, // + {0xC7CF, 0x7A8D}, //{0xE7, 0xAA, 0x8D}, // �� {0xD2A4, 0x7A91}, //{0xE7, 0xAA, 0x91}, // Ҥ - {0xD6CF, 0x7A92}, //{0xE7, 0xAA, 0x92}, // - {0xBDD1, 0x7A96}, //{0xE7, 0xAA, 0x96}, // - {0xB4B0, 0x7A97}, //{0xE7, 0xAA, 0x97}, // - {0xBEBD, 0x7A98}, //{0xE7, 0xAA, 0x98}, // - {0xB4DC, 0x7A9C}, //{0xE7, 0xAA, 0x9C}, // - {0xCED1, 0x7A9D}, //{0xE7, 0xAA, 0x9D}, // - {0xBFDF, 0x7A9F}, //{0xE7, 0xAA, 0x9F}, // - {0xBFFA, 0x7AA5}, //{0xE7, 0xAA, 0xA5}, // - {0xC1FE, 0x7ABF}, //{0xE7, 0xAA, 0xBF}, // - {0xC1A2, 0x7ACB}, //{0xE7, 0xAB, 0x8B}, // - {0xCAFA, 0x7AD6}, //{0xE7, 0xAB, 0x96}, // + {0xD6CF, 0x7A92}, //{0xE7, 0xAA, 0x92}, // �� + {0xBDD1, 0x7A96}, //{0xE7, 0xAA, 0x96}, // �� + {0xB4B0, 0x7A97}, //{0xE7, 0xAA, 0x97}, // �� + {0xBEBD, 0x7A98}, //{0xE7, 0xAA, 0x98}, // �� + {0xB4DC, 0x7A9C}, //{0xE7, 0xAA, 0x9C}, // �� + {0xCED1, 0x7A9D}, //{0xE7, 0xAA, 0x9D}, // �� + {0xBFDF, 0x7A9F}, //{0xE7, 0xAA, 0x9F}, // �� + {0xBFFA, 0x7AA5}, //{0xE7, 0xAA, 0xA5}, // �� + {0xC1FE, 0x7ABF}, //{0xE7, 0xAA, 0xBF}, // �� + {0xC1A2, 0x7ACB}, //{0xE7, 0xAB, 0x8B}, // b + {0xCAFA, 0x7AD6}, //{0xE7, 0xAB, 0x96}, // �� {0xD5BE, 0x7AD9}, //{0xE7, 0xAB, 0x99}, // վ - {0xBEBA, 0x7ADE}, //{0xE7, 0xAB, 0x9E}, // - {0xBEB9, 0x7ADF}, //{0xE7, 0xAB, 0x9F}, // - {0xD5C2, 0x7AE0}, //{0xE7, 0xAB, 0xA0}, // - {0xBFA2, 0x7AE3}, //{0xE7, 0xAB, 0xA3}, // + {0xBEBA, 0x7ADE}, //{0xE7, 0xAB, 0x9E}, // �� + {0xBEB9, 0x7ADF}, //{0xE7, 0xAB, 0x9F}, // �� + {0xD5C2, 0x7AE0}, //{0xE7, 0xAB, 0xA0}, // �� + {0xBFA2, 0x7AE3}, //{0xE7, 0xAB, 0xA3}, // �� {0xCDAF, 0x7AE5}, //{0xE7, 0xAB, 0xA5}, // ͯ - {0xBDDF, 0x7AED}, //{0xE7, 0xAB, 0xAD}, // - {0xB6CB, 0x7AEF}, //{0xE7, 0xAB, 0xAF}, // - {0xD6F1, 0x7AF9}, //{0xE7, 0xAB, 0xB9}, // - {0xB8CD, 0x7AFF}, //{0xE7, 0xAB, 0xBF}, // - {0xB0CA, 0x7B06}, //{0xE7, 0xAC, 0x86}, // - {0xCBF1, 0x7B0B}, //{0xE7, 0xAC, 0x8B}, // + {0xBDDF, 0x7AED}, //{0xE7, 0xAB, 0xAD}, // �� + {0xB6CB, 0x7AEF}, //{0xE7, 0xAB, 0xAF}, // �� + {0xD6F1, 0x7AF9}, //{0xE7, 0xAB, 0xB9}, // �� + {0xB8CD, 0x7AFF}, //{0xE7, 0xAB, 0xBF}, // �� + {0xB0CA, 0x7B06}, //{0xE7, 0xAC, 0x86}, // �� + {0xCBF1, 0x7B0B}, //{0xE7, 0xAC, 0x8B}, // �� {0xD0A6, 0x7B11}, //{0xE7, 0xAC, 0x91}, // Ц - {0xB1CA, 0x7B14}, //{0xE7, 0xAC, 0x94}, // - {0xF3CF, 0x7B19}, //{0xE7, 0xAC, 0x99}, // - {0xB5D1, 0x7B1B}, //{0xE7, 0xAC, 0x9B}, // - {0xF3D4, 0x7B24}, //{0xE7, 0xAC, 0xA4}, // - {0xB7FB, 0x7B26}, //{0xE7, 0xAC, 0xA6}, // - {0xB1BF, 0x7B28}, //{0xE7, 0xAC, 0xA8}, // - {0xB5DA, 0x7B2C}, //{0xE7, 0xAC, 0xAC}, // - {0xC1FD, 0x7B3C}, //{0xE7, 0xAC, 0xBC}, // - {0xB5C8, 0x7B49}, //{0xE7, 0xAD, 0x89}, // - {0xBDEE, 0x7B4B}, //{0xE7, 0xAD, 0x8B}, // - {0xB7A4, 0x7B4F}, //{0xE7, 0xAD, 0x8F}, // - {0xBFF0, 0x7B50}, //{0xE7, 0xAD, 0x90}, // - {0xD6FE, 0x7B51}, //{0xE7, 0xAD, 0x91}, // + {0xB1CA, 0x7B14}, //{0xE7, 0xAC, 0x94}, // �� + {0xF3CF, 0x7B19}, //{0xE7, 0xAC, 0x99}, // �� + {0xB5D1, 0x7B1B}, //{0xE7, 0xAC, 0x9B}, // �� + {0xF3D4, 0x7B24}, //{0xE7, 0xAC, 0xA4}, // �� + {0xB7FB, 0x7B26}, //{0xE7, 0xAC, 0xA6}, // �� + {0xB1BF, 0x7B28}, //{0xE7, 0xAC, 0xA8}, // �� + {0xB5DA, 0x7B2C}, //{0xE7, 0xAC, 0xAC}, // �� + {0xC1FD, 0x7B3C}, //{0xE7, 0xAC, 0xBC}, // �� + {0xB5C8, 0x7B49}, //{0xE7, 0xAD, 0x89}, // �� + {0xBDEE, 0x7B4B}, //{0xE7, 0xAD, 0x8B}, // �� + {0xB7A4, 0x7B4F}, //{0xE7, 0xAD, 0x8F}, // �� + {0xBFF0, 0x7B50}, //{0xE7, 0xAD, 0x90}, // �� + {0xD6FE, 0x7B51}, //{0xE7, 0xAD, 0x91}, // �� {0xCDB2, 0x7B52}, //{0xE7, 0xAD, 0x92}, // Ͳ - {0xB4F0, 0x7B54}, //{0xE7, 0xAD, 0x94}, // - {0xB2DF, 0x7B56}, //{0xE7, 0xAD, 0x96}, // + {0xB4F0, 0x7B54}, //{0xE7, 0xAD, 0x94}, // �� + {0xB2DF, 0x7B56}, //{0xE7, 0xAD, 0x96}, // �� {0xC9B8, 0x7B5B}, //{0xE7, 0xAD, 0x9B}, // ɸ - {0xF3DD, 0x7B5D}, //{0xE7, 0xAD, 0x9D}, // - {0xBFEA, 0x7B77}, //{0xE7, 0xAD, 0xB7}, // - {0xB3EF, 0x7B79}, //{0xE7, 0xAD, 0xB9}, // + {0xF3DD, 0x7B5D}, //{0xE7, 0xAD, 0x9D}, // �� + {0xBFEA, 0x7B77}, //{0xE7, 0xAD, 0xB7}, // �� + {0xB3EF, 0x7B79}, //{0xE7, 0xAD, 0xB9}, // �� {0xC7A9, 0x7B7E}, //{0xE7, 0xAD, 0xBE}, // ǩ - {0xBCF2, 0x7B80}, //{0xE7, 0xAE, 0x80}, // - {0xB9BF, 0x7B8D}, //{0xE7, 0xAE, 0x8D}, // - {0xBBFE, 0x7B95}, //{0xE7, 0xAE, 0x95}, // - {0xCBE3, 0x7B97}, //{0xE7, 0xAE, 0x97}, // - {0xB9DC, 0x7BA1}, //{0xE7, 0xAE, 0xA1}, // - {0xC2E1, 0x7BA9}, //{0xE7, 0xAE, 0xA9}, // - {0xF3EF, 0x7BAB}, //{0xE7, 0xAE, 0xAB}, // - {0xBCFD, 0x7BAD}, //{0xE7, 0xAE, 0xAD}, // - {0xCFE4, 0x7BB1}, //{0xE7, 0xAE, 0xB1}, // + {0xBCF2, 0x7B80}, //{0xE7, 0xAE, 0x80}, // �� + {0xB9BF, 0x7B8D}, //{0xE7, 0xAE, 0x8D}, // �� + {0xBBFE, 0x7B95}, //{0xE7, 0xAE, 0x95}, // �� + {0xCBE3, 0x7B97}, //{0xE7, 0xAE, 0x97}, // �� + {0xB9DC, 0x7BA1}, //{0xE7, 0xAE, 0xA1}, // �� + {0xC2E1, 0x7BA9}, //{0xE7, 0xAE, 0xA9}, // �� + {0xF3EF, 0x7BAB}, //{0xE7, 0xAE, 0xAB}, // �� + {0xBCFD, 0x7BAD}, //{0xE7, 0xAE, 0xAD}, // �� + {0xCFE4, 0x7BB1}, //{0xE7, 0xAE, 0xB1}, // �� {0xC6AA, 0x7BC7}, //{0xE7, 0xAF, 0x87}, // ƪ {0xC2A8, 0x7BD3}, //{0xE7, 0xAF, 0x93}, // ¨ - {0xB8DD, 0x7BD9}, //{0xE7, 0xAF, 0x99}, // - {0xB4DB, 0x7BE1}, //{0xE7, 0xAF, 0xA1}, // - {0xC0BA, 0x7BEE}, //{0xE7, 0xAF, 0xAE}, // - {0xC0E9, 0x7BF1}, //{0xE7, 0xAF, 0xB1}, // - {0xC5F1, 0x7BF7}, //{0xE7, 0xAF, 0xB7}, // - {0xB4D8, 0x7C07}, //{0xE7, 0xB0, 0x87}, // - {0xF4A4, 0x7C38}, //{0xE7, 0xB0, 0xB8}, // - {0xB2BE, 0x7C3F}, //{0xE7, 0xB0, 0xBF}, // - {0xBCAE, 0x7C4D}, //{0xE7, 0xB1, 0x8D}, // - {0xC3D7, 0x7C73}, //{0xE7, 0xB1, 0xB3}, // - {0xC0E0, 0x7C7B}, //{0xE7, 0xB1, 0xBB}, // - {0xD7D1, 0x7C7D}, //{0xE7, 0xB1, 0xBD}, // - {0xB7DB, 0x7C89}, //{0xE7, 0xB2, 0x89}, // - {0xC1A3, 0x7C92}, //{0xE7, 0xB2, 0x92}, // - {0xB4D6, 0x7C97}, //{0xE7, 0xB2, 0x97}, // + {0xB8DD, 0x7BD9}, //{0xE7, 0xAF, 0x99}, // �� + {0xB4DB, 0x7BE1}, //{0xE7, 0xAF, 0xA1}, // �� + {0xC0BA, 0x7BEE}, //{0xE7, 0xAF, 0xAE}, // : + {0xC0E9, 0x7BF1}, //{0xE7, 0xAF, 0xB1}, // �� + {0xC5F1, 0x7BF7}, //{0xE7, 0xAF, 0xB7}, // �� + {0xB4D8, 0x7C07}, //{0xE7, 0xB0, 0x87}, // �� + {0xF4A4, 0x7C38}, //{0xE7, 0xB0, 0xB8}, // � + {0xB2BE, 0x7C3F}, //{0xE7, 0xB0, 0xBF}, // �� + {0xBCAE, 0x7C4D}, //{0xE7, 0xB1, 0x8D}, // �� + {0xC3D7, 0x7C73}, //{0xE7, 0xB1, 0xB3}, // �� + {0xC0E0, 0x7C7B}, //{0xE7, 0xB1, 0xBB}, // �� + {0xD7D1, 0x7C7D}, //{0xE7, 0xB1, 0xBD}, // �� + {0xB7DB, 0x7C89}, //{0xE7, 0xB2, 0x89}, // �� + {0xC1A3, 0x7C92}, //{0xE7, 0xB2, 0x92}, // c + {0xB4D6, 0x7C97}, //{0xE7, 0xB2, 0x97}, // �� {0xD5B3, 0x7C98}, //{0xE7, 0xB2, 0x98}, // ճ - {0xCBDA, 0x7C9F}, //{0xE7, 0xB2, 0x9F}, // - {0xD4C1, 0x7CA4}, //{0xE7, 0xB2, 0xA4}, // - {0xD6E0, 0x7CA5}, //{0xE7, 0xB2, 0xA5}, // - {0xB7E0, 0x7CAA}, //{0xE7, 0xB2, 0xAA}, // - {0xC1B8, 0x7CAE}, //{0xE7, 0xB2, 0xAE}, // - {0xC1BB, 0x7CB1}, //{0xE7, 0xB2, 0xB1}, // - {0xB4E2, 0x7CB9}, //{0xE7, 0xB2, 0xB9}, // - {0xBEAB, 0x7CBE}, //{0xE7, 0xB2, 0xBE}, // - {0xBAFD, 0x7CCA}, //{0xE7, 0xB3, 0x8A}, // - {0xB8E2, 0x7CD5}, //{0xE7, 0xB3, 0x95}, // - {0xCCC7, 0x7CD6}, //{0xE7, 0xB3, 0x96}, // - {0xB2DA, 0x7CD9}, //{0xE7, 0xB3, 0x99}, // - {0xC3D3, 0x7CDC}, //{0xE7, 0xB3, 0x9C}, // - {0xD4E3, 0x7CDF}, //{0xE7, 0xB3, 0x9F}, // - {0xBFB7, 0x7CE0}, //{0xE7, 0xB3, 0xA0}, // + {0xCBDA, 0x7C9F}, //{0xE7, 0xB2, 0x9F}, // �� + {0xD4C1, 0x7CA4}, //{0xE7, 0xB2, 0xA4}, // �� + {0xD6E0, 0x7CA5}, //{0xE7, 0xB2, 0xA5}, // �� + {0xB7E0, 0x7CAA}, //{0xE7, 0xB2, 0xAA}, // �� + {0xC1B8, 0x7CAE}, //{0xE7, 0xB2, 0xAE}, // �� + {0xC1BB, 0x7CB1}, //{0xE7, 0xB2, 0xB1}, // { + {0xB4E2, 0x7CB9}, //{0xE7, 0xB2, 0xB9}, // �� + {0xBEAB, 0x7CBE}, //{0xE7, 0xB2, 0xBE}, // �� + {0xBAFD, 0x7CCA}, //{0xE7, 0xB3, 0x8A}, // �� + {0xB8E2, 0x7CD5}, //{0xE7, 0xB3, 0x95}, // �� + {0xCCC7, 0x7CD6}, //{0xE7, 0xB3, 0x96}, // �� + {0xB2DA, 0x7CD9}, //{0xE7, 0xB3, 0x99}, // �� + {0xC3D3, 0x7CDC}, //{0xE7, 0xB3, 0x9C}, // �� + {0xD4E3, 0x7CDF}, //{0xE7, 0xB3, 0x9F}, // �� + {0xBFB7, 0x7CE0}, //{0xE7, 0xB3, 0xA0}, // �� {0xC5B4, 0x7CEF}, //{0xE7, 0xB3, 0xAF}, // Ŵ {0xCFB5, 0x7CFB}, //{0xE7, 0xB3, 0xBB}, // ϵ - {0xCEC9, 0x7D0A}, //{0xE7, 0xB4, 0x8A}, // - {0xCBD8, 0x7D20}, //{0xE7, 0xB4, 0xA0}, // - {0xCBF7, 0x7D22}, //{0xE7, 0xB4, 0xA2}, // - {0xBDF4, 0x7D27}, //{0xE7, 0xB4, 0xA7}, // - {0xD7CF, 0x7D2B}, //{0xE7, 0xB4, 0xAB}, // - {0xC0DB, 0x7D2F}, //{0xE7, 0xB4, 0xAF}, // - {0xD0F5, 0x7D6E}, //{0xE7, 0xB5, 0xAE}, // - {0xB7B1, 0x7E41}, //{0xE7, 0xB9, 0x81}, // - {0xBEC0, 0x7EA0}, //{0xE7, 0xBA, 0xA0}, // - {0xBAEC, 0x7EA2}, //{0xE7, 0xBA, 0xA2}, // - {0xCFCB, 0x7EA4}, //{0xE7, 0xBA, 0xA4}, // + {0xCEC9, 0x7D0A}, //{0xE7, 0xB4, 0x8A}, // �� + {0xCBD8, 0x7D20}, //{0xE7, 0xB4, 0xA0}, // �� + {0xCBF7, 0x7D22}, //{0xE7, 0xB4, 0xA2}, // �� + {0xBDF4, 0x7D27}, //{0xE7, 0xB4, 0xA7}, // �� + {0xD7CF, 0x7D2B}, //{0xE7, 0xB4, 0xAB}, // �� + {0xC0DB, 0x7D2F}, //{0xE7, 0xB4, 0xAF}, // �� + {0xD0F5, 0x7D6E}, //{0xE7, 0xB5, 0xAE}, // �� + {0xB7B1, 0x7E41}, //{0xE7, 0xB9, 0x81}, // �� + {0xBEC0, 0x7EA0}, //{0xE7, 0xBA, 0xA0}, // �� + {0xBAEC, 0x7EA2}, //{0xE7, 0xBA, 0xA2}, // �� + {0xCFCB, 0x7EA4}, //{0xE7, 0xBA, 0xA4}, // �� {0xD4BC, 0x7EA6}, //{0xE7, 0xBA, 0xA6}, // Լ - {0xBCB6, 0x7EA7}, //{0xE7, 0xBA, 0xA7}, // - {0xBCCD, 0x7EAA}, //{0xE7, 0xBA, 0xAA}, // - {0xC8D2, 0x7EAB}, //{0xE7, 0xBA, 0xAB}, // + {0xBCB6, 0x7EA7}, //{0xE7, 0xBA, 0xA7}, // �� + {0xBCCD, 0x7EAA}, //{0xE7, 0xBA, 0xAA}, // �� + {0xC8D2, 0x7EAB}, //{0xE7, 0xBA, 0xAB}, // �� {0xCEB3, 0x7EAC}, //{0xE7, 0xBA, 0xAC}, // γ - {0xB4BF, 0x7EAF}, //{0xE7, 0xBA, 0xAF}, // + {0xB4BF, 0x7EAF}, //{0xE7, 0xBA, 0xAF}, // �� {0xC9B4, 0x7EB1}, //{0xE7, 0xBA, 0xB1}, // ɴ - {0xB8D9, 0x7EB2}, //{0xE7, 0xBA, 0xB2}, // - {0xC4C9, 0x7EB3}, //{0xE7, 0xBA, 0xB3}, // - {0xD7DD, 0x7EB5}, //{0xE7, 0xBA, 0xB5}, // - {0xB7D7, 0x7EB7}, //{0xE7, 0xBA, 0xB7}, // + {0xB8D9, 0x7EB2}, //{0xE7, 0xBA, 0xB2}, // �� + {0xC4C9, 0x7EB3}, //{0xE7, 0xBA, 0xB3}, // �� + {0xD7DD, 0x7EB5}, //{0xE7, 0xBA, 0xB5}, // �� + {0xB7D7, 0x7EB7}, //{0xE7, 0xBA, 0xB7}, // �� {0xD6BD, 0x7EB8}, //{0xE7, 0xBA, 0xB8}, // ֽ - {0xCEC6, 0x7EB9}, //{0xE7, 0xBA, 0xB9}, // - {0xB7C4, 0x7EBA}, //{0xE7, 0xBA, 0xBA}, // + {0xCEC6, 0x7EB9}, //{0xE7, 0xBA, 0xB9}, // �� + {0xB7C4, 0x7EBA}, //{0xE7, 0xBA, 0xBA}, // �� {0xC5A6, 0x7EBD}, //{0xE7, 0xBA, 0xBD}, // Ŧ - {0xCFDF, 0x7EBF}, //{0xE7, 0xBA, 0xBF}, // - {0xC1B7, 0x7EC3}, //{0xE7, 0xBB, 0x83}, // - {0xD7E9, 0x7EC4}, //{0xE7, 0xBB, 0x84}, // - {0xC9F0, 0x7EC5}, //{0xE7, 0xBB, 0x85}, // + {0xCFDF, 0x7EBF}, //{0xE7, 0xBA, 0xBF}, // �� + {0xC1B7, 0x7EC3}, //{0xE7, 0xBB, 0x83}, // w + {0xD7E9, 0x7EC4}, //{0xE7, 0xBB, 0x84}, // �� + {0xC9F0, 0x7EC5}, //{0xE7, 0xBB, 0x85}, // �� {0xCFB8, 0x7EC6}, //{0xE7, 0xBB, 0x86}, // ϸ {0xD6AF, 0x7EC7}, //{0xE7, 0xBB, 0x87}, // ֯ - {0xD6D5, 0x7EC8}, //{0xE7, 0xBB, 0x88}, // - {0xB0ED, 0x7ECA}, //{0xE7, 0xBB, 0x8A}, // - {0xC9DC, 0x7ECD}, //{0xE7, 0xBB, 0x8D}, // - {0xD2EF, 0x7ECE}, //{0xE7, 0xBB, 0x8E}, // - {0xBEAD, 0x7ECF}, //{0xE7, 0xBB, 0x8F}, // - {0xB0F3, 0x7ED1}, //{0xE7, 0xBB, 0x91}, // - {0xC8DE, 0x7ED2}, //{0xE7, 0xBB, 0x92}, // - {0xBDE1, 0x7ED3}, //{0xE7, 0xBB, 0x93}, // - {0xC8C6, 0x7ED5}, //{0xE7, 0xBB, 0x95}, // - {0xBBE6, 0x7ED8}, //{0xE7, 0xBB, 0x98}, // - {0xB8F8, 0x7ED9}, //{0xE7, 0xBB, 0x99}, // - {0xC2E7, 0x7EDC}, //{0xE7, 0xBB, 0x9C}, // - {0xBEF8, 0x7EDD}, //{0xE7, 0xBB, 0x9D}, // - {0xBDCA, 0x7EDE}, //{0xE7, 0xBB, 0x9E}, // + {0xD6D5, 0x7EC8}, //{0xE7, 0xBB, 0x88}, // �� + {0xB0ED, 0x7ECA}, //{0xE7, 0xBB, 0x8A}, // �� + {0xC9DC, 0x7ECD}, //{0xE7, 0xBB, 0x8D}, // �� + {0xD2EF, 0x7ECE}, //{0xE7, 0xBB, 0x8E}, // �� + {0xBEAD, 0x7ECF}, //{0xE7, 0xBB, 0x8F}, // �� + {0xB0F3, 0x7ED1}, //{0xE7, 0xBB, 0x91}, // �� + {0xC8DE, 0x7ED2}, //{0xE7, 0xBB, 0x92}, // �� + {0xBDE1, 0x7ED3}, //{0xE7, 0xBB, 0x93}, // �� + {0xC8C6, 0x7ED5}, //{0xE7, 0xBB, 0x95}, // �� + {0xBBE6, 0x7ED8}, //{0xE7, 0xBB, 0x98}, // �� + {0xB8F8, 0x7ED9}, //{0xE7, 0xBB, 0x99}, // �� + {0xC2E7, 0x7EDC}, //{0xE7, 0xBB, 0x9C}, // �� + {0xBEF8, 0x7EDD}, //{0xE7, 0xBB, 0x9D}, // �� + {0xBDCA, 0x7EDE}, //{0xE7, 0xBB, 0x9E}, // �� {0xCDB3, 0x7EDF}, //{0xE7, 0xBB, 0x9F}, // ͳ - {0xBEEE, 0x7EE2}, //{0xE7, 0xBB, 0xA2}, // - {0xD0E5, 0x7EE3}, //{0xE7, 0xBB, 0xA3}, // - {0xBCCC, 0x7EE7}, //{0xE7, 0xBB, 0xA7}, // - {0xBCA8, 0x7EE9}, //{0xE7, 0xBB, 0xA9}, // - {0xD0F7, 0x7EEA}, //{0xE7, 0xBB, 0xAA}, // - {0xD0F8, 0x7EED}, //{0xE7, 0xBB, 0xAD}, // - {0xB4C2, 0x7EF0}, //{0xE7, 0xBB, 0xB0}, // - {0xC9FE, 0x7EF3}, //{0xE7, 0xBB, 0xB3}, // + {0xBEEE, 0x7EE2}, //{0xE7, 0xBB, 0xA2}, // �� + {0xD0E5, 0x7EE3}, //{0xE7, 0xBB, 0xA3}, // �� + {0xBCCC, 0x7EE7}, //{0xE7, 0xBB, 0xA7}, // �� + {0xBCA8, 0x7EE9}, //{0xE7, 0xBB, 0xA9}, // �� + {0xD0F7, 0x7EEA}, //{0xE7, 0xBB, 0xAA}, // �� + {0xD0F8, 0x7EED}, //{0xE7, 0xBB, 0xAD}, // �� + {0xB4C2, 0x7EF0}, //{0xE7, 0xBB, 0xB0}, // �� + {0xC9FE, 0x7EF3}, //{0xE7, 0xBB, 0xB3}, // �� {0xCEAC, 0x7EF4}, //{0xE7, 0xBB, 0xB4}, // ά - {0xC3E0, 0x7EF5}, //{0xE7, 0xBB, 0xB5}, // - {0xB1C1, 0x7EF7}, //{0xE7, 0xBB, 0xB7}, // - {0xB3F1, 0x7EF8}, //{0xE7, 0xBB, 0xB8}, // - {0xD7DB, 0x7EFC}, //{0xE7, 0xBB, 0xBC}, // - {0xD5C0, 0x7EFD}, //{0xE7, 0xBB, 0xBD}, // - {0xC2CC, 0x7EFF}, //{0xE7, 0xBB, 0xBF}, // + {0xC3E0, 0x7EF5}, //{0xE7, 0xBB, 0xB5}, // �� + {0xB1C1, 0x7EF7}, //{0xE7, 0xBB, 0xB7}, // �� + {0xB3F1, 0x7EF8}, //{0xE7, 0xBB, 0xB8}, // �� + {0xD7DB, 0x7EFC}, //{0xE7, 0xBB, 0xBC}, // �� + {0xD5C0, 0x7EFD}, //{0xE7, 0xBB, 0xBD}, // �� + {0xC2CC, 0x7EFF}, //{0xE7, 0xBB, 0xBF}, // �� {0xD7BA, 0x7F00}, //{0xE7, 0xBC, 0x80}, // ׺ - {0xC3E5, 0x7F05}, //{0xE7, 0xBC, 0x85}, // - {0xC0C2, 0x7F06}, //{0xE7, 0xBC, 0x86}, // - {0xB6D0, 0x7F0E}, //{0xE7, 0xBC, 0x8E}, // - {0xBBBA, 0x7F13}, //{0xE7, 0xBC, 0x93}, // - {0xB5DE, 0x7F14}, //{0xE7, 0xBC, 0x94}, // - {0xC2C6, 0x7F15}, //{0xE7, 0xBC, 0x95}, // - {0xB1E0, 0x7F16}, //{0xE7, 0xBC, 0x96}, // + {0xC3E5, 0x7F05}, //{0xE7, 0xBC, 0x85}, // �� + {0xC0C2, 0x7F06}, //{0xE7, 0xBC, 0x86}, // �� + {0xB6D0, 0x7F0E}, //{0xE7, 0xBC, 0x8E}, // �� + {0xBBBA, 0x7F13}, //{0xE7, 0xBC, 0x93}, // �� + {0xB5DE, 0x7F14}, //{0xE7, 0xBC, 0x94}, // �� + {0xC2C6, 0x7F15}, //{0xE7, 0xBC, 0x95}, // �� + {0xB1E0, 0x7F16}, //{0xE7, 0xBC, 0x96}, // �� {0xD4B5, 0x7F18}, //{0xE7, 0xBC, 0x98}, // Ե - {0xB8BF, 0x7F1A}, //{0xE7, 0xBC, 0x9A}, // - {0xB7EC, 0x7F1D}, //{0xE7, 0xBC, 0x9D}, // - {0xB2F8, 0x7F20}, //{0xE7, 0xBC, 0xA0}, // - {0xE7CD, 0x7F24}, //{0xE7, 0xBC, 0xA4}, // + {0xB8BF, 0x7F1A}, //{0xE7, 0xBC, 0x9A}, // �� + {0xB7EC, 0x7F1D}, //{0xE7, 0xBC, 0x9D}, // �� + {0xB2F8, 0x7F20}, //{0xE7, 0xBC, 0xA0}, // �� + {0xE7CD, 0x7F24}, //{0xE7, 0xBC, 0xA4}, // �� {0xD3A7, 0x7F28}, //{0xE7, 0xBC, 0xA8}, // ӧ - {0xCBF5, 0x7F29}, //{0xE7, 0xBC, 0xA9}, // - {0xE7D4, 0x7F2D}, //{0xE7, 0xBC, 0xAD}, // - {0xE7D6, 0x7F30}, //{0xE7, 0xBC, 0xB0}, // - {0xBDC9, 0x7F34}, //{0xE7, 0xBC, 0xB4}, // - {0xB8D7, 0x7F38}, //{0xE7, 0xBC, 0xB8}, // + {0xCBF5, 0x7F29}, //{0xE7, 0xBC, 0xA9}, // �� + {0xE7D4, 0x7F2D}, //{0xE7, 0xBC, 0xAD}, // �� + {0xE7D6, 0x7F30}, //{0xE7, 0xBC, 0xB0}, // �� + {0xBDC9, 0x7F34}, //{0xE7, 0xBC, 0xB4}, // �� + {0xB8D7, 0x7F38}, //{0xE7, 0xBC, 0xB8}, // �� {0xC8B1, 0x7F3A}, //{0xE7, 0xBC, 0xBA}, // ȱ - {0xB9DE, 0x7F50}, //{0xE7, 0xBD, 0x90}, // - {0xCDF8, 0x7F51}, //{0xE7, 0xBD, 0x91}, // - {0xBAB1, 0x7F55}, //{0xE7, 0xBD, 0x95}, // - {0xC2DE, 0x7F57}, //{0xE7, 0xBD, 0x97}, // - {0xB7A3, 0x7F5A}, //{0xE7, 0xBD, 0x9A}, // - {0xB0D5, 0x7F62}, //{0xE7, 0xBD, 0xA2}, // - {0xD5D6, 0x7F69}, //{0xE7, 0xBD, 0xA9}, // - {0xD7EF, 0x7F6A}, //{0xE7, 0xBD, 0xAA}, // - {0xD6C3, 0x7F6E}, //{0xE7, 0xBD, 0xAE}, // - {0xCAF0, 0x7F72}, //{0xE7, 0xBD, 0xB2}, // - {0xD1F2, 0x7F8A}, //{0xE7, 0xBE, 0x8A}, // - {0xC3C0, 0x7F8E}, //{0xE7, 0xBE, 0x8E}, // - {0xB8E1, 0x7F94}, //{0xE7, 0xBE, 0x94}, // - {0xD0DF, 0x7F9E}, //{0xE7, 0xBE, 0x9E}, // - {0xCFDB, 0x7FA1}, //{0xE7, 0xBE, 0xA1}, // + {0xB9DE, 0x7F50}, //{0xE7, 0xBD, 0x90}, // �� + {0xCDF8, 0x7F51}, //{0xE7, 0xBD, 0x91}, // �� + {0xBAB1, 0x7F55}, //{0xE7, 0xBD, 0x95}, // �� + {0xC2DE, 0x7F57}, //{0xE7, 0xBD, 0x97}, // �� + {0xB7A3, 0x7F5A}, //{0xE7, 0xBD, 0x9A}, // �� + {0xB0D5, 0x7F62}, //{0xE7, 0xBD, 0xA2}, // �� + {0xD5D6, 0x7F69}, //{0xE7, 0xBD, 0xA9}, // �� + {0xD7EF, 0x7F6A}, //{0xE7, 0xBD, 0xAA}, // �� + {0xD6C3, 0x7F6E}, //{0xE7, 0xBD, 0xAE}, // �� + {0xCAF0, 0x7F72}, //{0xE7, 0xBD, 0xB2}, // �� + {0xD1F2, 0x7F8A}, //{0xE7, 0xBE, 0x8A}, // �� + {0xC3C0, 0x7F8E}, //{0xE7, 0xBE, 0x8E}, // �� + {0xB8E1, 0x7F94}, //{0xE7, 0xBE, 0x94}, // �� + {0xD0DF, 0x7F9E}, //{0xE7, 0xBE, 0x9E}, // �� + {0xCFDB, 0x7FA1}, //{0xE7, 0xBE, 0xA1}, // �� {0xC8BA, 0x7FA4}, //{0xE7, 0xBE, 0xA4}, // Ⱥ - {0xB8FE, 0x7FB9}, //{0xE7, 0xBE, 0xB9}, // - {0xD3F0, 0x7FBD}, //{0xE7, 0xBE, 0xBD}, // - {0xCECC, 0x7FC1}, //{0xE7, 0xBF, 0x81}, // - {0xB3E1, 0x7FC5}, //{0xE7, 0xBF, 0x85}, // - {0xF4E1, 0x7FCE}, //{0xE7, 0xBF, 0x8E}, // - {0xCFE8, 0x7FD4}, //{0xE7, 0xBF, 0x94}, // - {0xC7CC, 0x7FD8}, //{0xE7, 0xBF, 0x98}, // - {0xB4E4, 0x7FE0}, //{0xE7, 0xBF, 0xA0}, // - {0xF4E6, 0x7FE9}, //{0xE7, 0xBF, 0xA9}, // - {0xBAB2, 0x7FF0}, //{0xE7, 0xBF, 0xB0}, // - {0xB7AD, 0x7FFB}, //{0xE7, 0xBF, 0xBB}, // - {0xD2ED, 0x7FFC}, //{0xE7, 0xBF, 0xBC}, // + {0xB8FE, 0x7FB9}, //{0xE7, 0xBE, 0xB9}, // �� + {0xD3F0, 0x7FBD}, //{0xE7, 0xBE, 0xBD}, // �� + {0xCECC, 0x7FC1}, //{0xE7, 0xBF, 0x81}, // �� + {0xB3E1, 0x7FC5}, //{0xE7, 0xBF, 0x85}, // �� + {0xF4E1, 0x7FCE}, //{0xE7, 0xBF, 0x8E}, // �� + {0xCFE8, 0x7FD4}, //{0xE7, 0xBF, 0x94}, // �� + {0xC7CC, 0x7FD8}, //{0xE7, 0xBF, 0x98}, // �� + {0xB4E4, 0x7FE0}, //{0xE7, 0xBF, 0xA0}, // �� + {0xF4E6, 0x7FE9}, //{0xE7, 0xBF, 0xA9}, // �� + {0xBAB2, 0x7FF0}, //{0xE7, 0xBF, 0xB0}, // �� + {0xB7AD, 0x7FFB}, //{0xE7, 0xBF, 0xBB}, // �� + {0xD2ED, 0x7FFC}, //{0xE7, 0xBF, 0xBC}, // �� {0xD2AB, 0x8000}, //{0xE8, 0x80, 0x80}, // ҫ - {0xC0CF, 0x8001}, //{0xE8, 0x80, 0x81}, // - {0xBFBC, 0x8003}, //{0xE8, 0x80, 0x83}, // - {0xD5DF, 0x8005}, //{0xE8, 0x80, 0x85}, // - {0xB6F8, 0x800C}, //{0xE8, 0x80, 0x8C}, // + {0xC0CF, 0x8001}, //{0xE8, 0x80, 0x81}, // �� + {0xBFBC, 0x8003}, //{0xE8, 0x80, 0x83}, // �� + {0xD5DF, 0x8005}, //{0xE8, 0x80, 0x85}, // �� + {0xB6F8, 0x800C}, //{0xE8, 0x80, 0x8C}, // �� {0xCBA3, 0x800D}, //{0xE8, 0x80, 0x8D}, // ˣ - {0xC4CD, 0x8010}, //{0xE8, 0x80, 0x90}, // - {0xB8FB, 0x8015}, //{0xE8, 0x80, 0x95}, // - {0xBAC4, 0x8017}, //{0xE8, 0x80, 0x97}, // - {0xB0D2, 0x8019}, //{0xE8, 0x80, 0x99}, // - {0xB6FA, 0x8033}, //{0xE8, 0x80, 0xB3}, // - {0xCBCA, 0x8038}, //{0xE8, 0x80, 0xB8}, // - {0xB3DC, 0x803B}, //{0xE8, 0x80, 0xBB}, // - {0xB5A2, 0x803D}, //{0xE8, 0x80, 0xBD}, // - {0xB9A2, 0x803F}, //{0xE8, 0x80, 0xBF}, // - {0xC4F4, 0x8042}, //{0xE8, 0x81, 0x82}, // - {0xC1C4, 0x804A}, //{0xE8, 0x81, 0x8A}, // - {0xC1FB, 0x804B}, //{0xE8, 0x81, 0x8B}, // + {0xC4CD, 0x8010}, //{0xE8, 0x80, 0x90}, // �� + {0xB8FB, 0x8015}, //{0xE8, 0x80, 0x95}, // �� + {0xBAC4, 0x8017}, //{0xE8, 0x80, 0x97}, // �� + {0xB0D2, 0x8019}, //{0xE8, 0x80, 0x99}, // �� + {0xB6FA, 0x8033}, //{0xE8, 0x80, 0xB3}, // �� + {0xCBCA, 0x8038}, //{0xE8, 0x80, 0xB8}, // �� + {0xB3DC, 0x803B}, //{0xE8, 0x80, 0xBB}, // �� + {0xB5A2, 0x803D}, //{0xE8, 0x80, 0xBD}, // �� + {0xB9A2, 0x803F}, //{0xE8, 0x80, 0xBF}, // �� + {0xC4F4, 0x8042}, //{0xE8, 0x81, 0x82}, // �� + {0xC1C4, 0x804A}, //{0xE8, 0x81, 0x8A}, // �� + {0xC1FB, 0x804B}, //{0xE8, 0x81, 0x8B}, // �� {0xD6B0, 0x804C}, //{0xE8, 0x81, 0x8C}, // ְ - {0xC1AA, 0x8054}, //{0xE8, 0x81, 0x94}, // + {0xC1AA, 0x8054}, //{0xE8, 0x81, 0x94}, // j {0xC6B8, 0x8058}, //{0xE8, 0x81, 0x98}, // Ƹ - {0xBEDB, 0x805A}, //{0xE8, 0x81, 0x9A}, // - {0xB4CF, 0x806A}, //{0xE8, 0x81, 0xAA}, // - {0xCBE0, 0x8083}, //{0xE8, 0x82, 0x83}, // - {0xD2DE, 0x8084}, //{0xE8, 0x82, 0x84}, // - {0xCBC1, 0x8086}, //{0xE8, 0x82, 0x86}, // - {0xC8E2, 0x8089}, //{0xE8, 0x82, 0x89}, // - {0xC0DF, 0x808B}, //{0xE8, 0x82, 0x8B}, // - {0xBCA1, 0x808C}, //{0xE8, 0x82, 0x8C}, // + {0xBEDB, 0x805A}, //{0xE8, 0x81, 0x9A}, // �� + {0xB4CF, 0x806A}, //{0xE8, 0x81, 0xAA}, // �� + {0xCBE0, 0x8083}, //{0xE8, 0x82, 0x83}, // �� + {0xD2DE, 0x8084}, //{0xE8, 0x82, 0x84}, // �� + {0xCBC1, 0x8086}, //{0xE8, 0x82, 0x86}, // �� + {0xC8E2, 0x8089}, //{0xE8, 0x82, 0x89}, // �� + {0xC0DF, 0x808B}, //{0xE8, 0x82, 0x8B}, // �� + {0xBCA1, 0x808C}, //{0xE8, 0x82, 0x8C}, // �� {0xD0A4, 0x8096}, //{0xE8, 0x82, 0x96}, // Ф - {0xD6E2, 0x8098}, //{0xE8, 0x82, 0x98}, // - {0xB6C7, 0x809A}, //{0xE8, 0x82, 0x9A}, // - {0xB8D8, 0x809B}, //{0xE8, 0x82, 0x9B}, // - {0xB8CE, 0x809D}, //{0xE8, 0x82, 0x9D}, // - {0xB3A6, 0x80A0}, //{0xE8, 0x82, 0xA0}, // - {0xB9C9, 0x80A1}, //{0xE8, 0x82, 0xA1}, // + {0xD6E2, 0x8098}, //{0xE8, 0x82, 0x98}, // �� + {0xB6C7, 0x809A}, //{0xE8, 0x82, 0x9A}, // �� + {0xB8D8, 0x809B}, //{0xE8, 0x82, 0x9B}, // �� + {0xB8CE, 0x809D}, //{0xE8, 0x82, 0x9D}, // �� + {0xB3A6, 0x80A0}, //{0xE8, 0x82, 0xA0}, // �� + {0xB9C9, 0x80A1}, //{0xE8, 0x82, 0xA1}, // �� {0xD6AB, 0x80A2}, //{0xE8, 0x82, 0xA2}, // ֫ - {0xB7F4, 0x80A4}, //{0xE8, 0x82, 0xA4}, // - {0xB7CA, 0x80A5}, //{0xE8, 0x82, 0xA5}, // - {0xBCE7, 0x80A9}, //{0xE8, 0x82, 0xA9}, // - {0xB7BE, 0x80AA}, //{0xE8, 0x82, 0xAA}, // - {0xB0B9, 0x80AE}, //{0xE8, 0x82, 0xAE}, // - {0xBFCF, 0x80AF}, //{0xE8, 0x82, 0xAF}, // - {0xD3FD, 0x80B2}, //{0xE8, 0x82, 0xB2}, // - {0xEBC8, 0x80B4}, //{0xE8, 0x82, 0xB4}, // - {0xB7CE, 0x80BA}, //{0xE8, 0x82, 0xBA}, // - {0xC9F6, 0x80BE}, //{0xE8, 0x82, 0xBE}, // - {0xD6D7, 0x80BF}, //{0xE8, 0x82, 0xBF}, // - {0xD5CD, 0x80C0}, //{0xE8, 0x83, 0x80}, // + {0xB7F4, 0x80A4}, //{0xE8, 0x82, 0xA4}, // �� + {0xB7CA, 0x80A5}, //{0xE8, 0x82, 0xA5}, // �� + {0xBCE7, 0x80A9}, //{0xE8, 0x82, 0xA9}, // �� + {0xB7BE, 0x80AA}, //{0xE8, 0x82, 0xAA}, // �� + {0xB0B9, 0x80AE}, //{0xE8, 0x82, 0xAE}, // �� + {0xBFCF, 0x80AF}, //{0xE8, 0x82, 0xAF}, // �� + {0xD3FD, 0x80B2}, //{0xE8, 0x82, 0xB2}, // �� + {0xEBC8, 0x80B4}, //{0xE8, 0x82, 0xB4}, // �� + {0xB7CE, 0x80BA}, //{0xE8, 0x82, 0xBA}, // �� + {0xC9F6, 0x80BE}, //{0xE8, 0x82, 0xBE}, // �� + {0xD6D7, 0x80BF}, //{0xE8, 0x82, 0xBF}, // �� + {0xD5CD, 0x80C0}, //{0xE8, 0x83, 0x80}, // �� {0xD0B2, 0x80C1}, //{0xE8, 0x83, 0x81}, // в {0xCEB8, 0x80C3}, //{0xE8, 0x83, 0x83}, // θ - {0xB5A8, 0x80C6}, //{0xE8, 0x83, 0x86}, // - {0xB1B3, 0x80CC}, //{0xE8, 0x83, 0x8C}, // + {0xB5A8, 0x80C6}, //{0xE8, 0x83, 0x86}, // �� + {0xB1B3, 0x80CC}, //{0xE8, 0x83, 0x8C}, // �� {0xCCA5, 0x80CE}, //{0xE8, 0x83, 0x8E}, // ̥ - {0xC5D6, 0x80D6}, //{0xE8, 0x83, 0x96}, // - {0xC5DF, 0x80DA}, //{0xE8, 0x83, 0x9A}, // + {0xC5D6, 0x80D6}, //{0xE8, 0x83, 0x96}, // �� + {0xC5DF, 0x80DA}, //{0xE8, 0x83, 0x9A}, // �� {0xCAA4, 0x80DC}, //{0xE8, 0x83, 0x9C}, // ʤ - {0xB0FB, 0x80DE}, //{0xE8, 0x83, 0x9E}, // - {0xBAFA, 0x80E1}, //{0xE8, 0x83, 0xA1}, // - {0xEBCA, 0x80E7}, //{0xE8, 0x83, 0xA7}, // - {0xBFE8, 0x80EF}, //{0xE8, 0x83, 0xAF}, // - {0xD2C8, 0x80F0}, //{0xE8, 0x83, 0xB0}, // - {0xB8EC, 0x80F3}, //{0xE8, 0x83, 0xB3}, // - {0xBDBA, 0x80F6}, //{0xE8, 0x83, 0xB6}, // - {0xD0D8, 0x80F8}, //{0xE8, 0x83, 0xB8}, // - {0xC4DC, 0x80FD}, //{0xE8, 0x83, 0xBD}, // + {0xB0FB, 0x80DE}, //{0xE8, 0x83, 0x9E}, // �� + {0xBAFA, 0x80E1}, //{0xE8, 0x83, 0xA1}, // �� + {0xEBCA, 0x80E7}, //{0xE8, 0x83, 0xA7}, // �� + {0xBFE8, 0x80EF}, //{0xE8, 0x83, 0xAF}, // �� + {0xD2C8, 0x80F0}, //{0xE8, 0x83, 0xB0}, // �� + {0xB8EC, 0x80F3}, //{0xE8, 0x83, 0xB3}, // �� + {0xBDBA, 0x80F6}, //{0xE8, 0x83, 0xB6}, // �� + {0xD0D8, 0x80F8}, //{0xE8, 0x83, 0xB8}, // �� + {0xC4DC, 0x80FD}, //{0xE8, 0x83, 0xBD}, // �� {0xD6AC, 0x8102}, //{0xE8, 0x84, 0x82}, // ֬ - {0xB4E0, 0x8106}, //{0xE8, 0x84, 0x86}, // - {0xC2F6, 0x8109}, //{0xE8, 0x84, 0x89}, // - {0xBCB9, 0x810A}, //{0xE8, 0x84, 0x8A}, // - {0xD4E0, 0x810F}, //{0xE8, 0x84, 0x8F}, // - {0xC6EA, 0x8110}, //{0xE8, 0x84, 0x90}, // - {0xC4D4, 0x8111}, //{0xE8, 0x84, 0x91}, // + {0xB4E0, 0x8106}, //{0xE8, 0x84, 0x86}, // �� + {0xC2F6, 0x8109}, //{0xE8, 0x84, 0x89}, // �� + {0xBCB9, 0x810A}, //{0xE8, 0x84, 0x8A}, // �� + {0xD4E0, 0x810F}, //{0xE8, 0x84, 0x8F}, // �� + {0xC6EA, 0x8110}, //{0xE8, 0x84, 0x90}, // �� + {0xC4D4, 0x8111}, //{0xE8, 0x84, 0x91}, // �� {0xC5A7, 0x8113}, //{0xE8, 0x84, 0x93}, // ŧ - {0xB2B1, 0x8116}, //{0xE8, 0x84, 0x96}, // - {0xBDC5, 0x811A}, //{0xE8, 0x84, 0x9A}, // - {0xB8AC, 0x812F}, //{0xE8, 0x84, 0xAF}, // - {0xCDD1, 0x8131}, //{0xE8, 0x84, 0xB1}, // - {0xC1B3, 0x8138}, //{0xE8, 0x84, 0xB8}, // + {0xB2B1, 0x8116}, //{0xE8, 0x84, 0x96}, // �� + {0xBDC5, 0x811A}, //{0xE8, 0x84, 0x9A}, // �� + {0xB8AC, 0x812F}, //{0xE8, 0x84, 0xAF}, // �� + {0xCDD1, 0x8131}, //{0xE8, 0x84, 0xB1}, // �� + {0xC1B3, 0x8138}, //{0xE8, 0x84, 0xB8}, // s {0xC6A2, 0x813E}, //{0xE8, 0x84, 0xBE}, // Ƣ - {0xC0B0, 0x814A}, //{0xE8, 0x85, 0x8A}, // + {0xC0B0, 0x814A}, //{0xE8, 0x85, 0x8A}, // 0 {0xD2B8, 0x814B}, //{0xE8, 0x85, 0x8B}, // Ҹ - {0xEBE7, 0x814C}, //{0xE8, 0x85, 0x8C}, // - {0xB8AF, 0x8150}, //{0xE8, 0x85, 0x90}, // + {0xEBE7, 0x814C}, //{0xE8, 0x85, 0x8C}, // �� + {0xB8AF, 0x8150}, //{0xE8, 0x85, 0x90}, // �� {0xC7BB, 0x8154}, //{0xE8, 0x85, 0x94}, // ǻ - {0xCDF3, 0x8155}, //{0xE8, 0x85, 0x95}, // - {0xD0C8, 0x8165}, //{0xE8, 0x85, 0xA5}, // - {0xC8F9, 0x816E}, //{0xE8, 0x85, 0xAE}, // - {0xD1FC, 0x8170}, //{0xE8, 0x85, 0xB0}, // - {0xB8B9, 0x8179}, //{0xE8, 0x85, 0xB9}, // - {0xCFD9, 0x817A}, //{0xE8, 0x85, 0xBA}, // - {0xC4E5, 0x817B}, //{0xE8, 0x85, 0xBB}, // - {0xCCDA, 0x817E}, //{0xE8, 0x85, 0xBE}, // - {0xCDC8, 0x817F}, //{0xE8, 0x85, 0xBF}, // - {0xB0F2, 0x8180}, //{0xE8, 0x86, 0x80}, // - {0xB2B2, 0x818A}, //{0xE8, 0x86, 0x8A}, // - {0xB8E0, 0x818F}, //{0xE8, 0x86, 0x8F}, // - {0xB1EC, 0x8198}, //{0xE8, 0x86, 0x98}, // - {0xCCC5, 0x819B}, //{0xE8, 0x86, 0x9B}, // + {0xCDF3, 0x8155}, //{0xE8, 0x85, 0x95}, // �� + {0xD0C8, 0x8165}, //{0xE8, 0x85, 0xA5}, // �� + {0xC8F9, 0x816E}, //{0xE8, 0x85, 0xAE}, // �� + {0xD1FC, 0x8170}, //{0xE8, 0x85, 0xB0}, // �� + {0xB8B9, 0x8179}, //{0xE8, 0x85, 0xB9}, // �� + {0xCFD9, 0x817A}, //{0xE8, 0x85, 0xBA}, // �� + {0xC4E5, 0x817B}, //{0xE8, 0x85, 0xBB}, // �� + {0xCCDA, 0x817E}, //{0xE8, 0x85, 0xBE}, // �� + {0xCDC8, 0x817F}, //{0xE8, 0x85, 0xBF}, // �� + {0xB0F2, 0x8180}, //{0xE8, 0x86, 0x80}, // �� + {0xB2B2, 0x818A}, //{0xE8, 0x86, 0x8A}, // �� + {0xB8E0, 0x818F}, //{0xE8, 0x86, 0x8F}, // �� + {0xB1EC, 0x8198}, //{0xE8, 0x86, 0x98}, // �� + {0xCCC5, 0x819B}, //{0xE8, 0x86, 0x9B}, // �� {0xC4A4, 0x819C}, //{0xE8, 0x86, 0x9C}, // Ĥ {0xCFA5, 0x819D}, //{0xE8, 0x86, 0x9D}, // ϥ - {0xC5F2, 0x81A8}, //{0xE8, 0x86, 0xA8}, // - {0xC9C5, 0x81B3}, //{0xE8, 0x86, 0xB3}, // - {0xCDCE, 0x81C0}, //{0xE8, 0x87, 0x80}, // - {0xB1DB, 0x81C2}, //{0xE8, 0x87, 0x82}, // - {0xEBFD, 0x81CA}, //{0xE8, 0x87, 0x8A}, // - {0xB3BC, 0x81E3}, //{0xE8, 0x87, 0xA3}, // - {0xD7D4, 0x81EA}, //{0xE8, 0x87, 0xAA}, // - {0xB3F4, 0x81ED}, //{0xE8, 0x87, 0xAD}, // - {0xD6C1, 0x81F3}, //{0xE8, 0x87, 0xB3}, // - {0xD6C2, 0x81F4}, //{0xE8, 0x87, 0xB4}, // - {0xBECA, 0x81FC}, //{0xE8, 0x87, 0xBC}, // + {0xC5F2, 0x81A8}, //{0xE8, 0x86, 0xA8}, // �� + {0xC9C5, 0x81B3}, //{0xE8, 0x86, 0xB3}, // �� + {0xCDCE, 0x81C0}, //{0xE8, 0x87, 0x80}, // �� + {0xB1DB, 0x81C2}, //{0xE8, 0x87, 0x82}, // �� + {0xEBFD, 0x81CA}, //{0xE8, 0x87, 0x8A}, // �� + {0xB3BC, 0x81E3}, //{0xE8, 0x87, 0xA3}, // �� + {0xD7D4, 0x81EA}, //{0xE8, 0x87, 0xAA}, // �� + {0xB3F4, 0x81ED}, //{0xE8, 0x87, 0xAD}, // �� + {0xD6C1, 0x81F3}, //{0xE8, 0x87, 0xB3}, // �� + {0xD6C2, 0x81F4}, //{0xE8, 0x87, 0xB4}, // �� + {0xBECA, 0x81FC}, //{0xE8, 0x87, 0xBC}, // �� {0xD2A8, 0x8200}, //{0xE8, 0x88, 0x80}, // Ҩ - {0xBECB, 0x8205}, //{0xE8, 0x88, 0x85}, // - {0xD3DF, 0x8206}, //{0xE8, 0x88, 0x86}, // - {0xC9E0, 0x820C}, //{0xE8, 0x88, 0x8C}, // - {0xC9E1, 0x820D}, //{0xE8, 0x88, 0x8D}, // - {0xCAE6, 0x8212}, //{0xE8, 0x88, 0x92}, // - {0xCCF2, 0x8214}, //{0xE8, 0x88, 0x94}, // - {0xCEE8, 0x821E}, //{0xE8, 0x88, 0x9E}, // - {0xD6DB, 0x821F}, //{0xE8, 0x88, 0x9F}, // - {0xBABD, 0x822A}, //{0xE8, 0x88, 0xAA}, // - {0xB0E3, 0x822C}, //{0xE8, 0x88, 0xAC}, // - {0xBDA2, 0x8230}, //{0xE8, 0x88, 0xB0}, // - {0xB2D5, 0x8231}, //{0xE8, 0x88, 0xB1}, // - {0xB6E6, 0x8235}, //{0xE8, 0x88, 0xB5}, // - {0xB2B0, 0x8236}, //{0xE8, 0x88, 0xB6}, // - {0xCFCF, 0x8237}, //{0xE8, 0x88, 0xB7}, // - {0xB4AC, 0x8239}, //{0xE8, 0x88, 0xB9}, // + {0xBECB, 0x8205}, //{0xE8, 0x88, 0x85}, // �� + {0xD3DF, 0x8206}, //{0xE8, 0x88, 0x86}, // �� + {0xC9E0, 0x820C}, //{0xE8, 0x88, 0x8C}, // �� + {0xC9E1, 0x820D}, //{0xE8, 0x88, 0x8D}, // �� + {0xCAE6, 0x8212}, //{0xE8, 0x88, 0x92}, // �� + {0xCCF2, 0x8214}, //{0xE8, 0x88, 0x94}, // �� + {0xCEE8, 0x821E}, //{0xE8, 0x88, 0x9E}, // �� + {0xD6DB, 0x821F}, //{0xE8, 0x88, 0x9F}, // �� + {0xBABD, 0x822A}, //{0xE8, 0x88, 0xAA}, // �� + {0xB0E3, 0x822C}, //{0xE8, 0x88, 0xAC}, // �� + {0xBDA2, 0x8230}, //{0xE8, 0x88, 0xB0}, // �� + {0xB2D5, 0x8231}, //{0xE8, 0x88, 0xB1}, // �� + {0xB6E6, 0x8235}, //{0xE8, 0x88, 0xB5}, // �� + {0xB2B0, 0x8236}, //{0xE8, 0x88, 0xB6}, // �� + {0xCFCF, 0x8237}, //{0xE8, 0x88, 0xB7}, // �� + {0xB4AC, 0x8239}, //{0xE8, 0x88, 0xB9}, // �� {0xCDA7, 0x8247}, //{0xE8, 0x89, 0x87}, // ͧ - {0xCBD2, 0x8258}, //{0xE8, 0x89, 0x98}, // - {0xC1BC, 0x826F}, //{0xE8, 0x89, 0xAF}, // - {0xBCE8, 0x8270}, //{0xE8, 0x89, 0xB0}, // + {0xCBD2, 0x8258}, //{0xE8, 0x89, 0x98}, // �� + {0xC1BC, 0x826F}, //{0xE8, 0x89, 0xAF}, // | + {0xBCE8, 0x8270}, //{0xE8, 0x89, 0xB0}, // �� {0xC9AB, 0x8272}, //{0xE8, 0x89, 0xB2}, // ɫ - {0xD1DE, 0x8273}, //{0xE8, 0x89, 0xB3}, // - {0xD2D5, 0x827A}, //{0xE8, 0x89, 0xBA}, // - {0xB0AC, 0x827E}, //{0xE8, 0x89, 0xBE}, // - {0xBDDA, 0x8282}, //{0xE8, 0x8A, 0x82}, // - {0xD3F3, 0x828B}, //{0xE8, 0x8A, 0x8B}, // - {0xC9D6, 0x828D}, //{0xE8, 0x8A, 0x8D}, // + {0xD1DE, 0x8273}, //{0xE8, 0x89, 0xB3}, // �� + {0xD2D5, 0x827A}, //{0xE8, 0x89, 0xBA}, // �� + {0xB0AC, 0x827E}, //{0xE8, 0x89, 0xBE}, // �� + {0xBDDA, 0x8282}, //{0xE8, 0x8A, 0x82}, // �� + {0xD3F3, 0x828B}, //{0xE8, 0x8A, 0x8B}, // �� + {0xC9D6, 0x828D}, //{0xE8, 0x8A, 0x8D}, // �� {0xC3A2, 0x8292}, //{0xE8, 0x8A, 0x92}, // â {0xDCBD, 0x8299}, //{0xE8, 0x8A, 0x99}, // ܽ - {0xCEDF, 0x829C}, //{0xE8, 0x8A, 0x9C}, // + {0xCEDF, 0x829C}, //{0xE8, 0x8A, 0x9C}, // �� {0xD6A5, 0x829D}, //{0xE8, 0x8A, 0x9D}, // ֥ - {0xBDE6, 0x82A5}, //{0xE8, 0x8A, 0xA5}, // + {0xBDE6, 0x82A5}, //{0xE8, 0x8A, 0xA5}, // �� {0xC2AB, 0x82A6}, //{0xE8, 0x8A, 0xA6}, // « - {0xB7D2, 0x82AC}, //{0xE8, 0x8A, 0xAC}, // - {0xB0C5, 0x82AD}, //{0xE8, 0x8A, 0xAD}, // + {0xB7D2, 0x82AC}, //{0xE8, 0x8A, 0xAC}, // �� + {0xB0C5, 0x82AD}, //{0xE8, 0x8A, 0xAD}, // �� {0xD0BE, 0x82AF}, //{0xE8, 0x8A, 0xAF}, // о - {0xBBA8, 0x82B1}, //{0xE8, 0x8A, 0xB1}, // - {0xB7BC, 0x82B3}, //{0xE8, 0x8A, 0xB3}, // - {0xC7DB, 0x82B9}, //{0xE8, 0x8A, 0xB9}, // + {0xBBA8, 0x82B1}, //{0xE8, 0x8A, 0xB1}, // �� + {0xB7BC, 0x82B3}, //{0xE8, 0x8A, 0xB3}, // �� + {0xC7DB, 0x82B9}, //{0xE8, 0x8A, 0xB9}, // �� {0xD1BF, 0x82BD}, //{0xE8, 0x8A, 0xBD}, // ѿ {0xCEAD, 0x82C7}, //{0xE8, 0x8B, 0x87}, // έ - {0xB2D4, 0x82CD}, //{0xE8, 0x8B, 0x8D}, // - {0xCBD5, 0x82CF}, //{0xE8, 0x8B, 0x8F}, // + {0xB2D4, 0x82CD}, //{0xE8, 0x8B, 0x8D}, // �� + {0xCBD5, 0x82CF}, //{0xE8, 0x8B, 0x8F}, // �� {0xCCA6, 0x82D4}, //{0xE8, 0x8B, 0x94}, // ̦ - {0xC3E7, 0x82D7}, //{0xE8, 0x8B, 0x97}, // - {0xBFC1, 0x82DB}, //{0xE8, 0x8B, 0x9B}, // - {0xB0FA, 0x82DE}, //{0xE8, 0x8B, 0x9E}, // - {0xB9B6, 0x82DF}, //{0xE8, 0x8B, 0x9F}, // - {0xC8F4, 0x82E5}, //{0xE8, 0x8B, 0xA5}, // - {0xBFE0, 0x82E6}, //{0xE8, 0x8B, 0xA6}, // + {0xC3E7, 0x82D7}, //{0xE8, 0x8B, 0x97}, // �� + {0xBFC1, 0x82DB}, //{0xE8, 0x8B, 0x9B}, // �� + {0xB0FA, 0x82DE}, //{0xE8, 0x8B, 0x9E}, // �� + {0xB9B6, 0x82DF}, //{0xE8, 0x8B, 0x9F}, // �� + {0xC8F4, 0x82E5}, //{0xE8, 0x8B, 0xA5}, // �� + {0xBFE0, 0x82E6}, //{0xE8, 0x8B, 0xA6}, // �� {0xC9BB, 0x82EB}, //{0xE8, 0x8B, 0xAB}, // ɻ {0xD3A2, 0x82F1}, //{0xE8, 0x8B, 0xB1}, // Ӣ {0xC6BB, 0x82F9}, //{0xE8, 0x8B, 0xB9}, // ƻ - {0xD7C2, 0x8301}, //{0xE8, 0x8C, 0x81}, // + {0xD7C2, 0x8301}, //{0xE8, 0x8C, 0x81}, // �� {0xC3AF, 0x8302}, //{0xE8, 0x8C, 0x82}, // ï - {0xB7B6, 0x8303}, //{0xE8, 0x8C, 0x83}, // - {0xC7D1, 0x8304}, //{0xE8, 0x8C, 0x84}, // + {0xB7B6, 0x8303}, //{0xE8, 0x8C, 0x83}, // �� + {0xC7D1, 0x8304}, //{0xE8, 0x8C, 0x84}, // �� {0xC3A9, 0x8305}, //{0xE8, 0x8C, 0x85}, // é - {0xDCD4, 0x8309}, //{0xE8, 0x8C, 0x89}, // - {0xBEA5, 0x830E}, //{0xE8, 0x8C, 0x8E}, // - {0xBCEB, 0x8327}, //{0xE8, 0x8C, 0xA7}, // + {0xDCD4, 0x8309}, //{0xE8, 0x8C, 0x89}, // �� + {0xBEA5, 0x830E}, //{0xE8, 0x8C, 0x8E}, // �� + {0xBCEB, 0x8327}, //{0xE8, 0x8C, 0xA7}, // �� {0xC3A3, 0x832B}, //{0xE8, 0x8C, 0xAB}, // ã - {0xB2E7, 0x832C}, //{0xE8, 0x8C, 0xAC}, // - {0xDCEE, 0x8334}, //{0xE8, 0x8C, 0xB4}, // - {0xD2F0, 0x8335}, //{0xE8, 0x8C, 0xB5}, // - {0xB2E8, 0x8336}, //{0xE8, 0x8C, 0xB6}, // - {0xC8D7, 0x8338}, //{0xE8, 0x8C, 0xB8}, // - {0xBEA3, 0x8346}, //{0xE8, 0x8D, 0x86}, // - {0xB2DD, 0x8349}, //{0xE8, 0x8D, 0x89}, // - {0xBCF6, 0x8350}, //{0xE8, 0x8D, 0x90}, // - {0xBBC4, 0x8352}, //{0xE8, 0x8D, 0x92}, // - {0xC0F3, 0x8354}, //{0xE8, 0x8D, 0x94}, // - {0xBCD4, 0x835A}, //{0xE8, 0x8D, 0x9A}, // - {0xDCF1, 0x835E}, //{0xE8, 0x8D, 0x9E}, // - {0xDCF9, 0x8360}, //{0xE8, 0x8D, 0xA0}, // - {0xB5B4, 0x8361}, //{0xE8, 0x8D, 0xA1}, // - {0xC8D9, 0x8363}, //{0xE8, 0x8D, 0xA3}, // - {0xBBE7, 0x8364}, //{0xE8, 0x8D, 0xA4}, // + {0xB2E7, 0x832C}, //{0xE8, 0x8C, 0xAC}, // �� + {0xDCEE, 0x8334}, //{0xE8, 0x8C, 0xB4}, // �� + {0xD2F0, 0x8335}, //{0xE8, 0x8C, 0xB5}, // �� + {0xB2E8, 0x8336}, //{0xE8, 0x8C, 0xB6}, // �� + {0xC8D7, 0x8338}, //{0xE8, 0x8C, 0xB8}, // �� + {0xBEA3, 0x8346}, //{0xE8, 0x8D, 0x86}, // �� + {0xB2DD, 0x8349}, //{0xE8, 0x8D, 0x89}, // �� + {0xBCF6, 0x8350}, //{0xE8, 0x8D, 0x90}, // �� + {0xBBC4, 0x8352}, //{0xE8, 0x8D, 0x92}, // �� + {0xC0F3, 0x8354}, //{0xE8, 0x8D, 0x94}, // �� + {0xBCD4, 0x835A}, //{0xE8, 0x8D, 0x9A}, // �� + {0xDCF1, 0x835E}, //{0xE8, 0x8D, 0x9E}, // �� + {0xDCF9, 0x8360}, //{0xE8, 0x8D, 0xA0}, // �� + {0xB5B4, 0x8361}, //{0xE8, 0x8D, 0xA1}, // �� + {0xC8D9, 0x8363}, //{0xE8, 0x8D, 0xA3}, // �� + {0xBBE7, 0x8364}, //{0xE8, 0x8D, 0xA4}, // �� {0xD3AB, 0x8367}, //{0xE8, 0x8D, 0xA7}, // ӫ {0xD2A9, 0x836F}, //{0xE8, 0x8D, 0xAF}, // ҩ - {0xBAC9, 0x8377}, //{0xE8, 0x8D, 0xB7}, // + {0xBAC9, 0x8377}, //{0xE8, 0x8D, 0xB7}, // �� {0xDDA9, 0x8378}, //{0xE8, 0x8D, 0xB8}, // ݩ - {0xC0F2, 0x8389}, //{0xE8, 0x8E, 0x89}, // + {0xC0F2, 0x8389}, //{0xE8, 0x8E, 0x89}, // �� {0xC4AA, 0x83AB}, //{0xE8, 0x8E, 0xAB}, // Ī - {0xC0B3, 0x83B1}, //{0xE8, 0x8E, 0xB1}, // - {0xC1AB, 0x83B2}, //{0xE8, 0x8E, 0xB2}, // - {0xBBF1, 0x83B7}, //{0xE8, 0x8E, 0xB7}, // + {0xC0B3, 0x83B1}, //{0xE8, 0x8E, 0xB1}, // 3 + {0xC1AB, 0x83B2}, //{0xE8, 0x8E, 0xB2}, // k + {0xBBF1, 0x83B7}, //{0xE8, 0x8E, 0xB7}, // �� {0xD3A8, 0x83B9}, //{0xE8, 0x8E, 0xB9}, // Ө {0xDDBA, 0x83BA}, //{0xE8, 0x8E, 0xBA}, // ݺ {0xC3A7, 0x83BD}, //{0xE8, 0x8E, 0xBD}, // ç - {0xB9BD, 0x83C7}, //{0xE8, 0x8F, 0x87}, // - {0xBED5, 0x83CA}, //{0xE8, 0x8F, 0x8A}, // - {0xBEFA, 0x83CC}, //{0xE8, 0x8F, 0x8C}, // - {0xB2CB, 0x83DC}, //{0xE8, 0x8F, 0x9C}, // - {0xB2A4, 0x83E0}, //{0xE8, 0x8F, 0xA0}, // - {0xC6D0, 0x83E9}, //{0xE8, 0x8F, 0xA9}, // - {0xC1E2, 0x83F1}, //{0xE8, 0x8F, 0xB1}, // - {0xB7C6, 0x83F2}, //{0xE8, 0x8F, 0xB2}, // - {0xCCD1, 0x8404}, //{0xE8, 0x90, 0x84}, // - {0xC3C8, 0x840C}, //{0xE8, 0x90, 0x8C}, // + {0xB9BD, 0x83C7}, //{0xE8, 0x8F, 0x87}, // �� + {0xBED5, 0x83CA}, //{0xE8, 0x8F, 0x8A}, // �� + {0xBEFA, 0x83CC}, //{0xE8, 0x8F, 0x8C}, // �� + {0xB2CB, 0x83DC}, //{0xE8, 0x8F, 0x9C}, // �� + {0xB2A4, 0x83E0}, //{0xE8, 0x8F, 0xA0}, // �� + {0xC6D0, 0x83E9}, //{0xE8, 0x8F, 0xA9}, // �� + {0xC1E2, 0x83F1}, //{0xE8, 0x8F, 0xB1}, // �� + {0xB7C6, 0x83F2}, //{0xE8, 0x8F, 0xB2}, // �� + {0xCCD1, 0x8404}, //{0xE8, 0x90, 0x84}, // �� + {0xC3C8, 0x840C}, //{0xE8, 0x90, 0x8C}, // �� {0xC6BC, 0x840D}, //{0xE8, 0x90, 0x8D}, // Ƽ {0xCEAE, 0x840E}, //{0xE8, 0x90, 0x8E}, // ή - {0xC2DC, 0x841D}, //{0xE8, 0x90, 0x9D}, // + {0xC2DC, 0x841D}, //{0xE8, 0x90, 0x9D}, // �� {0xD3A9, 0x8424}, //{0xE8, 0x90, 0xA4}, // ө {0xD3AA, 0x8425}, //{0xE8, 0x90, 0xA5}, // Ӫ - {0xCFF4, 0x8427}, //{0xE8, 0x90, 0xA7}, // - {0xC8F8, 0x8428}, //{0xE8, 0x90, 0xA8}, // - {0xC2E4, 0x843D}, //{0xE8, 0x90, 0xBD}, // - {0xD6F8, 0x8457}, //{0xE8, 0x91, 0x97}, // - {0xB8F0, 0x845B}, //{0xE8, 0x91, 0x9B}, // - {0xC6CF, 0x8461}, //{0xE8, 0x91, 0xA1}, // - {0xB6AD, 0x8463}, //{0xE8, 0x91, 0xA3}, // - {0xBAF9, 0x846B}, //{0xE8, 0x91, 0xAB}, // - {0xD4E1, 0x846C}, //{0xE8, 0x91, 0xAC}, // - {0xB4D0, 0x8471}, //{0xE8, 0x91, 0xB1}, // - {0xBFFB, 0x8475}, //{0xE8, 0x91, 0xB5}, // - {0xB5D9, 0x8482}, //{0xE8, 0x92, 0x82}, // - {0xBDAF, 0x848B}, //{0xE8, 0x92, 0x8B}, // - {0xC3C9, 0x8499}, //{0xE8, 0x92, 0x99}, // - {0xCBE2, 0x849C}, //{0xE8, 0x92, 0x9C}, // - {0xC6D1, 0x84B2}, //{0xE8, 0x92, 0xB2}, // - {0xD5F4, 0x84B8}, //{0xE8, 0x92, 0xB8}, // - {0xDDEF, 0x84BF}, //{0xE8, 0x92, 0xBF}, // - {0xD0EE, 0x84C4}, //{0xE8, 0x93, 0x84}, // - {0xC8D8, 0x84C9}, //{0xE8, 0x93, 0x89}, // - {0xB1CD, 0x84D6}, //{0xE8, 0x93, 0x96}, // - {0xC0B6, 0x84DD}, //{0xE8, 0x93, 0x9D}, // - {0xC5EE, 0x84EC}, //{0xE8, 0x93, 0xAC}, // - {0xC3EF, 0x8511}, //{0xE8, 0x94, 0x91}, // - {0xC2FB, 0x8513}, //{0xE8, 0x94, 0x93}, // - {0xD5E1, 0x8517}, //{0xE8, 0x94, 0x97}, // + {0xCFF4, 0x8427}, //{0xE8, 0x90, 0xA7}, // �� + {0xC8F8, 0x8428}, //{0xE8, 0x90, 0xA8}, // �� + {0xC2E4, 0x843D}, //{0xE8, 0x90, 0xBD}, // �� + {0xD6F8, 0x8457}, //{0xE8, 0x91, 0x97}, // �� + {0xB8F0, 0x845B}, //{0xE8, 0x91, 0x9B}, // �� + {0xC6CF, 0x8461}, //{0xE8, 0x91, 0xA1}, // �� + {0xB6AD, 0x8463}, //{0xE8, 0x91, 0xA3}, // �� + {0xBAF9, 0x846B}, //{0xE8, 0x91, 0xAB}, // �� + {0xD4E1, 0x846C}, //{0xE8, 0x91, 0xAC}, // �� + {0xB4D0, 0x8471}, //{0xE8, 0x91, 0xB1}, // �� + {0xBFFB, 0x8475}, //{0xE8, 0x91, 0xB5}, // �� + {0xB5D9, 0x8482}, //{0xE8, 0x92, 0x82}, // �� + {0xBDAF, 0x848B}, //{0xE8, 0x92, 0x8B}, // �� + {0xC3C9, 0x8499}, //{0xE8, 0x92, 0x99}, // �� + {0xCBE2, 0x849C}, //{0xE8, 0x92, 0x9C}, // �� + {0xC6D1, 0x84B2}, //{0xE8, 0x92, 0xB2}, // �� + {0xD5F4, 0x84B8}, //{0xE8, 0x92, 0xB8}, // �� + {0xDDEF, 0x84BF}, //{0xE8, 0x92, 0xBF}, // �� + {0xD0EE, 0x84C4}, //{0xE8, 0x93, 0x84}, // �� + {0xC8D8, 0x84C9}, //{0xE8, 0x93, 0x89}, // �� + {0xB1CD, 0x84D6}, //{0xE8, 0x93, 0x96}, // �� + {0xC0B6, 0x84DD}, //{0xE8, 0x93, 0x9D}, // 6 + {0xC5EE, 0x84EC}, //{0xE8, 0x93, 0xAC}, // �� + {0xC3EF, 0x8511}, //{0xE8, 0x94, 0x91}, // �� + {0xC2FB, 0x8513}, //{0xE8, 0x94, 0x93}, // �� + {0xD5E1, 0x8517}, //{0xE8, 0x94, 0x97}, // �� {0xCEB5, 0x851A}, //{0xE8, 0x94, 0x9A}, // ε - {0xC4E8, 0x852B}, //{0xE8, 0x94, 0xAB}, // - {0xCADF, 0x852C}, //{0xE8, 0x94, 0xAC}, // - {0xB0AA, 0x853C}, //{0xE8, 0x94, 0xBC}, // - {0xB1CE, 0x853D}, //{0xE8, 0x94, 0xBD}, // - {0xBDB6, 0x8549}, //{0xE8, 0x95, 0x89}, // - {0xC8EF, 0x854A}, //{0xE8, 0x95, 0x8A}, // - {0xD4CC, 0x8574}, //{0xE8, 0x95, 0xB4}, // - {0xC0D9, 0x857E}, //{0xE8, 0x95, 0xBE}, // - {0xB1A1, 0x8584}, //{0xE8, 0x96, 0x84}, // + {0xC4E8, 0x852B}, //{0xE8, 0x94, 0xAB}, // �� + {0xCADF, 0x852C}, //{0xE8, 0x94, 0xAC}, // �� + {0xB0AA, 0x853C}, //{0xE8, 0x94, 0xBC}, // �� + {0xB1CE, 0x853D}, //{0xE8, 0x94, 0xBD}, // �� + {0xBDB6, 0x8549}, //{0xE8, 0x95, 0x89}, // �� + {0xC8EF, 0x854A}, //{0xE8, 0x95, 0x8A}, // �� + {0xD4CC, 0x8574}, //{0xE8, 0x95, 0xB4}, // �� + {0xC0D9, 0x857E}, //{0xE8, 0x95, 0xBE}, // �� + {0xB1A1, 0x8584}, //{0xE8, 0x96, 0x84}, // �� {0xDEB1, 0x8587}, //{0xE8, 0x96, 0x87}, // ޱ {0xD1A6, 0x859B}, //{0xE8, 0x96, 0x9B}, // Ѧ {0xD0BD, 0x85AA}, //{0xE8, 0x96, 0xAA}, // н - {0xCAED, 0x85AF}, //{0xE8, 0x96, 0xAF}, // - {0xB2D8, 0x85CF}, //{0xE8, 0x97, 0x8F}, // - {0xC3EA, 0x85D0}, //{0xE8, 0x97, 0x90}, // + {0xCAED, 0x85AF}, //{0xE8, 0x96, 0xAF}, // �� + {0xB2D8, 0x85CF}, //{0xE8, 0x97, 0x8F}, // �� + {0xC3EA, 0x85D0}, //{0xE8, 0x97, 0x90}, // �� {0xC5BA, 0x85D5}, //{0xE8, 0x97, 0x95}, // ź - {0xCCD9, 0x85E4}, //{0xE8, 0x97, 0xA4}, // - {0xD4E5, 0x85FB}, //{0xE8, 0x97, 0xBB}, // + {0xCCD9, 0x85E4}, //{0xE8, 0x97, 0xA4}, // �� + {0xD4E5, 0x85FB}, //{0xE8, 0x97, 0xBB}, // �� {0xC4A2, 0x8611}, //{0xE8, 0x98, 0x91}, // Ģ {0xD5BA, 0x8638}, //{0xE8, 0x98, 0xB8}, // պ - {0xBBA2, 0x864E}, //{0xE8, 0x99, 0x8E}, // + {0xBBA2, 0x864E}, //{0xE8, 0x99, 0x8E}, // �� {0xC2B2, 0x864F}, //{0xE8, 0x99, 0x8F}, // ² {0xC5B0, 0x8650}, //{0xE8, 0x99, 0x90}, // Ű - {0xC2C7, 0x8651}, //{0xE8, 0x99, 0x91}, // - {0xD0E9, 0x865A}, //{0xE8, 0x99, 0x9A}, // - {0xB3E6, 0x866B}, //{0xE8, 0x99, 0xAB}, // + {0xC2C7, 0x8651}, //{0xE8, 0x99, 0x91}, // �� + {0xD0E9, 0x865A}, //{0xE8, 0x99, 0x9A}, // �� + {0xB3E6, 0x866B}, //{0xE8, 0x99, 0xAB}, // �� {0xCAAD, 0x8671}, //{0xE8, 0x99, 0xB1}, // ʭ - {0xBAE7, 0x8679}, //{0xE8, 0x99, 0xB9}, // - {0xCBE4, 0x867D}, //{0xE8, 0x99, 0xBD}, // + {0xBAE7, 0x8679}, //{0xE8, 0x99, 0xB9}, // �� + {0xCBE4, 0x867D}, //{0xE8, 0x99, 0xBD}, // �� {0xCFBA, 0x867E}, //{0xE8, 0x99, 0xBE}, // Ϻ {0xCAB4, 0x8680}, //{0xE8, 0x9A, 0x80}, // ʴ - {0xD2CF, 0x8681}, //{0xE8, 0x9A, 0x81}, // - {0xC2EC, 0x8682}, //{0xE8, 0x9A, 0x82}, // - {0xCEC3, 0x868A}, //{0xE8, 0x9A, 0x8A}, // - {0xB0F6, 0x868C}, //{0xE8, 0x9A, 0x8C}, // - {0xF2BE, 0x8693}, //{0xE8, 0x9A, 0x93}, // - {0xB2CF, 0x8695}, //{0xE8, 0x9A, 0x95}, // - {0xD1C1, 0x869C}, //{0xE8, 0x9A, 0x9C}, // - {0xF2BC, 0x86A3}, //{0xE8, 0x9A, 0xA3}, // - {0xD4E9, 0x86A4}, //{0xE8, 0x9A, 0xA4}, // - {0xF2BD, 0x86AA}, //{0xE8, 0x9A, 0xAA}, // - {0xF2C7, 0x86AF}, //{0xE8, 0x9A, 0xAF}, // - {0xD6FB, 0x86C0}, //{0xE8, 0x9B, 0x80}, // - {0xC7F9, 0x86C6}, //{0xE8, 0x9B, 0x86}, // - {0xC9DF, 0x86C7}, //{0xE8, 0x9B, 0x87}, // - {0xF2C8, 0x86C9}, //{0xE8, 0x9B, 0x89}, // - {0xB5B0, 0x86CB}, //{0xE8, 0x9B, 0x8B}, // - {0xBBD7, 0x86D4}, //{0xE8, 0x9B, 0x94}, // - {0xCDDC, 0x86D9}, //{0xE8, 0x9B, 0x99}, // - {0xD6EB, 0x86DB}, //{0xE8, 0x9B, 0x9B}, // - {0xB8F2, 0x86E4}, //{0xE8, 0x9B, 0xA4}, // - {0xC2F9, 0x86EE}, //{0xE8, 0x9B, 0xAE}, // + {0xD2CF, 0x8681}, //{0xE8, 0x9A, 0x81}, // �� + {0xC2EC, 0x8682}, //{0xE8, 0x9A, 0x82}, // �� + {0xCEC3, 0x868A}, //{0xE8, 0x9A, 0x8A}, // �� + {0xB0F6, 0x868C}, //{0xE8, 0x9A, 0x8C}, // �� + {0xF2BE, 0x8693}, //{0xE8, 0x9A, 0x93}, // � + {0xB2CF, 0x8695}, //{0xE8, 0x9A, 0x95}, // �� + {0xD1C1, 0x869C}, //{0xE8, 0x9A, 0x9C}, // �� + {0xF2BC, 0x86A3}, //{0xE8, 0x9A, 0xA3}, // � + {0xD4E9, 0x86A4}, //{0xE8, 0x9A, 0xA4}, // �� + {0xF2BD, 0x86AA}, //{0xE8, 0x9A, 0xAA}, // � + {0xF2C7, 0x86AF}, //{0xE8, 0x9A, 0xAF}, // �� + {0xD6FB, 0x86C0}, //{0xE8, 0x9B, 0x80}, // �� + {0xC7F9, 0x86C6}, //{0xE8, 0x9B, 0x86}, // �� + {0xC9DF, 0x86C7}, //{0xE8, 0x9B, 0x87}, // �� + {0xF2C8, 0x86C9}, //{0xE8, 0x9B, 0x89}, // �� + {0xB5B0, 0x86CB}, //{0xE8, 0x9B, 0x8B}, // �� + {0xBBD7, 0x86D4}, //{0xE8, 0x9B, 0x94}, // �� + {0xCDDC, 0x86D9}, //{0xE8, 0x9B, 0x99}, // �� + {0xD6EB, 0x86DB}, //{0xE8, 0x9B, 0x9B}, // �� + {0xB8F2, 0x86E4}, //{0xE8, 0x9B, 0xA4}, // �� + {0xC2F9, 0x86EE}, //{0xE8, 0x9B, 0xAE}, // �� {0xD3BC, 0x86F9}, //{0xE8, 0x9B, 0xB9}, // Ӽ - {0xB6EA, 0x86FE}, //{0xE8, 0x9B, 0xBE}, // - {0xCAF1, 0x8700}, //{0xE8, 0x9C, 0x80}, // - {0xB7E4, 0x8702}, //{0xE8, 0x9C, 0x82}, // - {0xF2DA, 0x8708}, //{0xE8, 0x9C, 0x88}, // - {0xD1D1, 0x8712}, //{0xE8, 0x9C, 0x92}, // - {0xF2D1, 0x8713}, //{0xE8, 0x9C, 0x93}, // - {0xCDC9, 0x8715}, //{0xE8, 0x9C, 0x95}, // - {0xCECF, 0x8717}, //{0xE8, 0x9C, 0x97}, // + {0xB6EA, 0x86FE}, //{0xE8, 0x9B, 0xBE}, // �� + {0xCAF1, 0x8700}, //{0xE8, 0x9C, 0x80}, // �� + {0xB7E4, 0x8702}, //{0xE8, 0x9C, 0x82}, // �� + {0xF2DA, 0x8708}, //{0xE8, 0x9C, 0x88}, // �� + {0xD1D1, 0x8712}, //{0xE8, 0x9C, 0x92}, // �� + {0xF2D1, 0x8713}, //{0xE8, 0x9C, 0x93}, // �� + {0xCDC9, 0x8715}, //{0xE8, 0x9C, 0x95}, // �� + {0xCECF, 0x8717}, //{0xE8, 0x9C, 0x97}, // �� {0xD6A9, 0x8718}, //{0xE8, 0x9C, 0x98}, // ֩ - {0xC3DB, 0x871C}, //{0xE8, 0x9C, 0x9C}, // - {0xC0AF, 0x8721}, //{0xE8, 0x9C, 0xA1}, // - {0xF2DF, 0x873B}, //{0xE8, 0x9C, 0xBB}, // + {0xC3DB, 0x871C}, //{0xE8, 0x9C, 0x9C}, // �� + {0xC0AF, 0x8721}, //{0xE8, 0x9C, 0xA1}, // / + {0xF2DF, 0x873B}, //{0xE8, 0x9C, 0xBB}, // �� {0xD3AC, 0x8747}, //{0xE8, 0x9D, 0x87}, // Ӭ - {0xB2F5, 0x8749}, //{0xE8, 0x9D, 0x89}, // - {0xF2F2, 0x874C}, //{0xE8, 0x9D, 0x8C}, // + {0xB2F5, 0x8749}, //{0xE8, 0x9D, 0x89}, // �� + {0xF2F2, 0x874C}, //{0xE8, 0x9D, 0x8C}, // �� {0xD0AB, 0x874E}, //{0xE8, 0x9D, 0x8E}, // Ы - {0xBBC8, 0x8757}, //{0xE8, 0x9D, 0x97}, // - {0xF2F9, 0x8759}, //{0xE8, 0x9D, 0x99}, // - {0xF2F0, 0x8760}, //{0xE8, 0x9D, 0xA0}, // - {0xBAFB, 0x8774}, //{0xE8, 0x9D, 0xB4}, // - {0xB5FB, 0x8776}, //{0xE8, 0x9D, 0xB6}, // - {0xF3A6, 0x8783}, //{0xE8, 0x9E, 0x83}, // - {0xC8DA, 0x878D}, //{0xE8, 0x9E, 0x8D}, // - {0xC3F8, 0x879F}, //{0xE8, 0x9E, 0x9F}, // - {0xC2DD, 0x87BA}, //{0xE8, 0x9E, 0xBA}, // - {0xF3B0, 0x87C0}, //{0xE8, 0x9F, 0x80}, // - {0xF3A1, 0x87C6}, //{0xE8, 0x9F, 0x86}, // - {0xF3AC, 0x87CB}, //{0xE8, 0x9F, 0x8B}, // + {0xBBC8, 0x8757}, //{0xE8, 0x9D, 0x97}, // �� + {0xF2F9, 0x8759}, //{0xE8, 0x9D, 0x99}, // �� + {0xF2F0, 0x8760}, //{0xE8, 0x9D, 0xA0}, // �� + {0xBAFB, 0x8774}, //{0xE8, 0x9D, 0xB4}, // �� + {0xB5FB, 0x8776}, //{0xE8, 0x9D, 0xB6}, // �� + {0xF3A6, 0x8783}, //{0xE8, 0x9E, 0x83}, // � + {0xC8DA, 0x878D}, //{0xE8, 0x9E, 0x8D}, // �� + {0xC3F8, 0x879F}, //{0xE8, 0x9E, 0x9F}, // �� + {0xC2DD, 0x87BA}, //{0xE8, 0x9E, 0xBA}, // �� + {0xF3B0, 0x87C0}, //{0xE8, 0x9F, 0x80}, // � + {0xF3A1, 0x87C6}, //{0xE8, 0x9F, 0x86}, // � + {0xF3AC, 0x87CB}, //{0xE8, 0x9F, 0x8B}, // � {0xD0B7, 0x87F9}, //{0xE8, 0x9F, 0xB9}, // з - {0xC8E4, 0x8815}, //{0xE8, 0xA0, 0x95}, // - {0xB4C0, 0x8822}, //{0xE8, 0xA0, 0xA2}, // + {0xC8E4, 0x8815}, //{0xE8, 0xA0, 0x95}, // �� + {0xB4C0, 0x8822}, //{0xE8, 0xA0, 0xA2}, // �� {0xD1AA, 0x8840}, //{0xE8, 0xA1, 0x80}, // Ѫ - {0xD0C6, 0x8845}, //{0xE8, 0xA1, 0x85}, // - {0xD0D0, 0x884C}, //{0xE8, 0xA1, 0x8C}, // - {0xD1DC, 0x884D}, //{0xE8, 0xA1, 0x8D}, // - {0xCFCE, 0x8854}, //{0xE8, 0xA1, 0x94}, // - {0xBDD6, 0x8857}, //{0xE8, 0xA1, 0x97}, // - {0xD1C3, 0x8859}, //{0xE8, 0xA1, 0x99}, // - {0xBAE2, 0x8861}, //{0xE8, 0xA1, 0xA1}, // - {0xD2C2, 0x8863}, //{0xE8, 0xA1, 0xA3}, // - {0xB2B9, 0x8865}, //{0xE8, 0xA1, 0xA5}, // - {0xB1ED, 0x8868}, //{0xE8, 0xA1, 0xA8}, // - {0xF1C3, 0x8869}, //{0xE8, 0xA1, 0xA9}, // - {0xC9C0, 0x886B}, //{0xE8, 0xA1, 0xAB}, // - {0xB3C4, 0x886C}, //{0xE8, 0xA1, 0xAC}, // + {0xD0C6, 0x8845}, //{0xE8, 0xA1, 0x85}, // �� + {0xD0D0, 0x884C}, //{0xE8, 0xA1, 0x8C}, // �� + {0xD1DC, 0x884D}, //{0xE8, 0xA1, 0x8D}, // �� + {0xCFCE, 0x8854}, //{0xE8, 0xA1, 0x94}, // �� + {0xBDD6, 0x8857}, //{0xE8, 0xA1, 0x97}, // �� + {0xD1C3, 0x8859}, //{0xE8, 0xA1, 0x99}, // �� + {0xBAE2, 0x8861}, //{0xE8, 0xA1, 0xA1}, // �� + {0xD2C2, 0x8863}, //{0xE8, 0xA1, 0xA3}, // �� + {0xB2B9, 0x8865}, //{0xE8, 0xA1, 0xA5}, // �� + {0xB1ED, 0x8868}, //{0xE8, 0xA1, 0xA8}, // �� + {0xF1C3, 0x8869}, //{0xE8, 0xA1, 0xA9}, // �� + {0xC9C0, 0x886B}, //{0xE8, 0xA1, 0xAB}, // �� + {0xB3C4, 0x886C}, //{0xE8, 0xA1, 0xAC}, // �� {0xCBA5, 0x8870}, //{0xE8, 0xA1, 0xB0}, // ˥ - {0xD6D4, 0x8877}, //{0xE8, 0xA1, 0xB7}, // + {0xD6D4, 0x8877}, //{0xE8, 0xA1, 0xB7}, // �� {0xD4AC, 0x8881}, //{0xE8, 0xA2, 0x81}, // Ԭ - {0xB0C0, 0x8884}, //{0xE8, 0xA2, 0x84}, // - {0xB4FC, 0x888B}, //{0xE8, 0xA2, 0x8B}, // - {0xC5DB, 0x888D}, //{0xE8, 0xA2, 0x8D}, // + {0xB0C0, 0x8884}, //{0xE8, 0xA2, 0x84}, // �� + {0xB4FC, 0x888B}, //{0xE8, 0xA2, 0x8B}, // �� + {0xC5DB, 0x888D}, //{0xE8, 0xA2, 0x8D}, // �� {0xCCBB, 0x8892}, //{0xE8, 0xA2, 0x92}, // ̻ - {0xD0E4, 0x8896}, //{0xE8, 0xA2, 0x96}, // - {0xCDE0, 0x889C}, //{0xE8, 0xA2, 0x9C}, // - {0xB1BB, 0x88AB}, //{0xE8, 0xA2, 0xAB}, // + {0xD0E4, 0x8896}, //{0xE8, 0xA2, 0x96}, // �� + {0xCDE0, 0x889C}, //{0xE8, 0xA2, 0x9C}, // �� + {0xB1BB, 0x88AB}, //{0xE8, 0xA2, 0xAB}, // �� {0xCFAE, 0x88AD}, //{0xE8, 0xA2, 0xAD}, // Ϯ - {0xB8A4, 0x88B1}, //{0xE8, 0xA2, 0xB1}, // - {0xB2C3, 0x88C1}, //{0xE8, 0xA3, 0x81}, // - {0xC1D1, 0x88C2}, //{0xE8, 0xA3, 0x82}, // + {0xB8A4, 0x88B1}, //{0xE8, 0xA2, 0xB1}, // �� + {0xB2C3, 0x88C1}, //{0xE8, 0xA3, 0x81}, // �� + {0xC1D1, 0x88C2}, //{0xE8, 0xA3, 0x82}, // �� {0xD7B0, 0x88C5}, //{0xE8, 0xA3, 0x85}, // װ - {0xF1C9, 0x88C6}, //{0xE8, 0xA3, 0x86}, // - {0xF1CC, 0x88C9}, //{0xE8, 0xA3, 0x89}, // + {0xF1C9, 0x88C6}, //{0xE8, 0xA3, 0x86}, // �� + {0xF1CC, 0x88C9}, //{0xE8, 0xA3, 0x89}, // �� {0xD4A3, 0x88D5}, //{0xE8, 0xA3, 0x95}, // ԣ {0xC8B9, 0x88D9}, //{0xE8, 0xA3, 0x99}, // ȹ - {0xBFE3, 0x88E4}, //{0xE8, 0xA3, 0xA4}, // - {0xC9D1, 0x88F3}, //{0xE8, 0xA3, 0xB3}, // - {0xC2E3, 0x88F8}, //{0xE8, 0xA3, 0xB8}, // - {0xB9FC, 0x88F9}, //{0xE8, 0xA3, 0xB9}, // - {0xB9D3, 0x8902}, //{0xE8, 0xA4, 0x82}, // - {0xBAD6, 0x8910}, //{0xE8, 0xA4, 0x90}, // - {0xB0FD, 0x8912}, //{0xE8, 0xA4, 0x92}, // - {0xC8EC, 0x8925}, //{0xE8, 0xA4, 0xA5}, // - {0xBDF3, 0x895F}, //{0xE8, 0xA5, 0x9F}, // - {0xCEF7, 0x897F}, //{0xE8, 0xA5, 0xBF}, // + {0xBFE3, 0x88E4}, //{0xE8, 0xA3, 0xA4}, // �� + {0xC9D1, 0x88F3}, //{0xE8, 0xA3, 0xB3}, // �� + {0xC2E3, 0x88F8}, //{0xE8, 0xA3, 0xB8}, // �� + {0xB9FC, 0x88F9}, //{0xE8, 0xA3, 0xB9}, // �� + {0xB9D3, 0x8902}, //{0xE8, 0xA4, 0x82}, // �� + {0xBAD6, 0x8910}, //{0xE8, 0xA4, 0x90}, // �� + {0xB0FD, 0x8912}, //{0xE8, 0xA4, 0x92}, // �� + {0xC8EC, 0x8925}, //{0xE8, 0xA4, 0xA5}, // �� + {0xBDF3, 0x895F}, //{0xE8, 0xA5, 0x9F}, // �� + {0xCEF7, 0x897F}, //{0xE8, 0xA5, 0xBF}, // �� {0xD2AA, 0x8981}, //{0xE8, 0xA6, 0x81}, // Ҫ - {0xB8B2, 0x8986}, //{0xE8, 0xA6, 0x86}, // - {0xBCFB, 0x89C1}, //{0xE8, 0xA7, 0x81}, // - {0xB9DB, 0x89C2}, //{0xE8, 0xA7, 0x82}, // - {0xB9E6, 0x89C4}, //{0xE8, 0xA7, 0x84}, // - {0xC3D9, 0x89C5}, //{0xE8, 0xA7, 0x85}, // - {0xCAD3, 0x89C6}, //{0xE8, 0xA7, 0x86}, // - {0xC0C0, 0x89C8}, //{0xE8, 0xA7, 0x88}, // - {0xBEF5, 0x89C9}, //{0xE8, 0xA7, 0x89}, // - {0xBDC7, 0x89D2}, //{0xE8, 0xA7, 0x92}, // - {0xBDE2, 0x89E3}, //{0xE8, 0xA7, 0xA3}, // - {0xB4A5, 0x89E6}, //{0xE8, 0xA7, 0xA6}, // - {0xD1D4, 0x8A00}, //{0xE8, 0xA8, 0x80}, // - {0xD3FE, 0x8A89}, //{0xE8, 0xAA, 0x89}, // - {0xCCDC, 0x8A8A}, //{0xE8, 0xAA, 0x8A}, // - {0xCAC4, 0x8A93}, //{0xE8, 0xAA, 0x93}, // - {0xBEAF, 0x8B66}, //{0xE8, 0xAD, 0xA6}, // + {0xB8B2, 0x8986}, //{0xE8, 0xA6, 0x86}, // �� + {0xBCFB, 0x89C1}, //{0xE8, 0xA7, 0x81}, // �� + {0xB9DB, 0x89C2}, //{0xE8, 0xA7, 0x82}, // �� + {0xB9E6, 0x89C4}, //{0xE8, 0xA7, 0x84}, // �� + {0xC3D9, 0x89C5}, //{0xE8, 0xA7, 0x85}, // �� + {0xCAD3, 0x89C6}, //{0xE8, 0xA7, 0x86}, // �� + {0xC0C0, 0x89C8}, //{0xE8, 0xA7, 0x88}, // �� + {0xBEF5, 0x89C9}, //{0xE8, 0xA7, 0x89}, // �� + {0xBDC7, 0x89D2}, //{0xE8, 0xA7, 0x92}, // �� + {0xBDE2, 0x89E3}, //{0xE8, 0xA7, 0xA3}, // �� + {0xB4A5, 0x89E6}, //{0xE8, 0xA7, 0xA6}, // �� + {0xD1D4, 0x8A00}, //{0xE8, 0xA8, 0x80}, // �� + {0xD3FE, 0x8A89}, //{0xE8, 0xAA, 0x89}, // �� + {0xCCDC, 0x8A8A}, //{0xE8, 0xAA, 0x8A}, // �� + {0xCAC4, 0x8A93}, //{0xE8, 0xAA, 0x93}, // �� + {0xBEAF, 0x8B66}, //{0xE8, 0xAD, 0xA6}, // �� {0xC6A9, 0x8B6C}, //{0xE8, 0xAD, 0xAC}, // Ʃ - {0xBCC6, 0x8BA1}, //{0xE8, 0xAE, 0xA1}, // - {0xB6A9, 0x8BA2}, //{0xE8, 0xAE, 0xA2}, // - {0xC8CF, 0x8BA4}, //{0xE8, 0xAE, 0xA4}, // - {0xBCA5, 0x8BA5}, //{0xE8, 0xAE, 0xA5}, // - {0xCCD6, 0x8BA8}, //{0xE8, 0xAE, 0xA8}, // - {0xC8C3, 0x8BA9}, //{0xE8, 0xAE, 0xA9}, // + {0xBCC6, 0x8BA1}, //{0xE8, 0xAE, 0xA1}, // �� + {0xB6A9, 0x8BA2}, //{0xE8, 0xAE, 0xA2}, // �� + {0xC8CF, 0x8BA4}, //{0xE8, 0xAE, 0xA4}, // �� + {0xBCA5, 0x8BA5}, //{0xE8, 0xAE, 0xA5}, // �� + {0xCCD6, 0x8BA8}, //{0xE8, 0xAE, 0xA8}, // �� + {0xC8C3, 0x8BA9}, //{0xE8, 0xAE, 0xA9}, // �� {0xD1B5, 0x8BAD}, //{0xE8, 0xAE, 0xAD}, // ѵ - {0xD2E9, 0x8BAE}, //{0xE8, 0xAE, 0xAE}, // + {0xD2E9, 0x8BAE}, //{0xE8, 0xAE, 0xAE}, // �� {0xD1B6, 0x8BAF}, //{0xE8, 0xAE, 0xAF}, // Ѷ - {0xBCC7, 0x8BB0}, //{0xE8, 0xAE, 0xB0}, // - {0xBDB2, 0x8BB2}, //{0xE8, 0xAE, 0xB2}, // - {0xBBE4, 0x8BB3}, //{0xE8, 0xAE, 0xB3}, // - {0xD1C8, 0x8BB6}, //{0xE8, 0xAE, 0xB6}, // - {0xD0ED, 0x8BB8}, //{0xE8, 0xAE, 0xB8}, // - {0xB6EF, 0x8BB9}, //{0xE8, 0xAE, 0xB9}, // - {0xC2DB, 0x8BBA}, //{0xE8, 0xAE, 0xBA}, // - {0xCBCF, 0x8BBC}, //{0xE8, 0xAE, 0xBC}, // - {0xB7ED, 0x8BBD}, //{0xE8, 0xAE, 0xBD}, // - {0xC9E8, 0x8BBE}, //{0xE8, 0xAE, 0xBE}, // - {0xB7C3, 0x8BBF}, //{0xE8, 0xAE, 0xBF}, // - {0xBEF7, 0x8BC0}, //{0xE8, 0xAF, 0x80}, // + {0xBCC7, 0x8BB0}, //{0xE8, 0xAE, 0xB0}, // �� + {0xBDB2, 0x8BB2}, //{0xE8, 0xAE, 0xB2}, // �� + {0xBBE4, 0x8BB3}, //{0xE8, 0xAE, 0xB3}, // �� + {0xD1C8, 0x8BB6}, //{0xE8, 0xAE, 0xB6}, // �� + {0xD0ED, 0x8BB8}, //{0xE8, 0xAE, 0xB8}, // �� + {0xB6EF, 0x8BB9}, //{0xE8, 0xAE, 0xB9}, // �� + {0xC2DB, 0x8BBA}, //{0xE8, 0xAE, 0xBA}, // �� + {0xCBCF, 0x8BBC}, //{0xE8, 0xAE, 0xBC}, // �� + {0xB7ED, 0x8BBD}, //{0xE8, 0xAE, 0xBD}, // �� + {0xC9E8, 0x8BBE}, //{0xE8, 0xAE, 0xBE}, // �� + {0xB7C3, 0x8BBF}, //{0xE8, 0xAE, 0xBF}, // �� + {0xBEF7, 0x8BC0}, //{0xE8, 0xAF, 0x80}, // �� {0xD6A4, 0x8BC1}, //{0xE8, 0xAF, 0x81}, // ֤ - {0xC6C0, 0x8BC4}, //{0xE8, 0xAF, 0x84}, // - {0xD7E7, 0x8BC5}, //{0xE8, 0xAF, 0x85}, // + {0xC6C0, 0x8BC4}, //{0xE8, 0xAF, 0x84}, // �� + {0xD7E7, 0x8BC5}, //{0xE8, 0xAF, 0x85}, // �� {0xCAB6, 0x8BC6}, //{0xE8, 0xAF, 0x86}, // ʶ {0xD5A9, 0x8BC8}, //{0xE8, 0xAF, 0x88}, // թ - {0xCBDF, 0x8BC9}, //{0xE8, 0xAF, 0x89}, // - {0xD5EF, 0x8BCA}, //{0xE8, 0xAF, 0x8A}, // - {0xB4CA, 0x8BCD}, //{0xE8, 0xAF, 0x8D}, // - {0xD2EB, 0x8BD1}, //{0xE8, 0xAF, 0x91}, // - {0xCAD4, 0x8BD5}, //{0xE8, 0xAF, 0x95}, // + {0xCBDF, 0x8BC9}, //{0xE8, 0xAF, 0x89}, // �� + {0xD5EF, 0x8BCA}, //{0xE8, 0xAF, 0x8A}, // �� + {0xB4CA, 0x8BCD}, //{0xE8, 0xAF, 0x8D}, // �� + {0xD2EB, 0x8BD1}, //{0xE8, 0xAF, 0x91}, // �� + {0xCAD4, 0x8BD5}, //{0xE8, 0xAF, 0x95}, // �� {0xCAAB, 0x8BD7}, //{0xE8, 0xAF, 0x97}, // ʫ - {0xB3CF, 0x8BDA}, //{0xE8, 0xAF, 0x9A}, // - {0xBBB0, 0x8BDD}, //{0xE8, 0xAF, 0x9D}, // - {0xB5AE, 0x8BDE}, //{0xE8, 0xAF, 0x9E}, // - {0xB9EE, 0x8BE1}, //{0xE8, 0xAF, 0xA1}, // + {0xB3CF, 0x8BDA}, //{0xE8, 0xAF, 0x9A}, // �� + {0xBBB0, 0x8BDD}, //{0xE8, 0xAF, 0x9D}, // �� + {0xB5AE, 0x8BDE}, //{0xE8, 0xAF, 0x9E}, // �� + {0xB9EE, 0x8BE1}, //{0xE8, 0xAF, 0xA1}, // �� {0xD1AF, 0x8BE2}, //{0xE8, 0xAF, 0xA2}, // ѯ - {0xB8C3, 0x8BE5}, //{0xE8, 0xAF, 0xA5}, // - {0xCFEA, 0x8BE6}, //{0xE8, 0xAF, 0xA6}, // - {0xBDEB, 0x8BEB}, //{0xE8, 0xAF, 0xAB}, // - {0xCEDC, 0x8BEC}, //{0xE8, 0xAF, 0xAC}, // - {0xD3EF, 0x8BED}, //{0xE8, 0xAF, 0xAD}, // - {0xCEF3, 0x8BEF}, //{0xE8, 0xAF, 0xAF}, // - {0xD3D5, 0x8BF1}, //{0xE8, 0xAF, 0xB1}, // - {0xBBE5, 0x8BF2}, //{0xE8, 0xAF, 0xB2}, // + {0xB8C3, 0x8BE5}, //{0xE8, 0xAF, 0xA5}, // �� + {0xCFEA, 0x8BE6}, //{0xE8, 0xAF, 0xA6}, // �� + {0xBDEB, 0x8BEB}, //{0xE8, 0xAF, 0xAB}, // �� + {0xCEDC, 0x8BEC}, //{0xE8, 0xAF, 0xAC}, // �� + {0xD3EF, 0x8BED}, //{0xE8, 0xAF, 0xAD}, // �� + {0xCEF3, 0x8BEF}, //{0xE8, 0xAF, 0xAF}, // �� + {0xD3D5, 0x8BF1}, //{0xE8, 0xAF, 0xB1}, // �� + {0xBBE5, 0x8BF2}, //{0xE8, 0xAF, 0xB2}, // �� {0xCBB5, 0x8BF4}, //{0xE8, 0xAF, 0xB4}, // ˵ - {0xCBD0, 0x8BF5}, //{0xE8, 0xAF, 0xB5}, // - {0xC7EB, 0x8BF7}, //{0xE8, 0xAF, 0xB7}, // - {0xD6EE, 0x8BF8}, //{0xE8, 0xAF, 0xB8}, // + {0xCBD0, 0x8BF5}, //{0xE8, 0xAF, 0xB5}, // �� + {0xC7EB, 0x8BF7}, //{0xE8, 0xAF, 0xB7}, // �� + {0xD6EE, 0x8BF8}, //{0xE8, 0xAF, 0xB8}, // �� {0xC5B5, 0x8BFA}, //{0xE8, 0xAF, 0xBA}, // ŵ - {0xB6C1, 0x8BFB}, //{0xE8, 0xAF, 0xBB}, // - {0xB7CC, 0x8BFD}, //{0xE8, 0xAF, 0xBD}, // - {0xBFCE, 0x8BFE}, //{0xE8, 0xAF, 0xBE}, // + {0xB6C1, 0x8BFB}, //{0xE8, 0xAF, 0xBB}, // �� + {0xB7CC, 0x8BFD}, //{0xE8, 0xAF, 0xBD}, // �� + {0xBFCE, 0x8BFE}, //{0xE8, 0xAF, 0xBE}, // �� {0xCBAD, 0x8C01}, //{0xE8, 0xB0, 0x81}, // ˭ - {0xB5F7, 0x8C03}, //{0xE8, 0xB0, 0x83}, // - {0xC1C2, 0x8C05}, //{0xE8, 0xB0, 0x85}, // + {0xB5F7, 0x8C03}, //{0xE8, 0xB0, 0x83}, // �� + {0xC1C2, 0x8C05}, //{0xE8, 0xB0, 0x85}, // �� {0xD7BB, 0x8C06}, //{0xE8, 0xB0, 0x86}, // ׻ {0xCCB8, 0x8C08}, //{0xE8, 0xB0, 0x88}, // ̸ - {0xD2EA, 0x8C0A}, //{0xE8, 0xB0, 0x8A}, // + {0xD2EA, 0x8C0A}, //{0xE8, 0xB0, 0x8A}, // �� {0xC4B1, 0x8C0B}, //{0xE8, 0xB0, 0x8B}, // ı - {0xB5FD, 0x8C0D}, //{0xE8, 0xB0, 0x8D}, // - {0xBBD1, 0x8C0E}, //{0xE8, 0xB0, 0x8E}, // + {0xB5FD, 0x8C0D}, //{0xE8, 0xB0, 0x8D}, // �� + {0xBBD1, 0x8C0E}, //{0xE8, 0xB0, 0x8E}, // �� {0xD0B3, 0x8C10}, //{0xE8, 0xB0, 0x90}, // г - {0xDACB, 0x8C12}, //{0xE8, 0xB0, 0x92}, // + {0xDACB, 0x8C12}, //{0xE8, 0xB0, 0x92}, // �� {0xCEBD, 0x8C13}, //{0xE8, 0xB0, 0x93}, // ν - {0xD1E8, 0x8C1A}, //{0xE8, 0xB0, 0x9A}, // - {0xC3D5, 0x8C1C}, //{0xE8, 0xB0, 0x9C}, // + {0xD1E8, 0x8C1A}, //{0xE8, 0xB0, 0x9A}, // �� + {0xC3D5, 0x8C1C}, //{0xE8, 0xB0, 0x9C}, // �� {0xD0BB, 0x8C22}, //{0xE8, 0xB0, 0xA2}, // л {0xD2A5, 0x8C23}, //{0xE8, 0xB0, 0xA3}, // ҥ - {0xB0F9, 0x8C24}, //{0xE8, 0xB0, 0xA4}, // + {0xB0F9, 0x8C24}, //{0xE8, 0xB0, 0xA4}, // �� {0xC7AB, 0x8C26}, //{0xE8, 0xB0, 0xA6}, // ǫ - {0xBDF7, 0x8C28}, //{0xE8, 0xB0, 0xA8}, // - {0xC3FD, 0x8C2C}, //{0xE8, 0xB0, 0xAC}, // + {0xBDF7, 0x8C28}, //{0xE8, 0xB0, 0xA8}, // �� + {0xC3FD, 0x8C2C}, //{0xE8, 0xB0, 0xAC}, // �� {0xCCB7, 0x8C2D}, //{0xE8, 0xB0, 0xAD}, // ̷ - {0xC6D7, 0x8C31}, //{0xE8, 0xB0, 0xB1}, // + {0xC6D7, 0x8C31}, //{0xE8, 0xB0, 0xB1}, // �� {0xC7B4, 0x8C34}, //{0xE8, 0xB0, 0xB4}, // Ǵ - {0xB9C8, 0x8C37}, //{0xE8, 0xB0, 0xB7}, // - {0xBBED, 0x8C41}, //{0xE8, 0xB1, 0x81}, // - {0xB6B9, 0x8C46}, //{0xE8, 0xB1, 0x86}, // - {0xCDE3, 0x8C4C}, //{0xE8, 0xB1, 0x8C}, // - {0xCFF3, 0x8C61}, //{0xE8, 0xB1, 0xA1}, // - {0xBAC0, 0x8C6A}, //{0xE8, 0xB1, 0xAA}, // + {0xB9C8, 0x8C37}, //{0xE8, 0xB0, 0xB7}, // �� + {0xBBED, 0x8C41}, //{0xE8, 0xB1, 0x81}, // �� + {0xB6B9, 0x8C46}, //{0xE8, 0xB1, 0x86}, // �� + {0xCDE3, 0x8C4C}, //{0xE8, 0xB1, 0x8C}, // �� + {0xCFF3, 0x8C61}, //{0xE8, 0xB1, 0xA1}, // �� + {0xBAC0, 0x8C6A}, //{0xE8, 0xB1, 0xAA}, // �� {0xD4A5, 0x8C6B}, //{0xE8, 0xB1, 0xAB}, // ԥ - {0xB1AA, 0x8C79}, //{0xE8, 0xB1, 0xB9}, // - {0xB2F2, 0x8C7A}, //{0xE8, 0xB1, 0xBA}, // + {0xB1AA, 0x8C79}, //{0xE8, 0xB1, 0xB9}, // �� + {0xB2F2, 0x8C7A}, //{0xE8, 0xB1, 0xBA}, // �� {0xC3B2, 0x8C8C}, //{0xE8, 0xB2, 0x8C}, // ò - {0xB1B4, 0x8D1D}, //{0xE8, 0xB4, 0x9D}, // - {0xD5EA, 0x8D1E}, //{0xE8, 0xB4, 0x9E}, // - {0xB8BA, 0x8D1F}, //{0xE8, 0xB4, 0x9F}, // - {0xB9B1, 0x8D21}, //{0xE8, 0xB4, 0xA1}, // - {0xB2C6, 0x8D22}, //{0xE8, 0xB4, 0xA2}, // - {0xD4F0, 0x8D23}, //{0xE8, 0xB4, 0xA3}, // - {0xCFCD, 0x8D24}, //{0xE8, 0xB4, 0xA4}, // - {0xB0DC, 0x8D25}, //{0xE8, 0xB4, 0xA5}, // - {0xD5CB, 0x8D26}, //{0xE8, 0xB4, 0xA6}, // - {0xBBF5, 0x8D27}, //{0xE8, 0xB4, 0xA7}, // - {0xD6CA, 0x8D28}, //{0xE8, 0xB4, 0xA8}, // - {0xB7B7, 0x8D29}, //{0xE8, 0xB4, 0xA9}, // + {0xB1B4, 0x8D1D}, //{0xE8, 0xB4, 0x9D}, // �� + {0xD5EA, 0x8D1E}, //{0xE8, 0xB4, 0x9E}, // �� + {0xB8BA, 0x8D1F}, //{0xE8, 0xB4, 0x9F}, // �� + {0xB9B1, 0x8D21}, //{0xE8, 0xB4, 0xA1}, // �� + {0xB2C6, 0x8D22}, //{0xE8, 0xB4, 0xA2}, // �� + {0xD4F0, 0x8D23}, //{0xE8, 0xB4, 0xA3}, // �� + {0xCFCD, 0x8D24}, //{0xE8, 0xB4, 0xA4}, // �� + {0xB0DC, 0x8D25}, //{0xE8, 0xB4, 0xA5}, // �� + {0xD5CB, 0x8D26}, //{0xE8, 0xB4, 0xA6}, // �� + {0xBBF5, 0x8D27}, //{0xE8, 0xB4, 0xA7}, // �� + {0xD6CA, 0x8D28}, //{0xE8, 0xB4, 0xA8}, // �� + {0xB7B7, 0x8D29}, //{0xE8, 0xB4, 0xA9}, // �� {0xCCB0, 0x8D2A}, //{0xE8, 0xB4, 0xAA}, // ̰ {0xC6B6, 0x8D2B}, //{0xE8, 0xB4, 0xAB}, // ƶ - {0xB1E1, 0x8D2C}, //{0xE8, 0xB4, 0xAC}, // - {0xB9BA, 0x8D2D}, //{0xE8, 0xB4, 0xAD}, // - {0xD6FC, 0x8D2E}, //{0xE8, 0xB4, 0xAE}, // - {0xB9E1, 0x8D2F}, //{0xE8, 0xB4, 0xAF}, // - {0xB7A1, 0x8D30}, //{0xE8, 0xB4, 0xB0}, // - {0xBCFA, 0x8D31}, //{0xE8, 0xB4, 0xB1}, // - {0xCCF9, 0x8D34}, //{0xE8, 0xB4, 0xB4}, // - {0xB9F3, 0x8D35}, //{0xE8, 0xB4, 0xB5}, // + {0xB1E1, 0x8D2C}, //{0xE8, 0xB4, 0xAC}, // �� + {0xB9BA, 0x8D2D}, //{0xE8, 0xB4, 0xAD}, // �� + {0xD6FC, 0x8D2E}, //{0xE8, 0xB4, 0xAE}, // �� + {0xB9E1, 0x8D2F}, //{0xE8, 0xB4, 0xAF}, // �� + {0xB7A1, 0x8D30}, //{0xE8, 0xB4, 0xB0}, // �� + {0xBCFA, 0x8D31}, //{0xE8, 0xB4, 0xB1}, // �� + {0xCCF9, 0x8D34}, //{0xE8, 0xB4, 0xB4}, // �� + {0xB9F3, 0x8D35}, //{0xE8, 0xB4, 0xB5}, // �� {0xC3B3, 0x8D38}, //{0xE8, 0xB4, 0xB8}, // ó - {0xB7D1, 0x8D39}, //{0xE8, 0xB4, 0xB9}, // - {0xBAD8, 0x8D3A}, //{0xE8, 0xB4, 0xBA}, // - {0xD4F4, 0x8D3C}, //{0xE8, 0xB4, 0xBC}, // - {0xBCD6, 0x8D3E}, //{0xE8, 0xB4, 0xBE}, // - {0xBBDF, 0x8D3F}, //{0xE8, 0xB4, 0xBF}, // - {0xC1DE, 0x8D41}, //{0xE8, 0xB5, 0x81}, // + {0xB7D1, 0x8D39}, //{0xE8, 0xB4, 0xB9}, // �� + {0xBAD8, 0x8D3A}, //{0xE8, 0xB4, 0xBA}, // �� + {0xD4F4, 0x8D3C}, //{0xE8, 0xB4, 0xBC}, // �� + {0xBCD6, 0x8D3E}, //{0xE8, 0xB4, 0xBE}, // �� + {0xBBDF, 0x8D3F}, //{0xE8, 0xB4, 0xBF}, // �� + {0xC1DE, 0x8D41}, //{0xE8, 0xB5, 0x81}, // �� {0xC2B8, 0x8D42}, //{0xE8, 0xB5, 0x82}, // ¸ - {0xD4DF, 0x8D43}, //{0xE8, 0xB5, 0x83}, // - {0xD7CA, 0x8D44}, //{0xE8, 0xB5, 0x84}, // - {0xC9DE, 0x8D4A}, //{0xE8, 0xB5, 0x8A}, // - {0xB8B3, 0x8D4B}, //{0xE8, 0xB5, 0x8B}, // - {0xB6C4, 0x8D4C}, //{0xE8, 0xB5, 0x8C}, // - {0xCAEA, 0x8D4E}, //{0xE8, 0xB5, 0x8E}, // - {0xC9CD, 0x8D4F}, //{0xE8, 0xB5, 0x8F}, // - {0xB4CD, 0x8D50}, //{0xE8, 0xB5, 0x90}, // - {0xC5E2, 0x8D54}, //{0xE8, 0xB5, 0x94}, // - {0xC0B5, 0x8D56}, //{0xE8, 0xB5, 0x96}, // + {0xD4DF, 0x8D43}, //{0xE8, 0xB5, 0x83}, // �� + {0xD7CA, 0x8D44}, //{0xE8, 0xB5, 0x84}, // �� + {0xC9DE, 0x8D4A}, //{0xE8, 0xB5, 0x8A}, // �� + {0xB8B3, 0x8D4B}, //{0xE8, 0xB5, 0x8B}, // �� + {0xB6C4, 0x8D4C}, //{0xE8, 0xB5, 0x8C}, // �� + {0xCAEA, 0x8D4E}, //{0xE8, 0xB5, 0x8E}, // �� + {0xC9CD, 0x8D4F}, //{0xE8, 0xB5, 0x8F}, // �� + {0xB4CD, 0x8D50}, //{0xE8, 0xB5, 0x90}, // �� + {0xC5E2, 0x8D54}, //{0xE8, 0xB5, 0x94}, // �� + {0xC0B5, 0x8D56}, //{0xE8, 0xB5, 0x96}, // 5 {0xD7B8, 0x8D58}, //{0xE8, 0xB5, 0x98}, // ׸ {0xD7AC, 0x8D5A}, //{0xE8, 0xB5, 0x9A}, // ׬ - {0xC8FC, 0x8D5B}, //{0xE8, 0xB5, 0x9B}, // - {0xD4DE, 0x8D5E}, //{0xE8, 0xB5, 0x9E}, // - {0xD4F9, 0x8D60}, //{0xE8, 0xB5, 0xA0}, // - {0xC9C4, 0x8D61}, //{0xE8, 0xB5, 0xA1}, // + {0xC8FC, 0x8D5B}, //{0xE8, 0xB5, 0x9B}, // �� + {0xD4DE, 0x8D5E}, //{0xE8, 0xB5, 0x9E}, // �� + {0xD4F9, 0x8D60}, //{0xE8, 0xB5, 0xA0}, // �� + {0xC9C4, 0x8D61}, //{0xE8, 0xB5, 0xA1}, // �� {0xD3AE, 0x8D62}, //{0xE8, 0xB5, 0xA2}, // Ӯ - {0xB3E0, 0x8D64}, //{0xE8, 0xB5, 0xA4}, // - {0xC9E2, 0x8D66}, //{0xE8, 0xB5, 0xA6}, // - {0xBAD5, 0x8D6B}, //{0xE8, 0xB5, 0xAB}, // - {0xD7DF, 0x8D70}, //{0xE8, 0xB5, 0xB0}, // - {0xB8B0, 0x8D74}, //{0xE8, 0xB5, 0xB4}, // - {0xD5D4, 0x8D75}, //{0xE8, 0xB5, 0xB5}, // - {0xB8CF, 0x8D76}, //{0xE8, 0xB5, 0xB6}, // - {0xC6F0, 0x8D77}, //{0xE8, 0xB5, 0xB7}, // - {0xB3C3, 0x8D81}, //{0xE8, 0xB6, 0x81}, // - {0xB3AC, 0x8D85}, //{0xE8, 0xB6, 0x85}, // + {0xB3E0, 0x8D64}, //{0xE8, 0xB5, 0xA4}, // �� + {0xC9E2, 0x8D66}, //{0xE8, 0xB5, 0xA6}, // �� + {0xBAD5, 0x8D6B}, //{0xE8, 0xB5, 0xAB}, // �� + {0xD7DF, 0x8D70}, //{0xE8, 0xB5, 0xB0}, // �� + {0xB8B0, 0x8D74}, //{0xE8, 0xB5, 0xB4}, // �� + {0xD5D4, 0x8D75}, //{0xE8, 0xB5, 0xB5}, // �� + {0xB8CF, 0x8D76}, //{0xE8, 0xB5, 0xB6}, // �� + {0xC6F0, 0x8D77}, //{0xE8, 0xB5, 0xB7}, // �� + {0xB3C3, 0x8D81}, //{0xE8, 0xB6, 0x81}, // �� + {0xB3AC, 0x8D85}, //{0xE8, 0xB6, 0x85}, // �� {0xD4BD, 0x8D8A}, //{0xE8, 0xB6, 0x8A}, // Խ - {0xC7F7, 0x8D8B}, //{0xE8, 0xB6, 0x8B}, // - {0xCCCB, 0x8D9F}, //{0xE8, 0xB6, 0x9F}, // + {0xC7F7, 0x8D8B}, //{0xE8, 0xB6, 0x8B}, // �� + {0xCCCB, 0x8D9F}, //{0xE8, 0xB6, 0x9F}, // �� {0xC8A4, 0x8DA3}, //{0xE8, 0xB6, 0xA3}, // Ȥ - {0xD7E3, 0x8DB3}, //{0xE8, 0xB6, 0xB3}, // + {0xD7E3, 0x8DB3}, //{0xE8, 0xB6, 0xB3}, // �� {0xC5BF, 0x8DB4}, //{0xE8, 0xB6, 0xB4}, // ſ {0xD6BA, 0x8DBE}, //{0xE8, 0xB6, 0xBE}, // ֺ {0xD4BE, 0x8DC3}, //{0xE8, 0xB7, 0x83}, // Ծ - {0xB0CF, 0x8DCB}, //{0xE8, 0xB7, 0x8B}, // - {0xB5F8, 0x8DCC}, //{0xE8, 0xB7, 0x8C}, // - {0xC5DC, 0x8DD1}, //{0xE8, 0xB7, 0x91}, // - {0xF5CB, 0x8DDB}, //{0xE8, 0xB7, 0x9B}, // - {0xBEE0, 0x8DDD}, //{0xE8, 0xB7, 0x9D}, // - {0xB8FA, 0x8DDF}, //{0xE8, 0xB7, 0x9F}, // - {0xBFE7, 0x8DE8}, //{0xE8, 0xB7, 0xA8}, // - {0xB9F2, 0x8DEA}, //{0xE8, 0xB7, 0xAA}, // + {0xB0CF, 0x8DCB}, //{0xE8, 0xB7, 0x8B}, // �� + {0xB5F8, 0x8DCC}, //{0xE8, 0xB7, 0x8C}, // �� + {0xC5DC, 0x8DD1}, //{0xE8, 0xB7, 0x91}, // �� + {0xF5CB, 0x8DDB}, //{0xE8, 0xB7, 0x9B}, // �� + {0xBEE0, 0x8DDD}, //{0xE8, 0xB7, 0x9D}, // �� + {0xB8FA, 0x8DDF}, //{0xE8, 0xB7, 0x9F}, // �� + {0xBFE7, 0x8DE8}, //{0xE8, 0xB7, 0xA8}, // �� + {0xB9F2, 0x8DEA}, //{0xE8, 0xB7, 0xAA}, // �� {0xC2B7, 0x8DEF}, //{0xE8, 0xB7, 0xAF}, // · - {0xCCF8, 0x8DF3}, //{0xE8, 0xB7, 0xB3}, // - {0xBCF9, 0x8DF5}, //{0xE8, 0xB7, 0xB5}, // - {0xF5CE, 0x8DF7}, //{0xE8, 0xB7, 0xB7}, // - {0xB6E5, 0x8DFA}, //{0xE8, 0xB7, 0xBA}, // + {0xCCF8, 0x8DF3}, //{0xE8, 0xB7, 0xB3}, // �� + {0xBCF9, 0x8DF5}, //{0xE8, 0xB7, 0xB5}, // �� + {0xF5CE, 0x8DF7}, //{0xE8, 0xB7, 0xB7}, // �� + {0xB6E5, 0x8DFA}, //{0xE8, 0xB7, 0xBA}, // �� {0xD3BB, 0x8E0A}, //{0xE8, 0xB8, 0x8A}, // ӻ {0xCCA4, 0x8E0F}, //{0xE8, 0xB8, 0x8F}, // ̤ - {0xCCDF, 0x8E22}, //{0xE8, 0xB8, 0xA2}, // - {0xB2C8, 0x8E29}, //{0xE8, 0xB8, 0xA9}, // - {0xD7D9, 0x8E2A}, //{0xE8, 0xB8, 0xAA}, // - {0xF5E2, 0x8E31}, //{0xE8, 0xB8, 0xB1}, // - {0xF5E5, 0x8E42}, //{0xE8, 0xB9, 0x82}, // - {0xCCE3, 0x8E44}, //{0xE8, 0xB9, 0x84}, // - {0xB5B8, 0x8E48}, //{0xE8, 0xB9, 0x88}, // + {0xCCDF, 0x8E22}, //{0xE8, 0xB8, 0xA2}, // �� + {0xB2C8, 0x8E29}, //{0xE8, 0xB8, 0xA9}, // �� + {0xD7D9, 0x8E2A}, //{0xE8, 0xB8, 0xAA}, // �� + {0xF5E2, 0x8E31}, //{0xE8, 0xB8, 0xB1}, // �� + {0xF5E5, 0x8E42}, //{0xE8, 0xB9, 0x82}, // �� + {0xCCE3, 0x8E44}, //{0xE8, 0xB9, 0x84}, // �� + {0xB5B8, 0x8E48}, //{0xE8, 0xB9, 0x88}, // �� {0xCCA3, 0x8E4B}, //{0xE8, 0xB9, 0x8B}, // ̣ - {0xB1C4, 0x8E66}, //{0xE8, 0xB9, 0xA6}, // - {0xB5C5, 0x8E6C}, //{0xE8, 0xB9, 0xAC}, // - {0xB2E4, 0x8E6D}, //{0xE8, 0xB9, 0xAD}, // - {0xB6D7, 0x8E72}, //{0xE8, 0xB9, 0xB2}, // - {0xD4EA, 0x8E81}, //{0xE8, 0xBA, 0x81}, // - {0xF5EF, 0x8E8F}, //{0xE8, 0xBA, 0x8F}, // - {0xC9ED, 0x8EAB}, //{0xE8, 0xBA, 0xAB}, // - {0xB9AA, 0x8EAC}, //{0xE8, 0xBA, 0xAC}, // - {0xC7FB, 0x8EAF}, //{0xE8, 0xBA, 0xAF}, // - {0xB6E3, 0x8EB2}, //{0xE8, 0xBA, 0xB2}, // - {0xCCC9, 0x8EBA}, //{0xE8, 0xBA, 0xBA}, // - {0xB3B5, 0x8F66}, //{0xE8, 0xBD, 0xA6}, // - {0xD4FE, 0x8F67}, //{0xE8, 0xBD, 0xA7}, // - {0xB9EC, 0x8F68}, //{0xE8, 0xBD, 0xA8}, // - {0xD0F9, 0x8F69}, //{0xE8, 0xBD, 0xA9}, // + {0xB1C4, 0x8E66}, //{0xE8, 0xB9, 0xA6}, // �� + {0xB5C5, 0x8E6C}, //{0xE8, 0xB9, 0xAC}, // �� + {0xB2E4, 0x8E6D}, //{0xE8, 0xB9, 0xAD}, // �� + {0xB6D7, 0x8E72}, //{0xE8, 0xB9, 0xB2}, // �� + {0xD4EA, 0x8E81}, //{0xE8, 0xBA, 0x81}, // �� + {0xF5EF, 0x8E8F}, //{0xE8, 0xBA, 0x8F}, // �� + {0xC9ED, 0x8EAB}, //{0xE8, 0xBA, 0xAB}, // �� + {0xB9AA, 0x8EAC}, //{0xE8, 0xBA, 0xAC}, // �� + {0xC7FB, 0x8EAF}, //{0xE8, 0xBA, 0xAF}, // �� + {0xB6E3, 0x8EB2}, //{0xE8, 0xBA, 0xB2}, // �� + {0xCCC9, 0x8EBA}, //{0xE8, 0xBA, 0xBA}, // �� + {0xB3B5, 0x8F66}, //{0xE8, 0xBD, 0xA6}, // �� + {0xD4FE, 0x8F67}, //{0xE8, 0xBD, 0xA7}, // �� + {0xB9EC, 0x8F68}, //{0xE8, 0xBD, 0xA8}, // �� + {0xD0F9, 0x8F69}, //{0xE8, 0xBD, 0xA9}, // �� {0xD7AA, 0x8F6C}, //{0xE8, 0xBD, 0xAC}, // ת - {0xC2D6, 0x8F6E}, //{0xE8, 0xBD, 0xAE}, // - {0xC8ED, 0x8F6F}, //{0xE8, 0xBD, 0xAF}, // - {0xBAE4, 0x8F70}, //{0xE8, 0xBD, 0xB0}, // - {0xD6E1, 0x8F74}, //{0xE8, 0xBD, 0xB4}, // - {0xC7E1, 0x8F7B}, //{0xE8, 0xBD, 0xBB}, // - {0xD4D8, 0x8F7D}, //{0xE8, 0xBD, 0xBD}, // - {0xBDCE, 0x8F7F}, //{0xE8, 0xBD, 0xBF}, // - {0xBDCF, 0x8F83}, //{0xE8, 0xBE, 0x83}, // - {0xB8A8, 0x8F85}, //{0xE8, 0xBE, 0x85}, // - {0xC1BE, 0x8F86}, //{0xE8, 0xBE, 0x86}, // - {0xB1B2, 0x8F88}, //{0xE8, 0xBE, 0x88}, // - {0xBBD4, 0x8F89}, //{0xE8, 0xBE, 0x89}, // - {0xB7F8, 0x8F90}, //{0xE8, 0xBE, 0x90}, // - {0xBCAD, 0x8F91}, //{0xE8, 0xBE, 0x91}, // - {0xCAE4, 0x8F93}, //{0xE8, 0xBE, 0x93}, // + {0xC2D6, 0x8F6E}, //{0xE8, 0xBD, 0xAE}, // �� + {0xC8ED, 0x8F6F}, //{0xE8, 0xBD, 0xAF}, // �� + {0xBAE4, 0x8F70}, //{0xE8, 0xBD, 0xB0}, // �� + {0xD6E1, 0x8F74}, //{0xE8, 0xBD, 0xB4}, // �� + {0xC7E1, 0x8F7B}, //{0xE8, 0xBD, 0xBB}, // �� + {0xD4D8, 0x8F7D}, //{0xE8, 0xBD, 0xBD}, // �� + {0xBDCE, 0x8F7F}, //{0xE8, 0xBD, 0xBF}, // �� + {0xBDCF, 0x8F83}, //{0xE8, 0xBE, 0x83}, // �� + {0xB8A8, 0x8F85}, //{0xE8, 0xBE, 0x85}, // �� + {0xC1BE, 0x8F86}, //{0xE8, 0xBE, 0x86}, // ~ + {0xB1B2, 0x8F88}, //{0xE8, 0xBE, 0x88}, // �� + {0xBBD4, 0x8F89}, //{0xE8, 0xBE, 0x89}, // �� + {0xB7F8, 0x8F90}, //{0xE8, 0xBE, 0x90}, // �� + {0xBCAD, 0x8F91}, //{0xE8, 0xBE, 0x91}, // �� + {0xCAE4, 0x8F93}, //{0xE8, 0xBE, 0x93}, // �� {0xD4AF, 0x8F95}, //{0xE8, 0xBE, 0x95}, // ԯ {0xCFBD, 0x8F96}, //{0xE8, 0xBE, 0x96}, // Ͻ - {0xD5DE, 0x8F99}, //{0xE8, 0xBE, 0x99}, // - {0xD0C1, 0x8F9B}, //{0xE8, 0xBE, 0x9B}, // - {0xB9BC, 0x8F9C}, //{0xE8, 0xBE, 0x9C}, // - {0xB4C7, 0x8F9E}, //{0xE8, 0xBE, 0x9E}, // - {0xB1D9, 0x8F9F}, //{0xE8, 0xBE, 0x9F}, // - {0xC0B1, 0x8FA3}, //{0xE8, 0xBE, 0xA3}, // - {0xB1E6, 0x8FA8}, //{0xE8, 0xBE, 0xA8}, // - {0xB1E7, 0x8FA9}, //{0xE8, 0xBE, 0xA9}, // - {0xB1E8, 0x8FAB}, //{0xE8, 0xBE, 0xAB}, // - {0xB3BD, 0x8FB0}, //{0xE8, 0xBE, 0xB0}, // - {0xC8E8, 0x8FB1}, //{0xE8, 0xBE, 0xB1}, // - {0xB1DF, 0x8FB9}, //{0xE8, 0xBE, 0xB9}, // - {0xC1C9, 0x8FBD}, //{0xE8, 0xBE, 0xBD}, // - {0xB4EF, 0x8FBE}, //{0xE8, 0xBE, 0xBE}, // + {0xD5DE, 0x8F99}, //{0xE8, 0xBE, 0x99}, // �� + {0xD0C1, 0x8F9B}, //{0xE8, 0xBE, 0x9B}, // �� + {0xB9BC, 0x8F9C}, //{0xE8, 0xBE, 0x9C}, // �� + {0xB4C7, 0x8F9E}, //{0xE8, 0xBE, 0x9E}, // �� + {0xB1D9, 0x8F9F}, //{0xE8, 0xBE, 0x9F}, // �� + {0xC0B1, 0x8FA3}, //{0xE8, 0xBE, 0xA3}, // 1 + {0xB1E6, 0x8FA8}, //{0xE8, 0xBE, 0xA8}, // �� + {0xB1E7, 0x8FA9}, //{0xE8, 0xBE, 0xA9}, // �� + {0xB1E8, 0x8FAB}, //{0xE8, 0xBE, 0xAB}, // �� + {0xB3BD, 0x8FB0}, //{0xE8, 0xBE, 0xB0}, // �� + {0xC8E8, 0x8FB1}, //{0xE8, 0xBE, 0xB1}, // �� + {0xB1DF, 0x8FB9}, //{0xE8, 0xBE, 0xB9}, // �� + {0xC1C9, 0x8FBD}, //{0xE8, 0xBE, 0xBD}, // �� + {0xB4EF, 0x8FBE}, //{0xE8, 0xBE, 0xBE}, // �� {0xC7A8, 0x8FC1}, //{0xE8, 0xBF, 0x81}, // Ǩ - {0xD3D8, 0x8FC2}, //{0xE8, 0xBF, 0x82}, // - {0xC6F9, 0x8FC4}, //{0xE8, 0xBF, 0x84}, // + {0xD3D8, 0x8FC2}, //{0xE8, 0xBF, 0x82}, // �� + {0xC6F9, 0x8FC4}, //{0xE8, 0xBF, 0x84}, // �� {0xD1B8, 0x8FC5}, //{0xE8, 0xBF, 0x85}, // Ѹ - {0xB9FD, 0x8FC7}, //{0xE8, 0xBF, 0x87}, // - {0xC2F5, 0x8FC8}, //{0xE8, 0xBF, 0x88}, // + {0xB9FD, 0x8FC7}, //{0xE8, 0xBF, 0x87}, // �� + {0xC2F5, 0x8FC8}, //{0xE8, 0xBF, 0x88}, // �� {0xD3AD, 0x8FCE}, //{0xE8, 0xBF, 0x8E}, // ӭ - {0xD4CB, 0x8FD0}, //{0xE8, 0xBF, 0x90}, // - {0xBDFC, 0x8FD1}, //{0xE8, 0xBF, 0x91}, // - {0xB7B5, 0x8FD4}, //{0xE8, 0xBF, 0x94}, // - {0xBBB9, 0x8FD8}, //{0xE8, 0xBF, 0x98}, // - {0xD5E2, 0x8FD9}, //{0xE8, 0xBF, 0x99}, // - {0xBDF8, 0x8FDB}, //{0xE8, 0xBF, 0x9B}, // + {0xD4CB, 0x8FD0}, //{0xE8, 0xBF, 0x90}, // �� + {0xBDFC, 0x8FD1}, //{0xE8, 0xBF, 0x91}, // �� + {0xB7B5, 0x8FD4}, //{0xE8, 0xBF, 0x94}, // �� + {0xBBB9, 0x8FD8}, //{0xE8, 0xBF, 0x98}, // �� + {0xD5E2, 0x8FD9}, //{0xE8, 0xBF, 0x99}, // �� + {0xBDF8, 0x8FDB}, //{0xE8, 0xBF, 0x9B}, // �� {0xD4B6, 0x8FDC}, //{0xE8, 0xBF, 0x9C}, // Զ {0xCEA5, 0x8FDD}, //{0xE8, 0xBF, 0x9D}, // Υ - {0xC1AC, 0x8FDE}, //{0xE8, 0xBF, 0x9E}, // - {0xB3D9, 0x8FDF}, //{0xE8, 0xBF, 0x9F}, // - {0xC6C8, 0x8FEB}, //{0xE8, 0xBF, 0xAB}, // - {0xCAF6, 0x8FF0}, //{0xE8, 0xBF, 0xB0}, // - {0xC3D4, 0x8FF7}, //{0xE8, 0xBF, 0xB7}, // - {0xBCA3, 0x8FF9}, //{0xE8, 0xBF, 0xB9}, // + {0xC1AC, 0x8FDE}, //{0xE8, 0xBF, 0x9E}, // l + {0xB3D9, 0x8FDF}, //{0xE8, 0xBF, 0x9F}, // �� + {0xC6C8, 0x8FEB}, //{0xE8, 0xBF, 0xAB}, // �� + {0xCAF6, 0x8FF0}, //{0xE8, 0xBF, 0xB0}, // �� + {0xC3D4, 0x8FF7}, //{0xE8, 0xBF, 0xB7}, // �� + {0xBCA3, 0x8FF9}, //{0xE8, 0xBF, 0xB9}, // �� {0xD7B7, 0x8FFD}, //{0xE8, 0xBF, 0xBD}, // ׷ - {0xCDCB, 0x9000}, //{0xE9, 0x80, 0x80}, // - {0xCBCD, 0x9001}, //{0xE9, 0x80, 0x81}, // - {0xCACA, 0x9002}, //{0xE9, 0x80, 0x82}, // - {0xCCD3, 0x9003}, //{0xE9, 0x80, 0x83}, // - {0xC4E6, 0x9006}, //{0xE9, 0x80, 0x86}, // + {0xCDCB, 0x9000}, //{0xE9, 0x80, 0x80}, // �� + {0xCBCD, 0x9001}, //{0xE9, 0x80, 0x81}, // �� + {0xCACA, 0x9002}, //{0xE9, 0x80, 0x82}, // �� + {0xCCD3, 0x9003}, //{0xE9, 0x80, 0x83}, // �� + {0xC4E6, 0x9006}, //{0xE9, 0x80, 0x86}, // �� {0xD1A1, 0x9009}, //{0xE9, 0x80, 0x89}, // ѡ {0xD1B7, 0x900A}, //{0xE9, 0x80, 0x8A}, // ѷ {0xCDB8, 0x900F}, //{0xE9, 0x80, 0x8F}, // ͸ - {0xD6F0, 0x9010}, //{0xE9, 0x80, 0x90}, // - {0xB5DD, 0x9012}, //{0xE9, 0x80, 0x92}, // + {0xD6F0, 0x9010}, //{0xE9, 0x80, 0x90}, // �� + {0xB5DD, 0x9012}, //{0xE9, 0x80, 0x92}, // �� {0xCDBE, 0x9014}, //{0xE9, 0x80, 0x94}, // ; - {0xB6BA, 0x9017}, //{0xE9, 0x80, 0x97}, // + {0xB6BA, 0x9017}, //{0xE9, 0x80, 0x97}, // �� {0xCDA8, 0x901A}, //{0xE9, 0x80, 0x9A}, // ͨ - {0xB9E4, 0x901B}, //{0xE9, 0x80, 0x9B}, // - {0xCAC5, 0x901D}, //{0xE9, 0x80, 0x9D}, // - {0xB3D1, 0x901E}, //{0xE9, 0x80, 0x9E}, // - {0xCBD9, 0x901F}, //{0xE9, 0x80, 0x9F}, // - {0xD4EC, 0x9020}, //{0xE9, 0x80, 0xA0}, // - {0xB7EA, 0x9022}, //{0xE9, 0x80, 0xA2}, // - {0xB4FE, 0x902E}, //{0xE9, 0x80, 0xAE}, // - {0xD2DD, 0x9038}, //{0xE9, 0x80, 0xB8}, // - {0xC2DF, 0x903B}, //{0xE9, 0x80, 0xBB}, // - {0xB1C6, 0x903C}, //{0xE9, 0x80, 0xBC}, // - {0xD3E2, 0x903E}, //{0xE9, 0x80, 0xBE}, // - {0xCBEC, 0x9042}, //{0xE9, 0x81, 0x82}, // - {0xD3F6, 0x9047}, //{0xE9, 0x81, 0x87}, // - {0xB1E9, 0x904D}, //{0xE9, 0x81, 0x8D}, // - {0xB6F4, 0x904F}, //{0xE9, 0x81, 0x8F}, // - {0xB5C0, 0x9053}, //{0xE9, 0x81, 0x93}, // - {0xD2C5, 0x9057}, //{0xE9, 0x81, 0x97}, // + {0xB9E4, 0x901B}, //{0xE9, 0x80, 0x9B}, // �� + {0xCAC5, 0x901D}, //{0xE9, 0x80, 0x9D}, // �� + {0xB3D1, 0x901E}, //{0xE9, 0x80, 0x9E}, // �� + {0xCBD9, 0x901F}, //{0xE9, 0x80, 0x9F}, // �� + {0xD4EC, 0x9020}, //{0xE9, 0x80, 0xA0}, // �� + {0xB7EA, 0x9022}, //{0xE9, 0x80, 0xA2}, // �� + {0xB4FE, 0x902E}, //{0xE9, 0x80, 0xAE}, // �� + {0xD2DD, 0x9038}, //{0xE9, 0x80, 0xB8}, // �� + {0xC2DF, 0x903B}, //{0xE9, 0x80, 0xBB}, // �� + {0xB1C6, 0x903C}, //{0xE9, 0x80, 0xBC}, // �� + {0xD3E2, 0x903E}, //{0xE9, 0x80, 0xBE}, // �� + {0xCBEC, 0x9042}, //{0xE9, 0x81, 0x82}, // �� + {0xD3F6, 0x9047}, //{0xE9, 0x81, 0x87}, // �� + {0xB1E9, 0x904D}, //{0xE9, 0x81, 0x8D}, // �� + {0xB6F4, 0x904F}, //{0xE9, 0x81, 0x8F}, // �� + {0xB5C0, 0x9053}, //{0xE9, 0x81, 0x93}, // �� + {0xD2C5, 0x9057}, //{0xE9, 0x81, 0x97}, // �� {0xC7B2, 0x9063}, //{0xE9, 0x81, 0xA3}, // Dz {0xD2A3, 0x9065}, //{0xE9, 0x81, 0xA5}, // ң - {0xD4E2, 0x906D}, //{0xE9, 0x81, 0xAD}, // - {0xD5DA, 0x906E}, //{0xE9, 0x81, 0xAE}, // - {0xD7F1, 0x9075}, //{0xE9, 0x81, 0xB5}, // - {0xB1DC, 0x907F}, //{0xE9, 0x81, 0xBF}, // - {0xD1FB, 0x9080}, //{0xE9, 0x82, 0x80}, // - {0xD2D8, 0x9091}, //{0xE9, 0x82, 0x91}, // - {0xB5CB, 0x9093}, //{0xE9, 0x82, 0x93}, // - {0xD0CF, 0x90A2}, //{0xE9, 0x82, 0xA2}, // - {0xC4C7, 0x90A3}, //{0xE9, 0x82, 0xA3}, // - {0xB0EE, 0x90A6}, //{0xE9, 0x82, 0xA6}, // + {0xD4E2, 0x906D}, //{0xE9, 0x81, 0xAD}, // �� + {0xD5DA, 0x906E}, //{0xE9, 0x81, 0xAE}, // �� + {0xD7F1, 0x9075}, //{0xE9, 0x81, 0xB5}, // �� + {0xB1DC, 0x907F}, //{0xE9, 0x81, 0xBF}, // �� + {0xD1FB, 0x9080}, //{0xE9, 0x82, 0x80}, // �� + {0xD2D8, 0x9091}, //{0xE9, 0x82, 0x91}, // �� + {0xB5CB, 0x9093}, //{0xE9, 0x82, 0x93}, // �� + {0xD0CF, 0x90A2}, //{0xE9, 0x82, 0xA2}, // �� + {0xC4C7, 0x90A3}, //{0xE9, 0x82, 0xA3}, // �� + {0xB0EE, 0x90A6}, //{0xE9, 0x82, 0xA6}, // �� {0xD0B0, 0x90AA}, //{0xE9, 0x82, 0xAA}, // а - {0xD3CA, 0x90AE}, //{0xE9, 0x82, 0xAE}, // - {0xC1DA, 0x90BB}, //{0xE9, 0x82, 0xBB}, // - {0xD3F4, 0x90C1}, //{0xE9, 0x83, 0x81}, // - {0xBDBC, 0x90CA}, //{0xE9, 0x83, 0x8A}, // - {0xC0C9, 0x90CE}, //{0xE9, 0x83, 0x8E}, // + {0xD3CA, 0x90AE}, //{0xE9, 0x82, 0xAE}, // �� + {0xC1DA, 0x90BB}, //{0xE9, 0x82, 0xBB}, // �� + {0xD3F4, 0x90C1}, //{0xE9, 0x83, 0x81}, // �� + {0xBDBC, 0x90CA}, //{0xE9, 0x83, 0x8A}, // �� + {0xC0C9, 0x90CE}, //{0xE9, 0x83, 0x8E}, // �� {0xD6A3, 0x90D1}, //{0xE9, 0x83, 0x91}, // ֣ - {0xB2BF, 0x90E8}, //{0xE9, 0x83, 0xA8}, // - {0xB9F9, 0x90ED}, //{0xE9, 0x83, 0xAD}, // - {0xB6BC, 0x90FD}, //{0xE9, 0x83, 0xBD}, // - {0xB1C9, 0x9119}, //{0xE9, 0x84, 0x99}, // - {0xD7C3, 0x914C}, //{0xE9, 0x85, 0x8C}, // - {0xC5E4, 0x914D}, //{0xE9, 0x85, 0x8D}, // - {0xBEC6, 0x9152}, //{0xE9, 0x85, 0x92}, // - {0xD0EF, 0x9157}, //{0xE9, 0x85, 0x97}, // - {0xD4CD, 0x915D}, //{0xE9, 0x85, 0x9D}, // - {0xBAA8, 0x9163}, //{0xE9, 0x85, 0xA3}, // - {0xCBD6, 0x9165}, //{0xE9, 0x85, 0xA5}, // - {0xC0D2, 0x916A}, //{0xE9, 0x85, 0xAA}, // - {0xB3EA, 0x916C}, //{0xE9, 0x85, 0xAC}, // - {0xBDB4, 0x9171}, //{0xE9, 0x85, 0xB1}, // - {0xBDCD, 0x9175}, //{0xE9, 0x85, 0xB5}, // - {0xBFE1, 0x9177}, //{0xE9, 0x85, 0xB7}, // - {0xCBE1, 0x9178}, //{0xE9, 0x85, 0xB8}, // - {0xC4F0, 0x917F}, //{0xE9, 0x85, 0xBF}, // - {0xB4BC, 0x9187}, //{0xE9, 0x86, 0x87}, // - {0xD7ED, 0x9189}, //{0xE9, 0x86, 0x89}, // - {0xB4D7, 0x918B}, //{0xE9, 0x86, 0x8B}, // - {0xD0D1, 0x9192}, //{0xE9, 0x86, 0x92}, // - {0xB2C9, 0x91C7}, //{0xE9, 0x87, 0x87}, // - {0xCACD, 0x91CA}, //{0xE9, 0x87, 0x8A}, // - {0xC0EF, 0x91CC}, //{0xE9, 0x87, 0x8C}, // - {0xD6D8, 0x91CD}, //{0xE9, 0x87, 0x8D}, // + {0xB2BF, 0x90E8}, //{0xE9, 0x83, 0xA8}, // �� + {0xB9F9, 0x90ED}, //{0xE9, 0x83, 0xAD}, // �� + {0xB6BC, 0x90FD}, //{0xE9, 0x83, 0xBD}, // �� + {0xB1C9, 0x9119}, //{0xE9, 0x84, 0x99}, // �� + {0xD7C3, 0x914C}, //{0xE9, 0x85, 0x8C}, // �� + {0xC5E4, 0x914D}, //{0xE9, 0x85, 0x8D}, // �� + {0xBEC6, 0x9152}, //{0xE9, 0x85, 0x92}, // �� + {0xD0EF, 0x9157}, //{0xE9, 0x85, 0x97}, // �� + {0xD4CD, 0x915D}, //{0xE9, 0x85, 0x9D}, // �� + {0xBAA8, 0x9163}, //{0xE9, 0x85, 0xA3}, // �� + {0xCBD6, 0x9165}, //{0xE9, 0x85, 0xA5}, // �� + {0xC0D2, 0x916A}, //{0xE9, 0x85, 0xAA}, // �� + {0xB3EA, 0x916C}, //{0xE9, 0x85, 0xAC}, // �� + {0xBDB4, 0x9171}, //{0xE9, 0x85, 0xB1}, // �� + {0xBDCD, 0x9175}, //{0xE9, 0x85, 0xB5}, // �� + {0xBFE1, 0x9177}, //{0xE9, 0x85, 0xB7}, // �� + {0xCBE1, 0x9178}, //{0xE9, 0x85, 0xB8}, // �� + {0xC4F0, 0x917F}, //{0xE9, 0x85, 0xBF}, // �� + {0xB4BC, 0x9187}, //{0xE9, 0x86, 0x87}, // �� + {0xD7ED, 0x9189}, //{0xE9, 0x86, 0x89}, // �� + {0xB4D7, 0x918B}, //{0xE9, 0x86, 0x8B}, // �� + {0xD0D1, 0x9192}, //{0xE9, 0x86, 0x92}, // �� + {0xB2C9, 0x91C7}, //{0xE9, 0x87, 0x87}, // �� + {0xCACD, 0x91CA}, //{0xE9, 0x87, 0x8A}, // �� + {0xC0EF, 0x91CC}, //{0xE9, 0x87, 0x8C}, // �� + {0xD6D8, 0x91CD}, //{0xE9, 0x87, 0x8D}, // �� {0xD2B0, 0x91CE}, //{0xE9, 0x87, 0x8E}, // Ұ - {0xC1BF, 0x91CF}, //{0xE9, 0x87, 0x8F}, // - {0xBDF0, 0x91D1}, //{0xE9, 0x87, 0x91}, // - {0xBCF8, 0x9274}, //{0xE9, 0x89, 0xB4}, // - {0xD5EB, 0x9488}, //{0xE9, 0x92, 0x88}, // - {0xB6A4, 0x9489}, //{0xE9, 0x92, 0x89}, // - {0xB5F6, 0x9493}, //{0xE9, 0x92, 0x93}, // - {0xB8C6, 0x9499}, //{0xE9, 0x92, 0x99}, // - {0xB6DB, 0x949D}, //{0xE9, 0x92, 0x9D}, // - {0xB3AE, 0x949E}, //{0xE9, 0x92, 0x9E}, // - {0xD6D3, 0x949F}, //{0xE9, 0x92, 0x9F}, // - {0xC4C6, 0x94A0}, //{0xE9, 0x92, 0xA0}, // - {0xB8D6, 0x94A2}, //{0xE9, 0x92, 0xA2}, // + {0xC1BF, 0x91CF}, //{0xE9, 0x87, 0x8F}, //  + {0xBDF0, 0x91D1}, //{0xE9, 0x87, 0x91}, // �� + {0xBCF8, 0x9274}, //{0xE9, 0x89, 0xB4}, // �� + {0xD5EB, 0x9488}, //{0xE9, 0x92, 0x88}, // �� + {0xB6A4, 0x9489}, //{0xE9, 0x92, 0x89}, // �� + {0xB5F6, 0x9493}, //{0xE9, 0x92, 0x93}, // �� + {0xB8C6, 0x9499}, //{0xE9, 0x92, 0x99}, // �� + {0xB6DB, 0x949D}, //{0xE9, 0x92, 0x9D}, // �� + {0xB3AE, 0x949E}, //{0xE9, 0x92, 0x9E}, // �� + {0xD6D3, 0x949F}, //{0xE9, 0x92, 0x9F}, // �� + {0xC4C6, 0x94A0}, //{0xE9, 0x92, 0xA0}, // �� + {0xB8D6, 0x94A2}, //{0xE9, 0x92, 0xA2}, // �� {0xD4BF, 0x94A5}, //{0xE9, 0x92, 0xA5}, // Կ - {0xC7D5, 0x94A6}, //{0xE9, 0x92, 0xA6}, // - {0xBEFB, 0x94A7}, //{0xE9, 0x92, 0xA7}, // - {0xB9B3, 0x94A9}, //{0xE9, 0x92, 0xA9}, // + {0xC7D5, 0x94A6}, //{0xE9, 0x92, 0xA6}, // �� + {0xBEFB, 0x94A7}, //{0xE9, 0x92, 0xA7}, // �� + {0xB9B3, 0x94A9}, //{0xE9, 0x92, 0xA9}, // �� {0xC5A5, 0x94AE}, //{0xE9, 0x92, 0xAE}, // ť {0xC7AE, 0x94B1}, //{0xE9, 0x92, 0xB1}, // Ǯ {0xC7AF, 0x94B3}, //{0xE9, 0x92, 0xB3}, // ǯ - {0xD7EA, 0x94BB}, //{0xE9, 0x92, 0xBB}, // - {0xBCD8, 0x94BE}, //{0xE9, 0x92, 0xBE}, // - {0xCCFA, 0x94C1}, //{0xE9, 0x93, 0x81}, // - {0xC1E5, 0x94C3}, //{0xE9, 0x93, 0x83}, // + {0xD7EA, 0x94BB}, //{0xE9, 0x92, 0xBB}, // �� + {0xBCD8, 0x94BE}, //{0xE9, 0x92, 0xBE}, // �� + {0xCCFA, 0x94C1}, //{0xE9, 0x93, 0x81}, // �� + {0xC1E5, 0x94C3}, //{0xE9, 0x93, 0x83}, // �� {0xC7A6, 0x94C5}, //{0xE9, 0x93, 0x85}, // Ǧ {0xC3AD, 0x94C6}, //{0xE9, 0x93, 0x86}, // í - {0xEEED, 0x94D0}, //{0xE9, 0x93, 0x90}, // - {0xEEF5, 0x94DB}, //{0xE9, 0x93, 0x9B}, // + {0xEEED, 0x94D0}, //{0xE9, 0x93, 0x90}, // �� + {0xEEF5, 0x94DB}, //{0xE9, 0x93, 0x9B}, // �� {0xCDAD, 0x94DC}, //{0xE9, 0x93, 0x9C}, // ͭ - {0xC2C1, 0x94DD}, //{0xE9, 0x93, 0x9D}, // + {0xC2C1, 0x94DD}, //{0xE9, 0x93, 0x9D}, // �� {0xD5A1, 0x94E1}, //{0xE9, 0x93, 0xA1}, // ա {0xCFB3, 0x94E3}, //{0xE9, 0x93, 0xA3}, // ϳ - {0xC3FA, 0x94ED}, //{0xE9, 0x93, 0xAD}, // - {0xB2F9, 0x94F2}, //{0xE9, 0x93, 0xB2}, // - {0xD2F8, 0x94F6}, //{0xE9, 0x93, 0xB6}, // - {0xD6FD, 0x94F8}, //{0xE9, 0x93, 0xB8}, // - {0xC6CC, 0x94FA}, //{0xE9, 0x93, 0xBA}, // - {0xC1B4, 0x94FE}, //{0xE9, 0x93, 0xBE}, // - {0xCFFA, 0x9500}, //{0xE9, 0x94, 0x80}, // - {0xCBF8, 0x9501}, //{0xE9, 0x94, 0x81}, // - {0xB3FA, 0x9504}, //{0xE9, 0x94, 0x84}, // - {0xB9F8, 0x9505}, //{0xE9, 0x94, 0x85}, // - {0xD0E2, 0x9508}, //{0xE9, 0x94, 0x88}, // - {0xEFB1, 0x9509}, //{0xE9, 0x94, 0x89}, // - {0xB7E6, 0x950B}, //{0xE9, 0x94, 0x8B}, // + {0xC3FA, 0x94ED}, //{0xE9, 0x93, 0xAD}, // �� + {0xB2F9, 0x94F2}, //{0xE9, 0x93, 0xB2}, // �� + {0xD2F8, 0x94F6}, //{0xE9, 0x93, 0xB6}, // �� + {0xD6FD, 0x94F8}, //{0xE9, 0x93, 0xB8}, // �� + {0xC6CC, 0x94FA}, //{0xE9, 0x93, 0xBA}, // �� + {0xC1B4, 0x94FE}, //{0xE9, 0x93, 0xBE}, // t + {0xCFFA, 0x9500}, //{0xE9, 0x94, 0x80}, // �� + {0xCBF8, 0x9501}, //{0xE9, 0x94, 0x81}, // �� + {0xB3FA, 0x9504}, //{0xE9, 0x94, 0x84}, // �� + {0xB9F8, 0x9505}, //{0xE9, 0x94, 0x85}, // �� + {0xD0E2, 0x9508}, //{0xE9, 0x94, 0x88}, // �� + {0xEFB1, 0x9509}, //{0xE9, 0x94, 0x89}, // � + {0xB7E6, 0x950B}, //{0xE9, 0x94, 0x8B}, // �� {0xD0BF, 0x950C}, //{0xE9, 0x94, 0x8C}, // п - {0xC8F1, 0x9510}, //{0xE9, 0x94, 0x90}, // - {0xB4ED, 0x9519}, //{0xE9, 0x94, 0x99}, // + {0xC8F1, 0x9510}, //{0xE9, 0x94, 0x90}, // �� + {0xB4ED, 0x9519}, //{0xE9, 0x94, 0x99}, // �� {0xC3AA, 0x951A}, //{0xE9, 0x94, 0x9A}, // ê - {0xCEFD, 0x9521}, //{0xE9, 0x94, 0xA1}, // - {0xC2E0, 0x9523}, //{0xE9, 0x94, 0xA3}, // - {0xB4B8, 0x9524}, //{0xE9, 0x94, 0xA4}, // + {0xCEFD, 0x9521}, //{0xE9, 0x94, 0xA1}, // �� + {0xC2E0, 0x9523}, //{0xE9, 0x94, 0xA3}, // �� + {0xB4B8, 0x9524}, //{0xE9, 0x94, 0xA4}, // �� {0xD7B6, 0x9525}, //{0xE9, 0x94, 0xA5}, // ׶ - {0xBDF5, 0x9526}, //{0xE9, 0x94, 0xA6}, // - {0xCFC7, 0x9528}, //{0xE9, 0x94, 0xA8}, // - {0xB6A7, 0x952D}, //{0xE9, 0x94, 0xAD}, // - {0xBCFC, 0x952E}, //{0xE9, 0x94, 0xAE}, // - {0xBEE2, 0x952F}, //{0xE9, 0x94, 0xAF}, // - {0xC3CC, 0x9530}, //{0xE9, 0x94, 0xB0}, // - {0xC7C2, 0x9539}, //{0xE9, 0x94, 0xB9}, // - {0xB6CD, 0x953B}, //{0xE9, 0x94, 0xBB}, // - {0xB6C6, 0x9540}, //{0xE9, 0x95, 0x80}, // - {0xD5F2, 0x9547}, //{0xE9, 0x95, 0x87}, // - {0xC4F7, 0x954A}, //{0xE9, 0x95, 0x8A}, // - {0xB8E4, 0x9550}, //{0xE9, 0x95, 0x90}, // - {0xBEB5, 0x955C}, //{0xE9, 0x95, 0x9C}, // - {0xC1CD, 0x9563}, //{0xE9, 0x95, 0xA3}, // - {0xC1AD, 0x9570}, //{0xE9, 0x95, 0xB0}, // - {0xCFE2, 0x9576}, //{0xE9, 0x95, 0xB6}, // - {0xB3A4, 0x957F}, //{0xE9, 0x95, 0xBF}, // - {0xC3C5, 0x95E8}, //{0xE9, 0x97, 0xA8}, // - {0xC9C1, 0x95EA}, //{0xE9, 0x97, 0xAA}, // - {0xB1D5, 0x95ED}, //{0xE9, 0x97, 0xAD}, // - {0xCECA, 0x95EE}, //{0xE9, 0x97, 0xAE}, // - {0xB4B3, 0x95EF}, //{0xE9, 0x97, 0xAF}, // - {0xC8F2, 0x95F0}, //{0xE9, 0x97, 0xB0}, // - {0xCFD0, 0x95F2}, //{0xE9, 0x97, 0xB2}, // - {0xBCE4, 0x95F4}, //{0xE9, 0x97, 0xB4}, // - {0xC3C6, 0x95F7}, //{0xE9, 0x97, 0xB7}, // + {0xBDF5, 0x9526}, //{0xE9, 0x94, 0xA6}, // �� + {0xCFC7, 0x9528}, //{0xE9, 0x94, 0xA8}, // �� + {0xB6A7, 0x952D}, //{0xE9, 0x94, 0xAD}, // �� + {0xBCFC, 0x952E}, //{0xE9, 0x94, 0xAE}, // �� + {0xBEE2, 0x952F}, //{0xE9, 0x94, 0xAF}, // �� + {0xC3CC, 0x9530}, //{0xE9, 0x94, 0xB0}, // �� + {0xC7C2, 0x9539}, //{0xE9, 0x94, 0xB9}, // �� + {0xB6CD, 0x953B}, //{0xE9, 0x94, 0xBB}, // �� + {0xB6C6, 0x9540}, //{0xE9, 0x95, 0x80}, // �� + {0xD5F2, 0x9547}, //{0xE9, 0x95, 0x87}, // �� + {0xC4F7, 0x954A}, //{0xE9, 0x95, 0x8A}, // �� + {0xB8E4, 0x9550}, //{0xE9, 0x95, 0x90}, // �� + {0xBEB5, 0x955C}, //{0xE9, 0x95, 0x9C}, // �� + {0xC1CD, 0x9563}, //{0xE9, 0x95, 0xA3}, // �� + {0xC1AD, 0x9570}, //{0xE9, 0x95, 0xB0}, // m + {0xCFE2, 0x9576}, //{0xE9, 0x95, 0xB6}, // �� + {0xB3A4, 0x957F}, //{0xE9, 0x95, 0xBF}, // �� + {0xC3C5, 0x95E8}, //{0xE9, 0x97, 0xA8}, // �� + {0xC9C1, 0x95EA}, //{0xE9, 0x97, 0xAA}, // �� + {0xB1D5, 0x95ED}, //{0xE9, 0x97, 0xAD}, // �� + {0xCECA, 0x95EE}, //{0xE9, 0x97, 0xAE}, // �� + {0xB4B3, 0x95EF}, //{0xE9, 0x97, 0xAF}, // �� + {0xC8F2, 0x95F0}, //{0xE9, 0x97, 0xB0}, // �� + {0xCFD0, 0x95F2}, //{0xE9, 0x97, 0xB2}, // �� + {0xBCE4, 0x95F4}, //{0xE9, 0x97, 0xB4}, // �� + {0xC3C6, 0x95F7}, //{0xE9, 0x97, 0xB7}, // �� {0xD5A2, 0x95F8}, //{0xE9, 0x97, 0xB8}, // բ - {0xC4D6, 0x95F9}, //{0xE9, 0x97, 0xB9}, // - {0xB9EB, 0x95FA}, //{0xE9, 0x97, 0xBA}, // - {0xCEC5, 0x95FB}, //{0xE9, 0x97, 0xBB}, // - {0xC3F6, 0x95FD}, //{0xE9, 0x97, 0xBD}, // - {0xB7A7, 0x9600}, //{0xE9, 0x98, 0x80}, // - {0xB8F3, 0x9601}, //{0xE9, 0x98, 0x81}, // - {0xD4C4, 0x9605}, //{0xE9, 0x98, 0x85}, // - {0xD1D6, 0x960E}, //{0xE9, 0x98, 0x8E}, // - {0xB2FB, 0x9610}, //{0xE9, 0x98, 0x90}, // - {0xC0AB, 0x9614}, //{0xE9, 0x98, 0x94}, // - {0xB6D3, 0x961F}, //{0xE9, 0x98, 0x9F}, // - {0xDAE5, 0x9631}, //{0xE9, 0x98, 0xB1}, // - {0xB7C0, 0x9632}, //{0xE9, 0x98, 0xB2}, // - {0xD1F4, 0x9633}, //{0xE9, 0x98, 0xB3}, // - {0xD2F5, 0x9634}, //{0xE9, 0x98, 0xB4}, // - {0xD5F3, 0x9635}, //{0xE9, 0x98, 0xB5}, // - {0xBDD7, 0x9636}, //{0xE9, 0x98, 0xB6}, // - {0xD7E8, 0x963B}, //{0xE9, 0x98, 0xBB}, // - {0xB0A2, 0x963F}, //{0xE9, 0x98, 0xBF}, // - {0xB8BD, 0x9644}, //{0xE9, 0x99, 0x84}, // - {0xBCCA, 0x9645}, //{0xE9, 0x99, 0x85}, // + {0xC4D6, 0x95F9}, //{0xE9, 0x97, 0xB9}, // �� + {0xB9EB, 0x95FA}, //{0xE9, 0x97, 0xBA}, // �� + {0xCEC5, 0x95FB}, //{0xE9, 0x97, 0xBB}, // �� + {0xC3F6, 0x95FD}, //{0xE9, 0x97, 0xBD}, // �� + {0xB7A7, 0x9600}, //{0xE9, 0x98, 0x80}, // �� + {0xB8F3, 0x9601}, //{0xE9, 0x98, 0x81}, // �� + {0xD4C4, 0x9605}, //{0xE9, 0x98, 0x85}, // �� + {0xD1D6, 0x960E}, //{0xE9, 0x98, 0x8E}, // �� + {0xB2FB, 0x9610}, //{0xE9, 0x98, 0x90}, // �� + {0xC0AB, 0x9614}, //{0xE9, 0x98, 0x94}, // �� + {0xB6D3, 0x961F}, //{0xE9, 0x98, 0x9F}, // �� + {0xDAE5, 0x9631}, //{0xE9, 0x98, 0xB1}, // �� + {0xB7C0, 0x9632}, //{0xE9, 0x98, 0xB2}, // �� + {0xD1F4, 0x9633}, //{0xE9, 0x98, 0xB3}, // �� + {0xD2F5, 0x9634}, //{0xE9, 0x98, 0xB4}, // �� + {0xD5F3, 0x9635}, //{0xE9, 0x98, 0xB5}, // �� + {0xBDD7, 0x9636}, //{0xE9, 0x98, 0xB6}, // �� + {0xD7E8, 0x963B}, //{0xE9, 0x98, 0xBB}, // �� + {0xB0A2, 0x963F}, //{0xE9, 0x98, 0xBF}, // �� + {0xB8BD, 0x9644}, //{0xE9, 0x99, 0x84}, // �� + {0xBCCA, 0x9645}, //{0xE9, 0x99, 0x85}, // �� {0xC2BD, 0x9646}, //{0xE9, 0x99, 0x86}, // ½ - {0xB3C2, 0x9648}, //{0xE9, 0x99, 0x88}, // + {0xB3C2, 0x9648}, //{0xE9, 0x99, 0x88}, // �� {0xC2AA, 0x964B}, //{0xE9, 0x99, 0x8B}, // ª {0xC4B0, 0x964C}, //{0xE9, 0x99, 0x8C}, // İ - {0xBDB5, 0x964D}, //{0xE9, 0x99, 0x8D}, // - {0xCFDE, 0x9650}, //{0xE9, 0x99, 0x90}, // - {0xC9C2, 0x9655}, //{0xE9, 0x99, 0x95}, // - {0xB6B8, 0x9661}, //{0xE9, 0x99, 0xA1}, // + {0xBDB5, 0x964D}, //{0xE9, 0x99, 0x8D}, // �� + {0xCFDE, 0x9650}, //{0xE9, 0x99, 0x90}, // �� + {0xC9C2, 0x9655}, //{0xE9, 0x99, 0x95}, // �� + {0xB6B8, 0x9661}, //{0xE9, 0x99, 0xA1}, // �� {0xD4BA, 0x9662}, //{0xE9, 0x99, 0xA2}, // Ժ - {0xB3FD, 0x9664}, //{0xE9, 0x99, 0xA4}, // - {0xD4C9, 0x9668}, //{0xE9, 0x99, 0xA8}, // - {0xCFD5, 0x9669}, //{0xE9, 0x99, 0xA9}, // - {0xC5E3, 0x966A}, //{0xE9, 0x99, 0xAA}, // - {0xC1EA, 0x9675}, //{0xE9, 0x99, 0xB5}, // - {0xCCD5, 0x9676}, //{0xE9, 0x99, 0xB6}, // - {0xCFDD, 0x9677}, //{0xE9, 0x99, 0xB7}, // - {0xD3E7, 0x9685}, //{0xE9, 0x9A, 0x85}, // + {0xB3FD, 0x9664}, //{0xE9, 0x99, 0xA4}, // �� + {0xD4C9, 0x9668}, //{0xE9, 0x99, 0xA8}, // �� + {0xCFD5, 0x9669}, //{0xE9, 0x99, 0xA9}, // �� + {0xC5E3, 0x966A}, //{0xE9, 0x99, 0xAA}, // �� + {0xC1EA, 0x9675}, //{0xE9, 0x99, 0xB5}, // �� + {0xCCD5, 0x9676}, //{0xE9, 0x99, 0xB6}, // �� + {0xCFDD, 0x9677}, //{0xE9, 0x99, 0xB7}, // �� + {0xD3E7, 0x9685}, //{0xE9, 0x9A, 0x85}, // �� {0xC2A1, 0x9686}, //{0xE9, 0x9A, 0x86}, // ¡ - {0xCBE6, 0x968F}, //{0xE9, 0x9A, 0x8F}, // - {0xD2FE, 0x9690}, //{0xE9, 0x9A, 0x90}, // - {0xB8F4, 0x9694}, //{0xE9, 0x9A, 0x94}, // - {0xB0AF, 0x9698}, //{0xE9, 0x9A, 0x98}, // + {0xCBE6, 0x968F}, //{0xE9, 0x9A, 0x8F}, // �� + {0xD2FE, 0x9690}, //{0xE9, 0x9A, 0x90}, // �� + {0xB8F4, 0x9694}, //{0xE9, 0x9A, 0x94}, // �� + {0xB0AF, 0x9698}, //{0xE9, 0x9A, 0x98}, // �� {0xCFB6, 0x9699}, //{0xE9, 0x9A, 0x99}, // ϶ - {0xD5CF, 0x969C}, //{0xE9, 0x9A, 0x9C}, // - {0xCBED, 0x96A7}, //{0xE9, 0x9A, 0xA7}, // - {0xC1A5, 0x96B6}, //{0xE9, 0x9A, 0xB6}, // - {0xC4D1, 0x96BE}, //{0xE9, 0x9A, 0xBE}, // + {0xD5CF, 0x969C}, //{0xE9, 0x9A, 0x9C}, // �� + {0xCBED, 0x96A7}, //{0xE9, 0x9A, 0xA7}, // �� + {0xC1A5, 0x96B6}, //{0xE9, 0x9A, 0xB6}, // e + {0xC4D1, 0x96BE}, //{0xE9, 0x9A, 0xBE}, // �� {0xC8B8, 0x96C0}, //{0xE9, 0x9B, 0x80}, // ȸ - {0xD1E3, 0x96C1}, //{0xE9, 0x9B, 0x81}, // - {0xD0DB, 0x96C4}, //{0xE9, 0x9B, 0x84}, // - {0xD1C5, 0x96C5}, //{0xE9, 0x9B, 0x85}, // - {0xBCAF, 0x96C6}, //{0xE9, 0x9B, 0x86}, // - {0xB9CD, 0x96C7}, //{0xE9, 0x9B, 0x87}, // - {0xB4C6, 0x96CC}, //{0xE9, 0x9B, 0x8C}, // - {0xB3FB, 0x96CF}, //{0xE9, 0x9B, 0x8F}, // - {0xB5F1, 0x96D5}, //{0xE9, 0x9B, 0x95}, // - {0xD3EA, 0x96E8}, //{0xE9, 0x9B, 0xA8}, // + {0xD1E3, 0x96C1}, //{0xE9, 0x9B, 0x81}, // �� + {0xD0DB, 0x96C4}, //{0xE9, 0x9B, 0x84}, // �� + {0xD1C5, 0x96C5}, //{0xE9, 0x9B, 0x85}, // �� + {0xBCAF, 0x96C6}, //{0xE9, 0x9B, 0x86}, // �� + {0xB9CD, 0x96C7}, //{0xE9, 0x9B, 0x87}, // �� + {0xB4C6, 0x96CC}, //{0xE9, 0x9B, 0x8C}, // �� + {0xB3FB, 0x96CF}, //{0xE9, 0x9B, 0x8F}, // �� + {0xB5F1, 0x96D5}, //{0xE9, 0x9B, 0x95}, // �� + {0xD3EA, 0x96E8}, //{0xE9, 0x9B, 0xA8}, // �� {0xD1A9, 0x96EA}, //{0xE9, 0x9B, 0xAA}, // ѩ - {0xF6A8, 0x96F3}, //{0xE9, 0x9B, 0xB3}, // - {0xC1E3, 0x96F6}, //{0xE9, 0x9B, 0xB6}, // - {0xC0D7, 0x96F7}, //{0xE9, 0x9B, 0xB7}, // - {0xB1A2, 0x96F9}, //{0xE9, 0x9B, 0xB9}, // - {0xCEED, 0x96FE}, //{0xE9, 0x9B, 0xBE}, // - {0xD0E8, 0x9700}, //{0xE9, 0x9C, 0x80}, // - {0xD5F0, 0x9707}, //{0xE9, 0x9C, 0x87}, // + {0xF6A8, 0x96F3}, //{0xE9, 0x9B, 0xB3}, // �� + {0xC1E3, 0x96F6}, //{0xE9, 0x9B, 0xB6}, // �� + {0xC0D7, 0x96F7}, //{0xE9, 0x9B, 0xB7}, // �� + {0xB1A2, 0x96F9}, //{0xE9, 0x9B, 0xB9}, // �� + {0xCEED, 0x96FE}, //{0xE9, 0x9B, 0xBE}, // �� + {0xD0E8, 0x9700}, //{0xE9, 0x9C, 0x80}, // �� + {0xD5F0, 0x9707}, //{0xE9, 0x9C, 0x87}, // �� {0xC3B9, 0x9709}, //{0xE9, 0x9C, 0x89}, // ù - {0xBBF4, 0x970D}, //{0xE9, 0x9C, 0x8D}, // - {0xF6AE, 0x970E}, //{0xE9, 0x9C, 0x8E}, // + {0xBBF4, 0x970D}, //{0xE9, 0x9C, 0x8D}, // �� + {0xF6AE, 0x970E}, //{0xE9, 0x9C, 0x8E}, // �� {0xCBAA, 0x971C}, //{0xE9, 0x9C, 0x9C}, // ˪ {0xCFBC, 0x971E}, //{0xE9, 0x9C, 0x9E}, // ϼ {0xC2B6, 0x9732}, //{0xE9, 0x9C, 0xB2}, // ¶ - {0xB0D4, 0x9738}, //{0xE9, 0x9C, 0xB8}, // - {0xC5F9, 0x9739}, //{0xE9, 0x9C, 0xB9}, // - {0xC7E0, 0x9752}, //{0xE9, 0x9D, 0x92}, // - {0xBEB8, 0x9756}, //{0xE9, 0x9D, 0x96}, // - {0xBEB2, 0x9759}, //{0xE9, 0x9D, 0x99}, // - {0xB7C7, 0x975E}, //{0xE9, 0x9D, 0x9E}, // - {0xBFBF, 0x9760}, //{0xE9, 0x9D, 0xA0}, // - {0xC3D2, 0x9761}, //{0xE9, 0x9D, 0xA1}, // - {0xC3E6, 0x9762}, //{0xE9, 0x9D, 0xA2}, // - {0xB8EF, 0x9769}, //{0xE9, 0x9D, 0xA9}, // + {0xB0D4, 0x9738}, //{0xE9, 0x9C, 0xB8}, // �� + {0xC5F9, 0x9739}, //{0xE9, 0x9C, 0xB9}, // �� + {0xC7E0, 0x9752}, //{0xE9, 0x9D, 0x92}, // �� + {0xBEB8, 0x9756}, //{0xE9, 0x9D, 0x96}, // �� + {0xBEB2, 0x9759}, //{0xE9, 0x9D, 0x99}, // �� + {0xB7C7, 0x975E}, //{0xE9, 0x9D, 0x9E}, // �� + {0xBFBF, 0x9760}, //{0xE9, 0x9D, 0xA0}, // �� + {0xC3D2, 0x9761}, //{0xE9, 0x9D, 0xA1}, // �� + {0xC3E6, 0x9762}, //{0xE9, 0x9D, 0xA2}, // �� + {0xB8EF, 0x9769}, //{0xE9, 0x9D, 0xA9}, // �� {0xD1A5, 0x9774}, //{0xE9, 0x9D, 0xB4}, // ѥ - {0xB0D0, 0x9776}, //{0xE9, 0x9D, 0xB6}, // + {0xB0D0, 0x9776}, //{0xE9, 0x9D, 0xB6}, // �� {0xD0AC, 0x978B}, //{0xE9, 0x9E, 0x8B}, // Ь - {0xB0B0, 0x978D}, //{0xE9, 0x9E, 0x8D}, // - {0xBECF, 0x97A0}, //{0xE9, 0x9E, 0xA0}, // - {0xB1DE, 0x97AD}, //{0xE9, 0x9E, 0xAD}, // - {0xC8CD, 0x97E7}, //{0xE9, 0x9F, 0xA7}, // - {0xBAAB, 0x97E9}, //{0xE9, 0x9F, 0xA9}, // - {0xBEC2, 0x97ED}, //{0xE9, 0x9F, 0xAD}, // - {0xD2F4, 0x97F3}, //{0xE9, 0x9F, 0xB3}, // - {0xD4CF, 0x97F5}, //{0xE9, 0x9F, 0xB5}, // + {0xB0B0, 0x978D}, //{0xE9, 0x9E, 0x8D}, // �� + {0xBECF, 0x97A0}, //{0xE9, 0x9E, 0xA0}, // �� + {0xB1DE, 0x97AD}, //{0xE9, 0x9E, 0xAD}, // �� + {0xC8CD, 0x97E7}, //{0xE9, 0x9F, 0xA7}, // �� + {0xBAAB, 0x97E9}, //{0xE9, 0x9F, 0xA9}, // �� + {0xBEC2, 0x97ED}, //{0xE9, 0x9F, 0xAD}, // �� + {0xD2F4, 0x97F3}, //{0xE9, 0x9F, 0xB3}, // �� + {0xD4CF, 0x97F5}, //{0xE9, 0x9F, 0xB5}, // �� {0xD2B3, 0x9875}, //{0xE9, 0xA1, 0xB5}, // ҳ - {0xB6A5, 0x9876}, //{0xE9, 0xA1, 0xB6}, // - {0xC7EA, 0x9877}, //{0xE9, 0xA1, 0xB7}, // - {0xCFEE, 0x9879}, //{0xE9, 0xA1, 0xB9}, // + {0xB6A5, 0x9876}, //{0xE9, 0xA1, 0xB6}, // �� + {0xC7EA, 0x9877}, //{0xE9, 0xA1, 0xB7}, // �� + {0xCFEE, 0x9879}, //{0xE9, 0xA1, 0xB9}, // �� {0xCBB3, 0x987A}, //{0xE9, 0xA1, 0xBA}, // ˳ - {0xD0EB, 0x987B}, //{0xE9, 0xA1, 0xBB}, // - {0xCDE7, 0x987D}, //{0xE9, 0xA1, 0xBD}, // - {0xB9CB, 0x987E}, //{0xE9, 0xA1, 0xBE}, // - {0xB6D9, 0x987F}, //{0xE9, 0xA1, 0xBF}, // - {0xB0E4, 0x9881}, //{0xE9, 0xA2, 0x81}, // - {0xCBCC, 0x9882}, //{0xE9, 0xA2, 0x82}, // + {0xD0EB, 0x987B}, //{0xE9, 0xA1, 0xBB}, // �� + {0xCDE7, 0x987D}, //{0xE9, 0xA1, 0xBD}, // �� + {0xB9CB, 0x987E}, //{0xE9, 0xA1, 0xBE}, // �� + {0xB6D9, 0x987F}, //{0xE9, 0xA1, 0xBF}, // �� + {0xB0E4, 0x9881}, //{0xE9, 0xA2, 0x81}, // �� + {0xCBCC, 0x9882}, //{0xE9, 0xA2, 0x82}, // �� {0xD4A4, 0x9884}, //{0xE9, 0xA2, 0x84}, // Ԥ {0xC2AD, 0x9885}, //{0xE9, 0xA2, 0x85}, // ­ - {0xC1EC, 0x9886}, //{0xE9, 0xA2, 0x86}, // - {0xC6C4, 0x9887}, //{0xE9, 0xA2, 0x87}, // - {0xBEB1, 0x9888}, //{0xE9, 0xA2, 0x88}, // - {0xBCD5, 0x988A}, //{0xE9, 0xA2, 0x8A}, // + {0xC1EC, 0x9886}, //{0xE9, 0xA2, 0x86}, // �� + {0xC6C4, 0x9887}, //{0xE9, 0xA2, 0x87}, // �� + {0xBEB1, 0x9888}, //{0xE9, 0xA2, 0x88}, // �� + {0xBCD5, 0x988A}, //{0xE9, 0xA2, 0x8A}, // �� {0xC6B5, 0x9891}, //{0xE9, 0xA2, 0x91}, // Ƶ - {0xCDC7, 0x9893}, //{0xE9, 0xA2, 0x93}, // + {0xCDC7, 0x9893}, //{0xE9, 0xA2, 0x93}, // �� {0xD3B1, 0x9896}, //{0xE9, 0xA2, 0x96}, // ӱ - {0xBFC5, 0x9897}, //{0xE9, 0xA2, 0x97}, // - {0xCCE2, 0x9898}, //{0xE9, 0xA2, 0x98}, // - {0xD1D5, 0x989C}, //{0xE9, 0xA2, 0x9C}, // - {0xB6EE, 0x989D}, //{0xE9, 0xA2, 0x9D}, // - {0xB5DF, 0x98A0}, //{0xE9, 0xA2, 0xA0}, // - {0xB2FC, 0x98A4}, //{0xE9, 0xA2, 0xA4}, // - {0xB7E7, 0x98CE}, //{0xE9, 0xA3, 0x8E}, // - {0xECAA, 0x98D2}, //{0xE9, 0xA3, 0x92}, // + {0xBFC5, 0x9897}, //{0xE9, 0xA2, 0x97}, // �� + {0xCCE2, 0x9898}, //{0xE9, 0xA2, 0x98}, // �� + {0xD1D5, 0x989C}, //{0xE9, 0xA2, 0x9C}, // �� + {0xB6EE, 0x989D}, //{0xE9, 0xA2, 0x9D}, // �� + {0xB5DF, 0x98A0}, //{0xE9, 0xA2, 0xA0}, // �� + {0xB2FC, 0x98A4}, //{0xE9, 0xA2, 0xA4}, // �� + {0xB7E7, 0x98CE}, //{0xE9, 0xA3, 0x8E}, // �� + {0xECAA, 0x98D2}, //{0xE9, 0xA3, 0x92}, // � {0xC6AE, 0x98D8}, //{0xE9, 0xA3, 0x98}, // Ʈ - {0xB7C9, 0x98DE}, //{0xE9, 0xA3, 0x9E}, // + {0xB7C9, 0x98DE}, //{0xE9, 0xA3, 0x9E}, // �� {0xCAB3, 0x98DF}, //{0xE9, 0xA3, 0x9F}, // ʳ - {0xB2CD, 0x9910}, //{0xE9, 0xA4, 0x90}, // - {0xBCA2, 0x9965}, //{0xE9, 0xA5, 0xA5}, // - {0xB7B9, 0x996D}, //{0xE9, 0xA5, 0xAD}, // - {0xD2FB, 0x996E}, //{0xE9, 0xA5, 0xAE}, // - {0xCACE, 0x9970}, //{0xE9, 0xA5, 0xB0}, // - {0xB1A5, 0x9971}, //{0xE9, 0xA5, 0xB1}, // - {0xCBC7, 0x9972}, //{0xE9, 0xA5, 0xB2}, // - {0xB6FC, 0x9975}, //{0xE9, 0xA5, 0xB5}, // - {0xC8C4, 0x9976}, //{0xE9, 0xA5, 0xB6}, // - {0xBDC8, 0x997A}, //{0xE9, 0xA5, 0xBA}, // - {0xB1FD, 0x997C}, //{0xE9, 0xA5, 0xBC}, // - {0xB6F6, 0x997F}, //{0xE9, 0xA5, 0xBF}, // - {0xC4D9, 0x9981}, //{0xE9, 0xA6, 0x81}, // - {0xCFDA, 0x9985}, //{0xE9, 0xA6, 0x85}, // - {0xB9DD, 0x9986}, //{0xE9, 0xA6, 0x86}, // - {0xB2F6, 0x998B}, //{0xE9, 0xA6, 0x8B}, // - {0xE2C9, 0x998D}, //{0xE9, 0xA6, 0x8D}, // - {0xC1F3, 0x998F}, //{0xE9, 0xA6, 0x8F}, // - {0xC2F8, 0x9992}, //{0xE9, 0xA6, 0x92}, // - {0xCAD7, 0x9996}, //{0xE9, 0xA6, 0x96}, // - {0xCFE3, 0x9999}, //{0xE9, 0xA6, 0x99}, // - {0xC2ED, 0x9A6C}, //{0xE9, 0xA9, 0xAC}, // - {0xCDD4, 0x9A6E}, //{0xE9, 0xA9, 0xAE}, // + {0xB2CD, 0x9910}, //{0xE9, 0xA4, 0x90}, // �� + {0xBCA2, 0x9965}, //{0xE9, 0xA5, 0xA5}, // �� + {0xB7B9, 0x996D}, //{0xE9, 0xA5, 0xAD}, // �� + {0xD2FB, 0x996E}, //{0xE9, 0xA5, 0xAE}, // �� + {0xCACE, 0x9970}, //{0xE9, 0xA5, 0xB0}, // �� + {0xB1A5, 0x9971}, //{0xE9, 0xA5, 0xB1}, // �� + {0xCBC7, 0x9972}, //{0xE9, 0xA5, 0xB2}, // �� + {0xB6FC, 0x9975}, //{0xE9, 0xA5, 0xB5}, // �� + {0xC8C4, 0x9976}, //{0xE9, 0xA5, 0xB6}, // �� + {0xBDC8, 0x997A}, //{0xE9, 0xA5, 0xBA}, // �� + {0xB1FD, 0x997C}, //{0xE9, 0xA5, 0xBC}, // �� + {0xB6F6, 0x997F}, //{0xE9, 0xA5, 0xBF}, // �� + {0xC4D9, 0x9981}, //{0xE9, 0xA6, 0x81}, // �� + {0xCFDA, 0x9985}, //{0xE9, 0xA6, 0x85}, // �� + {0xB9DD, 0x9986}, //{0xE9, 0xA6, 0x86}, // �� + {0xB2F6, 0x998B}, //{0xE9, 0xA6, 0x8B}, // �� + {0xE2C9, 0x998D}, //{0xE9, 0xA6, 0x8D}, // �� + {0xC1F3, 0x998F}, //{0xE9, 0xA6, 0x8F}, // �� + {0xC2F8, 0x9992}, //{0xE9, 0xA6, 0x92}, // �� + {0xCAD7, 0x9996}, //{0xE9, 0xA6, 0x96}, // �� + {0xCFE3, 0x9999}, //{0xE9, 0xA6, 0x99}, // �� + {0xC2ED, 0x9A6C}, //{0xE9, 0xA9, 0xAC}, // �� + {0xCDD4, 0x9A6E}, //{0xE9, 0xA9, 0xAE}, // �� {0xD1B1, 0x9A6F}, //{0xE9, 0xA9, 0xAF}, // ѱ - {0xB3DB, 0x9A70}, //{0xE9, 0xA9, 0xB0}, // - {0xC7FD, 0x9A71}, //{0xE9, 0xA9, 0xB1}, // - {0xB2B5, 0x9A73}, //{0xE9, 0xA9, 0xB3}, // + {0xB3DB, 0x9A70}, //{0xE9, 0xA9, 0xB0}, // �� + {0xC7FD, 0x9A71}, //{0xE9, 0xA9, 0xB1}, // �� + {0xB2B5, 0x9A73}, //{0xE9, 0xA9, 0xB3}, // �� {0xC2BF, 0x9A74}, //{0xE9, 0xA9, 0xB4}, // ¿ {0xCABB, 0x9A76}, //{0xE9, 0xA9, 0xB6}, // ʻ - {0xBED4, 0x9A79}, //{0xE9, 0xA9, 0xB9}, // + {0xBED4, 0x9A79}, //{0xE9, 0xA9, 0xB9}, // �� {0xD7A4, 0x9A7B}, //{0xE9, 0xA9, 0xBB}, // פ - {0xCDD5, 0x9A7C}, //{0xE9, 0xA9, 0xBC}, // - {0xBCDD, 0x9A7E}, //{0xE9, 0xA9, 0xBE}, // - {0xC2EE, 0x9A82}, //{0xE9, 0xAA, 0x82}, // - {0xBDBE, 0x9A84}, //{0xE9, 0xAA, 0x84}, // - {0xC2E6, 0x9A86}, //{0xE9, 0xAA, 0x86}, // - {0xBAA7, 0x9A87}, //{0xE9, 0xAA, 0x87}, // - {0xD1E9, 0x9A8C}, //{0xE9, 0xAA, 0x8C}, // - {0xBFA5, 0x9A8F}, //{0xE9, 0xAA, 0x8F}, // - {0xC6EF, 0x9A91}, //{0xE9, 0xAA, 0x91}, // + {0xCDD5, 0x9A7C}, //{0xE9, 0xA9, 0xBC}, // �� + {0xBCDD, 0x9A7E}, //{0xE9, 0xA9, 0xBE}, // �� + {0xC2EE, 0x9A82}, //{0xE9, 0xAA, 0x82}, // �� + {0xBDBE, 0x9A84}, //{0xE9, 0xAA, 0x84}, // �� + {0xC2E6, 0x9A86}, //{0xE9, 0xAA, 0x86}, // �� + {0xBAA7, 0x9A87}, //{0xE9, 0xAA, 0x87}, // �� + {0xD1E9, 0x9A8C}, //{0xE9, 0xAA, 0x8C}, // �� + {0xBFA5, 0x9A8F}, //{0xE9, 0xAA, 0x8F}, // �� + {0xC6EF, 0x9A91}, //{0xE9, 0xAA, 0x91}, // �� {0xC6AD, 0x9A97}, //{0xE9, 0xAA, 0x97}, // ƭ {0xC9A7, 0x9A9A}, //{0xE9, 0xAA, 0x9A}, // ɧ - {0xC2E2, 0x9AA1}, //{0xE9, 0xAA, 0xA1}, // - {0xD6E8, 0x9AA4}, //{0xE9, 0xAA, 0xA4}, // - {0xB9C7, 0x9AA8}, //{0xE9, 0xAA, 0xA8}, // - {0xCBE8, 0x9AD3}, //{0xE9, 0xAB, 0x93}, // - {0xB8DF, 0x9AD8}, //{0xE9, 0xAB, 0x98}, // - {0xF7DE, 0x9B13}, //{0xE9, 0xAC, 0x93}, // - {0xB9ED, 0x9B3C}, //{0xE9, 0xAC, 0xBC}, // - {0xBFFD, 0x9B41}, //{0xE9, 0xAD, 0x81}, // - {0xBBEA, 0x9B42}, //{0xE9, 0xAD, 0x82}, // - {0xC6C7, 0x9B44}, //{0xE9, 0xAD, 0x84}, // + {0xC2E2, 0x9AA1}, //{0xE9, 0xAA, 0xA1}, // �� + {0xD6E8, 0x9AA4}, //{0xE9, 0xAA, 0xA4}, // �� + {0xB9C7, 0x9AA8}, //{0xE9, 0xAA, 0xA8}, // �� + {0xCBE8, 0x9AD3}, //{0xE9, 0xAB, 0x93}, // �� + {0xB8DF, 0x9AD8}, //{0xE9, 0xAB, 0x98}, // �� + {0xF7DE, 0x9B13}, //{0xE9, 0xAC, 0x93}, // �� + {0xB9ED, 0x9B3C}, //{0xE9, 0xAC, 0xBC}, // �� + {0xBFFD, 0x9B41}, //{0xE9, 0xAD, 0x81}, // �� + {0xBBEA, 0x9B42}, //{0xE9, 0xAD, 0x82}, // �� + {0xC6C7, 0x9B44}, //{0xE9, 0xAD, 0x84}, // �� {0xCEBA, 0x9B4F}, //{0xE9, 0xAD, 0x8F}, // κ {0xC4A7, 0x9B54}, //{0xE9, 0xAD, 0x94}, // ħ - {0xD3E3, 0x9C7C}, //{0xE9, 0xB1, 0xBC}, // + {0xD3E3, 0x9C7C}, //{0xE9, 0xB1, 0xBC}, // �� {0xC2B3, 0x9C81}, //{0xE9, 0xB2, 0x81}, // ³ - {0xCFCA, 0x9C9C}, //{0xE9, 0xB2, 0x9C}, // - {0xC0F0, 0x9CA4}, //{0xE9, 0xB2, 0xA4}, // - {0xF6EA, 0x9CAB}, //{0xE9, 0xB2, 0xAB}, // - {0xBEA8, 0x9CB8}, //{0xE9, 0xB2, 0xB8}, // - {0xF6F9, 0x9CC4}, //{0xE9, 0xB3, 0x84}, // - {0xF7A2, 0x9CCD}, //{0xE9, 0xB3, 0x8D}, // - {0xB1EE, 0x9CD6}, //{0xE9, 0xB3, 0x96}, // - {0xC1DB, 0x9CDE}, //{0xE9, 0xB3, 0x9E}, // - {0xC4F1, 0x9E1F}, //{0xE9, 0xB8, 0x9F}, // - {0xF0AF, 0x9E20}, //{0xE9, 0xB8, 0xA0}, // - {0xBCA6, 0x9E21}, //{0xE9, 0xB8, 0xA1}, // - {0xC3F9, 0x9E23}, //{0xE9, 0xB8, 0xA3}, // + {0xCFCA, 0x9C9C}, //{0xE9, 0xB2, 0x9C}, // �� + {0xC0F0, 0x9CA4}, //{0xE9, 0xB2, 0xA4}, // �� + {0xF6EA, 0x9CAB}, //{0xE9, 0xB2, 0xAB}, // �� + {0xBEA8, 0x9CB8}, //{0xE9, 0xB2, 0xB8}, // �� + {0xF6F9, 0x9CC4}, //{0xE9, 0xB3, 0x84}, // �� + {0xF7A2, 0x9CCD}, //{0xE9, 0xB3, 0x8D}, // �� + {0xB1EE, 0x9CD6}, //{0xE9, 0xB3, 0x96}, // �� + {0xC1DB, 0x9CDE}, //{0xE9, 0xB3, 0x9E}, // �� + {0xC4F1, 0x9E1F}, //{0xE9, 0xB8, 0x9F}, // �� + {0xF0AF, 0x9E20}, //{0xE9, 0xB8, 0xA0}, // � + {0xBCA6, 0x9E21}, //{0xE9, 0xB8, 0xA1}, // �� + {0xC3F9, 0x9E23}, //{0xE9, 0xB8, 0xA3}, // �� {0xC5B8, 0x9E25}, //{0xE9, 0xB8, 0xA5}, // Ÿ {0xD1BB, 0x9E26}, //{0xE9, 0xB8, 0xA6}, // ѻ {0xD1BC, 0x9E2D}, //{0xE9, 0xB8, 0xAD}, // Ѽ - {0xD1EC, 0x9E2F}, //{0xE9, 0xB8, 0xAF}, // + {0xD1EC, 0x9E2F}, //{0xE9, 0xB8, 0xAF}, // �� {0xD4A7, 0x9E33}, //{0xE9, 0xB8, 0xB3}, // ԧ - {0xCDD2, 0x9E35}, //{0xE9, 0xB8, 0xB5}, // - {0xB8EB, 0x9E3D}, //{0xE9, 0xB8, 0xBD}, // - {0xBAE8, 0x9E3F}, //{0xE9, 0xB8, 0xBF}, // - {0xBEE9, 0x9E43}, //{0xE9, 0xB9, 0x83}, // - {0xB6EC, 0x9E45}, //{0xE9, 0xB9, 0x85}, // - {0xF0C4, 0x9E49}, //{0xE9, 0xB9, 0x89}, // + {0xCDD2, 0x9E35}, //{0xE9, 0xB8, 0xB5}, // �� + {0xB8EB, 0x9E3D}, //{0xE9, 0xB8, 0xBD}, // �� + {0xBAE8, 0x9E3F}, //{0xE9, 0xB8, 0xBF}, // �� + {0xBEE9, 0x9E43}, //{0xE9, 0xB9, 0x83}, // �� + {0xB6EC, 0x9E45}, //{0xE9, 0xB9, 0x85}, // �� + {0xF0C4, 0x9E49}, //{0xE9, 0xB9, 0x89}, // �� {0xC8B5, 0x9E4A}, //{0xE9, 0xB9, 0x8A}, // ȵ - {0xC5F4, 0x9E4F}, //{0xE9, 0xB9, 0x8F}, // - {0xBAD7, 0x9E64}, //{0xE9, 0xB9, 0xA4}, // - {0xF0D0, 0x9E66}, //{0xE9, 0xB9, 0xA6}, // + {0xC5F4, 0x9E4F}, //{0xE9, 0xB9, 0x8F}, // �� + {0xBAD7, 0x9E64}, //{0xE9, 0xB9, 0xA4}, // �� + {0xF0D0, 0x9E66}, //{0xE9, 0xB9, 0xA6}, // �� {0xD3A5, 0x9E70}, //{0xE9, 0xB9, 0xB0}, // ӥ {0xC2B9, 0x9E7F}, //{0xE9, 0xB9, 0xBF}, // ¹ - {0xC2F3, 0x9EA6}, //{0xE9, 0xBA, 0xA6}, // - {0xF4EF, 0x9EB8}, //{0xE9, 0xBA, 0xB8}, // - {0xC2E9, 0x9EBB}, //{0xE9, 0xBA, 0xBB}, // - {0xBBC6, 0x9EC4}, //{0xE9, 0xBB, 0x84}, // - {0xCAF2, 0x9ECD}, //{0xE9, 0xBB, 0x8D}, // - {0xC0E8, 0x9ECE}, //{0xE9, 0xBB, 0x8E}, // - {0xBADA, 0x9ED1}, //{0xE9, 0xBB, 0x91}, // + {0xC2F3, 0x9EA6}, //{0xE9, 0xBA, 0xA6}, // �� + {0xF4EF, 0x9EB8}, //{0xE9, 0xBA, 0xB8}, // �� + {0xC2E9, 0x9EBB}, //{0xE9, 0xBA, 0xBB}, // �� + {0xBBC6, 0x9EC4}, //{0xE9, 0xBB, 0x84}, // �� + {0xCAF2, 0x9ECD}, //{0xE9, 0xBB, 0x8D}, // �� + {0xC0E8, 0x9ECE}, //{0xE9, 0xBB, 0x8E}, // �� + {0xBADA, 0x9ED1}, //{0xE9, 0xBB, 0x91}, // �� {0xC7AD, 0x9ED4}, //{0xE9, 0xBB, 0x94}, // ǭ {0xC4AC, 0x9ED8}, //{0xE9, 0xBB, 0x98}, // Ĭ - {0xB6A6, 0x9F0E}, //{0xE9, 0xBC, 0x8E}, // - {0xB9C4, 0x9F13}, //{0xE9, 0xBC, 0x93}, // - {0xCAF3, 0x9F20}, //{0xE9, 0xBC, 0xA0}, // - {0xB1C7, 0x9F3B}, //{0xE9, 0xBC, 0xBB}, // - {0xC6EB, 0x9F50}, //{0xE9, 0xBD, 0x90}, // - {0xB3DD, 0x9F7F}, //{0xE9, 0xBD, 0xBF}, // - {0xC1E4, 0x9F84}, //{0xE9, 0xBE, 0x84}, // - {0xC1FA, 0x9F99}, //{0xE9, 0xBE, 0x99}, // - {0xB9EA, 0x9F9F}, //{0xE9, 0xBE, 0x9F}, // + {0xB6A6, 0x9F0E}, //{0xE9, 0xBC, 0x8E}, // �� + {0xB9C4, 0x9F13}, //{0xE9, 0xBC, 0x93}, // �� + {0xCAF3, 0x9F20}, //{0xE9, 0xBC, 0xA0}, // �� + {0xB1C7, 0x9F3B}, //{0xE9, 0xBC, 0xBB}, // �� + {0xC6EB, 0x9F50}, //{0xE9, 0xBD, 0x90}, // �� + {0xB3DD, 0x9F7F}, //{0xE9, 0xBD, 0xBF}, // �� + {0xC1E4, 0x9F84}, //{0xE9, 0xBE, 0x84}, // �� + {0xC1FA, 0x9F99}, //{0xE9, 0xBE, 0x99}, // �� + {0xB9EA, 0x9F9F}, //{0xE9, 0xBE, 0x9F}, // �� #endif }; static const unsigned short table_BIG5_to_UCS2[][2] = { @@ -24826,7 +24833,7 @@ static const unsigned short table_BIG5_to_UCS2[][2] = { 0xFEFD,0xE30F, 0xFEFE,0xE310, }; - +#endif #define NUMOF_TAB_GBK_TO_UCS2 sizeof(table_GBK_to_UCS2)/sizeof(table_GBK_to_UCS2[0]) #define NUMOF_TAB_BIG5_TO_UCS2 sizeof(table_BIG5_to_UCS2)/sizeof(table_BIG5_to_UCS2[0]) @@ -25205,7 +25212,7 @@ bool is_str_utf8(const char* str) if ((chr & 0xC0) != 0x80) { return false; } - //ΪΪֹ + //����Ϊ��Ϊֹ nBytes--; } } diff --git a/platform/vendor_bsp/LN/ln882x/src/utils/system_parameter.c b/platform/vendor_bsp/LN/ln882x/src/utils/system_parameter.c index bffe8fb6aad225f178061f9216fdc8112f713d77..c5da34d5039b3309a652d843613da0c26c184d9a 100644 --- a/platform/vendor_bsp/LN/ln882x/src/utils/system_parameter.c +++ b/platform/vendor_bsp/LN/ln882x/src/utils/system_parameter.c @@ -17,10 +17,6 @@ typedef struct { uint8_t ap_hostname[NETIF_HOSTNAME_LEN_MAX+1]; } hostname_t; -typedef struct { - wifi_psk_info_t psk_info_list[WIFI_PSK_INFO_LIST_SIZE]; -} wifi_psk_info_list_t; - typedef enum { WIFI_COMMON_CONFIG = 0, WIFI_STA_CONFIG, @@ -42,7 +38,6 @@ typedef struct system_parameter{ uint8_t dhcp_sw_config; hostname_t hostname_cfg; server_config_t dhcpd_config; - wifi_psk_info_list_t psk_info_list; OS_Mutex_t lock; }system_parameter_t; @@ -58,7 +53,6 @@ typedef struct { uint8_t dhcp_sw_config; hostname_t hostname_cfg; server_config_t dhcpd_config; - wifi_psk_info_list_t psk_info_list; }item; } system_param_item_t; @@ -221,13 +215,6 @@ void system_parameter_sync_to_flash(system_param_item_t *param_item) } break; - case WIFI_PSK_INFO: { - cache_content = (uint8_t *)&(param_item->item.psk_info_list); - len = sizeof(wifi_psk_info_list_t); - start = (uint8_t *)&(system_parameter->psk_info_list) - system_parameter_base; - } - break; - default: break; } @@ -325,111 +312,6 @@ int system_parameter_get_config(wifi_interface_enum_t if_index, wifi_config_t *c return 0; } -static int system_parameter_set_psk_info_list(wifi_psk_info_list_t *psk_info_list) -{ - system_parameter_t *system_parameter = get_system_parameter_handle(); - system_param_item_t *param_item = get_param_item_cache(); - - ART_ASSERT(system_parameter && psk_info_list); - OS_MutexLock(&system_parameter->lock, OS_WAIT_FOREVER); - param_item->item_id = (uint32_t)WIFI_PSK_INFO; - memcpy(¶m_item->item.psk_info_list, psk_info_list, sizeof(wifi_psk_info_list_t)); - system_parameter_sync_to_flash(param_item); - OS_MutexUnlock(&system_parameter->lock); - return 0; -} -static int system_parameter_get_psk_info_list( wifi_psk_info_list_t *psk_info_list) -{ - system_parameter_t *system_parameter = get_system_parameter_handle(); - - ART_ASSERT(system_parameter && psk_info_list); - OS_MutexLock(&system_parameter->lock, OS_WAIT_FOREVER); - memcpy(psk_info_list, &(system_parameter->psk_info_list), sizeof(wifi_psk_info_list_t)); - OS_MutexUnlock(&system_parameter->lock); - return 0; -} - -//PSK info -int system_parameter_set_psk_info(wifi_psk_info_t *psk_info) -{ - int i, idx_idle = -1; - wifi_psk_info_t *wifi_psk_info = NULL; - wifi_psk_info_list_t wifi_psk_info_list = {0,}; - bool need_flush = false; - - ART_ASSERT(psk_info); - - if(0 == system_parameter_get_psk_info_list(&wifi_psk_info_list)) - { - for(i = 0; i < (sizeof(wifi_psk_info_list_t)/sizeof(wifi_psk_info_t)); i++){ - wifi_psk_info = &(wifi_psk_info_list.psk_info_list[i]); - //Got it - if((psk_info->ssid_len == wifi_psk_info->ssid_len) - && (psk_info->password_len == wifi_psk_info->password_len) - && ((psk_info->password_len > 0) && !memcmp(psk_info->password, wifi_psk_info->password, psk_info->password_len)) - && ((psk_info->ssid_len > 0) && !memcmp(psk_info->ssid, wifi_psk_info->ssid, psk_info->ssid_len))){ - break; - } - - //First idle - if((idx_idle < 0) - && (psk_info->password_len == 0) - && (psk_info->ssid_len == 0)){ - idx_idle = i; - } - } - if(i < (sizeof(wifi_psk_info_list_t)/sizeof(wifi_psk_info_t))){//already in list - wifi_psk_info = &(wifi_psk_info_list.psk_info_list[i]); - if(memcmp(psk_info->psk, wifi_psk_info->psk, 40) != 0){//update - memcpy(wifi_psk_info->psk, psk_info->psk, 40); - need_flush = true; - } - }else if(idx_idle >= 0 && idx_idle < (sizeof(wifi_psk_info_list_t)/sizeof(wifi_psk_info_t))){ - wifi_psk_info = &(wifi_psk_info_list.psk_info_list[i]); - memcpy(wifi_psk_info, psk_info, sizeof(wifi_psk_info_t)); - need_flush = true; - }else{ - wifi_psk_info = &(wifi_psk_info_list.psk_info_list[0]); - memcpy(wifi_psk_info, psk_info, sizeof(wifi_psk_info_t)); - need_flush = true; - } - - if(need_flush){ - system_parameter_set_psk_info_list(&wifi_psk_info_list); - } - return 0; - } - return -1; -} -int system_parameter_get_psk_info(wifi_psk_info_t *psk_info) -{ - int i; - wifi_psk_info_t *wifi_psk_info = NULL; - wifi_psk_info_list_t wifi_psk_info_list = {0,}; - - ART_ASSERT(psk_info); - - if(0 == system_parameter_get_psk_info_list(&wifi_psk_info_list)) - { - for(i = 0; i < (sizeof(wifi_psk_info_list_t)/sizeof(wifi_psk_info_t)); i++){ - wifi_psk_info = &(wifi_psk_info_list.psk_info_list[i]); - //Got it - if((psk_info->ssid_len == wifi_psk_info->ssid_len) - && (psk_info->password_len == wifi_psk_info->password_len) - && ((psk_info->password_len > 0) && !memcmp(psk_info->password, wifi_psk_info->password, psk_info->password_len)) - && ((psk_info->ssid_len > 0) && !memcmp(psk_info->ssid, wifi_psk_info->ssid, psk_info->ssid_len))){ - break; - } - } - if(i < (sizeof(wifi_psk_info_list_t)/sizeof(wifi_psk_info_t))){//already in list - wifi_psk_info = &(wifi_psk_info_list.psk_info_list[i]); - memcpy(psk_info, wifi_psk_info, sizeof(wifi_psk_info_t)); - return 0; - } - } - return -1; -} - //ip config int system_parameter_set_ip_config(wifi_interface_enum_t if_index, tcpip_ip_info_t *ip_config) { @@ -594,8 +476,12 @@ int system_parameter_get_wifi_config_default (wifi_interface_enum_t if_index, wi memcpy(ap->ssid, WIFI_AP_SSID_DEFAULT, ap->ssid_len); len = (strlen(WIFI_AP_PASSWORD_DEFAULT) < PASSWORD_MAX_LEN) ? strlen(WIFI_AP_PASSWORD_DEFAULT) : PASSWORD_MAX_LEN; memcpy(ap->password, WIFI_AP_PASSWORD_DEFAULT, len); + if(strlen((const char *)ap->password) > 0){ + ap->authmode = WIFI_AUTH_WPA2_PSK; + }else{ + ap->authmode = WIFI_AP_AUTH_MODE_DEFAULT; + } ap->channel = WIFI_AP_CHANNEL_DEFAULT; - ap->authmode = WIFI_AP_AUTH_MODE_DEFAULT; ap->ssid_hidden = WIFI_AP_SSID_HIDDEN_DEFAULT; ap->max_connection = WIFI_AP_MAX_CONNECTION_DEFAULT; ap->beacon_interval = WIFI_AP_BEACON_INTERVAL_DEFAULT; diff --git a/platform/vendor_bsp/LN/ln882x/src/wifi/wifi_manager/wifi_manager.c b/platform/vendor_bsp/LN/ln882x/src/wifi/wifi_manager/wifi_manager.c index 3e5969cd3312f4df17b23d4e03f643740064b68d..c617b68d75ea570995677a2123eb1c3741647cd1 100644 --- a/platform/vendor_bsp/LN/ln882x/src/wifi/wifi_manager/wifi_manager.c +++ b/platform/vendor_bsp/LN/ln882x/src/wifi/wifi_manager/wifi_manager.c @@ -7,7 +7,7 @@ #include "dhcpd/dhcpd.h" #define WIFI_MANAGER_TASK_STACK_SIZE 5*256 //Byte -#define WIFI_MSG_QUEUE_DEPTH 5 +#define WIFI_MSG_QUEUE_DEPTH 10 struct wifi_manager_ctrl{ @@ -17,8 +17,14 @@ struct wifi_manager_ctrl{ }; static wifi_manager_ctrl_t gwifi_manager_ctrl= {0,}; -bool reg_wifi_msg_callbcak(wifi_manager_ctrl_t *manager_ctrl, wifi_msg_id_enum_t msg_id, wifi_msg_callback_fun callback_fun) +static wifi_manager_ctrl_t *wifi_manager_get_handle(void) { + return &gwifi_manager_ctrl; +} + +bool reg_wifi_msg_callbcak(wifi_msg_id_enum_t msg_id, wifi_msg_callback_fun callback_fun) +{ + wifi_manager_ctrl_t *manager_ctrl = wifi_manager_get_handle(); wifi_msg_handle_table_t *msg_handler_table = NULL; ART_ASSERT(manager_ctrl); @@ -57,15 +63,11 @@ static void wifi_manager_task_entry(void *params) case WIFI_MSG_ID_STA_READY: //turn on WIFI LED - #if (WIFI_TRACK==0) - LOG(LOG_LVL_INFO, "[%s, %d]WIFI_MSG_ID_WIFI_READY\r\n", __func__, __LINE__); - #endif + LOG(LOG_LVL_TRACE, "[%s, %d]WIFI_MSG_ID_WIFI_READY\r\n", __func__, __LINE__); break; case WIFI_MSG_ID_STA_SCAN_DONE: - #if (WIFI_TRACK==0) - LOG(LOG_LVL_INFO, "[%s, %d]WIFI_MSG_ID_STA_SCAN_DONE\r\n", __func__, __LINE__); - #endif + LOG(LOG_LVL_TRACE, "[%s, %d]WIFI_MSG_ID_STA_SCAN_DONE\r\n", __func__, __LINE__); //update ap list break; @@ -151,9 +153,10 @@ static void wifi_manager_task_entry(void *params) } } -bool wifi_manager_init(wifi_manager_ctrl_t *manager_ctrl) +bool wifi_manager_init(void) { OS_Status ret = OS_OK; + wifi_manager_ctrl_t *manager_ctrl = wifi_manager_get_handle(); ART_ASSERT(manager_ctrl); ret = OS_QueueCreate(&manager_ctrl->wifi_manager_msgq, WIFI_MSG_QUEUE_DEPTH, sizeof(wifi_msg_t)); @@ -169,11 +172,12 @@ bool wifi_manager_init(wifi_manager_ctrl_t *manager_ctrl) return true; } -bool wifi_manager_deinit(wifi_manager_ctrl_t *manager_ctrl) +bool wifi_manager_deinit(void) { OS_Status ret = OS_OK; - ART_ASSERT(manager_ctrl); + wifi_manager_ctrl_t *manager_ctrl = wifi_manager_get_handle(); + ART_ASSERT(manager_ctrl); ret = OS_ThreadDelete(&manager_ctrl->wifi_manager_thread); if (ret != OS_OK){ LOG(LOG_LVL_ERROR, "[%s, %d]OS_ThreadDelete manager_ctrl->wifi_manager_thread fail.\r\n", __func__, __LINE__); @@ -188,9 +192,4 @@ bool wifi_manager_deinit(wifi_manager_ctrl_t *manager_ctrl) return true; } -wifi_manager_ctrl_t *wifi_manager_get_handle(void) -{ - return &gwifi_manager_ctrl; -} - diff --git a/platform/vendor_bsp/LN/ln882x/src/wifi/wifi_port/itypes.h b/platform/vendor_bsp/LN/ln882x/src/wifi/wifi_port/itypes.h new file mode 100644 index 0000000000000000000000000000000000000000..a8a9b6d832462bc93ee057dd5f011dc2eb8b8cf5 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/wifi/wifi_port/itypes.h @@ -0,0 +1,52 @@ +/*---------------------------------------------------------------------------* + | @author : LightningSemi WLAN Software Team | + | @version : V2.0.0 | + | @date : 1-May-2018 | + | @brief : IEEE 802.11 a/b/g/e/i/n MAC Software | + |---------------------------------------------------------------------------| + | COPYRIGHT(c) 2018 LightningSemi | + *---------------------------------------------------------------------------*/ + + +/*****************************************************************************/ +/* */ +/* File Name : itypes.h */ +/* */ +/* Description : This file contains all the data type definitions for */ +/* MAC implementation. */ +/* */ +/* List of Functions : None */ +/* Issues / Problems : None */ +/* */ +/*****************************************************************************/ + +#ifndef ITYPES_H +#define ITYPES_H + +/*****************************************************************************/ +/* Constants */ +/*****************************************************************************/ + +#define INLINE static __inline + +/*****************************************************************************/ +/* Data Types */ +/*****************************************************************************/ + +typedef int WORD32; +typedef short WORD16; +typedef char WORD8; +typedef unsigned int UWORD32; +typedef unsigned short UWORD16; +typedef unsigned char UWORD8; +typedef signed char SWORD8; + +/*****************************************************************************/ +/* Enums */ +/*****************************************************************************/ + +typedef enum {BFALSE = 0, + BTRUE = 1 +} BOOL_T; + +#endif /* ITYPES_H */ diff --git a/platform/vendor_bsp/LN/ln882x/src/wifi/wifi_port/wifi_port.c b/platform/vendor_bsp/LN/ln882x/src/wifi/wifi_port/wifi_port.c new file mode 100644 index 0000000000000000000000000000000000000000..8ede4e457c6619fee973837af4be73e8d5809d53 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/wifi/wifi_port/wifi_port.c @@ -0,0 +1,62 @@ +#include "wifi_port.h" +#include "ln_kv_err.h" +#include "ln_kv_api.h" +#include "itypes.h" +#include "osal/osal.h" + +#define KV_PSK_INFO ("kv_psk_info") + +/* restore/store psk info */ +int kv_set_psk_info_list(uint8_t *v_buf, uint32_t buf_len) +{ + if (KV_ERR_NONE != ln_kv_set((const char *)KV_PSK_INFO, v_buf, (size_t)buf_len)) { + return BFALSE; + } + return BTRUE; +} + +int kv_get_psk_info_list(uint8_t *v_buf, uint32_t buf_len) +{ + size_t len; + if (KV_ERR_NONE != ln_kv_get((const char *)KV_PSK_INFO, v_buf, (size_t)buf_len, &len)) { + return BFALSE; + } + return BTRUE; +} + +int kv_has_psk_info_list(void) +{ + size_t len; + if (LN_TRUE == ln_kv_has_key((const char *)KV_PSK_INFO)) { + return BTRUE; + } + return BFALSE; +} + +/* heap memory manager */ +void *mac_malloc(uint32_t size) +{ + return OS_Malloc(size); +} + +void mac_free(void *ptr) +{ + OS_Free(ptr); +} + + + + + + + + + + + + + + + + + diff --git a/platform/vendor_bsp/LN/ln882x/src/wifi/wifi_port/wifi_port.h b/platform/vendor_bsp/LN/ln882x/src/wifi/wifi_port/wifi_port.h new file mode 100644 index 0000000000000000000000000000000000000000..fccaa1c88628b3324b9946d801977057e736bea8 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/src/wifi/wifi_port/wifi_port.h @@ -0,0 +1,15 @@ +#ifndef __WIFI_PORT_H__ +#define __WIFI_PORT_H__ + +#include "ln_types.h" + +int kv_has_psk_info_list(void); +int kv_set_psk_info_list(uint8_t *v_buf, uint32_t buf_len); +int kv_get_psk_info_list(uint8_t *v_buf, uint32_t buf_len); + +void *mac_malloc(uint32_t size); +void mac_free(void *ptr); + + +#endif /* __WIFI_PORT_H__ */ + diff --git a/platform/vendor_bsp/LN/ln882x/tools/bin/fpu_patch.exe b/platform/vendor_bsp/LN/ln882x/tools/bin/fpu_patch.exe deleted file mode 100644 index 81e2a53754afdf2b9cc002e59ead3fe64a7dbfd0..0000000000000000000000000000000000000000 Binary files a/platform/vendor_bsp/LN/ln882x/tools/bin/fpu_patch.exe and /dev/null differ diff --git a/platform/vendor_bsp/LN/ln882x/tools/bin/mkimage.exe b/platform/vendor_bsp/LN/ln882x/tools/bin/mkimage.exe index 52c00aad98a20a8967fca79c72e7c74842817e64..f9cbb2db0aeecd0c3694b71d832df58d13c81723 100644 Binary files a/platform/vendor_bsp/LN/ln882x/tools/bin/mkimage.exe and b/platform/vendor_bsp/LN/ln882x/tools/bin/mkimage.exe differ diff --git a/platform/vendor_bsp/LN/ln882x/tools/user_cmd/before_build.py b/platform/vendor_bsp/LN/ln882x/tools/user_cmd/before_build.py new file mode 100644 index 0000000000000000000000000000000000000000..8c8d701b244cbf0abad8ec77c7e6f5b9f8446040 --- /dev/null +++ b/platform/vendor_bsp/LN/ln882x/tools/user_cmd/before_build.py @@ -0,0 +1,86 @@ +#!env python3 +# -*- coding: utf-8 -*- +# @Time : 2020/5/10 11:53 +# @Author : WuLiang +# @FileName: before_build.py +# @Software: PyCharm + +import json +import sys + +ALIGN = "32" +image_header_size = "0x100" + +def json2macro(rfile_path,wfile_path): + result = dict() + try: + with open(rfile_path,'r',encoding='utf-8') as f: + result = json.loads(f.read()) + except Exception as e: + pass + + with open(wfile_path, "w+") as f: + file_v = wfile_path.split("\\")[-1].replace(".h","").upper() + startcomment = "#ifndef __" + file_v + "__\n#define __" + file_v + "__\n\n\n//flash partition map,it's generated by the script based on the json file \n" + f.writelines(startcomment) + + count = 0 + last_name1 = "" + last_name2 = "" + for key,value in result.items(): + try: + if key not in ["Warning1","Warning2"]: + for i in value: + name1 = i['partition_type'] + "_SPACE_OFFSET" + name2 = i['partition_type'] + "_SPACE_SIZE" + + temp1 = "".join(["#define ", format(name1," <"+ALIGN), " (", i['start_addr'], ")"]) + temp2 = "".join(["#define ", format(name2," <"+ALIGN), " (1024*", str(i['size_KB']), ')']) + + f.writelines("\n"+temp1+"\n") + f.writelines(temp2+"\n") + + if (count > 0): + temp3 = "".join(["#if (", name1, " < (", last_name1, " + ", last_name2, "))"]) + f.writelines(temp3 + "\n") + f.writelines(" #error \"flash partition overlap,please check !!!\"\n") + f.writelines("#endif\n") + + count = count + 1 + last_name1 = name1 + last_name2 = name2 + except Exception as e: + print(e) + + + temp = "".join(["\n\n#define ", format("IMAGE_HEADER_SIZE"," <"+ALIGN), " ", "("+image_header_size+")"]) + f.writelines(temp) + endcommont = "\n\n#endif /* __" + file_v + "__ */\n\n" + f.writelines(endcommont) + + +def main(argv): + arg_count = len(sys.argv) + # print("arg count = ", arg_count) + # print(sys.argv[1]) + # print(sys.argv[2]) + + if arg_count == 3: + rfile_path = sys.argv[1] + wfile_path = sys.argv[2] + json2macro(rfile_path, wfile_path) + else: + assert arg_count == 3 + + +if __name__ == "__main__": + version = sys.version.split(' ')[0] + if version < str(3): + print("pyhton version is too low,please install python3 !\n") + assert version < str(3) + else: + main(sys.argv) + + + + diff --git a/platform/vendor_bsp/LN/ln882x/tools/user_cmd/gen_flash.exe b/platform/vendor_bsp/LN/ln882x/tools/user_cmd/gen_flash.exe deleted file mode 100644 index af0e394b37f2e668143451fce23be72357c465f9..0000000000000000000000000000000000000000 Binary files a/platform/vendor_bsp/LN/ln882x/tools/user_cmd/gen_flash.exe and /dev/null differ